@twobirds/microcomponents 0.0.59 → 0.0.61
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/dist/MC.d.ts.map +1 -1
- package/dist/MC.min.js +72 -51
- package/dist/MC.ts +102 -75
- package/dist/elements.min.js +1 -1
- package/dist/formvValues.min.js +1 -1
- package/dist/microcomponents.min.js +1 -1
- package/dist/observables.min.js +1 -1
- package/dist/selectors.min.js +1 -1
- package/package.json +1 -1
- package/public/MC.js +72 -51
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +72 -51
- package/public/elements.min.js +1 -1
- package/public/formvValues.min.js +1 -1
- package/public/microcomponents.min.js +1 -1
- package/public/observables.min.js +1 -1
- package/public/selectors.min.js +1 -1
- package/public/src/MC.ts +102 -75
- package/src/MC.ts +102 -75
package/dist/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;;gBAGC,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,KAAK,GAAE,OAAe;IAWnE,IAAI,MAAM,IAAI,GAAG,CAEhB;CACD;AAED,cAAM,EAAG,SAAQ,MAAM;IACtB,GAAG,CAAC,EAAE,WAAW,CAAM;gBAEX,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;IACtB,GAAG,CAAC,EAAE,WAAW,CAAM;gBAEX,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;
|
|
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;;gBAGC,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,KAAK,GAAE,OAAe;IAWnE,IAAI,MAAM,IAAI,GAAG,CAEhB;CACD;AAED,cAAM,EAAG,SAAQ,MAAM;IACtB,GAAG,CAAC,EAAE,WAAW,CAAM;gBAEX,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;IACtB,GAAG,CAAC,EAAE,WAAW,CAAM;gBAEX,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;AAsKD,wBAAgB,QAAQ,CAAC,MAAM,GAAE,OAAc,GAAG,OAAO,CAgBxD;AAID,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/MC.min.js
CHANGED
|
@@ -400,73 +400,93 @@ class DC extends McBase {
|
|
|
400
400
|
return MC_getMicroComponents([...myDomElements], search);
|
|
401
401
|
}
|
|
402
402
|
}
|
|
403
|
-
|
|
404
|
-
const unresolvedCEs = new Map();
|
|
403
|
+
const CEs = new Map();
|
|
405
404
|
const MCs = new Map();
|
|
406
|
-
function
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
405
|
+
function makeLoadScript(element) {
|
|
406
|
+
const fileName = '/' + element.split('-').join('/') + '.js';
|
|
407
|
+
const se = document.createElement('script');
|
|
408
|
+
se.setAttribute('src', fileName);
|
|
409
|
+
se.setAttribute('blocking', 'render');
|
|
410
|
+
se.async = true;
|
|
411
|
+
se.setAttribute('type', 'module');
|
|
412
|
+
se.setAttribute('name', element);
|
|
413
|
+
se.setAttribute('loading', '');
|
|
414
|
+
addListener(se, 'load', (ev) => {
|
|
415
|
+
se.removeAttribute('loading');
|
|
416
|
+
se.setAttribute('loaded', '');
|
|
417
|
+
});
|
|
418
|
+
addListener(se, 'error', (ev) => {
|
|
419
|
+
console.error('could not load Custom Element code from', fileName);
|
|
420
|
+
});
|
|
421
|
+
return se;
|
|
422
|
+
}
|
|
423
|
+
function onLoadCallback(script) {
|
|
424
|
+
setTimeout(function () {
|
|
425
|
+
const importFileName = script.getAttribute('src');
|
|
426
|
+
const elementName = script.getAttribute('name');
|
|
411
427
|
const se = document.createElement('script');
|
|
412
|
-
se.
|
|
413
|
-
se.setAttribute('blocking', 'render');
|
|
428
|
+
se.async = true;
|
|
414
429
|
se.setAttribute('type', 'module');
|
|
415
|
-
|
|
416
|
-
se.onerror = () => {
|
|
417
|
-
console.error('could not load Custom Element code from', fileName);
|
|
418
|
-
};
|
|
419
|
-
document.head.append(se);
|
|
420
|
-
});
|
|
421
|
-
[...document.querySelectorAll('[_mc]:not([_mc=""]')]
|
|
422
|
-
.filter((element) => !!element)
|
|
423
|
-
.forEach((el) => {
|
|
424
|
-
const toBeLoaded = el.getAttribute('_mc')?.split(' ').filter(m => !!m && !document.head.querySelector(`script[${m}]`));
|
|
425
|
-
toBeLoaded?.forEach(elementName => {
|
|
426
|
-
const se = document.createElement('script'), fileName = '/' + elementName.split('-').join('/') + '.js';
|
|
427
|
-
se.setAttribute('src', fileName);
|
|
428
|
-
se.setAttribute('blocking', 'render');
|
|
429
|
-
se.async = true;
|
|
430
|
-
se.setAttribute('type', 'module');
|
|
431
|
-
se.setAttribute(elementName, '');
|
|
432
|
-
se.onload = () => {
|
|
433
|
-
setTimeout(function () {
|
|
434
|
-
const se = document.createElement('script');
|
|
435
|
-
const importFileName = fileName;
|
|
436
|
-
se.async = true;
|
|
437
|
-
se.setAttribute('type', 'module');
|
|
438
|
-
const code = `
|
|
430
|
+
const code = `
|
|
439
431
|
import _ from "${importFileName}";
|
|
440
432
|
import {DC} from "./microcomponents.js";
|
|
441
433
|
|
|
442
|
-
//console.log('use importFileName', '${importFileName}');
|
|
443
|
-
// console.log('use elementName', '${elementName}');
|
|
444
|
-
|
|
445
434
|
const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
|
|
446
435
|
|
|
447
|
-
// console.log('elements', elements);
|
|
448
436
|
elements.forEach((element) => {
|
|
449
|
-
|
|
450
|
-
DC.add(element, _.name, new _(element));
|
|
451
|
-
element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim());
|
|
437
|
+
autoload.state.MCs.set( '${elementName}', _ ); // add class to MCs repository
|
|
438
|
+
DC.add(element, _.name, new _(element)); // add instance to DOM
|
|
439
|
+
element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim()); // remove name from elements "_mc" attribute
|
|
452
440
|
});
|
|
441
|
+
|
|
453
442
|
setTimeout( () => {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
443
|
+
document.body.querySelector('script[name="${elementName}]"')?.remove();
|
|
444
|
+
},0);`;
|
|
445
|
+
se.innerHTML = code;
|
|
446
|
+
document.body.append(se);
|
|
447
|
+
}, 0);
|
|
448
|
+
}
|
|
449
|
+
function loadUndefinedMicroComponents() {
|
|
450
|
+
[...document.querySelectorAll(':not(:defined)')]
|
|
451
|
+
.filter((element) => !!element
|
|
452
|
+
&& !customElements.get(element.tagName.toLowerCase())
|
|
453
|
+
&& !CEs.has(element.tagName.toLowerCase()))
|
|
454
|
+
.forEach((el) => {
|
|
455
|
+
const elementName = el.tagName.toLowerCase(), fileName = '/' + elementName.split('-').join('/') + '.js';
|
|
456
|
+
const se = makeLoadScript(elementName);
|
|
457
|
+
addListener(se, 'load', () => {
|
|
458
|
+
CEs.set(elementName, customElements.get(el.tagName.toLowerCase()));
|
|
459
|
+
});
|
|
460
|
+
CEs.set(elementName, 'loading');
|
|
461
|
+
document.head.append(se);
|
|
462
|
+
});
|
|
463
|
+
[...document.querySelectorAll('[_mc]:not([_mc=""]')]
|
|
464
|
+
.filter((element) => !!element)
|
|
465
|
+
.forEach((el) => {
|
|
466
|
+
const elements = el.getAttribute('_mc')?.split(' ').filter(m => !!m) || [];
|
|
467
|
+
const elementsToBeLoaded = elements.filter(m => !MCs.has(m));
|
|
468
|
+
elementsToBeLoaded?.forEach(elementName => {
|
|
469
|
+
const se = makeLoadScript(elementName);
|
|
470
|
+
addListener(se, 'load', () => onLoadCallback(document.head.querySelector(`script[name="${elementName}"]`)));
|
|
471
|
+
MCs.set(elementName, 'loading');
|
|
465
472
|
document.head.append(se);
|
|
466
473
|
});
|
|
474
|
+
const elementsAlreadyLoaded = elements.filter(m => MCs.has(m) && !MCs.get(m).length);
|
|
475
|
+
elementsAlreadyLoaded?.forEach(elementName => {
|
|
476
|
+
setTimeout(() => {
|
|
477
|
+
console.log('attaching', elementName, autoload.state.MCs.get(elementName));
|
|
478
|
+
DC.add(el, elementName, new (autoload.state.MCs.get(elementName))(el));
|
|
479
|
+
el.setAttribute('_mc', el
|
|
480
|
+
.getAttribute('_mc')
|
|
481
|
+
.replace('${elementName}', '')
|
|
482
|
+
.replace(/\w\w/g, ' ')
|
|
483
|
+
.trim());
|
|
484
|
+
}, 5);
|
|
485
|
+
});
|
|
467
486
|
});
|
|
468
487
|
}
|
|
469
488
|
let autoloadEnabled = false;
|
|
489
|
+
let observer = null;
|
|
470
490
|
function autoload(enable = true) {
|
|
471
491
|
if (!enable) {
|
|
472
492
|
observer?.disconnect();
|
|
@@ -481,6 +501,7 @@ function autoload(enable = true) {
|
|
|
481
501
|
}, 5);
|
|
482
502
|
return autoloadEnabled;
|
|
483
503
|
}
|
|
504
|
+
autoload.state = { CEs, MCs };
|
|
484
505
|
|
|
485
506
|
|
|
486
507
|
/******/ return __webpack_exports__;
|
package/dist/MC.ts
CHANGED
|
@@ -410,8 +410,6 @@ class DC extends McBase {
|
|
|
410
410
|
}
|
|
411
411
|
}
|
|
412
412
|
|
|
413
|
-
let observer: MutationObserver | null = null;
|
|
414
|
-
|
|
415
413
|
/*
|
|
416
414
|
unresolvedCEs (code below this comment):
|
|
417
415
|
|
|
@@ -430,10 +428,10 @@ In general this behaves like a custom runtime import for custom elements in the
|
|
|
430
428
|
The only difference is that the micro component is loaded only when needed, and not on page load.
|
|
431
429
|
*/
|
|
432
430
|
|
|
433
|
-
const
|
|
431
|
+
const CEs = new Map();
|
|
434
432
|
|
|
435
433
|
/*
|
|
436
|
-
|
|
434
|
+
loadedMCs (code below this comment):
|
|
437
435
|
a repository (a hashmap) of micro components:
|
|
438
436
|
the name is the name of the micro component (like "my-mc")
|
|
439
437
|
if they are loading, the value is a script element
|
|
@@ -449,28 +447,88 @@ The only difference is that the micro component is loaded only when needed, and
|
|
|
449
447
|
*/
|
|
450
448
|
const MCs = new Map();
|
|
451
449
|
|
|
450
|
+
function makeLoadScript( element: string ): HTMLScriptElement {
|
|
451
|
+
|
|
452
|
+
const fileName: string = '/' + element.split('-').join('/')+'.js';
|
|
453
|
+
|
|
454
|
+
const se: HTMLScriptElement = document.createElement('script');
|
|
455
|
+
|
|
456
|
+
se.setAttribute('src', fileName);
|
|
457
|
+
se.setAttribute('blocking', 'render');
|
|
458
|
+
se.async = true;
|
|
459
|
+
se.setAttribute('type', 'module');
|
|
460
|
+
se.setAttribute( 'name', element);
|
|
461
|
+
se.setAttribute( 'loading', '');
|
|
462
|
+
|
|
463
|
+
addListener( se, 'load', (ev) => {
|
|
464
|
+
// console.info('loaded MC', elementName);
|
|
465
|
+
se.removeAttribute( 'loading' );
|
|
466
|
+
se.setAttribute( 'loaded', '');
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
addListener( se, 'error', (ev) => {
|
|
470
|
+
console.error('could not load Custom Element code from', fileName);
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
return se;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
function onLoadCallback( script: HTMLScriptElement ) {
|
|
477
|
+
// create callback script tag
|
|
478
|
+
// it is essential to do this in a timeout and via another script tag,
|
|
479
|
+
// to force it to be a top level module allowing for the use of "import"
|
|
480
|
+
setTimeout( function(){
|
|
481
|
+
// create callback script tag
|
|
482
|
+
const importFileName = script.getAttribute('src');
|
|
483
|
+
const elementName = script.getAttribute('name');
|
|
484
|
+
|
|
485
|
+
const se: HTMLScriptElement = document.createElement('script');
|
|
486
|
+
|
|
487
|
+
se.async = true;
|
|
488
|
+
se.setAttribute( 'type', 'module');
|
|
489
|
+
|
|
490
|
+
// --- autoload script
|
|
491
|
+
const code = /*javascript*/`
|
|
492
|
+
import _ from "${importFileName}";
|
|
493
|
+
import {DC} from "./microcomponents.js";
|
|
494
|
+
|
|
495
|
+
const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
|
|
496
|
+
|
|
497
|
+
elements.forEach((element) => {
|
|
498
|
+
autoload.state.MCs.set( '${elementName}', _ ); // add class to MCs repository
|
|
499
|
+
DC.add(element, _.name, new _(element)); // add instance to DOM
|
|
500
|
+
element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim()); // remove name from elements "_mc" attribute
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
setTimeout( () => {
|
|
504
|
+
document.body.querySelector('script[name="${elementName}]"')?.remove();
|
|
505
|
+
},0);`;
|
|
506
|
+
// --- end autoload script
|
|
507
|
+
|
|
508
|
+
se.innerHTML = code;
|
|
509
|
+
document.body.append(se);
|
|
510
|
+
}, 0);
|
|
511
|
+
}
|
|
512
|
+
|
|
452
513
|
function loadUndefinedMicroComponents() {
|
|
453
514
|
|
|
454
515
|
// load unresolved custom eleents
|
|
455
516
|
[ ...document.querySelectorAll(':not(:defined)') ] // undefined custom elements
|
|
456
|
-
.filter( (element) => !!element
|
|
517
|
+
.filter( (element) => !!element
|
|
518
|
+
&& !customElements.get(element.tagName.toLowerCase()) // not in CustomElementsRegistry
|
|
519
|
+
&& !CEs.has(element.tagName.toLowerCase()) // not in loading list
|
|
520
|
+
)
|
|
457
521
|
.forEach((el) => {
|
|
458
522
|
const elementName = el.tagName.toLowerCase(),
|
|
459
523
|
fileName: string = '/'+elementName.split('-').join('/')+'.js';
|
|
460
|
-
//console.log('load undefined custom element',el);
|
|
461
524
|
|
|
462
|
-
const se: HTMLScriptElement =
|
|
525
|
+
const se: HTMLScriptElement = makeLoadScript( elementName );
|
|
463
526
|
|
|
464
|
-
se
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
se.setAttribute( elementName, '');
|
|
468
|
-
|
|
469
|
-
se.onerror = () => {
|
|
470
|
-
console.error('could not load Custom Element code from', fileName);
|
|
471
|
-
}
|
|
527
|
+
addListener( se, 'load', () => {
|
|
528
|
+
CEs.set( elementName, customElements.get(el.tagName.toLowerCase()) );
|
|
529
|
+
});
|
|
472
530
|
|
|
473
|
-
|
|
531
|
+
CEs.set( elementName, 'loading');
|
|
474
532
|
document.head.append(se);
|
|
475
533
|
|
|
476
534
|
// instanciation of the micro component will be handled by the browser automatically
|
|
@@ -480,74 +538,41 @@ function loadUndefinedMicroComponents() {
|
|
|
480
538
|
[ ...document.querySelectorAll('[_mc]:not([_mc=""]') ] // undefined DOM components
|
|
481
539
|
.filter( (element) => !!element )
|
|
482
540
|
.forEach((el) => {
|
|
483
|
-
const
|
|
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, '');
|
|
541
|
+
const elements = el.getAttribute('_mc')?.split(' ').filter( m => !!m ) || [];
|
|
542
|
+
const elementsToBeLoaded = elements.filter( m => !MCs.has( m ) );
|
|
497
543
|
|
|
498
|
-
|
|
499
|
-
|
|
544
|
+
// load MC components that do not exist yet
|
|
545
|
+
elementsToBeLoaded?.forEach( elementName => {
|
|
546
|
+
const se: HTMLScriptElement = makeLoadScript( elementName );
|
|
500
547
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
const se: HTMLScriptElement = document.createElement('script');
|
|
505
|
-
const importFileName = fileName;
|
|
548
|
+
addListener( se, 'load', () => onLoadCallback( document.head.querySelector(`script[name="${elementName}"]`) as HTMLScriptElement) );
|
|
549
|
+
|
|
550
|
+
MCs.set( elementName, 'loading');
|
|
506
551
|
|
|
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
|
-
|
|
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
552
|
document.head.append(se);
|
|
546
553
|
});
|
|
554
|
+
|
|
555
|
+
// loading MC components already have callbacks attached
|
|
556
|
+
const elementsAlreadyLoaded = elements.filter( m => MCs.has( m ) && !MCs.get( m )!.length);
|
|
557
|
+
|
|
558
|
+
// MCs that are already loaded will trigger the onLoadCallback manually
|
|
559
|
+
elementsAlreadyLoaded?.forEach( elementName => {
|
|
560
|
+
setTimeout( ()=>{
|
|
561
|
+
console.log('attaching', elementName, (autoload as any).state.MCs.get(elementName));
|
|
562
|
+
DC.add(el, elementName, new ( (autoload as any).state.MCs.get(elementName) as any)(el)); // add instance to DOM
|
|
563
|
+
el.setAttribute('_mc', (el as any)
|
|
564
|
+
.getAttribute('_mc')
|
|
565
|
+
.replace('${elementName}', '')
|
|
566
|
+
.replace( /\w\w/g, ' ')
|
|
567
|
+
.trim()
|
|
568
|
+
); // remove name from elements "_mc" attribute
|
|
569
|
+
}, 5);
|
|
570
|
+
});
|
|
547
571
|
});
|
|
548
572
|
}
|
|
549
573
|
|
|
550
574
|
let autoloadEnabled: boolean = false;
|
|
575
|
+
let observer: MutationObserver | null = null;
|
|
551
576
|
|
|
552
577
|
export function autoload(enable: boolean = true): boolean {
|
|
553
578
|
if (!enable) {
|
|
@@ -567,5 +592,7 @@ export function autoload(enable: boolean = true): boolean {
|
|
|
567
592
|
return autoloadEnabled;
|
|
568
593
|
}
|
|
569
594
|
|
|
595
|
+
(autoload as LooseObject).state = { CEs, MCs };
|
|
596
|
+
|
|
570
597
|
export { addListener, removeListener, McBase, MC, DC, McEvent };
|
|
571
598
|
|
package/dist/elements.min.js
CHANGED
|
@@ -1 +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.elements=t():e.elements=t()}(this,(()=>(()=>{"use strict";var e={d:(t,
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.elements=t():e.elements=t()}(this,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{defineCE:()=>j,getCE:()=>M});var n=new Function("try {return this===window;}catch(e){ return false;}");let r=new Set;n()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>r.add(e)));class o{#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 c=new Function("try {return this===window;}catch(e){ return false;}");let s=new Set;function i(e,t){let n=[];return e.forEach((e=>{if(e&&e instanceof HTMLElement){const r=e?._mc;!t&&r?n=n.concat(Object.values(e._mc)):t&&r&&r[t]&&n.push(r[t])}})),n}function a(e,t,n=!0){let r=[];for(;e;){if(e._mc&&(t?t&&e._mc[t]&&r.push(e._mc[t]):r=r.concat(Object.values(e._mc)),n))return r;e=e.parentNode}return r}function l(e){return e&&e instanceof HTMLElement}function u(e,t,n,r=!1,o=!1){let c={once:!1};r&&(c.capture=r),o&&(c.once=o),e.addEventListener(t,n,c)}function m(e,t,n={}){let r=e;if(!r._mc){let t=h?.debug;h.debug=!1,r._mc=new h(e),h.debug=t,delete r._mc._mc}const o=r._mc;return t.length&&!o[t]&&(o[t]=n,e instanceof HTMLElement&&!e.getAttribute("_mc")&&e.setAttribute("_mc","")),n}function d(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,n={},r="l"){let c=e?._mc;if(!c)return;let s=t instanceof o?new o(t.type,t.data,"l"):new o(t,n,"l"),i="string"!=typeof t?t:new o(t,n,r);[...Object.values(c)].forEach((e=>{e?.trigger&&"function"==typeof e?.trigger&&e?.trigger(s)})),/[ud]/.test(i.bubble)&&f(e,i)}function f(e,t){/[ud]/.test(t.bubble)&&setTimeout((()=>{if(-1===t.bubble.indexOf("l")&&(t.bubble+="l"),t.bubble.indexOf("u")>-1){let n=a(e,"",!0)?.[0].target;n&&h.trigger(n,t)}t.bubble.indexOf("d")>-1&&new Set(e._mc.children().map((e=>e?.target))).forEach((e=>{e&&h.trigger(e,t)}))}),0)}c()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>s.add(e)));class g{#r;constructor(e,t=!1){var n;this.#r=new WeakRef(e||{}),(n=this).constructor!==h&&setTimeout((()=>{n.trigger("Init")}),0),function(e){if(!c()||e.constructor===h)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((r=>{let o=/^one/.test(r),c=r.replace(/^on[e]{0,1}/,""),i=c.toLowerCase();o&&Object.defineProperty(e,"on"+c,{configurable:!0,enumerable:!1,writable:!0,value:e=>{n.constructor.prototype[r].bind(n)(e)}}),s.has("on"+i)&&u(t,i,(e=>{n.trigger(c,e)}),!1,o)}))}}(this)}get target(){return this.#r.deref()}}class b extends g{_mc={};constructor(e){super(e)}static trigger=p;trigger(e,t={},n="l"){let r=this;if(r.constructor===b||r.constructor===h){let c=e instanceof o?new o(e.type,e.data,"l"):new o(e,t,"l"),s="string"!=typeof e?e:new o(e,t,n);return[...Object.getOwnPropertyNames(r)].forEach((e=>{r[e]?.trigger&&"function"==typeof r[e]?.trigger&&r[e]?.trigger(c)})),void(/[ud]/.test(s.bubble)&&f(r.target,s))}if(r instanceof b||r instanceof h){const r=this,c="string"!=typeof e?e:new o(e,t,n),s="on"+c.type[0].toUpperCase()+c.type.slice(1);if(c.bubble.indexOf("l")>-1&&(c.immediateStopped||"function"!=typeof r[s]||(r[s](c),r.hasOwnProperty(s)&&delete r[s])),c.stopped||"l"===c.bubble)return r;/[ud]/.test(c.bubble)&&f(r.target,c)}}}class h extends g{_mc={};constructor(e,t=!1){super(e)}static add=m;static remove=d;static trigger=p;trigger(e,t={},n){b.prototype.trigger.call(this,e,t,n)}parent(e=""){let t=this.target;return l(t)?a(t.parentNode,e,!0):[]}ancestors(e=""){let t=this?.target;return l(t)?a(this.target.parentNode,e,!1):[]}children(e=""){let t=this?.target;if(!l(t))return[];const n=Math.random().toString().replace(".",""),r='[_mc]:not([temp_id="'+n+'"] [_mc] [_mc])';t.setAttribute("temp_id",n);const o=i([...t.querySelectorAll(r)],e);return t.removeAttribute("temp_id"),o}descendants(e=""){let t=this?.target;return l(t)?i([...t.querySelectorAll("*[_mc]")],e):[]}}const y=new Map,w=new Map;function _(e){const t="/"+e.split("-").join("/")+".js",n=document.createElement("script");return n.setAttribute("src",t),n.setAttribute("blocking","render"),n.async=!0,n.setAttribute("type","module"),n.setAttribute("name",e),n.setAttribute("loading",""),u(n,"load",(e=>{n.removeAttribute("loading"),n.setAttribute("loaded","")})),u(n,"error",(e=>{console.error("could not load Custom Element code from",t)})),n}function E(){[...document.querySelectorAll(":not(:defined)")].filter((e=>!!e&&!customElements.get(e.tagName.toLowerCase())&&!y.has(e.tagName.toLowerCase()))).forEach((e=>{const t=e.tagName.toLowerCase(),n=(t.split("-").join("/"),_(t));u(n,"load",(()=>{y.set(t,customElements.get(e.tagName.toLowerCase()))})),y.set(t,"loading"),document.head.append(n)})),[...document.querySelectorAll('[_mc]:not([_mc=""]')].filter((e=>!!e)).forEach((e=>{const t=e.getAttribute("_mc")?.split(" ").filter((e=>!!e))||[],n=t.filter((e=>!w.has(e)));n?.forEach((e=>{const t=_(e);u(t,"load",(()=>{return t=document.head.querySelector(`script[name="${e}"]`),void setTimeout((function(){const e=t.getAttribute("src"),n=t.getAttribute("name"),r=document.createElement("script");r.async=!0,r.setAttribute("type","module");const o=`\nimport _ from "${e}";\nimport {DC} from "./microcomponents.js";\n\nconst elements = Array.from(document.querySelectorAll('[_mc*="${n}"]')).filter( element => element instanceof HTMLElement );\n\nelements.forEach((element) => {\n\tautoload.state.MCs.set( '${n}', _ ); // add class to MCs repository\n\tDC.add(element, _.name, new _(element)); // add instance to DOM\n\telement.setAttribute('_mc', element.getAttribute('_mc').replace('${n}', '').replace( /ww/g, ' ').trim()); // remove name from elements "_mc" attribute\n});\n\nsetTimeout( () => {\n\tdocument.body.querySelector('script[name="${n}]"')?.remove();\n},0);`;r.innerHTML=o,document.body.append(r)}),0);var t})),w.set(e,"loading"),document.head.append(t)}));const r=t.filter((e=>w.has(e)&&!w.get(e).length));r?.forEach((t=>{setTimeout((()=>{console.log("attaching",t,v.state.MCs.get(t)),h.add(e,t,new(v.state.MCs.get(t))(e)),e.setAttribute("_mc",e.getAttribute("_mc").replace("${elementName}","").replace(/\w\w/g," ").trim())}),5)}))}))}let A=!1,C=null;function v(e=!0){return e?(A=e,C=new MutationObserver(E),setTimeout((()=>{C.observe(document.body,{childList:!0,subtree:!0}),E()}),5),A):(C?.disconnect(),C=null,A)}v.state={CEs:y,MCs:w};class O extends HTMLElement{constructor(){super()}connectedCallback(){h.trigger(this,"Connected")}disconnectedCallback(){h.trigger(this,"Disconnected")}adoptedCallback(){h.trigger(this,"Adopted")}attributeChangedCallback(e,t,n){h.trigger(this,"AttributeChanged",{name:e,oldValue:t,newValue:n})}}function j(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 r=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})}(r,class extends O{instance;constructor(e){super();let n=new t(this,e);h.add(this,r,n)}static get observedAttributes(){return n}}))}function M(e){return customElements.get(e)}return t})()));
|
package/dist/formvValues.min.js
CHANGED
|
@@ -1 +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.formValues=t():e.formValues=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){let t={};return[...Object.keys(e)].sort().forEach((n=>{var o;(o=e[n])&&o.constructor&&o.constructor===Object?t[n]=r(e[n]):t[n]=e[n]})),t}function n(e,t=!0){let o={};return[...Object.getOwnPropertyNames(e)].forEach((t=>{if(e[t]&&e[t].constructor&&e[t].constructor===Object){const r=n(e[t],!1);for(const e in r)o[t+"."+e]=r[e]}else o[t]=e[t]})),t?r(o):o}function o(e,t){return JSON.stringify(n(e))===JSON.stringify(n(t))}function c(e,t){let r;return()=>{clearTimeout(r),r=setTimeout((function(){e(...arguments)}),t)}}function a(e,t){const r=Object.getOwnPropertyDescriptors(e);for(const[e,n]of Object.entries(r))("get"in n||"set"in n)&&Object.defineProperty(t,e,n)}e.r(t),e.d(t,{formValues:()=>D});var s=new Function("try {return this===window;}catch(e){ return false;}");let i=new Set;s()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>i.add(e)));class l{#e;#t=!1;#r=!1;constructor(e,t={},r="l"){this.#e=e,this.data=t,this.bubble=r}get type(){return this.#e}get stopped(){return this.#t}get immediateStopped(){return this.#r}stopPropagation(){this.#t=!0}stopImmediatePropagation(){this.stopPropagation(),this.#r=!0}}var u=new Function("try {return this===window;}catch(e){ return false;}");let f=new Set;function d(e,t){let r=[];return e.forEach((e=>{if(e&&e instanceof HTMLElement){const n=e?._mc;!t&&n?r=r.concat(Object.values(e._mc)):t&&n&&n[t]&&r.push(n[t])}})),r}function p(e,t,r=!0){let n=[];for(;e;){if(e._mc&&(t?t&&e._mc[t]&&n.push(e._mc[t]):n=n.concat(Object.values(e._mc)),r))return n;e=e.parentNode}return n}function b(e){return e&&e instanceof HTMLElement}function g(e,t,r,n=!1,o=!1){let c={once:!1};n&&(c.capture=n),o&&(c.once=o),e.addEventListener(t,r,c)}function h(e,t,r={}){let n=e;if(!n._mc){let t=E?.debug;E.debug=!1,n._mc=new E(e),E.debug=t,delete n._mc._mc}const o=n._mc;return t.length&&!o[t]&&(o[t]=r,e instanceof HTMLElement&&!e.getAttribute("_mc")&&e.setAttribute("_mc","")),r}function m(e,t){if(!t)return;const r=e?._mc||{};r&&r[t]&&delete r[t],!Object.keys(r).length&&e instanceof HTMLElement&&e.hasAttribute("_mc")&&e.removeAttribute("_mc")}function y(e,t,r={},n="l"){let o=e?._mc;if(!o)return;let c=t instanceof l?new l(t.type,t.data,"l"):new l(t,r,"l"),a="string"!=typeof t?t:new l(t,r,n);[...Object.values(o)].forEach((e=>{e?.trigger&&"function"==typeof e?.trigger&&e?.trigger(c)})),/[ud]/.test(a.bubble)&&O(e,a)}function O(e,t){/[ud]/.test(t.bubble)&&setTimeout((()=>{if(-1===t.bubble.indexOf("l")&&(t.bubble+="l"),t.bubble.indexOf("u")>-1){let r=p(e,"",!0)?.[0].target;r&&E.trigger(r,t)}t.bubble.indexOf("d")>-1&&new Set(e._mc.children().map((e=>e?.target))).forEach((e=>{e&&E.trigger(e,t)}))}),0)}u()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>f.add(e)));class v{#n;constructor(e,t=!1){var r;this.#n=new WeakRef(e||{}),(r=this).constructor!==E&&setTimeout((()=>{r.trigger("Init")}),0),function(e){if(!u()||e.constructor===E)return;const t=e.target;if(t instanceof HTMLElement){let r=e;Object.getOwnPropertyNames(r.constructor.prototype).filter((e=>/^on[A-Z]|one[A-Z]/.test(e)&&"function"==typeof r.constructor.prototype[e])).forEach((n=>{let o=/^one/.test(n),c=n.replace(/^on[e]{0,1}/,""),a=c.toLowerCase();o&&Object.defineProperty(e,"on"+c,{configurable:!0,enumerable:!1,writable:!0,value:e=>{r.constructor.prototype[n].bind(r)(e)}}),f.has("on"+a)&&g(t,a,(e=>{r.trigger(c,e)}),!1,o)}))}}(this)}get target(){return this.#n.deref()}}class w extends v{_mc={};constructor(e){super(e)}static trigger=y;trigger(e,t={},r="l"){let n=this;if(n.constructor===w||n.constructor===E){let o=e instanceof l?new l(e.type,e.data,"l"):new l(e,t,"l"),c="string"!=typeof e?e:new l(e,t,r);return[...Object.getOwnPropertyNames(n)].forEach((e=>{n[e]?.trigger&&"function"==typeof n[e]?.trigger&&n[e]?.trigger(o)})),void(/[ud]/.test(c.bubble)&&O(n.target,c))}if(n instanceof w||n instanceof E){const n=this,o="string"!=typeof e?e:new l(e,t,r),c="on"+o.type[0].toUpperCase()+o.type.slice(1);if(o.bubble.indexOf("l")>-1&&(o.immediateStopped||"function"!=typeof n[c]||(n[c](o),n.hasOwnProperty(c)&&delete n[c])),o.stopped||"l"===o.bubble)return n;/[ud]/.test(o.bubble)&&O(n.target,o)}}}class E extends v{_mc={};constructor(e,t=!1){super(e)}static add=h;static remove=m;static trigger=y;trigger(e,t={},r){w.prototype.trigger.call(this,e,t,r)}parent(e=""){let t=this.target;return b(t)?p(t.parentNode,e,!0):[]}ancestors(e=""){let t=this?.target;return b(t)?p(this.target.parentNode,e,!1):[]}children(e=""){let t=this?.target;if(!b(t))return[];const r=Math.random().toString().replace(".",""),n='[_mc]:not([temp_id="'+r+'"] [_mc] [_mc])';t.setAttribute("temp_id",r);const o=d([...t.querySelectorAll(n)],e);return t.removeAttribute("temp_id"),o}descendants(e=""){let t=this?.target;return b(t)?d([...t.querySelectorAll("*[_mc]")],e):[]}}function j(e){return null!=e&&"object"==typeof e}function _(e){let t=new Set,r=/\{[^\{\}]*\}/g;return e.getAttributeNames().filter((t=>e.getAttribute(t)?.match(r))).forEach((n=>{new Set(e.getAttribute(n)?.match(r)).forEach((e=>t.add(e.replace(/[\{\}]/g,""))))})),[...e.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(r))).forEach((e=>{(e.nodeValue||"").match(r).forEach((e=>{t.add(e.replace(/[\{\}]/g,""))}))})),[...t].map((e=>e.replace(/[\{\}]/g,"")))}new Map,new Map;const S=[HTMLInputElement,HTMLSelectElement,HTMLTextAreaElement];class A extends E{data={};oldDisplay="";constructor(e){super(e);let t=this;_(e).forEach((e=>t.data[e]="")),k(t),t.#o(),delete t._mc}#o(){let e=this,t=e.target,r=!1;t.getAttributeNames().filter((e=>t.getAttribute(e)?.match(/\{[^\{\}]*\}/g))).forEach((r=>{let n=new Set(t.getAttribute(r)?.match(/\{[^\{\}]*\}/g));var o;e.data.observe((o=t.getAttribute(r),e=>{let c=o;n.forEach((t=>{c=c.replace(t,e[t.replace(/[\{\}]/g,"")])})),t.setAttribute(r,c)}))})),[...t.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(/\{[^\{\}]*\}/g))).forEach((n=>{r=!0;let o=new Set(n.nodeValue.match(/\{[^\{\}]*\}/g));var c;e.data.observe((c=n.nodeValue,r=>{let a=c;o.forEach((e=>{a=a.replace(e,r[e.replace(/[\{\}]/g,"")])})),Object.keys(r).some((e=>!!r[e]))&&(e.oldDisplay?t.style=e.oldDisplay:t.removeAttribute("style"),delete e.oldDisplay),n.nodeValue=a})),e.oldDisplay=t.getAttribute("style)")||"",r&&!S.includes(t.constructor)&&"FIELDSET"!==t.tagName&&(t.style.display="none")}))}onData(e){let t=this,r={};Object.keys(e.data).forEach((n=>{t.data.hasOwnProperty(n)&&(r[n]=e.data[n])})),JSON.stringify(r)!==JSON.stringify(t.data)&&Object.assign(t.data,r)}}const k=(e,t)=>((t?[t]:[...Object.getOwnPropertyNames(e)]).forEach((t=>{if("_"===t[0]||void 0===e?.[t])return e;let r,s=e[t];if(!s.prototype)switch(typeof s){case"string":r=String;break;case"number":r=Number;break;case"boolean":r=Boolean;break;case"object":r=s instanceof Array?Array:Object;break;default:return}let i=class extends r{#c=!0;constructor(e){super(e),this.constructor.callbacks=[],j(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(j(t.valueOf())){!function(e){var t;(t=e,(t instanceof HTMLElement?[t]:[]).concat([...t.querySelectorAll("*")]).filter((e=>!!_(e).length)).filter((e=>"STYLE"!==e.tagName))).forEach((e=>{e?._mc?._placeholders||E.add(e,"_placeholders",new A(e))}))}(e);const r=[...e.querySelectorAll("[_mc]")].filter((e=>!!e?._mc?._placeholders)),o=function(e){let t=n(e);r.forEach((e=>{e&&e._mc.trigger("data",t)}))};t.constructor.callbacks.push(o),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,r=j(t.valueOf())&&t.valueOf()instanceof Array==0?structuredClone(Object.assign({},t)):t.valueOf();return void 0!==e&&(t.#c=e),t.constructor.callbacks.forEach((e=>{e(r)})),t}},l=new i(s);Object.defineProperty(e,t,{enumerable:!0,get(){if(j(l.valueOf())){let e=structuredClone(Object.assign({},l));setTimeout(c((function(){o(structuredClone(Object.assign({},l)),e)||l.notify()}),0),0)}return l},set(e){if(typeof e==typeof l.valueOf())if(j(l.valueOf())&&l.valueOf()instanceof Array==0){let t=structuredClone(Object.assign({},l));l instanceof i==0&&(l=new i(structuredClone(Object.assign({},e))),a(e,l),l.seal()),Object.assign(l,e),setTimeout(c((function(){o(structuredClone(Object.assign({},l)),t)||l.notify()}),0),0)}else{let t=l.valueOf(),r=l.constructor.callbacks;l=new i(e),l.constructor.callbacks=r,e!==t&&l.notify()}else console.warn("IGNORED - cannot change observable types, IS:",typeof l.valueOf(),l,"- CANNOT BECOME:",typeof e)}}),e[t]=s})),e);class N{constructor(e){}}class T extends N{#a;constructor(e){super(e),this.#a=e}get val(){return new FormData(this.#a.form).get(this.#a.name)}set val(e){[...this.#a.form.querySelectorAll(`input[type="radio"][name="${this.#a.name}"]`)].filter((t=>t.getAttribute("value")===e)).shift().checked=!0}}class x extends N{#a;constructor(e){super(e),this.#a=e}get val(){return this.#a.checked}set val(e){this.#a.checked=e}}class P extends N{#a;constructor(e){super(e),this.#a=e}get val(){return this.#a.value}set val(e){this.#a.value=e}}class L extends N{#a;#s=!1;constructor(e){super(e),this.#a=e,this.#s=e.multiple}get val(){const e=[];return[...this.#a.querySelectorAll("option")].filter((e=>e.selected)).forEach((t=>{e.push(t.value)})),this.#s?e:e.length?e[0]:""}set val(e){e="string"==typeof e?[e]:e,[...this.#a.querySelectorAll("option")].forEach((t=>{e.indexOf(t.value)>-1?t.selected=!0:t.selected=!1}))}}class M extends N{#a;constructor(e){super(e),this.#a=e}get val(){return this.#a.value||""}set val(e){this.#a.value=e}}const C=e=>{let t=[...(e||document).querySelectorAll("input,select,textarea")],r={};return t.forEach((e=>{const t=e.getAttribute("name");if(t){let n=!1;switch((e=>e.tagName.toLowerCase())(e)){case"input":switch(e.type){case"radio":n=new T(e);break;case"checkbox":n=new x(e);break;default:n=new P(e)}break;case"select":n=new L(e);break;case"textarea":n=new M(e);break;default:console.warn("handler missing:",t,"for",e.tagName.toLowerCase(),e)}n&&(E.add(e,t,n),Object.defineProperty(r,t,{enumerable:!0,configurable:!0,get:()=>n.val,set:e=>{n.val!==e&&(n.val=e)}}))}})),r};function D(e,t,r){let n=C(r);e[t]=Object.assign({},n),k(e,t),a(n,e[t]),[...r.querySelectorAll("input, textarea, select")].forEach((r=>{g(r,"keyup",(r=>{e[t].notify()})),g(r,"change",(r=>{e[t].notify()})),g(r,"select",(r=>{e[t].notify()}))}))}return t})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.formValues=t():e.formValues=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){let t={};return[...Object.keys(e)].sort().forEach((n=>{var o;(o=e[n])&&o.constructor&&o.constructor===Object?t[n]=r(e[n]):t[n]=e[n]})),t}function n(e,t=!0){let o={};return[...Object.getOwnPropertyNames(e)].forEach((t=>{if(e[t]&&e[t].constructor&&e[t].constructor===Object){const r=n(e[t],!1);for(const e in r)o[t+"."+e]=r[e]}else o[t]=e[t]})),t?r(o):o}function o(e,t){return JSON.stringify(n(e))===JSON.stringify(n(t))}function c(e,t){let r;return()=>{clearTimeout(r),r=setTimeout((function(){e(...arguments)}),t)}}function s(e,t){const r=Object.getOwnPropertyDescriptors(e);for(const[e,n]of Object.entries(r))("get"in n||"set"in n)&&Object.defineProperty(t,e,n)}e.r(t),e.d(t,{formValues:()=>J});var a=new Function("try {return this===window;}catch(e){ return false;}");let l=new Set;a()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>l.add(e)));class i{#e;#t=!1;#r=!1;constructor(e,t={},r="l"){this.#e=e,this.data=t,this.bubble=r}get type(){return this.#e}get stopped(){return this.#t}get immediateStopped(){return this.#r}stopPropagation(){this.#t=!0}stopImmediatePropagation(){this.stopPropagation(),this.#r=!0}}var u=new Function("try {return this===window;}catch(e){ return false;}");let f=new Set;function d(e,t){let r=[];return e.forEach((e=>{if(e&&e instanceof HTMLElement){const n=e?._mc;!t&&n?r=r.concat(Object.values(e._mc)):t&&n&&n[t]&&r.push(n[t])}})),r}function m(e,t,r=!0){let n=[];for(;e;){if(e._mc&&(t?t&&e._mc[t]&&n.push(e._mc[t]):n=n.concat(Object.values(e._mc)),r))return n;e=e.parentNode}return n}function p(e){return e&&e instanceof HTMLElement}function b(e,t,r,n=!1,o=!1){let c={once:!1};n&&(c.capture=n),o&&(c.once=o),e.addEventListener(t,r,c)}function g(e,t,r={}){let n=e;if(!n._mc){let t=E?.debug;E.debug=!1,n._mc=new E(e),E.debug=t,delete n._mc._mc}const o=n._mc;return t.length&&!o[t]&&(o[t]=r,e instanceof HTMLElement&&!e.getAttribute("_mc")&&e.setAttribute("_mc","")),r}function h(e,t){if(!t)return;const r=e?._mc||{};r&&r[t]&&delete r[t],!Object.keys(r).length&&e instanceof HTMLElement&&e.hasAttribute("_mc")&&e.removeAttribute("_mc")}function y(e,t,r={},n="l"){let o=e?._mc;if(!o)return;let c=t instanceof i?new i(t.type,t.data,"l"):new i(t,r,"l"),s="string"!=typeof t?t:new i(t,r,n);[...Object.values(o)].forEach((e=>{e?.trigger&&"function"==typeof e?.trigger&&e?.trigger(c)})),/[ud]/.test(s.bubble)&&O(e,s)}function O(e,t){/[ud]/.test(t.bubble)&&setTimeout((()=>{if(-1===t.bubble.indexOf("l")&&(t.bubble+="l"),t.bubble.indexOf("u")>-1){let r=m(e,"",!0)?.[0].target;r&&E.trigger(r,t)}t.bubble.indexOf("d")>-1&&new Set(e._mc.children().map((e=>e?.target))).forEach((e=>{e&&E.trigger(e,t)}))}),0)}u()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>f.add(e)));class v{#n;constructor(e,t=!1){var r;this.#n=new WeakRef(e||{}),(r=this).constructor!==E&&setTimeout((()=>{r.trigger("Init")}),0),function(e){if(!u()||e.constructor===E)return;const t=e.target;if(t instanceof HTMLElement){let r=e;Object.getOwnPropertyNames(r.constructor.prototype).filter((e=>/^on[A-Z]|one[A-Z]/.test(e)&&"function"==typeof r.constructor.prototype[e])).forEach((n=>{let o=/^one/.test(n),c=n.replace(/^on[e]{0,1}/,""),s=c.toLowerCase();o&&Object.defineProperty(e,"on"+c,{configurable:!0,enumerable:!1,writable:!0,value:e=>{r.constructor.prototype[n].bind(r)(e)}}),f.has("on"+s)&&b(t,s,(e=>{r.trigger(c,e)}),!1,o)}))}}(this)}get target(){return this.#n.deref()}}class w extends v{_mc={};constructor(e){super(e)}static trigger=y;trigger(e,t={},r="l"){let n=this;if(n.constructor===w||n.constructor===E){let o=e instanceof i?new i(e.type,e.data,"l"):new i(e,t,"l"),c="string"!=typeof e?e:new i(e,t,r);return[...Object.getOwnPropertyNames(n)].forEach((e=>{n[e]?.trigger&&"function"==typeof n[e]?.trigger&&n[e]?.trigger(o)})),void(/[ud]/.test(c.bubble)&&O(n.target,c))}if(n instanceof w||n instanceof E){const n=this,o="string"!=typeof e?e:new i(e,t,r),c="on"+o.type[0].toUpperCase()+o.type.slice(1);if(o.bubble.indexOf("l")>-1&&(o.immediateStopped||"function"!=typeof n[c]||(n[c](o),n.hasOwnProperty(c)&&delete n[c])),o.stopped||"l"===o.bubble)return n;/[ud]/.test(o.bubble)&&O(n.target,o)}}}class E extends v{_mc={};constructor(e,t=!1){super(e)}static add=g;static remove=h;static trigger=y;trigger(e,t={},r){w.prototype.trigger.call(this,e,t,r)}parent(e=""){let t=this.target;return p(t)?m(t.parentNode,e,!0):[]}ancestors(e=""){let t=this?.target;return p(t)?m(this.target.parentNode,e,!1):[]}children(e=""){let t=this?.target;if(!p(t))return[];const r=Math.random().toString().replace(".",""),n='[_mc]:not([temp_id="'+r+'"] [_mc] [_mc])';t.setAttribute("temp_id",r);const o=d([...t.querySelectorAll(n)],e);return t.removeAttribute("temp_id"),o}descendants(e=""){let t=this?.target;return p(t)?d([...t.querySelectorAll("*[_mc]")],e):[]}}const A=new Map,_=new Map;function j(e){const t="/"+e.split("-").join("/")+".js",r=document.createElement("script");return r.setAttribute("src",t),r.setAttribute("blocking","render"),r.async=!0,r.setAttribute("type","module"),r.setAttribute("name",e),r.setAttribute("loading",""),b(r,"load",(e=>{r.removeAttribute("loading"),r.setAttribute("loaded","")})),b(r,"error",(e=>{console.error("could not load Custom Element code from",t)})),r}function S(){[...document.querySelectorAll(":not(:defined)")].filter((e=>!!e&&!customElements.get(e.tagName.toLowerCase())&&!A.has(e.tagName.toLowerCase()))).forEach((e=>{const t=e.tagName.toLowerCase(),r=(t.split("-").join("/"),j(t));b(r,"load",(()=>{A.set(t,customElements.get(e.tagName.toLowerCase()))})),A.set(t,"loading"),document.head.append(r)})),[...document.querySelectorAll('[_mc]:not([_mc=""]')].filter((e=>!!e)).forEach((e=>{const t=e.getAttribute("_mc")?.split(" ").filter((e=>!!e))||[],r=t.filter((e=>!_.has(e)));r?.forEach((e=>{const t=j(e);b(t,"load",(()=>{return t=document.head.querySelector(`script[name="${e}"]`),void setTimeout((function(){const e=t.getAttribute("src"),r=t.getAttribute("name"),n=document.createElement("script");n.async=!0,n.setAttribute("type","module");const o=`\nimport _ from "${e}";\nimport {DC} from "./microcomponents.js";\n\nconst elements = Array.from(document.querySelectorAll('[_mc*="${r}"]')).filter( element => element instanceof HTMLElement );\n\nelements.forEach((element) => {\n\tautoload.state.MCs.set( '${r}', _ ); // add class to MCs repository\n\tDC.add(element, _.name, new _(element)); // add instance to DOM\n\telement.setAttribute('_mc', element.getAttribute('_mc').replace('${r}', '').replace( /ww/g, ' ').trim()); // remove name from elements "_mc" attribute\n});\n\nsetTimeout( () => {\n\tdocument.body.querySelector('script[name="${r}]"')?.remove();\n},0);`;n.innerHTML=o,document.body.append(n)}),0);var t})),_.set(e,"loading"),document.head.append(t)}));const n=t.filter((e=>_.has(e)&&!_.get(e).length));n?.forEach((t=>{setTimeout((()=>{console.log("attaching",t,N.state.MCs.get(t)),E.add(e,t,new(N.state.MCs.get(t))(e)),e.setAttribute("_mc",e.getAttribute("_mc").replace("${elementName}","").replace(/\w\w/g," ").trim())}),5)}))}))}let T=!1,k=null;function N(e=!0){return e?(T=e,k=new MutationObserver(S),setTimeout((()=>{k.observe(document.body,{childList:!0,subtree:!0}),S()}),5),T):(k?.disconnect(),k=null,T)}function C(e){return null!=e&&"object"==typeof e}function M(e){let t=new Set,r=/\{[^\{\}]*\}/g;return e.getAttributeNames().filter((t=>e.getAttribute(t)?.match(r))).forEach((n=>{new Set(e.getAttribute(n)?.match(r)).forEach((e=>t.add(e.replace(/[\{\}]/g,""))))})),[...e.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(r))).forEach((e=>{(e.nodeValue||"").match(r).forEach((e=>{t.add(e.replace(/[\{\}]/g,""))}))})),[...t].map((e=>e.replace(/[\{\}]/g,"")))}N.state={CEs:A,MCs:_};const L=[HTMLInputElement,HTMLSelectElement,HTMLTextAreaElement];class x extends E{data={};oldDisplay="";constructor(e){super(e);let t=this;M(e).forEach((e=>t.data[e]="")),P(t),t.#o(),delete t._mc}#o(){let e=this,t=e.target,r=!1;t.getAttributeNames().filter((e=>t.getAttribute(e)?.match(/\{[^\{\}]*\}/g))).forEach((r=>{let n=new Set(t.getAttribute(r)?.match(/\{[^\{\}]*\}/g));var o;e.data.observe((o=t.getAttribute(r),e=>{let c=o;n.forEach((t=>{c=c.replace(t,e[t.replace(/[\{\}]/g,"")])})),t.setAttribute(r,c)}))})),[...t.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(/\{[^\{\}]*\}/g))).forEach((n=>{r=!0;let o=new Set(n.nodeValue.match(/\{[^\{\}]*\}/g));var c;e.data.observe((c=n.nodeValue,r=>{let s=c;o.forEach((e=>{s=s.replace(e,r[e.replace(/[\{\}]/g,"")])})),Object.keys(r).some((e=>!!r[e]))&&(e.oldDisplay?t.style=e.oldDisplay:t.removeAttribute("style"),delete e.oldDisplay),n.nodeValue=s})),e.oldDisplay=t.getAttribute("style)")||"",r&&!L.includes(t.constructor)&&"FIELDSET"!==t.tagName&&(t.style.display="none")}))}onData(e){let t=this,r={};Object.keys(e.data).forEach((n=>{t.data.hasOwnProperty(n)&&(r[n]=e.data[n])})),JSON.stringify(r)!==JSON.stringify(t.data)&&Object.assign(t.data,r)}}const P=(e,t)=>((t?[t]:[...Object.getOwnPropertyNames(e)]).forEach((t=>{if("_"===t[0]||void 0===e?.[t])return e;let r,a=e[t];if(!a.prototype)switch(typeof a){case"string":r=String;break;case"number":r=Number;break;case"boolean":r=Boolean;break;case"object":r=a instanceof Array?Array:Object;break;default:return}let l=class extends r{#c=!0;constructor(e){super(e),this.constructor.callbacks=[],C(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(C(t.valueOf())){!function(e){var t;(t=e,(t instanceof HTMLElement?[t]:[]).concat([...t.querySelectorAll("*")]).filter((e=>!!M(e).length)).filter((e=>"STYLE"!==e.tagName))).forEach((e=>{e?._mc?._placeholders||E.add(e,"_placeholders",new x(e))}))}(e);const r=[...e.querySelectorAll("[_mc]")].filter((e=>!!e?._mc?._placeholders)),o=function(e){let t=n(e);r.forEach((e=>{e&&e._mc.trigger("data",t)}))};t.constructor.callbacks.push(o),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,r=C(t.valueOf())&&t.valueOf()instanceof Array==0?structuredClone(Object.assign({},t)):t.valueOf();return void 0!==e&&(t.#c=e),t.constructor.callbacks.forEach((e=>{e(r)})),t}},i=new l(a);Object.defineProperty(e,t,{enumerable:!0,get(){if(C(i.valueOf())){let e=structuredClone(Object.assign({},i));setTimeout(c((function(){o(structuredClone(Object.assign({},i)),e)||i.notify()}),0),0)}return i},set(e){if(typeof e==typeof i.valueOf())if(C(i.valueOf())&&i.valueOf()instanceof Array==0){let t=structuredClone(Object.assign({},i));i instanceof l==0&&(i=new l(structuredClone(Object.assign({},e))),s(e,i),i.seal()),Object.assign(i,e),setTimeout(c((function(){o(structuredClone(Object.assign({},i)),t)||i.notify()}),0),0)}else{let t=i.valueOf(),r=i.constructor.callbacks;i=new l(e),i.constructor.callbacks=r,e!==t&&i.notify()}else console.warn("IGNORED - cannot change observable types, IS:",typeof i.valueOf(),i,"- CANNOT BECOME:",typeof e)}}),e[t]=a})),e);class q{constructor(e){}}class D extends q{#s;constructor(e){super(e),this.#s=e}get val(){return new FormData(this.#s.form).get(this.#s.name)}set val(e){[...this.#s.form.querySelectorAll(`input[type="radio"][name="${this.#s.name}"]`)].filter((t=>t.getAttribute("value")===e)).shift().checked=!0}}class H extends q{#s;constructor(e){super(e),this.#s=e}get val(){return this.#s.checked}set val(e){this.#s.checked=e}}class V extends q{#s;constructor(e){super(e),this.#s=e}get val(){return this.#s.value}set val(e){this.#s.value=e}}class I extends q{#s;#a=!1;constructor(e){super(e),this.#s=e,this.#a=e.multiple}get val(){const e=[];return[...this.#s.querySelectorAll("option")].filter((e=>e.selected)).forEach((t=>{e.push(t.value)})),this.#a?e:e.length?e[0]:""}set val(e){e="string"==typeof e?[e]:e,[...this.#s.querySelectorAll("option")].forEach((t=>{e.indexOf(t.value)>-1?t.selected=!0:t.selected=!1}))}}class $ extends q{#s;constructor(e){super(e),this.#s=e}get val(){return this.#s.value||""}set val(e){this.#s.value=e}}const F=e=>{let t=[...(e||document).querySelectorAll("input,select,textarea")],r={};return t.forEach((e=>{const t=e.getAttribute("name");if(t){let n=!1;switch((e=>e.tagName.toLowerCase())(e)){case"input":switch(e.type){case"radio":n=new D(e);break;case"checkbox":n=new H(e);break;default:n=new V(e)}break;case"select":n=new I(e);break;case"textarea":n=new $(e);break;default:console.warn("handler missing:",t,"for",e.tagName.toLowerCase(),e)}n&&(E.add(e,t,n),Object.defineProperty(r,t,{enumerable:!0,configurable:!0,get:()=>n.val,set:e=>{n.val!==e&&(n.val=e)}}))}})),r};function J(e,t,r){let n=F(r);e[t]=Object.assign({},n),P(e,t),s(n,e[t]),[...r.querySelectorAll("input, textarea, select")].forEach((r=>{b(r,"keyup",(r=>{e[t].notify()})),b(r,"change",(r=>{e[t].notify()})),b(r,"select",(r=>{e[t].notify()}))}))}return t})()));
|