@twobirds/microcomponents 0.0.83 → 0.0.84
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/assets/test/test.html +1 -1
- package/dist/MC.d.ts +10 -9
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.js +126 -158
- package/dist/MC.min.js +146 -254
- package/dist/MC.ts +182 -241
- package/dist/elements.d.ts.map +1 -1
- package/dist/elements.js +10 -4
- package/dist/elements.min.js +1 -1
- package/dist/elements.ts +17 -4
- package/dist/formValues.js +2 -2
- package/dist/formValues.min.js +1 -1
- package/dist/formValues.ts +3 -3
- package/dist/microcomponents.d.ts +0 -1
- package/dist/microcomponents.d.ts.map +1 -1
- package/dist/microcomponents.js +0 -1
- package/dist/microcomponents.min.js +1 -1
- package/dist/microcomponents.ts +1 -1
- package/dist/observables.d.ts.map +1 -1
- package/dist/observables.js +14 -12
- package/dist/observables.min.js +1 -1
- package/dist/observables.ts +32 -32
- package/package.json +1 -1
- package/public/MC.d.ts +10 -9
- package/public/MC.d.ts.map +1 -1
- package/public/MC.js +126 -158
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +146 -254
- package/public/MC.ts +182 -241
- package/public/elements.d.ts.map +1 -1
- package/public/elements.js +10 -4
- package/public/elements.js.map +1 -1
- package/public/elements.min.js +1 -1
- package/public/elements.ts +17 -4
- package/public/formValues.js +2 -2
- package/public/formValues.js.map +1 -1
- package/public/formValues.min.js +1 -1
- package/public/formValues.ts +3 -3
- package/public/microcomponents.d.ts +0 -1
- package/public/microcomponents.d.ts.map +1 -1
- package/public/microcomponents.js +0 -1
- package/public/microcomponents.js.map +1 -1
- package/public/microcomponents.min.js +1 -1
- package/public/microcomponents.ts +1 -1
- package/public/observables.d.ts.map +1 -1
- package/public/observables.js +14 -12
- package/public/observables.js.map +1 -1
- package/public/observables.min.js +1 -1
- package/public/observables.ts +32 -32
- package/public/src/MC.d.ts +10 -9
- package/public/src/MC.d.ts.map +1 -1
- package/public/src/MC.js +126 -158
- package/public/src/MC.js.map +1 -1
- package/public/src/MC.ts +182 -241
- package/public/src/elements.d.ts.map +1 -1
- package/public/src/elements.js +10 -4
- package/public/src/elements.js.map +1 -1
- package/public/src/elements.ts +17 -4
- package/public/src/formValues.js +2 -2
- package/public/src/formValues.js.map +1 -1
- package/public/src/formValues.ts +3 -3
- package/public/src/microcomponents.d.ts +0 -1
- package/public/src/microcomponents.d.ts.map +1 -1
- package/public/src/microcomponents.js +0 -1
- package/public/src/microcomponents.js.map +1 -1
- package/public/src/microcomponents.ts +1 -1
- package/public/src/observables.d.ts.map +1 -1
- package/public/src/observables.js +14 -12
- package/public/src/observables.js.map +1 -1
- package/public/src/observables.ts +32 -32
- package/public/src/test/test/grandparent.d.ts.map +1 -1
- package/public/src/test/test/grandparent.js +1 -1
- package/public/src/test/test/grandparent.js.map +1 -1
- package/public/src/test/test/grandparent.ts +12 -4
- package/public/src/test/test/testform.js +1 -1
- package/public/src/test/test/testform.js.map +1 -1
- package/public/src/test/test/testform.ts +6 -8
- package/public/src/test/test.js +5 -4
- package/public/src/test/test.js.map +1 -1
- package/public/src/test/test.ts +8 -8
- package/public/test/MC.d.ts +10 -9
- package/public/test/MC.d.ts.map +1 -1
- package/public/test/MC.js +126 -158
- package/public/test/MC.min.js +146 -254
- package/public/test/MC.ts +182 -241
- package/public/test/elements.d.ts.map +1 -1
- package/public/test/elements.js +10 -4
- package/public/test/elements.min.js +1 -1
- package/public/test/elements.ts +17 -4
- package/public/test/formValues.js +2 -2
- package/public/test/formValues.min.js +1 -1
- package/public/test/formValues.ts +3 -3
- package/public/test/microcomponents.d.ts +0 -1
- package/public/test/microcomponents.d.ts.map +1 -1
- package/public/test/microcomponents.js +0 -1
- package/public/test/microcomponents.min.js +1 -1
- package/public/test/microcomponents.ts +1 -1
- package/public/test/observables.d.ts.map +1 -1
- package/public/test/observables.js +14 -12
- package/public/test/observables.min.js +1 -1
- package/public/test/observables.ts +32 -32
- package/public/test/test/grandparent.d.ts.map +1 -1
- package/public/test/test/grandparent.js +1 -1
- package/public/test/test/grandparent.js.map +1 -1
- package/public/test/test/grandparent.ts +12 -4
- package/public/test/test/testform.js +1 -1
- package/public/test/test/testform.js.map +1 -1
- package/public/test/test/testform.ts +6 -8
- package/public/test/test.html +1 -1
- package/public/test/test.js +5 -4
- package/public/test/test.js.map +1 -1
- package/public/test/test.ts +8 -8
- package/public/typedoc/assets/navigation.js +1 -1
- package/public/typedoc/assets/search.js +1 -1
- package/public/typedoc/classes/MC.DC.html +6 -4
- package/public/typedoc/classes/MC.MC.html +3 -4
- package/public/typedoc/classes/MC.McBase.html +3 -4
- package/public/typedoc/functions/MC.autoload.html +1 -1
- package/public/typedoc/functions/MC.off.html +1 -0
- package/public/typedoc/functions/MC.on.html +1 -0
- package/public/typedoc/functions/MC.one.html +1 -0
- package/public/typedoc/functions/elements.defineCE.html +1 -1
- package/public/typedoc/functions/elements.getCE.html +1 -1
- package/public/typedoc/functions/formValues.formValues.html +1 -1
- package/public/typedoc/functions/observables.observe.html +1 -1
- package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
- package/public/typedoc/modules/MC.html +7 -6
- package/public/typedoc/modules/elements.html +1 -1
- package/public/typedoc/modules/formValues.html +1 -1
- package/public/typedoc/modules/observables.html +1 -1
- package/public/typedoc/modules.html +0 -1
- package/public/typedoc/types/observables.Observable.html +1 -1
- package/src/MC.ts +182 -241
- package/src/elements.ts +17 -4
- package/src/formValues.ts +3 -3
- package/src/microcomponents.ts +1 -1
- package/src/observables.ts +32 -32
- package/src/test/test/grandparent.ts +12 -4
- package/src/test/test/testform.ts +6 -8
- package/src/test/test.ts +8 -8
- package/tsconfig.json +2 -2
- package/typedoc.json +1 -1
- package/webpack.config.js +2 -2
- package/dist/McEvent.d.ts +0 -15
- package/dist/McEvent.d.ts.map +0 -1
- package/dist/McEvent.js +0 -71
- package/dist/selectors.d.ts +0 -106
- package/dist/selectors.d.ts.map +0 -1
- package/dist/selectors.js +0 -759
- package/dist/selectors.min.js +0 -1
- package/public/McEvent.d.ts +0 -15
- package/public/McEvent.d.ts.map +0 -1
- package/public/McEvent.js +0 -71
- package/public/McEvent.js.map +0 -1
- package/public/selectors.d.ts +0 -106
- package/public/selectors.d.ts.map +0 -1
- package/public/selectors.js +0 -759
- package/public/selectors.js.map +0 -1
- package/public/selectors.min.js +0 -1
- package/public/src/McEvent.d.ts +0 -15
- package/public/src/McEvent.d.ts.map +0 -1
- package/public/src/McEvent.js +0 -71
- package/public/src/McEvent.js.map +0 -1
- package/public/src/selectors.d.ts +0 -106
- package/public/src/selectors.d.ts.map +0 -1
- package/public/src/selectors.js +0 -759
- package/public/src/selectors.js.map +0 -1
- package/public/test/McEvent.d.ts +0 -15
- package/public/test/McEvent.d.ts.map +0 -1
- package/public/test/McEvent.js +0 -71
- package/public/test/McEvent.ts +0 -96
- package/public/test/selectors.d.ts +0 -106
- package/public/test/selectors.d.ts.map +0 -1
- package/public/test/selectors.js +0 -759
- package/public/test/selectors.min.js +0 -1
- package/public/test/selectors.ts +0 -1269
- package/public/typedoc/classes/MC.McEvent.html +0 -9
- package/public/typedoc/functions/MC.addListener.html +0 -1
- package/public/typedoc/functions/MC.removeListener.html +0 -1
- package/public/typedoc/functions/selectors._d.html +0 -1
- package/public/typedoc/functions/selectors._t.html +0 -1
- package/public/typedoc/interfaces/selectors.DSelector.html +0 -48
- package/public/typedoc/interfaces/selectors.TSelector.html +0 -34
- package/public/typedoc/modules/selectors.html +0 -7
- package/public/typedoc/types/selectors.selection.html +0 -1
- package/public/typedoc/types/selectors.singleSelector.html +0 -1
- package/src/McEvent.ts +0 -96
- package/src/selectors.ts +0 -1269
- /package/{dist/McEvent.ts → public/McEvent._ts} +0 -0
- /package/{dist/selectors.ts → public/selectors._ts} +0 -0
- /package/public/{McEvent.ts → src/McEvent._ts} +0 -0
- /package/public/{selectors.ts → src/selectors._ts} +0 -0
- /package/{public/src/McEvent.ts → src/McEvent._ts} +0 -0
- /package/{public/src/selectors.ts → src/selectors._ts} +0 -0
package/public/MC.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import { LooseObject } from './helpers.js';
|
|
4
|
-
import { McEvent } from './McEvent.js';
|
|
5
4
|
|
|
6
5
|
var isBrowser = new Function(
|
|
7
6
|
'try {return this===window;}catch(e){ return false;}'
|
|
8
7
|
);
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (isBrowser()) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
// get HTMLElement native event names
|
|
10
|
+
function getNativeEventNames( domNode: HTMLElement ): string[] {
|
|
11
|
+
let nativeEventNames: Array<string> = [];
|
|
12
|
+
if (isBrowser()) {
|
|
13
|
+
Object.keys(HTMLElement.prototype)
|
|
14
|
+
.filter((key) => /^on/.test(key))
|
|
15
|
+
.forEach((eventName) => nativeEventNames.push(eventName));
|
|
16
|
+
}
|
|
17
|
+
return nativeEventNames;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
export interface HTMLMcElement extends HTMLElement {
|
|
@@ -64,34 +65,6 @@ function isDOM(element: { [key: string]: any }) {
|
|
|
64
65
|
return element && element instanceof HTMLElement;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
function addListener(
|
|
68
|
-
domNode: Node,
|
|
69
|
-
eventName: string,
|
|
70
|
-
handler: EventListenerOrEventListenerObject | null,
|
|
71
|
-
capture: boolean = false,
|
|
72
|
-
once: boolean = false
|
|
73
|
-
) {
|
|
74
|
-
let options: EventListenerOptions & { once: boolean } = { once: false };
|
|
75
|
-
if (capture) {
|
|
76
|
-
options.capture = capture;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (once) {
|
|
80
|
-
options.once = once;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
//console.log( 'addEventListener', eventName, ( handler as Function ).name, options );
|
|
84
|
-
domNode.addEventListener(eventName, handler, options);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function removeListener(
|
|
88
|
-
domNode: Node,
|
|
89
|
-
eventName: string,
|
|
90
|
-
handler: EventListenerOrEventListenerObject | null
|
|
91
|
-
) {
|
|
92
|
-
domNode.removeEventListener(eventName, handler);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
68
|
// add a microcomponent to a target DOM node
|
|
96
69
|
function add(target: HTMLElement, key: string, element = {}): any {
|
|
97
70
|
let node = target as HTMLMcElement;
|
|
@@ -111,8 +84,8 @@ function add(target: HTMLElement, key: string, element = {}): any {
|
|
|
111
84
|
if (key.length && !_mc[key]) {
|
|
112
85
|
_mc[key] = element;
|
|
113
86
|
// add attribute if HTMLElement
|
|
114
|
-
if (target instanceof HTMLElement && ! target.getAttribute('
|
|
115
|
-
target.setAttribute('
|
|
87
|
+
if (target instanceof HTMLElement && ! target.getAttribute('data-mc') ) {
|
|
88
|
+
target.setAttribute('data-mc', '');
|
|
116
89
|
}
|
|
117
90
|
}
|
|
118
91
|
return element;
|
|
@@ -133,44 +106,13 @@ function remove(target: HTMLMcElement, key: string) {
|
|
|
133
106
|
if (
|
|
134
107
|
!Object.keys(_mc).length &&
|
|
135
108
|
target instanceof HTMLElement &&
|
|
136
|
-
target.hasAttribute('
|
|
109
|
+
target.hasAttribute('data-mc')
|
|
137
110
|
) {
|
|
138
|
-
target.removeAttribute('
|
|
111
|
+
target.removeAttribute('data-mc');
|
|
139
112
|
}
|
|
140
113
|
return;
|
|
141
114
|
}
|
|
142
115
|
|
|
143
|
-
// trigger an event
|
|
144
|
-
function trigger(
|
|
145
|
-
target: HTMLElement,
|
|
146
|
-
ev: McEvent | string,
|
|
147
|
-
data: any = {},
|
|
148
|
-
bubble: string = 'l'
|
|
149
|
-
) {
|
|
150
|
-
let _mc = (target as any)?._mc;
|
|
151
|
-
if (!_mc) return;
|
|
152
|
-
|
|
153
|
-
let event =
|
|
154
|
-
ev instanceof McEvent
|
|
155
|
-
? new McEvent(ev.type, ev.data, 'l')
|
|
156
|
-
: new McEvent(ev, data, 'l'),
|
|
157
|
-
mcEvent: McEvent =
|
|
158
|
-
typeof ev !== 'string' ? (ev as McEvent) : new McEvent(ev, data, bubble);
|
|
159
|
-
|
|
160
|
-
[...Object.values(_mc)].forEach((mc: any) => {
|
|
161
|
-
//console.log( 'mc [', mc.constructor.name, ']', mc.constructor.prototype?.oneInit );
|
|
162
|
-
if ((mc as any)?.trigger && typeof (mc as any)?.trigger === 'function') {
|
|
163
|
-
(mc as any)?.trigger(event);
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
168
|
-
bubbleEvent(target, mcEvent);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
116
|
// run the "init" lifecycle event on the complete _mc structure
|
|
175
117
|
function init(element: MC | DC) {
|
|
176
118
|
if (element.constructor === DC) return;
|
|
@@ -193,6 +135,77 @@ function init(element: MC | DC) {
|
|
|
193
135
|
}, 0);
|
|
194
136
|
}
|
|
195
137
|
|
|
138
|
+
function getMcEventName( eventName: string ): string {
|
|
139
|
+
return '_mc' + eventName[0].toUpperCase() + eventName.substring(1);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/*
|
|
143
|
+
CustomEvent Section...
|
|
144
|
+
*/
|
|
145
|
+
function off( domNode: Node, eventName: string, handler: EventListenerOrEventListenerObject ){
|
|
146
|
+
domNode.removeEventListener( getMcEventName(eventName), handler );
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function on( domNode: Node, eventName: string, handler: EventListenerOrEventListenerObject, once: boolean = false ) {
|
|
150
|
+
domNode.addEventListener( getMcEventName(eventName), handler, { capture: false, once });
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function one( domNode: Node, eventName: string, handler: EventListenerOrEventListenerObject ) {
|
|
154
|
+
on(domNode, eventName, handler, true );
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// create and dispatch custom event
|
|
158
|
+
function trigger(
|
|
159
|
+
domNode: HTMLElement,
|
|
160
|
+
event: CustomEvent | string,
|
|
161
|
+
data: any = {},
|
|
162
|
+
bubble: string = 'l'
|
|
163
|
+
){
|
|
164
|
+
const ev = typeof event === 'string'
|
|
165
|
+
? new CustomEvent( getMcEventName( event ), { detail: {data, bubble} } )
|
|
166
|
+
: event;
|
|
167
|
+
|
|
168
|
+
// execute locally if 'l' or nothing is given as bubble
|
|
169
|
+
if( bubble.length && bubble.indexOf('l') > -1 ){
|
|
170
|
+
domNode.dispatchEvent( ev );
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// bubble if up or down is indicated
|
|
174
|
+
if( /[u|d]/.test( bubble ) ){
|
|
175
|
+
bubbleEvent( domNode, ev );
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function bubbleEvent( domNode: HTMLElement, ev: CustomEvent) {
|
|
180
|
+
// at this point, either 'u' or 'd' bubbling should be indicated
|
|
181
|
+
// event bubbling is asynchronous!
|
|
182
|
+
setTimeout(() => {
|
|
183
|
+
|
|
184
|
+
// add missing 'l', or else no handlers are executed
|
|
185
|
+
if (ev.detail.bubble.indexOf('l') === -1) {
|
|
186
|
+
ev.detail.bubble += 'l';
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// bubble up towards root
|
|
190
|
+
if (ev.detail.bubble.indexOf('u') > -1 ) {
|
|
191
|
+
domNode.closest('[data-mc]')?.dispatchEvent( ev );
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// bubble down
|
|
195
|
+
if (ev.detail.bubble.indexOf('d') > -1) {
|
|
196
|
+
let targets = new Set<HTMLMcElement>(
|
|
197
|
+
(domNode as HTMLMcElement)._mc
|
|
198
|
+
.children()
|
|
199
|
+
.map((c: unknown) => (c as any)?.target)
|
|
200
|
+
);
|
|
201
|
+
targets.forEach((target: HTMLMcElement) => {
|
|
202
|
+
if (target) DC.trigger(target, ev);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
}, 0);
|
|
207
|
+
}
|
|
208
|
+
|
|
196
209
|
function autoAttachListeners(element: MC | DC) {
|
|
197
210
|
if (!isBrowser() || element.constructor === DC) return;
|
|
198
211
|
|
|
@@ -209,70 +222,39 @@ function autoAttachListeners(element: MC | DC) {
|
|
|
209
222
|
.forEach((key) => {
|
|
210
223
|
let once = /^one/.test(key),
|
|
211
224
|
withoutOnOne = key.replace(/^on[e]{0,1}/, ''), // preserves upper/lowercase for non-native events
|
|
212
|
-
nativeEventName = withoutOnOne.toLowerCase()
|
|
213
|
-
listener = (ev: McEvent | Event | CustomEvent) => {
|
|
214
|
-
that.trigger(withoutOnOne, ev);
|
|
215
|
-
};
|
|
216
|
-
if (once) {
|
|
217
|
-
// console.log( '...is only called once', that.constructor.prototype[key] );
|
|
218
|
-
Object.defineProperty(element, 'on' + withoutOnOne, {
|
|
219
|
-
configurable: true,
|
|
220
|
-
enumerable: false,
|
|
221
|
-
writable: true,
|
|
222
|
-
value: (ev: any) => {
|
|
223
|
-
// console.log( 'onceHandler execute:', that.constructor.prototype[key] );
|
|
224
|
-
that.constructor.prototype[key].bind(that)(ev);
|
|
225
|
-
},
|
|
226
|
-
});
|
|
227
|
-
}
|
|
225
|
+
nativeEventName = withoutOnOne.toLowerCase(); // lowercase for native event names
|
|
228
226
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
227
|
+
let listener = (ev: Event | CustomEvent) => {
|
|
228
|
+
that[key]( ev );
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if ( !!( target as any )['on' + nativeEventName] ) {
|
|
232
|
+
// it is a native HTML event
|
|
233
|
+
//console.log( 'AAL: attach native event listener', nativeEventName, 'to', target );
|
|
234
|
+
target.addEventListener( nativeEventName, listener);
|
|
235
|
+
} else {
|
|
236
|
+
// it is a customEvent
|
|
237
|
+
//console.log( 'AAL: attach custom event listener', '_mc' + withoutOnOne , 'to key', key, 'in', element );
|
|
238
|
+
on( target, withoutOnOne, listener, once );
|
|
233
239
|
}
|
|
234
240
|
});
|
|
235
241
|
}
|
|
236
242
|
}
|
|
237
243
|
|
|
238
|
-
function
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
ev.bubble += 'l';
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// bubble up towards root
|
|
249
|
-
if (ev.bubble.indexOf('u') > -1) {
|
|
250
|
-
let parent = traverseNodes(target, '', true)?.[0].target;
|
|
251
|
-
if (parent) DC.trigger(parent, ev);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
// bubble down
|
|
255
|
-
if (ev.bubble.indexOf('d') > -1) {
|
|
256
|
-
let targets = new Set<HTMLMcElement>(
|
|
257
|
-
(target as HTMLMcElement)._mc
|
|
258
|
-
.children()
|
|
259
|
-
.map((c: unknown) => (c as any)?.target)
|
|
260
|
-
);
|
|
261
|
-
targets.forEach((target: HTMLMcElement) => {
|
|
262
|
-
if (target) DC.trigger(target, ev);
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
}, 0);
|
|
266
|
-
}
|
|
244
|
+
function getMcChildNodes(domNode: HTMLElement): NodeListOf<Element> {
|
|
245
|
+
const id = Math.random().toString().replace('.', '');
|
|
246
|
+
const selector = '[data-mc]:not([temp_id="' + id + '"] [data-mc] [data-mc])';
|
|
247
|
+
domNode.setAttribute('temp_id', id);
|
|
248
|
+
const myDomElements = domNode.querySelectorAll(selector);
|
|
249
|
+
domNode.removeAttribute('temp_id');
|
|
250
|
+
return myDomElements;
|
|
267
251
|
}
|
|
268
252
|
|
|
269
253
|
class McBase {
|
|
270
254
|
private _target: WeakRef<any>; // avoid circular reference
|
|
271
|
-
private __mc: LooseObject = {};
|
|
272
255
|
|
|
273
256
|
constructor(target?: { [key: string]: any }, debug: boolean = false) {
|
|
274
|
-
let
|
|
275
|
-
element = that as MC | DC;
|
|
257
|
+
let element = this as unknown as MC | DC;
|
|
276
258
|
|
|
277
259
|
this._target = new WeakRef(target || {});
|
|
278
260
|
|
|
@@ -285,9 +267,6 @@ class McBase {
|
|
|
285
267
|
return this._target.deref();
|
|
286
268
|
}
|
|
287
269
|
|
|
288
|
-
get _mc(): any {
|
|
289
|
-
return this.__mc;
|
|
290
|
-
}
|
|
291
270
|
}
|
|
292
271
|
|
|
293
272
|
class MC extends McBase {
|
|
@@ -296,73 +275,9 @@ class MC extends McBase {
|
|
|
296
275
|
}
|
|
297
276
|
|
|
298
277
|
static trigger = trigger;
|
|
299
|
-
|
|
300
|
-
trigger(ev:
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
//console.log( that, '.trigger(', ev, data, bubble, ')' );
|
|
304
|
-
|
|
305
|
-
// run all triggers
|
|
306
|
-
if (that.constructor === MC || that.constructor === DC) {
|
|
307
|
-
let event =
|
|
308
|
-
ev instanceof McEvent
|
|
309
|
-
? new McEvent(ev.type, ev.data, 'l')
|
|
310
|
-
: new McEvent(ev, data, 'l'),
|
|
311
|
-
mcEvent: McEvent =
|
|
312
|
-
typeof ev !== 'string'
|
|
313
|
-
? (ev as McEvent)
|
|
314
|
-
: new McEvent(ev, data, bubble);
|
|
315
|
-
[...Object.getOwnPropertyNames(that)].forEach((mc) => {
|
|
316
|
-
if (
|
|
317
|
-
(that as any)[mc]?.trigger &&
|
|
318
|
-
typeof (that as any)[mc]?.trigger === 'function'
|
|
319
|
-
) {
|
|
320
|
-
(that as any)[mc]?.trigger(event);
|
|
321
|
-
}
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
325
|
-
bubbleEvent(that.target, mcEvent);
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
return; // must return here!
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// only this instance
|
|
332
|
-
if ((that as any) instanceof MC || (that as any) instanceof DC) {
|
|
333
|
-
const that = this,
|
|
334
|
-
mcEvent: McEvent =
|
|
335
|
-
typeof ev !== 'string'
|
|
336
|
-
? (ev as McEvent)
|
|
337
|
-
: new McEvent(ev, data, bubble),
|
|
338
|
-
handlerName =
|
|
339
|
-
'on' + mcEvent.type[0].toUpperCase() + mcEvent.type.slice(1);
|
|
340
|
-
// console.log('trigger', handlerName, mcEvent, data, bubble );
|
|
341
|
-
|
|
342
|
-
if (mcEvent.bubble.indexOf('l') > -1) {
|
|
343
|
-
if (
|
|
344
|
-
!mcEvent.immediateStopped &&
|
|
345
|
-
typeof (that as any)[handlerName] === 'function'
|
|
346
|
-
) {
|
|
347
|
-
// console.log( 'execute handler:', handlerName );
|
|
348
|
-
(that as any)[handlerName](mcEvent);
|
|
349
|
-
if ((that as any).hasOwnProperty(handlerName)) {
|
|
350
|
-
// it is a once handler
|
|
351
|
-
delete (that as any)[handlerName]; // remove after first execution
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// if event stopped or local only, handling is cancelled
|
|
357
|
-
if (mcEvent.stopped || mcEvent.bubble === 'l') {
|
|
358
|
-
return that;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
//console.log('bubble', mcEvent);
|
|
362
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
363
|
-
bubbleEvent(that.target, mcEvent);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
278
|
+
|
|
279
|
+
trigger(ev: string, data: any = {}, bubble: string = 'l') {
|
|
280
|
+
// TBD
|
|
366
281
|
}
|
|
367
282
|
}
|
|
368
283
|
|
|
@@ -375,8 +290,23 @@ class DC extends McBase {
|
|
|
375
290
|
static remove: Function = remove;
|
|
376
291
|
static trigger: Function = trigger;
|
|
377
292
|
|
|
378
|
-
|
|
379
|
-
|
|
293
|
+
off( eventName: string, handler: EventListenerOrEventListenerObject ) {
|
|
294
|
+
off( this.target, eventName, handler );
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
on( eventName: string, handler: EventListenerOrEventListenerObject ) {
|
|
298
|
+
on( this.target, eventName, handler );
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
one( eventName: string, handler: EventListenerOrEventListenerObject ) {
|
|
302
|
+
one( this.target, eventName, handler );
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
trigger(ev: CustomEvent | string, data: any = {}, bubble: string = 'l') {
|
|
306
|
+
if ( typeof ev === 'string' ){
|
|
307
|
+
|
|
308
|
+
}
|
|
309
|
+
//trigger( this.target, ev, data, bubble);
|
|
380
310
|
}
|
|
381
311
|
|
|
382
312
|
parent(search: string = ''): any[] {
|
|
@@ -394,48 +324,29 @@ class DC extends McBase {
|
|
|
394
324
|
children(search: string = ''): any[] {
|
|
395
325
|
let target: any = (this as any)?.target;
|
|
396
326
|
if (!isDOM(target)) return [];
|
|
397
|
-
const
|
|
398
|
-
const selector = '[_mc]:not([temp_id="' + id + '"] [_mc] [_mc])';
|
|
399
|
-
target.setAttribute('temp_id', id);
|
|
400
|
-
const myDomElements = target.querySelectorAll(selector);
|
|
327
|
+
const myDomElements = getMcChildNodes(target);
|
|
401
328
|
const mcValues = getMicroComponents([...myDomElements], search);
|
|
402
|
-
target.removeAttribute('temp_id');
|
|
403
329
|
return mcValues;
|
|
404
330
|
}
|
|
405
331
|
|
|
406
332
|
descendants(search: string = ''): any[] {
|
|
407
333
|
let target: any = (this as any)?.target;
|
|
408
334
|
if (!isDOM(target)) return [];
|
|
409
|
-
const myDomElements = target.querySelectorAll('*[
|
|
335
|
+
const myDomElements = target.querySelectorAll('*[data-mc]');
|
|
410
336
|
return getMicroComponents([...myDomElements], search);
|
|
411
337
|
}
|
|
412
338
|
}
|
|
413
339
|
|
|
414
|
-
const
|
|
340
|
+
const loadingDCs = new Set<string>();
|
|
415
341
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
loadingMCs.add( element );
|
|
421
|
-
|
|
422
|
-
//console.log( 'makeLoadScript:', element);
|
|
423
|
-
const fileName: string = './' + element.split('-').join('/')+'.js';
|
|
424
|
-
|
|
425
|
-
const se: HTMLScriptElement = document.createElement('script');
|
|
342
|
+
// this only applies to DCs defined in the data-mc attribute,
|
|
343
|
+
// since they need to be attached manually
|
|
344
|
+
function attachDC(element: string): Function {
|
|
426
345
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
se.async = true;
|
|
430
|
-
se.setAttribute('type', 'module');
|
|
431
|
-
se.setAttribute( 'data-name', element);
|
|
432
|
-
se.setAttribute( 'loading', '');
|
|
433
|
-
|
|
434
|
-
const loadedPromise = customElements.whenDefined( element );
|
|
435
|
-
|
|
436
|
-
loadedPromise.then( () => {
|
|
346
|
+
//@ts-ignore
|
|
347
|
+
return () => {
|
|
437
348
|
const elements: HTMLElement[] = Array
|
|
438
|
-
.from(document.querySelectorAll(`[
|
|
349
|
+
.from(document.querySelectorAll(`[data-mc*="${element}"]`))
|
|
439
350
|
.filter( element => element instanceof HTMLElement );
|
|
440
351
|
|
|
441
352
|
if ( elements.length === 0 ) return;
|
|
@@ -450,28 +361,53 @@ function makeLoadScript( element: string ) {
|
|
|
450
361
|
|
|
451
362
|
//@ts-ignore
|
|
452
363
|
const new_mc = node
|
|
453
|
-
.getAttribute( '
|
|
364
|
+
.getAttribute( 'data-mc' )
|
|
454
365
|
.split(' ')
|
|
455
366
|
.filter( (name) => name !== element && name !== '' )
|
|
456
|
-
.join(' ')
|
|
367
|
+
.join(' ')
|
|
368
|
+
.trim();
|
|
457
369
|
|
|
458
370
|
//@ts-ignore
|
|
459
371
|
node.setAttribute(
|
|
460
|
-
'
|
|
372
|
+
'data-mc',
|
|
461
373
|
//@ts-ignore
|
|
462
374
|
new_mc
|
|
463
375
|
)
|
|
464
376
|
});
|
|
377
|
+
};
|
|
378
|
+
};
|
|
465
379
|
|
|
466
|
-
|
|
467
|
-
|
|
380
|
+
function makeLoadScript( element: string ) {
|
|
381
|
+
|
|
382
|
+
if ( loadingDCs.has( element ) ) return; // already loading
|
|
383
|
+
|
|
384
|
+
loadingDCs.add( element );
|
|
385
|
+
|
|
386
|
+
//console.log( 'makeLoadScript:', element);
|
|
387
|
+
const fileName: string = './' + element.split('-').join('/')+'.js';
|
|
388
|
+
|
|
389
|
+
const se: HTMLScriptElement = document.createElement('script');
|
|
468
390
|
|
|
469
|
-
|
|
470
|
-
|
|
391
|
+
se.setAttribute('src', fileName);
|
|
392
|
+
se.setAttribute('blocking', 'render');
|
|
393
|
+
se.async = true;
|
|
394
|
+
se.setAttribute('type', 'module');
|
|
395
|
+
se.setAttribute( 'data-name', element);
|
|
396
|
+
se.setAttribute( 'loading', '');
|
|
397
|
+
|
|
398
|
+
const loadedPromise = customElements.whenDefined( element );
|
|
399
|
+
|
|
400
|
+
//@ts-ignore
|
|
401
|
+
loadedPromise.then( attachDC( element ) );
|
|
402
|
+
|
|
403
|
+
se.addEventListener( 'load', (ev: Event) => {
|
|
404
|
+
loadingDCs.delete( element );
|
|
405
|
+
|
|
406
|
+
document.head.querySelector(`script[data-name="${element}"]`)?.remove();
|
|
471
407
|
});
|
|
472
408
|
|
|
473
|
-
|
|
474
|
-
console.error('could not load
|
|
409
|
+
se.addEventListener( 'error', (ev: Event) => {
|
|
410
|
+
console.error('could not load DC code from', fileName);
|
|
475
411
|
});
|
|
476
412
|
|
|
477
413
|
document.head.append(se);
|
|
@@ -483,21 +419,26 @@ function loadUndefinedMCs() {
|
|
|
483
419
|
[ ...document.querySelectorAll(':not(:defined)') ]
|
|
484
420
|
.filter( (element) => !!element
|
|
485
421
|
&& !customElements.get(element.tagName.toLowerCase()) // not in CustomElementsRegistry
|
|
486
|
-
&& !
|
|
422
|
+
&& !loadingDCs.has(element.tagName.toLowerCase()) // not in loading list
|
|
487
423
|
)
|
|
488
424
|
.forEach((el) => {
|
|
489
425
|
//console.log( 'detected CE', el.tagName.toLowerCase() );
|
|
490
|
-
makeLoadScript( el.tagName.toLowerCase() );
|
|
426
|
+
makeLoadScript( el.tagName.toLowerCase() ); // will automatically be instanciated
|
|
491
427
|
});
|
|
492
428
|
|
|
493
|
-
//
|
|
494
|
-
[ ...document.querySelectorAll('[
|
|
429
|
+
// if defined in _mc attribute: instanciate DCs, load if necessary
|
|
430
|
+
[ ...document.querySelectorAll('[data-mc]:not([data-mc=""]') ]
|
|
495
431
|
.filter( (element) => !!element )
|
|
496
432
|
.forEach((el) => {
|
|
497
|
-
const _mc = el.getAttribute('
|
|
498
|
-
_mc?.forEach(
|
|
433
|
+
const _mc = el.getAttribute('data-mc')?.split(' ').filter( name => name !== '' );
|
|
434
|
+
_mc?.forEach( element => {
|
|
499
435
|
//console.log( 'detected DC', dc );
|
|
500
|
-
|
|
436
|
+
const isDefined = customElements.get(element);
|
|
437
|
+
if ( !loadingDCs.has(element) && !isDefined ) {
|
|
438
|
+
makeLoadScript( element );
|
|
439
|
+
} else if ( isDefined ) {
|
|
440
|
+
attachDC(element)();
|
|
441
|
+
}
|
|
501
442
|
});
|
|
502
443
|
});
|
|
503
444
|
}
|
|
@@ -526,7 +467,7 @@ function autoload(enable: boolean = true): boolean {
|
|
|
526
467
|
return autoloadEnabled;
|
|
527
468
|
}
|
|
528
469
|
|
|
529
|
-
(autoload as LooseObject).state =
|
|
470
|
+
(autoload as LooseObject).state = loadingDCs;
|
|
530
471
|
|
|
531
|
-
export {
|
|
472
|
+
export { McBase, MC, DC, autoload, on, one, off, trigger };
|
|
532
473
|
|
package/public/elements.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAoDA,wBAAgB,QAAQ,CACvB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CAAE,GAAG,QAAQ,EACzD,kBAAkB,GAAE,MAAM,EAAO,QA2DjC;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAE3E"}
|
package/public/elements.js
CHANGED
|
@@ -6,16 +6,22 @@ class CeBaseClass extends HTMLElement {
|
|
|
6
6
|
super();
|
|
7
7
|
}
|
|
8
8
|
connectedCallback() {
|
|
9
|
-
|
|
9
|
+
this.dispatchEvent(new CustomEvent('_mcConnected'));
|
|
10
|
+
}
|
|
11
|
+
connectedMoveCallback() {
|
|
12
|
+
this.dispatchEvent(new CustomEvent('_mcConnectedMove'));
|
|
10
13
|
}
|
|
11
14
|
disconnectedCallback() {
|
|
12
|
-
|
|
15
|
+
this.dispatchEvent(new CustomEvent('_mcDisconnected'));
|
|
13
16
|
}
|
|
14
17
|
adoptedCallback() {
|
|
15
|
-
|
|
18
|
+
this.dispatchEvent(new CustomEvent('_mcAdopted'));
|
|
16
19
|
}
|
|
17
20
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
18
|
-
|
|
21
|
+
this.dispatchEvent(new CustomEvent('_mcAttributeChanged', { detail: { name, oldValue, newValue } }));
|
|
22
|
+
}
|
|
23
|
+
formResetCallback() {
|
|
24
|
+
this.dispatchEvent(new CustomEvent('_mcFormReset'));
|
|
19
25
|
}
|
|
20
26
|
}
|
|
21
27
|
function createNamedClass(name, ClassBody) {
|
package/public/elements.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAY,SAAQ,WAAW;IACpC;QACC,KAAK,EAAE,CAAC;IACT,CAAC;IAED,iBAAiB;
|
|
1
|
+
{"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"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"}
|
package/public/elements.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.elements=e():t.elements=e()}(this,(()=>(()=>{"use strict";var t={d:(e,
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.elements=e():t.elements=e()}(this,(()=>(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{defineCE:()=>b,getCE:()=>h});var n=new Function("try {return this===window;}catch(e){ return false;}");function r(t,e){let n=[];return t.forEach((t=>{if(t&&t instanceof HTMLElement){const r=t?._mc;!e&&r?n=n.concat(Object.values(t._mc)):e&&r&&r[e]&&n.push(r[e])}})),n}function o(t,e,n=!0){let r=[];for(;t;){if(t._mc&&(e?e&&t._mc[e]&&r.push(t._mc[e]):r=r.concat(Object.values(t._mc)),n))return r;t=t.parentNode}return r}function c(t){return t&&t instanceof HTMLElement}function s(t,e,n={}){let r=t;if(!r._mc){let e=m?.debug;m.debug=!1,r._mc=new m(t),m.debug=e,delete r._mc._mc}const o=r._mc;return e.length&&!o[e]&&(o[e]=n,t instanceof HTMLElement&&!t.getAttribute("data-mc")&&t.setAttribute("data-mc","")),n}function a(t,e){if(!e)return;const n=t?._mc||{};n&&n[e]&&delete n[e],!Object.keys(n).length&&t instanceof HTMLElement&&t.hasAttribute("data-mc")&&t.removeAttribute("data-mc")}function i(t){return"_mc"+t[0].toUpperCase()+t.substring(1)}function u(t,e,n,r=!1){t.addEventListener(i(e),n,{capture:!1,once:r})}function l(t,e,n={},r="l"){const o="string"==typeof e?new CustomEvent(i(e),{detail:{data:n,bubble:r}}):e;r.length&&r.indexOf("l")>-1&&t.dispatchEvent(o),/[u|d]/.test(r)&&function(t,e){setTimeout((()=>{-1===e.detail.bubble.indexOf("l")&&(e.detail.bubble+="l"),e.detail.bubble.indexOf("u")>-1&&t.closest("[data-mc]")?.dispatchEvent(e),e.detail.bubble.indexOf("d")>-1&&new Set(t._mc.children().map((t=>t?.target))).forEach((t=>{t&&m.trigger(t,e)}))}),0)}(t,o)}class d{_target;constructor(t,e=!1){var r;this._target=new WeakRef(t||{}),(r=this).constructor!==m&&setTimeout((()=>{r.trigger("Init")}),0),function(t){if(!n()||t.constructor===m)return;const e=t.target;if(e instanceof HTMLElement){let n=t;Object.getOwnPropertyNames(n.constructor.prototype).filter((t=>/^on[A-Z]|one[A-Z]/.test(t)&&"function"==typeof n.constructor.prototype[t])).forEach((t=>{let r=/^one/.test(t),o=t.replace(/^on[e]{0,1}/,""),c=o.toLowerCase(),s=e=>{n[t](e)};e["on"+c]?e.addEventListener(c,s):u(e,o,s,r)}))}}(this)}get target(){return this._target.deref()}}class m extends d{constructor(t,e=!1){super(t)}static add=s;static remove=a;static trigger=l;off(t,e){!function(t,e,n){t.removeEventListener(i(e),n)}(this.target,t,e)}on(t,e){u(this.target,t,e)}one(t,e){!function(t,e,n){u(t,e,n,!0)}(this.target,t,e)}trigger(t,e={},n="l"){}parent(t=""){let e=this.target;return c(e)?o(e.parentNode,t,!0):[]}ancestors(t=""){let e=this?.target;return c(e)?o(this.target.parentNode,t,!1):[]}children(t=""){let e=this?.target;return c(e)?r([...function(t){const e=Math.random().toString().replace(".",""),n='[data-mc]:not([temp_id="'+e+'"] [data-mc] [data-mc])';t.setAttribute("temp_id",e);const r=t.querySelectorAll(n);return t.removeAttribute("temp_id"),r}(e)],t):[]}descendants(t=""){let e=this?.target;return c(e)?r([...e.querySelectorAll("*[data-mc]")],t):[]}}new Set;class f extends HTMLElement{constructor(){super()}connectedCallback(){this.dispatchEvent(new CustomEvent("_mcConnected"))}connectedMoveCallback(){this.dispatchEvent(new CustomEvent("_mcConnectedMove"))}disconnectedCallback(){this.dispatchEvent(new CustomEvent("_mcDisconnected"))}adoptedCallback(){this.dispatchEvent(new CustomEvent("_mcAdopted"))}attributeChangedCallback(t,e,n){this.dispatchEvent(new CustomEvent("_mcAttributeChanged",{detail:{name:t,oldValue:e,newValue:n}}))}formResetCallback(){this.dispatchEvent(new CustomEvent("_mcFormReset"))}}function p(t){return"function"==typeof t&&/^class\s/.test(Function.prototype.toString.call(t))}function b(t,e,n=[]){if(customElements.get(t))return void console.warn(`IGNORED: Custom element "${t}" is already defined!`);if(!t.includes("-"))throw new Error('createCustomElement: tagName must contain at least one hyphen ("-").');let r=t.split("-").map((t=>t.charAt(0).toUpperCase()+t.slice(1))).join("");p(e.prototype.constructor)&&e.prototype instanceof d?customElements.define(t,function(t,e){return Object.defineProperty(e,"name",{value:t})}(r,class extends f{instance;constructor(t){super();const n=p(e)?new e(this,t):e;m.add(this,r,n)}static get observedAttributes(){return n}})):customElements.define(t,e)}function h(t){return customElements.get(t)}return e})()));
|