@twobirds/microcomponents 0.0.57 → 0.0.58
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 +1 -1
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.min.js +1 -2
- package/dist/MC.ts +1 -5
- 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/test.ts +1 -1
- package/package.json +2 -2
- package/public/MC.js +1 -2
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +1 -2
- package/public/documentation/observables.md +105 -0
- 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/src/MC.ts +1 -5
- 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 +1 -1
- package/public/test/grandparent.js +1 -0
- package/public/test/testform.js +1 -0
- package/public/test.html +1 -1
- package/public/test.js +1 -1
- package/public/test.js.map +1 -1
- package/src/MC.ts +1 -5
- 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.ts +1 -1
- package/webpack.config.js +5 -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
package/public/src/autoloader.ts
CHANGED
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
2
|
|
|
3
|
-
import { getCE } from './elements.js'
|
|
3
|
+
import { getCE } from './elements.js';
|
|
4
4
|
|
|
5
5
|
// set of currently loading scripts
|
|
6
6
|
const loadingScripts: Set<string> = new Set();
|
|
7
7
|
|
|
8
|
-
const _makeLoadData = (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
fileBaseName
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const _loadRequirements = (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
element: any =
|
|
8
|
+
const _makeLoadData = (e: HTMLElement): Array<any> | false => {
|
|
9
|
+
let tagName = e?.localName ?? '',
|
|
10
|
+
isAttribute = e.getAttribute?.('is') || '',
|
|
11
|
+
isUBE = isAttribute ? true : false,
|
|
12
|
+
isCE = tagName.indexOf('-') !== -1 ? true : false,
|
|
13
|
+
ubeSelector = isUBE ? `${tagName}[is=\"${isAttribute}\"]:defined` : '',
|
|
14
|
+
ceSelector = isCE ? tagName + ':defined' : '',
|
|
15
|
+
fileBaseName = isUBE ? isAttribute : isCE ? tagName : '',
|
|
16
|
+
fileName = fileBaseName.length
|
|
17
|
+
? '/' + fileBaseName.split('-').join('/') + '.js'
|
|
18
|
+
: '',
|
|
19
|
+
selector = isUBE ? ubeSelector : isCE ? ceSelector : '';
|
|
20
|
+
// console.log(
|
|
21
|
+
// 'makeLoadData()',
|
|
22
|
+
// tagName,
|
|
23
|
+
// isUBE,
|
|
24
|
+
// isCE,
|
|
25
|
+
// ubeSelector,
|
|
26
|
+
// ceSelector,
|
|
27
|
+
// fileBaseName,
|
|
28
|
+
// ' => ',
|
|
29
|
+
// isUBE || isCE ? [e, selector, fileName] : false
|
|
30
|
+
// );
|
|
31
|
+
return isUBE || isCE ? [e, selector, fileName, fileBaseName] : false;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const _loadRequirements = (
|
|
35
|
+
node: HTMLTemplateElement | HTMLElement
|
|
36
|
+
): Promise<any> => {
|
|
37
|
+
let undefinedSet: Set<any> = new Set(),
|
|
38
|
+
element: any =
|
|
39
|
+
node instanceof HTMLTemplateElement
|
|
40
|
+
? (node as HTMLTemplateElement).content
|
|
41
|
+
: node,
|
|
39
42
|
head = document.head,
|
|
40
43
|
allPromises: Array<any> = [],
|
|
41
44
|
e: HTMLElement;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if ( element instanceof HTMLTemplateElement === false ){
|
|
45
|
+
if (element instanceof HTMLTemplateElement === false) {
|
|
45
46
|
// if node itself is undefined
|
|
46
47
|
let data: any = _makeLoadData(element);
|
|
47
48
|
|
|
48
|
-
if (
|
|
49
|
-
undefinedSet.add(
|
|
49
|
+
if (data && !data[0].matches(data[1])) {
|
|
50
|
+
undefinedSet.add(data);
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
// if some of the childNodes are undefined
|
|
54
|
-
Array.from(
|
|
55
|
+
Array.from(element.childNodes).forEach((node) => {
|
|
55
56
|
let data: any = _makeLoadData(node as HTMLElement);
|
|
56
57
|
|
|
57
|
-
if (
|
|
58
|
-
undefinedSet.add(
|
|
58
|
+
if (data && !data[0].matches(data[1])) {
|
|
59
|
+
undefinedSet.add(data);
|
|
59
60
|
}
|
|
60
61
|
});
|
|
61
62
|
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
undefinedSet.forEach( (data) => {
|
|
65
|
-
if ( !getCE( data[3] ) && !loadingScripts.has( data[2]) ){
|
|
63
|
+
if (!!undefinedSet.size) {
|
|
64
|
+
// there are requirements
|
|
66
65
|
|
|
67
|
-
|
|
66
|
+
undefinedSet.forEach((data) => {
|
|
67
|
+
if (!getCE(data[3]) && !loadingScripts.has(data[2])) {
|
|
68
|
+
loadingScripts.add(data[2]);
|
|
68
69
|
|
|
69
70
|
const se: HTMLScriptElement = document.createElement('script');
|
|
70
71
|
|
|
71
|
-
se.setAttribute(
|
|
72
|
-
se.setAttribute(
|
|
73
|
-
se.setAttribute(
|
|
72
|
+
se.setAttribute('src', data[2]);
|
|
73
|
+
se.setAttribute('blocking', 'render');
|
|
74
|
+
se.setAttribute('type', 'module');
|
|
74
75
|
let s = (data as any)[2];
|
|
75
76
|
se.onload = () => {
|
|
76
77
|
// console.info('loaded', s);
|
|
77
|
-
loadingScripts.delete(
|
|
78
|
+
loadingScripts.delete(s);
|
|
78
79
|
};
|
|
79
80
|
|
|
80
|
-
head.append(
|
|
81
|
+
head.append(se);
|
|
81
82
|
|
|
82
83
|
let e = (data as Array<any>)[0];
|
|
83
84
|
} else {
|
|
84
|
-
return
|
|
85
|
+
return;
|
|
85
86
|
}
|
|
86
87
|
});
|
|
87
|
-
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
return Promise.all(
|
|
91
|
-
}
|
|
90
|
+
return Promise.all(allPromises);
|
|
91
|
+
};
|
|
92
92
|
|
|
93
93
|
/*
|
|
94
94
|
TBD
|
package/public/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
|
+
|
|
@@ -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];
|
package/public/src/test.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.grandparent=e():t.grandparent=e()}(self,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{GrandParent:()=>S});var r=new Function("try {return this===window;}catch(e){ return false;}");let n=new Set;r()&&Object.keys(HTMLElement.prototype).filter((t=>/^on/.test(t))).forEach((t=>n.add(t)));class o{#t;#e=!1;#r=!1;constructor(t,e={},r="l"){this.#t=t,this.data=e,this.bubble=r}get type(){return this.#t}get stopped(){return this.#e}get immediateStopped(){return this.#r}stopPropagation(){this.#e=!0}stopImmediatePropagation(){this.stopPropagation(),this.#r=!0}}var s=new Function("try {return this===window;}catch(e){ return false;}");let c=new Set;function i(t,e){let r=[];return t.forEach((t=>{if(t&&t instanceof HTMLElement){const n=t?._mc;!e&&n?r=r.concat(Object.values(t._mc)):e&&n&&n[e]&&r.push(n[e])}})),r}function a(t,e,r=!0){let n=[];for(;t;){if(t._mc&&(e?e&&t._mc[e]&&n.push(t._mc[e]):n=n.concat(Object.values(t._mc)),r))return n;t=t.parentNode}return n}function l(t){return t&&t instanceof HTMLElement}function u(t,e,r={}){let n=t;if(!n._mc){let e=b?.debug;b.debug=!1,n._mc=new b(t),b.debug=e,delete n._mc._mc}const o=n._mc;return e.length&&!o[e]&&(o[e]=r,t instanceof HTMLElement&&t.setAttribute("_mc","")),r}function d(t,e){if(!e)return;const r=t?._mc||{};r&&r[e]&&delete r[e],!Object.keys(r).length&&t instanceof HTMLElement&&t.hasAttribute("_mc")&&t.removeAttribute("_mc")}function p(t,e,r={},n="l"){let s=t?._mc;if(!s)return;let c=e instanceof o?new o(e.type,e.data,"l"):new o(e,r,"l"),i="string"!=typeof e?e:new o(e,r,n);[...Object.values(s)].forEach((t=>{t?.trigger&&"function"==typeof t?.trigger&&t?.trigger(c)})),/[ud]/.test(i.bubble)&&g(t,i)}function g(t,e){/[ud]/.test(e.bubble)&&setTimeout((()=>{if(-1===e.bubble.indexOf("l")&&(e.bubble+="l"),e.bubble.indexOf("u")>-1){let r=a(t,"",!0)?.[0].target;r&&b.trigger(r,e)}e.bubble.indexOf("d")>-1&&new Set(t._mc.children().map((t=>t?.target))).forEach((t=>{t&&b.trigger(t,e)}))}),0)}s()&&Object.keys(HTMLElement.prototype).filter((t=>/^on/.test(t))).forEach((t=>c.add(t)));class f{#n;constructor(t,e=!1){var r;this.#n=new WeakRef(t||{}),(r=this).constructor!==b&&setTimeout((()=>{r.trigger("Init")}),0),function(t){if(!s()||t.constructor===b)return;const e=t.target;if(e instanceof HTMLElement){let r=t;Object.getOwnPropertyNames(r.constructor.prototype).filter((t=>/^on[A-Z]|one[A-Z]/.test(t)&&"function"==typeof r.constructor.prototype[t])).forEach((n=>{let o=/^one/.test(n),s=n.replace(/^on[e]{0,1}/,""),i=s.toLowerCase();o&&Object.defineProperty(t,"on"+s,{configurable:!0,enumerable:!1,writable:!0,value:t=>{r.constructor.prototype[n].bind(r)(t)}}),c.has("on"+i)&&function(t,e,r,n=!1,o=!1){let s={once:!1};n&&(s.capture=n),o&&(s.once=o),t.addEventListener(e,r,s)}(e,i,(t=>{r.trigger(s,t)}),!1,o)}))}}(this)}get target(){return this.#n.deref()}}class m extends f{_mc={};constructor(t){super(t)}static trigger=p;trigger(t,e={},r="l"){let n=this;if(n.constructor===m||n.constructor===b){let s=t instanceof o?new o(t.type,t.data,"l"):new o(t,e,"l"),c="string"!=typeof t?t:new o(t,e,r);return[...Object.getOwnPropertyNames(n)].forEach((t=>{n[t]?.trigger&&"function"==typeof n[t]?.trigger&&n[t]?.trigger(s)})),void(/[ud]/.test(c.bubble)&&g(n.target,c))}if(n instanceof m||n instanceof b){const n=this,s="string"!=typeof t?t:new o(t,e,r),c="on"+s.type[0].toUpperCase()+s.type.slice(1);if(s.bubble.indexOf("l")>-1&&(s.immediateStopped||"function"!=typeof n[c]||(n[c](s),n.hasOwnProperty(c)&&delete n[c])),s.stopped||"l"===s.bubble)return n;/[ud]/.test(s.bubble)&&g(n.target,s)}}}class b extends f{_mc={};constructor(t,e=!1){super(t)}static add=u;static remove=d;static trigger=p;trigger(t,e={},r){m.prototype.trigger.call(this,t,e,r)}parent(t=""){let e=this.target;return l(e)?a(e.parentNode,t,!0):[]}ancestors(t=""){let e=this?.target;return l(e)?a(this.target.parentNode,t,!1):[]}children(t=""){let e=this?.target;if(!l(e))return[];const r=Math.random().toString().replace(".",""),n='[_mc]:not([temp_id="'+r+'"] [_mc] [_mc])';e.setAttribute("temp_id",r);const o=i([...e.querySelectorAll(n)],t);return e.removeAttribute("temp_id"),o}descendants(t=""){let e=this?.target;return l(e)?i([...e.querySelectorAll("*[_mc]")],t):[]}}new Map;class h extends HTMLElement{constructor(){super()}connectedCallback(){b.trigger(this,"Connected")}disconnectedCallback(){b.trigger(this,"Disconnected")}adoptedCallback(){b.trigger(this,"Adopted")}attributeChangedCallback(t,e,r){b.trigger(this,"AttributeChanged",{name:t,oldValue:e,newValue:r})}}function y(t,e,r=[]){if(customElements.get(t))return void console.warn(`IGNORED: Custom element "${t}" is already defined!`);if(!t.includes("-"))throw new Error('createCustomElement: tagName must contain at least one hyphen ("-").');let n=t.split("-").map((t=>t.charAt(0).toUpperCase()+t.slice(1))).join("");customElements.define(t,function(t,e){return Object.defineProperty(e,"name",{value:t})}(n,class extends h{instance;constructor(t){super();let r=new e(this,t);b.add(this,n,r)}static get observedAttributes(){return r}}))}function w(t){return customElements.get(t)}function _(t,e){return Math.floor(Math.random()*(e-t+1)+t)}y("test-greatgrandchild",class extends b{constructor(t){super(t)}onConnected(){this.updateStyle()}updateStyle(){this.target.setAttribute("style","border-color:rgb("+_(0,255)+","+_(0,255)+","+_(0,255)+")")}});const O=w("test-greatgrandchild");y("test-grandchild",class extends b{constructor(t){super(t)}onConnected(){let t=this;for(let e=0;e<2;e++)t.target.append(new O)}});const E=w("test-grandchild");y("test-child",class extends b{constructor(t){super(t)}onConnected(){let t=this;for(let e=0;e<10;e++)t.target.append(new E)}});const v=w("test-child");y("test-parent",class extends b{constructor(t){super(t)}onConnected(){let t=this;for(let e=0;e<5;e++)t.target.append(new v)}});const j=w("test-parent");y("test-grandparent",class extends b{constructor(t){super(t)}onConnected(){let t=this;for(let e=0;e<5;e++)t.target.append(new j)}});const S=w("test-grandparent");return e})()));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.TestTestform=t():e.TestTestform=t()}(self,(()=>(()=>{"use strict";var e=new Function("try {return this===window;}catch(e){ return false;}");let t=new Set;e()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>t.add(e)));class n{#e;#t=!1;#n=!1;constructor(e,t={},n="l"){this.#e=e,this.data=t,this.bubble=n}get type(){return this.#e}get stopped(){return this.#t}get immediateStopped(){return this.#n}stopPropagation(){this.#t=!0}stopImmediatePropagation(){this.stopPropagation(),this.#n=!0}}var a=new Function("try {return this===window;}catch(e){ return false;}");let l=new Set;function r(e,t){let n=[];return e.forEach((e=>{if(e&&e instanceof HTMLElement){const a=e?._mc;!t&&a?n=n.concat(Object.values(e._mc)):t&&a&&a[t]&&n.push(a[t])}})),n}function o(e,t,n=!0){let a=[];for(;e;){if(e._mc&&(t?t&&e._mc[t]&&a.push(e._mc[t]):a=a.concat(Object.values(e._mc)),n))return a;e=e.parentNode}return a}function i(e){return e&&e instanceof HTMLElement}function s(e,t,n,a=!1,l=!1){let r={once:!1};a&&(r.capture=a),l&&(r.once=l),e.addEventListener(t,n,r)}function c(e,t,n={}){let a=e;if(!a._mc){let t=m?.debug;m.debug=!1,a._mc=new m(e),m.debug=t,delete a._mc._mc}const l=a._mc;return t.length&&!l[t]&&(l[t]=n,e instanceof HTMLElement&&e.setAttribute("_mc","")),n}function u(e,t){if(!t)return;const n=e?._mc||{};n&&n[t]&&delete n[t],!Object.keys(n).length&&e instanceof HTMLElement&&e.hasAttribute("_mc")&&e.removeAttribute("_mc")}function p(e,t,a={},l="l"){let r=e?._mc;if(!r)return;let o=t instanceof n?new n(t.type,t.data,"l"):new n(t,a,"l"),i="string"!=typeof t?t:new n(t,a,l);[...Object.values(r)].forEach((e=>{e?.trigger&&"function"==typeof e?.trigger&&e?.trigger(o)})),/[ud]/.test(i.bubble)&&d(e,i)}function d(e,t){/[ud]/.test(t.bubble)&&setTimeout((()=>{if(-1===t.bubble.indexOf("l")&&(t.bubble+="l"),t.bubble.indexOf("u")>-1){let n=o(e,"",!0)?.[0].target;n&&m.trigger(n,t)}t.bubble.indexOf("d")>-1&&new Set(e._mc.children().map((e=>e?.target))).forEach((e=>{e&&m.trigger(e,t)}))}),0)}a()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>l.add(e)));class b{#a;constructor(e,t=!1){var n;this.#a=new WeakRef(e||{}),(n=this).constructor!==m&&setTimeout((()=>{n.trigger("Init")}),0),function(e){if(!a()||e.constructor===m)return;const t=e.target;if(t instanceof HTMLElement){let n=e;Object.getOwnPropertyNames(n.constructor.prototype).filter((e=>/^on[A-Z]|one[A-Z]/.test(e)&&"function"==typeof n.constructor.prototype[e])).forEach((a=>{let r=/^one/.test(a),o=a.replace(/^on[e]{0,1}/,""),i=o.toLowerCase();r&&Object.defineProperty(e,"on"+o,{configurable:!0,enumerable:!1,writable:!0,value:e=>{n.constructor.prototype[a].bind(n)(e)}}),l.has("on"+i)&&s(t,i,(e=>{n.trigger(o,e)}),!1,r)}))}}(this)}get target(){return this.#a.deref()}}class f extends b{_mc={};constructor(e){super(e)}static trigger=p;trigger(e,t={},a="l"){let l=this;if(l.constructor===f||l.constructor===m){let r=e instanceof n?new n(e.type,e.data,"l"):new n(e,t,"l"),o="string"!=typeof e?e:new n(e,t,a);return[...Object.getOwnPropertyNames(l)].forEach((e=>{l[e]?.trigger&&"function"==typeof l[e]?.trigger&&l[e]?.trigger(r)})),void(/[ud]/.test(o.bubble)&&d(l.target,o))}if(l instanceof f||l instanceof m){const l=this,r="string"!=typeof e?e:new n(e,t,a),o="on"+r.type[0].toUpperCase()+r.type.slice(1);if(r.bubble.indexOf("l")>-1&&(r.immediateStopped||"function"!=typeof l[o]||(l[o](r),l.hasOwnProperty(o)&&delete l[o])),r.stopped||"l"===r.bubble)return l;/[ud]/.test(r.bubble)&&d(l.target,r)}}}class m extends b{_mc={};constructor(e,t=!1){super(e)}static add=c;static remove=u;static trigger=p;trigger(e,t={},n){f.prototype.trigger.call(this,e,t,n)}parent(e=""){let t=this.target;return i(t)?o(t.parentNode,e,!0):[]}ancestors(e=""){let t=this?.target;return i(t)?o(this.target.parentNode,e,!1):[]}children(e=""){let t=this?.target;if(!i(t))return[];const n=Math.random().toString().replace(".",""),a='[_mc]:not([temp_id="'+n+'"] [_mc] [_mc])';t.setAttribute("temp_id",n);const l=r([...t.querySelectorAll(a)],e);return t.removeAttribute("temp_id"),l}descendants(e=""){let t=this?.target;return i(t)?r([...t.querySelectorAll("*[_mc]")],e):[]}}function g(e){let t={};return[...Object.keys(e)].sort().forEach((n=>{var a;(a=e[n])&&a.constructor&&a.constructor===Object?t[n]=g(e[n]):t[n]=e[n]})),t}function h(e,t=!0){let n={};return[...Object.getOwnPropertyNames(e)].forEach((t=>{if(e[t]&&e[t].constructor&&e[t].constructor===Object){const a=h(e[t],!1);for(const e in a)n[t+"."+e]=a[e]}else n[t]=e[t]})),t?g(n):n}function y(e,t){return JSON.stringify(h(e))===JSON.stringify(h(t))}function v(e,t){let n;return()=>{clearTimeout(n),n=setTimeout((function(){e(...arguments)}),t)}}function O(e,t){const n=Object.getOwnPropertyDescriptors(e);for(const[e,a]of Object.entries(n))("get"in a||"set"in a)&&Object.defineProperty(t,e,a)}new Map;class w extends HTMLElement{constructor(){super()}connectedCallback(){m.trigger(this,"Connected")}disconnectedCallback(){m.trigger(this,"Disconnected")}adoptedCallback(){m.trigger(this,"Adopted")}attributeChangedCallback(e,t,n){m.trigger(this,"AttributeChanged",{name:e,oldValue:t,newValue:n})}}function x(e){return null!=e&&"object"==typeof e}function E(e){let t=new Set,n=/\{[^\{\}]*\}/g;return e.getAttributeNames().filter((t=>e.getAttribute(t)?.match(n))).forEach((a=>{new Set(e.getAttribute(a)?.match(n)).forEach((e=>t.add(e.replace(/[\{\}]/g,""))))})),[...e.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(n))).forEach((e=>{(e.nodeValue||"").match(n).forEach((e=>{t.add(e.replace(/[\{\}]/g,""))}))})),[...t].map((e=>e.replace(/[\{\}]/g,"")))}const k=[HTMLInputElement,HTMLSelectElement,HTMLTextAreaElement];class A extends m{data={};oldDisplay="";constructor(e){super(e);let t=this;E(e).forEach((e=>t.data[e]="")),j(t),t.#l(),delete t._mc}#l(){let e=this,t=e.target,n=!1;t.getAttributeNames().filter((e=>t.getAttribute(e)?.match(/\{[^\{\}]*\}/g))).forEach((n=>{let a=new Set(t.getAttribute(n)?.match(/\{[^\{\}]*\}/g));var l;e.data.observe((l=t.getAttribute(n),e=>{let r=l;a.forEach((t=>{r=r.replace(t,e[t.replace(/[\{\}]/g,"")])})),t.setAttribute(n,r)}))})),[...t.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(/\{[^\{\}]*\}/g))).forEach((a=>{n=!0;let l=new Set(a.nodeValue.match(/\{[^\{\}]*\}/g));var r;e.data.observe((r=a.nodeValue,n=>{let o=r;l.forEach((e=>{o=o.replace(e,n[e.replace(/[\{\}]/g,"")])})),Object.keys(n).some((e=>!!n[e]))&&(e.oldDisplay?t.style=e.oldDisplay:t.removeAttribute("style"),delete e.oldDisplay),a.nodeValue=o})),e.oldDisplay=t.getAttribute("style)")||"",n&&!k.includes(t.constructor)&&"FIELDSET"!==t.tagName&&(t.style.display="none")}))}onData(e){let t=this,n={};Object.keys(e.data).forEach((a=>{t.data.hasOwnProperty(a)&&(n[a]=e.data[a])})),JSON.stringify(n)!==JSON.stringify(t.data)&&Object.assign(t.data,n)}}const j=(e,t)=>((t?[t]:[...Object.getOwnPropertyNames(e)]).forEach((t=>{if("_"===t[0]||void 0===e?.[t])return e;let n,a=e[t];if(!a.prototype)switch(typeof a){case"string":n=String;break;case"number":n=Number;break;case"boolean":n=Boolean;break;case"object":n=a instanceof Array?Array:Object;break;default:return}let l=class extends n{#r=!0;constructor(e){super(e),this.constructor.callbacks=[],x(e)&&Object.getOwnPropertyNames(e).forEach((t=>{this[t]=e[t]}))}observe(e){return this.constructor.callbacks.push(e),this}bind(e){const t=this;if(x(t.valueOf())){!function(e){var t;(t=e,(t instanceof HTMLElement?[t]:[]).concat([...t.querySelectorAll("*")]).filter((e=>!!E(e).length)).filter((e=>"STYLE"!==e.tagName))).forEach((e=>{e?._mc?._placeholders||m.add(e,"_placeholders",new A(e))}))}(e);const n=[...e.querySelectorAll("[_mc]")].filter((e=>!!e?._mc?._placeholders)),a=function(e){let t=h(e);n.forEach((e=>{e&&e._mc.trigger("data",t)}))};t.constructor.callbacks.push(a),t.notify()}else console.warn("IGNORED - cannot bind a non-Object to the dom, IS:",typeof t.valueOf(),t);return this}notify(e){let t=this,n=x(t.valueOf())&&t.valueOf()instanceof Array==0?structuredClone(Object.assign({},t)):t.valueOf();return void 0!==e&&(t.#r=e),t.constructor.callbacks.forEach((e=>{e(n)})),t}},r=new l(a);Object.defineProperty(e,t,{enumerable:!0,get(){if(x(r.valueOf())){let e=structuredClone(Object.assign({},r));setTimeout(v((function(){y(structuredClone(Object.assign({},r)),e)||r.notify()}),0),0)}return r},set(e){if(typeof e==typeof r.valueOf())if(x(r.valueOf())&&r.valueOf()instanceof Array==0){let t=structuredClone(Object.assign({},r));r instanceof l==0&&(r=new l(structuredClone(Object.assign({},e))),O(e,r),r.seal()),Object.assign(r,e),setTimeout(v((function(){y(structuredClone(Object.assign({},r)),t)||r.notify()}),0),0)}else{let t=r.valueOf(),n=r.constructor.callbacks;r=new l(e),r.constructor.callbacks=n,e!==t&&r.notify()}else console.warn("IGNORED - cannot change observable types, IS:",typeof r.valueOf(),r,"- CANNOT BECOME:",typeof e)}}),e[t]=a})),e);class S{constructor(e){}}class _ extends S{#o;constructor(e){super(e),this.#o=e}get val(){return new FormData(this.#o.form).get(this.#o.name)}set val(e){[...this.#o.form.querySelectorAll(`input[type="radio"][name="${this.#o.name}"]`)].filter((t=>t.getAttribute("value")===e)).shift().checked=!0}}class T extends S{#o;constructor(e){super(e),this.#o=e}get val(){return this.#o.checked}set val(e){this.#o.checked=e}}class N extends S{#o;constructor(e){super(e),this.#o=e}get val(){return this.#o.value}set val(e){this.#o.value=e}}class C extends S{#o;#i=!1;constructor(e){super(e),this.#o=e,this.#i=e.multiple}get val(){const e=[];return[...this.#o.querySelectorAll("option")].filter((e=>e.selected)).forEach((t=>{e.push(t.value)})),this.#i?e:e.length?e[0]:""}set val(e){e="string"==typeof e?[e]:e,[...this.#o.querySelectorAll("option")].forEach((t=>{e.indexOf(t.value)>-1?t.selected=!0:t.selected=!1}))}}class I extends S{#o;constructor(e){super(e),this.#o=e}get val(){return this.#o.value||""}set val(e){this.#o.value=e}}return function(e,t,n=[]){if(customElements.get(e))return void console.warn(`IGNORED: Custom element "${e}" is already defined!`);if(!e.includes("-"))throw new Error('createCustomElement: tagName must contain at least one hyphen ("-").');let a=e.split("-").map((e=>e.charAt(0).toUpperCase()+e.slice(1))).join("");customElements.define(e,function(e,t){return Object.defineProperty(t,"name",{value:e})}(a,class extends w{instance;constructor(e){super();let n=new t(this,e);m.add(this,a,n)}static get observedAttributes(){return n}}))}("test-testform",class extends m{data;constructor(e){super(e);const t=this;delete t._mc;let n=t.target.attachShadow({mode:"open"});n.innerHTML=`<style>${t.css}</style>${t.template}`,function(e,t,n){let a=(e=>{let t=[...(e||document).querySelectorAll("input,select,textarea")],n={};return t.forEach((e=>{const t=e.getAttribute("name");if(t){let a=!1;switch((e=>e.tagName.toLowerCase())(e)){case"input":switch(e.type){case"radio":a=new _(e);break;case"checkbox":a=new T(e);break;default:a=new N(e)}break;case"select":a=new C(e);break;case"textarea":a=new I(e);break;default:console.warn("handler missing:",t,"for",e.tagName.toLowerCase(),e)}a&&(m.add(e,t,a),Object.defineProperty(n,t,{enumerable:!0,configurable:!0,get:()=>a.val,set:e=>{a.val!==e&&(a.val=e)}}))}})),n})(n);e[t]=Object.assign({},a),j(e,t),O(a,e[t]),[...n.querySelectorAll("input, textarea, select")].forEach((n=>{s(n,"keyup",(n=>{e[t].notify()})),s(n,"change",(n=>{e[t].notify()})),s(n,"select",(n=>{e[t].notify()}))}))}(t,"data",n),t.data.bind(n)}get template(){return'\n <form>\n \x3c!-- sample form to start with --\x3e\n <fieldset>\n <legend>Inputs</legend>\n <label>text</label><input type="text" name="textInput" value="Hallo" /> <strong>2wB: </strong>{textInput}\n <label>color</label><input type="color" name="colorInput" value="" />\n <label>date</label><input type="date" name="dateInput" value="" />\n <label>datetime-local</label><input type="datetime-local" name="dtlInput" value="" />\n <label>email</label><input type="email" name="email" value="" />\n <label>file</label><input type="file" name="fileInput" value="" />\n <label>hidden</label><input type="hidden" name="hiddenInput" value="hiddenVal" />\n <label>month</label><input type="month" name="month" value="" />\n <label>number</label><input type="number" name="number" value="" />\n <label>password</label><input type="password" name="passInput" value="" />\n <label>range</label><input type="range" name="rangeInput" value="" />\n <label>search</label><input type="search" name="searchInput" value="" />\n <label>tel</label><input type="tel" name="telInput" value="" />\n <label>time</label><input type="time" name="timeInput" value="" />\n <label>url</label><input type="url" name="urlInput" value="" />\n <label>week</label><input type="week" name="weekInput" value="" />\n </fieldset>\n\n <fieldset>\n <legend>Selects</legend>\n\n <label>singleSelect</label>\n <select name="singleSelect">\n <option disabled selected value> -- select -- </option>\n <option value="1">Option 1</option>\n <option value="2">Option 2</option>\n <option value="3">Option 3</option>\n <option value="4">Option 4</option>\n </select>\n\n <label>multiSelect</label>\n <select name="multiSelect" multiple="multiple" type="select-multiple">\n <option value="1">Option 1</option>\n <option value="2" selected=true>Option 2</option>\n <option value="3">Option 3</option>\n <option value="4" selected=true>Option 4</option>\n </select>\n\n </fieldset>\n\n <fieldset>\n <legend>Radiobuttons <strong>2wB: </strong><span>{myRadio}</span></legend>\n\n <label>radio1</label><input type="radio" name="myRadio" value="radio1">\n <label>radio2</label><input type="radio" name="myRadio" value="radio2">\n <label>radio3</label><input type="radio" name="myRadio" value="radio3">\n\n </fieldset>\n\n <fieldset>\n <legend>Checkboxes</legend>\n <label>cb1</label><input type="checkbox" name="cb1">\n <label>cb2</label><input type="checkbox" name="cb2">\n <label>cb3</label><input type="checkbox" name="cb3">\n <label>cb4</label><input type="checkbox" name="cb4">\n <label>cb5</label><input type="checkbox" name="cb5">\n\n </fieldset>\n\n <fieldset>\n <legend>TextArea</legend>\n <label>textArea</label>\n <textarea name="textArea">abc</textarea>\n </fieldset>\n\n </form>\n '}get css(){return"\nlegend {\n display: inherit;\n margin: inherit;\n vertical-align: inherit;\n}\n\nlabel {\n display: inline;\n margin-top: 5px;\n margin-left: 5px;\n vertical-align: top;\n width: 10em;\n text-align: right;\n}\n\nlabel::before {\n content: ' ';\n display: block;\n}\n\nform input,\nform select,\nform textarea {\n margin-left: 5px;\n margin-top: 0px;\n display: inline;\n}\n\nform label + textarea {\n display: inline-block;\n margin-top: 3px;\n}\n\nform input + label {\n width: inherit;\n margin-top: 3px;\n text-align: left;\n}\n\nbody > form {\n display: block;\n}\n\nform fieldset {\n border: 1px solid darkslategrey;\n border-radius: 3px;\n margin: 0.5em 0;\n}\n "}}),{}})()));
|
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
|
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
|
}
|
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
|
@@ -424,11 +424,7 @@ function loadit() {
|
|
|
424
424
|
: el.getAttribute('_mc')!.trim().split(' ');
|
|
425
425
|
|
|
426
426
|
load.forEach((elementName) => {
|
|
427
|
-
let fileName: any = elementName.toLowerCase().split('-')
|
|
428
|
-
lastElement = fileName[fileName.length - 1],
|
|
429
|
-
renameLastElement =
|
|
430
|
-
lastElement[0].toUpperCase() + lastElement.slice(1);
|
|
431
|
-
fileName[fileName.length - 1] = renameLastElement;
|
|
427
|
+
let fileName: any = elementName.toLowerCase().split('-');
|
|
432
428
|
fileName = fileName.join('/') + '.js';
|
|
433
429
|
|
|
434
430
|
// autoload web components
|
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');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import { DC, defineCE, Observable,
|
|
2
|
+
import { DC, defineCE, Observable, formValues } from '.././microcomponents.js';
|
|
3
3
|
|
|
4
4
|
defineCE(
|
|
5
5
|
'test-testform',
|
|
@@ -17,15 +17,9 @@ defineCE(
|
|
|
17
17
|
let shadow = (that as DC).target.attachShadow({ mode: 'open' });
|
|
18
18
|
shadow.innerHTML = `<style>${that.css}</style>${that.template}`;
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
formValues(that, 'data', shadow); // create this.data formdata observable
|
|
21
21
|
|
|
22
|
-
(that.data as Observable).bind(shadow); // 1 way bind
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
onConnected() {}
|
|
26
|
-
|
|
27
|
-
oneInit() {
|
|
28
|
-
let that = this;
|
|
22
|
+
(that.data as Observable).bind(shadow); // 1 way bind formdata to the form DOM
|
|
29
23
|
}
|
|
30
24
|
|
|
31
25
|
get template() {
|
package/src/test.ts
CHANGED
package/webpack.config.js
CHANGED
|
@@ -231,13 +231,13 @@ module.exports = [
|
|
|
231
231
|
},
|
|
232
232
|
},
|
|
233
233
|
{
|
|
234
|
-
entry: './build/test/
|
|
234
|
+
entry: './build/test/grandparent.js',
|
|
235
235
|
mode: 'production',
|
|
236
236
|
output: {
|
|
237
237
|
path: path.resolve(__dirname, 'public/test'),
|
|
238
|
-
filename: '
|
|
238
|
+
filename: 'grandparent.js',
|
|
239
239
|
libraryTarget: 'umd',
|
|
240
|
-
library: '
|
|
240
|
+
library: 'grandparent',
|
|
241
241
|
},
|
|
242
242
|
module: {
|
|
243
243
|
rules: [
|
|
@@ -268,11 +268,11 @@ module.exports = [
|
|
|
268
268
|
},
|
|
269
269
|
},
|
|
270
270
|
{
|
|
271
|
-
entry: './build/test/
|
|
271
|
+
entry: './build/test/testform.js',
|
|
272
272
|
mode: 'production',
|
|
273
273
|
output: {
|
|
274
274
|
path: path.resolve(__dirname, 'public/test'),
|
|
275
|
-
filename: '
|
|
275
|
+
filename: 'testform.js',
|
|
276
276
|
libraryTarget: 'umd',
|
|
277
277
|
library: 'TestTestform',
|
|
278
278
|
},
|
package/dist/autoloader.d.ts
DELETED
package/dist/autoloader.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autoloader.d.ts","sourceRoot":"","sources":["../src/autoloader.ts"],"names":[],"mappings":""}
|