@twobirds/microcomponents 0.0.82 → 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/documentation/MC.md +0 -1
- package/assets/test/test.html +1 -1
- package/dist/MC.d.ts +11 -10
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.js +137 -200
- package/dist/MC.min.js +157 -296
- package/dist/MC.ts +202 -337
- package/dist/elements.d.ts +1 -1
- package/dist/elements.d.ts.map +1 -1
- package/dist/elements.js +26 -6
- package/dist/elements.min.js +1 -1
- package/dist/elements.ts +50 -7
- 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 +52 -57
- package/dist/observables.min.js +1 -1
- package/dist/observables.ts +68 -73
- package/package.json +6 -5
- package/public/MC.d.ts +11 -10
- package/public/MC.d.ts.map +1 -1
- package/public/MC.js +137 -200
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +157 -296
- package/public/MC.ts +202 -337
- package/public/documentation/MC.md +0 -1
- package/public/elements.d.ts +1 -1
- package/public/elements.d.ts.map +1 -1
- package/public/elements.js +26 -6
- package/public/elements.js.map +1 -1
- package/public/elements.min.js +1 -1
- package/public/elements.ts +50 -7
- 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 +52 -57
- package/public/observables.js.map +1 -1
- package/public/observables.min.js +1 -1
- package/public/observables.ts +68 -73
- package/public/{test/selectors.ts → selectors._ts} +2 -367
- package/public/src/MC.d.ts +37 -0
- package/public/src/MC.d.ts.map +1 -0
- package/public/src/MC.js +316 -0
- package/public/src/MC.js.map +1 -0
- package/public/src/MC.ts +202 -337
- package/public/src/elements.d.ts +5 -0
- package/public/src/elements.d.ts.map +1 -0
- package/public/src/elements.js +68 -0
- package/public/src/elements.js.map +1 -0
- package/public/src/elements.ts +50 -7
- package/public/src/formValues.d.ts +3 -0
- package/public/src/formValues.d.ts.map +1 -0
- package/public/src/formValues.js +162 -0
- package/public/src/formValues.js.map +1 -0
- package/public/src/formValues.ts +3 -3
- package/public/src/helpers.d.ts +14 -0
- package/public/src/helpers.d.ts.map +1 -0
- package/public/src/helpers.js +113 -0
- package/public/src/microcomponents.d.ts +6 -0
- package/public/src/microcomponents.d.ts.map +1 -0
- package/public/src/microcomponents.js +7 -0
- package/public/src/microcomponents.js.map +1 -0
- package/public/src/microcomponents.ts +1 -1
- package/public/src/observables.d.ts +11 -0
- package/public/src/observables.d.ts.map +1 -0
- package/public/src/observables.js +244 -0
- package/public/src/observables.js.map +1 -0
- package/public/src/observables.ts +68 -73
- package/public/{selectors.ts → src/selectors._ts} +2 -367
- package/public/src/test/grandparent.css +11 -0
- package/public/src/test/test/child.d.ts +2 -0
- package/public/src/test/test/child.d.ts.map +1 -0
- package/public/src/test/test/child.js +15 -0
- package/public/src/test/test/child.js.map +1 -0
- package/public/src/test/test/child.ts +21 -0
- package/public/src/test/test/grandchild.d.ts +2 -0
- package/public/src/test/test/grandchild.d.ts.map +1 -0
- package/public/src/test/test/grandchild.js +15 -0
- package/public/src/test/test/grandchild.js.map +1 -0
- package/public/src/test/test/grandchild.ts +21 -0
- package/public/src/test/test/grandparent.d.ts +2 -0
- package/public/src/test/test/grandparent.d.ts.map +1 -0
- package/public/src/test/test/grandparent.js +1 -0
- package/public/src/test/test/grandparent.js.map +1 -0
- package/public/src/test/test/grandparent.ts +29 -0
- package/public/src/test/test/greatgrandchild.d.ts +2 -0
- package/public/src/test/test/greatgrandchild.d.ts.map +1 -0
- package/public/src/test/test/greatgrandchild.js +29 -0
- package/public/src/test/test/greatgrandchild.js.map +1 -0
- package/public/src/test/test/greatgrandchild.ts +42 -0
- package/public/src/test/test/parent.d.ts +2 -0
- package/public/src/test/test/parent.d.ts.map +1 -0
- package/public/src/test/test/parent.js +15 -0
- package/public/src/test/test/parent.js.map +1 -0
- package/public/src/test/test/parent.ts +21 -0
- package/public/src/test/test/testform.d.ts +2 -0
- package/public/src/test/test/testform.d.ts.map +1 -0
- package/public/src/test/test/testform.js +1 -0
- package/public/src/test/test/testform.js.map +1 -0
- package/public/src/test/test/testform.ts +153 -0
- package/public/src/test/test/testfunction.d.ts +3 -0
- package/public/src/test/test/testfunction.d.ts.map +1 -0
- package/public/src/test/test/testfunction.js +7 -0
- package/public/src/test/test/testfunction.js.map +1 -0
- package/public/src/test/test/testfunction.ts +12 -0
- package/public/src/test/test/testmc.d.ts +3 -0
- package/public/src/test/test/testmc.d.ts.map +1 -0
- package/public/src/test/test/testmc.js +10 -0
- package/public/src/test/test/testmc.js.map +1 -0
- package/public/src/test/test/testmc.ts +16 -0
- package/public/src/test/test/testsimpleclass.d.ts +3 -0
- package/public/src/test/test/testsimpleclass.d.ts.map +1 -0
- package/public/src/test/test/testsimpleclass.js +9 -0
- package/public/src/test/test/testsimpleclass.js.map +1 -0
- package/public/src/test/test/testsimpleclass.ts +15 -0
- package/public/src/test/test.d.ts +2 -0
- package/public/src/test/test.d.ts.map +1 -0
- package/public/src/test/test.js +80 -0
- package/public/src/test/test.js.map +1 -0
- package/public/src/test/test.ts +188 -0
- package/public/src/test/testform.css +47 -0
- package/public/src/test/testform.html +56 -0
- package/public/src/test/testform.json +27 -0
- package/public/test/MC.d.ts +11 -10
- package/public/test/MC.d.ts.map +1 -1
- package/public/test/MC.js +137 -200
- package/public/test/MC.min.js +377 -0
- package/public/test/MC.ts +202 -337
- package/public/test/elements.d.ts +1 -1
- package/public/test/elements.d.ts.map +1 -1
- package/public/test/elements.js +26 -6
- package/public/test/elements.min.js +1 -0
- package/public/test/elements.ts +50 -7
- package/public/test/formValues.js +2 -2
- package/public/test/formValues.min.js +1 -0
- package/public/test/formValues.ts +3 -3
- package/public/test/grandparent.css +1 -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 +52 -57
- package/public/test/observables.min.js +1 -0
- package/public/test/observables.ts +68 -73
- package/public/test/test/child.ts +21 -0
- package/public/test/test/grandchild.ts +21 -0
- 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 +29 -0
- package/public/test/test/greatgrandchild.ts +42 -0
- package/public/test/test/parent.ts +21 -0
- package/public/test/test/testform.js +1 -1
- package/public/test/test/testform.js.map +1 -1
- package/public/test/test/testform.ts +153 -0
- package/public/test/test/testfunction.d.ts +3 -0
- package/public/test/test/testfunction.d.ts.map +1 -0
- package/public/test/test/testfunction.js +7 -0
- package/public/test/test/testfunction.js.map +1 -0
- package/public/test/test/testfunction.ts +12 -0
- package/public/test/test/testmc.d.ts +2 -5
- package/public/test/test/testmc.d.ts.map +1 -1
- package/public/test/test/testmc.js +4 -4
- package/public/test/test/testmc.js.map +1 -1
- package/public/test/test/testmc.ts +16 -0
- package/public/test/test/testsimpleclass.d.ts +3 -0
- package/public/test/test/testsimpleclass.d.ts.map +1 -0
- package/public/test/test/testsimpleclass.js +9 -0
- package/public/test/test/testsimpleclass.js.map +1 -0
- package/public/test/test/testsimpleclass.ts +15 -0
- package/public/test/test.html +1 -1
- package/public/test/test.js +5 -6
- package/public/test/test.js.map +1 -1
- package/public/test/test.ts +188 -0
- package/public/test/testform.css +47 -0
- package/public/test/testform.html +56 -0
- package/public/test/testform.json +3 -3
- 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 +2 -2
- 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/types/observables.Observable.html +1 -1
- package/src/MC.ts +202 -337
- package/src/elements.ts +50 -7
- package/src/formValues.ts +3 -3
- package/src/microcomponents.ts +1 -1
- package/src/observables.ts +68 -73
- package/{dist/selectors.ts → src/selectors._ts} +2 -367
- package/src/test/test/grandparent.ts +12 -4
- package/src/test/test/testform.ts +13 -11
- package/src/test/test/testfunction.ts +12 -0
- package/src/test/test/testmc.ts +13 -9
- package/src/test/test/testsimpleclass.ts +15 -0
- package/src/test/test.ts +8 -20
- package/tasks.md +36 -0
- 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 -108
- package/dist/selectors.d.ts.map +0 -1
- package/dist/selectors.js +0 -971
- 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 -108
- package/public/selectors.d.ts.map +0 -1
- package/public/selectors.js +0 -971
- package/public/selectors.js.map +0 -1
- package/public/selectors.min.js +0 -1
- package/public/src/selectors.ts +0 -1634
- package/public/test/MC.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.js.map +0 -1
- package/public/test/McEvent.ts +0 -96
- package/public/test/elements.js.map +0 -1
- package/public/test/formValues.js.map +0 -1
- package/public/test/microcomponents.js.map +0 -1
- package/public/test/observables.js.map +0 -1
- package/public/test/selectors.d.ts +0 -108
- package/public/test/selectors.d.ts.map +0 -1
- package/public/test/selectors.js +0 -971
- package/public/test/selectors.js.map +0 -1
- 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/src/McEvent.ts +0 -96
- package/src/selectors.ts +0 -1634
- /package/{dist/McEvent.ts → public/McEvent._ts} +0 -0
- /package/public/{McEvent.ts → src/McEvent._ts} +0 -0
- /package/public/{test → src}/helpers.js.map +0 -0
- /package/{public/src/McEvent.ts → src/McEvent._ts} +0 -0
package/public/MC.min.js
CHANGED
|
@@ -44,103 +44,29 @@ return /******/ (() => { // webpackBootstrap
|
|
|
44
44
|
/******/
|
|
45
45
|
/************************************************************************/
|
|
46
46
|
var __webpack_exports__ = {};
|
|
47
|
-
// ESM COMPAT FLAG
|
|
48
47
|
__webpack_require__.r(__webpack_exports__);
|
|
48
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
49
|
+
/* harmony export */ DC: () => (/* binding */ DC),
|
|
50
|
+
/* harmony export */ MC: () => (/* binding */ MC),
|
|
51
|
+
/* harmony export */ McBase: () => (/* binding */ McBase),
|
|
52
|
+
/* harmony export */ autoload: () => (/* binding */ autoload),
|
|
53
|
+
/* harmony export */ off: () => (/* binding */ off),
|
|
54
|
+
/* harmony export */ on: () => (/* binding */ on),
|
|
55
|
+
/* harmony export */ one: () => (/* binding */ one),
|
|
56
|
+
/* harmony export */ trigger: () => (/* binding */ trigger)
|
|
57
|
+
/* harmony export */ });
|
|
49
58
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
autoload: () => (/* binding */ autoload),
|
|
58
|
-
removeListener: () => (/* binding */ removeListener)
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
;// ./build/McEvent.js
|
|
62
|
-
|
|
63
|
-
var isBrowser = new Function("try {return this===window;}catch(e){ return false;}");
|
|
64
|
-
let nativeEventNames = new Set();
|
|
65
|
-
if (isBrowser()) {
|
|
66
|
-
Object.keys(HTMLElement.prototype).filter(key => /^on/.test(key)).forEach(eventName => nativeEventNames.add(eventName));
|
|
67
|
-
}
|
|
68
|
-
function isDOM(element) {
|
|
69
|
-
return element && element instanceof HTMLElement;
|
|
70
|
-
}
|
|
71
|
-
class McEvent {
|
|
72
|
-
#type;
|
|
73
|
-
#stopped = false;
|
|
74
|
-
#immediateStopped = false;
|
|
75
|
-
constructor(type, data = {}, bubble = 'l') {
|
|
76
|
-
this.#type = type;
|
|
77
|
-
this.data = data;
|
|
78
|
-
this.bubble = bubble;
|
|
79
|
-
}
|
|
80
|
-
get type() {
|
|
81
|
-
return this.#type;
|
|
82
|
-
}
|
|
83
|
-
get stopped() {
|
|
84
|
-
return this.#stopped;
|
|
85
|
-
}
|
|
86
|
-
get immediateStopped() {
|
|
87
|
-
return this.#immediateStopped;
|
|
88
|
-
}
|
|
89
|
-
stopPropagation() {
|
|
90
|
-
this.#stopped = true;
|
|
91
|
-
}
|
|
92
|
-
stopImmediatePropagation() {
|
|
93
|
-
this.stopPropagation();
|
|
94
|
-
this.#immediateStopped = true;
|
|
59
|
+
var isBrowser = new Function('try {return this===window;}catch(e){ return false;}');
|
|
60
|
+
function getNativeEventNames(domNode) {
|
|
61
|
+
let nativeEventNames = [];
|
|
62
|
+
if (isBrowser()) {
|
|
63
|
+
Object.keys(HTMLElement.prototype)
|
|
64
|
+
.filter((key) => /^on/.test(key))
|
|
65
|
+
.forEach((eventName) => nativeEventNames.push(eventName));
|
|
95
66
|
}
|
|
67
|
+
return nativeEventNames;
|
|
96
68
|
}
|
|
97
69
|
function getMicroComponents(elements, search) {
|
|
98
|
-
let mcValues = [];
|
|
99
|
-
elements.forEach(e => {
|
|
100
|
-
if (e) {
|
|
101
|
-
if (e instanceof HTMLElement) {
|
|
102
|
-
const _mc = e?._mc;
|
|
103
|
-
if (!search && _mc) {
|
|
104
|
-
mcValues = mcValues.concat(Object.values(e._mc));
|
|
105
|
-
}
|
|
106
|
-
else if (search && _mc && _mc[search]) {
|
|
107
|
-
mcValues.push(_mc[search]);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
return mcValues;
|
|
113
|
-
}
|
|
114
|
-
function traverseNodes(node, search, firstonly = true) {
|
|
115
|
-
let mcValues = [];
|
|
116
|
-
while (node) {
|
|
117
|
-
if (node._mc) {
|
|
118
|
-
if (!search) {
|
|
119
|
-
mcValues = mcValues.concat(Object.values(node._mc));
|
|
120
|
-
}
|
|
121
|
-
else if (search && node._mc[search]) {
|
|
122
|
-
mcValues.push(node._mc[search]);
|
|
123
|
-
}
|
|
124
|
-
if (firstonly)
|
|
125
|
-
return mcValues;
|
|
126
|
-
}
|
|
127
|
-
node = node.parentNode;
|
|
128
|
-
}
|
|
129
|
-
return mcValues;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
;// ./build/MC.js
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
var MC_isBrowser = new Function('try {return this===window;}catch(e){ return false;}');
|
|
137
|
-
let MC_nativeEventNames = new Set();
|
|
138
|
-
if (MC_isBrowser()) {
|
|
139
|
-
Object.keys(HTMLElement.prototype)
|
|
140
|
-
.filter((key) => /^on/.test(key))
|
|
141
|
-
.forEach((eventName) => MC_nativeEventNames.add(eventName));
|
|
142
|
-
}
|
|
143
|
-
function MC_getMicroComponents(elements, search) {
|
|
144
70
|
let mcValues = [];
|
|
145
71
|
elements.forEach((e) => {
|
|
146
72
|
if (e) {
|
|
@@ -157,7 +83,7 @@ function MC_getMicroComponents(elements, search) {
|
|
|
157
83
|
});
|
|
158
84
|
return mcValues;
|
|
159
85
|
}
|
|
160
|
-
function
|
|
86
|
+
function traverseNodes(node, search, firstonly = true) {
|
|
161
87
|
let mcValues = [];
|
|
162
88
|
while (node) {
|
|
163
89
|
if (node._mc) {
|
|
@@ -174,22 +100,9 @@ function MC_traverseNodes(node, search, firstonly = true) {
|
|
|
174
100
|
}
|
|
175
101
|
return mcValues;
|
|
176
102
|
}
|
|
177
|
-
function
|
|
103
|
+
function isDOM(element) {
|
|
178
104
|
return element && element instanceof HTMLElement;
|
|
179
105
|
}
|
|
180
|
-
function addListener(domNode, eventName, handler, capture = false, once = false) {
|
|
181
|
-
let options = { once: false };
|
|
182
|
-
if (capture) {
|
|
183
|
-
options.capture = capture;
|
|
184
|
-
}
|
|
185
|
-
if (once) {
|
|
186
|
-
options.once = once;
|
|
187
|
-
}
|
|
188
|
-
domNode.addEventListener(eventName, handler, options);
|
|
189
|
-
}
|
|
190
|
-
function removeListener(domNode, eventName, handler) {
|
|
191
|
-
domNode.removeEventListener(eventName, handler);
|
|
192
|
-
}
|
|
193
106
|
function add(target, key, element = {}) {
|
|
194
107
|
let node = target;
|
|
195
108
|
if (!node._mc) {
|
|
@@ -202,8 +115,8 @@ function add(target, key, element = {}) {
|
|
|
202
115
|
const _mc = node._mc;
|
|
203
116
|
if (key.length && !_mc[key]) {
|
|
204
117
|
_mc[key] = element;
|
|
205
|
-
if (target instanceof HTMLElement && !target.getAttribute('
|
|
206
|
-
target.setAttribute('
|
|
118
|
+
if (target instanceof HTMLElement && !target.getAttribute('data-mc')) {
|
|
119
|
+
target.setAttribute('data-mc', '');
|
|
207
120
|
}
|
|
208
121
|
}
|
|
209
122
|
return element;
|
|
@@ -217,25 +130,8 @@ function remove(target, key) {
|
|
|
217
130
|
}
|
|
218
131
|
if (!Object.keys(_mc).length &&
|
|
219
132
|
target instanceof HTMLElement &&
|
|
220
|
-
target.hasAttribute('
|
|
221
|
-
target.removeAttribute('
|
|
222
|
-
}
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
function trigger(target, ev, data = {}, bubble = 'l') {
|
|
226
|
-
let _mc = target?._mc;
|
|
227
|
-
if (!_mc)
|
|
228
|
-
return;
|
|
229
|
-
let event = ev instanceof McEvent
|
|
230
|
-
? new McEvent(ev.type, ev.data, 'l')
|
|
231
|
-
: new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string' ? ev : new McEvent(ev, data, bubble);
|
|
232
|
-
[...Object.values(_mc)].forEach((mc) => {
|
|
233
|
-
if (mc?.trigger && typeof mc?.trigger === 'function') {
|
|
234
|
-
mc?.trigger(event);
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
238
|
-
bubbleEvent(target, mcEvent);
|
|
133
|
+
target.hasAttribute('data-mc')) {
|
|
134
|
+
target.removeAttribute('data-mc');
|
|
239
135
|
}
|
|
240
136
|
return;
|
|
241
137
|
}
|
|
@@ -246,8 +142,50 @@ function init(element) {
|
|
|
246
142
|
element.trigger('Init');
|
|
247
143
|
}, 0);
|
|
248
144
|
}
|
|
145
|
+
function getMcEventName(eventName) {
|
|
146
|
+
return '_mc' + eventName[0].toUpperCase() + eventName.substring(1);
|
|
147
|
+
}
|
|
148
|
+
function off(domNode, eventName, handler) {
|
|
149
|
+
domNode.removeEventListener(getMcEventName(eventName), handler);
|
|
150
|
+
}
|
|
151
|
+
function on(domNode, eventName, handler, once = false) {
|
|
152
|
+
domNode.addEventListener(getMcEventName(eventName), handler, { capture: false, once });
|
|
153
|
+
}
|
|
154
|
+
function one(domNode, eventName, handler) {
|
|
155
|
+
on(domNode, eventName, handler, true);
|
|
156
|
+
}
|
|
157
|
+
function trigger(domNode, event, data = {}, bubble = 'l') {
|
|
158
|
+
const ev = typeof event === 'string'
|
|
159
|
+
? new CustomEvent(getMcEventName(event), { detail: { data, bubble } })
|
|
160
|
+
: event;
|
|
161
|
+
if (bubble.length && bubble.indexOf('l') > -1) {
|
|
162
|
+
domNode.dispatchEvent(ev);
|
|
163
|
+
}
|
|
164
|
+
if (/[u|d]/.test(bubble)) {
|
|
165
|
+
bubbleEvent(domNode, ev);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function bubbleEvent(domNode, ev) {
|
|
169
|
+
setTimeout(() => {
|
|
170
|
+
if (ev.detail.bubble.indexOf('l') === -1) {
|
|
171
|
+
ev.detail.bubble += 'l';
|
|
172
|
+
}
|
|
173
|
+
if (ev.detail.bubble.indexOf('u') > -1) {
|
|
174
|
+
domNode.closest('[data-mc]')?.dispatchEvent(ev);
|
|
175
|
+
}
|
|
176
|
+
if (ev.detail.bubble.indexOf('d') > -1) {
|
|
177
|
+
let targets = new Set(domNode._mc
|
|
178
|
+
.children()
|
|
179
|
+
.map((c) => c?.target));
|
|
180
|
+
targets.forEach((target) => {
|
|
181
|
+
if (target)
|
|
182
|
+
DC.trigger(target, ev);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}, 0);
|
|
186
|
+
}
|
|
249
187
|
function autoAttachListeners(element) {
|
|
250
|
-
if (!
|
|
188
|
+
if (!isBrowser() || element.constructor === DC)
|
|
251
189
|
return;
|
|
252
190
|
const target = element.target;
|
|
253
191
|
if (target instanceof HTMLElement) {
|
|
@@ -256,237 +194,160 @@ function autoAttachListeners(element) {
|
|
|
256
194
|
.filter((key) => /^on[A-Z]|one[A-Z]/.test(key) &&
|
|
257
195
|
typeof that.constructor.prototype[key] === 'function')
|
|
258
196
|
.forEach((key) => {
|
|
259
|
-
let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase()
|
|
260
|
-
|
|
197
|
+
let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase();
|
|
198
|
+
let listener = (ev) => {
|
|
199
|
+
that[key](ev);
|
|
261
200
|
};
|
|
262
|
-
if (
|
|
263
|
-
|
|
264
|
-
configurable: true,
|
|
265
|
-
enumerable: false,
|
|
266
|
-
writable: true,
|
|
267
|
-
value: (ev) => {
|
|
268
|
-
that.constructor.prototype[key].bind(that)(ev);
|
|
269
|
-
},
|
|
270
|
-
});
|
|
201
|
+
if (!!target['on' + nativeEventName]) {
|
|
202
|
+
target.addEventListener(nativeEventName, listener);
|
|
271
203
|
}
|
|
272
|
-
|
|
273
|
-
|
|
204
|
+
else {
|
|
205
|
+
on(target, withoutOnOne, listener, once);
|
|
274
206
|
}
|
|
275
207
|
});
|
|
276
208
|
}
|
|
277
209
|
}
|
|
278
|
-
function
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
let parent = MC_traverseNodes(target, '', true)?.[0].target;
|
|
286
|
-
if (parent)
|
|
287
|
-
DC.trigger(parent, ev);
|
|
288
|
-
}
|
|
289
|
-
if (ev.bubble.indexOf('d') > -1) {
|
|
290
|
-
let targets = new Set(target._mc
|
|
291
|
-
.children()
|
|
292
|
-
.map((c) => c?.target));
|
|
293
|
-
targets.forEach((target) => {
|
|
294
|
-
if (target)
|
|
295
|
-
DC.trigger(target, ev);
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
}, 0);
|
|
299
|
-
}
|
|
210
|
+
function getMcChildNodes(domNode) {
|
|
211
|
+
const id = Math.random().toString().replace('.', '');
|
|
212
|
+
const selector = '[data-mc]:not([temp_id="' + id + '"] [data-mc] [data-mc])';
|
|
213
|
+
domNode.setAttribute('temp_id', id);
|
|
214
|
+
const myDomElements = domNode.querySelectorAll(selector);
|
|
215
|
+
domNode.removeAttribute('temp_id');
|
|
216
|
+
return myDomElements;
|
|
300
217
|
}
|
|
301
218
|
class McBase {
|
|
302
|
-
|
|
219
|
+
_target;
|
|
303
220
|
constructor(target, debug = false) {
|
|
304
|
-
let
|
|
305
|
-
this
|
|
221
|
+
let element = this;
|
|
222
|
+
this._target = new WeakRef(target || {});
|
|
306
223
|
init(element);
|
|
307
224
|
autoAttachListeners(element);
|
|
308
225
|
}
|
|
309
226
|
get target() {
|
|
310
|
-
return this
|
|
227
|
+
return this._target.deref();
|
|
311
228
|
}
|
|
312
229
|
}
|
|
313
230
|
class MC extends McBase {
|
|
314
|
-
_mc = {};
|
|
315
231
|
constructor(target) {
|
|
316
232
|
super(target);
|
|
317
233
|
}
|
|
318
234
|
static trigger = trigger;
|
|
319
235
|
trigger(ev, data = {}, bubble = 'l') {
|
|
320
|
-
let that = this;
|
|
321
|
-
if (that.constructor === MC || that.constructor === DC) {
|
|
322
|
-
let event = ev instanceof McEvent
|
|
323
|
-
? new McEvent(ev.type, ev.data, 'l')
|
|
324
|
-
: new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string'
|
|
325
|
-
? ev
|
|
326
|
-
: new McEvent(ev, data, bubble);
|
|
327
|
-
[...Object.getOwnPropertyNames(that)].forEach((mc) => {
|
|
328
|
-
if (that[mc]?.trigger &&
|
|
329
|
-
typeof that[mc]?.trigger === 'function') {
|
|
330
|
-
that[mc]?.trigger(event);
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
334
|
-
bubbleEvent(that.target, mcEvent);
|
|
335
|
-
}
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
if (that instanceof MC || that instanceof DC) {
|
|
339
|
-
const that = this, mcEvent = typeof ev !== 'string'
|
|
340
|
-
? ev
|
|
341
|
-
: new McEvent(ev, data, bubble), handlerName = 'on' + mcEvent.type[0].toUpperCase() + mcEvent.type.slice(1);
|
|
342
|
-
if (mcEvent.bubble.indexOf('l') > -1) {
|
|
343
|
-
if (!mcEvent.immediateStopped &&
|
|
344
|
-
typeof that[handlerName] === 'function') {
|
|
345
|
-
that[handlerName](mcEvent);
|
|
346
|
-
if (that.hasOwnProperty(handlerName)) {
|
|
347
|
-
delete that[handlerName];
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
if (mcEvent.stopped || mcEvent.bubble === 'l') {
|
|
352
|
-
return that;
|
|
353
|
-
}
|
|
354
|
-
if (/[ud]/.test(mcEvent.bubble)) {
|
|
355
|
-
bubbleEvent(that.target, mcEvent);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
236
|
}
|
|
359
237
|
}
|
|
360
238
|
class DC extends McBase {
|
|
361
|
-
_mc = {};
|
|
362
239
|
constructor(target, debug = false) {
|
|
363
240
|
super(target);
|
|
364
241
|
}
|
|
365
242
|
static add = add;
|
|
366
243
|
static remove = remove;
|
|
367
244
|
static trigger = trigger;
|
|
368
|
-
|
|
369
|
-
|
|
245
|
+
off(eventName, handler) {
|
|
246
|
+
off(this.target, eventName, handler);
|
|
247
|
+
}
|
|
248
|
+
on(eventName, handler) {
|
|
249
|
+
on(this.target, eventName, handler);
|
|
250
|
+
}
|
|
251
|
+
one(eventName, handler) {
|
|
252
|
+
one(this.target, eventName, handler);
|
|
253
|
+
}
|
|
254
|
+
trigger(ev, data = {}, bubble = 'l') {
|
|
255
|
+
if (typeof ev === 'string') {
|
|
256
|
+
}
|
|
370
257
|
}
|
|
371
258
|
parent(search = '') {
|
|
372
259
|
let target = this.target;
|
|
373
|
-
if (!
|
|
260
|
+
if (!isDOM(target))
|
|
374
261
|
return [];
|
|
375
|
-
return
|
|
262
|
+
return traverseNodes(target.parentNode, search, true);
|
|
376
263
|
}
|
|
377
264
|
ancestors(search = '') {
|
|
378
265
|
let target = this?.target;
|
|
379
|
-
if (!
|
|
266
|
+
if (!isDOM(target))
|
|
380
267
|
return [];
|
|
381
|
-
return
|
|
268
|
+
return traverseNodes(this.target.parentNode, search, false);
|
|
382
269
|
}
|
|
383
270
|
children(search = '') {
|
|
384
271
|
let target = this?.target;
|
|
385
|
-
if (!
|
|
272
|
+
if (!isDOM(target))
|
|
386
273
|
return [];
|
|
387
|
-
const
|
|
388
|
-
const
|
|
389
|
-
target.setAttribute('temp_id', id);
|
|
390
|
-
const myDomElements = target.querySelectorAll(selector);
|
|
391
|
-
const mcValues = MC_getMicroComponents([...myDomElements], search);
|
|
392
|
-
target.removeAttribute('temp_id');
|
|
274
|
+
const myDomElements = getMcChildNodes(target);
|
|
275
|
+
const mcValues = getMicroComponents([...myDomElements], search);
|
|
393
276
|
return mcValues;
|
|
394
277
|
}
|
|
395
278
|
descendants(search = '') {
|
|
396
279
|
let target = this?.target;
|
|
397
|
-
if (!
|
|
280
|
+
if (!isDOM(target))
|
|
398
281
|
return [];
|
|
399
|
-
const myDomElements = target.querySelectorAll('*[
|
|
400
|
-
return
|
|
282
|
+
const myDomElements = target.querySelectorAll('*[data-mc]');
|
|
283
|
+
return getMicroComponents([...myDomElements], search);
|
|
401
284
|
}
|
|
402
285
|
}
|
|
403
|
-
const
|
|
404
|
-
|
|
286
|
+
const loadingDCs = new Set();
|
|
287
|
+
function attachDC(element) {
|
|
288
|
+
return () => {
|
|
289
|
+
const elements = Array
|
|
290
|
+
.from(document.querySelectorAll(`[data-mc*="${element}"]`))
|
|
291
|
+
.filter(element => element instanceof HTMLElement);
|
|
292
|
+
if (elements.length === 0)
|
|
293
|
+
return;
|
|
294
|
+
const klass = customElements.get(element);
|
|
295
|
+
elements.forEach((node) => {
|
|
296
|
+
DC.add(node, klass.name, new klass(node));
|
|
297
|
+
const new_mc = node
|
|
298
|
+
.getAttribute('data-mc')
|
|
299
|
+
.split(' ')
|
|
300
|
+
.filter((name) => name !== element && name !== '')
|
|
301
|
+
.join(' ')
|
|
302
|
+
.trim();
|
|
303
|
+
node.setAttribute('data-mc', new_mc);
|
|
304
|
+
});
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
;
|
|
405
308
|
function makeLoadScript(element) {
|
|
309
|
+
if (loadingDCs.has(element))
|
|
310
|
+
return;
|
|
311
|
+
loadingDCs.add(element);
|
|
406
312
|
const fileName = './' + element.split('-').join('/') + '.js';
|
|
407
313
|
const se = document.createElement('script');
|
|
408
314
|
se.setAttribute('src', fileName);
|
|
409
315
|
se.setAttribute('blocking', 'render');
|
|
410
316
|
se.async = true;
|
|
411
317
|
se.setAttribute('type', 'module');
|
|
412
|
-
se.setAttribute('name', element);
|
|
318
|
+
se.setAttribute('data-name', element);
|
|
413
319
|
se.setAttribute('loading', '');
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
320
|
+
const loadedPromise = customElements.whenDefined(element);
|
|
321
|
+
loadedPromise.then(attachDC(element));
|
|
322
|
+
se.addEventListener('load', (ev) => {
|
|
323
|
+
loadingDCs.delete(element);
|
|
324
|
+
document.head.querySelector(`script[data-name="${element}"]`)?.remove();
|
|
417
325
|
});
|
|
418
|
-
|
|
419
|
-
console.error('could not load
|
|
326
|
+
se.addEventListener('error', (ev) => {
|
|
327
|
+
console.error('could not load DC code from', fileName);
|
|
420
328
|
});
|
|
421
|
-
|
|
329
|
+
document.head.append(se);
|
|
422
330
|
}
|
|
423
|
-
function
|
|
424
|
-
setTimeout(function () {
|
|
425
|
-
const importFileName = script.getAttribute('src');
|
|
426
|
-
const elementName = script.getAttribute('name');
|
|
427
|
-
const se = document.createElement('script');
|
|
428
|
-
se.async = true;
|
|
429
|
-
se.setAttribute('type', 'module');
|
|
430
|
-
const code = `
|
|
431
|
-
|
|
432
|
-
import _ from "${importFileName}";
|
|
433
|
-
import { DC } from "./microcomponents.js";
|
|
434
|
-
|
|
435
|
-
const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
|
|
436
|
-
|
|
437
|
-
elements.forEach((element) => {
|
|
438
|
-
// add class to MCs repository
|
|
439
|
-
autoload.state.MCs.set( '${elementName}', _ );
|
|
440
|
-
// add instance to HTMLElement
|
|
441
|
-
DC.add(element, _.name, new _(element));
|
|
442
|
-
// remove instance name from elements "_mc" attribute
|
|
443
|
-
element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim());
|
|
444
|
-
});
|
|
445
|
-
|
|
446
|
-
setTimeout( () => {
|
|
447
|
-
document.body.querySelector('script[name="${elementName}]"')?.remove();
|
|
448
|
-
},0);
|
|
449
|
-
|
|
450
|
-
`;
|
|
451
|
-
se.innerHTML = code;
|
|
452
|
-
document.body.append(se);
|
|
453
|
-
}, 0);
|
|
454
|
-
}
|
|
455
|
-
function loadUndefinedMicroComponents() {
|
|
331
|
+
function loadUndefinedMCs() {
|
|
456
332
|
[...document.querySelectorAll(':not(:defined)')]
|
|
457
333
|
.filter((element) => !!element
|
|
458
334
|
&& !customElements.get(element.tagName.toLowerCase())
|
|
459
|
-
&& !
|
|
335
|
+
&& !loadingDCs.has(element.tagName.toLowerCase()))
|
|
460
336
|
.forEach((el) => {
|
|
461
|
-
|
|
462
|
-
const se = makeLoadScript(elementName);
|
|
463
|
-
addListener(se, 'load', () => {
|
|
464
|
-
CEs.set(elementName, customElements.get(el.tagName.toLowerCase()));
|
|
465
|
-
});
|
|
466
|
-
CEs.set(elementName, 'loading');
|
|
467
|
-
document.head.append(se);
|
|
337
|
+
makeLoadScript(el.tagName.toLowerCase());
|
|
468
338
|
});
|
|
469
|
-
[...document.querySelectorAll('[
|
|
339
|
+
[...document.querySelectorAll('[data-mc]:not([data-mc=""]')]
|
|
470
340
|
.filter((element) => !!element)
|
|
471
341
|
.forEach((el) => {
|
|
472
|
-
const
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
elementsAlreadyLoaded?.forEach(elementName => {
|
|
482
|
-
setTimeout(() => {
|
|
483
|
-
DC.add(el, elementName, new (autoload.state.MCs.get(elementName))(el));
|
|
484
|
-
const newAttribute = el.getAttribute('_mc')
|
|
485
|
-
.replace('${elementName}', '')
|
|
486
|
-
.replace(/\w\w/g, ' ')
|
|
487
|
-
.trim() || '_mc';
|
|
488
|
-
el.setAttribute('_mc');
|
|
489
|
-
}, 5);
|
|
342
|
+
const _mc = el.getAttribute('data-mc')?.split(' ').filter(name => name !== '');
|
|
343
|
+
_mc?.forEach(element => {
|
|
344
|
+
const isDefined = customElements.get(element);
|
|
345
|
+
if (!loadingDCs.has(element) && !isDefined) {
|
|
346
|
+
makeLoadScript(element);
|
|
347
|
+
}
|
|
348
|
+
else if (isDefined) {
|
|
349
|
+
attachDC(element)();
|
|
350
|
+
}
|
|
490
351
|
});
|
|
491
352
|
});
|
|
492
353
|
}
|
|
@@ -499,15 +360,15 @@ function autoload(enable = true) {
|
|
|
499
360
|
return autoloadEnabled;
|
|
500
361
|
}
|
|
501
362
|
autoloadEnabled = enable;
|
|
502
|
-
observer = new MutationObserver(
|
|
363
|
+
observer = new MutationObserver(loadUndefinedMCs);
|
|
503
364
|
setTimeout(() => {
|
|
504
365
|
observer.observe(document.body, { childList: true, subtree: true });
|
|
505
|
-
|
|
366
|
+
loadUndefinedMCs();
|
|
506
367
|
}, 5);
|
|
507
368
|
window.autoload = window.autoload || autoload;
|
|
508
369
|
return autoloadEnabled;
|
|
509
370
|
}
|
|
510
|
-
autoload.state =
|
|
371
|
+
autoload.state = loadingDCs;
|
|
511
372
|
|
|
512
373
|
|
|
513
374
|
/******/ return __webpack_exports__;
|