@schukai/monster 3.22.1 → 3.23.0
Sign up to get free protection for your applications and to get access to all the features.
package/package.json
CHANGED
package/source/dom/constants.mjs
CHANGED
@@ -16,7 +16,6 @@ export {
|
|
16
16
|
ATTRIBUTE_UPDATER_SELECT_THIS,
|
17
17
|
ATTRIBUTE_UPDATER_REPLACE,
|
18
18
|
ATTRIBUTE_UPDATER_INSERT,
|
19
|
-
ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID,
|
20
19
|
ATTRIBUTE_UPDATER_INSERT_REFERENCE,
|
21
20
|
ATTRIBUTE_UPDATER_REMOVE,
|
22
21
|
ATTRIBUTE_UPDATER_BIND,
|
@@ -143,14 +142,6 @@ const ATTRIBUTE_UPDATER_REPLACE = `${ATTRIBUTE_PREFIX}replace`;
|
|
143
142
|
*/
|
144
143
|
const ATTRIBUTE_UPDATER_INSERT = `${ATTRIBUTE_PREFIX}insert`;
|
145
144
|
|
146
|
-
/**
|
147
|
-
* @memberOf Monster.DOM
|
148
|
-
* @type {string}
|
149
|
-
* @license AGPLv3
|
150
|
-
* @since 3.21.0
|
151
|
-
*/
|
152
|
-
const ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID = `${ATTRIBUTE_UPDATER_INSERT}-template-id`;
|
153
|
-
|
154
145
|
/**
|
155
146
|
* @memberOf Monster.DOM
|
156
147
|
* @type {string}
|
@@ -5,18 +5,18 @@
|
|
5
5
|
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
|
6
6
|
*/
|
7
7
|
|
8
|
-
import {
|
9
|
-
import {
|
10
|
-
import {
|
8
|
+
import {internalSymbol} from "../constants.mjs";
|
9
|
+
import {extend} from "../data/extend.mjs";
|
10
|
+
import {Pathfinder} from "../data/pathfinder.mjs";
|
11
11
|
|
12
|
-
import {
|
13
|
-
import {
|
12
|
+
import {parseDataURL} from "../types/dataurl.mjs";
|
13
|
+
import {getGlobalObject} from "../types/global.mjs";
|
14
14
|
import {isArray, isFunction, isIterable, isObject, isString} from "../types/is.mjs";
|
15
|
-
import {
|
16
|
-
import {
|
17
|
-
import {
|
18
|
-
import {
|
19
|
-
import {
|
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,
|
@@ -24,9 +24,9 @@ import {
|
|
24
24
|
ATTRIBUTE_OPTIONS_SELECTOR,
|
25
25
|
customElementUpdaterLinkSymbol,
|
26
26
|
} from "./constants.mjs";
|
27
|
-
import {
|
28
|
-
import {
|
29
|
-
import {
|
27
|
+
import {findDocumentTemplate, Template} from "./template.mjs";
|
28
|
+
import {addObjectWithUpdaterToElement} from "./updater.mjs";
|
29
|
+
import {instanceSymbol} from "../constants.mjs";
|
30
30
|
import {getDocumentTranslations, Translations} from "../i18n/translations.mjs";
|
31
31
|
|
32
32
|
export {
|
@@ -267,6 +267,7 @@ class CustomElement extends HTMLElement {
|
|
267
267
|
* @property {Boolean} delegatesFocus=true A boolean that, when set to true, specifies behavior that mitigates custom element issues around focusability. When a non-focusable part of the shadow DOM is clicked, the first focusable part is given focus, and the shadow host is given any available :focus styling.
|
268
268
|
* @property {Object} templates Templates
|
269
269
|
* @property {string} templates.main=undefined Main template
|
270
|
+
* @property {Object} templateMapping Template mapping
|
270
271
|
*
|
271
272
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow
|
272
273
|
* @since 1.8.0
|
@@ -279,6 +280,7 @@ class CustomElement extends HTMLElement {
|
|
279
280
|
templates: {
|
280
281
|
main: undefined,
|
281
282
|
},
|
283
|
+
templateMapping: {},
|
282
284
|
};
|
283
285
|
}
|
284
286
|
|
@@ -288,7 +290,7 @@ class CustomElement extends HTMLElement {
|
|
288
290
|
* The labels are defined in the options object.
|
289
291
|
* The key of the label is used to retrieve the translation from the document.
|
290
292
|
* If the translation is different from the label, the label is updated.
|
291
|
-
*
|
293
|
+
*
|
292
294
|
* Before you can use this method, you must have loaded the translations.
|
293
295
|
*
|
294
296
|
* @returns {Monster.DOM.CustomElement}
|
@@ -301,10 +303,10 @@ class CustomElement extends HTMLElement {
|
|
301
303
|
}
|
302
304
|
|
303
305
|
const labels = this.getOption("labels");
|
304
|
-
if(!isIterable(labels)){
|
306
|
+
if (!isIterable(labels)) {
|
305
307
|
return this;
|
306
308
|
}
|
307
|
-
|
309
|
+
|
308
310
|
for (const key in labels) {
|
309
311
|
const text = translations.getText(key, labels[key]);
|
310
312
|
if (text !== labels[key]) {
|
@@ -313,8 +315,8 @@ class CustomElement extends HTMLElement {
|
|
313
315
|
|
314
316
|
}
|
315
317
|
return this;
|
316
|
-
}
|
317
|
-
|
318
|
+
}
|
319
|
+
|
318
320
|
/**
|
319
321
|
* There is no check on the name by this class. the developer is responsible for assigning an appropriate tag.
|
320
322
|
* if the name is not valid, registerCustomElement() will issue an error
|
@@ -327,7 +329,7 @@ class CustomElement extends HTMLElement {
|
|
327
329
|
static getTag() {
|
328
330
|
throw new Error("the method getTag must be overwritten by the derived class.");
|
329
331
|
}
|
330
|
-
|
332
|
+
|
331
333
|
|
332
334
|
/**
|
333
335
|
* At this point a `CSSStyleSheet` object can be returned. If the environment does not
|
@@ -354,7 +356,7 @@ class CustomElement extends HTMLElement {
|
|
354
356
|
static getCSSStyleSheet() {
|
355
357
|
return undefined;
|
356
358
|
}
|
357
|
-
|
359
|
+
|
358
360
|
/**
|
359
361
|
* attach a new observer
|
360
362
|
*
|
@@ -398,7 +400,8 @@ class CustomElement extends HTMLElement {
|
|
398
400
|
|
399
401
|
try {
|
400
402
|
value = new Pathfinder(this[internalSymbol].getRealSubject()["options"]).getVia(path);
|
401
|
-
} catch (e) {
|
403
|
+
} catch (e) {
|
404
|
+
}
|
402
405
|
|
403
406
|
if (value === undefined) return defaultValue;
|
404
407
|
return value;
|
@@ -468,7 +471,8 @@ class CustomElement extends HTMLElement {
|
|
468
471
|
try {
|
469
472
|
initShadowRoot.call(self);
|
470
473
|
elements = self.shadowRoot.childNodes;
|
471
|
-
} catch (e) {
|
474
|
+
} catch (e) {
|
475
|
+
}
|
472
476
|
|
473
477
|
try {
|
474
478
|
initCSSStylesheet.call(this);
|
@@ -519,7 +523,8 @@ class CustomElement extends HTMLElement {
|
|
519
523
|
* @return {void}
|
520
524
|
* @since 1.7.0
|
521
525
|
*/
|
522
|
-
disconnectedCallback() {
|
526
|
+
disconnectedCallback() {
|
527
|
+
}
|
523
528
|
|
524
529
|
/**
|
525
530
|
* The custom element has been moved into a new document (e.g. someone called document.adoptNode(el)).
|
@@ -527,7 +532,8 @@ class CustomElement extends HTMLElement {
|
|
527
532
|
* @return {void}
|
528
533
|
* @since 1.7.0
|
529
534
|
*/
|
530
|
-
adoptedCallback() {
|
535
|
+
adoptedCallback() {
|
536
|
+
}
|
531
537
|
|
532
538
|
/**
|
533
539
|
* Called when an observed attribute has been added, removed, updated, or replaced. Also called for initial
|
@@ -816,7 +822,8 @@ function parseOptionsJSON(data) {
|
|
816
822
|
try {
|
817
823
|
let dataUrl = parseDataURL(data);
|
818
824
|
data = dataUrl.content;
|
819
|
-
} catch (e) {
|
825
|
+
} catch (e) {
|
826
|
+
}
|
820
827
|
|
821
828
|
try {
|
822
829
|
obj = JSON.parse(data);
|
@@ -838,6 +845,11 @@ function initHtmlContent() {
|
|
838
845
|
} catch (e) {
|
839
846
|
let html = this.getOption("templates.main", "");
|
840
847
|
if (isString(html) && html.length > 0) {
|
848
|
+
|
849
|
+
const mapping = this.getOption("templateMapping", {});
|
850
|
+
if (isObject(mapping)) {
|
851
|
+
html = new Formatter(mapping).format(html);
|
852
|
+
}
|
841
853
|
this.innerHTML = html;
|
842
854
|
}
|
843
855
|
}
|
package/source/dom/updater.mjs
CHANGED
@@ -17,8 +17,7 @@ import {
|
|
17
17
|
ATTRIBUTE_UPDATER_INSERT_REFERENCE,
|
18
18
|
ATTRIBUTE_UPDATER_REMOVE,
|
19
19
|
ATTRIBUTE_UPDATER_REPLACE,
|
20
|
-
ATTRIBUTE_UPDATER_SELECT_THIS
|
21
|
-
ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID
|
20
|
+
ATTRIBUTE_UPDATER_SELECT_THIS
|
22
21
|
} from "../dom/constants.mjs";
|
23
22
|
|
24
23
|
import {Base} from "../types/base.mjs";
|
@@ -514,50 +513,6 @@ function insertElement(change) {
|
|
514
513
|
}
|
515
514
|
}
|
516
515
|
|
517
|
-
/**
|
518
|
-
* @private
|
519
|
-
* @param container
|
520
|
-
* @param key
|
521
|
-
* @param ref
|
522
|
-
* @param path
|
523
|
-
* @returns {any}
|
524
|
-
*/
|
525
|
-
function internalTemplateLookUp(container, key, ref, path) {
|
526
|
-
|
527
|
-
let templateID = key;
|
528
|
-
let template;
|
529
|
-
|
530
|
-
if (container.hasAttribute(ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID)) {
|
531
|
-
templateID = container.getAttribute(ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID);
|
532
|
-
template = findDocumentTemplate(templateID, container);
|
533
|
-
if (template instanceof HTMLTemplateElement) {
|
534
|
-
return template;
|
535
|
-
}
|
536
|
-
}
|
537
|
-
|
538
|
-
if (container.closest(`[${ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID}]`)) {
|
539
|
-
templateID = container.closest(`[${ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID}]`).getAttribute(ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID);
|
540
|
-
template = findDocumentTemplate(templateID, container);
|
541
|
-
if (template instanceof HTMLTemplateElement) {
|
542
|
-
return template;
|
543
|
-
}
|
544
|
-
}
|
545
|
-
|
546
|
-
const rootNode = container.getRootNode();
|
547
|
-
if (rootNode instanceof ShadowRoot) {
|
548
|
-
const host = rootNode?.host;
|
549
|
-
if (host && host.hasAttribute(ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID)) {
|
550
|
-
templateID = host.getAttribute(ATTRIBUTE_UPDATER_INSERT_TEMPLATE_ID);
|
551
|
-
template = findDocumentTemplate(templateID, container);
|
552
|
-
if (template instanceof HTMLTemplateElement) {
|
553
|
-
return template;
|
554
|
-
}
|
555
|
-
}
|
556
|
-
}
|
557
|
-
|
558
|
-
return findDocumentTemplate(templateID, container);
|
559
|
-
}
|
560
|
-
|
561
516
|
/**
|
562
517
|
*
|
563
518
|
* @private
|
@@ -570,8 +525,7 @@ function internalTemplateLookUp(container, key, ref, path) {
|
|
570
525
|
* @throws {Error} no template was found with the specified key.
|
571
526
|
*/
|
572
527
|
function appendNewDocumentFragment(container, key, ref, path) {
|
573
|
-
|
574
|
-
let template = internalTemplateLookUp(container, key, ref, path);
|
528
|
+
let template = findDocumentTemplate(key, container);
|
575
529
|
|
576
530
|
let nodes = template.createDocumentFragment();
|
577
531
|
for (const [, node] of Object.entries(nodes.childNodes)) {
|
package/source/types/version.mjs
CHANGED
package/test/cases/monster.mjs
CHANGED