x4js 1.6.5 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -14
- package/lib/README.txt +3 -14
- package/lib/esm/x4.css +1 -0
- package/lib/esm/x4.js +1 -0
- package/lib/src/assets/house-light.svg +1 -0
- package/lib/src/assets/radio.svg +4 -0
- package/lib/src/components/base.scss +26 -0
- package/lib/src/components/boxes/boxes.module.scss +37 -0
- package/lib/src/components/boxes/boxes.ts +125 -0
- package/lib/src/components/btngroup/btngroup.module.scss +29 -0
- package/lib/src/components/btngroup/btngroup.ts +106 -0
- package/lib/src/components/button/button.module.scss +154 -0
- package/lib/src/components/button/button.ts +117 -0
- package/lib/src/components/calendar/calendar-check-sharp-light.svg +1 -0
- package/lib/src/components/calendar/calendar.module.scss +163 -0
- package/lib/src/{calendar.ts → components/calendar/calendar.ts} +81 -83
- package/lib/src/components/calendar/chevron-left-sharp-light.svg +1 -0
- package/lib/src/components/calendar/chevron-right-sharp-light.svg +1 -0
- package/lib/src/components/checkbox/check.svg +4 -0
- package/lib/src/components/checkbox/checkbox.module.scss +142 -0
- package/lib/src/components/checkbox/checkbox.ts +125 -0
- package/lib/src/components/colorinput/colorinput.module.scss +65 -0
- package/lib/src/components/colorinput/colorinput.ts +88 -0
- package/lib/src/components/colorinput/crosshairs-simple-sharp-light.svg +1 -0
- package/lib/src/components/colorpicker/colorpicker.module.scss +133 -0
- package/lib/src/components/colorpicker/colorpicker.ts +477 -0
- package/lib/src/components/combobox/combobox.module.scss +121 -0
- package/lib/src/components/combobox/combobox.ts +190 -0
- package/lib/src/components/combobox/updown.svg +4 -0
- package/lib/src/components/dialog/dialog.module.scss +71 -0
- package/lib/src/components/dialog/dialog.ts +91 -0
- package/lib/src/components/dialog/xmark-sharp-light.svg +1 -0
- package/lib/src/components/form/form.module.scss +34 -0
- package/lib/src/components/form/form.ts +36 -0
- package/lib/src/components/header/header.module.scss +40 -0
- package/lib/src/components/header/header.ts +124 -0
- package/lib/src/components/icon/icon.module.scss +30 -0
- package/lib/src/components/icon/icon.ts +134 -0
- package/lib/src/components/image/image.module.scss +21 -0
- package/lib/src/components/image/image.ts +67 -0
- package/lib/src/components/input/input.module.scss +69 -0
- package/lib/src/components/input/input.ts +274 -0
- package/lib/src/components/label/label.module.scss +52 -0
- package/lib/src/components/label/label.ts +55 -0
- package/lib/src/components/listbox/listbox.module.scss +103 -0
- package/lib/src/components/listbox/listbox.ts +427 -0
- package/lib/src/components/menu/caret-right-solid.svg +1 -0
- package/lib/src/components/menu/menu.module.scss +108 -0
- package/lib/src/components/menu/menu.ts +168 -0
- package/lib/src/components/messages/circle-exclamation.svg +1 -0
- package/lib/src/components/messages/messages.module.scss +47 -0
- package/lib/src/components/messages/messages.ts +64 -0
- package/lib/src/components/normalize.scss +386 -0
- package/lib/src/components/notification/circle-check-solid.svg +1 -0
- package/lib/src/components/notification/circle-exclamation-solid.svg +1 -0
- package/lib/src/components/notification/circle-notch-light.svg +1 -0
- package/lib/src/components/notification/notification.module.scss +82 -0
- package/lib/src/components/notification/notification.ts +108 -0
- package/lib/src/components/notification/xmark-sharp-light.svg +1 -0
- package/lib/src/components/panel/panel.module.scss +48 -0
- package/lib/src/components/panel/panel.ts +57 -0
- package/lib/src/components/popup/popup.module.scss +43 -0
- package/lib/src/components/popup/popup.ts +395 -0
- package/lib/src/components/progress/progress.module.scss +57 -0
- package/lib/src/components/progress/progress.ts +43 -0
- package/lib/src/components/rating/rating.module.scss +23 -0
- package/lib/src/components/rating/rating.ts +125 -0
- package/lib/src/components/rating/star-sharp-light.svg +1 -0
- package/lib/src/components/rating/star-sharp-solid.svg +1 -0
- package/lib/src/components/shared.scss +76 -0
- package/lib/src/components/sizers/sizer.module.scss +90 -0
- package/lib/src/components/sizers/sizer.ts +120 -0
- package/lib/src/components/slider/slider.module.scss +71 -0
- package/lib/src/components/slider/slider.ts +143 -0
- package/lib/src/components/switch/switch.module.scss +127 -0
- package/lib/src/components/switch/switch.ts +56 -0
- package/lib/src/components/tabs/tabs.module.scss +46 -0
- package/lib/src/components/tabs/tabs.ts +157 -0
- package/lib/src/components/textarea/textarea.module.scss +59 -0
- package/lib/src/components/textarea/textarea.ts +54 -0
- package/lib/src/components/textedit/textedit.module.scss +114 -0
- package/lib/src/components/textedit/textedit.ts +82 -0
- package/lib/src/components/themes.scss +77 -0
- package/lib/src/components/tooltips/circle-info-sharp-light.svg +1 -0
- package/lib/src/components/tooltips/tooltips.scss +51 -0
- package/lib/src/components/tooltips/tooltips.ts +103 -0
- package/lib/src/components/treeview/chevron-down-light.svg +1 -0
- package/lib/src/components/treeview/treeview.module.scss +116 -0
- package/lib/src/components/treeview/treeview.ts +403 -0
- package/lib/src/components/viewport/viewport.module.scss +25 -0
- package/lib/src/components/viewport/viewport.ts +38 -0
- package/lib/src/core/component.ts +979 -0
- package/lib/src/core/core_colors.ts +250 -0
- package/lib/src/{dom_events.ts → core/core_dom.ts} +195 -39
- package/lib/src/{drag_manager.ts → core/core_dragdrop.ts} +29 -44
- package/lib/src/core/core_element.ts +98 -0
- package/lib/src/core/core_events.ts +149 -0
- package/lib/src/{i18n.ts → core/core_i18n.ts} +43 -42
- package/lib/src/{router.ts → core/core_router.ts} +27 -40
- package/lib/src/core/core_styles.ts +215 -0
- package/lib/src/core/core_svg.ts +550 -0
- package/lib/src/core/core_tools.ts +673 -0
- package/lib/src/demo/assets/house-light.svg +1 -0
- package/lib/src/demo/assets/radio.svg +4 -0
- package/lib/src/demo/index.html +12 -0
- package/lib/src/demo/main.scss +21 -0
- package/lib/src/demo/main.tsx +323 -0
- package/lib/src/main.scss +21 -0
- package/lib/src/main.tsx +323 -0
- package/lib/src/x4.scss +19 -0
- package/lib/src/x4.ts +60 -0
- package/lib/types/x4.d.ts +26548 -0
- package/package.json +68 -59
- package/scripts/build.mjs +351 -0
- package/scripts/prepack.mjs +43 -0
- package/src/components/base.scss +26 -0
- package/src/components/boxes/boxes.module.scss +37 -0
- package/src/components/boxes/boxes.ts +125 -0
- package/src/components/btngroup/btngroup.module.scss +29 -0
- package/src/components/btngroup/btngroup.ts +106 -0
- package/src/components/button/button.module.scss +154 -0
- package/src/components/button/button.ts +117 -0
- package/src/components/calendar/calendar-check-sharp-light.svg +1 -0
- package/src/components/calendar/calendar.module.scss +163 -0
- package/src/components/calendar/calendar.ts +326 -0
- package/src/components/calendar/chevron-left-sharp-light.svg +1 -0
- package/src/components/calendar/chevron-right-sharp-light.svg +1 -0
- package/src/components/checkbox/check.svg +4 -0
- package/src/components/checkbox/checkbox.module.scss +142 -0
- package/src/components/checkbox/checkbox.ts +125 -0
- package/src/components/colorinput/colorinput.module.scss +65 -0
- package/src/components/colorinput/colorinput.ts +88 -0
- package/src/components/colorinput/crosshairs-simple-sharp-light.svg +1 -0
- package/src/components/colorpicker/colorpicker.module.scss +133 -0
- package/src/components/colorpicker/colorpicker.ts +477 -0
- package/src/components/combobox/combobox.module.scss +121 -0
- package/src/components/combobox/combobox.ts +190 -0
- package/src/components/combobox/updown.svg +4 -0
- package/src/components/dialog/dialog.module.scss +71 -0
- package/src/components/dialog/dialog.ts +91 -0
- package/src/components/dialog/xmark-sharp-light.svg +1 -0
- package/src/components/form/form.module.scss +34 -0
- package/src/components/form/form.ts +36 -0
- package/src/components/header/header.module.scss +40 -0
- package/src/components/header/header.ts +124 -0
- package/src/components/icon/icon.module.scss +30 -0
- package/src/components/icon/icon.ts +134 -0
- package/src/components/image/image.module.scss +21 -0
- package/src/components/image/image.ts +67 -0
- package/src/components/input/input.module.scss +69 -0
- package/src/components/input/input.ts +274 -0
- package/src/components/label/label.module.scss +52 -0
- package/src/components/label/label.ts +55 -0
- package/src/components/listbox/listbox.module.scss +103 -0
- package/src/components/listbox/listbox.ts +427 -0
- package/src/components/menu/caret-right-solid.svg +1 -0
- package/src/components/menu/menu.module.scss +108 -0
- package/src/components/menu/menu.ts +168 -0
- package/src/components/messages/circle-exclamation.svg +1 -0
- package/src/components/messages/messages.module.scss +47 -0
- package/src/components/messages/messages.ts +64 -0
- package/src/components/normalize.scss +386 -0
- package/src/components/notification/circle-check-solid.svg +1 -0
- package/src/components/notification/circle-exclamation-solid.svg +1 -0
- package/src/components/notification/circle-notch-light.svg +1 -0
- package/src/components/notification/notification.module.scss +82 -0
- package/src/components/notification/notification.ts +108 -0
- package/src/components/notification/xmark-sharp-light.svg +1 -0
- package/src/components/panel/panel.module.scss +48 -0
- package/src/components/panel/panel.ts +57 -0
- package/src/components/popup/popup.module.scss +43 -0
- package/src/components/popup/popup.ts +395 -0
- package/src/components/progress/progress.module.scss +57 -0
- package/src/components/progress/progress.ts +43 -0
- package/src/components/rating/rating.module.scss +23 -0
- package/src/components/rating/rating.ts +125 -0
- package/src/components/rating/star-sharp-light.svg +1 -0
- package/src/components/rating/star-sharp-solid.svg +1 -0
- package/src/components/shared.scss +76 -0
- package/src/components/sizers/sizer.module.scss +90 -0
- package/src/components/sizers/sizer.ts +120 -0
- package/src/components/slider/slider.module.scss +71 -0
- package/src/components/slider/slider.ts +143 -0
- package/src/components/switch/switch.module.scss +127 -0
- package/src/components/switch/switch.ts +56 -0
- package/src/components/tabs/tabs.module.scss +46 -0
- package/src/components/tabs/tabs.ts +157 -0
- package/src/components/textarea/textarea.module.scss +59 -0
- package/src/components/textarea/textarea.ts +54 -0
- package/src/components/textedit/textedit.module.scss +114 -0
- package/src/components/textedit/textedit.ts +82 -0
- package/src/components/themes.scss +77 -0
- package/src/components/tooltips/circle-info-sharp-light.svg +1 -0
- package/src/components/tooltips/tooltips.scss +51 -0
- package/src/components/tooltips/tooltips.ts +103 -0
- package/src/components/treeview/chevron-down-light.svg +1 -0
- package/src/components/treeview/treeview.module.scss +116 -0
- package/src/components/treeview/treeview.ts +403 -0
- package/src/components/viewport/viewport.module.scss +25 -0
- package/src/components/viewport/viewport.ts +38 -0
- package/src/core/component.ts +979 -0
- package/src/core/core_colors.ts +250 -0
- package/src/core/core_dom.ts +471 -0
- package/src/core/core_dragdrop.ts +201 -0
- package/src/core/core_element.ts +98 -0
- package/src/core/core_events.ts +149 -0
- package/src/core/core_i18n.ts +377 -0
- package/src/core/core_router.ts +221 -0
- package/src/core/core_styles.ts +215 -0
- package/src/core/core_svg.ts +550 -0
- package/src/core/core_tools.ts +673 -0
- package/src/demo/assets/house-light.svg +1 -0
- package/src/demo/assets/radio.svg +4 -0
- package/src/demo/index.html +12 -0
- package/src/demo/main.scss +21 -0
- package/src/demo/main.tsx +323 -0
- package/src/x4.scss +19 -0
- package/src/x4.ts +60 -0
- package/tsconfig.json +14 -0
- package/types/scss.d.ts +4 -0
- package/types/svg.d.ts +4 -0
- package/types/x4react.d.ts +9 -0
- package/lib/changelog.txt +0 -23
- package/lib/cjs/x4js.js +0 -39
- package/lib/cjs/x4js.js.map +0 -7
- package/lib/esm/x4js.mjs +0 -15972
- package/lib/esm/x4js.mjs.map +0 -7
- package/lib/licence.md +0 -21
- package/lib/src/MIT-license.md +0 -14
- package/lib/src/action.ts +0 -88
- package/lib/src/alpha.jpg +0 -0
- package/lib/src/app_sockets.ts +0 -81
- package/lib/src/application.ts +0 -262
- package/lib/src/autocomplete.ts +0 -232
- package/lib/src/base64.ts +0 -166
- package/lib/src/base_component.ts +0 -152
- package/lib/src/button.ts +0 -355
- package/lib/src/canvas.ts +0 -510
- package/lib/src/cardview.ts +0 -228
- package/lib/src/checkbox.ts +0 -188
- package/lib/src/color.ts +0 -752
- package/lib/src/colorpicker.ts +0 -1649
- package/lib/src/combobox.ts +0 -512
- package/lib/src/component.ts +0 -2367
- package/lib/src/copyright.txt +0 -27
- package/lib/src/datastore.ts +0 -1302
- package/lib/src/dialog.ts +0 -656
- package/lib/src/drawtext.ts +0 -355
- package/lib/src/fileupload.ts +0 -213
- package/lib/src/form.ts +0 -413
- package/lib/src/formatters.ts +0 -105
- package/lib/src/gridview.ts +0 -1185
- package/lib/src/icon.ts +0 -362
- package/lib/src/image.ts +0 -225
- package/lib/src/index.ts +0 -89
- package/lib/src/input.ts +0 -297
- package/lib/src/label.ts +0 -153
- package/lib/src/layout.ts +0 -442
- package/lib/src/link.ts +0 -86
- package/lib/src/listview.ts +0 -765
- package/lib/src/md5.ts +0 -438
- package/lib/src/menu.ts +0 -425
- package/lib/src/messagebox.ts +0 -224
- package/lib/src/panel.ts +0 -86
- package/lib/src/popup.ts +0 -494
- package/lib/src/property_editor.ts +0 -337
- package/lib/src/radiobtn.ts +0 -197
- package/lib/src/rating.ts +0 -135
- package/lib/src/request.ts +0 -300
- package/lib/src/settings.ts +0 -77
- package/lib/src/sidebarview.ts +0 -108
- package/lib/src/spreadsheet.ts +0 -1449
- package/lib/src/styles.ts +0 -343
- package/lib/src/svgcomponent.ts +0 -592
- package/lib/src/tabbar.ts +0 -151
- package/lib/src/tabview.ts +0 -110
- package/lib/src/textarea.ts +0 -235
- package/lib/src/textedit.ts +0 -533
- package/lib/src/toaster.ts +0 -80
- package/lib/src/tools.ts +0 -1473
- package/lib/src/tooltips.ts +0 -191
- package/lib/src/treeview.ts +0 -716
- package/lib/src/version.ts +0 -30
- package/lib/src/x4.less +0 -2242
- package/lib/src/x4dom.ts +0 -57
- package/lib/src/x4events.ts +0 -585
- package/lib/src/x4js.ts +0 -89
- package/lib/src/x4react.ts +0 -90
- package/lib/styles/x4.css +0 -1785
- package/lib/styles/x4.less +0 -2242
- package/lib/types/x4js.d.ts +0 -6728
- package/license.md +0 -21
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file core_element.ts
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
import { EventMap, EventSource } from './core_events.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export class CoreElement<E extends EventMap = EventMap> {
|
|
24
|
+
|
|
25
|
+
#events: EventSource<E>;
|
|
26
|
+
#timers: Map<string, Function>;
|
|
27
|
+
|
|
28
|
+
private __startTimer( name: string, ms: number, repeat: boolean, callback: ( ) => void ) {
|
|
29
|
+
if (!this.#timers) {
|
|
30
|
+
this.#timers = new Map();
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this.__stopTimer(name);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const id = (repeat ? setInterval : setTimeout)( callback, ms );
|
|
37
|
+
|
|
38
|
+
this.#timers.set(name, () => {
|
|
39
|
+
(repeat ? clearInterval : clearTimeout)(id);
|
|
40
|
+
this.#timers.delete(name)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private __stopTimer( name: string ) {
|
|
45
|
+
const clear = this.#timers.get(name);
|
|
46
|
+
if (clear) { clear(); }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
setTimeout( name: string, ms: number, callback: () => void ) {
|
|
50
|
+
this.__startTimer( name, ms, false, callback );
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
clearTimeout( name: string ) {
|
|
54
|
+
this.__stopTimer( name );
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
setInterval( name: string, ms: number, callback: ( ) => void ) {
|
|
58
|
+
this.__startTimer( name, ms, true, callback );
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
clearInterval( name: string ) {
|
|
62
|
+
this.__stopTimer( name );
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
clearTimeouts( ) {
|
|
66
|
+
for( const [id,val] of this.#timers ) {
|
|
67
|
+
val( );
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this.#timers.clear( );
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// :: EVENTS ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* attach to an event
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
on<K extends keyof E>( name: K, listener: ( ev: E[K] ) => void ) {
|
|
80
|
+
console.assert( listener!==undefined && listener!==null );
|
|
81
|
+
|
|
82
|
+
if( !this.#events ) {
|
|
83
|
+
this.#events = new EventSource( this );
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this.#events.addListener( name, listener );
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
*
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
fire<K extends keyof E>( name: K, ev: E[K] ) {
|
|
94
|
+
if( this.#events ) {
|
|
95
|
+
this.#events.fire( name, ev );
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file core_events.ts
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
import { CoreElement } from './core_element';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export interface CoreEvent {
|
|
24
|
+
readonly type?: string; // type of the event 'click', 'change', ...
|
|
25
|
+
readonly source?: CoreElement; // object that fires the event
|
|
26
|
+
readonly context?: any; // contextual data, left to the user
|
|
27
|
+
|
|
28
|
+
propagationStopped?: boolean; // if true, do not propagate the event
|
|
29
|
+
defaultPrevented?: boolean; // if true, do not call default handler (if any)
|
|
30
|
+
|
|
31
|
+
stopPropagation?(): void; // stop the propagation
|
|
32
|
+
preventDefault?(): void; // prevent the default handler
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// default stopPropagation implementation for Events
|
|
36
|
+
const stopPropagation = function ( this: CoreEvent ) {
|
|
37
|
+
this.propagationStopped = true;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// default preventDefault implementation for Events
|
|
41
|
+
const preventDefault = function ( this: CoreEvent ) {
|
|
42
|
+
this.defaultPrevented = true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
export interface EventMap {
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
export type EventCallback<T extends CoreEvent = CoreEvent> = (event: T) => any;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
*
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
export class EventSource<E extends EventMap = EventMap > {
|
|
64
|
+
|
|
65
|
+
private _source: unknown;
|
|
66
|
+
private _registry: Map<string,EventCallback[]>;
|
|
67
|
+
|
|
68
|
+
constructor(source: unknown = null) {
|
|
69
|
+
this._source = source ?? this;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
addListener<K extends keyof E>( name: K, callback: ( ev: E[K] ) => void, capturing = false ) {
|
|
73
|
+
|
|
74
|
+
if (!this._registry) {
|
|
75
|
+
this._registry = new Map();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
let listeners = this._registry.get(name as string);
|
|
79
|
+
if (!listeners) {
|
|
80
|
+
listeners = [];
|
|
81
|
+
this._registry.set(name as string, listeners);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const cb = callback as EventCallback;
|
|
85
|
+
|
|
86
|
+
if (listeners.indexOf(cb) == -1) {
|
|
87
|
+
if (capturing) {
|
|
88
|
+
listeners.unshift(cb);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
listeners.push(cb);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
fire<K extends keyof E>(name: K, evx: E[K]) {
|
|
97
|
+
|
|
98
|
+
let listeners = this._registry?.get(name as string);
|
|
99
|
+
//const defaultHandler = this.m_defaultHandlers?.get(eventName);
|
|
100
|
+
|
|
101
|
+
if (listeners && listeners.length) {
|
|
102
|
+
let ev = evx as CoreEvent;
|
|
103
|
+
if (!ev) {
|
|
104
|
+
ev = {};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!ev.source) {
|
|
108
|
+
// readonly
|
|
109
|
+
(ev as any).source = this._source;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (!ev.type) {
|
|
113
|
+
// readonly
|
|
114
|
+
(ev as any).type = name;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
if (!ev.preventDefault) {
|
|
119
|
+
ev.preventDefault = preventDefault;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (!ev.stopPropagation) {
|
|
123
|
+
ev.stopPropagation = stopPropagation;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// small optimisation
|
|
127
|
+
if (listeners.length == 1) {
|
|
128
|
+
listeners[0](ev);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const temp = listeners.slice();
|
|
132
|
+
for (let i = 0, n = temp.length; i < n; i++) {
|
|
133
|
+
temp[i](ev);
|
|
134
|
+
if (ev.propagationStopped) {
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
//if (defaultHandler && defaultHandler.length && !e.defaultPrevented) {
|
|
142
|
+
// return defaultHandler[0](e);
|
|
143
|
+
//}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
@@ -1,33 +1,18 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|
|
|
7
|
-
*
|
|
8
|
-
* @file
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
17
|
-
* of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
18
|
-
* subject to the following conditions:
|
|
19
|
-
* The above copyright notice and this permission notice shall be included in all copies
|
|
20
|
-
* or substantial portions of the Software.
|
|
21
|
-
*
|
|
22
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
23
|
-
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
24
|
-
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
25
|
-
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
26
|
-
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
27
|
-
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
28
|
-
**/
|
|
29
|
-
|
|
30
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file core_i18n.ts
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
31
16
|
|
|
32
17
|
|
|
33
18
|
/**
|
|
@@ -90,7 +75,7 @@ export function isLanguage( name: string ): boolean {
|
|
|
90
75
|
* ```
|
|
91
76
|
*/
|
|
92
77
|
|
|
93
|
-
export function addTranslation( name, ...parts ) {
|
|
78
|
+
export function addTranslation( name: string, ...parts: any[] ) {
|
|
94
79
|
|
|
95
80
|
if( !isLanguage(name) ) {
|
|
96
81
|
return;
|
|
@@ -136,9 +121,9 @@ function _patch( obj: any, by: any ) {
|
|
|
136
121
|
* (deep traverse)
|
|
137
122
|
*/
|
|
138
123
|
|
|
139
|
-
function _proxyfy( obj: any, base: any, root ) {
|
|
124
|
+
function _proxyfy( obj: any, base: any, root: any ) {
|
|
140
125
|
|
|
141
|
-
const result = {}
|
|
126
|
+
const result: any = {}
|
|
142
127
|
|
|
143
128
|
for( const n in obj ) {
|
|
144
129
|
if( typeof obj[n]!=="string" && !Array.isArray(obj[n])) {
|
|
@@ -162,15 +147,22 @@ function _mk_proxy( obj: any, base: string, root: boolean ) : any {
|
|
|
162
147
|
get: (target, prop) => {
|
|
163
148
|
if( root ) {
|
|
164
149
|
req_path = [prop];
|
|
165
|
-
|
|
150
|
+
}
|
|
166
151
|
else {
|
|
167
152
|
req_path.push( prop );
|
|
168
|
-
|
|
153
|
+
}
|
|
169
154
|
|
|
170
155
|
let value = target[prop];
|
|
171
|
-
if( value===undefined
|
|
172
|
-
|
|
156
|
+
if( value===undefined ) {
|
|
157
|
+
if( base ) {
|
|
158
|
+
value = _findBaseTrans( base );
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if( value===undefined ) {
|
|
162
|
+
console.error( "I18N error: unable to find", '_tr.'+req_path.join('.') );
|
|
163
|
+
}
|
|
173
164
|
}
|
|
165
|
+
|
|
174
166
|
return value;
|
|
175
167
|
}
|
|
176
168
|
});
|
|
@@ -193,7 +185,7 @@ let req_path: (string | symbol)[];
|
|
|
193
185
|
*
|
|
194
186
|
*/
|
|
195
187
|
|
|
196
|
-
function _findBaseTrans( base ) {
|
|
188
|
+
function _findBaseTrans( base: any ) {
|
|
197
189
|
|
|
198
190
|
while( base ) {
|
|
199
191
|
const lang = languages[base];
|
|
@@ -216,11 +208,10 @@ function _findBaseTrans( base ) {
|
|
|
216
208
|
base = lang.base;
|
|
217
209
|
}
|
|
218
210
|
|
|
219
|
-
console.error( "I18N error: unable to find", '_tr.'+req_path.join('.') );
|
|
220
211
|
return undefined;
|
|
221
212
|
}
|
|
222
213
|
|
|
223
|
-
export let _tr:
|
|
214
|
+
export let _tr: Partial<typeof fr> = {};
|
|
224
215
|
|
|
225
216
|
/**
|
|
226
217
|
* select the given language as current
|
|
@@ -234,7 +225,7 @@ export function selectLanguage( name: string ) {
|
|
|
234
225
|
}
|
|
235
226
|
|
|
236
227
|
_tr = languages[name].translations;
|
|
237
|
-
_tr[sym_lang] = name;
|
|
228
|
+
(_tr as any)[sym_lang] = name;
|
|
238
229
|
return _tr;
|
|
239
230
|
}
|
|
240
231
|
|
|
@@ -243,7 +234,7 @@ export function selectLanguage( name: string ) {
|
|
|
243
234
|
*/
|
|
244
235
|
|
|
245
236
|
export function getCurrentLanguage( ): string {
|
|
246
|
-
return _tr[sym_lang];
|
|
237
|
+
return (_tr as any)[sym_lang];
|
|
247
238
|
}
|
|
248
239
|
|
|
249
240
|
/**
|
|
@@ -269,6 +260,11 @@ let fr = {
|
|
|
269
260
|
ignore: 'Ignorer',
|
|
270
261
|
yes: 'Oui',
|
|
271
262
|
no: 'Non',
|
|
263
|
+
abort: "Abandonner",
|
|
264
|
+
retry: "Réessayer",
|
|
265
|
+
|
|
266
|
+
error: "Erreur",
|
|
267
|
+
today: "Aujourd'hui",
|
|
272
268
|
|
|
273
269
|
open: 'Ouvrir',
|
|
274
270
|
new: 'Nouveau',
|
|
@@ -320,6 +316,11 @@ let en = {
|
|
|
320
316
|
ignore: 'Ignore',
|
|
321
317
|
yes: 'Yes',
|
|
322
318
|
no: 'No',
|
|
319
|
+
abort: "Abort",
|
|
320
|
+
retry: "Retry",
|
|
321
|
+
|
|
322
|
+
error: "Error",
|
|
323
|
+
today: "Today",
|
|
323
324
|
|
|
324
325
|
open: 'Open',
|
|
325
326
|
new: 'New',
|
|
@@ -1,35 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___
|
|
3
|
-
* \
|
|
4
|
-
* \
|
|
5
|
-
* /
|
|
6
|
-
* /__
|
|
7
|
-
*
|
|
8
|
-
* @file
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* The above copyright notice and this permission notice shall be included in all copies
|
|
20
|
-
* or substantial portions of the Software.
|
|
21
|
-
*
|
|
22
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
23
|
-
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
24
|
-
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
25
|
-
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
26
|
-
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
27
|
-
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
28
|
-
**/
|
|
29
|
-
|
|
30
|
-
import { x4document } from './x4dom'
|
|
31
|
-
|
|
32
|
-
import { EvSource, EvError, EventMap } from "./x4events"
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file core_router.ts
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
import { EvError } from './component.js';
|
|
18
|
+
import { EventMap, EventSource } from './core_events.js';
|
|
33
19
|
|
|
34
20
|
type RouteHandler = ( params: any, path: string ) => void;
|
|
35
21
|
|
|
@@ -90,7 +76,7 @@ function parseRoute(str: string | RegExp, loose = false): Segment {
|
|
|
90
76
|
};
|
|
91
77
|
}
|
|
92
78
|
|
|
93
|
-
interface
|
|
79
|
+
interface RouterEvents extends EventMap {
|
|
94
80
|
error: EvError;
|
|
95
81
|
}
|
|
96
82
|
|
|
@@ -120,7 +106,7 @@ interface RouterEventMap extends EventMap {
|
|
|
120
106
|
*/
|
|
121
107
|
|
|
122
108
|
|
|
123
|
-
export class Router extends
|
|
109
|
+
export class Router extends EventSource< RouterEvents > {
|
|
124
110
|
|
|
125
111
|
private m_routes: Route[];
|
|
126
112
|
private m_useHash: boolean;
|
|
@@ -151,7 +137,7 @@ export class Router extends EvSource< RouterEventMap > {
|
|
|
151
137
|
}
|
|
152
138
|
|
|
153
139
|
private _getLocation( ) {
|
|
154
|
-
return this.m_useHash ? '/'+
|
|
140
|
+
return this.m_useHash ? '/'+document.location.hash.substring(1) : document.location.pathname;
|
|
155
141
|
}
|
|
156
142
|
|
|
157
143
|
navigate( uri: string, notify = true, replace = false ) {
|
|
@@ -165,7 +151,7 @@ export class Router extends EvSource< RouterEventMap > {
|
|
|
165
151
|
if( !found || found.handlers.length==0 ) {
|
|
166
152
|
//window.history.pushState({}, '', 'error')
|
|
167
153
|
console.log( 'route not found: '+uri );
|
|
168
|
-
this.
|
|
154
|
+
this.fire( "error", {code: 404, message: "route not found" } );
|
|
169
155
|
return;
|
|
170
156
|
}
|
|
171
157
|
|
|
@@ -191,11 +177,11 @@ export class Router extends EvSource< RouterEventMap > {
|
|
|
191
177
|
}
|
|
192
178
|
}
|
|
193
179
|
|
|
194
|
-
private _find( url: string ): { params: any
|
|
180
|
+
private _find( url: string ): { params: Record<string,any>, handlers: RouteHandler[] } {
|
|
195
181
|
|
|
196
182
|
let matches = [];
|
|
197
|
-
let params = {};
|
|
198
|
-
let handlers = [];
|
|
183
|
+
let params: Record<string,any> = {};
|
|
184
|
+
let handlers: RouteHandler[] = [];
|
|
199
185
|
|
|
200
186
|
for (const tmp of this.m_routes ) {
|
|
201
187
|
if (!tmp.keys ) {
|
|
@@ -231,4 +217,5 @@ export class Router extends EvSource< RouterEventMap > {
|
|
|
231
217
|
|
|
232
218
|
return { params, handlers };
|
|
233
219
|
}
|
|
234
|
-
}
|
|
220
|
+
}
|
|
221
|
+
|