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