@schukai/monster 3.4.2 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
- package/example/i18n/providers/embed.mjs +5 -0
- package/package.json +1 -1
- package/source/constants.mjs +4 -9
- package/source/constraints/abstract.mjs +4 -6
- package/source/constraints/abstractoperator.mjs +6 -12
- package/source/constraints/andoperator.mjs +3 -6
- package/source/constraints/invalid.mjs +3 -6
- package/source/constraints/isarray.mjs +6 -9
- package/source/constraints/isobject.mjs +4 -7
- package/source/constraints/namespace.mjs +1 -3
- package/source/constraints/oroperator.mjs +26 -25
- package/source/constraints/valid.mjs +3 -6
- package/source/data/buildmap.mjs +20 -36
- package/source/data/buildtree.mjs +29 -29
- package/source/data/datasource/namespace.mjs +1 -1
- package/source/data/datasource/server/restapi/writeerror.mjs +6 -6
- package/source/data/datasource/server/restapi.mjs +51 -65
- package/source/data/datasource/server/webconnect.mjs +26 -35
- package/source/data/datasource/server.mjs +17 -21
- package/source/data/datasource/storage/localstorage.mjs +8 -11
- package/source/data/datasource/storage/sessionstorage.mjs +8 -10
- package/source/data/datasource/storage.mjs +18 -22
- package/source/data/datasource.mjs +27 -43
- package/source/data/diff.mjs +20 -32
- package/source/data/extend.mjs +20 -14
- package/source/data/namespace.mjs +1 -3
- package/source/data/pathfinder.mjs +40 -67
- package/source/data/pipe.mjs +6 -10
- package/source/data/transformer.mjs +141 -157
- package/source/dom/assembler.mjs +6 -9
- package/source/dom/attributes.mjs +36 -48
- package/source/dom/constants.mjs +55 -71
- package/source/dom/customcontrol.mjs +16 -21
- package/source/dom/customelement.mjs +140 -164
- package/source/dom/events.mjs +17 -24
- package/source/dom/focusmanager.mjs +30 -48
- package/source/dom/locale.mjs +41 -10
- package/source/dom/namespace.mjs +1 -1
- package/source/dom/ready.mjs +7 -10
- package/source/dom/resource/data.mjs +38 -46
- package/source/dom/resource/link/namespace.mjs +1 -3
- package/source/dom/resource/link/stylesheet.mjs +7 -11
- package/source/dom/resource/link.mjs +36 -17
- package/source/dom/resource/namespace.mjs +1 -1
- package/source/dom/resource/script.mjs +23 -13
- package/source/dom/resource.mjs +47 -60
- package/source/dom/resourcemanager.mjs +36 -43
- package/source/dom/template.mjs +17 -24
- package/source/dom/theme.mjs +8 -12
- package/source/dom/updater.mjs +150 -196
- package/source/dom/util.mjs +11 -12
- package/source/dom/worker/factory.mjs +21 -25
- package/source/dom/worker/namespace.mjs +1 -1
- package/source/i18n/formatter.mjs +20 -24
- package/source/i18n/locale.mjs +40 -42
- package/source/i18n/namespace.mjs +1 -1
- package/source/i18n/provider.mjs +4 -7
- package/source/i18n/providers/embed.mjs +115 -0
- package/source/i18n/providers/fetch.mjs +33 -38
- package/source/i18n/translations.mjs +16 -20
- package/source/logging/handler/console.mjs +6 -10
- package/source/logging/handler.mjs +15 -18
- package/source/logging/logentry.mjs +8 -9
- package/source/logging/logger.mjs +73 -55
- package/source/logging/namespace.mjs +1 -1
- package/source/math/namespace.mjs +1 -1
- package/source/math/random.mjs +13 -14
- package/source/monster.mjs +132 -100
- package/source/net/namespace.mjs +1 -3
- package/source/net/webconnect/message.mjs +6 -8
- package/source/net/webconnect/namespace.mjs +1 -3
- package/source/net/webconnect.mjs +28 -39
- package/source/text/formatter.mjs +44 -55
- package/source/types/base.mjs +16 -26
- package/source/types/basewithoptions.mjs +8 -14
- package/source/types/binary.mjs +4 -5
- package/source/types/dataurl.mjs +19 -27
- package/source/types/global.mjs +14 -26
- package/source/types/id.mjs +4 -6
- package/source/types/is.mjs +11 -16
- package/source/types/mediatype.mjs +29 -44
- package/source/types/namespace.mjs +0 -1
- package/source/types/node.mjs +16 -22
- package/source/types/nodelist.mjs +10 -14
- package/source/types/noderecursiveiterator.mjs +11 -14
- package/source/types/observablequeue.mjs +13 -16
- package/source/types/observer.mjs +16 -23
- package/source/types/observerlist.mjs +18 -21
- package/source/types/proxyobserver.mjs +24 -37
- package/source/types/queue.mjs +8 -13
- package/source/types/randomid.mjs +10 -10
- package/source/types/regex.mjs +3 -5
- package/source/types/stack.mjs +4 -8
- package/source/types/tokenlist.mjs +24 -31
- package/source/types/typeof.mjs +5 -7
- package/source/types/uniquequeue.mjs +8 -13
- package/source/types/uuid.mjs +18 -25
- package/source/types/validate.mjs +26 -27
- package/source/types/version.mjs +17 -25
- package/source/util/clone.mjs +23 -32
- package/source/util/comparator.mjs +7 -15
- package/source/util/deadmansswitch.mjs +16 -23
- package/source/util/freeze.mjs +5 -7
- package/source/util/namespace.mjs +1 -1
- package/source/util/processing.mjs +33 -39
- package/source/util/trimspaces.mjs +17 -24
- package/test/cases/dom/locale.mjs +15 -0
- package/test/cases/i18n/providers/embed.mjs +72 -0
- package/test/cases/monster.mjs +1 -1
@@ -5,28 +5,28 @@
|
|
5
5
|
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
|
6
6
|
*/
|
7
7
|
|
8
|
-
import {internalSymbol} from "../constants.mjs";
|
9
|
-
import {extend} from "../data/extend.mjs";
|
10
|
-
import {Pathfinder} from "../data/pathfinder.mjs";
|
11
|
-
|
12
|
-
import {parseDataURL} from "../types/dataurl.mjs";
|
13
|
-
import {getGlobalObject} from "../types/global.mjs";
|
14
|
-
import {isArray, isFunction, isObject, isString} from "../types/is.mjs";
|
15
|
-
import {Observer} from "../types/observer.mjs";
|
16
|
-
import {ProxyObserver} from "../types/proxyobserver.mjs";
|
17
|
-
import {validateFunction, validateInstance, validateObject, validateString} from "../types/validate.mjs";
|
18
|
-
import {clone} from "../util/clone.mjs";
|
19
|
-
import {addAttributeToken, getLinkedObjects, hasObjectLink} from "./attributes.mjs";
|
8
|
+
import { internalSymbol } from "../constants.mjs";
|
9
|
+
import { extend } from "../data/extend.mjs";
|
10
|
+
import { Pathfinder } from "../data/pathfinder.mjs";
|
11
|
+
|
12
|
+
import { parseDataURL } from "../types/dataurl.mjs";
|
13
|
+
import { getGlobalObject } from "../types/global.mjs";
|
14
|
+
import { isArray, isFunction, isObject, isString } from "../types/is.mjs";
|
15
|
+
import { Observer } from "../types/observer.mjs";
|
16
|
+
import { ProxyObserver } from "../types/proxyobserver.mjs";
|
17
|
+
import { validateFunction, validateInstance, validateObject, validateString } from "../types/validate.mjs";
|
18
|
+
import { clone } from "../util/clone.mjs";
|
19
|
+
import { addAttributeToken, getLinkedObjects, hasObjectLink } from "./attributes.mjs";
|
20
20
|
import {
|
21
21
|
ATTRIBUTE_DISABLED,
|
22
22
|
ATTRIBUTE_ERRORMESSAGE,
|
23
23
|
ATTRIBUTE_OPTIONS,
|
24
24
|
ATTRIBUTE_OPTIONS_SELECTOR,
|
25
|
-
customElementUpdaterLinkSymbol
|
25
|
+
customElementUpdaterLinkSymbol,
|
26
26
|
} from "./constants.mjs";
|
27
|
-
import {findDocumentTemplate, Template} from "./template.mjs";
|
28
|
-
import {addObjectWithUpdaterToElement} from "./updater.mjs";
|
29
|
-
import {instanceSymbol} from
|
27
|
+
import { findDocumentTemplate, Template } from "./template.mjs";
|
28
|
+
import { addObjectWithUpdaterToElement } from "./updater.mjs";
|
29
|
+
import { instanceSymbol } from "../constants.mjs";
|
30
30
|
|
31
31
|
export {
|
32
32
|
CustomElement,
|
@@ -34,28 +34,27 @@ export {
|
|
34
34
|
assembleMethodSymbol,
|
35
35
|
attributeObserverSymbol,
|
36
36
|
registerCustomElement,
|
37
|
-
getSlottedElements
|
38
|
-
}
|
37
|
+
getSlottedElements,
|
38
|
+
};
|
39
39
|
|
40
40
|
/**
|
41
41
|
* @memberOf Monster.DOM
|
42
42
|
* @type {symbol}
|
43
43
|
*/
|
44
|
-
const initMethodSymbol = Symbol.for(
|
44
|
+
const initMethodSymbol = Symbol.for("@schukai/monster/dom/@@initMethodSymbol");
|
45
45
|
|
46
46
|
/**
|
47
47
|
* @memberOf Monster.DOM
|
48
48
|
* @type {symbol}
|
49
49
|
*/
|
50
|
-
const assembleMethodSymbol = Symbol.for(
|
50
|
+
const assembleMethodSymbol = Symbol.for("@schukai/monster/dom/@@assembleMethodSymbol");
|
51
51
|
|
52
52
|
/**
|
53
53
|
* this symbol holds the attribute observer callbacks. The key is the attribute name.
|
54
54
|
* @memberOf Monster.DOM
|
55
55
|
* @type {symbol}
|
56
56
|
*/
|
57
|
-
const attributeObserverSymbol = Symbol.for(
|
58
|
-
|
57
|
+
const attributeObserverSymbol = Symbol.for("@schukai/monster/dom/@@attributeObserver");
|
59
58
|
|
60
59
|
/**
|
61
60
|
* HTMLElement
|
@@ -100,7 +99,6 @@ const attributeObserverSymbol = Symbol.for('@schukai/monster/dom/@@attributeObse
|
|
100
99
|
* @enduml
|
101
100
|
*/
|
102
101
|
|
103
|
-
|
104
102
|
/**
|
105
103
|
* To define a new HTML element we need the power of CustomElement
|
106
104
|
*
|
@@ -187,7 +185,6 @@ const attributeObserverSymbol = Symbol.for('@schukai/monster/dom/@@attributeObse
|
|
187
185
|
* @summary A base class for HTML5 customcontrols
|
188
186
|
*/
|
189
187
|
class CustomElement extends HTMLElement {
|
190
|
-
|
191
188
|
/**
|
192
189
|
* A new object is created. First the `initOptions` method is called. Here the
|
193
190
|
* options can be defined in derived classes. Subsequently, the shadowRoot is initialized.
|
@@ -197,7 +194,9 @@ class CustomElement extends HTMLElement {
|
|
197
194
|
*/
|
198
195
|
constructor() {
|
199
196
|
super();
|
200
|
-
this[internalSymbol] = new ProxyObserver({
|
197
|
+
this[internalSymbol] = new ProxyObserver({
|
198
|
+
options: extend({}, this.defaults),
|
199
|
+
});
|
201
200
|
this[attributeObserverSymbol] = {};
|
202
201
|
initOptionObserver.call(this);
|
203
202
|
this[initMethodSymbol]();
|
@@ -212,7 +211,6 @@ class CustomElement extends HTMLElement {
|
|
212
211
|
return Symbol.for("@schukai/monster/dom/custom-element");
|
213
212
|
}
|
214
213
|
|
215
|
-
|
216
214
|
/**
|
217
215
|
* This method determines which attributes are to be monitored by `attributeChangedCallback()`.
|
218
216
|
*
|
@@ -275,11 +273,11 @@ class CustomElement extends HTMLElement {
|
|
275
273
|
get defaults() {
|
276
274
|
return {
|
277
275
|
ATTRIBUTE_DISABLED: this.getAttribute(ATTRIBUTE_DISABLED),
|
278
|
-
shadowMode:
|
276
|
+
shadowMode: "open",
|
279
277
|
delegatesFocus: true,
|
280
278
|
templates: {
|
281
|
-
main: undefined
|
282
|
-
}
|
279
|
+
main: undefined,
|
280
|
+
},
|
283
281
|
};
|
284
282
|
}
|
285
283
|
|
@@ -329,7 +327,7 @@ class CustomElement extends HTMLElement {
|
|
329
327
|
* @returns {CustomElement}
|
330
328
|
*/
|
331
329
|
attachObserver(observer) {
|
332
|
-
this[internalSymbol].attachObserver(observer)
|
330
|
+
this[internalSymbol].attachObserver(observer);
|
333
331
|
return this;
|
334
332
|
}
|
335
333
|
|
@@ -340,7 +338,7 @@ class CustomElement extends HTMLElement {
|
|
340
338
|
* @returns {CustomElement}
|
341
339
|
*/
|
342
340
|
detachObserver(observer) {
|
343
|
-
this[internalSymbol].detachObserver(observer)
|
341
|
+
this[internalSymbol].detachObserver(observer);
|
344
342
|
return this;
|
345
343
|
}
|
346
344
|
|
@@ -349,7 +347,7 @@ class CustomElement extends HTMLElement {
|
|
349
347
|
* @returns {ProxyObserver}
|
350
348
|
*/
|
351
349
|
containsObserver(observer) {
|
352
|
-
return this[internalSymbol].containsObserver(observer)
|
350
|
+
return this[internalSymbol].containsObserver(observer);
|
353
351
|
}
|
354
352
|
|
355
353
|
/**
|
@@ -364,10 +362,8 @@ class CustomElement extends HTMLElement {
|
|
364
362
|
let value;
|
365
363
|
|
366
364
|
try {
|
367
|
-
value = new Pathfinder(this[internalSymbol].getRealSubject()[
|
368
|
-
} catch (e) {
|
369
|
-
|
370
|
-
}
|
365
|
+
value = new Pathfinder(this[internalSymbol].getRealSubject()["options"]).getVia(path);
|
366
|
+
} catch (e) {}
|
371
367
|
|
372
368
|
if (value === undefined) return defaultValue;
|
373
369
|
return value;
|
@@ -382,7 +378,7 @@ class CustomElement extends HTMLElement {
|
|
382
378
|
* @since 1.14.0
|
383
379
|
*/
|
384
380
|
setOption(path, value) {
|
385
|
-
new Pathfinder(this[internalSymbol].getSubject()[
|
381
|
+
new Pathfinder(this[internalSymbol].getSubject()["options"]).setVia(path, value);
|
386
382
|
return this;
|
387
383
|
}
|
388
384
|
|
@@ -392,13 +388,12 @@ class CustomElement extends HTMLElement {
|
|
392
388
|
* @return {CustomElement}
|
393
389
|
*/
|
394
390
|
setOptions(options) {
|
395
|
-
|
396
391
|
if (isString(options)) {
|
397
|
-
options = parseOptionsJSON.call(this, options)
|
392
|
+
options = parseOptionsJSON.call(this, options);
|
398
393
|
}
|
399
394
|
|
400
395
|
const self = this;
|
401
|
-
extend(self[internalSymbol].getSubject()[
|
396
|
+
extend(self[internalSymbol].getSubject()["options"], self.defaults, options);
|
402
397
|
|
403
398
|
return self;
|
404
399
|
}
|
@@ -420,9 +415,9 @@ class CustomElement extends HTMLElement {
|
|
420
415
|
* @since 1.8.0
|
421
416
|
*/
|
422
417
|
[assembleMethodSymbol]() {
|
423
|
-
|
424
418
|
const self = this;
|
425
|
-
let elements
|
419
|
+
let elements;
|
420
|
+
let nodeList;
|
426
421
|
|
427
422
|
const AttributeOptions = getOptionsFromAttributes.call(self);
|
428
423
|
if (isObject(AttributeOptions) && Object.keys(AttributeOptions).length > 0) {
|
@@ -434,15 +429,11 @@ class CustomElement extends HTMLElement {
|
|
434
429
|
self.setOptions(ScriptOptions);
|
435
430
|
}
|
436
431
|
|
437
|
-
|
438
|
-
if (self.getOption('shadowMode', false) !== false) {
|
432
|
+
if (self.getOption("shadowMode", false) !== false) {
|
439
433
|
try {
|
440
434
|
initShadowRoot.call(self);
|
441
435
|
elements = self.shadowRoot.childNodes;
|
442
|
-
|
443
|
-
} catch (e) {
|
444
|
-
|
445
|
-
}
|
436
|
+
} catch (e) {}
|
446
437
|
|
447
438
|
try {
|
448
439
|
initCSSStylesheet.call(this);
|
@@ -459,15 +450,17 @@ class CustomElement extends HTMLElement {
|
|
459
450
|
}
|
460
451
|
|
461
452
|
try {
|
462
|
-
nodeList = new Set([
|
463
|
-
...elements,
|
464
|
-
...getSlottedElements.call(self)
|
465
|
-
])
|
453
|
+
nodeList = new Set([...elements, ...getSlottedElements.call(self)]);
|
466
454
|
} catch (e) {
|
467
|
-
nodeList = elements
|
455
|
+
nodeList = elements;
|
468
456
|
}
|
469
457
|
|
470
|
-
addObjectWithUpdaterToElement.call(
|
458
|
+
addObjectWithUpdaterToElement.call(
|
459
|
+
self,
|
460
|
+
nodeList,
|
461
|
+
customElementUpdaterLinkSymbol,
|
462
|
+
clone(self[internalSymbol].getRealSubject()["options"]),
|
463
|
+
);
|
471
464
|
return self;
|
472
465
|
}
|
473
466
|
|
@@ -481,7 +474,7 @@ class CustomElement extends HTMLElement {
|
|
481
474
|
connectedCallback() {
|
482
475
|
let self = this;
|
483
476
|
if (!hasObjectLink(self, customElementUpdaterLinkSymbol)) {
|
484
|
-
self[assembleMethodSymbol]()
|
477
|
+
self[assembleMethodSymbol]();
|
485
478
|
}
|
486
479
|
}
|
487
480
|
|
@@ -491,9 +484,7 @@ class CustomElement extends HTMLElement {
|
|
491
484
|
* @return {void}
|
492
485
|
* @since 1.7.0
|
493
486
|
*/
|
494
|
-
disconnectedCallback() {
|
495
|
-
|
496
|
-
}
|
487
|
+
disconnectedCallback() {}
|
497
488
|
|
498
489
|
/**
|
499
490
|
* The custom element has been moved into a new document (e.g. someone called document.adoptNode(el)).
|
@@ -501,9 +492,7 @@ class CustomElement extends HTMLElement {
|
|
501
492
|
* @return {void}
|
502
493
|
* @since 1.7.0
|
503
494
|
*/
|
504
|
-
adoptedCallback() {
|
505
|
-
|
506
|
-
}
|
495
|
+
adoptedCallback() {}
|
507
496
|
|
508
497
|
/**
|
509
498
|
* Called when an observed attribute has been added, removed, updated, or replaced. Also called for initial
|
@@ -524,7 +513,6 @@ class CustomElement extends HTMLElement {
|
|
524
513
|
if (isFunction(callback)) {
|
525
514
|
callback.call(self, newVal, oldVal);
|
526
515
|
}
|
527
|
-
|
528
516
|
}
|
529
517
|
|
530
518
|
/**
|
@@ -546,9 +534,7 @@ class CustomElement extends HTMLElement {
|
|
546
534
|
}
|
547
535
|
|
548
536
|
return containChildNode.call(self.shadowRoot, node);
|
549
|
-
|
550
537
|
}
|
551
|
-
|
552
538
|
}
|
553
539
|
|
554
540
|
/**
|
@@ -563,27 +549,25 @@ class CustomElement extends HTMLElement {
|
|
563
549
|
*/
|
564
550
|
function getSlottedElements(query, name) {
|
565
551
|
const self = this;
|
566
|
-
const result = new Set;
|
552
|
+
const result = new Set();
|
567
553
|
|
568
554
|
if (!(self.shadowRoot instanceof ShadowRoot)) {
|
569
555
|
return result;
|
570
556
|
}
|
571
557
|
|
572
|
-
let selector =
|
558
|
+
let selector = "slot";
|
573
559
|
if (name !== undefined) {
|
574
560
|
if (name === null) {
|
575
|
-
selector +=
|
561
|
+
selector += ":not([name])";
|
576
562
|
} else {
|
577
|
-
selector +=
|
563
|
+
selector += `[name=${validateString(name)}]`;
|
578
564
|
}
|
579
|
-
|
580
565
|
}
|
581
566
|
|
582
567
|
const slots = self.shadowRoot.querySelectorAll(selector);
|
583
568
|
|
584
569
|
for (const [, slot] of Object.entries(slots)) {
|
585
570
|
slot.assignedElements().forEach(function (node) {
|
586
|
-
|
587
571
|
if (!(node instanceof HTMLElement)) return;
|
588
572
|
|
589
573
|
if (isString(query)) {
|
@@ -594,13 +578,12 @@ function getSlottedElements(query, name) {
|
|
594
578
|
if (node.matches(query)) {
|
595
579
|
result.add(node);
|
596
580
|
}
|
597
|
-
|
598
581
|
} else if (query !== undefined) {
|
599
|
-
throw new Error(
|
582
|
+
throw new Error("query must be a string");
|
600
583
|
} else {
|
601
584
|
result.add(node);
|
602
585
|
}
|
603
|
-
})
|
586
|
+
});
|
604
587
|
}
|
605
588
|
|
606
589
|
return result;
|
@@ -627,7 +610,6 @@ function containChildNode(node) {
|
|
627
610
|
containChildNode.call(e, node);
|
628
611
|
}
|
629
612
|
|
630
|
-
|
631
613
|
return false;
|
632
614
|
}
|
633
615
|
|
@@ -641,59 +623,58 @@ function initOptionObserver() {
|
|
641
623
|
const self = this;
|
642
624
|
|
643
625
|
let lastDisabledValue = undefined;
|
644
|
-
self.attachObserver(
|
645
|
-
|
646
|
-
|
647
|
-
if (flag === lastDisabledValue) {
|
648
|
-
return;
|
649
|
-
}
|
626
|
+
self.attachObserver(
|
627
|
+
new Observer(function () {
|
628
|
+
const flag = self.getOption("disabled");
|
650
629
|
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
return;
|
655
|
-
}
|
656
|
-
|
657
|
-
const query = 'button, command, fieldset, keygen, optgroup, option, select, textarea, input, [data-monster-objectlink]';
|
658
|
-
const elements = self.shadowRoot.querySelectorAll(query);
|
630
|
+
if (flag === lastDisabledValue) {
|
631
|
+
return;
|
632
|
+
}
|
659
633
|
|
660
|
-
|
661
|
-
try {
|
662
|
-
nodeList = new Set([
|
663
|
-
...elements,
|
664
|
-
...getSlottedElements.call(self, query)
|
665
|
-
])
|
666
|
-
} catch (e) {
|
667
|
-
nodeList = elements
|
668
|
-
}
|
634
|
+
lastDisabledValue = flag;
|
669
635
|
|
670
|
-
|
671
|
-
|
672
|
-
element.setAttribute(ATTRIBUTE_DISABLED, '');
|
673
|
-
} else {
|
674
|
-
element.removeAttribute(ATTRIBUTE_DISABLED);
|
636
|
+
if (!(self.shadowRoot instanceof ShadowRoot)) {
|
637
|
+
return;
|
675
638
|
}
|
676
|
-
}
|
677
|
-
|
678
|
-
}));
|
679
639
|
|
680
|
-
|
640
|
+
const query =
|
641
|
+
"button, command, fieldset, keygen, optgroup, option, select, textarea, input, [data-monster-objectlink]";
|
642
|
+
const elements = self.shadowRoot.querySelectorAll(query);
|
681
643
|
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
644
|
+
let nodeList;
|
645
|
+
try {
|
646
|
+
nodeList = new Set([...elements, ...getSlottedElements.call(self, query)]);
|
647
|
+
} catch (e) {
|
648
|
+
nodeList = elements;
|
649
|
+
}
|
688
650
|
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
651
|
+
for (const element of [...nodeList]) {
|
652
|
+
if (flag === true) {
|
653
|
+
element.setAttribute(ATTRIBUTE_DISABLED, "");
|
654
|
+
} else {
|
655
|
+
element.removeAttribute(ATTRIBUTE_DISABLED);
|
656
|
+
}
|
693
657
|
}
|
694
|
-
}
|
658
|
+
}),
|
659
|
+
);
|
660
|
+
|
661
|
+
self.attachObserver(
|
662
|
+
new Observer(function () {
|
663
|
+
// not initialised
|
664
|
+
if (!hasObjectLink(self, customElementUpdaterLinkSymbol)) {
|
665
|
+
return;
|
666
|
+
}
|
667
|
+
// inform every element
|
668
|
+
const updaters = getLinkedObjects(self, customElementUpdaterLinkSymbol);
|
695
669
|
|
696
|
-
|
670
|
+
for (const list of updaters) {
|
671
|
+
for (const updater of list) {
|
672
|
+
let d = clone(self[internalSymbol].getRealSubject()["options"]);
|
673
|
+
Object.assign(updater.getSubject(), d);
|
674
|
+
}
|
675
|
+
}
|
676
|
+
}),
|
677
|
+
);
|
697
678
|
|
698
679
|
// disabled
|
699
680
|
self[attributeObserverSymbol][ATTRIBUTE_DISABLED] = () => {
|
@@ -702,7 +683,7 @@ function initOptionObserver() {
|
|
702
683
|
} else {
|
703
684
|
self.setOption(ATTRIBUTE_DISABLED, undefined);
|
704
685
|
}
|
705
|
-
}
|
686
|
+
};
|
706
687
|
|
707
688
|
// data-monster-options
|
708
689
|
self[attributeObserverSymbol][ATTRIBUTE_OPTIONS] = () => {
|
@@ -710,7 +691,7 @@ function initOptionObserver() {
|
|
710
691
|
if (isObject(options) && Object.keys(options).length > 0) {
|
711
692
|
self.setOptions(options);
|
712
693
|
}
|
713
|
-
}
|
694
|
+
};
|
714
695
|
|
715
696
|
// data-monster-options-selector
|
716
697
|
self[attributeObserverSymbol][ATTRIBUTE_OPTIONS_SELECTOR] = () => {
|
@@ -718,9 +699,7 @@ function initOptionObserver() {
|
|
718
699
|
if (isObject(options) && Object.keys(options).length > 0) {
|
719
700
|
self.setOptions(options);
|
720
701
|
}
|
721
|
-
}
|
722
|
-
|
723
|
-
|
702
|
+
};
|
724
703
|
}
|
725
704
|
|
726
705
|
/**
|
@@ -737,20 +716,29 @@ function getOptionsFromScriptTag() {
|
|
737
716
|
|
738
717
|
const node = document.querySelector(self.getAttribute(ATTRIBUTE_OPTIONS_SELECTOR));
|
739
718
|
if (!(node instanceof HTMLScriptElement)) {
|
740
|
-
addAttributeToken(
|
719
|
+
addAttributeToken(
|
720
|
+
self,
|
721
|
+
ATTRIBUTE_ERRORMESSAGE,
|
722
|
+
`the selector ${ATTRIBUTE_OPTIONS_SELECTOR} for options was specified (${self.getAttribute(
|
723
|
+
ATTRIBUTE_OPTIONS_SELECTOR,
|
724
|
+
)}) but not found.`,
|
725
|
+
);
|
741
726
|
return {};
|
742
727
|
}
|
743
728
|
|
744
729
|
let obj = {};
|
745
730
|
|
746
731
|
try {
|
747
|
-
obj = parseOptionsJSON.call(this, node.textContent.trim())
|
732
|
+
obj = parseOptionsJSON.call(this, node.textContent.trim());
|
748
733
|
} catch (e) {
|
749
|
-
addAttributeToken(
|
734
|
+
addAttributeToken(
|
735
|
+
self,
|
736
|
+
ATTRIBUTE_ERRORMESSAGE,
|
737
|
+
`when analyzing the configuration from the script tag there was an error. ${e}`,
|
738
|
+
);
|
750
739
|
}
|
751
740
|
|
752
741
|
return obj;
|
753
|
-
|
754
742
|
}
|
755
743
|
|
756
744
|
/**
|
@@ -762,9 +750,15 @@ function getOptionsFromAttributes() {
|
|
762
750
|
|
763
751
|
if (this.hasAttribute(ATTRIBUTE_OPTIONS)) {
|
764
752
|
try {
|
765
|
-
return parseOptionsJSON.call(self, this.getAttribute(ATTRIBUTE_OPTIONS))
|
753
|
+
return parseOptionsJSON.call(self, this.getAttribute(ATTRIBUTE_OPTIONS));
|
766
754
|
} catch (e) {
|
767
|
-
addAttributeToken(
|
755
|
+
addAttributeToken(
|
756
|
+
self,
|
757
|
+
ATTRIBUTE_ERRORMESSAGE,
|
758
|
+
`the options attribute ${ATTRIBUTE_OPTIONS} does not contain a valid json definition (actual: ${this.getAttribute(
|
759
|
+
ATTRIBUTE_OPTIONS,
|
760
|
+
)}).${e}`,
|
761
|
+
);
|
768
762
|
}
|
769
763
|
}
|
770
764
|
|
@@ -777,8 +771,7 @@ function getOptionsFromAttributes() {
|
|
777
771
|
* @return {Object}
|
778
772
|
*/
|
779
773
|
function parseOptionsJSON(data) {
|
780
|
-
|
781
|
-
const self = this, obj = {};
|
774
|
+
let obj = {};
|
782
775
|
|
783
776
|
if (!isString(data)) {
|
784
777
|
return obj;
|
@@ -788,19 +781,15 @@ function parseOptionsJSON(data) {
|
|
788
781
|
try {
|
789
782
|
let dataUrl = parseDataURL(data);
|
790
783
|
data = dataUrl.content;
|
791
|
-
} catch (e) {
|
792
|
-
|
793
|
-
}
|
784
|
+
} catch (e) {}
|
794
785
|
|
795
786
|
try {
|
796
|
-
|
797
|
-
return validateObject(obj);
|
787
|
+
obj = JSON.parse(data);
|
798
788
|
} catch (e) {
|
799
789
|
throw e;
|
800
790
|
}
|
801
791
|
|
802
|
-
|
803
|
-
return obj;
|
792
|
+
return validateObject(obj);
|
804
793
|
}
|
805
794
|
|
806
795
|
/**
|
@@ -808,21 +797,17 @@ function parseOptionsJSON(data) {
|
|
808
797
|
* @return {initHtmlContent}
|
809
798
|
*/
|
810
799
|
function initHtmlContent() {
|
811
|
-
|
812
800
|
try {
|
813
801
|
let template = findDocumentTemplate(this.constructor.getTag());
|
814
802
|
this.appendChild(template.createDocumentFragment());
|
815
803
|
} catch (e) {
|
816
|
-
|
817
|
-
let html = this.getOption('templates.main', '');
|
804
|
+
let html = this.getOption("templates.main", "");
|
818
805
|
if (isString(html) && html.length > 0) {
|
819
806
|
this.innerHTML = html;
|
820
807
|
}
|
821
|
-
|
822
808
|
}
|
823
809
|
|
824
810
|
return this;
|
825
|
-
|
826
811
|
}
|
827
812
|
|
828
813
|
/**
|
@@ -850,11 +835,10 @@ function initCSSStylesheet() {
|
|
850
835
|
} else if (isArray(styleSheet)) {
|
851
836
|
const assign = [];
|
852
837
|
for (let s of styleSheet) {
|
853
|
-
|
854
838
|
if (isString(s)) {
|
855
|
-
let trimedStyleSheet = s.trim()
|
856
|
-
if (trimedStyleSheet !==
|
857
|
-
const style = document.createElement(
|
839
|
+
let trimedStyleSheet = s.trim();
|
840
|
+
if (trimedStyleSheet !== "") {
|
841
|
+
const style = document.createElement("style");
|
858
842
|
style.innerHTML = trimedStyleSheet;
|
859
843
|
self.shadowRoot.prepend(style);
|
860
844
|
}
|
@@ -866,26 +850,21 @@ function initCSSStylesheet() {
|
|
866
850
|
if (s.cssRules.length > 0) {
|
867
851
|
assign.push(s);
|
868
852
|
}
|
869
|
-
|
870
853
|
}
|
871
854
|
|
872
855
|
if (assign.length > 0) {
|
873
856
|
this.shadowRoot.adoptedStyleSheets = assign;
|
874
857
|
}
|
875
|
-
|
876
858
|
} else if (isString(styleSheet)) {
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
const style = document.createElement('style')
|
859
|
+
let trimedStyleSheet = styleSheet.trim();
|
860
|
+
if (trimedStyleSheet !== "") {
|
861
|
+
const style = document.createElement("style");
|
881
862
|
style.innerHTML = styleSheet;
|
882
863
|
self.shadowRoot.prepend(style);
|
883
864
|
}
|
884
|
-
|
885
865
|
}
|
886
866
|
|
887
867
|
return self;
|
888
|
-
|
889
868
|
}
|
890
869
|
|
891
870
|
/**
|
@@ -898,23 +877,21 @@ function initCSSStylesheet() {
|
|
898
877
|
* @since 1.8.0
|
899
878
|
*/
|
900
879
|
function initShadowRoot() {
|
901
|
-
|
902
|
-
let
|
880
|
+
let template;
|
881
|
+
let html;
|
903
882
|
|
904
883
|
try {
|
905
884
|
template = findDocumentTemplate(this.constructor.getTag());
|
906
885
|
} catch (e) {
|
907
|
-
|
908
|
-
html = this.getOption('templates.main', '');
|
886
|
+
html = this.getOption("templates.main", "");
|
909
887
|
if (!isString(html) || html === undefined || html === "") {
|
910
888
|
throw new Error("html is not set.");
|
911
889
|
}
|
912
|
-
|
913
890
|
}
|
914
891
|
|
915
892
|
this.attachShadow({
|
916
|
-
mode: this.getOption(
|
917
|
-
delegatesFocus: this.getOption(
|
893
|
+
mode: this.getOption("shadowMode", "open"),
|
894
|
+
delegatesFocus: this.getOption("delegatesFocus", true),
|
918
895
|
});
|
919
896
|
|
920
897
|
if (template instanceof Template) {
|
@@ -939,6 +916,5 @@ function initShadowRoot() {
|
|
939
916
|
*/
|
940
917
|
function registerCustomElement(element) {
|
941
918
|
validateFunction(element);
|
942
|
-
getGlobalObject(
|
919
|
+
getGlobalObject("customElements").define(element.getTag(), element);
|
943
920
|
}
|
944
|
-
|