@schukai/monster 1.13.0 → 1.15.2
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 +46 -1
- 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 -0
- 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 +2 -2
- package/dist/modules/namespace.js +2 -2
- 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 +8622 -7709
- package/dist/monster.dev.js.map +1 -1
- package/dist/monster.js +2 -9
- package/package.json +1 -1
- package/source/constants.js +7 -6
- package/source/constraints/abstract.js +2 -2
- package/source/constraints/abstractoperator.js +4 -4
- package/source/constraints/andoperator.js +8 -8
- package/source/constraints/invalid.js +6 -6
- package/source/constraints/isarray.js +7 -7
- package/source/constraints/isobject.js +7 -7
- package/source/constraints/namespace.js +2 -2
- package/source/constraints/oroperator.js +8 -8
- package/source/constraints/valid.js +7 -7
- package/source/data/buildmap.js +15 -15
- package/source/data/diff.js +9 -9
- package/source/data/extend.js +55 -13
- package/source/data/namespace.js +2 -2
- package/source/data/pathfinder.js +13 -14
- package/source/data/pipe.js +8 -8
- package/source/data/transformer.js +11 -11
- package/source/dom/assembler.js +7 -7
- package/source/dom/attributes.js +89 -46
- package/source/dom/constants.js +9 -2
- package/source/dom/customcontrol.js +299 -0
- package/source/dom/customelement.js +181 -66
- package/source/dom/events.js +58 -8
- package/source/dom/locale.js +5 -5
- package/source/dom/namespace.js +2 -2
- package/source/dom/template.js +24 -19
- package/source/dom/theme.js +8 -9
- package/source/dom/updater.js +46 -24
- package/source/dom/util.js +10 -10
- package/source/i18n/locale.js +7 -7
- package/source/i18n/namespace.js +1 -1
- package/source/i18n/provider.js +6 -6
- package/source/i18n/providers/fetch.js +10 -10
- package/source/i18n/translations.js +5 -5
- package/source/logging/handler/console.js +5 -5
- package/source/logging/handler/namespace.js +1 -1
- package/source/logging/handler.js +8 -8
- package/source/logging/logentry.js +5 -5
- package/source/logging/logger.js +5 -5
- package/source/logging/namespace.js +2 -2
- package/source/math/namespace.js +2 -2
- package/source/math/random.js +5 -5
- package/source/monster.js +48 -44
- package/source/namespace.js +2 -2
- package/source/text/formatter.js +6 -7
- package/source/text/namespace.js +1 -1
- package/source/types/base.js +4 -5
- package/source/types/basewithoptions.js +10 -9
- package/source/types/global.js +7 -7
- package/source/types/id.js +7 -7
- package/source/types/is.js +22 -22
- package/source/types/namespace.js +2 -2
- package/source/types/observer.js +7 -7
- 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 +6 -6
- package/source/types/stack.js +11 -4
- package/source/types/tokenlist.js +9 -9
- package/source/types/typeof.js +5 -5
- package/source/types/uniquequeue.js +14 -7
- package/source/types/validate.js +27 -27
- package/source/types/version.js +9 -9
- package/source/util/clone.js +6 -6
- package/source/util/comparator.js +7 -7
- package/source/util/freeze.js +7 -7
- package/source/util/namespace.js +2 -2
- package/test/cases/data/extend.js +66 -13
- package/test/cases/dom/attributes.js +56 -1
- package/test/cases/dom/customcontrol.js +264 -0
- package/test/cases/dom/customelement.js +112 -51
- package/test/cases/dom/events.js +32 -14
- package/test/cases/dom/template.js +40 -1
- package/test/cases/monster.js +1 -1
- package/test/cases/types/proxyobserver.js +9 -0
- package/test/util/jsdom.js +3 -0
- package/test/web/import.js +1 -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
package/source/dom/events.js
CHANGED
|
@@ -3,16 +3,17 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
|
7
|
+
import {validateInstance, validateString} from "../types/validate.js";
|
|
8
|
+
import {findClosestByAttribute} from "./attributes.js";
|
|
8
9
|
import {getDocument} from "./util.js";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
|
-
* You can call the
|
|
12
|
+
* You can call the function via the monster namespace `new Monster.DOM.fireEvent()`.
|
|
12
13
|
*
|
|
13
14
|
* ```
|
|
14
15
|
* <script type="module">
|
|
15
|
-
* import {
|
|
16
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/events.js';
|
|
16
17
|
* console.log(new Monster.DOM.fireEvent())
|
|
17
18
|
* </script>
|
|
18
19
|
* ```
|
|
@@ -21,7 +22,7 @@ import {getDocument} from "./util.js";
|
|
|
21
22
|
*
|
|
22
23
|
* ```
|
|
23
24
|
* <script type="module">
|
|
24
|
-
* import {
|
|
25
|
+
* import {fireEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/events.js';
|
|
25
26
|
* console.log(fireEvent())
|
|
26
27
|
* </script>
|
|
27
28
|
* ```
|
|
@@ -49,7 +50,7 @@ function fireEvent(element, type) {
|
|
|
49
50
|
bubbles: true,
|
|
50
51
|
cancelable: true,
|
|
51
52
|
});
|
|
52
|
-
|
|
53
|
+
|
|
53
54
|
element.dispatchEvent(event);
|
|
54
55
|
|
|
55
56
|
} else if (element instanceof HTMLCollection || element instanceof NodeList) {
|
|
@@ -62,6 +63,55 @@ function fireEvent(element, type) {
|
|
|
62
63
|
|
|
63
64
|
}
|
|
64
65
|
|
|
66
|
+
/**
|
|
67
|
+
* This function gets the path `Event.composedPath()` from an event and tries to find the next element
|
|
68
|
+
* up the tree `element.closest()` with the attribute and value. If no value is specified, only the attribute is searched.
|
|
69
|
+
*
|
|
70
|
+
* You can call the function via the monster namespace `new Monster.DOM.findTargetElementFromEvent()`.
|
|
71
|
+
*
|
|
72
|
+
* ```
|
|
73
|
+
* <script type="module">
|
|
74
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/events.js';
|
|
75
|
+
* console.log(new Monster.DOM.findTargetElementFromEvent())
|
|
76
|
+
* </script>
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* Alternatively, you can also integrate this function individually.
|
|
80
|
+
*
|
|
81
|
+
* ```
|
|
82
|
+
* <script type="module">
|
|
83
|
+
* import {findTargetElementFromEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/events.js';
|
|
84
|
+
* console.log(findTargetElementFromEvent())
|
|
85
|
+
* </script>
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* @since 1.14.0
|
|
89
|
+
* @param {Event} event
|
|
90
|
+
* @param {string} attributeName
|
|
91
|
+
* @param {string|null} attributeValue
|
|
92
|
+
* @throws {Error} unsupported event
|
|
93
|
+
* @memberOf Monster/DOM
|
|
94
|
+
* @throws {TypeError} value is not a string
|
|
95
|
+
* @throws {TypeError} value is not an instance of HTMLElement
|
|
96
|
+
*/
|
|
97
|
+
function findTargetElementFromEvent(event, attributeName, attributeValue) {
|
|
98
|
+
validateInstance(event, Event);
|
|
99
|
+
|
|
100
|
+
if (typeof event.composedPath !== 'function') {
|
|
101
|
+
throw new Error('unsupported event');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const path = event.composedPath();
|
|
105
|
+
const element = path?.[0];
|
|
106
|
+
|
|
107
|
+
if (element instanceof HTMLElement) {
|
|
108
|
+
return findClosestByAttribute(element, attributeName, attributeValue);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return undefined;
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
65
115
|
|
|
66
|
-
|
|
67
|
-
export {Monster, fireEvent}
|
|
116
|
+
assignToNamespace('Monster.DOM', findTargetElementFromEvent, fireEvent);
|
|
117
|
+
export {Monster, findTargetElementFromEvent, fireEvent}
|
package/source/dom/locale.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
import {parseLocale} from "../i18n/locale.js";
|
|
3
4
|
/**
|
|
4
5
|
* @author schukai GmbH
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
import {Monster, parseLocale} from "../i18n/locale.js";
|
|
7
|
+
import {assignToNamespace, Monster} from '../namespace.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.2/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.2/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/namespace.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* In this namespace you will find classes and methods for handling the DOM.
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
6
|
* @namespace Monster/DOM
|
|
7
7
|
* @author schukai GmbH
|
|
8
8
|
*/
|
|
@@ -11,4 +11,4 @@
|
|
|
11
11
|
* @private
|
|
12
12
|
* @type {string}
|
|
13
13
|
*/
|
|
14
|
-
const namespace="Monster.DOM";
|
|
14
|
+
const namespace = "Monster.DOM";
|
package/source/dom/template.js
CHANGED
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import {validateString} from "../types/validate.js";
|
|
6
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
|
7
|
+
import {Base} from '../types/base.js';
|
|
9
8
|
import {getGlobalFunction, getGlobalObject} from '../types/global.js';
|
|
10
|
-
import {validateInstance} from "../types/validate.js";
|
|
9
|
+
import {validateInstance, validateString} from "../types/validate.js";
|
|
11
10
|
import {getDocumentTheme} from "./theme.js";
|
|
12
11
|
|
|
13
12
|
/**
|
|
@@ -15,7 +14,7 @@ import {getDocumentTheme} from "./theme.js";
|
|
|
15
14
|
*
|
|
16
15
|
* ```
|
|
17
16
|
* <script type="module">
|
|
18
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
17
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/template.js';
|
|
19
18
|
* console.log(new Monster.DOM.Template())
|
|
20
19
|
* </script>
|
|
21
20
|
* ```
|
|
@@ -24,7 +23,7 @@ import {getDocumentTheme} from "./theme.js";
|
|
|
24
23
|
*
|
|
25
24
|
* ```
|
|
26
25
|
* <script type="module">
|
|
27
|
-
* import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
26
|
+
* import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/template.js';
|
|
28
27
|
* console.log(new Template())
|
|
29
28
|
* </script>
|
|
30
29
|
* ```
|
|
@@ -74,7 +73,7 @@ class Template extends Base {
|
|
|
74
73
|
*
|
|
75
74
|
* ```
|
|
76
75
|
* <script type="module">
|
|
77
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
76
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/template.js';
|
|
78
77
|
* console.log(Monster.DOM.findDocumentTemplate())
|
|
79
78
|
* </script>
|
|
80
79
|
* ```
|
|
@@ -83,13 +82,13 @@ class Template extends Base {
|
|
|
83
82
|
*
|
|
84
83
|
* ```
|
|
85
84
|
* <script type="module">
|
|
86
|
-
* import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
85
|
+
* import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/template.js';
|
|
87
86
|
* console.log(findDocumentTemplate())
|
|
88
87
|
* </script>
|
|
89
88
|
* ```
|
|
90
89
|
*
|
|
91
90
|
* @param {string} id
|
|
92
|
-
* @param {Node}
|
|
91
|
+
* @param {Node} currentNode
|
|
93
92
|
* @return {Template}
|
|
94
93
|
* @since 1.7.0
|
|
95
94
|
* @copyright schukai GmbH
|
|
@@ -97,29 +96,35 @@ class Template extends Base {
|
|
|
97
96
|
* @throws {Error} template id not found.
|
|
98
97
|
* @throws {TypeError} value is not a string
|
|
99
98
|
*/
|
|
100
|
-
function findDocumentTemplate(id,
|
|
99
|
+
function findDocumentTemplate(id, currentNode) {
|
|
101
100
|
validateString(id);
|
|
102
|
-
|
|
103
|
-
if (!(
|
|
104
|
-
|
|
101
|
+
|
|
102
|
+
if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {
|
|
103
|
+
if (currentNode instanceof Node) {
|
|
104
|
+
currentNode = currentNode.ownerDocument;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {
|
|
108
|
+
currentNode = getGlobalObject('document');
|
|
109
|
+
}
|
|
105
110
|
}
|
|
106
|
-
|
|
111
|
+
|
|
107
112
|
const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');
|
|
108
113
|
|
|
109
114
|
let theme = getDocumentTheme()
|
|
110
115
|
let themedID = id + '-' + theme.getName();
|
|
111
116
|
|
|
112
|
-
let template =
|
|
117
|
+
let template = currentNode.getElementById(themedID);
|
|
113
118
|
if (template instanceof HTMLTemplateElement) {
|
|
114
119
|
return new Template(template);
|
|
115
120
|
}
|
|
116
121
|
|
|
117
|
-
template =
|
|
122
|
+
template = currentNode.getElementById(id);
|
|
118
123
|
if (template instanceof HTMLTemplateElement) {
|
|
119
124
|
return new Template(template);
|
|
120
125
|
}
|
|
121
|
-
|
|
122
|
-
if(
|
|
126
|
+
|
|
127
|
+
if (currentNode !== getGlobalObject('document')) {
|
|
123
128
|
return findDocumentTemplate(id)
|
|
124
129
|
}
|
|
125
130
|
|
|
@@ -127,7 +132,7 @@ function findDocumentTemplate(id, root) {
|
|
|
127
132
|
}
|
|
128
133
|
|
|
129
134
|
|
|
130
|
-
|
|
135
|
+
assignToNamespace('Monster.DOM', Template, findDocumentTemplate);
|
|
131
136
|
export {Monster, Template, findDocumentTemplate}
|
|
132
137
|
|
|
133
138
|
|
package/source/dom/theme.js
CHANGED
|
@@ -3,20 +3,19 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import {validateString} from "../types/validate.js";
|
|
6
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
|
7
|
+
import {Base} from '../types/base.js';
|
|
9
8
|
import {getGlobalObject} from '../types/global.js';
|
|
9
|
+
import {validateString} from "../types/validate.js";
|
|
10
10
|
import {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from "./constants.js";
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
/**
|
|
15
14
|
* You can call the method via the monster namespace `new Monster.DOM.Theme()`.
|
|
16
15
|
*
|
|
17
16
|
* ```
|
|
18
17
|
* <script type="module">
|
|
19
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
18
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/theme.js';
|
|
20
19
|
* console.log(new Monster.DOM.Theme())
|
|
21
20
|
* </script>
|
|
22
21
|
* ```
|
|
@@ -25,14 +24,14 @@ import {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from "./constants.js";
|
|
|
25
24
|
*
|
|
26
25
|
* ```
|
|
27
26
|
* <script type="module">
|
|
28
|
-
* import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
27
|
+
* import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/theme.js';
|
|
29
28
|
* console.log(new Theme())
|
|
30
29
|
* </script>
|
|
31
30
|
* ```
|
|
32
|
-
*
|
|
31
|
+
*
|
|
33
32
|
* @example
|
|
34
33
|
*
|
|
35
|
-
* import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
34
|
+
* import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/theme.js';
|
|
36
35
|
*
|
|
37
36
|
* const theme = getDocumentTheme();
|
|
38
37
|
* console.log(theme.getName());
|
|
@@ -96,5 +95,5 @@ function getDocumentTheme() {
|
|
|
96
95
|
|
|
97
96
|
}
|
|
98
97
|
|
|
99
|
-
|
|
98
|
+
assignToNamespace('Monster.DOM', Theme, getDocumentTheme);
|
|
100
99
|
export {Monster, Theme, getDocumentTheme}
|
package/source/dom/updater.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
import {Diff} from "../data/diff.js";
|
|
3
4
|
import {Pathfinder} from "../data/pathfinder.js";
|
|
4
5
|
import {Pipe} from "../data/pipe.js";
|
|
5
|
-
import {Base, Monster} from "../types/base.js";
|
|
6
|
-
import {isInstance, isArray} from "../types/is.js";
|
|
7
|
-
import {Observer} from "../types/observer.js";
|
|
8
|
-
import {ProxyObserver} from "../types/proxyobserver.js";
|
|
9
|
-
import {validateInstance, validateArray} from "../types/validate.js";
|
|
10
|
-
import {clone} from "../util/clone.js";
|
|
11
|
-
import {Diff} from "../data/diff.js";
|
|
12
6
|
import {
|
|
13
|
-
ATTRIBUTE_UPDATER_REPLACE,
|
|
14
7
|
ATTRIBUTE_UPDATER_ATTRIBUTES,
|
|
8
|
+
ATTRIBUTE_UPDATER_BIND,
|
|
15
9
|
ATTRIBUTE_UPDATER_INSERT,
|
|
16
|
-
ATTRIBUTE_UPDATER_REMOVE,
|
|
17
10
|
ATTRIBUTE_UPDATER_INSERT_REFERENCE,
|
|
18
|
-
|
|
11
|
+
ATTRIBUTE_UPDATER_REMOVE,
|
|
12
|
+
ATTRIBUTE_UPDATER_REPLACE
|
|
19
13
|
} from "../dom/constants.js";
|
|
20
|
-
import {findDocumentTemplate} from "./template.js";
|
|
21
|
-
import {getDocument} from "./util.js";
|
|
22
|
-
|
|
23
14
|
/**
|
|
24
15
|
* @author schukai GmbH
|
|
25
16
|
*/
|
|
17
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
|
18
|
+
import {Base} from "../types/base.js";
|
|
19
|
+
import {isArray, isInstance, isIterable} from "../types/is.js";
|
|
20
|
+
import {Observer} from "../types/observer.js";
|
|
21
|
+
import {ProxyObserver} from "../types/proxyobserver.js";
|
|
22
|
+
import {validateArray, validateInstance} from "../types/validate.js";
|
|
23
|
+
import {clone} from "../util/clone.js";
|
|
24
|
+
import {findDocumentTemplate} from "./template.js";
|
|
25
|
+
import {getDocument} from "./util.js";
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
/**
|
|
@@ -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.2/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.2/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.2/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
|
*
|
|
@@ -284,6 +307,7 @@ function getControlEventHandler() {
|
|
|
284
307
|
path = path.substr(5);
|
|
285
308
|
|
|
286
309
|
let value;
|
|
310
|
+
|
|
287
311
|
if (element instanceof HTMLInputElement) {
|
|
288
312
|
switch (element.type) {
|
|
289
313
|
|
|
@@ -316,6 +340,9 @@ function getControlEventHandler() {
|
|
|
316
340
|
}
|
|
317
341
|
|
|
318
342
|
|
|
343
|
+
// values from customelements
|
|
344
|
+
} else if ((element?.constructor?.prototype && !!Object.getOwnPropertyDescriptor(element.constructor.prototype, 'value')?.['get']) || element.hasOwnProperty('value')) {
|
|
345
|
+
value = element?.['value'];
|
|
319
346
|
} else {
|
|
320
347
|
throw new Error("unsupported object");
|
|
321
348
|
}
|
|
@@ -411,7 +438,7 @@ function insertElement(change) {
|
|
|
411
438
|
insertPoint = containerElement.lastChild;
|
|
412
439
|
}
|
|
413
440
|
|
|
414
|
-
if (!
|
|
441
|
+
if (!isIterable(value)) {
|
|
415
442
|
throw new Error('the value is not iterable');
|
|
416
443
|
}
|
|
417
444
|
|
|
@@ -465,12 +492,7 @@ function insertElement(change) {
|
|
|
465
492
|
*/
|
|
466
493
|
function appendNewDocumentFragment(container, key, ref, path) {
|
|
467
494
|
|
|
468
|
-
let
|
|
469
|
-
if (!rootNode) {
|
|
470
|
-
rootNode = getDocument();
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
let template = findDocumentTemplate(key, rootNode);
|
|
495
|
+
let template = findDocumentTemplate(key, container);
|
|
474
496
|
|
|
475
497
|
let nodes = template.createDocumentFragment();
|
|
476
498
|
for (const [, node] of Object.entries(nodes.childNodes)) {
|
|
@@ -723,5 +745,5 @@ function handleInputControlAttributeUpdate(element, name, value) {
|
|
|
723
745
|
|
|
724
746
|
}
|
|
725
747
|
|
|
726
|
-
|
|
748
|
+
assignToNamespace('Monster.DOM', Updater);
|
|
727
749
|
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 {assignToNamespace, Monster} 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.2/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.2/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.2/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.2/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.2/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.2/dist/modules/dom/util.js';
|
|
153
153
|
* console.log(getDocumentFragmentFromString('<div></div>'))
|
|
154
154
|
* </script>
|
|
155
155
|
* ```
|
|
@@ -194,10 +194,10 @@ function getDocumentFragmentFromString(html) {
|
|
|
194
194
|
const document = getDocument();
|
|
195
195
|
const template = document.createElement('template');
|
|
196
196
|
template.innerHTML = html;
|
|
197
|
-
|
|
197
|
+
|
|
198
198
|
return template.content;
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
|
|
202
|
-
|
|
202
|
+
assignToNamespace('Monster.DOM', getWindow, getDocument, getDocumentFragmentFromString);
|
|
203
203
|
export {Monster, getWindow, getDocument, getDocumentFragmentFromString}
|
package/source/i18n/locale.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
|
7
|
+
import {Base} from "../types/base.js";
|
|
8
8
|
import {validateString} from "../types/validate.js";
|
|
9
9
|
import {clone} from "../util/clone.js";
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ const localeStringSymbol = Symbol('localeString');
|
|
|
23
23
|
*
|
|
24
24
|
* ```
|
|
25
25
|
* <script type="module">
|
|
26
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
26
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/i18n/locale.js';
|
|
27
27
|
* console.log(new Monster.I18n.Locale())
|
|
28
28
|
* </script>
|
|
29
29
|
* ```
|
|
@@ -32,7 +32,7 @@ const localeStringSymbol = Symbol('localeString');
|
|
|
32
32
|
*
|
|
33
33
|
* ```
|
|
34
34
|
* <script type="module">
|
|
35
|
-
* import {Locale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
35
|
+
* import {Locale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/i18n/locale.js';
|
|
36
36
|
* console.log(new Locale())
|
|
37
37
|
* </script>
|
|
38
38
|
* ```
|
|
@@ -189,7 +189,7 @@ class Locale extends Base {
|
|
|
189
189
|
*
|
|
190
190
|
* ```
|
|
191
191
|
* <script type="module">
|
|
192
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
192
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/i18n/locale.js';
|
|
193
193
|
* console.log(new Monster.I18n.createLocale())
|
|
194
194
|
* </script>
|
|
195
195
|
* ```
|
|
@@ -198,7 +198,7 @@ class Locale extends Base {
|
|
|
198
198
|
*
|
|
199
199
|
* ```
|
|
200
200
|
* <script type="module">
|
|
201
|
-
* import {createLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
201
|
+
* import {createLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/i18n/locale.js';
|
|
202
202
|
* console.log(createLocale())
|
|
203
203
|
* </script>
|
|
204
204
|
* ```
|
|
@@ -318,5 +318,5 @@ function parseLocale(locale) {
|
|
|
318
318
|
}
|
|
319
319
|
|
|
320
320
|
|
|
321
|
-
|
|
321
|
+
assignToNamespace('Monster.I18n', Locale, parseLocale);
|
|
322
322
|
export {Monster, Locale, parseLocale}
|
package/source/i18n/namespace.js
CHANGED
package/source/i18n/provider.js
CHANGED
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @author schukai GmbH
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
|
7
|
+
import {BaseWithOptions} from "../types/basewithoptions.js";
|
|
8
8
|
import {Locale} from "./locale.js"
|
|
9
9
|
import {Translations} from "./translations.js"
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* A provider makes a translation object available.
|
|
13
|
-
*
|
|
13
|
+
*
|
|
14
14
|
* You can call the method via the monster namespace `new Monster.I18n.Provider()`.
|
|
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.2/dist/modules/i18n/provider.js';
|
|
19
19
|
* console.log(new Monster.I18n.Provider())
|
|
20
20
|
* </script>
|
|
21
21
|
* ```
|
|
@@ -24,7 +24,7 @@ import {Translations} from "./translations.js"
|
|
|
24
24
|
*
|
|
25
25
|
* ```
|
|
26
26
|
* <script type="module">
|
|
27
|
-
* import {Provider} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
27
|
+
* import {Provider} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/i18n/provider.js';
|
|
28
28
|
* console.log(new Provider())
|
|
29
29
|
* </script>
|
|
30
30
|
* ```
|
|
@@ -54,5 +54,5 @@ class Provider extends BaseWithOptions {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
assignToNamespace('Monster.I18n', Provider);
|
|
58
58
|
export {Monster, Provider}
|