@twobirds/microcomponents 0.0.81 → 0.0.83
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/dist/MC.d.ts +3 -3
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.js +43 -74
- package/dist/MC.min.js +43 -74
- package/dist/MC.ts +67 -143
- package/dist/elements.d.ts +1 -1
- package/dist/elements.d.ts.map +1 -1
- package/dist/elements.js +16 -2
- package/dist/elements.min.js +1 -1
- package/dist/elements.ts +33 -3
- package/dist/formValues.min.js +1 -1
- package/dist/microcomponents.min.js +1 -1
- package/dist/observables.d.ts.map +1 -1
- package/dist/observables.js +40 -47
- package/dist/observables.min.js +1 -1
- package/dist/observables.ts +54 -59
- package/dist/selectors.d.ts +2 -4
- package/dist/selectors.d.ts.map +1 -1
- package/dist/selectors.js +2 -214
- package/dist/selectors.min.js +1 -1
- package/dist/selectors.ts +2 -367
- package/package.json +6 -5
- package/public/MC.d.ts +3 -3
- package/public/MC.d.ts.map +1 -1
- package/public/MC.js +43 -74
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +43 -74
- package/public/MC.ts +67 -143
- 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 +16 -2
- package/public/elements.js.map +1 -1
- package/public/elements.min.js +1 -1
- package/public/elements.ts +33 -3
- package/public/formValues.min.js +1 -1
- package/public/microcomponents.min.js +1 -1
- package/public/observables.d.ts.map +1 -1
- package/public/observables.js +40 -47
- package/public/observables.js.map +1 -1
- package/public/observables.min.js +1 -1
- package/public/observables.ts +54 -59
- package/public/selectors.d.ts +2 -4
- package/public/selectors.d.ts.map +1 -1
- package/public/selectors.js +2 -214
- package/public/selectors.js.map +1 -1
- package/public/selectors.min.js +1 -1
- package/public/selectors.ts +2 -367
- package/public/src/MC.d.ts +36 -0
- package/public/src/MC.d.ts.map +1 -0
- package/public/src/MC.js +348 -0
- package/public/src/MC.js.map +1 -0
- package/public/src/MC.ts +67 -143
- package/public/src/McEvent.d.ts +15 -0
- package/public/src/McEvent.d.ts.map +1 -0
- package/public/src/McEvent.js +71 -0
- package/public/src/elements.d.ts +5 -0
- package/public/src/elements.d.ts.map +1 -0
- package/public/src/elements.js +62 -0
- package/public/src/elements.js.map +1 -0
- package/public/src/elements.ts +33 -3
- 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/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 +7 -0
- package/public/src/microcomponents.d.ts.map +1 -0
- package/public/src/microcomponents.js +8 -0
- package/public/src/observables.d.ts +11 -0
- package/public/src/observables.d.ts.map +1 -0
- package/public/src/observables.js +242 -0
- package/public/src/observables.js.map +1 -0
- package/public/src/observables.ts +54 -59
- package/public/src/selectors.d.ts +106 -0
- package/public/src/selectors.d.ts.map +1 -0
- package/public/src/selectors.js +759 -0
- package/public/src/selectors.js.map +1 -0
- package/public/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 +21 -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 +155 -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 +79 -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 +3 -3
- package/public/test/MC.d.ts.map +1 -1
- package/public/test/MC.js +43 -74
- package/public/test/MC.min.js +485 -0
- package/public/test/MC.ts +67 -143
- package/public/test/elements.d.ts +1 -1
- package/public/test/elements.d.ts.map +1 -1
- package/public/test/elements.js +16 -2
- package/public/test/elements.min.js +1 -0
- package/public/test/elements.ts +33 -3
- package/public/test/formValues.min.js +1 -0
- package/public/test/grandparent.css +1 -3
- package/public/test/microcomponents.min.js +1 -1
- package/public/test/observables.d.ts.map +1 -1
- package/public/test/observables.js +40 -47
- package/public/test/observables.min.js +1 -0
- package/public/test/observables.ts +54 -59
- package/public/test/selectors.d.ts +2 -4
- package/public/test/selectors.d.ts.map +1 -1
- package/public/test/selectors.js +2 -214
- package/public/test/selectors.min.js +1 -0
- package/public/test/selectors.ts +2 -367
- package/public/test/test/child.ts +21 -0
- package/public/test/test/grandchild.ts +21 -0
- package/public/test/test/grandparent.js +1 -1
- package/public/test/test/grandparent.ts +21 -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 +155 -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.js +0 -2
- 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 +5 -5
- package/public/typedoc/classes/MC.MC.html +5 -5
- package/public/typedoc/classes/MC.McBase.html +4 -3
- package/public/typedoc/classes/MC.McEvent.html +2 -2
- package/public/typedoc/functions/MC.addListener.html +1 -1
- package/public/typedoc/functions/MC.autoload.html +1 -1
- package/public/typedoc/functions/MC.removeListener.html +1 -1
- 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/functions/selectors._d.html +1 -0
- package/public/typedoc/functions/selectors._t.html +1 -0
- package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
- package/public/typedoc/interfaces/selectors.DSelector.html +48 -0
- package/public/typedoc/interfaces/selectors.TSelector.html +34 -0
- package/public/typedoc/modules/MC.html +1 -1
- package/public/typedoc/modules/elements.html +1 -1
- package/public/typedoc/modules/formValues.html +1 -1
- package/public/typedoc/modules/observables.html +1 -1
- package/public/typedoc/modules/selectors.html +7 -0
- package/public/typedoc/modules.html +1 -0
- package/public/typedoc/types/observables.Observable.html +1 -1
- package/public/typedoc/types/selectors.selection.html +1 -0
- package/public/typedoc/types/selectors.singleSelector.html +1 -0
- package/src/MC.ts +67 -143
- package/src/elements.ts +33 -3
- package/src/observables.ts +54 -59
- package/src/selectors.ts +2 -367
- package/src/test/test/testform.ts +7 -3
- 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 +0 -12
- package/tasks.md +36 -0
- package/typedoc.json +1 -1
- package/public/test/MC.js.map +0 -1
- package/public/test/elements.js.map +0 -1
- package/public/test/observables.js.map +0 -1
- package/public/test/selectors.js.map +0 -1
- /package/public/{test → src}/McEvent.js.map +0 -0
- /package/public/{test → src}/formValues.js.map +0 -0
- /package/public/{test → src}/helpers.js.map +0 -0
- /package/public/{test → src}/microcomponents.js.map +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LooseObject,
|
|
3
|
+
DC,
|
|
4
|
+
McEvent,
|
|
5
|
+
defineCE,
|
|
6
|
+
getCE,
|
|
7
|
+
observe,
|
|
8
|
+
Observable,
|
|
9
|
+
} from '../microcomponents.js';
|
|
10
|
+
|
|
11
|
+
class Translator extends DC {
|
|
12
|
+
#translations: LooseObject = {};
|
|
13
|
+
|
|
14
|
+
Language: unknown = 'en';
|
|
15
|
+
Translation: unknown = {};
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
target: HTMLElement | ShadowRoot | DocumentFragment,
|
|
19
|
+
translations: LooseObject,
|
|
20
|
+
translationTargetObject: HTMLElement
|
|
21
|
+
) {
|
|
22
|
+
super(target as HTMLElement);
|
|
23
|
+
let that = this; // minifier help
|
|
24
|
+
|
|
25
|
+
// state
|
|
26
|
+
that.Language = 'en';
|
|
27
|
+
that.Translation = {};
|
|
28
|
+
|
|
29
|
+
observe(that);
|
|
30
|
+
|
|
31
|
+
// setup
|
|
32
|
+
that.#translations = translations;
|
|
33
|
+
|
|
34
|
+
// on language change switch translation object
|
|
35
|
+
(that.Language as Observable).observe((lang) => {
|
|
36
|
+
if (that.#translations.hasOwnProperty(lang)) {
|
|
37
|
+
that.Translation = { lang: that.#translations[lang] }; // set translation
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
(that.Translation as Observable).bind(translationTargetObject);
|
|
42
|
+
|
|
43
|
+
that.target.setAttribute('language', 'en');
|
|
44
|
+
|
|
45
|
+
(that.Language as Observable).notify();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
onAttributeChanged(ev: McEvent) {
|
|
49
|
+
if (!ev.data.newValue) return;
|
|
50
|
+
switch (ev.data.name) {
|
|
51
|
+
case 'language':
|
|
52
|
+
this.Language = ev.data.newValue;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
defineCE(
|
|
59
|
+
// equivalent to custom element registry .define()
|
|
60
|
+
'my-tag',
|
|
61
|
+
class MyTag extends DC {
|
|
62
|
+
#template: string = '<button>{lang.click} {counter}</button>';
|
|
63
|
+
|
|
64
|
+
#languages = {
|
|
65
|
+
en: {
|
|
66
|
+
click: 'click me',
|
|
67
|
+
},
|
|
68
|
+
de: {
|
|
69
|
+
click: 'klick mich',
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
Dom: LooseObject = {};
|
|
74
|
+
|
|
75
|
+
constructor(target: HTMLElement) {
|
|
76
|
+
super(target);
|
|
77
|
+
|
|
78
|
+
let that = this; // minifier help
|
|
79
|
+
|
|
80
|
+
// render
|
|
81
|
+
target.innerHTML = this.#template;
|
|
82
|
+
|
|
83
|
+
// add translator
|
|
84
|
+
DC.add(
|
|
85
|
+
target,
|
|
86
|
+
'translator',
|
|
87
|
+
new Translator(target, that.#languages, target)
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
oneInit(ev: McEvent) {
|
|
92
|
+
let that = this;
|
|
93
|
+
|
|
94
|
+
// state
|
|
95
|
+
that.Dom = { counter: 0 };
|
|
96
|
+
|
|
97
|
+
// state: convert all props defined so far into observables
|
|
98
|
+
observe(that);
|
|
99
|
+
|
|
100
|
+
// bind Dom to target
|
|
101
|
+
(that.Dom as Observable).bind(that.target);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
onClick(ev: McEvent) {
|
|
105
|
+
const that = this,
|
|
106
|
+
c = that.Dom.counter++;
|
|
107
|
+
(ev.data as PointerEvent).stopPropagation();
|
|
108
|
+
(that.target as HTMLElement).classList.remove('clicked');
|
|
109
|
+
(that.target as HTMLElement).classList.add(
|
|
110
|
+
that.Dom.counter > 9 ? 'overClicked' : 'clicked'
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
['language']
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
let MyTag: CustomElementConstructor = getCE('my-tag')!,
|
|
118
|
+
fragment = new DocumentFragment();
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
stress test
|
|
122
|
+
*/
|
|
123
|
+
|
|
124
|
+
let start = new Date().getTime(),
|
|
125
|
+
max = 1000;
|
|
126
|
+
|
|
127
|
+
// create 1000 elements
|
|
128
|
+
for (let x = 0; x < max; x++) {
|
|
129
|
+
fragment.append(new MyTag());
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
let end = new Date().getTime();
|
|
133
|
+
|
|
134
|
+
// and put them into the DOM
|
|
135
|
+
document.body.appendChild(fragment);
|
|
136
|
+
|
|
137
|
+
//document.querySelectorAll('my-tag').forEach((e) => e.remove());
|
|
138
|
+
|
|
139
|
+
/*
|
|
140
|
+
console test
|
|
141
|
+
*/
|
|
142
|
+
|
|
143
|
+
setTimeout(() => {
|
|
144
|
+
// console.clear();
|
|
145
|
+
|
|
146
|
+
console.log(
|
|
147
|
+
'%c \n\nStress Test:\n\n %cInstancing %s web components (%s classes): %c %s ms.',
|
|
148
|
+
'font-weight: bold; color: black;',
|
|
149
|
+
'font-weight: normal;',
|
|
150
|
+
max,
|
|
151
|
+
max * 3,
|
|
152
|
+
'font-weight: bold; color: blue;',
|
|
153
|
+
end - start
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
//document.body.appendChild(new MyTag());
|
|
157
|
+
|
|
158
|
+
let element = document.querySelector('my-tag');
|
|
159
|
+
|
|
160
|
+
console.log(
|
|
161
|
+
"\n\n%cInspect this tag:%c \n( ...to see the inner structure in the '._mc' property )\n\n %O %c %s",
|
|
162
|
+
'font-weight: bold;',
|
|
163
|
+
'font-weight: normal;',
|
|
164
|
+
element,
|
|
165
|
+
'font-weight: bold;',
|
|
166
|
+
'\n\nLook up code in the debugger: test.js\n'
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
let form = ( document.querySelector('test-testform') as any);
|
|
170
|
+
let formInstance = form._mc.TestTestform;
|
|
171
|
+
|
|
172
|
+
(window as any).form = formInstance;
|
|
173
|
+
console.log(
|
|
174
|
+
"\n\n%cAttached a global variable 'form':%c \n\n %O %c %s %c %s %c %s",
|
|
175
|
+
'font-weight: bold;',
|
|
176
|
+
'font-weight: normal;',
|
|
177
|
+
formInstance,
|
|
178
|
+
'font-weight: bold;',
|
|
179
|
+
'\n\nYou can use it to change input values, e.g. \n\n',
|
|
180
|
+
'font-weight: normal;',
|
|
181
|
+
' form.data.textInput="other value"',
|
|
182
|
+
'font-weight: bold;',
|
|
183
|
+
'\n\nChanges will be reflected in the form contents, same as vice versa.\n'
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
// will trigger the event on all micro components contained in <my-tag>
|
|
187
|
+
DC.trigger(element, 'doSomething');
|
|
188
|
+
}, 1000);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
legend {
|
|
2
|
+
display: inherit;
|
|
3
|
+
margin: inherit;
|
|
4
|
+
vertical-align: inherit;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
label {
|
|
8
|
+
display: inline;
|
|
9
|
+
margin-top: 5px;
|
|
10
|
+
margin-left: 5px;
|
|
11
|
+
vertical-align: top;
|
|
12
|
+
width: 10em;
|
|
13
|
+
text-align: right;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
label::before {
|
|
17
|
+
content: ' ';
|
|
18
|
+
display: block;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
form input,
|
|
22
|
+
form select,
|
|
23
|
+
form textarea {
|
|
24
|
+
margin-left: 5px;
|
|
25
|
+
margin-top: 0px;
|
|
26
|
+
display: inline;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
form label + textarea {
|
|
30
|
+
display: inline-block;
|
|
31
|
+
margin-top: 3px;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
form input + label {
|
|
35
|
+
width: inherit;
|
|
36
|
+
margin-top: 3px;
|
|
37
|
+
text-align: left;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
body > form {
|
|
41
|
+
display: block;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
form fieldset {
|
|
45
|
+
border: 1px solid darkslategrey;
|
|
46
|
+
border-radius: 3px;
|
|
47
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!-- test form -->
|
|
2
|
+
<fieldset>
|
|
3
|
+
<legend>Inputs</legend>
|
|
4
|
+
<label>text</label><input type="text" name="textInput" value="" /> <strong>2wB: </strong>{textInput}
|
|
5
|
+
<label>color</label><input type="color" name="colorInput" value="" />
|
|
6
|
+
<label>date</label><input type="date" name="dateInput" value="" />
|
|
7
|
+
<label>datetime-local</label><input type="datetime-local" name="dtlInput" value="" />
|
|
8
|
+
<label>email</label><input type="email" name="email" value="" />
|
|
9
|
+
<label>file</label><input type="file" name="fileInput" value="" />
|
|
10
|
+
<label>hidden</label><input type="hidden" name="hiddenInput" value="hiddenVal" />
|
|
11
|
+
<label>month</label><input type="month" name="month" value="" />
|
|
12
|
+
<label>number</label><input type="number" name="number" value="" />
|
|
13
|
+
<label>password</label><input type="password" name="passInput" value="" />
|
|
14
|
+
<label>range</label><input type="range" name="rangeInput" value="" />
|
|
15
|
+
<label>search</label><input type="search" name="searchInput" value="" />
|
|
16
|
+
<label>tel</label><input type="tel" name="telInput" value="" />
|
|
17
|
+
<label>time</label><input type="time" name="timeInput" value="" />
|
|
18
|
+
<label>url</label><input type="url" name="urlInput" value="" />
|
|
19
|
+
<label>week</label><input type="week" name="weekInput" value="" />
|
|
20
|
+
</fieldset>
|
|
21
|
+
<fieldset>
|
|
22
|
+
<legend>Selects</legend>
|
|
23
|
+
<label>singleSelect</label>
|
|
24
|
+
<select name="singleSelect">
|
|
25
|
+
<option disabled selected value> -- select -- </option>
|
|
26
|
+
<option value="1">Option 1</option>
|
|
27
|
+
<option value="2">Option 2</option>
|
|
28
|
+
<option value="3">Option 3</option>
|
|
29
|
+
<option value="4">Option 4</option>
|
|
30
|
+
</select>
|
|
31
|
+
<label>multiSelect</label>
|
|
32
|
+
<select name="multiSelect" multiple="multiple" type="select-multiple">
|
|
33
|
+
<option value="1">Option 1</option>
|
|
34
|
+
<option value="2" selected=true>Option 2</option>
|
|
35
|
+
<option value="3">Option 3</option>
|
|
36
|
+
<option value="4" selected=true>Option 4</option>
|
|
37
|
+
</select>
|
|
38
|
+
</fieldset>
|
|
39
|
+
<fieldset>
|
|
40
|
+
<legend>Radiobuttons <strong>2wB: </strong>{myRadio}</legend>
|
|
41
|
+
<label>radio1</label><input type="radio" name="myRadio" value="radio1">
|
|
42
|
+
<label>radio2</label><input type="radio" name="myRadio" value="radio2">
|
|
43
|
+
<label>radio3</label><input type="radio" name="myRadio" value="radio3">
|
|
44
|
+
</fieldset>
|
|
45
|
+
<fieldset>
|
|
46
|
+
<legend>Checkboxes</legend>
|
|
47
|
+
<label>cb1</label><input type="checkbox" name="cb1">
|
|
48
|
+
<label>cb2</label><input type="checkbox" name="cb2">
|
|
49
|
+
<label>cb3</label><input type="checkbox" name="cb3">
|
|
50
|
+
<label>cb4</label><input type="checkbox" name="cb4">
|
|
51
|
+
<label>cb5</label><input type="checkbox" name="cb5">
|
|
52
|
+
</fieldset>
|
|
53
|
+
<fieldset>
|
|
54
|
+
<legend>TextArea</legend>
|
|
55
|
+
<label>textArea</label><textarea name="textArea"></textarea>
|
|
56
|
+
</fieldset>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"textInput":"Hallo Welt",
|
|
3
|
+
"colorInput":"#eaf8f8",
|
|
4
|
+
"dateInput":"",
|
|
5
|
+
"dtlInput":"",
|
|
6
|
+
"email":"",
|
|
7
|
+
"hiddenInput":"",
|
|
8
|
+
"hiddenVal":"",
|
|
9
|
+
"month":"",
|
|
10
|
+
"number":"",
|
|
11
|
+
"passInput":"",
|
|
12
|
+
"rangeInput":"30",
|
|
13
|
+
"searchInput":"",
|
|
14
|
+
"telInput":"",
|
|
15
|
+
"timeInput":"",
|
|
16
|
+
"urlInput":"",
|
|
17
|
+
"weekInput":"",
|
|
18
|
+
"myRadio":"radio3",
|
|
19
|
+
"cb1":true,
|
|
20
|
+
"cb2":false,
|
|
21
|
+
"cb3":true,
|
|
22
|
+
"cb4":false,
|
|
23
|
+
"cb5":false,
|
|
24
|
+
"singleSelect":"",
|
|
25
|
+
"multiSelect":["2","4"],
|
|
26
|
+
"textArea":"This is some example\rtext..."
|
|
27
|
+
}
|
package/public/test/MC.d.ts
CHANGED
|
@@ -7,20 +7,20 @@ declare function addListener(domNode: Node, eventName: string, handler: EventLis
|
|
|
7
7
|
declare function removeListener(domNode: Node, eventName: string, handler: EventListenerOrEventListenerObject | null): void;
|
|
8
8
|
declare function trigger(target: HTMLElement, ev: McEvent | string, data?: any, bubble?: string): void;
|
|
9
9
|
declare class McBase {
|
|
10
|
-
|
|
10
|
+
private _target;
|
|
11
|
+
private __mc;
|
|
11
12
|
constructor(target?: {
|
|
12
13
|
[key: string]: any;
|
|
13
14
|
}, debug?: boolean);
|
|
14
15
|
get target(): any;
|
|
16
|
+
get _mc(): any;
|
|
15
17
|
}
|
|
16
18
|
declare class MC extends McBase {
|
|
17
|
-
_mc?: LooseObject;
|
|
18
19
|
constructor(target?: any);
|
|
19
20
|
static trigger: typeof trigger;
|
|
20
21
|
trigger(ev: McEvent | string, data?: any, bubble?: string): this | undefined;
|
|
21
22
|
}
|
|
22
23
|
declare class DC extends McBase {
|
|
23
|
-
_mc?: LooseObject;
|
|
24
24
|
constructor(target: HTMLElement, debug?: boolean);
|
|
25
25
|
static add: Function;
|
|
26
26
|
static remove: Function;
|
package/public/test/MC.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MC.d.ts","sourceRoot":"","sources":["../src/MC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAevC,MAAM,WAAW,aAAc,SAAQ,WAAW;IACjD,GAAG,EAAE,WAAW,CAAC;CACjB;AA8CD,iBAAS,WAAW,CACnB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,EAClD,OAAO,GAAE,OAAe,EACxB,IAAI,GAAE,OAAe,QAarB;AAED,iBAAS,cAAc,CACtB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,QAGlD;AAmDD,iBAAS,OAAO,CACf,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,OAAO,GAAG,MAAM,EACpB,IAAI,GAAE,GAAQ,EACd,MAAM,GAAE,MAAY,QAwBpB;AAiGD,cAAM,MAAM
|
|
1
|
+
{"version":3,"file":"MC.d.ts","sourceRoot":"","sources":["../src/MC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAevC,MAAM,WAAW,aAAc,SAAQ,WAAW;IACjD,GAAG,EAAE,WAAW,CAAC;CACjB;AA8CD,iBAAS,WAAW,CACnB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,EAClD,OAAO,GAAE,OAAe,EACxB,IAAI,GAAE,OAAe,QAarB;AAED,iBAAS,cAAc,CACtB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,QAGlD;AAmDD,iBAAS,OAAO,CACf,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,OAAO,GAAG,MAAM,EACpB,IAAI,GAAE,GAAQ,EACd,MAAM,GAAE,MAAY,QAwBpB;AAiGD,cAAM,MAAM;IACX,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,IAAI,CAAmB;gBAEnB,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,KAAK,GAAE,OAAe;IAWnE,IAAI,MAAM,IAAI,GAAG,CAEhB;IAED,IAAI,GAAG,IAAI,GAAG,CAEb;CACD;AAED,cAAM,EAAG,SAAQ,MAAM;gBACV,MAAM,CAAC,EAAE,GAAG;IAIxB,MAAM,CAAC,OAAO,iBAAW;IAEzB,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAE,GAAQ,EAAE,MAAM,GAAE,MAAY;CAmElE;AAED,cAAM,EAAG,SAAQ,MAAM;gBACV,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,OAAe;IAIvD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAO;IAC3B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAU;IACjC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAW;IAEnC,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAE,GAAQ,EAAE,MAAM,CAAC,EAAE,MAAM;IAI7D,MAAM,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAMlC,SAAS,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAMrC,QAAQ,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAYpC,WAAW,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;CAMvC;AAgGD,iBAAS,QAAQ,CAAC,MAAM,GAAE,OAAc,GAAG,OAAO,CAmBjD;AAID,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/public/test/MC.js
CHANGED
|
@@ -166,19 +166,22 @@ function bubbleEvent(target, ev) {
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
class McBase {
|
|
169
|
-
|
|
169
|
+
_target;
|
|
170
|
+
__mc = {};
|
|
170
171
|
constructor(target, debug = false) {
|
|
171
172
|
let that = this, element = that;
|
|
172
|
-
this
|
|
173
|
+
this._target = new WeakRef(target || {});
|
|
173
174
|
init(element);
|
|
174
175
|
autoAttachListeners(element);
|
|
175
176
|
}
|
|
176
177
|
get target() {
|
|
177
|
-
return this
|
|
178
|
+
return this._target.deref();
|
|
179
|
+
}
|
|
180
|
+
get _mc() {
|
|
181
|
+
return this.__mc;
|
|
178
182
|
}
|
|
179
183
|
}
|
|
180
184
|
class MC extends McBase {
|
|
181
|
-
_mc = {};
|
|
182
185
|
constructor(target) {
|
|
183
186
|
super(target);
|
|
184
187
|
}
|
|
@@ -225,7 +228,6 @@ class MC extends McBase {
|
|
|
225
228
|
}
|
|
226
229
|
}
|
|
227
230
|
class DC extends McBase {
|
|
228
|
-
_mc = {};
|
|
229
231
|
constructor(target, debug = false) {
|
|
230
232
|
super(target);
|
|
231
233
|
}
|
|
@@ -267,93 +269,60 @@ class DC extends McBase {
|
|
|
267
269
|
return getMicroComponents([...myDomElements], search);
|
|
268
270
|
}
|
|
269
271
|
}
|
|
270
|
-
const
|
|
271
|
-
const MCs = new Map();
|
|
272
|
+
const loadingMCs = new Set();
|
|
272
273
|
function makeLoadScript(element) {
|
|
274
|
+
if (loadingMCs.has(element))
|
|
275
|
+
return;
|
|
276
|
+
loadingMCs.add(element);
|
|
273
277
|
const fileName = './' + element.split('-').join('/') + '.js';
|
|
274
278
|
const se = document.createElement('script');
|
|
275
279
|
se.setAttribute('src', fileName);
|
|
276
280
|
se.setAttribute('blocking', 'render');
|
|
277
281
|
se.async = true;
|
|
278
282
|
se.setAttribute('type', 'module');
|
|
279
|
-
se.setAttribute('name', element);
|
|
283
|
+
se.setAttribute('data-name', element);
|
|
280
284
|
se.setAttribute('loading', '');
|
|
285
|
+
const loadedPromise = customElements.whenDefined(element);
|
|
286
|
+
loadedPromise.then(() => {
|
|
287
|
+
const elements = Array
|
|
288
|
+
.from(document.querySelectorAll(`[_mc*="${element}"]`))
|
|
289
|
+
.filter(element => element instanceof HTMLElement);
|
|
290
|
+
if (elements.length === 0)
|
|
291
|
+
return;
|
|
292
|
+
const klass = customElements.get(element);
|
|
293
|
+
elements.forEach((node) => {
|
|
294
|
+
DC.add(node, klass.name, new klass(node));
|
|
295
|
+
const new_mc = node
|
|
296
|
+
.getAttribute('_mc')
|
|
297
|
+
.split(' ')
|
|
298
|
+
.filter((name) => name !== element && name !== '')
|
|
299
|
+
.join(' ');
|
|
300
|
+
node.setAttribute('_mc', new_mc);
|
|
301
|
+
});
|
|
302
|
+
document.head.querySelector('script[data-name="${elementName}]"')?.remove();
|
|
303
|
+
});
|
|
281
304
|
addListener(se, 'load', (ev) => {
|
|
282
|
-
|
|
283
|
-
se.setAttribute('loaded', '');
|
|
305
|
+
loadingMCs.delete(element);
|
|
284
306
|
});
|
|
285
307
|
addListener(se, 'error', (ev) => {
|
|
286
|
-
console.error('could not load
|
|
308
|
+
console.error('could not load MC code from', fileName);
|
|
287
309
|
});
|
|
288
|
-
|
|
310
|
+
document.head.append(se);
|
|
289
311
|
}
|
|
290
|
-
function
|
|
291
|
-
setTimeout(function () {
|
|
292
|
-
const importFileName = script.getAttribute('src');
|
|
293
|
-
const elementName = script.getAttribute('name');
|
|
294
|
-
const se = document.createElement('script');
|
|
295
|
-
se.async = true;
|
|
296
|
-
se.setAttribute('type', 'module');
|
|
297
|
-
const code = `
|
|
298
|
-
|
|
299
|
-
import _ from "${importFileName}";
|
|
300
|
-
import { DC } from "./microcomponents.js";
|
|
301
|
-
|
|
302
|
-
const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
|
|
303
|
-
|
|
304
|
-
elements.forEach((element) => {
|
|
305
|
-
// add class to MCs repository
|
|
306
|
-
autoload.state.MCs.set( '${elementName}', _ );
|
|
307
|
-
// add instance to HTMLElement
|
|
308
|
-
DC.add(element, _.name, new _(element));
|
|
309
|
-
// remove instance name from elements "_mc" attribute
|
|
310
|
-
element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim());
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
setTimeout( () => {
|
|
314
|
-
document.body.querySelector('script[name="${elementName}]"')?.remove();
|
|
315
|
-
},0);
|
|
316
|
-
|
|
317
|
-
`;
|
|
318
|
-
se.innerHTML = code;
|
|
319
|
-
document.body.append(se);
|
|
320
|
-
}, 0);
|
|
321
|
-
}
|
|
322
|
-
function loadUndefinedMicroComponents() {
|
|
312
|
+
function loadUndefinedMCs() {
|
|
323
313
|
[...document.querySelectorAll(':not(:defined)')]
|
|
324
314
|
.filter((element) => !!element
|
|
325
315
|
&& !customElements.get(element.tagName.toLowerCase())
|
|
326
|
-
&& !
|
|
316
|
+
&& !loadingMCs.has(element.tagName.toLowerCase()))
|
|
327
317
|
.forEach((el) => {
|
|
328
|
-
|
|
329
|
-
const se = makeLoadScript(elementName);
|
|
330
|
-
addListener(se, 'load', () => {
|
|
331
|
-
CEs.set(elementName, customElements.get(el.tagName.toLowerCase()));
|
|
332
|
-
});
|
|
333
|
-
CEs.set(elementName, 'loading');
|
|
334
|
-
document.head.append(se);
|
|
318
|
+
makeLoadScript(el.tagName.toLowerCase());
|
|
335
319
|
});
|
|
336
320
|
[...document.querySelectorAll('[_mc]:not([_mc=""]')]
|
|
337
321
|
.filter((element) => !!element)
|
|
338
322
|
.forEach((el) => {
|
|
339
|
-
const
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
const se = makeLoadScript(elementName);
|
|
343
|
-
addListener(se, 'load', () => onLoadCallback(document.head.querySelector(`script[name="${elementName}"]`)));
|
|
344
|
-
MCs.set(elementName, 'loading');
|
|
345
|
-
document.head.append(se);
|
|
346
|
-
});
|
|
347
|
-
const elementsAlreadyLoaded = elements.filter(m => MCs.has(m) && !MCs.get(m).length);
|
|
348
|
-
elementsAlreadyLoaded?.forEach(elementName => {
|
|
349
|
-
setTimeout(() => {
|
|
350
|
-
DC.add(el, elementName, new (autoload.state.MCs.get(elementName))(el));
|
|
351
|
-
const newAttribute = el.getAttribute('_mc')
|
|
352
|
-
.replace('${elementName}', '')
|
|
353
|
-
.replace(/\w\w/g, ' ')
|
|
354
|
-
.trim() || '_mc';
|
|
355
|
-
el.setAttribute('_mc');
|
|
356
|
-
}, 5);
|
|
323
|
+
const _mc = el.getAttribute('_mc')?.split(' ').filter(name => name !== '');
|
|
324
|
+
_mc?.forEach(dc => {
|
|
325
|
+
makeLoadScript(dc);
|
|
357
326
|
});
|
|
358
327
|
});
|
|
359
328
|
}
|
|
@@ -366,14 +335,14 @@ function autoload(enable = true) {
|
|
|
366
335
|
return autoloadEnabled;
|
|
367
336
|
}
|
|
368
337
|
autoloadEnabled = enable;
|
|
369
|
-
observer = new MutationObserver(
|
|
338
|
+
observer = new MutationObserver(loadUndefinedMCs);
|
|
370
339
|
setTimeout(() => {
|
|
371
340
|
observer.observe(document.body, { childList: true, subtree: true });
|
|
372
|
-
|
|
341
|
+
loadUndefinedMCs();
|
|
373
342
|
}, 5);
|
|
374
343
|
window.autoload = window.autoload || autoload;
|
|
375
344
|
return autoloadEnabled;
|
|
376
345
|
}
|
|
377
|
-
autoload.state = {
|
|
346
|
+
autoload.state = { loadingMCs };
|
|
378
347
|
export { addListener, removeListener, McBase, MC, DC, McEvent, autoload };
|
|
379
348
|
//# sourceMappingURL=MC.js.map
|