@schukai/monster 1.24.0 → 1.27.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG +47 -0
- package/README.md +4 -4
- package/dist/modules/constants.js +2 -2
- package/dist/modules/constraints/abstract.js +1 -1
- package/dist/modules/constraints/abstractoperator.js +1 -1
- package/dist/modules/constraints/andoperator.js +1 -1
- package/dist/modules/constraints/invalid.js +1 -1
- package/dist/modules/constraints/isarray.js +1 -1
- package/dist/modules/constraints/isobject.js +1 -1
- package/dist/modules/constraints/namespace.js +1 -1
- package/dist/modules/constraints/oroperator.js +1 -1
- package/dist/modules/constraints/valid.js +1 -1
- package/dist/modules/data/buildmap.js +2 -2
- package/dist/modules/data/buildtree.js +2 -0
- package/dist/modules/data/datasource/namespace.js +1 -1
- package/dist/modules/data/datasource/restapi/writeerror.js +1 -1
- package/dist/modules/data/datasource/restapi.js +1 -1
- package/dist/modules/data/datasource/storage/localstorage.js +1 -1
- package/dist/modules/data/datasource/storage/namespace.js +1 -1
- package/dist/modules/data/datasource/storage/sessionstorage.js +1 -1
- package/dist/modules/data/datasource/storage.js +1 -1
- package/dist/modules/data/datasource.js +1 -1
- package/dist/modules/data/diff.js +1 -1
- package/dist/modules/data/extend.js +1 -1
- package/dist/modules/data/namespace.js +1 -1
- package/dist/modules/data/pathfinder.js +1 -1
- package/dist/modules/data/pipe.js +1 -1
- package/dist/modules/data/transformer.js +2 -2
- package/dist/modules/dom/assembler.js +1 -1
- package/dist/modules/dom/attributes.js +2 -2
- package/dist/modules/dom/constants.js +2 -2
- package/dist/modules/dom/customcontrol.js +1 -1
- package/dist/modules/dom/customelement.js +1 -1
- package/dist/modules/dom/events.js +1 -1
- package/dist/modules/dom/focusmanager.js +2 -0
- package/dist/modules/dom/locale.js +1 -1
- package/dist/modules/dom/namespace.js +1 -1
- package/dist/modules/dom/resource/data.js +2 -0
- package/dist/modules/dom/resource/link/stylesheet.js +2 -0
- package/dist/modules/dom/resource/link.js +2 -0
- package/dist/modules/dom/resource/script.js +2 -0
- package/dist/modules/dom/resource.js +2 -0
- package/dist/modules/dom/resourcemanager.js +2 -0
- package/dist/modules/dom/template.js +2 -2
- package/dist/modules/dom/theme.js +1 -1
- package/dist/modules/dom/updater.js +2 -2
- package/dist/modules/dom/util.js +1 -1
- package/dist/modules/dom/worker/factory.js +2 -0
- package/dist/modules/i18n/formatter.js +2 -0
- package/dist/modules/i18n/locale.js +1 -1
- package/dist/modules/i18n/namespace.js +1 -1
- package/dist/modules/i18n/provider.js +1 -1
- package/dist/modules/i18n/providers/fetch.js +1 -1
- package/dist/modules/i18n/providers/namespace.js +1 -1
- package/dist/modules/i18n/translations.js +1 -1
- package/dist/modules/logging/handler/console.js +1 -1
- package/dist/modules/logging/handler/namespace.js +1 -1
- package/dist/modules/logging/handler.js +1 -1
- package/dist/modules/logging/logentry.js +1 -1
- package/dist/modules/logging/logger.js +1 -1
- 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 +1 -1
- package/dist/modules/types/basewithoptions.js +1 -1
- package/dist/modules/types/binary.js +1 -1
- package/dist/modules/types/dataurl.js +1 -1
- package/dist/modules/types/global.js +1 -1
- package/dist/modules/types/id.js +1 -1
- package/dist/modules/types/is.js +2 -2
- package/dist/modules/types/mediatype.js +1 -1
- package/dist/modules/types/namespace.js +1 -1
- package/dist/modules/types/node.js +2 -0
- package/dist/modules/types/nodelist.js +2 -0
- package/dist/modules/types/noderecursiveiterator.js +2 -0
- package/dist/modules/types/observer.js +1 -1
- package/dist/modules/types/observerlist.js +1 -1
- package/dist/modules/types/proxyobserver.js +1 -1
- package/dist/modules/types/queue.js +1 -1
- package/dist/modules/types/randomid.js +1 -1
- package/dist/modules/types/regex.js +2 -0
- package/dist/modules/types/stack.js +1 -1
- package/dist/modules/types/tokenlist.js +1 -1
- package/dist/modules/types/typeof.js +1 -1
- package/dist/modules/types/uniquequeue.js +1 -1
- package/dist/modules/types/uuid.js +2 -0
- package/dist/modules/types/validate.js +1 -1
- package/dist/modules/types/version.js +2 -2
- package/dist/modules/util/clone.js +1 -1
- package/dist/modules/util/comparator.js +1 -1
- package/dist/modules/util/freeze.js +1 -1
- package/dist/modules/util/namespace.js +1 -1
- package/dist/modules/util/processing.js +1 -1
- package/dist/modules/util/trimspaces.js +1 -1
- package/dist/monster.dev.js +1528 -770
- package/dist/monster.dev.js.map +1 -1
- package/dist/monster.js +2 -2
- package/package.json +13 -2
- package/source/constants.js +11 -2
- package/source/constraints/abstract.js +5 -0
- package/source/constraints/abstractoperator.js +5 -0
- package/source/constraints/andoperator.js +10 -5
- package/source/constraints/invalid.js +8 -3
- package/source/constraints/isarray.js +9 -4
- package/source/constraints/isobject.js +8 -3
- package/source/constraints/oroperator.js +10 -5
- package/source/constraints/valid.js +8 -3
- package/source/data/buildmap.js +25 -9
- package/source/data/buildtree.js +95 -0
- package/source/data/datasource/restapi.js +3 -3
- package/source/data/datasource/storage/localstorage.js +2 -2
- package/source/data/datasource/storage/sessionstorage.js +2 -2
- package/source/data/datasource/storage.js +3 -3
- package/source/data/datasource.js +3 -3
- package/source/data/diff.js +3 -3
- package/source/data/extend.js +2 -2
- package/source/data/pathfinder.js +4 -4
- package/source/data/pipe.js +3 -3
- package/source/data/transformer.js +7 -5
- package/source/dom/assembler.js +2 -2
- package/source/dom/attributes.js +111 -28
- package/source/dom/constants.js +287 -10
- package/source/dom/customcontrol.js +1 -1
- package/source/dom/customelement.js +1 -1
- package/source/dom/events.js +6 -7
- package/source/dom/focusmanager.js +250 -0
- package/source/dom/locale.js +10 -5
- package/source/dom/resource/data.js +170 -0
- package/source/dom/resource/link/stylesheet.js +54 -0
- package/source/dom/resource/link.js +125 -0
- package/source/dom/resource/script.js +112 -0
- package/source/dom/resource.js +268 -0
- package/source/dom/resourcemanager.js +214 -0
- package/source/dom/template.js +86 -16
- package/source/dom/theme.js +3 -3
- package/source/dom/updater.js +138 -90
- package/source/dom/util.js +6 -6
- package/source/dom/worker/factory.js +134 -0
- package/source/i18n/formatter.js +140 -0
- package/source/i18n/locale.js +6 -4
- package/source/i18n/provider.js +2 -2
- package/source/i18n/providers/fetch.js +18 -3
- package/source/i18n/translations.js +18 -9
- package/source/logging/handler/console.js +2 -2
- package/source/logging/handler.js +2 -2
- package/source/logging/logentry.js +2 -2
- package/source/logging/logger.js +2 -2
- package/source/math/random.js +9 -5
- package/source/namespace.js +1 -1
- package/source/text/formatter.js +190 -48
- package/source/types/base.js +4 -4
- package/source/types/basewithoptions.js +2 -2
- package/source/types/binary.js +4 -4
- package/source/types/dataurl.js +4 -4
- package/source/types/global.js +4 -4
- package/source/types/id.js +6 -3
- package/source/types/is.js +103 -85
- package/source/types/mediatype.js +4 -4
- package/source/types/node.js +179 -0
- package/source/types/nodelist.js +125 -0
- package/source/types/noderecursiveiterator.js +126 -0
- package/source/types/observer.js +3 -3
- package/source/types/observerlist.js +2 -2
- package/source/types/proxyobserver.js +5 -5
- package/source/types/queue.js +4 -4
- package/source/types/randomid.js +2 -2
- package/source/types/regex.js +49 -0
- package/source/types/stack.js +2 -2
- package/source/types/tokenlist.js +2 -2
- package/source/types/typeof.js +3 -3
- package/source/types/uniquequeue.js +2 -2
- package/source/types/uuid.js +102 -0
- package/source/types/validate.js +20 -20
- package/source/types/version.js +6 -6
- package/source/util/clone.js +2 -2
- package/source/util/comparator.js +4 -4
- package/source/util/freeze.js +5 -5
- package/source/util/processing.js +3 -3
- package/source/util/trimspaces.js +3 -3
- package/test/cases/data/buildtree.js +149 -0
- package/test/cases/data/datasource/restapi.js +1 -1
- package/test/cases/data/transformer.js +2 -0
- package/test/cases/dom/attributes.js +46 -19
- package/test/cases/dom/customelement.js +0 -3
- package/test/cases/dom/focusmanager.js +111 -0
- package/test/cases/dom/locale.js +1 -4
- package/test/cases/dom/resource/data.js +129 -0
- package/test/cases/dom/resource/link/stylesheet.js +101 -0
- package/test/cases/dom/resource/link.js +101 -0
- package/test/cases/dom/resource/script.js +115 -0
- package/test/cases/dom/resourcemanager.js +118 -0
- package/test/cases/dom/template.js +72 -14
- package/test/cases/dom/updater.js +102 -75
- package/test/cases/dom/worker/factory.js +63 -0
- package/test/cases/i18n/formatter.js +66 -0
- package/test/cases/monster.js +1 -1
- package/test/cases/text/formatter.js +36 -5
- package/test/cases/types/node.js +196 -0
- package/test/cases/types/nodelist.js +64 -0
- package/test/cases/types/noderecursiveiterator.js +54 -0
- package/test/cases/types/regex.js +32 -0
- package/test/cases/types/uuid.js +42 -0
- package/test/cases/util/freeze.js +30 -4
- package/test/util/cleanupdom.js +48 -0
- package/test/util/jsdom.js +22 -9
- package/test/web/import.js +14 -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 +7 -7
package/source/data/diff.js
CHANGED
@@ -17,7 +17,7 @@ import {typeOf} from "../types/typeof.js";
|
|
17
17
|
*
|
18
18
|
* ```
|
19
19
|
* <script type="module">
|
20
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
20
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
21
21
|
* Monster.Data.Diff(a, b)
|
22
22
|
* </script>
|
23
23
|
* ```
|
@@ -26,14 +26,14 @@ import {typeOf} from "../types/typeof.js";
|
|
26
26
|
*
|
27
27
|
* ```
|
28
28
|
* <script type="module">
|
29
|
-
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
29
|
+
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/diff.js';
|
30
30
|
* Diff(a, b)
|
31
31
|
* </script>
|
32
32
|
* ```
|
33
33
|
*
|
34
34
|
* @example
|
35
35
|
*
|
36
|
-
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
36
|
+
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/diff.js';
|
37
37
|
*
|
38
38
|
* // given are two objects x and y.
|
39
39
|
*
|
package/source/data/extend.js
CHANGED
@@ -15,7 +15,7 @@ import {typeOf} from "../types/typeof.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.27.0/dist/monster.js';
|
19
19
|
* Monster.Data.extend(a, b)
|
20
20
|
* </script>
|
21
21
|
* ```
|
@@ -24,7 +24,7 @@ import {typeOf} from "../types/typeof.js";
|
|
24
24
|
*
|
25
25
|
* ```
|
26
26
|
* <script type="module">
|
27
|
-
* import {extend} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
27
|
+
* import {extend} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/extend.js';
|
28
28
|
* extend(a, b)
|
29
29
|
* </script>
|
30
30
|
* ```
|
@@ -27,7 +27,7 @@ export const WILDCARD = '*';
|
|
27
27
|
*
|
28
28
|
* ```
|
29
29
|
* <script type="module">
|
30
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
30
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
31
31
|
* console.log(new Monster.Data.Pathfinder())
|
32
32
|
* </script>
|
33
33
|
* ```
|
@@ -36,7 +36,7 @@ export const WILDCARD = '*';
|
|
36
36
|
*
|
37
37
|
* ```
|
38
38
|
* <script type="module">
|
39
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
39
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/pathfinder.js';
|
40
40
|
* console.log(new Pathfinder())
|
41
41
|
* </script>
|
42
42
|
* ```
|
@@ -78,7 +78,7 @@ export const WILDCARD = '*';
|
|
78
78
|
*
|
79
79
|
* @example
|
80
80
|
*
|
81
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
81
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/pathfinder.js';
|
82
82
|
*
|
83
83
|
* let value = new Pathfinder({
|
84
84
|
* a: {
|
@@ -104,7 +104,7 @@ export const WILDCARD = '*';
|
|
104
104
|
*
|
105
105
|
* @example
|
106
106
|
*
|
107
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
107
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/pathfinder.js';
|
108
108
|
*
|
109
109
|
* let p = new Pathfinder({
|
110
110
|
* a: {
|
package/source/data/pipe.js
CHANGED
@@ -19,7 +19,7 @@ const DELIMITER = '|';
|
|
19
19
|
*
|
20
20
|
* ```
|
21
21
|
* <script type="module">
|
22
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
22
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
23
23
|
* new Monster.Data.Pipe()
|
24
24
|
* </script>
|
25
25
|
* ```
|
@@ -28,7 +28,7 @@ const DELIMITER = '|';
|
|
28
28
|
*
|
29
29
|
* ```
|
30
30
|
* <script type="module">
|
31
|
-
* import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
31
|
+
* import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/pipe.js';
|
32
32
|
* new Pipe()
|
33
33
|
* </script>
|
34
34
|
* ```
|
@@ -39,7 +39,7 @@ const DELIMITER = '|';
|
|
39
39
|
* the word is then converted to uppercase letters and a prefix Hello is added. the two backslash safe the space char.
|
40
40
|
*
|
41
41
|
* @example
|
42
|
-
* import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
42
|
+
* import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/pipe.js';
|
43
43
|
*
|
44
44
|
* let obj = {
|
45
45
|
* a: {
|
@@ -25,7 +25,7 @@ import {Pathfinder} from "./pathfinder.js";
|
|
25
25
|
*
|
26
26
|
* ```
|
27
27
|
* <script type="module">
|
28
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
28
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
29
29
|
* new Monster.Data.Transformer()
|
30
30
|
* </script>
|
31
31
|
* ```
|
@@ -34,7 +34,7 @@ import {Pathfinder} from "./pathfinder.js";
|
|
34
34
|
*
|
35
35
|
* ```
|
36
36
|
* <script type="module">
|
37
|
-
* import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
37
|
+
* import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/transformer.js';
|
38
38
|
* new Transformer()
|
39
39
|
* </script>
|
40
40
|
* ```
|
@@ -51,8 +51,8 @@ import {Pathfinder} from "./pathfinder.js";
|
|
51
51
|
*
|
52
52
|
* | command | parameter | alias | description |
|
53
53
|
* |:-------------|:---------------------------|:------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
54
|
-
* | to-base64 | | base64
|
55
|
-
* | from-base64 | |
|
54
|
+
* | to-base64 | | base64, btob | Converts the value to base64 |
|
55
|
+
* | from-base64 | | atob | Converts the value from base64 |
|
56
56
|
* | call | function:param1:param2:... | | Calling a callback function. The function can be defined in three places: either globally, in the context `addCallback` or in the passed object |
|
57
57
|
* | default | value:type | ?? | If the value is undefined the first argument is returned, otherwise the value. The third optional parameter specifies the desired type. If no type is specified, string is used. Valid types are bool, string, int, float, undefined and object. An object default value must be specified as a base64 encoded json string. (since 1.12.0) |
|
58
58
|
* | debug | | | the passed value is output (console) and returned |
|
@@ -120,7 +120,7 @@ import {Pathfinder} from "./pathfinder.js";
|
|
120
120
|
*
|
121
121
|
* @example
|
122
122
|
*
|
123
|
-
* import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
123
|
+
* import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/data/transformer.js';
|
124
124
|
*
|
125
125
|
* const transformer = new Transformer("tolower")
|
126
126
|
*
|
@@ -395,9 +395,11 @@ function transform(value) {
|
|
395
395
|
throw new TypeError("unsupported type " + typeof value);
|
396
396
|
|
397
397
|
case 'to-base64':
|
398
|
+
case 'btoa':
|
398
399
|
case 'base64':
|
399
400
|
return btoa(convertToString(value));
|
400
401
|
|
402
|
+
case 'atob':
|
401
403
|
case 'from-base64':
|
402
404
|
return atob(convertToString(value));
|
403
405
|
|
package/source/dom/assembler.js
CHANGED
@@ -23,7 +23,7 @@ const ATTRIBUTEPREFIX = "data-monster-";
|
|
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.27.0/dist/monster.js';
|
27
27
|
* console.log(new Monster.DOM.Assembler())
|
28
28
|
* </script>
|
29
29
|
* ```
|
@@ -32,7 +32,7 @@ const ATTRIBUTEPREFIX = "data-monster-";
|
|
32
32
|
*
|
33
33
|
* ```
|
34
34
|
* <script type="module">
|
35
|
-
* import {Assembler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
35
|
+
* import {Assembler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/assembler.js';
|
36
36
|
* console.log(new Assembler())
|
37
37
|
* </script>
|
38
38
|
* ```
|
package/source/dom/attributes.js
CHANGED
@@ -20,7 +20,7 @@ import {ATTRIBUTE_OBJECTLINK} from "./constants.js";
|
|
20
20
|
*
|
21
21
|
* ```
|
22
22
|
* <script type="module">
|
23
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
23
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
24
24
|
* console.log(Monster.DOM.findClosestObjectLink())
|
25
25
|
* </script>
|
26
26
|
* ```
|
@@ -29,7 +29,7 @@ import {ATTRIBUTE_OBJECTLINK} from "./constants.js";
|
|
29
29
|
*
|
30
30
|
* ```
|
31
31
|
* <script type="module">
|
32
|
-
* import {getUpdaterFromNode} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
32
|
+
* import {getUpdaterFromNode} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/updater.js';
|
33
33
|
* console.log(findClosestObjectLink())
|
34
34
|
* </script>
|
35
35
|
* ```
|
@@ -50,7 +50,7 @@ function findClosestObjectLink(element) {
|
|
50
50
|
*
|
51
51
|
* ```
|
52
52
|
* <script type="module">
|
53
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
53
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
54
54
|
* Monster.DOM.addToObjectLink();
|
55
55
|
* </script>
|
56
56
|
* ```
|
@@ -59,7 +59,7 @@ function findClosestObjectLink(element) {
|
|
59
59
|
*
|
60
60
|
* ```
|
61
61
|
* <script type="module">
|
62
|
-
* import {addToObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
62
|
+
* import {addToObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
63
63
|
* addToObjectLink();
|
64
64
|
* </script>
|
65
65
|
* ```
|
@@ -92,7 +92,7 @@ function addToObjectLink(element, symbol, object) {
|
|
92
92
|
*
|
93
93
|
* ```
|
94
94
|
* <script type="module">
|
95
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
95
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
96
96
|
* Monster.DOM.removeObjectLink();
|
97
97
|
* </script>
|
98
98
|
* ```
|
@@ -101,7 +101,7 @@ function addToObjectLink(element, symbol, object) {
|
|
101
101
|
*
|
102
102
|
* ```
|
103
103
|
* <script type="module">
|
104
|
-
* import {removeObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
104
|
+
* import {removeObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
105
105
|
* removeObjectLink();
|
106
106
|
* </script>
|
107
107
|
* ```
|
@@ -134,7 +134,7 @@ function removeObjectLink(element, symbol) {
|
|
134
134
|
*
|
135
135
|
* ```
|
136
136
|
* <script type="module">
|
137
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
137
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
138
138
|
* Monster.DOM.hasObjectLink();
|
139
139
|
* </script>
|
140
140
|
* ```
|
@@ -143,7 +143,7 @@ function removeObjectLink(element, symbol) {
|
|
143
143
|
*
|
144
144
|
* ```
|
145
145
|
* <script type="module">
|
146
|
-
* import {hasObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
146
|
+
* import {hasObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
147
147
|
* hasObjectLink();
|
148
148
|
* </script>
|
149
149
|
* ```
|
@@ -180,7 +180,7 @@ function hasObjectLink(element, symbol) {
|
|
180
180
|
*
|
181
181
|
* ```
|
182
182
|
* <script type="module">
|
183
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
183
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
184
184
|
* Monster.DOM.getLinkedObjects();
|
185
185
|
* </script>
|
186
186
|
* ```
|
@@ -189,7 +189,7 @@ function hasObjectLink(element, symbol) {
|
|
189
189
|
*
|
190
190
|
* ```
|
191
191
|
* <script type="module">
|
192
|
-
* import {getLinkedObjects} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
192
|
+
* import {getLinkedObjects} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
193
193
|
* getLinkedObjects();
|
194
194
|
* </script>
|
195
195
|
* ```
|
@@ -225,7 +225,7 @@ function getLinkedObjects(element, symbol) {
|
|
225
225
|
*
|
226
226
|
* ```
|
227
227
|
* <script type="module">
|
228
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
228
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
229
229
|
* Monster.DOM.toggleAttributeToken();
|
230
230
|
* </script>
|
231
231
|
* ```
|
@@ -234,7 +234,7 @@ function getLinkedObjects(element, symbol) {
|
|
234
234
|
*
|
235
235
|
* ```
|
236
236
|
* <script type="module">
|
237
|
-
* import {toggleAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
237
|
+
* import {toggleAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
238
238
|
* toggleAttributeToken();
|
239
239
|
* </script>
|
240
240
|
* ```
|
@@ -269,7 +269,7 @@ function toggleAttributeToken(element, key, token) {
|
|
269
269
|
*
|
270
270
|
* ```
|
271
271
|
* <script type="module">
|
272
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
272
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
273
273
|
* Monster.DOM.addAttributeToken();
|
274
274
|
* </script>
|
275
275
|
* ```
|
@@ -278,7 +278,7 @@ function toggleAttributeToken(element, key, token) {
|
|
278
278
|
*
|
279
279
|
* ```
|
280
280
|
* <script type="module">
|
281
|
-
* import {addAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
281
|
+
* import {addAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
282
282
|
* addAttributeToken();
|
283
283
|
* </script>
|
284
284
|
* ```
|
@@ -315,7 +315,7 @@ function addAttributeToken(element, key, token) {
|
|
315
315
|
*
|
316
316
|
* ```
|
317
317
|
* <script type="module">
|
318
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
318
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
319
319
|
* Monster.DOM.removeAttributeToken();
|
320
320
|
* </script>
|
321
321
|
* ```
|
@@ -324,7 +324,7 @@ function addAttributeToken(element, key, token) {
|
|
324
324
|
*
|
325
325
|
* ```
|
326
326
|
* <script type="module">
|
327
|
-
* import {removeAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
327
|
+
* import {removeAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
328
328
|
* removeAttributeToken();
|
329
329
|
* </script>
|
330
330
|
* ```
|
@@ -360,7 +360,7 @@ function removeAttributeToken(element, key, token) {
|
|
360
360
|
*
|
361
361
|
* ```
|
362
362
|
* <script type="module">
|
363
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
363
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
364
364
|
* Monster.DOM.containsAttributeToken();
|
365
365
|
* </script>
|
366
366
|
* ```
|
@@ -369,7 +369,7 @@ function removeAttributeToken(element, key, token) {
|
|
369
369
|
*
|
370
370
|
* ```
|
371
371
|
* <script type="module">
|
372
|
-
* import {containsAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
372
|
+
* import {containsAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
373
373
|
* containsAttributeToken();
|
374
374
|
* </script>
|
375
375
|
* ```
|
@@ -402,7 +402,7 @@ function containsAttributeToken(element, key, token) {
|
|
402
402
|
*
|
403
403
|
* ```
|
404
404
|
* <script type="module">
|
405
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
405
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
406
406
|
* Monster.DOM.replaceAttributeToken();
|
407
407
|
* </script>
|
408
408
|
* ```
|
@@ -411,7 +411,7 @@ function containsAttributeToken(element, key, token) {
|
|
411
411
|
*
|
412
412
|
* ```
|
413
413
|
* <script type="module">
|
414
|
-
* import {replaceAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
414
|
+
* import {replaceAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
415
415
|
* replaceAttributeToken();
|
416
416
|
* </script>
|
417
417
|
* ```
|
@@ -447,7 +447,7 @@ function replaceAttributeToken(element, key, from, to) {
|
|
447
447
|
*
|
448
448
|
* ```
|
449
449
|
* <script type="module">
|
450
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
450
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
451
451
|
* Monster.DOM.clearAttributeTokens();
|
452
452
|
* </script>
|
453
453
|
* ```
|
@@ -456,7 +456,7 @@ function replaceAttributeToken(element, key, from, to) {
|
|
456
456
|
*
|
457
457
|
* ```
|
458
458
|
* <script type="module">
|
459
|
-
* import {clearAttributeTokens} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
459
|
+
* import {clearAttributeTokens} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
460
460
|
* clearAttributeTokens();
|
461
461
|
* </script>
|
462
462
|
* ```
|
@@ -482,11 +482,29 @@ function clearAttributeTokens(element, key) {
|
|
482
482
|
}
|
483
483
|
|
484
484
|
/**
|
485
|
+
* This function searches, starting from an `HTMLElemement`, for the next element that has a certain attribute.
|
486
|
+
*
|
487
|
+
* ```html
|
488
|
+
* <div data-my-attribute="2" id="2">
|
489
|
+
* <div id="1"></div>
|
490
|
+
* </div>
|
491
|
+
* ```
|
492
|
+
*
|
493
|
+
* ```javascript
|
494
|
+
* // if no value is specified (undefined), then only the attribute is checked.
|
495
|
+
* findClosestByAttribute(document.getElementById('1'),'data-my-attribute'); // ↦ node with id 2
|
496
|
+
* findClosestByAttribute(document.getElementById('2'),'data-my-attribute'); // ↦ node with id 2
|
497
|
+
*
|
498
|
+
* // if a value is specified, for example an empty string, then the name and the value are checked.
|
499
|
+
* findClosestByAttribute(document.getElementById('1'),'data-my-attribute', ''); // ↦ undefined
|
500
|
+
* findClosestByAttribute(document.getElementById('1'),'data-my-attribute', '2'); // ↦ node with id 2
|
501
|
+
* ```
|
502
|
+
*
|
485
503
|
* You can call the method via the monster namespace `new Monster.DOM.findClosestByAttribute()`.
|
486
504
|
*
|
487
505
|
* ```
|
488
506
|
* <script type="module">
|
489
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
507
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
490
508
|
* Monster.DOM.findClosestByAttribute();
|
491
509
|
* </script>
|
492
510
|
* ```
|
@@ -495,7 +513,7 @@ function clearAttributeTokens(element, key) {
|
|
495
513
|
*
|
496
514
|
* ```
|
497
515
|
* <script type="module">
|
498
|
-
* import {findClosestByAttribute} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
516
|
+
* import {findClosestByAttribute} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
499
517
|
* findClosestByAttribute();
|
500
518
|
* </script>
|
501
519
|
* ```
|
@@ -507,12 +525,20 @@ function clearAttributeTokens(element, key) {
|
|
507
525
|
* @param {string} key
|
508
526
|
* @param {string|undefined} value
|
509
527
|
* @return {HTMLElement|undefined}
|
528
|
+
* @summary find closest node
|
510
529
|
*/
|
511
530
|
function findClosestByAttribute(element, key, value) {
|
512
531
|
validateInstance(element, getGlobalFunction('HTMLElement'));
|
513
532
|
|
514
|
-
if (element.hasAttribute(key)
|
515
|
-
|
533
|
+
if (element.hasAttribute(key)) {
|
534
|
+
if (value === undefined) {
|
535
|
+
return element;
|
536
|
+
}
|
537
|
+
|
538
|
+
if (element.getAttribute(key) === value) {
|
539
|
+
return element;
|
540
|
+
}
|
541
|
+
|
516
542
|
}
|
517
543
|
|
518
544
|
let selector = validateString(key);
|
@@ -524,8 +550,64 @@ function findClosestByAttribute(element, key, value) {
|
|
524
550
|
return undefined;
|
525
551
|
}
|
526
552
|
|
553
|
+
/**
|
554
|
+
* This function searches, starting from an `HTMLElemement`, for the next element that has a certain attribute.
|
555
|
+
*
|
556
|
+
* ```html
|
557
|
+
* <div class="myclass" id="2">
|
558
|
+
* <div id="1"></div>
|
559
|
+
* </div>
|
560
|
+
* ```
|
561
|
+
*
|
562
|
+
* ```javascript
|
563
|
+
* // if no value is specified (undefined), then only the attribute is checked.
|
564
|
+
* findClosestByClass(document.getElementById('1'),'myclass'); // ↦ node with id 2
|
565
|
+
* findClosestByClass(document.getElementById('2'),'myclass'); // ↦ node with id 2
|
566
|
+
* ```
|
567
|
+
*
|
568
|
+
* You can call the method via the monster namespace `new Monster.DOM.findClosestByClass()`.
|
569
|
+
*
|
570
|
+
* ```
|
571
|
+
* <script type="module">
|
572
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
|
573
|
+
* Monster.DOM.findClosestByClass();
|
574
|
+
* </script>
|
575
|
+
* ```
|
576
|
+
*
|
577
|
+
* Alternatively, you can also integrate this function individually.
|
578
|
+
*
|
579
|
+
* ```
|
580
|
+
* <script type="module">
|
581
|
+
* import {findClosestByClass} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/attributes.js';
|
582
|
+
* findClosestByClass();
|
583
|
+
* </script>
|
584
|
+
* ```
|
585
|
+
*
|
586
|
+
* @since 1.27.0
|
587
|
+
* @copyright schukai GmbH
|
588
|
+
* @memberOf Monster.DOM
|
589
|
+
* @param {HTMLElement} element
|
590
|
+
* @param {string} className
|
591
|
+
* @return {HTMLElement|undefined}
|
592
|
+
* @summary find closest node
|
593
|
+
*/
|
594
|
+
function findClosestByClass(element, className) {
|
595
|
+
validateInstance(element, getGlobalFunction('HTMLElement'));
|
596
|
+
|
597
|
+
if (element?.classList?.contains(validateString(className))) {
|
598
|
+
return element;
|
599
|
+
}
|
600
|
+
|
601
|
+
let result = element.closest('.' + className);
|
602
|
+
if (result instanceof HTMLElement) {
|
603
|
+
return result;
|
604
|
+
}
|
605
|
+
|
606
|
+
return undefined;
|
607
|
+
}
|
608
|
+
|
527
609
|
// exports
|
528
|
-
assignToNamespace('Monster.DOM', getLinkedObjects, addToObjectLink, removeObjectLink, findClosestByAttribute, hasObjectLink, clearAttributeTokens, replaceAttributeToken, containsAttributeToken, removeAttributeToken, addAttributeToken, toggleAttributeToken);
|
610
|
+
assignToNamespace('Monster.DOM', findClosestByClass, getLinkedObjects, addToObjectLink, removeObjectLink, findClosestByAttribute, hasObjectLink, clearAttributeTokens, replaceAttributeToken, containsAttributeToken, removeAttributeToken, addAttributeToken, toggleAttributeToken);
|
529
611
|
export {
|
530
612
|
Monster,
|
531
613
|
addToObjectLink,
|
@@ -539,5 +621,6 @@ export {
|
|
539
621
|
addAttributeToken,
|
540
622
|
toggleAttributeToken,
|
541
623
|
getLinkedObjects,
|
542
|
-
findClosestObjectLink
|
624
|
+
findClosestObjectLink,
|
625
|
+
findClosestByClass
|
543
626
|
}
|