@schukai/monster 1.13.0 → 1.15.2

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 (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}