@twobirds/microcomponents 0.0.57 → 0.0.59
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/.vscode/settings.json +3 -0
- package/README.md +6 -2
- package/assets/documentation/observables.md +105 -0
- package/assets/test.html +2 -2
- package/dist/MC.d.ts +1 -1
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.min.js +65 -27
- package/dist/MC.ts +132 -39
- package/dist/elements.min.js +1 -1
- package/dist/formValues.d.ts +1 -3
- package/dist/formValues.d.ts.map +1 -1
- package/dist/formValues.ts +23 -24
- package/dist/formvValues.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 +5 -6
- package/dist/selectors.min.js +1 -1
- package/dist/test.ts +18 -2
- package/package.json +3 -3
- package/public/MC.js +65 -27
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +65 -27
- package/public/documentation/observables.md +105 -0
- package/public/elements.min.js +1 -1
- package/public/formValues.js +15 -17
- package/public/formValues.js.map +1 -1
- package/public/formvValues.min.js +1 -1
- package/public/microcomponents.min.js +1 -1
- package/public/observables.js +1 -2
- package/public/observables.js.map +1 -1
- package/public/observables.min.js +1 -1
- package/public/selectors.min.js +1 -1
- package/public/src/MC.ts +132 -39
- package/public/src/autoloader.ts +55 -55
- package/public/src/formValues.ts +23 -24
- package/public/src/observables.ts +5 -6
- package/public/src/test.ts +18 -2
- package/public/test/child.js +15 -0
- package/public/test/child.js.map +1 -0
- package/public/test/grandchild.js +15 -0
- package/public/test/grandchild.js.map +1 -0
- package/public/test/grandparent.js +15 -0
- package/public/test/grandparent.js.map +1 -0
- package/public/test/greatgrandchild.js +29 -0
- package/public/test/greatgrandchild.js.map +1 -0
- package/public/test/parent.js +15 -0
- package/public/test/parent.js.map +1 -0
- package/public/test/testform.js +141 -0
- package/public/test/testform.js.map +1 -0
- package/public/test/testmc.js +10 -0
- package/public/test/testmc.js.map +1 -0
- package/public/test.html +2 -2
- package/public/test.js +5 -2
- package/public/test.js.map +1 -1
- package/src/MC.ts +132 -39
- package/src/formValues.ts +23 -24
- package/src/observables.ts +5 -6
- package/src/test/{Child.ts → child.ts} +3 -3
- package/src/test/{Grandchild.ts → grandchild.ts} +3 -3
- package/src/test/{Grandparent.ts → grandparent.ts} +3 -3
- package/src/test/{Greatgrandchild.ts → greatgrandchild.ts} +1 -1
- package/src/test/{Parent.ts → parent.ts} +4 -4
- package/src/test/{Testform.ts → testform.ts} +3 -9
- package/src/test/testmc.ts +11 -0
- package/src/test.ts +18 -2
- package/webpack.config.js +44 -5
- package/dist/autoloader.d.ts +0 -2
- package/dist/autoloader.d.ts.map +0 -1
- package/dist/autoloader.ts +0 -98
- package/public/assets/highlight.css +0 -99
- package/public/assets/main.js +0 -58
- package/public/assets/search.js +0 -1
- package/public/assets/style.css +0 -1280
- package/public/autoloader.js +0 -53
- package/public/autoloader.js.map +0 -1
- package/public/classes/MC.DC.html +0 -228
- package/public/classes/MC.MC.html +0 -171
- package/public/classes/MC.McBase.html +0 -117
- package/public/classes/MC.McEvent.html +0 -187
- package/public/classes/formValues.FormValues.html +0 -86
- package/public/functions/MC.addListener.html +0 -77
- package/public/functions/MC.autoload.html +0 -69
- package/public/functions/MC.removeListener.html +0 -73
- package/public/functions/elements.defineCE.html +0 -78
- package/public/functions/elements.getCE.html +0 -63
- package/public/functions/observables.observe.html +0 -65
- package/public/functions/selectors._d.html +0 -69
- package/public/functions/selectors._t.html +0 -69
- package/public/index.html +0 -126
- package/public/interfaces/MC.HTMLMcElement.html +0 -3608
- package/public/interfaces/selectors.DSelector.html +0 -1013
- package/public/interfaces/selectors.TSelector.html +0 -712
- package/public/modules/MC.html +0 -80
- package/public/modules/elements.html +0 -62
- package/public/modules/formValues.html +0 -60
- package/public/modules/observables.html +0 -65
- package/public/modules/selectors.html +0 -76
- package/public/modules.html +0 -54
- package/public/test/Grandparent.js +0 -1
- package/public/test/Testform.js +0 -1
- package/public/types/observables.Observable.html +0 -91
- package/public/types/selectors.selection.html +0 -58
- package/public/types/selectors.singleSelector.html +0 -58
- package/src/autoloader.ts +0 -98
- /package/assets/{Grandparent.css → grandparent.css} +0 -0
- /package/public/{Grandparent.css → grandparent.css} +0 -0
- /package/src/test/{Grandparent.css → grandparent.css} +0 -0
- /package/src/test/{Testform.css → testform.css} +0 -0
- /package/src/test/{Testform.html → testform.html} +0 -0
- /package/src/test/{Testform.json → testform.json} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grandparent.js","sourceRoot":"","sources":["../../src/test/grandparent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,QAAQ,CACP,kBAAkB,EAElB,MAAM,eAAgB,SAAQ,EAAE;IAC/B,YAAY,MAAmB;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAED,WAAW;QACV,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAO,EAAE,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;CACD,CACD,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DC, defineCE, getCE } from '.././microcomponents.js';
|
|
2
|
+
function random(min, max) {
|
|
3
|
+
var random = Math.floor(Math.random() * (max - min + 1) + min);
|
|
4
|
+
return random;
|
|
5
|
+
}
|
|
6
|
+
defineCE('test-greatgrandchild', class TestGreatgrandchild extends DC {
|
|
7
|
+
constructor(target) {
|
|
8
|
+
super(target);
|
|
9
|
+
}
|
|
10
|
+
onConnected() {
|
|
11
|
+
let that = this;
|
|
12
|
+
that.updateStyle();
|
|
13
|
+
}
|
|
14
|
+
updateStyle() {
|
|
15
|
+
var that = this;
|
|
16
|
+
function randomBorderColor() {
|
|
17
|
+
return ('rgb(' +
|
|
18
|
+
random(0, 255) +
|
|
19
|
+
',' +
|
|
20
|
+
random(0, 255) +
|
|
21
|
+
',' +
|
|
22
|
+
random(0, 255) +
|
|
23
|
+
')');
|
|
24
|
+
}
|
|
25
|
+
that.target.setAttribute('style', 'border-color:' + randomBorderColor());
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
export const Greatgrandchild = getCE('test-greatgrandchild');
|
|
29
|
+
//# sourceMappingURL=greatgrandchild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"greatgrandchild.js","sourceRoot":"","sources":["../../src/test/greatgrandchild.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAE9D,SAAS,MAAM,CAAC,GAAW,EAAE,GAAW;IACvC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC;AACf,CAAC;AAED,QAAQ,CACP,sBAAsB,EAEtB,MAAM,mBAAoB,SAAQ,EAAE;IACnC,YAAY,MAAmB;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAED,WAAW;QACV,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;IAED,WAAW;QACV,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,SAAS,iBAAiB;YACzB,OAAO,CACN,MAAM;gBACN,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;gBACd,GAAG;gBACH,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;gBACd,GAAG;gBACH,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;gBACd,GAAG,CACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAAC,CAAC;IAC1E,CAAC;CACD,CACD,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DC, defineCE, getCE } from '.././microcomponents.js';
|
|
2
|
+
import { Child } from './child.js';
|
|
3
|
+
defineCE('test-parent', class Parent extends DC {
|
|
4
|
+
constructor(target) {
|
|
5
|
+
super(target);
|
|
6
|
+
}
|
|
7
|
+
onConnected() {
|
|
8
|
+
let that = this;
|
|
9
|
+
for (let x = 0; x < 5; x++) {
|
|
10
|
+
that.target.append(new Child());
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
export const Parent = getCE('test-parent');
|
|
15
|
+
//# sourceMappingURL=parent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent.js","sourceRoot":"","sources":["../../src/test/parent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,QAAQ,CACP,aAAa,EAEb,MAAM,MAAO,SAAQ,EAAE;IACtB,YAAY,MAAmB;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAED,WAAW;QACV,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAM,EAAE,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;CACD,CACD,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { DC, defineCE, formValues } from '.././microcomponents.js';
|
|
3
|
+
defineCE('test-testform', class TestTestForm extends DC {
|
|
4
|
+
data;
|
|
5
|
+
constructor(target) {
|
|
6
|
+
super(target);
|
|
7
|
+
const that = this;
|
|
8
|
+
delete that._mc;
|
|
9
|
+
let shadow = that.target.attachShadow({ mode: 'open' });
|
|
10
|
+
shadow.innerHTML = `<style>${that.css}</style>${that.template}`;
|
|
11
|
+
formValues(that, 'data', shadow);
|
|
12
|
+
that.data.bind(shadow);
|
|
13
|
+
}
|
|
14
|
+
get template() {
|
|
15
|
+
return `
|
|
16
|
+
<form>
|
|
17
|
+
<!-- sample form to start with -->
|
|
18
|
+
<fieldset>
|
|
19
|
+
<legend>Inputs</legend>
|
|
20
|
+
<label>text</label><input type="text" name="textInput" value="Hallo" /> <strong>2wB: </strong>{textInput}
|
|
21
|
+
<label>color</label><input type="color" name="colorInput" value="" />
|
|
22
|
+
<label>date</label><input type="date" name="dateInput" value="" />
|
|
23
|
+
<label>datetime-local</label><input type="datetime-local" name="dtlInput" value="" />
|
|
24
|
+
<label>email</label><input type="email" name="email" value="" />
|
|
25
|
+
<label>file</label><input type="file" name="fileInput" value="" />
|
|
26
|
+
<label>hidden</label><input type="hidden" name="hiddenInput" value="hiddenVal" />
|
|
27
|
+
<label>month</label><input type="month" name="month" value="" />
|
|
28
|
+
<label>number</label><input type="number" name="number" value="" />
|
|
29
|
+
<label>password</label><input type="password" name="passInput" value="" />
|
|
30
|
+
<label>range</label><input type="range" name="rangeInput" value="" />
|
|
31
|
+
<label>search</label><input type="search" name="searchInput" value="" />
|
|
32
|
+
<label>tel</label><input type="tel" name="telInput" value="" />
|
|
33
|
+
<label>time</label><input type="time" name="timeInput" value="" />
|
|
34
|
+
<label>url</label><input type="url" name="urlInput" value="" />
|
|
35
|
+
<label>week</label><input type="week" name="weekInput" value="" />
|
|
36
|
+
</fieldset>
|
|
37
|
+
|
|
38
|
+
<fieldset>
|
|
39
|
+
<legend>Selects</legend>
|
|
40
|
+
|
|
41
|
+
<label>singleSelect</label>
|
|
42
|
+
<select name="singleSelect">
|
|
43
|
+
<option disabled selected value> -- select -- </option>
|
|
44
|
+
<option value="1">Option 1</option>
|
|
45
|
+
<option value="2">Option 2</option>
|
|
46
|
+
<option value="3">Option 3</option>
|
|
47
|
+
<option value="4">Option 4</option>
|
|
48
|
+
</select>
|
|
49
|
+
|
|
50
|
+
<label>multiSelect</label>
|
|
51
|
+
<select name="multiSelect" multiple="multiple" type="select-multiple">
|
|
52
|
+
<option value="1">Option 1</option>
|
|
53
|
+
<option value="2" selected=true>Option 2</option>
|
|
54
|
+
<option value="3">Option 3</option>
|
|
55
|
+
<option value="4" selected=true>Option 4</option>
|
|
56
|
+
</select>
|
|
57
|
+
|
|
58
|
+
</fieldset>
|
|
59
|
+
|
|
60
|
+
<fieldset>
|
|
61
|
+
<legend>Radiobuttons <strong>2wB: </strong><span>{myRadio}</span></legend>
|
|
62
|
+
|
|
63
|
+
<label>radio1</label><input type="radio" name="myRadio" value="radio1">
|
|
64
|
+
<label>radio2</label><input type="radio" name="myRadio" value="radio2">
|
|
65
|
+
<label>radio3</label><input type="radio" name="myRadio" value="radio3">
|
|
66
|
+
|
|
67
|
+
</fieldset>
|
|
68
|
+
|
|
69
|
+
<fieldset>
|
|
70
|
+
<legend>Checkboxes</legend>
|
|
71
|
+
<label>cb1</label><input type="checkbox" name="cb1">
|
|
72
|
+
<label>cb2</label><input type="checkbox" name="cb2">
|
|
73
|
+
<label>cb3</label><input type="checkbox" name="cb3">
|
|
74
|
+
<label>cb4</label><input type="checkbox" name="cb4">
|
|
75
|
+
<label>cb5</label><input type="checkbox" name="cb5">
|
|
76
|
+
|
|
77
|
+
</fieldset>
|
|
78
|
+
|
|
79
|
+
<fieldset>
|
|
80
|
+
<legend>TextArea</legend>
|
|
81
|
+
<label>textArea</label>
|
|
82
|
+
<textarea name="textArea">abc</textarea>
|
|
83
|
+
</fieldset>
|
|
84
|
+
|
|
85
|
+
</form>
|
|
86
|
+
`;
|
|
87
|
+
}
|
|
88
|
+
get css() {
|
|
89
|
+
return `
|
|
90
|
+
legend {
|
|
91
|
+
display: inherit;
|
|
92
|
+
margin: inherit;
|
|
93
|
+
vertical-align: inherit;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
label {
|
|
97
|
+
display: inline;
|
|
98
|
+
margin-top: 5px;
|
|
99
|
+
margin-left: 5px;
|
|
100
|
+
vertical-align: top;
|
|
101
|
+
width: 10em;
|
|
102
|
+
text-align: right;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
label::before {
|
|
106
|
+
content: ' ';
|
|
107
|
+
display: block;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
form input,
|
|
111
|
+
form select,
|
|
112
|
+
form textarea {
|
|
113
|
+
margin-left: 5px;
|
|
114
|
+
margin-top: 0px;
|
|
115
|
+
display: inline;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
form label + textarea {
|
|
119
|
+
display: inline-block;
|
|
120
|
+
margin-top: 3px;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
form input + label {
|
|
124
|
+
width: inherit;
|
|
125
|
+
margin-top: 3px;
|
|
126
|
+
text-align: left;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
body > form {
|
|
130
|
+
display: block;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
form fieldset {
|
|
134
|
+
border: 1px solid darkslategrey;
|
|
135
|
+
border-radius: 3px;
|
|
136
|
+
margin: 0.5em 0;
|
|
137
|
+
}
|
|
138
|
+
`;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=testform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testform.js","sourceRoot":"","sources":["../../src/test/testform.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAc,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE/E,QAAQ,CACP,eAAe,EAEf,MAAM,YAAa,SAAQ,EAAE;IAC5B,IAAI,CAAU;IAEd,YAAY,MAAmB;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,OAAO,IAAI,CAAC,GAAG,CAAC;QAEhB,IAAI,MAAM,GAAI,IAAW,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,GAAG,UAAU,IAAI,CAAC,GAAG,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEhC,IAAI,CAAC,IAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,QAAQ;QACX,OAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuEN,CAAC;IACZ,CAAC;IAED,IAAI,GAAG;QACN,OAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAiDL,CAAC;IACZ,CAAC;CACD,CACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testmc.js","sourceRoot":"","sources":["../../src/test/testmc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,EAAE;IAClC,YAAY,MAAmB;QAC3B,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,OAAO;QACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;CACJ"}
|
package/public/test.html
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
href="MicroComponents.svg"
|
|
12
12
|
/>
|
|
13
13
|
<link href="./my-tag.css" rel="stylesheet" />
|
|
14
|
-
<link href="./
|
|
14
|
+
<link href="./grandparent.css" rel="stylesheet" />
|
|
15
15
|
<script src="./microcomponents.min.js"></script>
|
|
16
16
|
<script>
|
|
17
17
|
Object.assign(window, microcomponents); // make system global, for debugging
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
|
23
23
|
<test-grandparent></test-grandparent>
|
|
24
|
-
<test-testform></test-testform>
|
|
24
|
+
<test-testform _mc="test-testmc"></test-testform>
|
|
25
25
|
Open the debugger, read console, then:<br />
|
|
26
26
|
</body>
|
|
27
27
|
</html>
|
package/public/test.js
CHANGED
|
@@ -63,7 +63,7 @@ defineCE('my-tag', class MyTag extends DC {
|
|
|
63
63
|
}
|
|
64
64
|
}, ['language']);
|
|
65
65
|
let MyTag = getCE('my-tag'), fragment = new DocumentFragment();
|
|
66
|
-
let start = new Date().getTime(), max =
|
|
66
|
+
let start = new Date().getTime(), max = 1000;
|
|
67
67
|
for (let x = 0; x < max; x++) {
|
|
68
68
|
fragment.append(new MyTag());
|
|
69
69
|
}
|
|
@@ -72,7 +72,10 @@ document.body.appendChild(fragment);
|
|
|
72
72
|
setTimeout(() => {
|
|
73
73
|
console.log('%c \n\nStress Test:\n\n %cInstancing %s web components (%s classes): %c %s ms.', 'font-weight: bold; color: black;', 'font-weight: normal;', max, max * 3, 'font-weight: bold; color: blue;', end - start);
|
|
74
74
|
let element = document.querySelector('my-tag');
|
|
75
|
-
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
|
|
75
|
+
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');
|
|
76
|
+
let form = document.querySelector('test-testform');
|
|
77
|
+
let formData = form._mc.TestTestform.data;
|
|
78
|
+
console.log("\n\n%cRight-click this object and store it as a global variable:%c \n\n %O %c %s %c %s %c %s", 'font-weight: bold;', 'font-weight: normal;', formData, 'font-weight: bold;', '\n\nYou can then use e.g. \n\n', 'font-weight: normal;', ' temp0.textInput = "whatever"', 'font-weight: bold;', '\n\nto change the form contents.\n');
|
|
76
79
|
DC.trigger(element, 'doSomething');
|
|
77
80
|
}, 500);
|
|
78
81
|
//# 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":"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
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
|
package/src/MC.ts
CHANGED
|
@@ -111,7 +111,7 @@ function add(target: HTMLElement, key: string, element = {}): any {
|
|
|
111
111
|
if (key.length && !_mc[key]) {
|
|
112
112
|
_mc[key] = element;
|
|
113
113
|
// add attribute if HTMLElement
|
|
114
|
-
if (target instanceof HTMLElement) {
|
|
114
|
+
if (target instanceof HTMLElement && ! target.getAttribute('_mc') ) {
|
|
115
115
|
target.setAttribute('_mc', '');
|
|
116
116
|
}
|
|
117
117
|
}
|
|
@@ -410,50 +410,140 @@ class DC extends McBase {
|
|
|
410
410
|
}
|
|
411
411
|
}
|
|
412
412
|
|
|
413
|
-
export { addListener, removeListener, McBase, MC, DC, McEvent };
|
|
414
|
-
|
|
415
413
|
let observer: MutationObserver | null = null;
|
|
416
|
-
const unresolved = new Map();
|
|
417
414
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
415
|
+
/*
|
|
416
|
+
unresolvedCEs (code below this comment):
|
|
417
|
+
|
|
418
|
+
a repository (a hashmap) of undefined custom elements:
|
|
419
|
+
the name is the tagname of the micro component (like "my-custom-component")
|
|
420
|
+
if they are loading, the value is a script element
|
|
421
|
+
if they are loaded, the entry is deleted and the browser instanciates it automatically
|
|
422
|
+
if they cannot be loaded, the browser will throw an error
|
|
423
|
+
|
|
424
|
+
If the custom element ( defined by its tagname, like "my-custom-component") is not defined, it will be on-demand loaded:
|
|
425
|
+
The file name is assumed to be "/my/custom/component.js"
|
|
426
|
+
The file must define a custom element via the defineCE() function included in the "elements" module.
|
|
427
|
+
This function is a wrapper for customElementRegistry.define(), which you can also use directly in the imported code.
|
|
428
|
+
|
|
429
|
+
In general this behaves like a custom runtime import for custom elements in the browser.
|
|
430
|
+
The only difference is that the micro component is loaded only when needed, and not on page load.
|
|
431
|
+
*/
|
|
432
|
+
|
|
433
|
+
const unresolvedCEs = new Map();
|
|
434
|
+
|
|
435
|
+
/*
|
|
436
|
+
MCs (code below this comment):
|
|
437
|
+
a repository (a hashmap) of micro components:
|
|
438
|
+
the name is the name of the micro component (like "my-mc")
|
|
439
|
+
if they are loading, the value is a script element
|
|
440
|
+
if they are loaded, the value is the micro component class itself
|
|
441
|
+
|
|
442
|
+
This is mostly used for old style progressive enhancement:
|
|
443
|
+
If the micro component ( defined in the HTMLElements "_mc" attribute, like "my-mc") is not defined, it will be on-demand loaded:
|
|
444
|
+
The file name is assumed to be "/my/mc.js"
|
|
445
|
+
The file needs to have a default export, and it should be a class that extends the DC class ( since it is in a HTMLElements attribute )
|
|
446
|
+
|
|
447
|
+
In general this behaves like a custom runtime import for classes in the browser.
|
|
448
|
+
The only difference is that the micro component is loaded only when needed, and not on page load.
|
|
449
|
+
*/
|
|
450
|
+
const MCs = new Map();
|
|
451
|
+
|
|
452
|
+
function loadUndefinedMicroComponents() {
|
|
453
|
+
|
|
454
|
+
// load unresolved custom eleents
|
|
455
|
+
[ ...document.querySelectorAll(':not(:defined)') ] // undefined custom elements
|
|
456
|
+
.filter( (element) => !!element && !document.head.querySelector(`script[${element.tagName.toLowerCase()}]`) )
|
|
421
457
|
.forEach((el) => {
|
|
422
|
-
const
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
load.forEach((elementName) => {
|
|
427
|
-
let fileName: any = elementName.toLowerCase().split('-'), // intentional any
|
|
428
|
-
lastElement = fileName[fileName.length - 1],
|
|
429
|
-
renameLastElement =
|
|
430
|
-
lastElement[0].toUpperCase() + lastElement.slice(1);
|
|
431
|
-
fileName[fileName.length - 1] = renameLastElement;
|
|
432
|
-
fileName = fileName.join('/') + '.js';
|
|
433
|
-
|
|
434
|
-
// autoload web components
|
|
435
|
-
// TBD: _mc components
|
|
436
|
-
if (
|
|
437
|
-
el.tagName.includes('-') &&
|
|
438
|
-
!unresolved.has(el.tagName.toLowerCase())
|
|
439
|
-
) {
|
|
440
|
-
const se: HTMLScriptElement = document.createElement('script');
|
|
458
|
+
const elementName = el.tagName.toLowerCase(),
|
|
459
|
+
fileName: string = '/'+elementName.split('-').join('/')+'.js';
|
|
460
|
+
//console.log('load undefined custom element',el);
|
|
441
461
|
|
|
442
|
-
|
|
462
|
+
const se: HTMLScriptElement = document.createElement('script');
|
|
443
463
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
464
|
+
se.setAttribute('src', fileName);
|
|
465
|
+
se.setAttribute('blocking', 'render');
|
|
466
|
+
se.setAttribute('type', 'module');
|
|
467
|
+
se.setAttribute( elementName, '');
|
|
468
|
+
|
|
469
|
+
se.onerror = () => {
|
|
470
|
+
console.error('could not load Custom Element code from', fileName);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
//console.info('load Custom Element', elementName);
|
|
474
|
+
document.head.append(se);
|
|
452
475
|
|
|
453
|
-
|
|
476
|
+
// instanciation of the micro component will be handled by the browser automatically
|
|
477
|
+
// module code must define the micro component class and add it to the customElementRegistry
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
[ ...document.querySelectorAll('[_mc]:not([_mc=""]') ] // undefined DOM components
|
|
481
|
+
.filter( (element) => !!element )
|
|
482
|
+
.forEach((el) => {
|
|
483
|
+
const toBeLoaded = el.getAttribute('_mc')?.split(' ').filter( m => !!m && !document.head.querySelector(`script[${m}]`) );
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
//console.log('load undefined DOM components',toBeLoaded);
|
|
487
|
+
|
|
488
|
+
toBeLoaded?.forEach( elementName => {
|
|
489
|
+
const se: HTMLScriptElement = document.createElement('script'),
|
|
490
|
+
fileName: string = '/'+elementName.split('-').join('/')+'.js';
|
|
491
|
+
|
|
492
|
+
se.setAttribute('src', fileName);
|
|
493
|
+
se.setAttribute('blocking', 'render');
|
|
494
|
+
se.async = true;
|
|
495
|
+
se.setAttribute('type', 'module');
|
|
496
|
+
se.setAttribute( elementName, '');
|
|
497
|
+
|
|
498
|
+
se.onload = () => {
|
|
499
|
+
// console.info('loaded MC', elementName);
|
|
500
|
+
|
|
501
|
+
// create callback script tag
|
|
502
|
+
setTimeout( function(){
|
|
503
|
+
// create callback script tag
|
|
504
|
+
const se: HTMLScriptElement = document.createElement('script');
|
|
505
|
+
const importFileName = fileName;
|
|
506
|
+
|
|
507
|
+
se.async = true;
|
|
508
|
+
se.setAttribute( 'type', 'module');
|
|
509
|
+
|
|
510
|
+
const code = /*javascript*/`
|
|
511
|
+
import _ from "${importFileName}";
|
|
512
|
+
import {DC} from "./microcomponents.js";
|
|
513
|
+
|
|
514
|
+
//console.log('use importFileName', '${importFileName}');
|
|
515
|
+
// console.log('use elementName', '${elementName}');
|
|
516
|
+
|
|
517
|
+
const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
|
|
518
|
+
|
|
519
|
+
// console.log('elements', elements);
|
|
520
|
+
elements.forEach((element) => {
|
|
521
|
+
// console.log('DC, element,class', DC, element, _);
|
|
522
|
+
DC.add(element, _.name, new _(element));
|
|
523
|
+
element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim());
|
|
524
|
+
});
|
|
525
|
+
setTimeout( () => {
|
|
526
|
+
// console.log('remove callback script tag', '${elementName}');
|
|
527
|
+
document.body.querySelector('script[${elementName}]')?.remove();
|
|
528
|
+
},0);
|
|
529
|
+
`;
|
|
530
|
+
|
|
531
|
+
//console.log('before innerHTML');
|
|
532
|
+
se.innerHTML = code;
|
|
533
|
+
//console.log('after innerHTML');
|
|
534
|
+
//console.log( 'callback script tag', se, code );
|
|
535
|
+
document.body.append(se);
|
|
536
|
+
}, 0);
|
|
537
|
+
|
|
454
538
|
}
|
|
539
|
+
|
|
540
|
+
se.onerror = () => {
|
|
541
|
+
console.error('could not load DOM Component code from', fileName);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
// console.info('load DOM Micro Component', elementName);
|
|
545
|
+
document.head.append(se);
|
|
455
546
|
});
|
|
456
|
-
//console.log(unresolved);
|
|
457
547
|
});
|
|
458
548
|
}
|
|
459
549
|
|
|
@@ -467,12 +557,15 @@ export function autoload(enable: boolean = true): boolean {
|
|
|
467
557
|
}
|
|
468
558
|
|
|
469
559
|
autoloadEnabled = enable;
|
|
470
|
-
observer = new MutationObserver(
|
|
560
|
+
observer = new MutationObserver(loadUndefinedMicroComponents);
|
|
471
561
|
|
|
472
562
|
setTimeout(() => {
|
|
473
563
|
observer!.observe(document.body, { childList: true, subtree: true });
|
|
474
|
-
|
|
564
|
+
loadUndefinedMicroComponents();
|
|
475
565
|
}, 5);
|
|
476
566
|
|
|
477
567
|
return autoloadEnabled;
|
|
478
568
|
}
|
|
569
|
+
|
|
570
|
+
export { addListener, removeListener, McBase, MC, DC, McEvent };
|
|
571
|
+
|
package/src/formValues.ts
CHANGED
|
@@ -202,33 +202,32 @@ const getInputHandlers = (e: HTMLElement | ShadowRoot): LooseObject => {
|
|
|
202
202
|
return handlers;
|
|
203
203
|
};
|
|
204
204
|
|
|
205
|
-
export
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
)
|
|
211
|
-
let handlers = getInputHandlers(dom);
|
|
205
|
+
export function formValues(
|
|
206
|
+
targetObject: LooseObject,
|
|
207
|
+
propertyName: string,
|
|
208
|
+
dom: HTMLElement | ShadowRoot
|
|
209
|
+
) {
|
|
210
|
+
let handlers = getInputHandlers(dom);
|
|
212
211
|
|
|
213
|
-
|
|
212
|
+
targetObject[propertyName] = Object.assign({}, handlers);
|
|
214
213
|
|
|
215
|
-
|
|
214
|
+
observe(targetObject, propertyName);
|
|
216
215
|
|
|
217
|
-
|
|
216
|
+
copyGettersSetters(handlers, targetObject[propertyName]);
|
|
218
217
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
});
|
|
224
|
-
addListener(input as HTMLElement, 'change', (ev: Event) => {
|
|
225
|
-
//console.log('change', ev);
|
|
226
|
-
targetObject[propertyName].notify();
|
|
227
|
-
});
|
|
228
|
-
addListener(input as inputTypes, 'select', (ev: Event) => {
|
|
229
|
-
//console.log('select', ev);
|
|
230
|
-
targetObject[propertyName].notify();
|
|
231
|
-
});
|
|
218
|
+
[...dom.querySelectorAll('input, textarea, select')].forEach((input) => {
|
|
219
|
+
addListener(input as inputTypes, 'keyup', (ev: Event) => {
|
|
220
|
+
//console.log('keyup', ev);
|
|
221
|
+
targetObject[propertyName].notify();
|
|
232
222
|
});
|
|
233
|
-
|
|
223
|
+
addListener(input as HTMLElement, 'change', (ev: Event) => {
|
|
224
|
+
//console.log('change', ev);
|
|
225
|
+
targetObject[propertyName].notify();
|
|
226
|
+
});
|
|
227
|
+
addListener(input as inputTypes, 'select', (ev: Event) => {
|
|
228
|
+
//console.log('select', ev);
|
|
229
|
+
targetObject[propertyName].notify();
|
|
230
|
+
});
|
|
231
|
+
});
|
|
234
232
|
}
|
|
233
|
+
|
package/src/observables.ts
CHANGED
|
@@ -48,14 +48,13 @@ function getPlaceholders(target: HTMLElement): string[] {
|
|
|
48
48
|
});
|
|
49
49
|
});
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
let result: string[] = [...placeholders].map((placeholder) =>
|
|
53
|
-
placeholder.replace(/[\{\}]/g, '')
|
|
54
|
-
);
|
|
55
|
-
|
|
51
|
+
|
|
56
52
|
//console.log('getPlaceholders()', target, result);
|
|
57
53
|
|
|
58
|
-
return
|
|
54
|
+
// extract {} and return result
|
|
55
|
+
return [...placeholders].map((placeholder) =>
|
|
56
|
+
placeholder.replace(/[\{\}]/g, '')
|
|
57
|
+
);
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
const inputs = [HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DC, defineCE, getCE } from '.././microcomponents.js';
|
|
2
|
-
import {
|
|
2
|
+
import { Grandchild } from './grandchild.js';
|
|
3
3
|
defineCE(
|
|
4
4
|
'test-child',
|
|
5
5
|
|
|
@@ -12,10 +12,10 @@ defineCE(
|
|
|
12
12
|
let that = this;
|
|
13
13
|
|
|
14
14
|
for (let x = 0; x < 10; x++) {
|
|
15
|
-
that.target.append(new
|
|
15
|
+
that.target.append(new Grandchild!());
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
);
|
|
20
20
|
|
|
21
|
-
export const
|
|
21
|
+
export const Child = getCE('test-child');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DC, defineCE, getCE } from '.././microcomponents.js';
|
|
2
|
-
import {
|
|
2
|
+
import { Greatgrandchild } from './greatgrandchild.js';
|
|
3
3
|
defineCE(
|
|
4
4
|
'test-grandchild',
|
|
5
5
|
|
|
@@ -12,10 +12,10 @@ defineCE(
|
|
|
12
12
|
let that = this;
|
|
13
13
|
|
|
14
14
|
for (let x = 0; x < 2; x++) {
|
|
15
|
-
that.target.append(new
|
|
15
|
+
that.target.append(new Greatgrandchild!());
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
);
|
|
20
20
|
|
|
21
|
-
export const
|
|
21
|
+
export const Grandchild = getCE('test-grandchild');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DC, defineCE, getCE } from '.././microcomponents.js';
|
|
2
|
-
import {
|
|
2
|
+
import { Parent } from './parent.js';
|
|
3
3
|
defineCE(
|
|
4
4
|
'test-grandparent',
|
|
5
5
|
|
|
@@ -12,10 +12,10 @@ defineCE(
|
|
|
12
12
|
let that = this;
|
|
13
13
|
|
|
14
14
|
for (let x = 0; x < 5; x++) {
|
|
15
|
-
that.target.append(new
|
|
15
|
+
that.target.append(new Parent!());
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
);
|
|
20
20
|
|
|
21
|
-
export const
|
|
21
|
+
export const GrandParent = getCE('test-grandparent');
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { DC, defineCE, getCE } from '.././microcomponents.js';
|
|
2
|
-
import {
|
|
2
|
+
import { Child } from './child.js';
|
|
3
3
|
defineCE(
|
|
4
4
|
'test-parent',
|
|
5
5
|
|
|
6
|
-
class
|
|
6
|
+
class Parent extends DC {
|
|
7
7
|
constructor(target: HTMLElement) {
|
|
8
8
|
super(target);
|
|
9
9
|
}
|
|
@@ -12,10 +12,10 @@ defineCE(
|
|
|
12
12
|
let that = this;
|
|
13
13
|
|
|
14
14
|
for (let x = 0; x < 5; x++) {
|
|
15
|
-
that.target.append(new
|
|
15
|
+
that.target.append(new Child!());
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
);
|
|
20
20
|
|
|
21
|
-
export const
|
|
21
|
+
export const Parent = getCE('test-parent');
|