@twobirds/microcomponents 0.0.21 → 0.0.23
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/.gitlab-ci.yml +1 -0
- package/README.md +31 -12
- package/assets/documentation/MicroComponents.md +228 -0
- package/assets/my-tag.css +4 -0
- package/assets/test.html +5 -1
- package/dist/MC.d.ts +32 -0
- package/dist/MC.d.ts.map +1 -0
- package/dist/MC.min.js +414 -0
- package/dist/MC.ts +350 -0
- package/dist/McEvent.d.ts +15 -0
- package/dist/McEvent.d.ts.map +1 -0
- package/dist/McEvent.ts +96 -0
- package/dist/autoloader.d.ts +2 -0
- package/dist/autoloader.d.ts.map +1 -0
- package/dist/autoloader.ts +98 -0
- package/dist/customElements.d.ts +5 -0
- package/dist/customElements.d.ts.map +1 -0
- package/dist/customElements.min.js +1 -0
- package/dist/customElements.ts +67 -0
- package/dist/customObservables.d.ts +3 -0
- package/dist/customObservables.d.ts.map +1 -0
- package/dist/customObservables.min.js +1 -0
- package/dist/customObservables.ts +340 -0
- package/dist/customSelectors.d.ts +108 -0
- package/dist/customSelectors.d.ts.map +1 -0
- package/dist/customSelectors.min.js +1 -0
- package/dist/customSelectors.ts +1634 -0
- package/dist/formValues.d.ts +4 -0
- package/dist/formValues.d.ts.map +1 -0
- package/dist/formValues.ts +275 -0
- package/dist/formvValues.min.js +1 -0
- package/dist/helpers.d.ts +11 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.ts +173 -0
- package/dist/microcomponents.d.ts +7 -25
- package/dist/microcomponents.d.ts.map +1 -1
- package/dist/microcomponents.es3.d.ts +1 -20
- package/dist/microcomponents.es3.d.ts.map +1 -1
- package/dist/microcomponents.min.js +1 -38
- package/dist/microcomponents.ts +8 -216
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -0
- package/package.json +11 -7
- package/public/MC.js +273 -0
- package/public/MC.min.js +414 -0
- package/public/MCbundle.js +8 -0
- package/public/MCbundle.min.js +1 -0
- package/public/McEvent.js +74 -0
- package/public/MicroComponents.svg +15 -0
- package/public/assets/search.js +1 -1
- package/public/autoloader.js +57 -0
- package/public/classes/MC.DC.html +247 -0
- package/public/classes/MC.MC.html +150 -0
- package/public/classes/MC.McBase.html +123 -0
- package/public/classes/MCbundle.McEvent.html +184 -0
- package/public/customElements.js +48 -0
- package/public/customElements.min.js +1 -0
- package/public/customObservables.js +255 -0
- package/public/customObservables.min.js +1 -0
- package/public/customSelectors.js +1088 -0
- package/public/customSelectors.min.js +1 -0
- package/public/documentation/MicroComponents.md +228 -0
- package/public/formValues.js +211 -0
- package/public/formvValues.min.js +1 -0
- package/public/functions/MC.addListener.html +73 -0
- package/public/functions/MC.removeListener.html +69 -0
- package/public/functions/MCbundle._d.html +85 -0
- package/public/functions/MCbundle._t.html +85 -0
- package/public/functions/MCbundle.debounce.html +85 -0
- package/public/functions/MCbundle.deepEqual.html +85 -0
- package/public/functions/MCbundle.defineCE.html +98 -0
- package/public/functions/MCbundle.formValues.html +89 -0
- package/public/functions/MCbundle.getCE.html +83 -0
- package/public/functions/MCbundle.htmlToElements.html +83 -0
- package/public/functions/MCbundle.isObject.html +83 -0
- package/public/functions/MCbundle.kebabToPascal.html +83 -0
- package/public/functions/MCbundle.makeCO.html +85 -0
- package/public/functions/MCbundle.nameSpace.html +89 -0
- package/public/functions/MCbundle.parse.html +85 -0
- package/public/helpers.js +128 -0
- package/public/index.html +22 -13
- package/public/interfaces/MC.HTMLMcElement.html +3605 -0
- package/public/interfaces/MCbundle.DSelector.html +1010 -0
- package/public/interfaces/MCbundle.LooseObject.html +80 -0
- package/public/interfaces/MCbundle.TSelector.html +709 -0
- package/public/microcomponents.es3.js +348 -0
- package/public/microcomponents.js +8 -176
- package/public/microcomponents.min.js +1 -0
- package/public/modules/MC.html +84 -0
- package/public/modules/MCbundle.html +133 -0
- package/public/modules.html +4 -4
- package/public/my-tag.css +4 -0
- package/public/test.html +5 -1
- package/public/test.js +100 -202
- package/public/types/MCbundle.selection.html +74 -0
- package/public/types/MCbundle.singleSelector.html +74 -0
- package/src/MC.ts +350 -0
- package/src/McEvent.ts +96 -0
- package/src/autoloader.ts +98 -0
- package/src/customElements.ts +67 -0
- package/src/customObservables.ts +340 -0
- package/src/customSelectors.ts +1634 -0
- package/src/formValues.ts +275 -0
- package/src/helpers.ts +173 -0
- package/src/microcomponents.es3.js +353 -82
- package/src/microcomponents.ts +8 -216
- package/src/test.js +137 -218
- package/tsconfig.json +2 -2
- package/typedoc.json +1 -1
- package/webpack.config.js +233 -0
- package/dist/microcomponents.es3.js +0 -96
- package/dist/microcomponents.es3.min.js +0 -15
- package/dist/microcomponents.js +0 -176
- package/public/classes/microcomponents.MC.html +0 -313
- package/public/classes/microcomponents_es3.MC.html +0 -336
- package/public/functions/microcomponents_es3.__isEmpty.html +0 -60
- package/public/modules/microcomponents.html +0 -57
- package/public/modules/microcomponents_es3.html +0 -60
package/public/MC.min.js
ADDED
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
+
module.exports = factory();
|
|
4
|
+
else if(typeof define === 'function' && define.amd)
|
|
5
|
+
define([], factory);
|
|
6
|
+
else if(typeof exports === 'object')
|
|
7
|
+
exports["MC"] = factory();
|
|
8
|
+
else
|
|
9
|
+
root["MC"] = factory();
|
|
10
|
+
})(this, () => {
|
|
11
|
+
return /******/ (() => { // webpackBootstrap
|
|
12
|
+
/******/ "use strict";
|
|
13
|
+
/******/ // The require scope
|
|
14
|
+
/******/ var __webpack_require__ = {};
|
|
15
|
+
/******/
|
|
16
|
+
/************************************************************************/
|
|
17
|
+
/******/ /* webpack/runtime/define property getters */
|
|
18
|
+
/******/ (() => {
|
|
19
|
+
/******/ // define getter functions for harmony exports
|
|
20
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
21
|
+
/******/ for(var key in definition) {
|
|
22
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
23
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
24
|
+
/******/ }
|
|
25
|
+
/******/ }
|
|
26
|
+
/******/ };
|
|
27
|
+
/******/ })();
|
|
28
|
+
/******/
|
|
29
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
30
|
+
/******/ (() => {
|
|
31
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
32
|
+
/******/ })();
|
|
33
|
+
/******/
|
|
34
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
35
|
+
/******/ (() => {
|
|
36
|
+
/******/ // define __esModule on exports
|
|
37
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
38
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
39
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
40
|
+
/******/ }
|
|
41
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
42
|
+
/******/ };
|
|
43
|
+
/******/ })();
|
|
44
|
+
/******/
|
|
45
|
+
/************************************************************************/
|
|
46
|
+
var __webpack_exports__ = {};
|
|
47
|
+
// ESM COMPAT FLAG
|
|
48
|
+
__webpack_require__.r(__webpack_exports__);
|
|
49
|
+
|
|
50
|
+
// EXPORTS
|
|
51
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
52
|
+
DC: () => (/* binding */ DC),
|
|
53
|
+
MC: () => (/* binding */ MC),
|
|
54
|
+
McBase: () => (/* binding */ McBase),
|
|
55
|
+
McEvent: () => (/* reexport */ McEvent),
|
|
56
|
+
addListener: () => (/* binding */ addListener),
|
|
57
|
+
removeListener: () => (/* binding */ removeListener)
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
;// ./build/McEvent.js
|
|
61
|
+
|
|
62
|
+
var isBrowser = new Function("try {return this===window;}catch(e){ return false;}");
|
|
63
|
+
let nativeEventNames = new Set();
|
|
64
|
+
// HTMLElement native event names
|
|
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
|
+
// bubble standard = local only, options = any combination of'uld' characters: up to root, local, down
|
|
77
|
+
this.#type = type;
|
|
78
|
+
this.data = data;
|
|
79
|
+
this.bubble = bubble;
|
|
80
|
+
}
|
|
81
|
+
get type() {
|
|
82
|
+
return this.#type;
|
|
83
|
+
}
|
|
84
|
+
get stopped() {
|
|
85
|
+
return this.#stopped;
|
|
86
|
+
}
|
|
87
|
+
get immediateStopped() {
|
|
88
|
+
return this.#immediateStopped;
|
|
89
|
+
}
|
|
90
|
+
stopPropagation() {
|
|
91
|
+
this.#stopped = true;
|
|
92
|
+
}
|
|
93
|
+
stopImmediatePropagation() {
|
|
94
|
+
this.stopPropagation();
|
|
95
|
+
this.#immediateStopped = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// get all microcomponents from a list of HTMLElements
|
|
99
|
+
function getMicroComponents(elements, search) {
|
|
100
|
+
let mcValues = [];
|
|
101
|
+
elements.forEach(e => {
|
|
102
|
+
if (e) {
|
|
103
|
+
if (e instanceof HTMLElement) {
|
|
104
|
+
const _mc = e?._mc;
|
|
105
|
+
if (!search && _mc) {
|
|
106
|
+
mcValues = mcValues.concat(Object.values(e._mc));
|
|
107
|
+
}
|
|
108
|
+
else if (search && _mc && _mc[search]) {
|
|
109
|
+
mcValues.push(_mc[search]);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return mcValues;
|
|
115
|
+
}
|
|
116
|
+
// get all ancestor DOM nodes up to the document root
|
|
117
|
+
function traverseNodes(node, search, firstonly = true) {
|
|
118
|
+
let mcValues = [];
|
|
119
|
+
while (node) {
|
|
120
|
+
if (node._mc) {
|
|
121
|
+
if (!search) {
|
|
122
|
+
mcValues = mcValues.concat(Object.values(node._mc));
|
|
123
|
+
}
|
|
124
|
+
else if (search && node._mc[search]) {
|
|
125
|
+
mcValues.push(node._mc[search]);
|
|
126
|
+
}
|
|
127
|
+
if (firstonly)
|
|
128
|
+
return mcValues;
|
|
129
|
+
}
|
|
130
|
+
node = node.parentNode;
|
|
131
|
+
}
|
|
132
|
+
return mcValues;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
;// ./build/MC.js
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
var MC_isBrowser = new Function("try {return this===window;}catch(e){ return false;}");
|
|
140
|
+
let MC_nativeEventNames = new Set();
|
|
141
|
+
// HTMLElement native event names
|
|
142
|
+
if (MC_isBrowser()) {
|
|
143
|
+
Object.keys(HTMLElement.prototype).filter(key => /^on/.test(key)).forEach(eventName => MC_nativeEventNames.add(eventName));
|
|
144
|
+
}
|
|
145
|
+
// get all microcomponents from a list of HTMLElements
|
|
146
|
+
function MC_getMicroComponents(elements, search) {
|
|
147
|
+
let mcValues = [];
|
|
148
|
+
elements.forEach(e => {
|
|
149
|
+
if (e) {
|
|
150
|
+
if (e instanceof HTMLElement) {
|
|
151
|
+
const _mc = e?._mc;
|
|
152
|
+
if (!search && _mc) {
|
|
153
|
+
mcValues = mcValues.concat(Object.values(e._mc));
|
|
154
|
+
}
|
|
155
|
+
else if (search && _mc && _mc[search]) {
|
|
156
|
+
mcValues.push(_mc[search]);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return mcValues;
|
|
162
|
+
}
|
|
163
|
+
// get all ancestor DOM nodes up to the document root
|
|
164
|
+
function MC_traverseNodes(node, search, firstonly = true) {
|
|
165
|
+
let mcValues = [];
|
|
166
|
+
while (node) {
|
|
167
|
+
if (node._mc) {
|
|
168
|
+
if (!search) {
|
|
169
|
+
mcValues = mcValues.concat(Object.values(node._mc));
|
|
170
|
+
}
|
|
171
|
+
else if (search && node._mc[search]) {
|
|
172
|
+
mcValues.push(node._mc[search]);
|
|
173
|
+
}
|
|
174
|
+
if (firstonly)
|
|
175
|
+
return mcValues;
|
|
176
|
+
}
|
|
177
|
+
node = node.parentNode;
|
|
178
|
+
}
|
|
179
|
+
return mcValues;
|
|
180
|
+
}
|
|
181
|
+
function MC_isDOM(element) {
|
|
182
|
+
return element && element instanceof HTMLElement;
|
|
183
|
+
}
|
|
184
|
+
function addListener(domNode, eventName, handler, capture = false, once = false) {
|
|
185
|
+
let options = { once: false };
|
|
186
|
+
if (capture) {
|
|
187
|
+
options.capture = capture;
|
|
188
|
+
}
|
|
189
|
+
if (once) {
|
|
190
|
+
options.once = once;
|
|
191
|
+
}
|
|
192
|
+
//console.log( 'addEventListener', eventName, ( handler as Function ).name, options );
|
|
193
|
+
domNode.addEventListener(eventName, handler, options);
|
|
194
|
+
}
|
|
195
|
+
function removeListener(domNode, eventName, handler) {
|
|
196
|
+
domNode.removeEventListener(eventName, handler);
|
|
197
|
+
}
|
|
198
|
+
// add a microcomponent to a target DOM node
|
|
199
|
+
function add(target, key, element = {}) {
|
|
200
|
+
let node = target;
|
|
201
|
+
// create the _mc property if necessary
|
|
202
|
+
if (!node._mc) {
|
|
203
|
+
let _MC = MC, debug = MC?.debug;
|
|
204
|
+
MC.debug = false;
|
|
205
|
+
node._mc = new MC(target);
|
|
206
|
+
MC.debug = debug;
|
|
207
|
+
}
|
|
208
|
+
const _mc = node._mc;
|
|
209
|
+
// add the element with the given property key to the _mc property
|
|
210
|
+
if (key.length && !_mc[key]) {
|
|
211
|
+
_mc[key] = element;
|
|
212
|
+
// add attribute if HTMLElement
|
|
213
|
+
if (target instanceof HTMLElement) {
|
|
214
|
+
target.setAttribute('_mc', '');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return element;
|
|
218
|
+
}
|
|
219
|
+
// remove a micro component from the DOM
|
|
220
|
+
function remove(target, key) {
|
|
221
|
+
if (!key)
|
|
222
|
+
return; // silent fail
|
|
223
|
+
const _mc = target?._mc || {};
|
|
224
|
+
// delete the property from the HTMLElement _mc collection
|
|
225
|
+
if (_mc && _mc[key]) {
|
|
226
|
+
delete _mc[key];
|
|
227
|
+
}
|
|
228
|
+
// remove the _mc attribute if the DOM collection is empty
|
|
229
|
+
if (!Object.keys(_mc).length && target instanceof HTMLElement && target.hasAttribute('_mc')) {
|
|
230
|
+
target.removeAttribute('_mc');
|
|
231
|
+
}
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
// trigger an event
|
|
235
|
+
function trigger(target, ev, data = {}) {
|
|
236
|
+
let _mc = target?._mc;
|
|
237
|
+
if (!_mc)
|
|
238
|
+
return;
|
|
239
|
+
[...Object.values(_mc)].forEach((mc) => {
|
|
240
|
+
if (mc?.trigger && typeof mc?.trigger === 'function') {
|
|
241
|
+
mc?.trigger(ev, data);
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
class McBase {
|
|
247
|
+
#target; // avoid circular reference
|
|
248
|
+
#_mc = {};
|
|
249
|
+
constructor(target) {
|
|
250
|
+
let that = this;
|
|
251
|
+
this.#target = new WeakRef(target);
|
|
252
|
+
if (this.constructor !== MC && this.constructor !== DC) {
|
|
253
|
+
Object.defineProperty(this, "_mc", {
|
|
254
|
+
get() {
|
|
255
|
+
return this.#_mc;
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
get target() {
|
|
261
|
+
return this.#target.deref();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
class MC extends McBase {
|
|
265
|
+
constructor(target) {
|
|
266
|
+
super(target);
|
|
267
|
+
let that = this;
|
|
268
|
+
if (that.constructor === MC || that.constructor === DC)
|
|
269
|
+
return;
|
|
270
|
+
setTimeout(() => {
|
|
271
|
+
that.trigger('init');
|
|
272
|
+
}, 0);
|
|
273
|
+
}
|
|
274
|
+
trigger(ev, data = {}, bubble) {
|
|
275
|
+
let that = this;
|
|
276
|
+
bubble = bubble || 'l';
|
|
277
|
+
// run all triggers
|
|
278
|
+
if (that.constructor === MC || that.constructor === DC) {
|
|
279
|
+
[...Object.getOwnPropertyNames(that)].forEach((mc) => {
|
|
280
|
+
if (that[mc]?.trigger && typeof that[mc]?.trigger === 'function') {
|
|
281
|
+
that[mc]?.trigger(ev, data, bubble);
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
return; // must return here!
|
|
285
|
+
}
|
|
286
|
+
// only this instance
|
|
287
|
+
if (that instanceof MC || that instanceof DC) {
|
|
288
|
+
const that = this, mcEvent = typeof ev !== 'string' ? ev : new McEvent(ev, data, bubble), handlerName = 'on' + mcEvent.type[0].toUpperCase() + mcEvent.type.slice(1);
|
|
289
|
+
;
|
|
290
|
+
// console.log('trigger', handlerName, mcEvent, data, bubble );
|
|
291
|
+
if (mcEvent.bubble.indexOf('l') > -1) {
|
|
292
|
+
if (!mcEvent.immediateStopped
|
|
293
|
+
&& typeof that[handlerName] === 'function') {
|
|
294
|
+
// console.log( 'execute handler:', handlerName );
|
|
295
|
+
that[handlerName](mcEvent);
|
|
296
|
+
if (that.hasOwnProperty(handlerName)) { // it is a once handler
|
|
297
|
+
delete that[handlerName]; // remove after first execution
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// if event stopped or local only, handling is cancelled
|
|
302
|
+
if (mcEvent.stopped || mcEvent.bubble === 'l') {
|
|
303
|
+
return that;
|
|
304
|
+
}
|
|
305
|
+
// at this point, either 'u' or 'd' bubbling should be indicated
|
|
306
|
+
// mcEvent bubbling is asynchronous, and the order of target MC execution in case of multiple matches is not guaranteed!
|
|
307
|
+
if (MC_isBrowser() && /[ud]/.test(mcEvent.bubble) && that instanceof MC) {
|
|
308
|
+
setTimeout(() => {
|
|
309
|
+
// bubbling must include 'l' for local, or else no handlers are executed'
|
|
310
|
+
if (mcEvent.bubble.indexOf('l') === -1) {
|
|
311
|
+
mcEvent.bubble += 'l';
|
|
312
|
+
}
|
|
313
|
+
// bubble up towards root
|
|
314
|
+
if (mcEvent.bubble.indexOf('u') > -1) {
|
|
315
|
+
that
|
|
316
|
+
.parent()
|
|
317
|
+
.forEach((mc) => {
|
|
318
|
+
mc instanceof MC ? mc.trigger(mcEvent) : null;
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
// bubble down
|
|
322
|
+
if (mcEvent.bubble.indexOf('d') > -1) {
|
|
323
|
+
that
|
|
324
|
+
.children()
|
|
325
|
+
.forEach((mc) => {
|
|
326
|
+
mc instanceof MC ? mc.trigger(mcEvent) : null;
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}, 0);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
;
|
|
335
|
+
class DC extends MC {
|
|
336
|
+
constructor(target) {
|
|
337
|
+
super(target);
|
|
338
|
+
}
|
|
339
|
+
static debug = false;
|
|
340
|
+
static add = add;
|
|
341
|
+
static remove = remove;
|
|
342
|
+
static trigger = trigger;
|
|
343
|
+
parent(search = '') {
|
|
344
|
+
let target = this.target;
|
|
345
|
+
if (!MC_isDOM(target))
|
|
346
|
+
return [];
|
|
347
|
+
return MC_traverseNodes(target.parentNode, search, true);
|
|
348
|
+
}
|
|
349
|
+
ancestors(search = '') {
|
|
350
|
+
let target = this?.target;
|
|
351
|
+
if (!MC_isDOM(target))
|
|
352
|
+
return [];
|
|
353
|
+
return MC_traverseNodes(this.target.parentNode, search, false);
|
|
354
|
+
}
|
|
355
|
+
children(search = '') {
|
|
356
|
+
let target = this?.target;
|
|
357
|
+
if (!MC_isDOM(target))
|
|
358
|
+
return [];
|
|
359
|
+
const id = Math.random().toString().replace('.', '');
|
|
360
|
+
const selector = '[_mc]:not([temp_id="' + id + '"] [_mc] [_mc])';
|
|
361
|
+
target.setAttribute('temp_id', id);
|
|
362
|
+
const myDomElements = target.querySelectorAll(selector);
|
|
363
|
+
const mcValues = MC_getMicroComponents([...myDomElements], search);
|
|
364
|
+
target.removeAttribute('temp_id');
|
|
365
|
+
return mcValues;
|
|
366
|
+
}
|
|
367
|
+
descendants(search = '') {
|
|
368
|
+
let target = this?.target;
|
|
369
|
+
if (!MC_isDOM(target))
|
|
370
|
+
return [];
|
|
371
|
+
const myDomElements = target.querySelectorAll('*[_mc]');
|
|
372
|
+
return MC_getMicroComponents([...myDomElements], search);
|
|
373
|
+
}
|
|
374
|
+
autoAttachListeners() {
|
|
375
|
+
if (!MC_isBrowser())
|
|
376
|
+
return;
|
|
377
|
+
const target = this.target;
|
|
378
|
+
if (target instanceof HTMLElement) {
|
|
379
|
+
let that = this;
|
|
380
|
+
Object
|
|
381
|
+
.getOwnPropertyNames(that.constructor.prototype)
|
|
382
|
+
.filter(key => /^on[A-Z]|one[A-Z]/.test(key) && typeof that.constructor.prototype[key] === 'function')
|
|
383
|
+
.forEach(key => {
|
|
384
|
+
let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), // preserves upper/lowercase for non-native events
|
|
385
|
+
nativeEventName = withoutOnOne.toLowerCase(), listener = (ev) => { that.trigger(withoutOnOne, ev); };
|
|
386
|
+
;
|
|
387
|
+
// console.log('autoAttach', nativeEventName, withoutOnOne, once, listener);
|
|
388
|
+
if (once) {
|
|
389
|
+
// console.log( '...is only called once', that.constructor.prototype[key] );
|
|
390
|
+
Object.defineProperty(this, 'on' + withoutOnOne, {
|
|
391
|
+
configurable: true,
|
|
392
|
+
enumerable: false,
|
|
393
|
+
writable: true,
|
|
394
|
+
value: (ev) => {
|
|
395
|
+
// console.log( 'onceHandler execute:', that.constructor.prototype[key] );
|
|
396
|
+
(that.constructor.prototype[key]).bind(that)(ev);
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
if (MC_nativeEventNames.has('on' + nativeEventName)) { // native event defined in HTMLElement
|
|
401
|
+
// console.log('added as native listener', target, nativeEventName );
|
|
402
|
+
addListener(target, nativeEventName, listener, false, once);
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
;
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
/******/ return __webpack_exports__;
|
|
412
|
+
/******/ })()
|
|
413
|
+
;
|
|
414
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.MCbundle=t():e.MCbundle=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return null!=e&&"object"==typeof e}function n(e){return e.split("-").map((e=>e.charAt(0).toUpperCase()+e.slice(1))).join("")}function s(e,t){let r;return()=>{clearTimeout(r),r=setTimeout((function(){e(...arguments)}),t)}}function a(e,t){const n=Object.keys(e),s=Object.keys(t);if(n.length!==s.length)return!1;for(const s of n){const n=e[s],o=t[s],c=r(n)&&r(o);if(c&&!a(n,o)||!c&&n!==o)return!1}return!0}function o(e,t,n=null,s){let a=e.split(".");s||(s=t);let c=a.shift(),i=a.join(".");null!==n&&c.length&&void 0===t[c]&&(t[c]={});let l=t[c];return 0===i.length?null!==n?(t[c]=n,s):t[c]:r(t[c])?o(i,t[c],n,s):n?s:l[c]}function c(e,t){var n=Array.from(arguments);if(n.length){if(1===n.length)return n[1];if(n.length>2){for(;n.length>1;)n[0]=c(n[0],n[1]),n.splice(1,1);return n[0]}if("string"==typeof e){var s=e.match(/\{[^\{\}]*\}/g);s&&s.forEach((function(r){var n=o(r.substr(1,r.length-2),t);void 0!==n&&(e=e.replace(r,n))}))}else if(r(e))switch(e.constructor){case Object:Object.keys(e).forEach((function(r){e.hasOwnProperty(r)&&(e[r]=c(e[r],t))}));break;case Array:e.forEach((function(r,n,s){s[n]=c(e[n],t)}))}return e}console.error("no arguments give to parse")}function i(e){let t=document.createElement("template");return e=e.replace(/<([A-Za-z0-9\-]*)([^>\/]*)(\/>)/gi,"<$1$2></$1>"),t.innerHTML=e,t.content.normalize(),Array.from(t.content.childNodes)}e.r(t),e.d(t,{$d:()=>B,$t:()=>q,DC:()=>S,MC:()=>A,McBase:()=>w,McEvent:()=>h,addListener:()=>m,debounce:()=>s,deepEqual:()=>a,defineCE:()=>k,formValues:()=>F,getCE:()=>x,htmlToElements:()=>i,isObject:()=>r,kebabToPascal:()=>n,makeCO:()=>T,nameSpace:()=>o,parse:()=>c,removeListener:()=>g});var l=new Function("try {return this===window;}catch(e){ return false;}");let u=new Set;l()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>u.add(e)));class h{#e;#t=!1;#r=!1;constructor(e,t={},r="l"){this.#e=e,this.data=t,this.bubble=r}get type(){return this.#e}get stopped(){return this.#t}get immediateStopped(){return this.#r}stopPropagation(){this.#t=!0}stopImmediatePropagation(){this.stopPropagation(),this.#r=!0}}var f=new Function("try {return this===window;}catch(e){ return false;}");let d=new Set;function p(e,t){let r=[];return e.forEach((e=>{if(e&&e instanceof HTMLElement){const n=e?._mc;!t&&n?r=r.concat(Object.values(e._mc)):t&&n&&n[t]&&r.push(n[t])}})),r}function y(e,t,r=!0){let n=[];for(;e;){if(e._mc&&(t?t&&e._mc[t]&&n.push(e._mc[t]):n=n.concat(Object.values(e._mc)),r))return n;e=e.parentNode}return n}function b(e){return e&&e instanceof HTMLElement}function m(e,t,r,n=!1,s=!1){let a={once:!1};n&&(a.capture=n),s&&(a.once=s),e.addEventListener(t,r,a)}function g(e,t,r){e.removeEventListener(t,r)}function E(e,t,r={}){let n=e;if(!n._mc){let t=A?.debug;A.debug=!1,n._mc=new A(e),A.debug=t}const s=n._mc;return t.length&&!s[t]&&(s[t]=r,e instanceof HTMLElement&&e.setAttribute("_mc","")),r}function v(e,t){if(!t)return;const r=e?._mc||{};r&&r[t]&&delete r[t],!Object.keys(r).length&&e instanceof HTMLElement&&e.hasAttribute("_mc")&&e.removeAttribute("_mc")}function O(e,t,r={}){let n=e?._mc;n&&[...Object.values(n)].forEach((e=>{e?.trigger&&"function"==typeof e?.trigger&&e?.trigger(t,r)}))}f()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>d.add(e)));class w{#n;#s={};constructor(e){this.#n=new WeakRef(e),this.constructor!==A&&this.constructor!==S&&Object.defineProperty(this,"_mc",{get(){return this.#s}})}get target(){return this.#n.deref()}}class A extends w{constructor(e){super(e);let t=this;t.constructor!==A&&t.constructor!==S&&setTimeout((()=>{t.trigger("init")}),0)}trigger(e,t={},r){let n=this;if(r=r||"l",n.constructor!==A&&n.constructor!==S){if(n instanceof A||n instanceof S){const n=this,s="string"!=typeof e?e:new h(e,t,r),a="on"+s.type[0].toUpperCase()+s.type.slice(1);if(s.bubble.indexOf("l")>-1&&(s.immediateStopped||"function"!=typeof n[a]||(n[a](s),n.hasOwnProperty(a)&&delete n[a])),s.stopped||"l"===s.bubble)return n;f()&&/[ud]/.test(s.bubble)&&n instanceof A&&setTimeout((()=>{-1===s.bubble.indexOf("l")&&(s.bubble+="l"),s.bubble.indexOf("u")>-1&&n.parent().forEach((e=>{e instanceof A&&e.trigger(s)})),s.bubble.indexOf("d")>-1&&n.children().forEach((e=>{e instanceof A&&e.trigger(s)}))}),0)}}else[...Object.getOwnPropertyNames(n)].forEach((s=>{n[s]?.trigger&&"function"==typeof n[s]?.trigger&&n[s]?.trigger(e,t,r)}))}}class S extends A{constructor(e){super(e)}static debug=!1;static add=E;static remove=v;static trigger=O;parent(e=""){let t=this.target;return b(t)?y(t.parentNode,e,!0):[]}ancestors(e=""){let t=this?.target;return b(t)?y(this.target.parentNode,e,!1):[]}children(e=""){let t=this?.target;if(!b(t))return[];const r=Math.random().toString().replace(".",""),n='[_mc]:not([temp_id="'+r+'"] [_mc] [_mc])';t.setAttribute("temp_id",r);const s=p([...t.querySelectorAll(n)],e);return t.removeAttribute("temp_id"),s}descendants(e=""){let t=this?.target;return b(t)?p([...t.querySelectorAll("*[_mc]")],e):[]}autoAttachListeners(){if(!f())return;const e=this.target;if(e instanceof HTMLElement){let t=this;Object.getOwnPropertyNames(t.constructor.prototype).filter((e=>/^on[A-Z]|one[A-Z]/.test(e)&&"function"==typeof t.constructor.prototype[e])).forEach((r=>{let n=/^one/.test(r),s=r.replace(/^on[e]{0,1}/,""),a=s.toLowerCase();n&&Object.defineProperty(this,"on"+s,{configurable:!0,enumerable:!1,writable:!0,value:e=>{t.constructor.prototype[r].bind(t)(e)}}),d.has("on"+a)&&m(e,a,(e=>{t.trigger(s,e)}),!1,n)}))}}}class j extends HTMLElement{constructor(){super()}connectedCallback(){S.trigger(this,"Connected")}disconnectedCallback(){S.trigger(this,"Disconnected")}adoptedCallback(){S.trigger(this,"Adopted")}attributeChangedCallback(e,t,r){S.trigger(this,"AttributeChanged",{name:e,oldValue:t,newValue:r})}}function k(e,t,r=[]){if(customElements.get(e))return void console.warn(`IGNORED: Custom element "${e}" is already defined!`);if(!e.includes("-"))throw new Error('createCustomElement: tagName must contain at least one hyphen ("-").');let s=n(e);customElements.define(e,function(e,t){return Object.defineProperty(t,"name",{value:e})}(s,class extends j{instance;constructor(e){super();let r=new t(this,e);S.add(this,s,r)}static get observedAttributes(){return r}}))}function x(e){return customElements.get(e)}const T=(e,t)=>{(t?[t]:[...Object.getOwnPropertyNames(e)]).forEach((t=>{if("_"===t[0]||void 0===e?.[t])return;let n,o=e[t];if(!o.prototype)switch(typeof o){case"string":n=String;break;case"number":n=Number;break;case"boolean":n=Boolean;break;case"object":n=o instanceof Array?Array:Object;break;default:return}let i=class extends n{constructor(e){super(e),this.constructor.callbacks=[],r(e)&&(this.constructor.bound=[],Object.getOwnPropertyNames(e).forEach((t=>{this[t]=e[t]})))}observe(e){return this.constructor.callbacks.push(e),this}bind(e){const t=this,n=r(t.valueOf()),s=t.constructor.bound;if(n){function a(e){if(e.nodeType&&3===e.nodeType){var r=Array.from(e.nodeValue&&e.nodeValue.match(/\{[^\{\}]*\}/g)||[]);if(r.length>0){var o=(i=e.nodeValue||"",function(t){var s,a=!1;return r&&(n?r.forEach((function(e){o.values[e]!==t[e]&&(o.values[e]=t[e],a=!0)})):(o.values=t,a=!0)),a&&(s=i,e.nodeValue=n?c(s,o.values):s.replace(/\{.*\}/g,o.values)),t});o.values=n?{}:void 0,r=Array.from(r).map((e=>e.replace(/[\{\}]/g,"").trim()));let t=n?{}:void 0;r.forEach((function(e){n&&(t[e]="")})),s.push(o)}Array.from(e.childNodes).forEach((function(e){a(e)})),t.notify()}var i;e.nodeType&&1===e.nodeType&&(Array.from(e.attributes).forEach((function(t){var r=Array.from(t.value&&t.value.match(/\{[^\{\}]*\}/g)||[]);if(r.length>0){var n=function(t){return function(s){var a,o=!1;return r&&r.forEach((function(e){n.values[e]!==s[e]&&(n.values[e]=s[e],o=!0)})),o&&(a=t,e.nodeValue=c(a,n.values)),s}}(t.value||"");n.values={},r=Array.from(r).map((e=>e.replace(/[\{\}]/g,"").trim()));let a={};r.forEach((function(e){a[e]=""})),s.push(n)}})),Array.from(e.childNodes).forEach((function(e){a(e)})),t.notify()),e.nodeType&&11===e.nodeType&&Array.from(e.childNodes).forEach((function(e){a(e)}))}a(e),s.length>0&&t.notify()}else console.warn("IGNORED - cannot bind a non-Object to the dom, IS:",typeof t.valueOf());return this}notify(){let e=this,t=r(e.valueOf())&&e.valueOf()instanceof Array==0?structuredClone(Object.assign({},e)):e.valueOf();return e.constructor.callbacks.forEach((e=>{e(t)})),r(e.valueOf())&&e.constructor.bound.forEach((e=>{e(t)})),this}},l=new i(o);Object.defineProperty(e,t,{enumerable:!0,get(){if(r(l.valueOf())){let e=structuredClone(Object.assign({},l));setTimeout(s((function(){a(structuredClone(Object.assign({},l)),e)||l.notify()}),0),0)}return l},set(e){if(typeof e==typeof l.valueOf())if(r(l.valueOf())&&l.valueOf()instanceof Array==0){let t=structuredClone(Object.assign({},l));e=structuredClone(Object.assign({},e));let r=l.constructor?.hasFormHandler??!1,n=l.constructor.callbacks,o=l.constructor.bound;l=new i(structuredClone(Object.assign({},e))),l.constructor.callbacks=r,l.constructor.callbacks=n,l.constructor.bound=o,setTimeout(s((function(){a(structuredClone(Object.assign({},l)),t)||l.notify()}),0),0)}else{let t=l.valueOf(),r=l.constructor.callbacks;l=new i(e),l.constructor.callbacks=r,e!==t&&l.notify()}else console.warn("IGNORED - cannot change observable types, IS:",typeof l.valueOf(),"- CANNOT BECOME:",typeof e)}}),e[t]=o}))},C=e=>{let t=new Set;return e.forEach((e=>{(e=e.trim()).split(" ").forEach((e=>{""!==e&&t.add(e)}))})),Array.from(t)},_=e=>{let t=B("input,select,textarea",e).array,r={};return t.forEach((t=>{const n=t.getAttribute("name")||"undefined";if(n){let s;switch((e=>e instanceof HTMLInputElement?"input":e instanceof HTMLSelectElement?"select":e instanceof HTMLTextAreaElement?"textarea":"")(t)){case"input":s=new L(t,e),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>s.val,set:e=>{s.val=e}});break;case"select":s=new M(t),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>s.val,set:e=>{s.val=e}});break;case"textarea":s=new P(t),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>s.val,set:e=>{s.val=e}});break;default:console.warn("handler missing:",n,"for",t)}}})),r};class N{constructor(e){}}class L extends N{#a;#e;#o;constructor(e,t){super(e),this.#a=e,this.#e=e.type,this.#o=t}get val(){let e,t=this;switch(t.#e){case"radio":const r=B(`input[type="radio"][name="${this.#a.getAttribute("name")}"]`,this.#o).filter((e=>e.checked));return r.length?(e=r.array[0],e.value):"";case"checkbox":return t.#a.checked;default:return t.#a.value}return""}set val(e){let t=this;switch(t.#e){case"radio":const r=`input[type="radio"][name="${this.#a.getAttribute("name")}"]`,n=B(r,this.#o);if(!n.length)return;if(""===e)return void n.forEach((e=>{e.checked&&(e.checked=!1)}));const s=n.filter((t=>t.getAttribute("value")===e));if(!s.length)return;return void(s.array[0].checked=!0);case"checkbox":t.#a.checked=e;break;default:t.#a.value=e}}}class M extends N{#a;#c=!1;constructor(e){super(e),this.#a=e,this.#c="select-multiple"===e.type}get val(){const e=[];return B(this.#a.querySelectorAll("option")).filter((e=>e.selected)).forEach((t=>{t.selected&&e.push(t.value)})),this.#c?e:e.length?e[0]:""}set val(e){e="string"==typeof e?[e]:e,B(this.#a.querySelectorAll("option")).forEach((t=>{e.indexOf(t.value)>-1?(t.setAttribute("selected",!0),t.selected=!0):(t.removeAttribute("selected"),t.selected=!1)}))}}class P extends N{#a;constructor(e){super(e),this.#a=e}get val(){return this.#a.value}set val(e){this.#a.value=e}}class H{#i=new Set;get set(){return this.#i}get array(){return Array.from(this.#i)}set set(e){this.#i=e}get length(){return this.#i.size}constructor(e,t=document.body){if(new Set,!e)return this}$t(e){let t=new $;return this.#i.forEach((e=>{e._mc&&Object.values(e._mc).forEach((e=>{t.set.add(e)}))})),e&&t.filter((t=>t.nameSpace===e)),t}add(e,t){let r=this;return B(e,t).forEach((e=>{r.#i.add(e)})),r}addClass(...e){return e=C(e),this.forEach((t=>{t.classList.add(...e)})),this}after(e,t){let r=this,n=B(e,t);return n.length?(n.first().forEach((e=>{r.array.reverse().forEach((t=>{t.after(e)}))})),r):r}append(e,t){let r=this.array[0],n=B(e,t);return r&&n.forEach((e=>{r.append(e)})),this}appendTo(e,t){let r=B(e,t).array[0];return r&&this.forEach((e=>{r.append(e)})),this}attr(e,t){let r=this,n={};return r.length?arguments.length?"string"==typeof e?void 0===t?[...r.set][0].getAttribute(e):null===t?([...r.set].forEach((t=>{t.removeAttribute(e)})),r):("object"==typeof t&&(t=JSON.stringify(t)),[...r.set].forEach((r=>{r.setAttribute(e,t)})),r):"object"==typeof e?([...r.set].forEach((t=>{Object.keys(e).forEach((r=>{B(t).attr(r,e.key)}))})),r):r:(Array.from([...r.set][0].attributes).forEach((e=>{n[e.name]=e.value})),n):r}before(e,t){let r=this,n=B(e,t);return n.length?(n.first().forEach((e=>{r.forEach((t=>{t.before(e)}))})),r):r}children(e,t){let r=this,n=new Set;if(r.#i.forEach((e=>{Array.from(e.children).forEach((e=>{n.add(e)}))})),r=B([...n]),e){let n=B(e,t);r.filter((e=>n.has(e)))}return r}descendants(e,t){let r=this,n=new Set;if(r.#i.forEach((e=>{e.querySelectorAll("*").forEach((e=>{n.add(e)}))})),r=B([...n]),e){let n=B(e,t);r.filter((e=>n.has(e)))}return r}empty(){return this.filter((e=>!1))}first(e,t){let r=this,n=new Set,s=!1;return e&&(s=B(e,t)),r.#i.forEach((e=>{e.parentNode&&n.add(e.parentNode.children[0])})),r=B([...n]),e&&r.filter((e=>s.has(e))),r}has(e){return this.#i.has(e)}hasClass(...e){return e=C(e),this.every((e=>Array.from(e.classList).every((t=>e.contains(t)))))}html(e){let t=this;return e?(t.forEach((t=>{t.parentNode?t.innerHTML=e:(()=>{console.warn("Cannot access the .innerHTML of a HTMLElement that hasnt been inserted yet",t),console.trace(t,this),console.info("If you called this from inside a Web Component constructor, consider using the %c[connected] event callback!","color: blue;")})()})),t):t.array[0].innerHTML}last(e,t){let r=this,n=new Set;if(r.#i.forEach((e=>{let t=e.parentNode?.children;t&&n.add(Array.from(t).at(-1))})),r=B([...n]),e){let n=B(e,t);r.filter((e=>n.has(e)))}return r}next(e,t){let r=this,n=new Set;if(r.#i.forEach((e=>{let t=e.parentNode?.children;if(t){let r=Array.from(t),s=r.indexOf(e)+1;s<r.length&&n.add(r.at(s))}})),r=B([...n]),e){let n=B(e,t);r.filter((e=>n.has(e)))}return r}normalize(){return this.#i.forEach((e=>{e.normalize()})),this}off(e,t){let r=e.indexOf(" ")>-1?e.split(" "):[e];return this.array.forEach((e=>{r.forEach((function(r){g(e,r,t)}))})),this}on(e,t,r=!1,n=!1){let s=this,a=e.indexOf(" ")>-1?e.split(" ").filter((e=>""!==e)):[e];function o(){o.cb.apply(s,Array.from(arguments))}return o.cb=t,s.forEach((e=>{a.forEach((function(t){m(e,t,o,r,n)}))})),o}one(e,t,r=!1){let n=this,s=e.indexOf(" ")>-1?e.split(" ").filter((e=>""!==e)):[e];function a(){a.cb.apply(n,Array.from(arguments))}return a.cb=t,n.forEach((e=>{s.forEach((function(t){m(e,t,a,r,!0)}))})),a}parent(e,t){let r=this,n=new Set;if(r.#i.forEach((e=>{e.parentNode&&"HTML"!==e.parentNode.tagName&&n.add(e.parentNode)})),r=B([...n]),e){let n=B(e,t);r.filter((e=>n.has(e)))}return r}parents(e,t){let r=this,n=new Set;if(r.#i.forEach((e=>{let t=e;for(;t.parentNode&&"HTML"!==t.parentNode.tagName;)t=t.parentNode,n.add(t)})),r=B([...n]),e){let n=B(e,t);r.filter((e=>n.has(e)))}return r}prepend(e,t){let r=this.array[0],n=B(e,t);return r&&n.forEach((e=>{r.prepend(e)})),this}prev(e,t){let r=this,n=new Set;if(r.#i.forEach((e=>{let t=e.parentNode?.children;if(t){let r=Array.from(t),s=r.indexOf(e)-1;s>-1&&n.add(r.at(s))}})),r=B([...n]),e){let n=B(e,t);r.filter((e=>n.has(e)))}return r}removeClass(...e){return e=C(e),this.forEach((t=>{t.classList.remove(...e)})),this}text(e){let t=this;return e?(t.forEach((t=>{t.parentNode?t.innerText=e:(()=>{console.warn("Cannot access the .textContent of a HTMLElement that hasnt been inserted yet",t),console.trace(t,this),console.info("If you called this from inside a Web Component constructor, consider using the %c[connected] event callback!","color: blue;")})()})),t):t.array[0].innerText??""}toggleClass(...e){return e=C(e),this.forEach((t=>{t.classList.toggle(...e)})),this}trigger(e,t={},r=!1,n=!1,s=!1){let a,o={bubbles:r,cancelable:n,composed:s},c=e.indexOf(" ")>-1?e.split(" "):[e];return this.#i.forEach((e=>{c.forEach((function(r){a=new Event(r,o),a.data=t,e.dispatchEvent(a)}))})),this}val(e,t){if(!this.length)return this;const r=this;let n,s=_(r.array[0]);var a;return e?null!=(a=e)&&"object"==typeof a?(Object.assign(s,e),n=r):"string"==typeof e&&(void 0===t?n=s[e]:(s[e]=t,n=r)):n=Object.assign({},s),n}values(e){const t=this;let r={};if(!t.length)return console.warn("no dom selection to search inputs in"),{};let n=_(t.array[0]);return Object.keys(n).forEach((e=>{r[e]=n[e]})),0===Object.keys(r).length&&console.warn("no inputs in this dom selection",t.array[0],r),e&&Object.keys(e).forEach((t=>{n.hasOwnProperty(t)&&(console.log("key found",t),n[t]=e[t])})),structuredClone(Object.assign(n))}at(e){return B(this.array.at(e))}concat(e){let t=this;return(e instanceof H?e.array:e).forEach((e=>{t.#i.add(e)})),t}entries(){return this.array.entries()}every(e,t){return this.array.every(e,t)}filter(e,t){return this.#i=new Set(this.array.filter(e,t)),this}forEach(e,t){return this.array.forEach(e,t),this}includes(e){return-1!==this.array.indexOf(e,0)}indexOf(e,t){return this.array.indexOf(e,t)}map(e,t){return this.array.map(e,t)}pop(){return this.array.pop()}push(...e){return e.forEach((e=>{this.#i.add(e)})),this}shift(){let e=this,t=e.#i.size?e.array[0]:void 0;return t&&e.#i.delete(t),t}slice(e,t){return B(this.array.slice(e,t))}some(e,t){return this.array.some(e,t)}splice(e,t,...r){let n=this.array;return n.splice(e,t,...r),B(n)}}class ${#i=new Set;get set(){return this.#i}get array(){return Array.from(this.#i)}set set(e){this.#i=e}get length(){return this.#i.size}set length(e){}constructor(e,t=document.body){if(!e)return this;B(e,t).forEach((e=>{q(e).forEach((e=>{this.#i.add(e)}))}))}$d(e,t=document.body){let r=new H,n=new Set,s=!!e||!1,a=new Set;return s&&(a=B(e,t).set),this.#i.forEach((e=>{s&&!a.has(e._tg)||n.add(e._tg)})),r.set=n,r}children(e){let t=this,r=new Set;return t.#i.forEach((t=>{t.children(e).forEach((e=>{r.add(e)}))})),t.#i=r,t}descendants(e){let t=this,r=new Set;return t.#i.forEach((t=>{t.descendants(e).forEach((e=>{r.add(e)}))})),t.#i=r,t}first(e){let t=this,r=new Set;return t.#i.forEach((e=>{e.parent().children().$d().first().$t().forEach((e=>{r.add(e)}))})),t.#i=r,e&&t.filter((t=>t.nameSpace=e)),t}has(e){return this.#i.has(e)}last(e){let t=this,r=new Set;return t.#i.forEach((e=>{e.parent().children().$d().last().$t().forEach((e=>{r.add(e)}))})),t.#i=r,e&&t.filter((t=>t.nameSpace=e)),t}next(e){let t=this,r=new Set;return t.#i.forEach((e=>{let t,n=new Set;for(t=e._tg;null!==t.nextElementSibling;)t=t.nextElementSibling,n.add(t);q([...n]).$d().first().$t().forEach((e=>{r.add(e)}))})),t.#i=r,e&&t.filter((t=>t.nameSpace=e)),t}ns(e){return this.filter((t=>t.nameSpace===e))}off(e,t){let r=e.indexOf(" ")>-1?e.split(" ").filter((e=>""!==e)):[e];return this.$d().array.forEach((e=>{r.forEach((function(r){g(e,`[TB]${r}`,t)}))})),this}on(e,t,r=!1){let n=this,s=e.indexOf(" ")>-1?e.split(" ").filter((e=>""!==e)):[e];function a(){a.cb.apply(n,Array.from(arguments))}return a.cb=t,n.forEach((e=>{s.forEach((function(t){m(e._tg,`[TB]${t}`,a,!1,r)}))})),a}one(e,t){let r=this,n=e.indexOf(" ")>-1?e.split(" ").filter((e=>""!==e)):[e];function s(){s.cb.apply(r,Array.from(arguments))}return s.cb=t,r.forEach((e=>{n.forEach((function(t){m(e._tg,`[TB]${t}`,s,!1,!0)}))})),s}parent(e){let t=this,r=new Set;return t.#i.forEach((t=>{t.parent(e).forEach((e=>{r.add(e)}))})),t.#i=r,t}parents(e){let t=this,r=new Set;return t.#i.forEach((t=>{t.parents(e).forEach((e=>{r.add(e)}))})),t.#i=r,t}prev(e){let t=this,r=new Set;return t.#i.forEach((e=>{let t,n=new Set;for(t=e._tg;null!==t.previousElementSibling;)t=t.previousElementSibling,n.add(t);q([...n]).$d().last().$t().forEach((e=>{r.add(e)}))})),t.#i=r,e&&t.filter((t=>t.nameSpace=e)),t}trigger(e,t={},r="l"){return this.forEach((n=>{n.trigger(e,t,r)})),this}at(e){return q(this.array.at(e))}concat(e){let t=this;return e.forEach((e=>{t.#i.add(e)})),t}entries(){return this.array.entries()}every(e,t){return this.array.every(e,t)}filter(e,t){return q(this.array.filter(e,t))}forEach(e,t){return this.array.forEach(e,t),this}includes(e){return-1!==this.array.indexOf(e)}indexOf(e,t){return this.array.indexOf(e,t)}map(e,t){return this.array.map(e,t)}pop(){let e=this.array,t=e.pop();return this.#i=new Set(e),t}push(e){return this.#i.add(e),this}shift(){let e=this.array.shift();return this.#i.delete(e),e}slice(e,t){return q(this.array.slice(e,t))}some(e,t){return this.array.some(e,t)}splice(e,t,...r){let n=this.array.splice(e,t,...r);return q(n)}}const B=(e,t=document)=>{let r=new Set;return e instanceof Array?(e.forEach((e=>{B(e,t).forEach((e=>{r.add(e)}))})),new H([...r])):new H(e,t)},q=(e,t=document)=>B(e,t).$t();class I{constructor(e){}}class V extends I{#a;#e;#o;constructor(e,t){super(e),this.#a=e,this.#e=e.type,this.#o=t}get val(){let e,t=this;switch(t.#e){case"radio":const r=[...(this.#o||document).querySelectorAll(`input[type="radio"][name="${this.#a.getAttribute("name")}"]`)].filter((e=>e.checked));return r.length?(e=r?.[0],e.value):"";case"checkbox":return t.#a.checked;default:return t.#a.value}return""}set val(e){let t=this;switch(t.#e){case"radio":const r=[...(this.#o||document).querySelectorAll(`input[type="radio"][name="${this.#a.getAttribute("name")}"]`)];if(!r.length)return;if(""===e)return void r.forEach((e=>{e.checked&&(e.checked=!1)}));const n=r.filter((t=>t.getAttribute("value")===e));if(!n.length)return;return void((n?.[0]).checked=!0);case"checkbox":t.#a.checked=e;break;default:t.#a.value=e}}}class z extends I{#a;#c=!1;constructor(e){super(e),this.#a=e,this.#c="select-multiple"===e.type}get val(){const e=[];return[...this.#a.querySelectorAll("option")].filter((e=>e.selected)).forEach((t=>{t.selected&&e.push(t.value)})),this.#c?e:e.length?e[0]:""}set val(e){e="string"==typeof e?[e]:e,[...this.#a.querySelectorAll("option")].forEach((t=>{e.indexOf(t.value)>-1?(t.setAttribute("selected","selected"),t.selected=!0):(t.removeAttribute("selected"),t.selected=!1)}))}}class D extends I{#a;constructor(e){super(e),this.#a=e}get val(){return this.#a.value}set val(e){this.#a.value=e}}const F=(e,t={},r,n)=>{let s=(e=>{let t=[...(e||document).querySelectorAll("input,select,textarea")],r={};return t.forEach((t=>{const n=t.getAttribute("name")||"undefined";if(n){let s;switch((e=>e instanceof HTMLInputElement?"input":e instanceof HTMLSelectElement?"select":e instanceof HTMLTextAreaElement?"textarea":"")(t)){case"input":s=new V(t,e),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>s.val,set:e=>{s.val=e}});break;case"select":s=new z(t),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>s.val,set:e=>{s.val=e}});break;case"textarea":s=new D(t),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>s.val,set:e=>{s.val=e}});break;default:console.warn("handler missing:",n,"for",t)}}})),r})(e);function a(e){Object.keys(e).forEach((t=>{s.hasOwnProperty(t)&&e.hasOwnProperty(t)&&(s[t]=e[t])}))}if(Object.keys(t).length>0&&a(t),void 0!==n){let t=r[n];t.constructor?.hasFormHandler||(t.constructor.hasFormHandler=!0,t.observe(a)),r[n].observe((()=>{})),[...e.querySelectorAll("input, textarea, select")].forEach((e=>{m(e,"keyup",(()=>{r[n]=structuredClone(Object.assign(s))})),m(e,"change",(()=>{r[n]=structuredClone(Object.assign(s))})),e instanceof HTMLSelectElement&&m(e,"select",(()=>{r[n]=structuredClone(Object.assign(s))}))}))}return n?r[n]:Object.assign({},s)};return t})()));
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var isBrowser = new Function("try {return this===window;}catch(e){ return false;}");
|
|
3
|
+
let nativeEventNames = new Set();
|
|
4
|
+
// HTMLElement native event names
|
|
5
|
+
if (isBrowser()) {
|
|
6
|
+
Object.keys(HTMLElement.prototype).filter(key => /^on/.test(key)).forEach(eventName => nativeEventNames.add(eventName));
|
|
7
|
+
}
|
|
8
|
+
function isDOM(element) {
|
|
9
|
+
return element && element instanceof HTMLElement;
|
|
10
|
+
}
|
|
11
|
+
class McEvent {
|
|
12
|
+
#type;
|
|
13
|
+
#stopped = false;
|
|
14
|
+
#immediateStopped = false;
|
|
15
|
+
constructor(type, data = {}, bubble = 'l') {
|
|
16
|
+
// bubble standard = local only, options = any combination of'uld' characters: up to root, local, down
|
|
17
|
+
this.#type = type;
|
|
18
|
+
this.data = data;
|
|
19
|
+
this.bubble = bubble;
|
|
20
|
+
}
|
|
21
|
+
get type() {
|
|
22
|
+
return this.#type;
|
|
23
|
+
}
|
|
24
|
+
get stopped() {
|
|
25
|
+
return this.#stopped;
|
|
26
|
+
}
|
|
27
|
+
get immediateStopped() {
|
|
28
|
+
return this.#immediateStopped;
|
|
29
|
+
}
|
|
30
|
+
stopPropagation() {
|
|
31
|
+
this.#stopped = true;
|
|
32
|
+
}
|
|
33
|
+
stopImmediatePropagation() {
|
|
34
|
+
this.stopPropagation();
|
|
35
|
+
this.#immediateStopped = true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// get all microcomponents from a list of HTMLElements
|
|
39
|
+
function getMicroComponents(elements, search) {
|
|
40
|
+
let mcValues = [];
|
|
41
|
+
elements.forEach(e => {
|
|
42
|
+
if (e) {
|
|
43
|
+
if (e instanceof HTMLElement) {
|
|
44
|
+
const _mc = e?._mc;
|
|
45
|
+
if (!search && _mc) {
|
|
46
|
+
mcValues = mcValues.concat(Object.values(e._mc));
|
|
47
|
+
}
|
|
48
|
+
else if (search && _mc && _mc[search]) {
|
|
49
|
+
mcValues.push(_mc[search]);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
return mcValues;
|
|
55
|
+
}
|
|
56
|
+
// get all ancestor DOM nodes up to the document root
|
|
57
|
+
function traverseNodes(node, search, firstonly = true) {
|
|
58
|
+
let mcValues = [];
|
|
59
|
+
while (node) {
|
|
60
|
+
if (node._mc) {
|
|
61
|
+
if (!search) {
|
|
62
|
+
mcValues = mcValues.concat(Object.values(node._mc));
|
|
63
|
+
}
|
|
64
|
+
else if (search && node._mc[search]) {
|
|
65
|
+
mcValues.push(node._mc[search]);
|
|
66
|
+
}
|
|
67
|
+
if (firstonly)
|
|
68
|
+
return mcValues;
|
|
69
|
+
}
|
|
70
|
+
node = node.parentNode;
|
|
71
|
+
}
|
|
72
|
+
return mcValues;
|
|
73
|
+
}
|
|
74
|
+
export { McEvent };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
|
|
3
|
+
<title>test</title>
|
|
4
|
+
<rect fill="transparent" x="0" y="0" width="200" height="200" fill-opacity="1"/>
|
|
5
|
+
<g style="fill:transparent">
|
|
6
|
+
<title>first bird</title>
|
|
7
|
+
<path fill="#18829c" d="
|
|
8
|
+
m15,160
|
|
9
|
+
a30,75 45 1 0 160,-150
|
|
10
|
+
a20,50 225 1 1 -110,100
|
|
11
|
+
a12,25 45 1 1 60,-50
|
|
12
|
+
a20,50 225 1 0 -110,100
|
|
13
|
+
" />
|
|
14
|
+
</g>
|
|
15
|
+
</svg>
|