@schukai/monster 1.27.0 → 1.29.1

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 (196) hide show
  1. package/CHANGELOG +32 -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 +1 -1
  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 +1 -1
  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 +498 -322
  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 +26 -26
  124. package/source/dom/constants.js +9 -1
  125. package/source/dom/customcontrol.js +1 -1
  126. package/source/dom/customelement.js +27 -13
  127. package/source/dom/events.js +66 -9
  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 +5 -5
  137. package/source/dom/theme.js +3 -3
  138. package/source/dom/updater.js +67 -24
  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 +32 -6
  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/events.js +66 -1
  185. package/test/cases/dom/updater.js +76 -3
  186. package/test/cases/math/random.js +3 -0
  187. package/test/cases/monster.js +1 -1
  188. package/test/cases/types/node.js +57 -1
  189. package/test/cases/types/nodelist.js +7 -0
  190. package/test/cases/types/noderecursiveiterator.js +21 -0
  191. package/test/cases/util/deadmansswitch.js +71 -0
  192. package/test/web/import.js +1 -0
  193. package/test/web/monster-dev.html +3 -3
  194. package/test/web/monster.html +2 -2
  195. package/test/web/test.html +3 -3
  196. package/test/web/tests.js +2 -2
@@ -47,7 +47,7 @@ export const referenceSymbol = Symbol('reference');
47
47
  *
48
48
  * ```
49
49
  * <script type="module">
50
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
50
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
51
51
  * new Monster.DOM.Resource()
52
52
  * </script>
53
53
  * ```
@@ -56,7 +56,7 @@ export const referenceSymbol = Symbol('reference');
56
56
  *
57
57
  * ```
58
58
  * <script type="module">
59
- * import {Resource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/resource.js';
59
+ * import {Resource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/resource.js';
60
60
  * new Resource()
61
61
  * </script>
62
62
  * ```
@@ -21,7 +21,7 @@ import {Script} from "./resource/script.js";
21
21
  *
22
22
  * ```
23
23
  * <script type="module">
24
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
24
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
25
25
  * new Monster.DOM.ResourceManager()
26
26
  * </script>
27
27
  * ```
@@ -30,7 +30,7 @@ import {Script} from "./resource/script.js";
30
30
  *
31
31
  * ```
32
32
  * <script type="module">
33
- * import {Resource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/resourcemanager.js';
33
+ * import {Resource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/resourcemanager.js';
34
34
  * new ResourceManager()
35
35
  * </script>
36
36
  * ```
@@ -15,7 +15,7 @@ import {getDocumentTheme} from "./theme.js";
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
19
19
  * new Monster.DOM.Template()
20
20
  * </script>
21
21
  * ```
@@ -24,7 +24,7 @@ import {getDocumentTheme} from "./theme.js";
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/template.js';
27
+ * import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/template.js';
28
28
  * new Template()
29
29
  * </script>
30
30
  * ```
