@twobirds/microcomponents 0.0.37 → 0.0.41
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/my-tag.css +10 -2
- package/assets/test.html +21 -12
- package/dist/MC.d.ts +1 -1
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.min.js +49 -28
- package/dist/MC.ts +69 -32
- package/dist/elements.min.js +1 -1
- package/dist/microcomponents.min.js +1 -1
- package/dist/observables.d.ts.map +1 -1
- package/dist/observables.min.js +1 -1
- package/dist/observables.ts +21 -14
- package/dist/test.ts +25 -17
- package/package.json +1 -1
- package/public/MC.js +49 -28
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +49 -28
- package/public/assets/search.js +1 -1
- package/public/classes/MC.DC.html +13 -13
- package/public/classes/MC.MC.html +14 -12
- package/public/classes/MC.McBase.html +4 -4
- package/public/classes/MC.McEvent.html +13 -13
- package/public/elements.min.js +1 -1
- package/public/functions/MC.addListener.html +1 -1
- package/public/functions/MC.removeListener.html +1 -1
- package/public/functions/elements.defineCE.html +1 -1
- package/public/functions/elements.getCE.html +1 -1
- package/public/functions/formValues.formValues.html +1 -1
- package/public/functions/observables.observe.html +1 -1
- package/public/functions/selectors._d.html +1 -1
- package/public/functions/selectors._t.html +1 -1
- package/public/interfaces/MC.HTMLMcElement.html +2 -2
- package/public/interfaces/selectors.DSelector.html +55 -55
- package/public/interfaces/selectors.TSelector.html +37 -37
- package/public/microcomponents.min.js +1 -1
- package/public/modules/MC.html +1 -1
- package/public/modules/elements.html +1 -1
- package/public/modules/formValues.html +1 -1
- package/public/modules/observables.html +1 -1
- package/public/modules/selectors.html +1 -1
- package/public/my-tag.css +10 -2
- package/public/observables.js +20 -9
- package/public/observables.js.map +1 -1
- package/public/observables.min.js +1 -1
- package/public/src/MC.ts +69 -32
- package/public/src/observables.ts +21 -14
- package/public/src/test.ts +25 -17
- package/public/test.html +21 -12
- package/public/test.js +18 -25
- package/public/test.js.map +1 -1
- package/public/types/observables.Observable.html +5 -5
- package/public/types/selectors.selection.html +1 -1
- package/public/types/selectors.singleSelector.html +1 -1
- package/src/MC.ts +69 -32
- package/src/observables.ts +21 -14
- package/src/test.ts +25 -17
package/public/test.js
CHANGED
|
@@ -23,11 +23,12 @@ class Translator extends DC {
|
|
|
23
23
|
that.Translation = { lang: that.#translations[lang] }; // set translation
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
|
-
that.Translation.bind(
|
|
26
|
+
that.Translation.bind(translationTargetObject);
|
|
27
27
|
this.target.setAttribute('language', 'en');
|
|
28
|
+
this.Language.notify();
|
|
28
29
|
}
|
|
29
30
|
oneInit() {
|
|
30
|
-
this.Language.notify(); // trigger translation
|
|
31
|
+
//(this.Language as Observable).notify(); // trigger translation
|
|
31
32
|
}
|
|
32
33
|
onAttributeChanged(ev) {
|
|
33
34
|
if (!ev.data.newValue)
|
|
@@ -43,7 +44,7 @@ class Translator extends DC {
|
|
|
43
44
|
defineCE(
|
|
44
45
|
// equivalent to custom element registry .define()
|
|
45
46
|
'my-tag', class MyTag extends DC {
|
|
46
|
-
#template = '{lang.click} {counter}';
|
|
47
|
+
#template = '<button>{lang.click} {counter}</button>';
|
|
47
48
|
#languages = {
|
|
48
49
|
en: {
|
|
49
50
|
click: 'click me',
|
|
@@ -56,6 +57,8 @@ defineCE(
|
|
|
56
57
|
constructor(target) {
|
|
57
58
|
super(target);
|
|
58
59
|
let that = this; // minifier help
|
|
60
|
+
// hide
|
|
61
|
+
target.setAttribute('style', 'display:none');
|
|
59
62
|
// render
|
|
60
63
|
target.innerHTML = this.#template;
|
|
61
64
|
// add public translator
|
|
@@ -69,53 +72,43 @@ defineCE(
|
|
|
69
72
|
observe(that);
|
|
70
73
|
// bind Dom to target
|
|
71
74
|
that.Dom.bind(that.target);
|
|
75
|
+
// show
|
|
76
|
+
setTimeout(() => that.target.removeAttribute('style'), 100);
|
|
72
77
|
}
|
|
73
78
|
onAttributeChanged(ev) {
|
|
74
79
|
//console.log(ev);
|
|
75
80
|
this.target._mc.translator.Language = ev.data.newValue;
|
|
76
81
|
}
|
|
77
82
|
onClick(ev) {
|
|
78
|
-
this.Dom.counter++;
|
|
83
|
+
const that = this, c = this.Dom.counter++;
|
|
84
|
+
ev.data.stopPropagation();
|
|
85
|
+
this.target.classList.remove('clicked');
|
|
86
|
+
this.target.classList.add(that.Dom.counter > 9 ? 'overClicked' : 'clicked');
|
|
79
87
|
}
|
|
80
88
|
}, ['language']);
|
|
81
89
|
let MyTag = getCE('my-tag'), fragment = new DocumentFragment();
|
|
82
90
|
/*
|
|
83
91
|
stress test
|
|
84
92
|
*/
|
|
85
|
-
/*
|
|
86
93
|
let start = new Date().getTime();
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
let mt = new MyTag('my-data');
|
|
91
|
-
fragment.append(mt);
|
|
94
|
+
// create 100 elements
|
|
95
|
+
for (let x = 0; x < 100; x++) {
|
|
96
|
+
fragment.append(new MyTag());
|
|
92
97
|
}
|
|
93
|
-
|
|
94
98
|
let end = new Date().getTime();
|
|
95
|
-
|
|
96
99
|
// and put them into the DOM
|
|
97
100
|
document.body.appendChild(fragment);
|
|
98
|
-
|
|
99
|
-
document.querySelectorAll('my-tag').forEach((e) => e.remove());
|
|
100
|
-
*/
|
|
101
|
+
//document.querySelectorAll('my-tag').forEach((e) => e.remove());
|
|
101
102
|
/*
|
|
102
103
|
console test
|
|
103
104
|
*/
|
|
104
105
|
setTimeout(() => {
|
|
105
106
|
console.clear();
|
|
106
|
-
|
|
107
|
-
console.log(
|
|
108
|
-
'%c \n\nStress Test:\n\n %cInstancing 1000 web components: %c %s ms.',
|
|
109
|
-
'font-weight: bold; color: black;',
|
|
110
|
-
'font-weight: normal;',
|
|
111
|
-
'font-weight: bold; color: blue;',
|
|
112
|
-
0
|
|
113
|
-
);
|
|
114
|
-
*/
|
|
107
|
+
console.log('%c \n\nStress Test:\n\n %cInstancing 100 web components: %c %s ms.', 'font-weight: bold; color: black;', 'font-weight: normal;', 'font-weight: bold; color: blue;', end - start);
|
|
115
108
|
document.body.appendChild(new MyTag());
|
|
116
109
|
let element = document.querySelector('my-tag');
|
|
117
110
|
console.log("\n\n%cInspect this tag:%c \n( ...to see the inner structure in the '._mc' property )\n\n %O %c %s", 'font-weight: bold;', 'font-weight: normal;', element, 'font-weight: bold;', '\n\nLook up code in the debugger: test.js\n\n');
|
|
118
111
|
// will trigger the event on all micro components contained in <my-tag>
|
|
119
112
|
DC.trigger(element, 'doSomething');
|
|
120
|
-
},
|
|
113
|
+
}, 500);
|
|
121
114
|
//# sourceMappingURL=test.js.map
|
package/public/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAGN,EAAE,EAEF,QAAQ,EACR,KAAK,EACL,OAAO,GAEP,MAAM,sBAAsB,CAAC;AAE9B,4CAA4C;AAC5C,kDAAkD;AAClD,6CAA6C;AAE7C,kBAAkB;AAElB,MAAM,UAAW,SAAQ,EAAE;IAC1B,aAAa,GAAgB,EAAE,CAAC;IAEhC,QAAQ,GAAY,IAAI,CAAC;IACzB,WAAW,GAAY,EAAE,CAAC;IAE1B,YACC,MAAmD,EACnD,YAAyB,EACzB,uBAAoC;QAEpC,KAAK,CAAC,MAAqB,CAAC,CAAC;QAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,gBAAgB;QAEjC,QAAQ;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,OAAO,CAAC,IAAI,CAAC,CAAC;QAEd,QAAQ;QACR,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,QAAQ;QACP,IAAI,CAAC,QAAuB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9C,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,kBAAkB;YAC1E,CAAC;QACF,CAAC,CAAC,CAAC;QAEF,IAAI,CAAC,WAA0B,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE/D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAuB,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IAED,OAAO;QACN,gEAAgE;IACjE,CAAC;IAED,kBAAkB,CAAC,EAAW;QAC7B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE9B,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,UAAU;gBACd,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACjC,MAAM;QACR,CAAC;IACF,CAAC;CACD;AAED,QAAQ;AACP,kDAAkD;AAClD,QAAQ,EACR,MAAM,KAAM,SAAQ,EAAE;IACrB,SAAS,GAAW,yCAAyC,CAAC;IAE9D,UAAU,GAAG;QACZ,EAAE,EAAE;YACH,KAAK,EAAE,UAAU;SACjB;QACD,EAAE,EAAE;YACH,KAAK,EAAE,YAAY;SACnB;KACD,CAAC;IAEF,GAAG,GAAgB,EAAE,CAAC;IAEtB,YAAY,MAAmB;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,gBAAgB;QAEjC,OAAO;QACP,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE7C,SAAS;QACT,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAElC,wBAAwB;QACxB,EAAE,CAAC,GAAG,CACL,MAAM,EACN,YAAY,EACZ,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAC/C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,EAAW;QAClB,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,QAAQ;QACR,IAAI,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAE1B,2DAA2D;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC;QAEd,qBAAqB;QACpB,IAAI,CAAC,GAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3C,OAAO;QACP,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,kBAAkB,CAAC,EAAW;QAC7B,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,EAAW;QAClB,MAAM,IAAI,GAAG,IAAI,EAChB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACvB,EAAE,CAAC,IAAqB,CAAC,eAAe,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,MAAsB,CAAC,SAAS,CAAC,GAAG,CACzC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACH,CAAC;CACD,EACD,CAAC,UAAU,CAAC,CACZ,CAAC;AAEF,IAAI,KAAK,GAA6B,KAAK,CAAC,QAAQ,CAAE,EACrD,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEnC;;EAEE;AAEF,IAAI,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAEjC,sBAAsB;AACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAE/B,4BAA4B;AAC5B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAEpC,iEAAiE;AAEjE;;EAEE;AAEF,UAAU,CAAC,GAAG,EAAE;IACf,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,OAAO,CAAC,GAAG,CACV,oEAAoE,EACpE,kCAAkC,EAClC,sBAAsB,EACtB,iCAAiC,EACjC,GAAG,GAAG,KAAK,CACX,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAEvC,IAAI,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,CACV,mGAAmG,EACnG,oBAAoB,EACpB,sBAAsB,EACtB,OAAO,EACP,oBAAoB,EACpB,+CAA+C,CAC/C,CAAC;IAEF,uEAAuE;IACvE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACpC,CAAC,EAAE,GAAG,CAAC,CAAC"}
|
|
@@ -16,22 +16,22 @@
|
|
|
16
16
|
<li><a href="../modules/observables.html">observables</a></li>
|
|
17
17
|
<li><a href="observables.Observable.html">Observable</a></li></ul>
|
|
18
18
|
<h1>Type alias Observable</h1></div>
|
|
19
|
-
<div class="tsd-signature">Observable<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span><br/><span> </span>bind<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span>target<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">; </span><br/><span> </span>notify<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">; </span><br/><span> </span>observe<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span>cb<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Callback</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">; </span><br/><span class="tsd-signature-symbol">}</span></div>
|
|
19
|
+
<div class="tsd-signature">Observable<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span><br/><span> </span>bind<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span>target<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">DocumentFragment</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">; </span><br/><span> </span>notify<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">; </span><br/><span> </span>observe<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span>cb<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Callback</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">; </span><br/><span class="tsd-signature-symbol">}</span></div>
|
|
20
20
|
<div class="tsd-type-declaration">
|
|
21
21
|
<h4>Type declaration</h4>
|
|
22
22
|
<ul class="tsd-parameters">
|
|
23
23
|
<li class="tsd-parameter">
|
|
24
|
-
<h5>bind<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span>target<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span></h5>
|
|
24
|
+
<h5>bind<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span>target<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">DocumentFragment</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span></h5>
|
|
25
25
|
<ul class="tsd-parameters">
|
|
26
26
|
<li class="tsd-parameter-signature">
|
|
27
27
|
<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
|
|
28
|
-
<li class="tsd-signature" id="__type.bind.__type-1.__type-2"><span class="tsd-signature-symbol">(</span>target<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
|
|
28
|
+
<li class="tsd-signature" id="__type.bind.__type-1.__type-2"><span class="tsd-signature-symbol">(</span>target<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">DocumentFragment</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
|
|
29
29
|
<li class="tsd-description">
|
|
30
30
|
<div class="tsd-parameters">
|
|
31
31
|
<h4 class="tsd-parameters-title">Parameters</h4>
|
|
32
32
|
<ul class="tsd-parameter-list">
|
|
33
33
|
<li>
|
|
34
|
-
<h5>target: <span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span></h5></li></ul></div>
|
|
34
|
+
<h5>target: <span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">DocumentFragment</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span></h5></li></ul></div>
|
|
35
35
|
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></li></ul></li>
|
|
36
36
|
<li class="tsd-parameter">
|
|
37
37
|
<h5>notify<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span></h5>
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
<h5>cb: <span class="tsd-signature-type">Callback</span></h5></li></ul></div>
|
|
56
56
|
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></li></ul></li></ul></div><aside class="tsd-sources">
|
|
57
57
|
<ul>
|
|
58
|
-
<li>Defined in <a href="https://gitlab.com/twoBirds/microcomponents/-/blob/
|
|
58
|
+
<li>Defined in <a href="https://gitlab.com/twoBirds/microcomponents/-/blob/a01d81a/src/observables.ts#L169">src/observables.ts:169</a></li></ul></aside></div>
|
|
59
59
|
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
|
60
60
|
<div class="tsd-navigation settings">
|
|
61
61
|
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
<h1>Type alias selection</h1></div>
|
|
19
19
|
<div class="tsd-signature">selection<span class="tsd-signature-symbol">:</span> <a href="selectors.singleSelector.html" class="tsd-signature-type" data-tsd-kind="Type alias">singleSelector</a><span class="tsd-signature-symbol"> | </span><a href="selectors.singleSelector.html" class="tsd-signature-type" data-tsd-kind="Type alias">singleSelector</a><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources">
|
|
20
20
|
<ul>
|
|
21
|
-
<li>Defined in <a href="https://gitlab.com/twoBirds/microcomponents/-/blob/
|
|
21
|
+
<li>Defined in <a href="https://gitlab.com/twoBirds/microcomponents/-/blob/a01d81a/src/selectors.ts#L1634">src/selectors.ts:1634</a></li></ul></aside></div>
|
|
22
22
|
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
|
23
23
|
<div class="tsd-navigation settings">
|
|
24
24
|
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
<h1>Type alias singleSelector</h1></div>
|
|
19
19
|
<div class="tsd-signature">single<wbr/>Selector<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">ShadowRoot</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLElement</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCollection</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">NodeList</span><span class="tsd-signature-symbol"> | </span><a href="../interfaces/selectors.DSelector.html" class="tsd-signature-type" data-tsd-kind="Interface">DSelector</a><span class="tsd-signature-symbol"> | </span><a href="../classes/MC.MC.html" class="tsd-signature-type" data-tsd-kind="Class">MC</a><span class="tsd-signature-symbol"> | </span><a href="../classes/MC.DC.html" class="tsd-signature-type" data-tsd-kind="Class">DC</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/selectors.TSelector.html" class="tsd-signature-type" data-tsd-kind="Interface">TSelector</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">undefined</span></div><aside class="tsd-sources">
|
|
20
20
|
<ul>
|
|
21
|
-
<li>Defined in <a href="https://gitlab.com/twoBirds/microcomponents/-/blob/
|
|
21
|
+
<li>Defined in <a href="https://gitlab.com/twoBirds/microcomponents/-/blob/a01d81a/src/selectors.ts#L1632">src/selectors.ts:1632</a></li></ul></aside></div>
|
|
22
22
|
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
|
23
23
|
<div class="tsd-navigation settings">
|
|
24
24
|
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
|
package/src/MC.ts
CHANGED
|
@@ -141,15 +141,33 @@ function remove(target: HTMLMcElement, key: string) {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
// trigger an event
|
|
144
|
-
function trigger(
|
|
144
|
+
function trigger(
|
|
145
|
+
target: HTMLElement,
|
|
146
|
+
ev: McEvent | string,
|
|
147
|
+
data: any = {},
|
|
148
|
+
bubble: string = 'l'
|
|
149
|
+
) {
|
|
145
150
|
let _mc = (target as any)?._mc;
|
|
146
151
|
if (!_mc) return;
|
|
152
|
+
|
|
153
|
+
let event =
|
|
154
|
+
ev instanceof McEvent
|
|
155
|
+
? new McEvent(ev.type, ev.data, 'l')
|
|
156
|
+
: new McEvent(ev, data, 'l'),
|
|
157
|
+
mcEvent: McEvent =
|
|
158
|
+
typeof ev !== 'string' ? (ev as McEvent) : new McEvent(ev, data, bubble);
|
|
159
|
+
|
|
147
160
|
[...Object.values(_mc)].forEach((mc: any) => {
|
|
148
161
|
//console.log( 'mc [', mc.constructor.name, ']', mc.constructor.prototype?.oneInit );
|
|
149
162
|
if ((mc as any)?.trigger && typeof (mc as any)?.trigger === 'function') {
|
|
150
|
-
(mc as any)?.trigger(
|
|
163
|
+
(mc as any)?.trigger(event);
|
|
151
164
|
}
|
|
152
165
|
});
|
|
166
|
+
|
|
167
|
+
if (/[ud]/.test(mcEvent.bubble)) {
|
|
168
|
+
bubbleEvent(target, mcEvent);
|
|
169
|
+
}
|
|
170
|
+
|
|
153
171
|
return;
|
|
154
172
|
}
|
|
155
173
|
|
|
@@ -217,6 +235,37 @@ function autoAttachListeners(element: MC | DC) {
|
|
|
217
235
|
}
|
|
218
236
|
}
|
|
219
237
|
|
|
238
|
+
function bubbleEvent(target: HTMLElement, ev: McEvent) {
|
|
239
|
+
// at this point, either 'u' or 'd' bubbling should be indicated
|
|
240
|
+
// mcEvent bubbling is asynchronous, and the order of target MC execution in case of multiple matches is not guaranteed!
|
|
241
|
+
if (/[ud]/.test(ev.bubble)) {
|
|
242
|
+
setTimeout(() => {
|
|
243
|
+
// bubbling must include 'l' for local, or else no handlers are executed'
|
|
244
|
+
if (ev.bubble.indexOf('l') === -1) {
|
|
245
|
+
ev.bubble += 'l';
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// bubble up towards root
|
|
249
|
+
if (ev.bubble.indexOf('u') > -1) {
|
|
250
|
+
let parent = traverseNodes(target, '', true)?.[0].target;
|
|
251
|
+
if (parent) DC.trigger(parent, ev);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// bubble down
|
|
255
|
+
if (ev.bubble.indexOf('d') > -1) {
|
|
256
|
+
let targets = new Set<HTMLMcElement>(
|
|
257
|
+
(target as HTMLMcElement)._mc
|
|
258
|
+
.children()
|
|
259
|
+
.map((c: unknown) => (c as any)?.target)
|
|
260
|
+
);
|
|
261
|
+
targets.forEach((target: HTMLMcElement) => {
|
|
262
|
+
if (target) DC.trigger(target, ev);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}, 0);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
220
269
|
class McBase {
|
|
221
270
|
#target: WeakRef<any>; // avoid circular reference
|
|
222
271
|
|
|
@@ -245,22 +294,34 @@ class MC extends McBase {
|
|
|
245
294
|
|
|
246
295
|
static trigger = trigger;
|
|
247
296
|
|
|
248
|
-
trigger(ev: McEvent | string, data: any = {}, bubble
|
|
297
|
+
trigger(ev: McEvent | string, data: any = {}, bubble: string = 'l') {
|
|
249
298
|
let that = this;
|
|
250
299
|
|
|
251
300
|
//console.log( that, '.trigger(', ev, data, bubble, ')' );
|
|
252
|
-
bubble = bubble || 'l';
|
|
253
301
|
|
|
254
302
|
// run all triggers
|
|
255
303
|
if (that.constructor === MC || that.constructor === DC) {
|
|
304
|
+
let event =
|
|
305
|
+
ev instanceof McEvent
|
|
306
|
+
? new McEvent(ev.type, ev.data, 'l')
|
|
307
|
+
: new McEvent(ev, data, 'l'),
|
|
308
|
+
mcEvent: McEvent =
|
|
309
|
+
typeof ev !== 'string'
|
|
310
|
+
? (ev as McEvent)
|
|
311
|
+
: new McEvent(ev, data, bubble);
|
|
256
312
|
[...Object.getOwnPropertyNames(that)].forEach((mc) => {
|
|
257
313
|
if (
|
|
258
314
|
(that as any)[mc]?.trigger &&
|
|
259
315
|
typeof (that as any)[mc]?.trigger === 'function'
|
|
260
316
|
) {
|
|
261
|
-
(that as any)[mc]?.trigger(
|
|
317
|
+
(that as any)[mc]?.trigger(event);
|
|
262
318
|
}
|
|
263
319
|
});
|
|
320
|
+
|
|
321
|
+
if (/[ud]/.test(mcEvent.bubble)) {
|
|
322
|
+
bubbleEvent(that.target, mcEvent);
|
|
323
|
+
}
|
|
324
|
+
|
|
264
325
|
return; // must return here!
|
|
265
326
|
}
|
|
266
327
|
|
|
@@ -294,33 +355,9 @@ class MC extends McBase {
|
|
|
294
355
|
return that;
|
|
295
356
|
}
|
|
296
357
|
|
|
297
|
-
//
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
isBrowser() &&
|
|
301
|
-
/[ud]/.test(mcEvent.bubble) &&
|
|
302
|
-
(that as any) instanceof MC
|
|
303
|
-
) {
|
|
304
|
-
setTimeout(() => {
|
|
305
|
-
// bubbling must include 'l' for local, or else no handlers are executed'
|
|
306
|
-
if (mcEvent.bubble.indexOf('l') === -1) {
|
|
307
|
-
mcEvent.bubble += 'l';
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// bubble up towards root
|
|
311
|
-
if (mcEvent.bubble.indexOf('u') > -1) {
|
|
312
|
-
(that as any).parent().forEach((mc: any) => {
|
|
313
|
-
mc instanceof MC ? (mc as any).trigger(mcEvent) : null;
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// bubble down
|
|
318
|
-
if (mcEvent.bubble.indexOf('d') > -1) {
|
|
319
|
-
(that as any).children().forEach((mc: any) => {
|
|
320
|
-
mc instanceof MC ? (mc as any).trigger(mcEvent) : null;
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
}, 0);
|
|
358
|
+
//console.log('bubble', mcEvent);
|
|
359
|
+
if (/[ud]/.test(mcEvent.bubble)) {
|
|
360
|
+
bubbleEvent(that.target, mcEvent);
|
|
324
361
|
}
|
|
325
362
|
}
|
|
326
363
|
}
|
package/src/observables.ts
CHANGED
|
@@ -18,16 +18,15 @@ function isObservableObject(value: any): boolean {
|
|
|
18
18
|
type Callback = (value: any) => void;
|
|
19
19
|
|
|
20
20
|
function getPlaceholders(target: HTMLElement): string[] {
|
|
21
|
-
let placeholders: Set<string> = new Set()
|
|
21
|
+
let placeholders: Set<string> = new Set(),
|
|
22
|
+
regEx = /\{[^\{\}]*\}/g;
|
|
22
23
|
|
|
23
24
|
// scan attributes
|
|
24
25
|
target
|
|
25
26
|
.getAttributeNames()
|
|
26
|
-
.filter((attr) => target.getAttribute(attr)?.match(
|
|
27
|
+
.filter((attr) => target.getAttribute(attr)?.match(regEx)) // extract placeholder(s)
|
|
27
28
|
.forEach((attr) => {
|
|
28
|
-
let phs: Set<string> = new Set(
|
|
29
|
-
target.getAttribute(attr)?.match(/\{[^\{\}]*\}/g)
|
|
30
|
-
);
|
|
29
|
+
let phs: Set<string> = new Set(target.getAttribute(attr)?.match(regEx));
|
|
31
30
|
phs.forEach((placeholder) =>
|
|
32
31
|
placeholders.add(placeholder.replace(/[\{\}]/g, ''))
|
|
33
32
|
);
|
|
@@ -39,12 +38,12 @@ function getPlaceholders(target: HTMLElement): string[] {
|
|
|
39
38
|
return (
|
|
40
39
|
// is text node and has placeholders
|
|
41
40
|
childNode.nodeType === 3 &&
|
|
42
|
-
((childNode as any).nodeValue || '').match(
|
|
41
|
+
((childNode as any).nodeValue || '').match(regEx)
|
|
43
42
|
);
|
|
44
43
|
})
|
|
45
44
|
.forEach((childNode) => {
|
|
46
45
|
((childNode as any).nodeValue || '')
|
|
47
|
-
.match(
|
|
46
|
+
.match(regEx)
|
|
48
47
|
.forEach((placeholder: string) => {
|
|
49
48
|
placeholders.add(placeholder.replace(/[\{\}]/g, ''));
|
|
50
49
|
});
|
|
@@ -150,7 +149,9 @@ class Placeholders extends DC {
|
|
|
150
149
|
function getPlaceholderElements(
|
|
151
150
|
target: HTMLElement | DocumentFragment | ShadowRoot
|
|
152
151
|
): HTMLElement[] {
|
|
153
|
-
let elements: Array<HTMLElement
|
|
152
|
+
let elements: Array<HTMLElement> = (
|
|
153
|
+
target instanceof HTMLElement ? [target] : []
|
|
154
|
+
)
|
|
154
155
|
.concat([...(target.querySelectorAll('*') as unknown as HTMLElement[])])
|
|
155
156
|
.filter((e) => !!getPlaceholders(e as HTMLElement).length);
|
|
156
157
|
return elements as HTMLElement[];
|
|
@@ -159,9 +160,10 @@ function getPlaceholderElements(
|
|
|
159
160
|
function makePlaceHolders(
|
|
160
161
|
element: HTMLElement | DocumentFragment | ShadowRoot
|
|
161
162
|
): void {
|
|
162
|
-
getPlaceholderElements(element).forEach((e) =>
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
getPlaceholderElements(element).forEach((e: HTMLElement) => {
|
|
164
|
+
if ((e as HTMLMcElement)?._mc?._placeholders) return;
|
|
165
|
+
DC.add(e, '_placeholders', new Placeholders(e));
|
|
166
|
+
});
|
|
165
167
|
}
|
|
166
168
|
|
|
167
169
|
export type Observable = {
|
|
@@ -225,14 +227,19 @@ export const observe = (target: LooseObject, propertyName?: string) => {
|
|
|
225
227
|
|
|
226
228
|
bind(target: HTMLElement | DocumentFragment | ShadowRoot) {
|
|
227
229
|
const that = this,
|
|
228
|
-
iso = isObservableObject(that.valueOf())
|
|
229
|
-
bound = (that.constructor as any).bound;
|
|
230
|
+
iso = isObservableObject(that.valueOf());
|
|
230
231
|
//console.log('bind', iso, target);
|
|
231
232
|
|
|
232
233
|
if (iso) {
|
|
233
234
|
makePlaceHolders(target);
|
|
234
235
|
(this.constructor as any).callbacks.push((data: LooseObject) => {
|
|
235
|
-
|
|
236
|
+
// avoid bubbling for speed
|
|
237
|
+
new DC(target as HTMLMcElement)
|
|
238
|
+
.descendants('_placeholders')
|
|
239
|
+
.forEach((e) => {
|
|
240
|
+
if (!e) return;
|
|
241
|
+
e.trigger('data', flattenObject(data));
|
|
242
|
+
});
|
|
236
243
|
});
|
|
237
244
|
that.notify();
|
|
238
245
|
} else {
|
package/src/test.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
HTMLMcElement,
|
|
5
4
|
LooseObject,
|
|
6
5
|
MC,
|
|
7
6
|
DC,
|
|
@@ -48,13 +47,15 @@ class Translator extends DC {
|
|
|
48
47
|
}
|
|
49
48
|
});
|
|
50
49
|
|
|
51
|
-
(that.Translation as Observable).bind(
|
|
50
|
+
(that.Translation as Observable).bind(translationTargetObject);
|
|
52
51
|
|
|
53
52
|
this.target.setAttribute('language', 'en');
|
|
53
|
+
|
|
54
|
+
(this.Language as Observable).notify();
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
oneInit() {
|
|
57
|
-
(this.Language as Observable).notify(); // trigger translation
|
|
58
|
+
//(this.Language as Observable).notify(); // trigger translation
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
onAttributeChanged(ev: McEvent) {
|
|
@@ -74,7 +75,7 @@ defineCE(
|
|
|
74
75
|
// equivalent to custom element registry .define()
|
|
75
76
|
'my-tag',
|
|
76
77
|
class MyTag extends DC {
|
|
77
|
-
#template: string = '{lang.click} {counter}';
|
|
78
|
+
#template: string = '<button>{lang.click} {counter}</button>';
|
|
78
79
|
|
|
79
80
|
#languages = {
|
|
80
81
|
en: {
|
|
@@ -92,6 +93,9 @@ defineCE(
|
|
|
92
93
|
|
|
93
94
|
let that = this; // minifier help
|
|
94
95
|
|
|
96
|
+
// hide
|
|
97
|
+
target.setAttribute('style', 'display:none');
|
|
98
|
+
|
|
95
99
|
// render
|
|
96
100
|
target.innerHTML = this.#template;
|
|
97
101
|
|
|
@@ -114,6 +118,9 @@ defineCE(
|
|
|
114
118
|
|
|
115
119
|
// bind Dom to target
|
|
116
120
|
(that.Dom as Observable).bind(that.target);
|
|
121
|
+
|
|
122
|
+
// show
|
|
123
|
+
setTimeout(() => that.target.removeAttribute('style'), 100);
|
|
117
124
|
}
|
|
118
125
|
|
|
119
126
|
onAttributeChanged(ev: McEvent) {
|
|
@@ -122,7 +129,13 @@ defineCE(
|
|
|
122
129
|
}
|
|
123
130
|
|
|
124
131
|
onClick(ev: McEvent) {
|
|
125
|
-
this
|
|
132
|
+
const that = this,
|
|
133
|
+
c = this.Dom.counter++;
|
|
134
|
+
(ev.data as PointerEvent).stopPropagation();
|
|
135
|
+
(this.target as HTMLElement).classList.remove('clicked');
|
|
136
|
+
(this.target as HTMLElement).classList.add(
|
|
137
|
+
that.Dom.counter > 9 ? 'overClicked' : 'clicked'
|
|
138
|
+
);
|
|
126
139
|
}
|
|
127
140
|
},
|
|
128
141
|
['language']
|
|
@@ -135,13 +148,11 @@ let MyTag: CustomElementConstructor = getCE('my-tag')!,
|
|
|
135
148
|
stress test
|
|
136
149
|
*/
|
|
137
150
|
|
|
138
|
-
/*
|
|
139
151
|
let start = new Date().getTime();
|
|
140
152
|
|
|
141
|
-
// create
|
|
142
|
-
for (let x = 0; x <
|
|
143
|
-
|
|
144
|
-
fragment.append(mt);
|
|
153
|
+
// create 100 elements
|
|
154
|
+
for (let x = 0; x < 100; x++) {
|
|
155
|
+
fragment.append(new MyTag());
|
|
145
156
|
}
|
|
146
157
|
|
|
147
158
|
let end = new Date().getTime();
|
|
@@ -149,8 +160,7 @@ let end = new Date().getTime();
|
|
|
149
160
|
// and put them into the DOM
|
|
150
161
|
document.body.appendChild(fragment);
|
|
151
162
|
|
|
152
|
-
document.querySelectorAll('my-tag').forEach((e) => e.remove());
|
|
153
|
-
*/
|
|
163
|
+
//document.querySelectorAll('my-tag').forEach((e) => e.remove());
|
|
154
164
|
|
|
155
165
|
/*
|
|
156
166
|
console test
|
|
@@ -159,15 +169,13 @@ console test
|
|
|
159
169
|
setTimeout(() => {
|
|
160
170
|
console.clear();
|
|
161
171
|
|
|
162
|
-
/*
|
|
163
172
|
console.log(
|
|
164
|
-
'%c \n\nStress Test:\n\n %cInstancing
|
|
173
|
+
'%c \n\nStress Test:\n\n %cInstancing 100 web components: %c %s ms.',
|
|
165
174
|
'font-weight: bold; color: black;',
|
|
166
175
|
'font-weight: normal;',
|
|
167
176
|
'font-weight: bold; color: blue;',
|
|
168
|
-
|
|
177
|
+
end - start
|
|
169
178
|
);
|
|
170
|
-
*/
|
|
171
179
|
|
|
172
180
|
document.body.appendChild(new MyTag());
|
|
173
181
|
|
|
@@ -184,4 +192,4 @@ setTimeout(() => {
|
|
|
184
192
|
|
|
185
193
|
// will trigger the event on all micro components contained in <my-tag>
|
|
186
194
|
DC.trigger(element, 'doSomething');
|
|
187
|
-
},
|
|
195
|
+
}, 500);
|