@schukai/monster 1.14.1 → 1.15.0
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/CHANGELOG +14 -0
- package/README.md +5 -5
- package/dist/modules/constants.js +2 -2
- package/dist/modules/constraints/abstract.js +2 -2
- package/dist/modules/constraints/abstractoperator.js +2 -2
- package/dist/modules/constraints/andoperator.js +2 -2
- package/dist/modules/constraints/invalid.js +2 -2
- package/dist/modules/constraints/isarray.js +2 -2
- package/dist/modules/constraints/isobject.js +2 -2
- package/dist/modules/constraints/namespace.js +1 -1
- package/dist/modules/constraints/oroperator.js +2 -2
- package/dist/modules/constraints/valid.js +2 -2
- package/dist/modules/data/buildmap.js +2 -2
- package/dist/modules/data/diff.js +2 -2
- package/dist/modules/data/extend.js +2 -2
- package/dist/modules/data/namespace.js +1 -1
- package/dist/modules/data/pathfinder.js +2 -2
- package/dist/modules/data/pipe.js +2 -2
- package/dist/modules/data/transformer.js +2 -2
- package/dist/modules/dom/assembler.js +2 -2
- package/dist/modules/dom/attributes.js +2 -2
- package/dist/modules/dom/constants.js +2 -2
- package/dist/modules/dom/customcontrol.js +2 -2
- package/dist/modules/dom/customelement.js +2 -2
- package/dist/modules/dom/events.js +2 -2
- package/dist/modules/dom/locale.js +2 -2
- package/dist/modules/dom/namespace.js +1 -1
- package/dist/modules/dom/template.js +2 -2
- package/dist/modules/dom/theme.js +2 -2
- package/dist/modules/dom/updater.js +2 -2
- package/dist/modules/dom/util.js +2 -2
- package/dist/modules/i18n/locale.js +2 -2
- package/dist/modules/i18n/namespace.js +1 -1
- package/dist/modules/i18n/provider.js +2 -2
- package/dist/modules/i18n/providers/fetch.js +2 -2
- package/dist/modules/i18n/providers/namespace.js +1 -1
- package/dist/modules/i18n/translations.js +2 -2
- package/dist/modules/logging/handler/console.js +2 -2
- package/dist/modules/logging/handler/namespace.js +1 -1
- package/dist/modules/logging/handler.js +2 -2
- package/dist/modules/logging/logentry.js +2 -2
- package/dist/modules/logging/logger.js +2 -2
- package/dist/modules/logging/namespace.js +1 -1
- package/dist/modules/math/namespace.js +1 -1
- package/dist/modules/math/random.js +2 -2
- package/dist/modules/monster.js +1 -1
- package/dist/modules/namespace.js +1 -1
- package/dist/modules/text/formatter.js +2 -2
- package/dist/modules/text/namespace.js +1 -1
- package/dist/modules/types/base.js +2 -2
- package/dist/modules/types/basewithoptions.js +2 -2
- package/dist/modules/types/global.js +2 -2
- package/dist/modules/types/id.js +2 -2
- package/dist/modules/types/is.js +2 -2
- package/dist/modules/types/namespace.js +1 -1
- package/dist/modules/types/observer.js +2 -2
- package/dist/modules/types/observerlist.js +2 -2
- package/dist/modules/types/proxyobserver.js +2 -2
- package/dist/modules/types/queue.js +2 -2
- package/dist/modules/types/randomid.js +2 -2
- package/dist/modules/types/stack.js +2 -2
- package/dist/modules/types/tokenlist.js +2 -2
- package/dist/modules/types/typeof.js +2 -2
- package/dist/modules/types/uniquequeue.js +2 -2
- package/dist/modules/types/validate.js +2 -2
- package/dist/modules/types/version.js +2 -2
- package/dist/modules/util/clone.js +2 -2
- package/dist/modules/util/comparator.js +2 -2
- package/dist/modules/util/freeze.js +2 -2
- package/dist/modules/util/namespace.js +1 -1
- package/dist/monster.dev.js +1096 -844
- package/dist/monster.dev.js.map +1 -1
- package/dist/monster.js +3 -3
- package/package.json +1 -1
- package/source/constants.js +6 -5
- package/source/constraints/abstract.js +2 -2
- package/source/constraints/abstractoperator.js +3 -3
- package/source/constraints/andoperator.js +7 -7
- package/source/constraints/invalid.js +6 -6
- package/source/constraints/isarray.js +6 -6
- package/source/constraints/isobject.js +6 -6
- package/source/constraints/oroperator.js +8 -8
- package/source/constraints/valid.js +6 -6
- package/source/data/buildmap.js +15 -15
- package/source/data/diff.js +6 -6
- package/source/data/extend.js +55 -13
- package/source/data/pathfinder.js +6 -7
- package/source/data/pipe.js +5 -5
- package/source/data/transformer.js +5 -6
- package/source/dom/assembler.js +5 -5
- package/source/dom/attributes.js +26 -26
- package/source/dom/constants.js +1 -2
- package/source/dom/customcontrol.js +14 -50
- package/source/dom/customelement.js +125 -28
- package/source/dom/events.js +7 -7
- package/source/dom/locale.js +5 -5
- package/source/dom/template.js +7 -7
- package/source/dom/theme.js +6 -6
- package/source/dom/updater.js +35 -13
- package/source/dom/util.js +9 -9
- package/source/i18n/locale.js +7 -7
- package/source/i18n/provider.js +5 -5
- package/source/i18n/providers/fetch.js +10 -10
- package/source/i18n/translations.js +5 -5
- package/source/logging/handler/console.js +4 -4
- package/source/logging/handler.js +4 -4
- package/source/logging/logentry.js +4 -4
- package/source/logging/logger.js +4 -4
- package/source/math/random.js +5 -5
- package/source/namespace.js +1 -1
- package/source/text/formatter.js +4 -5
- package/source/types/base.js +4 -5
- package/source/types/basewithoptions.js +9 -8
- package/source/types/global.js +6 -6
- package/source/types/id.js +6 -6
- package/source/types/is.js +22 -22
- package/source/types/observer.js +5 -5
- package/source/types/observerlist.js +4 -4
- package/source/types/proxyobserver.js +32 -26
- package/source/types/queue.js +13 -7
- package/source/types/randomid.js +5 -5
- package/source/types/stack.js +11 -4
- package/source/types/tokenlist.js +4 -4
- package/source/types/typeof.js +5 -5
- package/source/types/uniquequeue.js +11 -4
- package/source/types/validate.js +22 -22
- package/source/types/version.js +9 -9
- package/source/util/clone.js +4 -4
- package/source/util/comparator.js +6 -6
- package/source/util/freeze.js +4 -4
- package/test/cases/data/extend.js +66 -13
- package/test/cases/dom/customcontrol.js +16 -2
- package/test/cases/dom/customelement.js +64 -6
- package/test/cases/monster.js +1 -1
- package/test/cases/types/proxyobserver.js +9 -0
- package/test/web/monster-dev.html +3 -3
- package/test/web/monster.html +2 -2
- package/test/web/test.html +3 -3
- package/test/web/tests.js +3 -3
|
@@ -3,23 +3,26 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {Monster, assignToNamespace} from '../namespace.js';
|
|
7
|
+
import {Observer} from "../types/observer.js";
|
|
8
|
+
import {ProxyObserver} from "../types/proxyobserver.js";
|
|
9
|
+
import { Updater} from "./updater.js";
|
|
8
10
|
import {extend} from "../data/extend.js";
|
|
11
|
+
import {clone} from "../util/clone.js";
|
|
9
12
|
import {Pathfinder} from "../data/pathfinder.js";
|
|
10
13
|
import {ATTRIBUTE_OPTIONS, OBJECTLINK_KEY_UPDATER} from "./constants.js";
|
|
11
14
|
import {findDocumentTemplate, Template} from "./template.js";
|
|
12
|
-
import {addToObjectLink,getLinkedObjects, hasObjectLink} from "./attributes.js";
|
|
15
|
+
import {addToObjectLink, getLinkedObjects, hasObjectLink} from "./attributes.js";
|
|
13
16
|
import {getGlobalObject} from "../types/global.js";
|
|
14
17
|
import {validateFunction, validateObject} from "../types/validate.js";
|
|
15
18
|
import {isString} from "../types/is.js";
|
|
16
|
-
import {
|
|
19
|
+
import {PROPERTY_KEY_INTERNALDATA} from "../constants.js";
|
|
17
20
|
|
|
18
21
|
/**
|
|
19
22
|
* @private
|
|
20
23
|
* @type {symbol}
|
|
21
24
|
*/
|
|
22
|
-
const
|
|
25
|
+
const internalDataSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);
|
|
23
26
|
|
|
24
27
|
/**
|
|
25
28
|
* @private
|
|
@@ -37,7 +40,6 @@ const initMethodSymbol = Symbol('initMethodSymbol');
|
|
|
37
40
|
*/
|
|
38
41
|
const assembleMethodSymbol = Symbol('assembleMethodSymbol');
|
|
39
42
|
|
|
40
|
-
|
|
41
43
|
/**
|
|
42
44
|
* To define a new HTML element we need the power of CustomElement
|
|
43
45
|
*
|
|
@@ -48,7 +50,7 @@ const assembleMethodSymbol = Symbol('assembleMethodSymbol');
|
|
|
48
50
|
*
|
|
49
51
|
* ```
|
|
50
52
|
* <script type="module">
|
|
51
|
-
* import {CustomElement} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
53
|
+
* import {CustomElement} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/customelement.js';
|
|
52
54
|
* console.log(new Monster.DOM.CustomElement())
|
|
53
55
|
* </script>
|
|
54
56
|
* ```
|
|
@@ -57,7 +59,7 @@ const assembleMethodSymbol = Symbol('assembleMethodSymbol');
|
|
|
57
59
|
*
|
|
58
60
|
* ```
|
|
59
61
|
* <script type="module">
|
|
60
|
-
* import {CustomElement} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
62
|
+
* import {CustomElement} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/customelement.js';
|
|
61
63
|
* console.log(new CustomElement())
|
|
62
64
|
* </script>
|
|
63
65
|
* ```
|
|
@@ -155,10 +157,41 @@ class CustomElement extends HTMLElement {
|
|
|
155
157
|
*/
|
|
156
158
|
constructor() {
|
|
157
159
|
super();
|
|
158
|
-
this[
|
|
160
|
+
this[internalDataSymbol] = new ProxyObserver({'options': extend({}, this.defaults, getOptionsFromAttributes.call(this))});
|
|
161
|
+
initOptionObserver.call(this);
|
|
159
162
|
this[initMethodSymbol]();
|
|
160
163
|
}
|
|
161
164
|
|
|
165
|
+
/**
|
|
166
|
+
* attach a new observer
|
|
167
|
+
*
|
|
168
|
+
* @param {Observer} observer
|
|
169
|
+
* @returns {CustomElement}
|
|
170
|
+
*/
|
|
171
|
+
attachObserver(observer) {
|
|
172
|
+
this[internalDataSymbol].attachObserver(observer)
|
|
173
|
+
return this;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* detach a observer
|
|
178
|
+
*
|
|
179
|
+
* @param {Observer} observer
|
|
180
|
+
* @returns {CustomElement}
|
|
181
|
+
*/
|
|
182
|
+
detachObserver(observer) {
|
|
183
|
+
this[internalDataSymbol].detachObserver(observer)
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* @param {Observer} observer
|
|
189
|
+
* @returns {ProxyObserver}
|
|
190
|
+
*/
|
|
191
|
+
containsObserver(observer) {
|
|
192
|
+
return this[internalDataSymbol].containsObserver(observer)
|
|
193
|
+
}
|
|
194
|
+
|
|
162
195
|
/**
|
|
163
196
|
* | option | description |
|
|
164
197
|
* |----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
@@ -202,7 +235,7 @@ class CustomElement extends HTMLElement {
|
|
|
202
235
|
let value;
|
|
203
236
|
|
|
204
237
|
try {
|
|
205
|
-
value = new Pathfinder(this[
|
|
238
|
+
value = new Pathfinder(this[internalDataSymbol].getRealSubject()['options']).getVia(path);
|
|
206
239
|
} catch (e) {
|
|
207
240
|
|
|
208
241
|
}
|
|
@@ -220,20 +253,27 @@ class CustomElement extends HTMLElement {
|
|
|
220
253
|
* @since 1.14.0
|
|
221
254
|
*/
|
|
222
255
|
setOption(path, value) {
|
|
256
|
+
new Pathfinder(this[internalDataSymbol].getSubject()['options']).setVia(path, value);
|
|
257
|
+
//this[internalDataSymbol].notifyObservers();
|
|
258
|
+
return this;
|
|
259
|
+
}
|
|
223
260
|
|
|
224
|
-
|
|
225
|
-
|
|
261
|
+
/**
|
|
262
|
+
* @since 1.15.0
|
|
263
|
+
* @param {string|object} options
|
|
264
|
+
* @return {CustomElement}
|
|
265
|
+
*/
|
|
266
|
+
setOptions(options) {
|
|
226
267
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
// reset value so that a change occurs
|
|
230
|
-
new Pathfinder(this[optionsSymbol]).setVia(path, false);
|
|
231
|
-
new Pathfinder(updater.getSubject()).setVia(path, value);
|
|
232
|
-
}
|
|
268
|
+
if (isString(options)) {
|
|
269
|
+
options = parseOptionsJSON(options)
|
|
233
270
|
}
|
|
234
271
|
|
|
235
|
-
|
|
236
|
-
|
|
272
|
+
const self = this;
|
|
273
|
+
extend(self[internalDataSymbol].getSubject()['options'], self.defaults, options);
|
|
274
|
+
//this[internalDataSymbol].notifyObservers();
|
|
275
|
+
|
|
276
|
+
return self;
|
|
237
277
|
}
|
|
238
278
|
|
|
239
279
|
/**
|
|
@@ -275,8 +315,8 @@ class CustomElement extends HTMLElement {
|
|
|
275
315
|
for (const [, element] of Object.entries(elements)) {
|
|
276
316
|
|
|
277
317
|
if (!(element instanceof HTMLElement)) continue;
|
|
278
|
-
|
|
279
|
-
const u = new Updater(element,
|
|
318
|
+
if ((element instanceof HTMLTemplateElement)) continue;
|
|
319
|
+
const u = new Updater(element, clone(self[internalDataSymbol].getRealSubject()['options']))
|
|
280
320
|
updater.add(u);
|
|
281
321
|
|
|
282
322
|
u.run().then(() => {
|
|
@@ -324,22 +364,39 @@ class CustomElement extends HTMLElement {
|
|
|
324
364
|
|
|
325
365
|
}
|
|
326
366
|
|
|
367
|
+
/**
|
|
368
|
+
* This method determines which attributes are to be monitored by `attributeChangedCallback()`.
|
|
369
|
+
*
|
|
370
|
+
* @return {string[]}
|
|
371
|
+
* @since 1.15.0
|
|
372
|
+
*/
|
|
373
|
+
static get observedAttributes() {
|
|
374
|
+
return [ATTRIBUTE_OPTIONS];
|
|
375
|
+
}
|
|
376
|
+
|
|
327
377
|
/**
|
|
328
378
|
* Called when an observed attribute has been added, removed, updated, or replaced. Also called for initial
|
|
329
|
-
* values when an element is created by the parser, or upgraded. Note: only attributes listed in the observedAttributes
|
|
379
|
+
* values when an element is created by the parser, or upgraded. Note: only attributes listed in the observedAttributes
|
|
380
|
+
* property will receive this callback.
|
|
330
381
|
*
|
|
331
382
|
* @param {string} attrName
|
|
332
383
|
* @param {string} oldVal
|
|
333
384
|
* @param {string} newVal
|
|
334
385
|
* @return {void}
|
|
335
|
-
* @since 1.
|
|
386
|
+
* @since 1.15.0
|
|
336
387
|
*/
|
|
337
388
|
attributeChangedCallback(attrName, oldVal, newVal) {
|
|
389
|
+
const self = this;
|
|
390
|
+
|
|
391
|
+
if (attrName === ATTRIBUTE_OPTIONS) {
|
|
392
|
+
self.setOptions(newVal);
|
|
393
|
+
}
|
|
394
|
+
|
|
338
395
|
}
|
|
339
396
|
|
|
340
397
|
/**
|
|
341
398
|
* There is no check on the name by this class. the developer is responsible for assigning an appropriate tag.
|
|
342
|
-
* if the name is not valid, registerCustomElement() will issue an
|
|
399
|
+
* if the name is not valid, registerCustomElement() will issue an error
|
|
343
400
|
*
|
|
344
401
|
* @link https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
|
|
345
402
|
* @return {string}
|
|
@@ -378,6 +435,33 @@ class CustomElement extends HTMLElement {
|
|
|
378
435
|
|
|
379
436
|
}
|
|
380
437
|
|
|
438
|
+
/**
|
|
439
|
+
* @since 1.15.0
|
|
440
|
+
* @private
|
|
441
|
+
*/
|
|
442
|
+
function initOptionObserver() {
|
|
443
|
+
const self = this;
|
|
444
|
+
|
|
445
|
+
self.attachObserver(new Observer(function () {
|
|
446
|
+
|
|
447
|
+
// not initialised
|
|
448
|
+
if (!hasObjectLink(self, Symbol.for(OBJECTLINK_KEY_UPDATER))) {
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
// inform every element
|
|
452
|
+
const updaters = getLinkedObjects(self, Symbol.for(OBJECTLINK_KEY_UPDATER));
|
|
453
|
+
|
|
454
|
+
for (const list of updaters) {
|
|
455
|
+
for (const updater of list) {
|
|
456
|
+
let d = clone(self[internalDataSymbol].getRealSubject()['options']);
|
|
457
|
+
Object.assign(updater.getSubject(), d);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
}));
|
|
462
|
+
|
|
463
|
+
}
|
|
464
|
+
|
|
381
465
|
/**
|
|
382
466
|
* @private
|
|
383
467
|
* @return {object}
|
|
@@ -386,11 +470,24 @@ class CustomElement extends HTMLElement {
|
|
|
386
470
|
function getOptionsFromAttributes() {
|
|
387
471
|
if (this.hasAttribute(ATTRIBUTE_OPTIONS)) {
|
|
388
472
|
try {
|
|
389
|
-
|
|
473
|
+
return parseOptionsJSON(this.getAttribute(ATTRIBUTE_OPTIONS))
|
|
474
|
+
} catch (e) {
|
|
475
|
+
throw new Error('the options attribute ' + ATTRIBUTE_OPTIONS + ' does not contain a valid json definition (actual: ' + this.getAttribute(ATTRIBUTE_OPTIONS) + ').');
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
return {};
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
function parseOptionsJSON(data) {
|
|
484
|
+
if (isString(data)) {
|
|
485
|
+
try {
|
|
486
|
+
let obj = JSON.parse(data);
|
|
390
487
|
validateObject(obj);
|
|
391
488
|
return obj;
|
|
392
489
|
} catch (e) {
|
|
393
|
-
throw new Error('the options
|
|
490
|
+
throw new Error('the options does not contain a valid json definition (actual: ' + data + ').');
|
|
394
491
|
}
|
|
395
492
|
}
|
|
396
493
|
|
|
@@ -476,5 +573,5 @@ function registerCustomElement(element) {
|
|
|
476
573
|
getGlobalObject('customElements').define(element.getTag(), element);
|
|
477
574
|
}
|
|
478
575
|
|
|
479
|
-
|
|
576
|
+
assignToNamespace('Monster.DOM', CustomElement, registerCustomElement);
|
|
480
577
|
export {Monster, registerCustomElement, CustomElement, initMethodSymbol, assembleMethodSymbol}
|
package/source/dom/events.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {Monster, assignToNamespace} from '../namespace.js';
|
|
7
|
+
import {validateInstance, validateString} from "../types/validate.js";
|
|
8
8
|
import {findClosestByAttribute} from "./attributes.js";
|
|
9
9
|
import {getDocument} from "./util.js";
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ import {getDocument} from "./util.js";
|
|
|
13
13
|
*
|
|
14
14
|
* ```
|
|
15
15
|
* <script type="module">
|
|
16
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
16
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/events.js';
|
|
17
17
|
* console.log(new Monster.DOM.fireEvent())
|
|
18
18
|
* </script>
|
|
19
19
|
* ```
|
|
@@ -22,7 +22,7 @@ import {getDocument} from "./util.js";
|
|
|
22
22
|
*
|
|
23
23
|
* ```
|
|
24
24
|
* <script type="module">
|
|
25
|
-
* import {fireEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
25
|
+
* import {fireEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/events.js';
|
|
26
26
|
* console.log(fireEvent())
|
|
27
27
|
* </script>
|
|
28
28
|
* ```
|
|
@@ -71,7 +71,7 @@ function fireEvent(element, type) {
|
|
|
71
71
|
*
|
|
72
72
|
* ```
|
|
73
73
|
* <script type="module">
|
|
74
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
74
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/events.js';
|
|
75
75
|
* console.log(new Monster.DOM.findTargetElementFromEvent())
|
|
76
76
|
* </script>
|
|
77
77
|
* ```
|
|
@@ -80,7 +80,7 @@ function fireEvent(element, type) {
|
|
|
80
80
|
*
|
|
81
81
|
* ```
|
|
82
82
|
* <script type="module">
|
|
83
|
-
* import {findTargetElementFromEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
83
|
+
* import {findTargetElementFromEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/events.js';
|
|
84
84
|
* console.log(findTargetElementFromEvent())
|
|
85
85
|
* </script>
|
|
86
86
|
* ```
|
|
@@ -113,5 +113,5 @@ function findTargetElementFromEvent(event, attributeName, attributeValue) {
|
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
assignToNamespace('Monster.DOM', findTargetElementFromEvent, fireEvent);
|
|
117
117
|
export {Monster, findTargetElementFromEvent, fireEvent}
|
package/source/dom/locale.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {Monster, assignToNamespace} from '../namespace.js';
|
|
7
|
+
import { parseLocale} from "../i18n/locale.js";
|
|
8
8
|
import {getDocument} from "./util.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -20,7 +20,7 @@ const DEFAULT_LANGUAGE = 'en';
|
|
|
20
20
|
*
|
|
21
21
|
* ```
|
|
22
22
|
* <script type="module">
|
|
23
|
-
* import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
23
|
+
* import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/locale.js';
|
|
24
24
|
* console.log(new Monster.DOM.getLocaleOfDocument())
|
|
25
25
|
* </script>
|
|
26
26
|
* ```
|
|
@@ -29,7 +29,7 @@ const DEFAULT_LANGUAGE = 'en';
|
|
|
29
29
|
*
|
|
30
30
|
* ```
|
|
31
31
|
* <script type="module">
|
|
32
|
-
* import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
32
|
+
* import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/locale.js';
|
|
33
33
|
* console.log(new getLocaleOfDocument())
|
|
34
34
|
* </script>
|
|
35
35
|
* ```
|
|
@@ -55,5 +55,5 @@ function getLocaleOfDocument() {
|
|
|
55
55
|
return parseLocale(DEFAULT_LANGUAGE);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
assignToNamespace('Monster.DOM', getLocaleOfDocument);
|
|
59
59
|
export {Monster, getLocaleOfDocument}
|
package/source/dom/template.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {Monster, assignToNamespace} from '../namespace.js';
|
|
7
|
+
import { Base} from '../types/base.js';
|
|
8
8
|
import {validateString} from "../types/validate.js";
|
|
9
9
|
import {getGlobalFunction, getGlobalObject} from '../types/global.js';
|
|
10
10
|
import {validateInstance} from "../types/validate.js";
|
|
@@ -15,7 +15,7 @@ import {getDocumentTheme} from "./theme.js";
|
|
|
15
15
|
*
|
|
16
16
|
* ```
|
|
17
17
|
* <script type="module">
|
|
18
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
18
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/template.js';
|
|
19
19
|
* console.log(new Monster.DOM.Template())
|
|
20
20
|
* </script>
|
|
21
21
|
* ```
|
|
@@ -24,7 +24,7 @@ import {getDocumentTheme} from "./theme.js";
|
|
|
24
24
|
*
|
|
25
25
|
* ```
|
|
26
26
|
* <script type="module">
|
|
27
|
-
* import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
27
|
+
* import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/template.js';
|
|
28
28
|
* console.log(new Template())
|
|
29
29
|
* </script>
|
|
30
30
|
* ```
|
|
@@ -74,7 +74,7 @@ class Template extends Base {
|
|
|
74
74
|
*
|
|
75
75
|
* ```
|
|
76
76
|
* <script type="module">
|
|
77
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
77
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/template.js';
|
|
78
78
|
* console.log(Monster.DOM.findDocumentTemplate())
|
|
79
79
|
* </script>
|
|
80
80
|
* ```
|
|
@@ -83,7 +83,7 @@ class Template extends Base {
|
|
|
83
83
|
*
|
|
84
84
|
* ```
|
|
85
85
|
* <script type="module">
|
|
86
|
-
* import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
86
|
+
* import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/template.js';
|
|
87
87
|
* console.log(findDocumentTemplate())
|
|
88
88
|
* </script>
|
|
89
89
|
* ```
|
|
@@ -127,7 +127,7 @@ function findDocumentTemplate(id, root) {
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
assignToNamespace('Monster.DOM', Template, findDocumentTemplate);
|
|
131
131
|
export {Monster, Template, findDocumentTemplate}
|
|
132
132
|
|
|
133
133
|
|
package/source/dom/theme.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {Monster, assignToNamespace} from '../namespace.js';
|
|
7
|
+
import { Base} from '../types/base.js';
|
|
8
8
|
import {validateString} from "../types/validate.js";
|
|
9
9
|
import {getGlobalObject} from '../types/global.js';
|
|
10
10
|
import {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from "./constants.js";
|
|
@@ -16,7 +16,7 @@ import {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from "./constants.js";
|
|
|
16
16
|
*
|
|
17
17
|
* ```
|
|
18
18
|
* <script type="module">
|
|
19
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
19
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/theme.js';
|
|
20
20
|
* console.log(new Monster.DOM.Theme())
|
|
21
21
|
* </script>
|
|
22
22
|
* ```
|
|
@@ -25,14 +25,14 @@ import {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from "./constants.js";
|
|
|
25
25
|
*
|
|
26
26
|
* ```
|
|
27
27
|
* <script type="module">
|
|
28
|
-
* import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
28
|
+
* import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/theme.js';
|
|
29
29
|
* console.log(new Theme())
|
|
30
30
|
* </script>
|
|
31
31
|
* ```
|
|
32
32
|
*
|
|
33
33
|
* @example
|
|
34
34
|
*
|
|
35
|
-
* import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
35
|
+
* import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/theme.js';
|
|
36
36
|
*
|
|
37
37
|
* const theme = getDocumentTheme();
|
|
38
38
|
* console.log(theme.getName());
|
|
@@ -96,5 +96,5 @@ function getDocumentTheme() {
|
|
|
96
96
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
assignToNamespace('Monster.DOM', Theme, getDocumentTheme);
|
|
100
100
|
export {Monster, Theme, getDocumentTheme}
|
package/source/dom/updater.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @author schukai GmbH
|
|
5
|
+
*/
|
|
6
|
+
import {Monster, assignToNamespace} from '../namespace.js';
|
|
3
7
|
import {Pathfinder} from "../data/pathfinder.js";
|
|
4
8
|
import {Pipe} from "../data/pipe.js";
|
|
5
|
-
import {Base
|
|
6
|
-
import {isInstance, isArray} from "../types/is.js";
|
|
9
|
+
import {Base} from "../types/base.js";
|
|
10
|
+
import {isInstance, isArray, isIterable} from "../types/is.js";
|
|
7
11
|
import {Observer} from "../types/observer.js";
|
|
8
12
|
import {ProxyObserver} from "../types/proxyobserver.js";
|
|
9
13
|
import {validateInstance, validateArray} from "../types/validate.js";
|
|
@@ -20,10 +24,6 @@ import {
|
|
|
20
24
|
import {findDocumentTemplate} from "./template.js";
|
|
21
25
|
import {getDocument} from "./util.js";
|
|
22
26
|
|
|
23
|
-
/**
|
|
24
|
-
* @author schukai GmbH
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* The updater class connects an object with the dom. in this way, structures and contents in the DOM can be programmatically adapted via attributes.
|
|
@@ -34,7 +34,7 @@ import {getDocument} from "./util.js";
|
|
|
34
34
|
*
|
|
35
35
|
* ```
|
|
36
36
|
* <script type="module">
|
|
37
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
37
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/updater.js';
|
|
38
38
|
* console.log(new Monster.DOM.Updater())
|
|
39
39
|
* </script>
|
|
40
40
|
* ```
|
|
@@ -43,14 +43,14 @@ import {getDocument} from "./util.js";
|
|
|
43
43
|
*
|
|
44
44
|
* ```
|
|
45
45
|
* <script type="module">
|
|
46
|
-
* import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
46
|
+
* import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/updater.js';
|
|
47
47
|
* console.log(new Updater())
|
|
48
48
|
* </script>
|
|
49
49
|
* ```
|
|
50
50
|
*
|
|
51
51
|
* @example
|
|
52
52
|
*
|
|
53
|
-
* import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
53
|
+
* import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/updater.js';
|
|
54
54
|
*
|
|
55
55
|
* // First we prepare the html document.
|
|
56
56
|
* // This is done here via script, but can also be inserted into the document as pure html.
|
|
@@ -102,6 +102,7 @@ class Updater extends Base {
|
|
|
102
102
|
this.element = validateInstance(element, HTMLElement);
|
|
103
103
|
|
|
104
104
|
if (subject === undefined) subject = {}
|
|
105
|
+
let a = subject;
|
|
105
106
|
if (!isInstance(subject, ProxyObserver)) {
|
|
106
107
|
subject = new ProxyObserver(subject);
|
|
107
108
|
}
|
|
@@ -114,7 +115,9 @@ class Updater extends Base {
|
|
|
114
115
|
* @type {object}
|
|
115
116
|
*/
|
|
116
117
|
this.subject = subject.attachObserver(new Observer(() => {
|
|
118
|
+
|
|
117
119
|
const s = this.subject.getRealSubject();
|
|
120
|
+
|
|
118
121
|
const diff = Diff(this.last, s)
|
|
119
122
|
this.last = clone(s);
|
|
120
123
|
|
|
@@ -174,6 +177,26 @@ class Updater extends Base {
|
|
|
174
177
|
|
|
175
178
|
}
|
|
176
179
|
|
|
180
|
+
// /**
|
|
181
|
+
// *
|
|
182
|
+
// * @param {string} path
|
|
183
|
+
// * @param {*} value
|
|
184
|
+
// * @param {boolean} notifyAnyway
|
|
185
|
+
// * @return {Updater}
|
|
186
|
+
// * @since 1.15.0
|
|
187
|
+
// */
|
|
188
|
+
// setVia(path, value, notifyAnyway) {
|
|
189
|
+
// if(isBoolean(notifyAnyway)&¬ifyAnyway===true) {
|
|
190
|
+
// // the key __init__has no further meaning and is only
|
|
191
|
+
// // used to create the diff for empty objects.
|
|
192
|
+
// new Pathfinder(this.last).setVia(path, {'__init__': true});
|
|
193
|
+
//
|
|
194
|
+
// }
|
|
195
|
+
//
|
|
196
|
+
// new Pathfinder(this.subject.getSubject()).setVia(path, value);
|
|
197
|
+
// return this;
|
|
198
|
+
// }
|
|
199
|
+
|
|
177
200
|
/**
|
|
178
201
|
* Let the magic begin
|
|
179
202
|
*
|
|
@@ -318,10 +341,9 @@ function getControlEventHandler() {
|
|
|
318
341
|
|
|
319
342
|
|
|
320
343
|
// values from customelements
|
|
321
|
-
} else if ((element?.constructor?.prototype && !!Object.getOwnPropertyDescriptor(element.constructor.prototype, 'value')?.['get'])|| element.hasOwnProperty('value')) {
|
|
344
|
+
} else if ((element?.constructor?.prototype && !!Object.getOwnPropertyDescriptor(element.constructor.prototype, 'value')?.['get']) || element.hasOwnProperty('value')) {
|
|
322
345
|
value = element?.['value'];
|
|
323
346
|
} else {
|
|
324
|
-
console.log(element);
|
|
325
347
|
throw new Error("unsupported object");
|
|
326
348
|
}
|
|
327
349
|
|
|
@@ -416,7 +438,7 @@ function insertElement(change) {
|
|
|
416
438
|
insertPoint = containerElement.lastChild;
|
|
417
439
|
}
|
|
418
440
|
|
|
419
|
-
if (!
|
|
441
|
+
if (!isIterable(value)) {
|
|
420
442
|
throw new Error('the value is not iterable');
|
|
421
443
|
}
|
|
422
444
|
|
|
@@ -728,5 +750,5 @@ function handleInputControlAttributeUpdate(element, name, value) {
|
|
|
728
750
|
|
|
729
751
|
}
|
|
730
752
|
|
|
731
|
-
|
|
753
|
+
assignToNamespace('Monster.DOM', Updater);
|
|
732
754
|
export {Monster, Updater}
|
package/source/dom/util.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {Monster, assignToNamespace} from '../namespace.js';
|
|
7
|
+
import { getGlobal} from "../types/global.js";
|
|
8
8
|
import {validateString} from "../types/validate.js";
|
|
9
9
|
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ import {validateString} from "../types/validate.js";
|
|
|
13
13
|
*
|
|
14
14
|
* ```
|
|
15
15
|
* <script type="module">
|
|
16
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
16
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/util.js';
|
|
17
17
|
* console.log(Monster.DOM.getDocument())
|
|
18
18
|
* </script>
|
|
19
19
|
* ```
|
|
@@ -22,7 +22,7 @@ import {validateString} from "../types/validate.js";
|
|
|
22
22
|
*
|
|
23
23
|
* ```
|
|
24
24
|
* <script type="module">
|
|
25
|
-
* import {getDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
25
|
+
* import {getDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/util.js';
|
|
26
26
|
* console.log(getDocument())
|
|
27
27
|
* </script>
|
|
28
28
|
* ```
|
|
@@ -74,7 +74,7 @@ function getDocument() {
|
|
|
74
74
|
*
|
|
75
75
|
* ```
|
|
76
76
|
* <script type="module">
|
|
77
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
77
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/util.js';
|
|
78
78
|
* console.log(Monster.DOM.getWindow())
|
|
79
79
|
* </script>
|
|
80
80
|
* ```
|
|
@@ -83,7 +83,7 @@ function getDocument() {
|
|
|
83
83
|
*
|
|
84
84
|
* ```
|
|
85
85
|
* <script type="module">
|
|
86
|
-
* import {getWindow} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
86
|
+
* import {getWindow} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/util.js';
|
|
87
87
|
* console.log(getWindow(null))
|
|
88
88
|
* </script>
|
|
89
89
|
* ```
|
|
@@ -140,7 +140,7 @@ function getWindow() {
|
|
|
140
140
|
*
|
|
141
141
|
* ```
|
|
142
142
|
* <script type="module">
|
|
143
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
143
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/util.js';
|
|
144
144
|
* console.log(Monster.DOM.getDocumentFragmentFromString())
|
|
145
145
|
* </script>
|
|
146
146
|
* ```
|
|
@@ -149,7 +149,7 @@ function getWindow() {
|
|
|
149
149
|
*
|
|
150
150
|
* ```
|
|
151
151
|
* <script type="module">
|
|
152
|
-
* import {getDocumentFragmentFromString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
152
|
+
* import {getDocumentFragmentFromString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.0/dist/modules/dom/util.js';
|
|
153
153
|
* console.log(getDocumentFragmentFromString('<div></div>'))
|
|
154
154
|
* </script>
|
|
155
155
|
* ```
|
|
@@ -199,5 +199,5 @@ function getDocumentFragmentFromString(html) {
|
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
|
|
202
|
-
|
|
202
|
+
assignToNamespace('Monster.DOM', getWindow, getDocument, getDocumentFragmentFromString);
|
|
203
203
|
export {Monster, getWindow, getDocument, getDocumentFragmentFromString}
|