@@ -86,7 +86,7 @@ class Template extends Base {
86
86
  *
87
87
  * ```
88
88
  * <script type="module">
89
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
89
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
90
90
  * Monster.DOM.findDocumentTemplate()
91
91
  * </script>
92
92
  * ```
@@ -95,14 +95,14 @@ class Template extends Base {
95
95
  *
96
96
  * ```
97
97
  * <script type="module">
98
- * import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/template.js';
98
+ * import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/template.js';
99
99
  * findDocumentTemplate()
100
100
  * </script>
101
101
  * ```
102
102
  *
103
103
  * @example
104
104
  *
105
- * import { findDocumentTemplate } from "https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/template.js";
105
+ * import { findDocumentTemplate } from "https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/template.js";
106
106
  *
107
107
  * const template = document.createElement("template");
108
108
  * template.id = "myTemplate";
@@ -15,7 +15,7 @@ import {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from "./constants.js";
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
19
19
  * console.log(new Monster.DOM.Theme())
20
20
  * </script>
21
21
  * ```
@@ -24,14 +24,14 @@ import {ATTRIBUTE_THEME_NAME, DEFAULT_THEME} from "./constants.js";
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/theme.js';
27
+ * import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/theme.js';
28
28
  * console.log(new Theme())
29
29
  * </script>
30
30
  * ```
31
31
  *
32
32
  * @example
33
33
  *
34
- * import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/theme.js';
34
+ * import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/theme.js';
35
35
  *
36
36
  * const theme = getDocumentTheme();
37
37
  * console.log(theme.getName());
@@ -15,7 +15,8 @@ import {
15
15
  ATTRIBUTE_UPDATER_INSERT,
16
16
  ATTRIBUTE_UPDATER_INSERT_REFERENCE,
17
17
  ATTRIBUTE_UPDATER_REMOVE,
18
- ATTRIBUTE_UPDATER_REPLACE
18
+ ATTRIBUTE_UPDATER_REPLACE,
19
+ ATTRIBUTE_UPDATER_SELECT_THIS
19
20
  } from "../dom/constants.js";
20
21
  import {assignToNamespace, Monster} from '../namespace.js';
21
22
  import {Base} from "../types/base.js";
@@ -36,11 +37,14 @@ import {getDocument} from "./util.js";
36
37
  * For example, to include a string from an object, the attribute `data-monster-replace` can be used.
37
38
  * a further explanation can be found under {@tutorial dom-based-templating-implementation}.
38
39
  *
40
+ * Changes to attributes are made only when the direct values are changed. If you want to assign changes to other values
41
+ * as well, you have to insert the attribute `data-monster-select-this`. This should be done with care, as it can reduce performance.
42
+ *
39
43
  * You can create an object of this class using the monster namespace `new Monster.DOM.Updater()`.
40
44
  *
41
45
  * ```
42
46
  * <script type="module">
43
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
47
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
44
48
  * new Monster.DOM.Updater()
45
49
  * </script>
46
50
  * ```
@@ -49,14 +53,14 @@ import {getDocument} from "./util.js";
49
53
  *
50
54
  * ```
51
55
  * <script type="module">
52
- * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/updater.js';
56
+ * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/updater.js';
53
57
  * new Updater()
54
58
  * </script>
55
59
  * ```
56
60
  *
57
61
  * @example
58
62
  *
59
- * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/updater.js';
63
+ * import {Updater} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/updater.js';
60
64
  *
61
65
  * // First we prepare the html document.
62
66
  * // This is done here via script, but can also be inserted into the document as pure html.
@@ -328,6 +332,8 @@ function getControlEventHandler() {
328
332
  * @throws {Error} the bind argument must start as a value with a path
329
333
  * @param {HTMLElement} element
330
334
  * @return void
335
+ * @memberOf Monster.DOM
336
+ * @private
331
337
  */
332
338
  function retrieveAndSetValue(element) {
333
339
 
@@ -398,6 +404,7 @@ function retrieveAndSetValue(element) {
398
404
  /**
399
405
  * @since 1.27.0
400
406
  * @return void
407
+ * @private
401
408
  */
402
409
  function retrieveFromBindings() {
403
410
  const self = this;
@@ -445,19 +452,34 @@ function insertElement(change) {
445
452
  let mem = new WeakSet;
446
453
  let wd = 0;
447
454
 
455
+ const container = self[internalSymbol].element;
448
456
 
449
457
  while (true) {
450
458
  let found = false;
451
459
  wd++;
452
460
 
453
461
  let p = clone(change?.['path']);
454
- if (!isArray(p)) return this;
462
+ if (!isArray(p)) return self;
455
463
 
456
464
  while (p.length > 0) {
457
465
  const current = p.join('.');
458
- const list = this[internalSymbol].element.querySelectorAll(':scope [' + ATTRIBUTE_UPDATER_INSERT + '*="path:' + current + '"]').entries()
459
466
 
460
- for (const [, containerElement] of list) {
467
+ let iterator = new Set;
468
+ const query = '[' + ATTRIBUTE_UPDATER_INSERT + '*="path:' + current + '"]';
469
+
470
+ const e = container.querySelectorAll(query);
471
+
472
+ if (e.length > 0) {
473
+ iterator = new Set(
474
+ [...e]
475
+ )
476
+ }
477
+
478
+ if (container.matches(query)) {
479
+ iterator.add(container);
480
+ }
481
+
482
+ for (const [, containerElement] of iterator.entries()) {
461
483
 
462
484
  if (mem.has(containerElement)) continue;
463
485
  mem.add(containerElement)
@@ -477,7 +499,7 @@ function insertElement(change) {
477
499
  }
478
500
 
479
501
  let pipe = new Pipe(cmd);
480
- this[internalSymbol].callbacks.forEach((f, n) => {
502
+ self[internalSymbol].callbacks.forEach((f, n) => {
481
503
  pipe.setCallback(n, f);
482
504
  })
483
505
 
@@ -520,7 +542,12 @@ function insertElement(change) {
520
542
  let nodes = containerElement.querySelectorAll('[' + ATTRIBUTE_UPDATER_INSERT_REFERENCE + '*="' + refPrefix + '"]');
521
543
  for (const [, node] of Object.entries(nodes)) {
522
544
  if (!available.has(node.getAttribute(ATTRIBUTE_UPDATER_INSERT_REFERENCE))) {
523
- containerElement.removeChild(node);
545
+ try {
546
+ containerElement.removeChild(node);
547
+ } catch (e) {
548
+ containerElement.setAttribute(ATTRIBUTE_ERRORMESSAGE, (containerElement.getAttribute(ATTRIBUTE_ERRORMESSAGE) + ", " + e.message).trim());
549
+ }
550
+
524
551
  }
525
552
  }
526
553
  }
@@ -649,7 +676,10 @@ function runUpdateContent(container, parts, subject) {
649
676
  iterator.add(container);
650
677
  }
651
678
 
652
- iterator.forEach((key, element) => {
679
+ /**
680
+ * @type {HTMLElement} element
681
+ */
682
+ for (const [element] of iterator.entries()) {
653
683
 
654
684
  if (mem.has(element)) return;
655
685
  mem.add(element)
@@ -674,12 +704,18 @@ function runUpdateContent(container, parts, subject) {
674
704
  while (element.firstChild) {
675
705
  element.removeChild(element.firstChild);
676
706
  }
677
- element.addNode(value);
707
+
708
+ try {
709
+ element.appendChild(value);
710
+ } catch (e) {
711
+ element.setAttribute(ATTRIBUTE_ERRORMESSAGE, (element.getAttribute(ATTRIBUTE_ERRORMESSAGE) + ", " + e.message).trim());
712
+ }
713
+
678
714
  } else {
679
715
  element.innerHTML = value;
680
716
  }
681
717
 
682
- })
718
+ }
683
719
 
684
720
 
685
721
  }
@@ -722,7 +758,8 @@ function runUpdateAttributes(container, parts, subject) {
722
758
 
723
759
  let iterator = new Set;
724
760
 
725
- const query = '[' + ATTRIBUTE_UPDATER_ATTRIBUTES + '*="path:' + current + '"], [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '^="static:"]';
761
+ const query = '[' + ATTRIBUTE_UPDATER_SELECT_THIS + '], [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '*="path:' + current + '"], [' + ATTRIBUTE_UPDATER_ATTRIBUTES + '^="static:"]';
762
+
726
763
  const e = container.querySelectorAll(query);
727
764
 
728
765
  if (e.length > 0) {
@@ -735,7 +772,7 @@ function runUpdateAttributes(container, parts, subject) {
735
772
  iterator.add(container);
736
773
  }
737
774
 
738
- iterator.forEach((key, element) => {
775
+ for (const [element] of iterator.entries()) {
739
776
 
740
777
  if (mem.has(element)) return;
741
778
  mem.add(element)
@@ -773,8 +810,7 @@ function runUpdateAttributes(container, parts, subject) {
773
810
  handleInputControlAttributeUpdate.call(this, element, name, value);
774
811
 
775
812
  }
776
- });
777
-
813
+ }
778
814
  }
779
815
 
780
816
  }
@@ -824,19 +860,26 @@ function handleInputControlAttributeUpdate(element, name, value) {
824
860
  switch (element.type) {
825
861
 
826
862
  case 'radio':
827
- if (name === 'checked' && value !== undefined) {
828
- element.checked = true;
829
- } else {
830
- element.checked = false;
863
+ if (name === 'checked') {
864
+
865
+ if (value !== undefined) {
866
+ element.checked = true;
867
+ } else {
868
+ element.checked = false;
869
+ }
831
870
  }
832
871
 
833
872
  break;
834
873
 
835
874
  case 'checkbox':
836
- if (name === 'checked' && value !== undefined) {
837
- element.checked = true;
838
- } else {
839
- element.checked = false;
875
+
876
+ if (name === 'checked') {
877
+
878
+ if (value !== undefined) {
879
+ element.checked = true;
880
+ } else {
881
+ element.checked = false;
882
+ }
840
883
  }
841
884
 
842
885
  break;
@@ -13,7 +13,7 @@ import {validateString} from "../types/validate.js";
13
13
  *
14
14
  * ```
15
15
  * <script type="module">
16
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
16
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
17
17
  * console.log(Monster.DOM.getDocument())
18
18
  * </script>
19
19
  * ```
@@ -22,7 +22,7 @@ import {validateString} from "../types/validate.js";
22
22
  *
23
23
  * ```
24
24
  * <script type="module">
25
- * import {getDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/util.js';
25
+ * import {getDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/util.js';
26
26
  * console.log(getDocument())
27
27
  * </script>
28
28
  * ```
@@ -74,7 +74,7 @@ function getDocument() {
74
74
  *
75
75
  * ```
76
76
  * <script type="module">
77
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
77
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
78
78
  * console.log(Monster.DOM.getWindow())
79
79
  * </script>
80
80
  * ```
@@ -83,7 +83,7 @@ function getDocument() {
83
83
  *
84
84
  * ```
85
85
  * <script type="module">
86
- * import {getWindow} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/util.js';
86
+ * import {getWindow} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/util.js';
87
87
  * console.log(getWindow(null))
88
88
  * </script>
89
89
  * ```
@@ -140,7 +140,7 @@ function getWindow() {
140
140
  *
141
141
  * ```
142
142
  * <script type="module">
143
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
143
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
144
144
  * console.log(Monster.DOM.getDocumentFragmentFromString())
145
145
  * </script>
146
146
  * ```
@@ -149,7 +149,7 @@ function getWindow() {
149
149
  *
150
150
  * ```
151
151
  * <script type="module">
152
- * import {getDocumentFragmentFromString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/util.js';
152
+ * import {getDocumentFragmentFromString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/util.js';
153
153
  * console.log(getDocumentFragmentFromString('<div></div>'))
154
154
  * </script>
155
155
  * ```
@@ -20,7 +20,7 @@ import {validateInstance, validateString} from "../../types/validate.js";
20
20
  *
21
21
  * ```
22
22
  * <script type="module">
23
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
23
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
24
24
  * console.log(new Monster.DOM.Worker.Factory())
25
25
  * </script>
26
26
  * ```
@@ -29,7 +29,7 @@ import {validateInstance, validateString} from "../../types/validate.js";
29
29
  *
30
30
  * ```
31
31
  * <script type="module">
32
- * import {Factory} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/dom/worker/factory.js';
32
+ * import {Factory} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/dom/worker/factory.js';
33
33
  * console.log(new Factory())
34
34
  * </script>
35
35
  * ```
@@ -25,7 +25,7 @@ const internalTranslationSymbol = Symbol('internalTranslation')
25
25
  *
26
26
  * ```
27
27
  * <script type="module">
28
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
28
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
29
29
  * new Monster.I18n.Formatter()
30
30
  * </script>
31
31
  * ```
@@ -34,15 +34,15 @@ const internalTranslationSymbol = Symbol('internalTranslation')
34
34
  *
35
35
  * ```
36
36
  * <script type="module">
37
- * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/formatter.js';
37
+ * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/formatter.js';
38
38
  * new Formatter()
39
39
  * </script>
40
40
  * ```
41
41
  *
42
42
  * @example
43
43
  *
44
- * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/formatter.js';
45
- * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/translations.js';
44
+ * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/formatter.js';
45
+ * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/translations.js';
46
46
  *
47
47
  * const translations = new Translations('en')
48
48
  * .assignTranslations({
@@ -25,7 +25,7 @@ const localeStringSymbol = Symbol('localeString');
25
25
  *
26
26
  * ```
27
27
  * <script type="module">
28
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
28
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
29
29
  * new Monster.I18n.Locale()
30
30
  * </script>
31
31
  * ```
@@ -34,7 +34,7 @@ const localeStringSymbol = Symbol('localeString');
34
34
  *
35
35
  * ```
36
36
  * <script type="module">
37
- * import {Locale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/locale.js';
37
+ * import {Locale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/locale.js';
38
38
  * new Locale()
39
39
  * </script>
40
40
  * ```
@@ -203,7 +203,7 @@ class Locale extends Base {
203
203
  *
204
204
  * ```
205
205
  * <script type="module">
206
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
206
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
207
207
  * new Monster.I18n.createLocale()
208
208
  * </script>
209
209
  * ```
@@ -212,7 +212,7 @@ class Locale extends Base {
212
212
  *
213
213
  * ```
214
214
  * <script type="module">
215
- * import {createLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/locale.js';
215
+ * import {createLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/locale.js';
216
216
  * createLocale()
217
217
  * </script>
218
218
  * ```
@@ -15,7 +15,7 @@ import {Translations} from "./translations.js"
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
19
19
  * new Monster.I18n.Provider()
20
20
  * </script>
21
21
  * ```
@@ -24,7 +24,7 @@ import {Translations} from "./translations.js"
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {Provider} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/provider.js';
27
+ * import {Provider} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/provider.js';
28
28
  * new Provider()
29
29
  * </script>
30
30
  * ```
@@ -22,7 +22,7 @@ import {Translations} from "../translations.js";
22
22
  *
23
23
  * ```
24
24
  * <script type="module">
25
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
25
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
26
26
  * new Monster.I18n.Providers.Fetch()
27
27
  * </script>
28
28
  * ```
@@ -31,14 +31,14 @@ import {Translations} from "../translations.js";
31
31
  *
32
32
  * ```
33
33
  * <script type="module">
34
- * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/providers/fetch.js';
34
+ * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/providers/fetch.js';
35
35
  * new Fetch()
36
36
  * </script>
37
37
  * ```
38
38
  *
39
39
  * @example <caption>das ist ein test</caption>
40
40
  *
41
- * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/providers/fetch.js';
41
+ * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/providers/fetch.js';
42
42
  *
43
43
  * // fetch from API
44
44
  * const translation = new Fetch('https://example.com/${language}.json').getTranslation('en-GB');
@@ -17,7 +17,7 @@ import {Locale, parseLocale} from "./locale.js";
17
17
  *
18
18
  * ```
19
19
  * <script type="module">
20
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
20
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
21
21
  * new Monster.I18n.Translations()
22
22
  * </script>
23
23
  * ```
@@ -26,15 +26,15 @@ import {Locale, parseLocale} from "./locale.js";
26
26
  *
27
27
  * ```
28
28
  * <script type="module">
29
- * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/translations.js';
29
+ * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/translations.js';
30
30
  * new Translations()
31
31
  * </script>
32
32
  * ```
33
33
  *
34
34
  * @example
35
35
  *
36
- * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/translations.js';
37
- * import {parseLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/i18n/locale.js';
36
+ * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/translations.js';
37
+ * import {parseLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/i18n/locale.js';
38
38
  *
39
39
  * const translation = new Translations(parseLocale('en-GB'));
40
40
  *
@@ -15,7 +15,7 @@ import {LogEntry} from "../logentry.js";
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
19
19
  * console.log(new Monster.Logging.Handler.ConsoleHandler())
20
20
  * </script>
21
21
  * ```
@@ -24,7 +24,7 @@ import {LogEntry} from "../logentry.js";
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {ConsoleHandler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/logging/handler/console.js';
27
+ * import {ConsoleHandler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/logging/handler/console.js';
28
28
  * console.log(new ConsoleHandler())
29
29
  * </script>
30
30
  * ```
@@ -15,7 +15,7 @@ import {ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN} from "./logger.js";
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
19
19
  * console.log(new Monster.Logging.Handler())
20
20
  * </script>
21
21
  * ```
@@ -24,7 +24,7 @@ import {ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN} from "./logger.js";
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/logging/handler.js';
27
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/logging/handler.js';
28
28
  * console.log(new Handler())
29
29
  * </script>
30
30
  * ```
@@ -14,7 +14,7 @@ import {validateInteger} from '../types/validate.js';
14
14
  *
15
15
  * ```
16
16
  * <script type="module">
17
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
17
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
18
18
  * console.log(new Monster.Logging.LogEntry())
19
19
  * </script>
20
20
  * ```
@@ -23,7 +23,7 @@ import {validateInteger} from '../types/validate.js';
23
23
  *
24
24
  * ```
25
25
  * <script type="module">
26
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/logging/logentry.js';
26
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/logging/logentry.js';
27
27
  * console.log(new LogEntry())
28
28
  * </script>
29
29
  * ```
@@ -65,7 +65,7 @@ const OFF = 0;
65
65
  *
66
66
  * ```
67
67
  * <script type="module">
68
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
68
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
69
69
  * new Monster.Logging.Logger()
70
70
  * </script>
71
71
  * ```
@@ -74,7 +74,7 @@ const OFF = 0;
74
74
  *
75
75
  * ```
76
76
  * <script type="module">
77
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/logging/logger.js';
77
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/logging/logger.js';
78
78
  * new Logger()
79
79
  * </script>
80
80
  * ```
@@ -15,7 +15,7 @@ import {getGlobal} from '../types/global.js';
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
19
19
  * Monster.Math.random(1,10)
20
20
  * // ↦ 5
21
21
  * </script>
@@ -25,7 +25,7 @@ import {getGlobal} from '../types/global.js';
25
25
  *
26
26
  * ```
27
27
  * <script type="module">
28
- * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/modules/math/random.js';
28
+ * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/math/random.js';
29
29
  * random(1,10)
30
30
  * // ↦ 5
31
31
  * </script>
@@ -65,7 +65,7 @@ export const Monster = new Namespace("Monster");
65
65
  *
66
66
  * ```
67
67
  * <script type="module">
68
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.27.0/dist/monster.js';
68
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
69
69
  * function hello() {
70
70
  * console.log('Hello World!');
71
71
  * }