@schukai/monster 1.13.0 → 1.15.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -3,12 +3,11 @@
|
|
3
3
|
/**
|
4
4
|
* @author schukai GmbH
|
5
5
|
*/
|
6
|
-
|
7
|
-
import {Monster} from '../namespace.js';
|
8
|
-
import {isObject, isArray, isInteger} from '../types/is.js';
|
9
|
-
import {validateString, validateInteger} from '../types/validate.js';
|
6
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
10
7
|
import {Base} from '../types/base.js';
|
8
|
+
import {isArray, isInteger, isObject} from '../types/is.js';
|
11
9
|
import {Stack} from "../types/stack.js";
|
10
|
+
import {validateInteger, validateString} from '../types/validate.js';
|
12
11
|
|
13
12
|
/**
|
14
13
|
* path separator
|
@@ -28,7 +27,7 @@ const WILDCARD = '*';
|
|
28
27
|
*
|
29
28
|
* ```
|
30
29
|
* <script type="module">
|
31
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
30
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/data/pathfinder.js';
|
32
31
|
* console.log(new Monster.Data.Pathfinder())
|
33
32
|
* </script>
|
34
33
|
* ```
|
@@ -37,7 +36,7 @@ const WILDCARD = '*';
|
|
37
36
|
*
|
38
37
|
* ```
|
39
38
|
* <script type="module">
|
40
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
39
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/data/pathfinder.js';
|
41
40
|
* console.log(new Pathfinder())
|
42
41
|
* </script>
|
43
42
|
* ```
|
@@ -79,7 +78,7 @@ const WILDCARD = '*';
|
|
79
78
|
*
|
80
79
|
* @example
|
81
80
|
*
|
82
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
81
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/data/pathfinder.js';
|
83
82
|
*
|
84
83
|
* let value = new Pathfinder({
|
85
84
|
* a: {
|
@@ -105,7 +104,7 @@ const WILDCARD = '*';
|
|
105
104
|
*
|
106
105
|
* @example
|
107
106
|
*
|
108
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
107
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/data/pathfinder.js';
|
109
108
|
*
|
110
109
|
* let p = new Pathfinder({
|
111
110
|
* a: {
|
@@ -226,7 +225,7 @@ class Pathfinder extends Base {
|
|
226
225
|
|
227
226
|
}
|
228
227
|
|
229
|
-
|
228
|
+
assignToNamespace('Monster.Data', Pathfinder);
|
230
229
|
export {Monster, Pathfinder}
|
231
230
|
|
232
231
|
/**
|
@@ -399,7 +398,7 @@ function setValueViaPath(object, path, value) {
|
|
399
398
|
assignProperty(anchor, last, value);
|
400
399
|
}
|
401
400
|
|
402
|
-
|
401
|
+
|
403
402
|
|
404
403
|
}
|
405
404
|
|
@@ -412,7 +411,7 @@ function setValueViaPath(object, path, value) {
|
|
412
411
|
function assignProperty(object, key, value) {
|
413
412
|
|
414
413
|
if (!object.hasOwnProperty(key)) {
|
415
|
-
object[key]=value;
|
414
|
+
object[key] = value;
|
416
415
|
return;
|
417
416
|
}
|
418
417
|
|
@@ -420,8 +419,8 @@ function assignProperty(object, key, value) {
|
|
420
419
|
delete object[key];
|
421
420
|
}
|
422
421
|
|
423
|
-
object[key]=value;
|
424
|
-
|
422
|
+
object[key] = value;
|
423
|
+
|
425
424
|
}
|
426
425
|
|
427
426
|
/**
|
@@ -457,6 +456,6 @@ function deleteValueViaPath(object, path) {
|
|
457
456
|
delete anchor[last];
|
458
457
|
}
|
459
458
|
|
460
|
-
|
459
|
+
|
461
460
|
|
462
461
|
}
|
package/source/data/pipe.js
CHANGED
@@ -4,10 +4,10 @@
|
|
4
4
|
* @author schukai GmbH
|
5
5
|
*/
|
6
6
|
|
7
|
-
import {Monster} from '../namespace.js';
|
8
|
-
import {Transformer} from './transformer.js';
|
7
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
9
8
|
import {Base} from '../types/base.js';
|
10
|
-
import {
|
9
|
+
import {validateString} from '../types/validate.js';
|
10
|
+
import {Transformer} from './transformer.js';
|
11
11
|
|
12
12
|
|
13
13
|
const DELIMITER = '|';
|
@@ -18,8 +18,8 @@ const DELIMITER = '|';
|
|
18
18
|
* You can call the method via the monster namespace `new Monster.Data.Pipe()`.
|
19
19
|
*
|
20
20
|
* ```
|
21
|
-
* <script type="module">
|
22
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
21
|
+
* <script type="module">
|
22
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/data/pipe.js';
|
23
23
|
* console.log(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.15.2/dist/modules/data/pipe.js';
|
32
32
|
* console.log(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.15.2/dist/modules/data/pipe.js';
|
43
43
|
*
|
44
44
|
* let obj = {
|
45
45
|
* a: {
|
@@ -106,5 +106,5 @@ class Pipe extends Base {
|
|
106
106
|
}
|
107
107
|
}
|
108
108
|
|
109
|
-
|
109
|
+
assignToNamespace('Monster.Data', Pipe);
|
110
110
|
export {Monster, Pipe}
|
@@ -3,19 +3,18 @@
|
|
3
3
|
/**
|
4
4
|
* @author schukai GmbH
|
5
5
|
*/
|
6
|
-
|
7
|
-
import {Monster} from '../namespace.js';
|
6
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
8
7
|
import {Base} from '../types/base.js';
|
9
8
|
import {getGlobal} from "../types/global.js";
|
9
|
+
import {ID} from '../types/id.js';
|
10
|
+
import {isArray, isObject, isString} from '../types/is.js';
|
10
11
|
import {
|
11
|
-
validateString,
|
12
|
-
validatePrimitive,
|
13
12
|
validateFunction,
|
14
13
|
validateInteger,
|
15
|
-
validateObject
|
14
|
+
validateObject,
|
15
|
+
validatePrimitive,
|
16
|
+
validateString
|
16
17
|
} from '../types/validate.js';
|
17
|
-
import {isObject, isString, isArray} from '../types/is.js';
|
18
|
-
import {ID} from '../types/id.js';
|
19
18
|
import {clone} from "../util/clone.js";
|
20
19
|
import {Pathfinder} from "./pathfinder.js";
|
21
20
|
|
@@ -26,7 +25,7 @@ import {Pathfinder} from "./pathfinder.js";
|
|
26
25
|
*
|
27
26
|
* ```
|
28
27
|
* <script type="module">
|
29
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
28
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/data/transformer.js';
|
30
29
|
* console.log(new Monster.Data.Transformer())
|
31
30
|
* </script>
|
32
31
|
* ```
|
@@ -35,7 +34,7 @@ import {Pathfinder} from "./pathfinder.js";
|
|
35
34
|
*
|
36
35
|
* ```
|
37
36
|
* <script type="module">
|
38
|
-
* import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
37
|
+
* import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/data/transformer.js';
|
39
38
|
* console.log(new Transformer())
|
40
39
|
* </script>
|
41
40
|
* ```
|
@@ -114,7 +113,7 @@ import {Pathfinder} from "./pathfinder.js";
|
|
114
113
|
*
|
115
114
|
* @example
|
116
115
|
*
|
117
|
-
* import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
116
|
+
* import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/data/transformer.js';
|
118
117
|
*
|
119
118
|
* const transformer = new Transformer("tolower")
|
120
119
|
*
|
@@ -181,7 +180,7 @@ class Transformer extends Base {
|
|
181
180
|
}
|
182
181
|
}
|
183
182
|
|
184
|
-
|
183
|
+
assignToNamespace('Monster.Data', Transformer);
|
185
184
|
export {Monster, Transformer}
|
186
185
|
|
187
186
|
/**
|
@@ -465,3 +464,4 @@ function transform(value) {
|
|
465
464
|
|
466
465
|
return value;
|
467
466
|
}
|
467
|
+
|
package/source/dom/assembler.js
CHANGED
@@ -3,16 +3,16 @@
|
|
3
3
|
/**
|
4
4
|
* @author schukai GmbH
|
5
5
|
*/
|
6
|
-
|
7
|
-
import {
|
8
|
-
import {validateInstance, validateString} from "../types/validate.js";
|
6
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
7
|
+
import {Base} from '../types/base.js';
|
9
8
|
import {getGlobalFunction} from "../types/global.js";
|
10
9
|
import {ProxyObserver} from "../types/proxyobserver.js";
|
10
|
+
import {validateInstance, validateString} from "../types/validate.js";
|
11
11
|
|
12
12
|
|
13
13
|
/**
|
14
14
|
* attribute prefix
|
15
|
-
*
|
15
|
+
*
|
16
16
|
* @type {string}
|
17
17
|
* @memberOf Monster/DOM
|
18
18
|
*/
|
@@ -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.15.2/dist/modules/dom/assembler.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.15.2/dist/modules/dom/assembler.js';
|
36
36
|
* console.log(new Assembler())
|
37
37
|
* </script>
|
38
38
|
* ```
|
@@ -95,5 +95,5 @@ class Assembler extends Base {
|
|
95
95
|
|
96
96
|
}
|
97
97
|
|
98
|
-
|
98
|
+
assignToNamespace('Monster.DOM', Assembler);
|
99
99
|
export {Monster, ATTRIBUTEPREFIX, Assembler}
|
package/source/dom/attributes.js
CHANGED
@@ -4,9 +4,8 @@
|
|
4
4
|
* @author schukai GmbH
|
5
5
|
*/
|
6
6
|
|
7
|
-
import {Monster} from '../namespace.js';
|
7
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
8
8
|
import {getGlobalFunction} from "../types/global.js";
|
9
|
-
import {isInstance} from "../types/is.js";
|
10
9
|
import {TokenList} from "../types/tokenlist.js";
|
11
10
|
import {validateInstance, validateString, validateSymbol} from "../types/validate.js";
|
12
11
|
import {ATTRIBUTE_OBJECTLINK} from "./constants.js";
|
@@ -21,7 +20,7 @@ import {ATTRIBUTE_OBJECTLINK} from "./constants.js";
|
|
21
20
|
*
|
22
21
|
* ```
|
23
22
|
* <script type="module">
|
24
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
23
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/updater.js';
|
25
24
|
* console.log(Monster.DOM.findClosestObjectLink())
|
26
25
|
* </script>
|
27
26
|
* ```
|
@@ -30,30 +29,20 @@ import {ATTRIBUTE_OBJECTLINK} from "./constants.js";
|
|
30
29
|
*
|
31
30
|
* ```
|
32
31
|
* <script type="module">
|
33
|
-
* import {getUpdaterFromNode} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
32
|
+
* import {getUpdaterFromNode} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/updater.js';
|
34
33
|
* console.log(findClosestObjectLink())
|
35
34
|
* </script>
|
36
35
|
* ```
|
37
36
|
*
|
38
|
-
* @param {
|
39
|
-
* @return {
|
37
|
+
* @param {HTMLElement} element
|
38
|
+
* @return {HTMLElement|undefined}
|
40
39
|
* @since 1.10.0
|
41
40
|
* @copyright schukai GmbH
|
42
41
|
* @memberOf Monster/DOM
|
43
|
-
* @throws {TypeError} value is not an instance of
|
42
|
+
* @throws {TypeError} value is not an instance of HTMLElement
|
44
43
|
*/
|
45
|
-
function findClosestObjectLink(
|
46
|
-
|
47
|
-
|
48
|
-
let attribute = node.hasAttribute(ATTRIBUTE_OBJECTLINK);
|
49
|
-
if (attribute === false) {
|
50
|
-
let parentNode = node?.['parentNode'];
|
51
|
-
if (isInstance(parentNode, getGlobalFunction('Node'))) {
|
52
|
-
return findClosestObjectLink(parentNode)
|
53
|
-
}
|
54
|
-
}
|
55
|
-
|
56
|
-
return node;
|
44
|
+
function findClosestObjectLink(element) {
|
45
|
+
return findClosestByAttribute(element, ATTRIBUTE_OBJECTLINK);
|
57
46
|
}
|
58
47
|
|
59
48
|
/**
|
@@ -61,7 +50,7 @@ function findClosestObjectLink(node) {
|
|
61
50
|
*
|
62
51
|
* ```
|
63
52
|
* <script type="module">
|
64
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
53
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
65
54
|
* Monster.DOM.addToObjectLink();
|
66
55
|
* </script>
|
67
56
|
* ```
|
@@ -70,7 +59,7 @@ function findClosestObjectLink(node) {
|
|
70
59
|
*
|
71
60
|
* ```
|
72
61
|
* <script type="module">
|
73
|
-
* import {addToObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
62
|
+
* import {addToObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
74
63
|
* addToObjectLink();
|
75
64
|
* </script>
|
76
65
|
* ```
|
@@ -103,7 +92,7 @@ function addToObjectLink(element, symbol, object) {
|
|
103
92
|
*
|
104
93
|
* ```
|
105
94
|
* <script type="module">
|
106
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
95
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
107
96
|
* Monster.DOM.removeObjectLink();
|
108
97
|
* </script>
|
109
98
|
* ```
|
@@ -112,7 +101,7 @@ function addToObjectLink(element, symbol, object) {
|
|
112
101
|
*
|
113
102
|
* ```
|
114
103
|
* <script type="module">
|
115
|
-
* import {removeObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
104
|
+
* import {removeObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
116
105
|
* removeObjectLink();
|
117
106
|
* </script>
|
118
107
|
* ```
|
@@ -145,7 +134,7 @@ function removeObjectLink(element, symbol) {
|
|
145
134
|
*
|
146
135
|
* ```
|
147
136
|
* <script type="module">
|
148
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
137
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
149
138
|
* Monster.DOM.hasObjectLink();
|
150
139
|
* </script>
|
151
140
|
* ```
|
@@ -154,7 +143,7 @@ function removeObjectLink(element, symbol) {
|
|
154
143
|
*
|
155
144
|
* ```
|
156
145
|
* <script type="module">
|
157
|
-
* import {hasObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
146
|
+
* import {hasObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
158
147
|
* hasObjectLink();
|
159
148
|
* </script>
|
160
149
|
* ```
|
@@ -180,18 +169,18 @@ function hasObjectLink(element, symbol) {
|
|
180
169
|
}
|
181
170
|
|
182
171
|
/**
|
183
|
-
* The ObjectLink can be used to attach objects to HTMLElements. The elements are kept in a set under a unique
|
184
|
-
* symbol and can be read via an iterator {@see getLinkedObjects}.
|
185
|
-
*
|
172
|
+
* The ObjectLink can be used to attach objects to HTMLElements. The elements are kept in a set under a unique
|
173
|
+
* symbol and can be read via an iterator {@see getLinkedObjects}.
|
174
|
+
*
|
186
175
|
* In addition, elements with an objectLink receive the attribute `data-monster-objectlink`.
|
187
|
-
*
|
176
|
+
*
|
188
177
|
* With the method {@see addToObjectLink} the objects can be added.
|
189
|
-
*
|
178
|
+
*
|
190
179
|
* You can call the method via the monster namespace `new Monster.DOM.getLinkedObjects()`.
|
191
180
|
*
|
192
181
|
* ```
|
193
182
|
* <script type="module">
|
194
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
183
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
195
184
|
* Monster.DOM.getLinkedObjects();
|
196
185
|
* </script>
|
197
186
|
* ```
|
@@ -200,7 +189,7 @@ function hasObjectLink(element, symbol) {
|
|
200
189
|
*
|
201
190
|
* ```
|
202
191
|
* <script type="module">
|
203
|
-
* import {getLinkedObjects} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
192
|
+
* import {getLinkedObjects} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
204
193
|
* getLinkedObjects();
|
205
194
|
* </script>
|
206
195
|
* ```
|
@@ -236,7 +225,7 @@ function getLinkedObjects(element, symbol) {
|
|
236
225
|
*
|
237
226
|
* ```
|
238
227
|
* <script type="module">
|
239
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
228
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
240
229
|
* Monster.DOM.toggleAttributeToken();
|
241
230
|
* </script>
|
242
231
|
* ```
|
@@ -245,7 +234,7 @@ function getLinkedObjects(element, symbol) {
|
|
245
234
|
*
|
246
235
|
* ```
|
247
236
|
* <script type="module">
|
248
|
-
* import {toggleAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
237
|
+
* import {toggleAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
249
238
|
* toggleAttributeToken();
|
250
239
|
* </script>
|
251
240
|
* ```
|
@@ -280,7 +269,7 @@ function toggleAttributeToken(element, key, token) {
|
|
280
269
|
*
|
281
270
|
* ```
|
282
271
|
* <script type="module">
|
283
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
272
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
284
273
|
* Monster.DOM.addAttributeToken();
|
285
274
|
* </script>
|
286
275
|
* ```
|
@@ -289,7 +278,7 @@ function toggleAttributeToken(element, key, token) {
|
|
289
278
|
*
|
290
279
|
* ```
|
291
280
|
* <script type="module">
|
292
|
-
* import {addAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
281
|
+
* import {addAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
293
282
|
* addAttributeToken();
|
294
283
|
* </script>
|
295
284
|
* ```
|
@@ -326,7 +315,7 @@ function addAttributeToken(element, key, token) {
|
|
326
315
|
*
|
327
316
|
* ```
|
328
317
|
* <script type="module">
|
329
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
318
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
330
319
|
* Monster.DOM.removeAttributeToken();
|
331
320
|
* </script>
|
332
321
|
* ```
|
@@ -335,7 +324,7 @@ function addAttributeToken(element, key, token) {
|
|
335
324
|
*
|
336
325
|
* ```
|
337
326
|
* <script type="module">
|
338
|
-
* import {removeAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
327
|
+
* import {removeAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
339
328
|
* removeAttributeToken();
|
340
329
|
* </script>
|
341
330
|
* ```
|
@@ -371,7 +360,7 @@ function removeAttributeToken(element, key, token) {
|
|
371
360
|
*
|
372
361
|
* ```
|
373
362
|
* <script type="module">
|
374
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
363
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
375
364
|
* Monster.DOM.containsAttributeToken();
|
376
365
|
* </script>
|
377
366
|
* ```
|
@@ -380,7 +369,7 @@ function removeAttributeToken(element, key, token) {
|
|
380
369
|
*
|
381
370
|
* ```
|
382
371
|
* <script type="module">
|
383
|
-
* import {containsAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
372
|
+
* import {containsAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
384
373
|
* containsAttributeToken();
|
385
374
|
* </script>
|
386
375
|
* ```
|
@@ -413,7 +402,7 @@ function containsAttributeToken(element, key, token) {
|
|
413
402
|
*
|
414
403
|
* ```
|
415
404
|
* <script type="module">
|
416
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
405
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
417
406
|
* Monster.DOM.replaceAttributeToken();
|
418
407
|
* </script>
|
419
408
|
* ```
|
@@ -422,7 +411,7 @@ function containsAttributeToken(element, key, token) {
|
|
422
411
|
*
|
423
412
|
* ```
|
424
413
|
* <script type="module">
|
425
|
-
* import {replaceAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
414
|
+
* import {replaceAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
426
415
|
* replaceAttributeToken();
|
427
416
|
* </script>
|
428
417
|
* ```
|
@@ -458,7 +447,7 @@ function replaceAttributeToken(element, key, from, to) {
|
|
458
447
|
*
|
459
448
|
* ```
|
460
449
|
* <script type="module">
|
461
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
450
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
462
451
|
* Monster.DOM.clearAttributeTokens();
|
463
452
|
* </script>
|
464
453
|
* ```
|
@@ -467,13 +456,13 @@ function replaceAttributeToken(element, key, from, to) {
|
|
467
456
|
*
|
468
457
|
* ```
|
469
458
|
* <script type="module">
|
470
|
-
* import {clearAttributeTokens} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
459
|
+
* import {clearAttributeTokens} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
471
460
|
* clearAttributeTokens();
|
472
461
|
* </script>
|
473
462
|
* ```
|
474
463
|
*
|
475
464
|
* @since 1.9.0
|
476
|
-
* @copyright schukai GmbH
|
465
|
+
* @copyright schukai GmbH
|
477
466
|
* @memberOf Monster/DOM
|
478
467
|
* @param {HTMLElement} element
|
479
468
|
* @param {string} key
|
@@ -492,13 +481,67 @@ function clearAttributeTokens(element, key) {
|
|
492
481
|
return element
|
493
482
|
}
|
494
483
|
|
484
|
+
/**
|
485
|
+
* You can call the method via the monster namespace `new Monster.DOM.findClosestByAttribute()`.
|
486
|
+
*
|
487
|
+
* ```
|
488
|
+
* <script type="module">
|
489
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
490
|
+
* Monster.DOM.findClosestByAttribute();
|
491
|
+
* </script>
|
492
|
+
* ```
|
493
|
+
*
|
494
|
+
* Alternatively, you can also integrate this function individually.
|
495
|
+
*
|
496
|
+
* ```
|
497
|
+
* <script type="module">
|
498
|
+
* import {clearAttributeTokens} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.15.2/dist/modules/dom/attributes.js';
|
499
|
+
* findClosestByAttribute();
|
500
|
+
* </script>
|
501
|
+
* ```
|
502
|
+
*
|
503
|
+
* @since 1.14.0
|
504
|
+
* @copyright schukai GmbH
|
505
|
+
* @memberOf Monster/DOM
|
506
|
+
* @param {HTMLElement} element
|
507
|
+
* @param {string} key
|
508
|
+
* @return {HTMLElement|undefined}
|
509
|
+
* @throws {TypeError} value is not a string
|
510
|
+
* @throws {TypeError} value is not an instance of HTMLElement
|
511
|
+
*/
|
512
|
+
|
513
|
+
/**
|
514
|
+
*
|
515
|
+
* @since 1.14.0
|
516
|
+
* @param {HTMLElement} element
|
517
|
+
* @param {string} key
|
518
|
+
* @param {string|undefined} value
|
519
|
+
* @return {HTMLElement|undefined}
|
520
|
+
*/
|
521
|
+
function findClosestByAttribute(element, key, value) {
|
522
|
+
validateInstance(element, getGlobalFunction('HTMLElement'));
|
523
|
+
|
524
|
+
if (element.hasAttribute(key) && element.getAttribute(key) === value) {
|
525
|
+
return element;
|
526
|
+
}
|
527
|
+
|
528
|
+
let selector = validateString(key);
|
529
|
+
if (value !== undefined) selector += "=" + validateString(value);
|
530
|
+
let result = element.closest('[' + selector + ']');
|
531
|
+
if (result instanceof HTMLElement) {
|
532
|
+
return result;
|
533
|
+
}
|
534
|
+
return undefined;
|
535
|
+
}
|
495
536
|
|
496
|
-
|
537
|
+
// exports
|
538
|
+
assignToNamespace('Monster.DOM', getLinkedObjects, addToObjectLink, removeObjectLink, findClosestByAttribute, hasObjectLink, clearAttributeTokens, replaceAttributeToken, containsAttributeToken, removeAttributeToken, addAttributeToken, toggleAttributeToken);
|
497
539
|
export {
|
498
540
|
Monster,
|
499
541
|
addToObjectLink,
|
500
542
|
removeObjectLink,
|
501
543
|
hasObjectLink,
|
544
|
+
findClosestByAttribute,
|
502
545
|
clearAttributeTokens,
|
503
546
|
replaceAttributeToken,
|
504
547
|
containsAttributeToken,
|
package/source/dom/constants.js
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
-
import {Monster} from
|
4
|
-
|
3
|
+
import {Monster} from '../namespace.js';
|
5
4
|
/**
|
6
5
|
* @author schukai GmbH
|
7
6
|
*/
|
@@ -83,6 +82,13 @@ const ATTRIBUTE_UPDATER_REMOVE = ATTRIBUTE_PREFIX + 'remove';
|
|
83
82
|
*/
|
84
83
|
const ATTRIBUTE_UPDATER_BIND = ATTRIBUTE_PREFIX + 'bind';
|
85
84
|
|
85
|
+
/**
|
86
|
+
* @memberOf Monster/DOM
|
87
|
+
* @type {string}
|
88
|
+
* @since 1.14.0
|
89
|
+
*/
|
90
|
+
const ATTRIBUTE_ROLE = ATTRIBUTE_PREFIX + 'role';
|
91
|
+
|
86
92
|
/**
|
87
93
|
* @memberOf Monster/DOM
|
88
94
|
* @type {string}
|
@@ -104,6 +110,7 @@ export {
|
|
104
110
|
ATTRIBUTE_OPTIONS,
|
105
111
|
DEFAULT_THEME,
|
106
112
|
ATTRIBUTE_THEME_PREFIX,
|
113
|
+
ATTRIBUTE_ROLE,
|
107
114
|
ATTRIBUTE_THEME_NAME,
|
108
115
|
ATTRIBUTE_UPDATER_ATTRIBUTES,
|
109
116
|
ATTRIBUTE_UPDATER_REPLACE,
|