@schukai/monster 1.26.1 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/CHANGELOG +38 -1
  2. package/README.md +4 -4
  3. package/dist/modules/constants.js +1 -1
  4. package/dist/modules/constraints/abstract.js +1 -1
  5. package/dist/modules/constraints/abstractoperator.js +1 -1
  6. package/dist/modules/constraints/andoperator.js +1 -1
  7. package/dist/modules/constraints/invalid.js +1 -1
  8. package/dist/modules/constraints/isarray.js +1 -1
  9. package/dist/modules/constraints/isobject.js +1 -1
  10. package/dist/modules/constraints/namespace.js +1 -1
  11. package/dist/modules/constraints/oroperator.js +1 -1
  12. package/dist/modules/constraints/valid.js +1 -1
  13. package/dist/modules/data/buildmap.js +2 -2
  14. package/dist/modules/data/buildtree.js +2 -2
  15. package/dist/modules/data/datasource/namespace.js +1 -1
  16. package/dist/modules/data/datasource/restapi/writeerror.js +1 -1
  17. package/dist/modules/data/datasource/restapi.js +1 -1
  18. package/dist/modules/data/datasource/storage/localstorage.js +1 -1
  19. package/dist/modules/data/datasource/storage/namespace.js +1 -1
  20. package/dist/modules/data/datasource/storage/sessionstorage.js +1 -1
  21. package/dist/modules/data/datasource/storage.js +1 -1
  22. package/dist/modules/data/datasource.js +1 -1
  23. package/dist/modules/data/diff.js +1 -1
  24. package/dist/modules/data/extend.js +1 -1
  25. package/dist/modules/data/namespace.js +1 -1
  26. package/dist/modules/data/pathfinder.js +1 -1
  27. package/dist/modules/data/pipe.js +1 -1
  28. package/dist/modules/data/transformer.js +1 -1
  29. package/dist/modules/dom/assembler.js +1 -1
  30. package/dist/modules/dom/attributes.js +2 -2
  31. package/dist/modules/dom/constants.js +2 -2
  32. package/dist/modules/dom/customcontrol.js +1 -1
  33. package/dist/modules/dom/customelement.js +2 -2
  34. package/dist/modules/dom/events.js +2 -2
  35. package/dist/modules/dom/focusmanager.js +1 -1
  36. package/dist/modules/dom/locale.js +1 -1
  37. package/dist/modules/dom/namespace.js +1 -1
  38. package/dist/modules/dom/resource/data.js +1 -1
  39. package/dist/modules/dom/resource/link/stylesheet.js +1 -1
  40. package/dist/modules/dom/resource/link.js +1 -1
  41. package/dist/modules/dom/resource/script.js +1 -1
  42. package/dist/modules/dom/resource.js +1 -1
  43. package/dist/modules/dom/resourcemanager.js +1 -1
  44. package/dist/modules/dom/template.js +2 -2
  45. package/dist/modules/dom/theme.js +1 -1
  46. package/dist/modules/dom/updater.js +2 -2
  47. package/dist/modules/dom/util.js +1 -1
  48. package/dist/modules/dom/worker/factory.js +1 -1
  49. package/dist/modules/i18n/formatter.js +1 -1
  50. package/dist/modules/i18n/locale.js +1 -1
  51. package/dist/modules/i18n/namespace.js +1 -1
  52. package/dist/modules/i18n/provider.js +1 -1
  53. package/dist/modules/i18n/providers/fetch.js +1 -1
  54. package/dist/modules/i18n/providers/namespace.js +1 -1
  55. package/dist/modules/i18n/translations.js +1 -1
  56. package/dist/modules/logging/handler/console.js +1 -1
  57. package/dist/modules/logging/handler/namespace.js +1 -1
  58. package/dist/modules/logging/handler.js +1 -1
  59. package/dist/modules/logging/logentry.js +1 -1
  60. package/dist/modules/logging/logger.js +1 -1
  61. package/dist/modules/logging/namespace.js +1 -1
  62. package/dist/modules/math/namespace.js +1 -1
  63. package/dist/modules/math/random.js +1 -1
  64. package/dist/modules/monster.js +1 -1
  65. package/dist/modules/namespace.js +1 -1
  66. package/dist/modules/text/formatter.js +1 -1
  67. package/dist/modules/text/namespace.js +1 -1
  68. package/dist/modules/types/base.js +1 -1
  69. package/dist/modules/types/basewithoptions.js +1 -1
  70. package/dist/modules/types/binary.js +1 -1
  71. package/dist/modules/types/dataurl.js +1 -1
  72. package/dist/modules/types/global.js +1 -1
  73. package/dist/modules/types/id.js +1 -1
  74. package/dist/modules/types/is.js +1 -1
  75. package/dist/modules/types/mediatype.js +1 -1
  76. package/dist/modules/types/namespace.js +1 -1
  77. package/dist/modules/types/node.js +2 -2
  78. package/dist/modules/types/nodelist.js +2 -2
  79. package/dist/modules/types/noderecursiveiterator.js +2 -2
  80. package/dist/modules/types/observer.js +1 -1
  81. package/dist/modules/types/observerlist.js +1 -1
  82. package/dist/modules/types/proxyobserver.js +1 -1
  83. package/dist/modules/types/queue.js +1 -1
  84. package/dist/modules/types/randomid.js +1 -1
  85. package/dist/modules/types/regex.js +1 -1
  86. package/dist/modules/types/stack.js +1 -1
  87. package/dist/modules/types/tokenlist.js +1 -1
  88. package/dist/modules/types/typeof.js +1 -1
  89. package/dist/modules/types/uniquequeue.js +1 -1
  90. package/dist/modules/types/uuid.js +1 -1
  91. package/dist/modules/types/validate.js +1 -1
  92. package/dist/modules/types/version.js +2 -2
  93. package/dist/modules/util/clone.js +1 -1
  94. package/dist/modules/util/comparator.js +1 -1
  95. package/dist/modules/util/deadmansswitch.js +2 -0
  96. package/dist/modules/util/freeze.js +1 -1
  97. package/dist/modules/util/namespace.js +1 -1
  98. package/dist/modules/util/processing.js +1 -1
  99. package/dist/modules/util/trimspaces.js +1 -1
  100. package/dist/monster.dev.js +906 -619
  101. package/dist/monster.dev.js.map +1 -1
  102. package/dist/monster.js +2 -2
  103. package/package.json +1 -1
  104. package/source/constraints/andoperator.js +5 -5
  105. package/source/constraints/invalid.js +3 -3
  106. package/source/constraints/isarray.js +3 -3
  107. package/source/constraints/isobject.js +3 -3
  108. package/source/constraints/oroperator.js +5 -5
  109. package/source/constraints/valid.js +3 -3
  110. package/source/data/buildmap.js +10 -11
  111. package/source/data/buildtree.js +51 -17
  112. package/source/data/datasource/restapi.js +3 -3
  113. package/source/data/datasource/storage/localstorage.js +2 -2
  114. package/source/data/datasource/storage/sessionstorage.js +2 -2
  115. package/source/data/datasource/storage.js +3 -3
  116. package/source/data/datasource.js +3 -3
  117. package/source/data/diff.js +3 -3
  118. package/source/data/extend.js +2 -2
  119. package/source/data/pathfinder.js +4 -4
  120. package/source/data/pipe.js +3 -3
  121. package/source/data/transformer.js +3 -3
  122. package/source/dom/assembler.js +2 -2
  123. package/source/dom/attributes.js +111 -28
  124. package/source/dom/constants.js +17 -1
  125. package/source/dom/customcontrol.js +1 -1
  126. package/source/dom/customelement.js +27 -13
  127. package/source/dom/events.js +68 -12
  128. package/source/dom/focusmanager.js +2 -2
  129. package/source/dom/locale.js +2 -2
  130. package/source/dom/resource/data.js +2 -2
  131. package/source/dom/resource/link/stylesheet.js +2 -2
  132. package/source/dom/resource/link.js +2 -2
  133. package/source/dom/resource/script.js +2 -2
  134. package/source/dom/resource.js +2 -2
  135. package/source/dom/resourcemanager.js +2 -2
  136. package/source/dom/template.js +41 -11
  137. package/source/dom/theme.js +3 -3
  138. package/source/dom/updater.js +183 -100
  139. package/source/dom/util.js +6 -6
  140. package/source/dom/worker/factory.js +2 -2
  141. package/source/i18n/formatter.js +4 -4
  142. package/source/i18n/locale.js +4 -4
  143. package/source/i18n/provider.js +2 -2
  144. package/source/i18n/providers/fetch.js +3 -3
  145. package/source/i18n/translations.js +4 -4
  146. package/source/logging/handler/console.js +2 -2
  147. package/source/logging/handler.js +2 -2
  148. package/source/logging/logentry.js +2 -2
  149. package/source/logging/logger.js +2 -2
  150. package/source/math/random.js +2 -2
  151. package/source/namespace.js +1 -1
  152. package/source/text/formatter.js +3 -3
  153. package/source/types/base.js +2 -2
  154. package/source/types/basewithoptions.js +2 -2
  155. package/source/types/binary.js +4 -4
  156. package/source/types/dataurl.js +4 -4
  157. package/source/types/global.js +4 -4
  158. package/source/types/id.js +2 -2
  159. package/source/types/is.js +20 -20
  160. package/source/types/mediatype.js +4 -4
  161. package/source/types/node.js +33 -2
  162. package/source/types/nodelist.js +9 -5
  163. package/source/types/noderecursiveiterator.js +29 -7
  164. package/source/types/observer.js +5 -13
  165. package/source/types/observerlist.js +2 -2
  166. package/source/types/proxyobserver.js +5 -5
  167. package/source/types/queue.js +3 -3
  168. package/source/types/randomid.js +2 -2
  169. package/source/types/regex.js +2 -2
  170. package/source/types/stack.js +2 -2
  171. package/source/types/tokenlist.js +2 -2
  172. package/source/types/typeof.js +3 -3
  173. package/source/types/uniquequeue.js +2 -2
  174. package/source/types/uuid.js +2 -2
  175. package/source/types/validate.js +20 -20
  176. package/source/types/version.js +6 -6
  177. package/source/util/clone.js +2 -2
  178. package/source/util/comparator.js +3 -3
  179. package/source/util/deadmansswitch.js +124 -0
  180. package/source/util/freeze.js +2 -2
  181. package/source/util/processing.js +3 -3
  182. package/source/util/trimspaces.js +2 -2
  183. package/test/cases/data/buildtree.js +84 -21
  184. package/test/cases/dom/attributes.js +29 -6
  185. package/test/cases/dom/events.js +66 -1
  186. package/test/cases/dom/template.js +72 -14
  187. package/test/cases/dom/updater.js +102 -75
  188. package/test/cases/math/random.js +3 -0
  189. package/test/cases/monster.js +1 -1
  190. package/test/cases/types/node.js +57 -1
  191. package/test/cases/types/nodelist.js +7 -0
  192. package/test/cases/types/noderecursiveiterator.js +21 -0
  193. package/test/cases/util/deadmansswitch.js +71 -0
  194. package/test/web/import.js +1 -0
  195. package/test/web/monster-dev.html +3 -3
  196. package/test/web/monster.html +2 -2
  197. package/test/web/test.html +3 -3
  198. package/test/web/tests.js +2 -2
