@twobirds/microcomponents 0.0.83 → 0.0.85
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 +22 -6
- package/assets/documentation/MC.md +60 -81
- package/assets/documentation/elements.md +6 -9
- package/assets/documentation/observables.md +97 -11
- package/assets/test/test.html +1 -1
- package/dist/MC.d.ts +14 -16
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.js +150 -218
- package/dist/MC.min.js +164 -308
- package/dist/MC.ts +213 -319
- 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 +14 -16
- package/public/MC.d.ts.map +1 -1
- package/public/MC.js +150 -218
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +164 -308
- package/public/MC.ts +213 -319
- package/public/documentation/MC.md +60 -81
- package/public/documentation/elements.md +6 -9
- package/public/documentation/observables.md +97 -11
- 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 +14 -16
- package/public/src/MC.d.ts.map +1 -1
- package/public/src/MC.js +150 -218
- package/public/src/MC.js.map +1 -1
- package/public/src/MC.ts +213 -319
- 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 +6 -5
- package/public/src/test/test.js.map +1 -1
- package/public/src/test/test.ts +10 -9
- package/public/test/MC.d.ts +14 -16
- package/public/test/MC.d.ts.map +1 -1
- package/public/test/MC.js +150 -218
- package/public/test/MC.min.js +164 -308
- package/public/test/MC.ts +213 -319
- 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 +6 -5
- package/public/test/test.js.map +1 -1
- package/public/test/test.ts +10 -9
- package/public/typedoc/assets/navigation.js +1 -1
- package/public/typedoc/assets/search.js +1 -1
- package/public/typedoc/classes/MC.DC.html +7 -6
- package/public/typedoc/classes/MC.MC.html +3 -6
- 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/{selectors._d.html → MC.on.html} +1 -1
- package/public/typedoc/functions/MC.one.html +1 -0
- package/public/typedoc/functions/MC.trigger.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/index.html +21 -10
- package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
- package/public/typedoc/modules/MC.html +6 -5
- 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 +213 -319
- 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 +10 -9
- 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._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/test/MC.js
CHANGED
|
@@ -1,79 +1,30 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
let nativeEventNames =
|
|
5
|
-
if (isBrowser()) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
function getMicroComponents(elements, search) {
|
|
11
|
-
let mcValues = [];
|
|
12
|
-
elements.forEach((e) => {
|
|
13
|
-
if (e) {
|
|
14
|
-
if (e instanceof HTMLElement) {
|
|
15
|
-
const _mc = e?._mc;
|
|
16
|
-
if (!search && _mc) {
|
|
17
|
-
mcValues = mcValues.concat(Object.values(e._mc));
|
|
18
|
-
}
|
|
19
|
-
else if (search && _mc && _mc[search]) {
|
|
20
|
-
mcValues.push(_mc[search]);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
return mcValues;
|
|
26
|
-
}
|
|
27
|
-
function traverseNodes(node, search, firstonly = true) {
|
|
28
|
-
let mcValues = [];
|
|
29
|
-
while (node) {
|
|
30
|
-
if (node._mc) {
|
|
31
|
-
if (!search) {
|
|
32
|
-
mcValues = mcValues.concat(Object.values(node._mc));
|
|
33
|
-
}
|
|
34
|
-
else if (search && node._mc[search]) {
|
|
35
|
-
mcValues.push(node._mc[search]);
|
|
36
|
-
}
|
|
37
|
-
if (firstonly)
|
|
38
|
-
return mcValues;
|
|
39
|
-
}
|
|
40
|
-
node = node.parentNode;
|
|
2
|
+
const isBrowser = new Function('try {return this===window;}catch(e){ return false;}');
|
|
3
|
+
function getNativeEventNames(domNode) {
|
|
4
|
+
let nativeEventNames = [];
|
|
5
|
+
if (isBrowser()) {
|
|
6
|
+
Object.keys(HTMLElement.prototype)
|
|
7
|
+
.filter((key) => /^on/.test(key))
|
|
8
|
+
.forEach((eventName) => nativeEventNames.push(eventName));
|
|
41
9
|
}
|
|
42
|
-
return
|
|
10
|
+
return nativeEventNames;
|
|
43
11
|
}
|
|
44
12
|
function isDOM(element) {
|
|
45
13
|
return element && element instanceof HTMLElement;
|
|
46
14
|
}
|
|
47
|
-
function addListener(domNode, eventName, handler, capture = false, once = false) {
|
|
48
|
-
let options = { once: false };
|
|
49
|
-
if (capture) {
|
|
50
|
-
options.capture = capture;
|
|
51
|
-
}
|
|
52
|
-
if (once) {
|
|
53
|
-
options.once = once;
|
|
54
|
-
}
|
|
55
|
-
domNode.addEventListener(eventName, handler, options);
|
|
56
|
-
}
|
|
57
|
-
function removeListener(domNode, eventName, handler) {
|
|
58
|
-
domNode.removeEventListener(eventName, handler);
|
|
59
|
-
}
|
|
60
15
|
function add(target, key, element = {}) {
|
|
61
16
|
let node = target;
|
|
62
17
|
if (!node._mc) {
|
|
63
|
-
let debug = DC?.debug;
|
|
64
|
-
DC.debug = false;
|
|
65
18
|
node._mc = new DC(target);
|
|
66
|
-
DC.debug = debug;
|
|
67
|
-
delete node._mc._mc;
|
|
68
19
|
}
|
|
69
20
|
const _mc = node._mc;
|
|
70
21
|
if (key.length && !_mc[key]) {
|
|
71
22
|
_mc[key] = element;
|
|
72
|
-
if (target instanceof HTMLElement && !target.getAttribute('
|
|
73
|
-
target.setAttribute('
|
|
23
|
+
if (target instanceof HTMLElement && !target.getAttribute('data-mc')) {
|
|
24
|
+
target.setAttribute('data-mc', '');
|
|
74
25
|
}
|
|
75
26
|
}
|
|
76
|
-
return
|
|
27
|
+
return node;
|
|
77
28
|
}
|
|
78
29
|
function remove(target, key) {
|
|
79
30
|
if (!key)
|
|
@@ -84,35 +35,60 @@ function remove(target, key) {
|
|
|
84
35
|
}
|
|
85
36
|
if (!Object.keys(_mc).length &&
|
|
86
37
|
target instanceof HTMLElement &&
|
|
87
|
-
target.hasAttribute('
|
|
88
|
-
target.removeAttribute('
|
|
89
|
-
}
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
function trigger(target, ev, data = {}, bubble = 'l') {
|
|
93
|
-
let _mc = target?._mc;
|
|
94
|
-
if (!_mc)
|
|
95
|
-
return;
|
|
96
|
-
let event = ev instanceof McEvent
|
|
97
|
-
? new McEvent(ev.type, ev.data, 'l')
|
|
98
|
-
: new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string' ? ev : new McEvent(ev, data, bubble);
|
|
99
|
-
[...Object.values(_mc)].forEach((mc) => {
|
|
100
|
-
if (mc?.trigger && typeof mc?.trigger === 'function') {
|
|
101
|
-
mc?.trigger(event);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
105
|
-
bubbleEvent(target, mcEvent);
|
|
38
|
+
target.hasAttribute('data-mc')) {
|
|
39
|
+
target.removeAttribute('data-mc');
|
|
106
40
|
}
|
|
107
41
|
return;
|
|
108
42
|
}
|
|
109
43
|
function init(element) {
|
|
110
|
-
if (element.constructor === DC)
|
|
111
|
-
return;
|
|
112
44
|
setTimeout(() => {
|
|
45
|
+
if (element.constructor === DC)
|
|
46
|
+
return;
|
|
113
47
|
element.trigger('Init');
|
|
114
48
|
}, 0);
|
|
115
49
|
}
|
|
50
|
+
function getMcEventName(eventName) {
|
|
51
|
+
return '_mc' + eventName[0].toUpperCase() + eventName.substring(1);
|
|
52
|
+
}
|
|
53
|
+
function off(domNode, eventName, handler) {
|
|
54
|
+
domNode.removeEventListener(getMcEventName(eventName), handler);
|
|
55
|
+
}
|
|
56
|
+
function on(domNode, eventName, handler, once = false) {
|
|
57
|
+
domNode.addEventListener(getMcEventName(eventName), handler, { capture: false, once });
|
|
58
|
+
}
|
|
59
|
+
function one(domNode, eventName, handler) {
|
|
60
|
+
on(domNode, eventName, handler, true);
|
|
61
|
+
}
|
|
62
|
+
function trigger(domNode, event, data = {}, bubble = 'l') {
|
|
63
|
+
const ev = typeof event === 'string'
|
|
64
|
+
? new CustomEvent(getMcEventName(event), { detail: { data, bubble } })
|
|
65
|
+
: event;
|
|
66
|
+
if (bubble.length && bubble.indexOf('l') > -1) {
|
|
67
|
+
domNode.dispatchEvent(ev);
|
|
68
|
+
}
|
|
69
|
+
if (/[u|d]/.test(bubble)) {
|
|
70
|
+
bubbleEvent(domNode, ev);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function bubbleEvent(domNode, ev) {
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
if (ev.detail.bubble.indexOf('l') === -1) {
|
|
76
|
+
ev.detail.bubble += 'l';
|
|
77
|
+
}
|
|
78
|
+
if (ev.detail.bubble.indexOf('u') > -1) {
|
|
79
|
+
domNode.closest('[data-mc]')?.dispatchEvent(ev);
|
|
80
|
+
}
|
|
81
|
+
if (ev.detail.bubble.indexOf('d') > -1) {
|
|
82
|
+
let targets = new Set(domNode._mc
|
|
83
|
+
.children()
|
|
84
|
+
.map((c) => c?.target));
|
|
85
|
+
targets.forEach((target) => {
|
|
86
|
+
if (target)
|
|
87
|
+
target._mc.trigger(target, ev);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}, 0);
|
|
91
|
+
}
|
|
116
92
|
function autoAttachListeners(element) {
|
|
117
93
|
if (!isBrowser() || element.constructor === DC)
|
|
118
94
|
return;
|
|
@@ -123,53 +99,33 @@ function autoAttachListeners(element) {
|
|
|
123
99
|
.filter((key) => /^on[A-Z]|one[A-Z]/.test(key) &&
|
|
124
100
|
typeof that.constructor.prototype[key] === 'function')
|
|
125
101
|
.forEach((key) => {
|
|
126
|
-
let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase()
|
|
127
|
-
|
|
102
|
+
let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase();
|
|
103
|
+
let listener = (ev) => {
|
|
104
|
+
that[key](ev);
|
|
128
105
|
};
|
|
129
|
-
if (
|
|
130
|
-
|
|
131
|
-
configurable: true,
|
|
132
|
-
enumerable: false,
|
|
133
|
-
writable: true,
|
|
134
|
-
value: (ev) => {
|
|
135
|
-
that.constructor.prototype[key].bind(that)(ev);
|
|
136
|
-
},
|
|
137
|
-
});
|
|
106
|
+
if (!!target['on' + nativeEventName]) {
|
|
107
|
+
target.addEventListener(nativeEventName, listener);
|
|
138
108
|
}
|
|
139
|
-
|
|
140
|
-
|
|
109
|
+
else {
|
|
110
|
+
on(target, withoutOnOne, listener, once);
|
|
141
111
|
}
|
|
142
112
|
});
|
|
143
113
|
}
|
|
144
114
|
}
|
|
145
|
-
function
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
DC.trigger(parent, ev);
|
|
155
|
-
}
|
|
156
|
-
if (ev.bubble.indexOf('d') > -1) {
|
|
157
|
-
let targets = new Set(target._mc
|
|
158
|
-
.children()
|
|
159
|
-
.map((c) => c?.target));
|
|
160
|
-
targets.forEach((target) => {
|
|
161
|
-
if (target)
|
|
162
|
-
DC.trigger(target, ev);
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}, 0);
|
|
166
|
-
}
|
|
115
|
+
function getMcChildNodes(domNode) {
|
|
116
|
+
const id = Math.random().toString().replace('.', '');
|
|
117
|
+
const selector = '[data-mc]:not([temp_id="' + id + '"] [data-mc] [data-mc])';
|
|
118
|
+
domNode.setAttribute('temp_id', id);
|
|
119
|
+
const mcArray = [...domNode.querySelectorAll(selector)]
|
|
120
|
+
.filter((e) => !!e._mc)
|
|
121
|
+
.map(e => e._mc);
|
|
122
|
+
domNode.removeAttribute('temp_id');
|
|
123
|
+
return mcArray.length ? mcArray : null;
|
|
167
124
|
}
|
|
168
125
|
class McBase {
|
|
169
126
|
_target;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
let that = this, element = that;
|
|
127
|
+
constructor(target) {
|
|
128
|
+
let element = this;
|
|
173
129
|
this._target = new WeakRef(target || {});
|
|
174
130
|
init(element);
|
|
175
131
|
autoAttachListeners(element);
|
|
@@ -177,55 +133,11 @@ class McBase {
|
|
|
177
133
|
get target() {
|
|
178
134
|
return this._target.deref();
|
|
179
135
|
}
|
|
180
|
-
get _mc() {
|
|
181
|
-
return this.__mc;
|
|
182
|
-
}
|
|
183
136
|
}
|
|
184
137
|
class MC extends McBase {
|
|
185
138
|
constructor(target) {
|
|
186
139
|
super(target);
|
|
187
140
|
}
|
|
188
|
-
static trigger = trigger;
|
|
189
|
-
trigger(ev, data = {}, bubble = 'l') {
|
|
190
|
-
let that = this;
|
|
191
|
-
if (that.constructor === MC || that.constructor === DC) {
|
|
192
|
-
let event = ev instanceof McEvent
|
|
193
|
-
? new McEvent(ev.type, ev.data, 'l')
|
|
194
|
-
: new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string'
|
|
195
|
-
? ev
|
|
196
|
-
: new McEvent(ev, data, bubble);
|
|
197
|
-
[...Object.getOwnPropertyNames(that)].forEach((mc) => {
|
|
198
|
-
if (that[mc]?.trigger &&
|
|
199
|
-
typeof that[mc]?.trigger === 'function') {
|
|
200
|
-
that[mc]?.trigger(event);
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
204
|
-
bubbleEvent(that.target, mcEvent);
|
|
205
|
-
}
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
if (that instanceof MC || that instanceof DC) {
|
|
209
|
-
const that = this, mcEvent = typeof ev !== 'string'
|
|
210
|
-
? ev
|
|
211
|
-
: new McEvent(ev, data, bubble), handlerName = 'on' + mcEvent.type[0].toUpperCase() + mcEvent.type.slice(1);
|
|
212
|
-
if (mcEvent.bubble.indexOf('l') > -1) {
|
|
213
|
-
if (!mcEvent.immediateStopped &&
|
|
214
|
-
typeof that[handlerName] === 'function') {
|
|
215
|
-
that[handlerName](mcEvent);
|
|
216
|
-
if (that.hasOwnProperty(handlerName)) {
|
|
217
|
-
delete that[handlerName];
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
if (mcEvent.stopped || mcEvent.bubble === 'l') {
|
|
222
|
-
return that;
|
|
223
|
-
}
|
|
224
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
225
|
-
bubbleEvent(that.target, mcEvent);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
141
|
}
|
|
230
142
|
class DC extends McBase {
|
|
231
143
|
constructor(target, debug = false) {
|
|
@@ -233,59 +145,56 @@ class DC extends McBase {
|
|
|
233
145
|
}
|
|
234
146
|
static add = add;
|
|
235
147
|
static remove = remove;
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
148
|
+
off(eventName, handler) {
|
|
149
|
+
off(this.target, eventName, handler);
|
|
150
|
+
}
|
|
151
|
+
on(eventName, handler) {
|
|
152
|
+
on(this.target, eventName, handler);
|
|
153
|
+
}
|
|
154
|
+
one(eventName, handler) {
|
|
155
|
+
one(this.target, eventName, handler);
|
|
239
156
|
}
|
|
240
|
-
|
|
157
|
+
trigger(eventName, data = {}, bubble = 'l') {
|
|
158
|
+
trigger(this.target, eventName, data, bubble);
|
|
159
|
+
}
|
|
160
|
+
parent() {
|
|
241
161
|
let target = this.target;
|
|
242
162
|
if (!isDOM(target))
|
|
243
|
-
return
|
|
244
|
-
return
|
|
163
|
+
return null;
|
|
164
|
+
return target.closest('[data-mc]')?._mc || null;
|
|
245
165
|
}
|
|
246
|
-
ancestors(
|
|
247
|
-
let
|
|
248
|
-
if (!isDOM(
|
|
166
|
+
ancestors() {
|
|
167
|
+
let currentNode = this?.target, result = [];
|
|
168
|
+
if (!isDOM(currentNode))
|
|
249
169
|
return [];
|
|
250
|
-
|
|
170
|
+
while (currentNode = (currentNode.closest('[data-mc]'))) {
|
|
171
|
+
if (currentNode?._mc) {
|
|
172
|
+
result.push(currentNode?._mc);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return result.length ? result : null;
|
|
251
176
|
}
|
|
252
|
-
children(
|
|
177
|
+
children() {
|
|
253
178
|
let target = this?.target;
|
|
254
179
|
if (!isDOM(target))
|
|
255
|
-
return
|
|
256
|
-
|
|
257
|
-
const selector = '[_mc]:not([temp_id="' + id + '"] [_mc] [_mc])';
|
|
258
|
-
target.setAttribute('temp_id', id);
|
|
259
|
-
const myDomElements = target.querySelectorAll(selector);
|
|
260
|
-
const mcValues = getMicroComponents([...myDomElements], search);
|
|
261
|
-
target.removeAttribute('temp_id');
|
|
262
|
-
return mcValues;
|
|
180
|
+
return null;
|
|
181
|
+
return getMcChildNodes(target);
|
|
263
182
|
}
|
|
264
|
-
descendants(
|
|
265
|
-
|
|
183
|
+
descendants() {
|
|
184
|
+
const target = this?.target;
|
|
266
185
|
if (!isDOM(target))
|
|
267
186
|
return [];
|
|
268
|
-
const
|
|
269
|
-
|
|
187
|
+
const mcArray = [...target.querySelectorAll('[data-mc]')]
|
|
188
|
+
.filter((e) => !!e._mc)
|
|
189
|
+
.map(e => e._mc);
|
|
190
|
+
return mcArray.length ? mcArray : null;
|
|
270
191
|
}
|
|
271
192
|
}
|
|
272
|
-
const
|
|
273
|
-
function
|
|
274
|
-
|
|
275
|
-
return;
|
|
276
|
-
loadingMCs.add(element);
|
|
277
|
-
const fileName = './' + element.split('-').join('/') + '.js';
|
|
278
|
-
const se = document.createElement('script');
|
|
279
|
-
se.setAttribute('src', fileName);
|
|
280
|
-
se.setAttribute('blocking', 'render');
|
|
281
|
-
se.async = true;
|
|
282
|
-
se.setAttribute('type', 'module');
|
|
283
|
-
se.setAttribute('data-name', element);
|
|
284
|
-
se.setAttribute('loading', '');
|
|
285
|
-
const loadedPromise = customElements.whenDefined(element);
|
|
286
|
-
loadedPromise.then(() => {
|
|
193
|
+
const loadingDCs = new Set();
|
|
194
|
+
function attachDC(element) {
|
|
195
|
+
return () => {
|
|
287
196
|
const elements = Array
|
|
288
|
-
.from(document.querySelectorAll(`[
|
|
197
|
+
.from(document.querySelectorAll(`[data-mc*="${element}"]`))
|
|
289
198
|
.filter(element => element instanceof HTMLElement);
|
|
290
199
|
if (elements.length === 0)
|
|
291
200
|
return;
|
|
@@ -293,19 +202,36 @@ function makeLoadScript(element) {
|
|
|
293
202
|
elements.forEach((node) => {
|
|
294
203
|
DC.add(node, klass.name, new klass(node));
|
|
295
204
|
const new_mc = node
|
|
296
|
-
.getAttribute('
|
|
205
|
+
.getAttribute('data-mc')
|
|
297
206
|
.split(' ')
|
|
298
207
|
.filter((name) => name !== element && name !== '')
|
|
299
|
-
.join(' ')
|
|
300
|
-
|
|
208
|
+
.join(' ')
|
|
209
|
+
.trim();
|
|
210
|
+
node.setAttribute('data-mc', new_mc);
|
|
301
211
|
});
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
;
|
|
215
|
+
function makeLoadScript(element) {
|
|
216
|
+
if (loadingDCs.has(element))
|
|
217
|
+
return;
|
|
218
|
+
loadingDCs.add(element);
|
|
219
|
+
const fileName = './' + element.split('-').join('/') + '.js';
|
|
220
|
+
const se = document.createElement('script');
|
|
221
|
+
se.setAttribute('src', fileName);
|
|
222
|
+
se.setAttribute('blocking', 'render');
|
|
223
|
+
se.async = true;
|
|
224
|
+
se.setAttribute('type', 'module');
|
|
225
|
+
se.setAttribute('data-name', element);
|
|
226
|
+
se.setAttribute('loading', '');
|
|
227
|
+
const loadedPromise = customElements.whenDefined(element);
|
|
228
|
+
loadedPromise.then(attachDC(element));
|
|
229
|
+
se.addEventListener('load', (ev) => {
|
|
230
|
+
loadingDCs.delete(element);
|
|
231
|
+
document.head.querySelector(`script[data-name="${element}"]`)?.remove();
|
|
306
232
|
});
|
|
307
|
-
|
|
308
|
-
console.error('could not load
|
|
233
|
+
se.addEventListener('error', (ev) => {
|
|
234
|
+
console.error('could not load DC code from', fileName);
|
|
309
235
|
});
|
|
310
236
|
document.head.append(se);
|
|
311
237
|
}
|
|
@@ -313,16 +239,22 @@ function loadUndefinedMCs() {
|
|
|
313
239
|
[...document.querySelectorAll(':not(:defined)')]
|
|
314
240
|
.filter((element) => !!element
|
|
315
241
|
&& !customElements.get(element.tagName.toLowerCase())
|
|
316
|
-
&& !
|
|
242
|
+
&& !loadingDCs.has(element.tagName.toLowerCase()))
|
|
317
243
|
.forEach((el) => {
|
|
318
244
|
makeLoadScript(el.tagName.toLowerCase());
|
|
319
245
|
});
|
|
320
|
-
[...document.querySelectorAll('[
|
|
246
|
+
[...document.querySelectorAll('[data-mc]:not([data-mc=""]')]
|
|
321
247
|
.filter((element) => !!element)
|
|
322
248
|
.forEach((el) => {
|
|
323
|
-
const _mc = el.getAttribute('
|
|
324
|
-
_mc?.forEach(
|
|
325
|
-
|
|
249
|
+
const _mc = el.getAttribute('data-mc')?.split(' ').filter(name => name !== '');
|
|
250
|
+
_mc?.forEach(element => {
|
|
251
|
+
const isDefined = customElements.get(element);
|
|
252
|
+
if (!loadingDCs.has(element) && !isDefined) {
|
|
253
|
+
makeLoadScript(element);
|
|
254
|
+
}
|
|
255
|
+
else if (isDefined) {
|
|
256
|
+
attachDC(element)();
|
|
257
|
+
}
|
|
326
258
|
});
|
|
327
259
|
});
|
|
328
260
|
}
|
|
@@ -343,6 +275,6 @@ function autoload(enable = true) {
|
|
|
343
275
|
window.autoload = window.autoload || autoload;
|
|
344
276
|
return autoloadEnabled;
|
|
345
277
|
}
|
|
346
|
-
autoload.state =
|
|
347
|
-
export {
|
|
278
|
+
autoload.state = loadingDCs;
|
|
279
|
+
export { McBase, MC, DC, autoload, on, one, off, trigger };
|
|
348
280
|
//# sourceMappingURL=MC.js.map
|