@@ -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.26.1/dist/monster.js';
28
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/data/transformer.js';
37
+ * import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/data/transformer.js';
38
38
  * new Transformer()
39
39
  * </script>
40
40
  * ```
@@ -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.26.1/dist/modules/data/transformer.js';
123
+ * import {Transformer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/data/transformer.js';
124
124
  *
125
125
  * const transformer = new Transformer("tolower")
126
126
  *
@@ -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.1/dist/monster.js';
26
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/assembler.js';
35
+ * import {Assembler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/dom/assembler.js';
36
36
  * console.log(new Assembler())
37
37
  * </script>
38
38
  * ```
@@ -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.26.1/dist/monster.js';
23
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/updater.js';
32
+ * import {getUpdaterFromNode} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
53
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
62
+ * import {addToObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
95
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
104
+ * import {removeObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
137
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
146
+ * import {hasObjectLink} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
183
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
192
+ * import {getLinkedObjects} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
228
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
237
+ * import {toggleAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
272
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
281
+ * import {addAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
318
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
327
+ * import {removeAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
363
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
372
+ * import {containsAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
405
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
414
+ * import {replaceAttributeToken} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
450
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
459
+ * import {clearAttributeTokens} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/monster.js';
507
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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.26.1/dist/modules/dom/attributes.js';
516
+ * import {findClosestByAttribute} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.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) && element.getAttribute(key) === value) {
515
- return element;
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.29.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.29.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
  }
@@ -49,6 +49,13 @@ const ATTRIBUTE_THEME_NAME = ATTRIBUTE_THEME_PREFIX + 'name';
49
49
  */
50
50
  const ATTRIBUTE_UPDATER_ATTRIBUTES = ATTRIBUTE_PREFIX + 'attributes';
51
51
 
52
+ /**
53
+ * @memberOf Monster.DOM
54
+ * @type {string}
55
+ * @since 1.27.1
56
+ */
57
+ const ATTRIBUTE_UPDATER_SELECT_THIS = ATTRIBUTE_PREFIX + 'select-this';
58
+
52
59
  /**
53
60
  * @memberOf Monster.DOM
54
61
  * @type {string}
@@ -84,6 +91,13 @@ const ATTRIBUTE_UPDATER_REMOVE = ATTRIBUTE_PREFIX + 'remove';
84
91
  */
85
92
  const ATTRIBUTE_UPDATER_BIND = ATTRIBUTE_PREFIX + 'bind';
86
93
 
94
+ /**
95
+ * @memberOf Monster.DOM
96
+ * @type {string}
97
+ * @since 1.27.0
98
+ */
99
+ const ATTRIBUTE_TEMPLATE_PREFIX = ATTRIBUTE_PREFIX + 'template-prefix';
100
+
87
101
  /**
88
102
  * @memberOf Monster.DOM
89
103
  * @type {string}
@@ -414,5 +428,7 @@ export {
414
428
  ATTRIBUTE_DISABLED,
415
429
  ATTRIBUTE_ERRORMESSAGE,
416
430
  ATTRIBUTE_VALUE,
417
- objectUpdaterLinkSymbol
431
+ objectUpdaterLinkSymbol,
432
+ ATTRIBUTE_TEMPLATE_PREFIX,
433
+ ATTRIBUTE_UPDATER_SELECT_THIS
418
434
  }
@@ -30,7 +30,7 @@ const attachedInternalSymbol = Symbol('attachedInternal');
30
30
  *
31
31
  * ```
32
32
  * <script type="module">
33
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.1/dist/monster.js';
33
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';
34
34
  * document.createElement('monster-')
35
35
  * </script>
36
36
  * ```
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * @author schukai GmbH
5
5
  */
6
-
6
+
7
7
  import {internalSymbol} from "../constants.js";
8
8
  import {extend} from "../data/extend.js";
9
9
  import {Pathfinder} from "../data/pathfinder.js";
@@ -13,7 +13,7 @@ import {getGlobalObject} from "../types/global.js";
13
13
  import {isArray, isFunction, isObject, isString} from "../types/is.js";
14
14
  import {Observer} from "../types/observer.js";
15
15
  import {ProxyObserver} from "../types/proxyobserver.js";
16
- import {validateFunction, validateInstance, validateObject} from "../types/validate.js";
16
+ import {validateFunction, validateInstance, validateObject, validateString} from "../types/validate.js";
17
17
  import {clone} from "../util/clone.js";
18
18
  import {addToObjectLink, getLinkedObjects, hasObjectLink} from "./attributes.js";
19
19
  import {ATTRIBUTE_DISABLED, ATTRIBUTE_OPTIONS, objectUpdaterLinkSymbol} from "./constants.js";
@@ -96,7 +96,7 @@ const attributeObserverSymbol = Symbol('attributeObserver');
96
96
  *
97
97
  * ```
98
98
  * <script type="module">
99
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.1/dist/monster.js';
99
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';
100
100
  * document.createElement('monster-')
101
101
  * </script>
102
102
  * ```
@@ -521,36 +521,49 @@ class CustomElement extends HTMLElement {
521
521
 
522
522
  /**
523
523
  * @private
524
- * @param {String} filter
524
+ * @param {String|undefined} query
525
+ * @param {String|undefined|null} name name of the slot (if the parameter is undefined, all slots are searched, if the parameter has the value null, all slots without a name are searched. if a string is specified, the slots with this name are searched.)
525
526
  * @return {*}
526
527
  * @this CustomElement
527
528
  * @since 1.23.0
529
+ * @throws {Error} query must be a string
528
530
  */
529
- function getSlottedElements(filter) {
531
+ function getSlottedElements(query, name) {
530
532
  const self = this;
531
533
  const result = new Set;
532
534
 
533
-
534
535
  if (!(self.shadowRoot instanceof ShadowRoot)) {
535
536
  return result;
536
537
  }
537
538
 
538
- const slots = self.shadowRoot.querySelectorAll('slot');
539
+ let selector = 'slot';
540
+ if (name !== undefined) {
541
+ if (name === null) {
542
+ selector += ':not([name])';
543
+ } else {
544
+ selector += '[name=' + validateString(name) + ']';
545
+ }
546
+
547
+ }
548
+
549
+ const slots = self.shadowRoot.querySelectorAll(selector);
539
550
 
540
551
  for (const [, slot] of Object.entries(slots)) {
541
552
  slot.assignedElements().forEach(function (node) {
542
553
 
543
554
  if (!(node instanceof HTMLElement)) return;
544
555
 
545
- if (filter !== undefined) {
546
- node.querySelectorAll(filter).forEach(function (n) {
556
+ if (isString(query)) {
557
+ node.querySelectorAll(query).forEach(function (n) {
547
558
  result.add(n);
548
559
  });
549
560
 
550
- if (node.matches(filter)) {
561
+ if (node.matches(query)) {
551
562
  result.add(node);
552
563
  }
553
564
 
565
+ } else if (query !== undefined) {
566
+ throw new Error('query must be a string')
554
567
  } else {
555
568
  result.add(node);
556
569
  }
@@ -836,12 +849,12 @@ function assignUpdaterToElement(elements, object) {
836
849
  ])
837
850
  }
838
851
 
839
- let result = [];
852
+ let result = [];
840
853
 
841
854
  elements.forEach((element) => {
842
855
  if (!(element instanceof HTMLElement)) return;
843
856
  if ((element instanceof HTMLTemplateElement)) return;
844
-
857
+
845
858
  const u = new Updater(element, object)
846
859
  updaters.add(u);
847
860
 
@@ -866,5 +879,6 @@ export {
866
879
  initMethodSymbol,
867
880
  assembleMethodSymbol,
868
881
  assignUpdaterToElement,
869
- attributeObserverSymbol
882
+ attributeObserverSymbol,
883
+ getSlottedElements
870
884
  }
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
 
3
+
3
4
  /**
4
5
  * @author schukai GmbH
5
6
  */
6
7
  import {assignToNamespace, Monster} from '../namespace.js';
7
- import {isArray} from "../types/is.js";
8
+ import {isArray,isObject} from "../types/is.js";
8
9
  import {validateInstance, validateString} from "../types/validate.js";
9
10
  import {getDocument} from "./util.js";
10
11
 
@@ -13,8 +14,8 @@ import {getDocument} from "./util.js";
13
14
  *
14
15
  * ```
15
16
  * <script type="module">
16
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.1/dist/monster.js';
17
- * console.log(new Monster.DOM.fireEvent())
17
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';
18
+ * new Monster.DOM.fireEvent()
18
19
  * </script>
19
20
  * ```
20
21
  *
@@ -22,8 +23,8 @@ import {getDocument} from "./util.js";
22
23
  *
23
24
  * ```
24
25
  * <script type="module">
25
- * import {fireEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.1/dist/modules/dom/events.js';
26
- * console.log(fireEvent())
26
+ * import {fireEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/dom/events.js';
27
+ * fireEvent()
27
28
  * </script>
28
29
  * ```
29
30
  *
@@ -64,6 +65,62 @@ function fireEvent(element, type) {
64
65
 
65
66
  }
66
67
 
68
+ /**
69
+ * You can call the function via the monster namespace `new Monster.DOM.fireCustomEvent()`.
70
+ *
71
+ * ```
72
+ * <script type="module">
73
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';
74
+ * new Monster.DOM.fireCustomEvent()
75
+ * </script>
76
+ * ```
77
+ *
78
+ * Alternatively, you can also integrate this function individually.
79
+ *
80
+ * ```
81
+ * <script type="module">
82
+ * import {fireCustomEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/dom/events.js';
83
+ * fireCustomEvent()
84
+ * </script>
85
+ * ```
86
+ *
87
+ * @param {HTMLElement|HTMLCollection|NodeList} element
88
+ * @param {string} type
89
+ * @return {void}
90
+ * @since 1.29.0
91
+ * @copyright schukai GmbH
92
+ * @memberOf Monster.DOM
93
+ * @throws {TypeError} value is not an instance of HTMLElement or HTMLCollection
94
+ * @summary Construct and send and event
95
+ */
96
+ function fireCustomEvent(element, type, detail) {
97
+
98
+ const document = getDocument();
99
+
100
+ if (element instanceof HTMLElement) {
101
+
102
+ if (!isObject(detail)) {
103
+ detail = {detail};
104
+ }
105
+
106
+ let event = new CustomEvent(validateString(type), {
107
+ bubbles: true,
108
+ cancelable: true,
109
+ detail
110
+ });
111
+
112
+ element.dispatchEvent(event);
113
+
114
+ } else if (element instanceof HTMLCollection || element instanceof NodeList) {
115
+ for (let e of element) {
116
+ fireCustomEvent(e, type, detail);
117
+ }
118
+ } else {
119
+ throw new TypeError('value is not an instance of HTMLElement or HTMLCollection')
120
+ }
121
+
122
+ }
123
+
67
124
  /**
68
125
  * This function gets the path `Event.composedPath()` from an event and tries to find the next element
69
126
  * up the tree `element.closest()` with the attribute and value. If no value, or a value that is undefined or null,
@@ -73,8 +130,8 @@ function fireEvent(element, type) {
73
130
  *
74
131
  * ```
75
132
  * <script type="module">
76
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.1/dist/monster.js';
77
- * console.log(new Monster.DOM.findTargetElementFromEvent())
133
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';
134
+ * new Monster.DOM.findTargetElementFromEvent()
78
135
  * </script>
79
136
  * ```
80
137
  *
@@ -82,8 +139,8 @@ function fireEvent(element, type) {
82
139
  *
83
140
  * ```
84
141
  * <script type="module">
85
- * import {findTargetElementFromEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.1/dist/modules/dom/events.js';
86
- * console.log(findTargetElementFromEvent())
142
+ * import {findTargetElementFromEvent} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/dom/events.js';
143
+ * findTargetElementFromEvent()
87
144
  * </script>
88
145
  * ```
89
146
  *
@@ -105,7 +162,6 @@ function findTargetElementFromEvent(event, attributeName, attributeValue) {
105
162
  }
106
163
 
107
164
  const path = event.composedPath();
108
- const element = path?.[0];
109
165
 
110
166
  // closest cannot be used here, because closest is not correct for slotted elements
111
167
  if (isArray(path)) {
@@ -125,5 +181,5 @@ function findTargetElementFromEvent(event, attributeName, attributeValue) {
125
181
  }
126
182
 
127
183
 
128
- assignToNamespace('Monster.DOM', findTargetElementFromEvent, fireEvent);
129
- export {Monster, findTargetElementFromEvent, fireEvent}
184
+ assignToNamespace('Monster.DOM', findTargetElementFromEvent, fireEvent, fireCustomEvent);
185
+ export {Monster, findTargetElementFromEvent, fireEvent, fireCustomEvent}
@@ -41,7 +41,7 @@ const stackSymbol = Symbol('stack');
41
41
  *
42
42
  * ```
43
43
  * <script type="module">
44
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.1/dist/monster.js';
44
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/monster.js';
45
45
  * new Monster.DOM.FocusManager()
46
46
  * </script>
47
47
  * ```
@@ -50,7 +50,7 @@ const stackSymbol = Symbol('stack');
50
50
  *
51
51
  * ```
52
52
  * <script type="module">
53
- * import {FocusManager} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.1/dist/modules/dom/focusmanager.js';
53
+ * import {FocusManager} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.0/dist/modules/dom/focusmanager.js';
54
54
  * new FocusManager()
55
55
  * </script>
56
56
  * ```