@schukai/monster 1.26.0 → 1.28.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. package/CHANGELOG +36 -1
  2. package/README.md +4 -4
  3. package/dist/modules/constants.js +1 -1
  4. package/dist/modules/constraints/abstract.js +1 -1
  5. package/dist/modules/constraints/abstractoperator.js +1 -1
  6. package/dist/modules/constraints/andoperator.js +1 -1
  7. package/dist/modules/constraints/invalid.js +1 -1
  8. package/dist/modules/constraints/isarray.js +1 -1
  9. package/dist/modules/constraints/isobject.js +1 -1
  10. package/dist/modules/constraints/namespace.js +1 -1
  11. package/dist/modules/constraints/oroperator.js +1 -1
  12. package/dist/modules/constraints/valid.js +1 -1
  13. package/dist/modules/data/buildmap.js +2 -2
  14. package/dist/modules/data/buildtree.js +2 -2
  15. package/dist/modules/data/datasource/namespace.js +1 -1
  16. package/dist/modules/data/datasource/restapi/writeerror.js +1 -1
  17. package/dist/modules/data/datasource/restapi.js +1 -1
  18. package/dist/modules/data/datasource/storage/localstorage.js +1 -1
  19. package/dist/modules/data/datasource/storage/namespace.js +1 -1
  20. package/dist/modules/data/datasource/storage/sessionstorage.js +1 -1
  21. package/dist/modules/data/datasource/storage.js +1 -1
  22. package/dist/modules/data/datasource.js +1 -1
  23. package/dist/modules/data/diff.js +1 -1
  24. package/dist/modules/data/extend.js +1 -1
  25. package/dist/modules/data/namespace.js +1 -1
  26. package/dist/modules/data/pathfinder.js +1 -1
  27. package/dist/modules/data/pipe.js +1 -1
  28. package/dist/modules/data/transformer.js +1 -1
  29. package/dist/modules/dom/assembler.js +1 -1
  30. package/dist/modules/dom/attributes.js +2 -2
  31. package/dist/modules/dom/constants.js +2 -2
  32. package/dist/modules/dom/customcontrol.js +1 -1
  33. package/dist/modules/dom/customelement.js +1 -1
  34. package/dist/modules/dom/events.js +2 -2
  35. package/dist/modules/dom/focusmanager.js +1 -1
  36. package/dist/modules/dom/locale.js +1 -1
  37. package/dist/modules/dom/namespace.js +1 -1
  38. package/dist/modules/dom/resource/data.js +1 -1
  39. package/dist/modules/dom/resource/link/stylesheet.js +1 -1
  40. package/dist/modules/dom/resource/link.js +1 -1
  41. package/dist/modules/dom/resource/script.js +1 -1
  42. package/dist/modules/dom/resource.js +1 -1
  43. package/dist/modules/dom/resourcemanager.js +1 -1
  44. package/dist/modules/dom/template.js +2 -2
  45. package/dist/modules/dom/theme.js +1 -1
  46. package/dist/modules/dom/updater.js +2 -2
  47. package/dist/modules/dom/util.js +1 -1
  48. package/dist/modules/dom/worker/factory.js +1 -1
  49. package/dist/modules/i18n/formatter.js +1 -1
  50. package/dist/modules/i18n/locale.js +1 -1
  51. package/dist/modules/i18n/namespace.js +1 -1
  52. package/dist/modules/i18n/provider.js +1 -1
  53. package/dist/modules/i18n/providers/fetch.js +1 -1
  54. package/dist/modules/i18n/providers/namespace.js +1 -1
  55. package/dist/modules/i18n/translations.js +1 -1
  56. package/dist/modules/logging/handler/console.js +1 -1
  57. package/dist/modules/logging/handler/namespace.js +1 -1
  58. package/dist/modules/logging/handler.js +1 -1
  59. package/dist/modules/logging/logentry.js +1 -1
  60. package/dist/modules/logging/logger.js +1 -1
  61. package/dist/modules/logging/namespace.js +1 -1
  62. package/dist/modules/math/namespace.js +1 -1
  63. package/dist/modules/math/random.js +1 -1
  64. package/dist/modules/monster.js +1 -1
  65. package/dist/modules/namespace.js +1 -1
  66. package/dist/modules/text/formatter.js +1 -1
  67. package/dist/modules/text/namespace.js +1 -1
  68. package/dist/modules/types/base.js +1 -1
  69. package/dist/modules/types/basewithoptions.js +1 -1
  70. package/dist/modules/types/binary.js +1 -1
  71. package/dist/modules/types/dataurl.js +1 -1
  72. package/dist/modules/types/global.js +1 -1
  73. package/dist/modules/types/id.js +1 -1
  74. package/dist/modules/types/is.js +1 -1
  75. package/dist/modules/types/mediatype.js +1 -1
  76. package/dist/modules/types/namespace.js +1 -1
  77. package/dist/modules/types/node.js +2 -2
  78. package/dist/modules/types/nodelist.js +2 -2
  79. package/dist/modules/types/noderecursiveiterator.js +2 -2
  80. package/dist/modules/types/observer.js +1 -1
  81. package/dist/modules/types/observerlist.js +1 -1
  82. package/dist/modules/types/proxyobserver.js +1 -1
  83. package/dist/modules/types/queue.js +1 -1
  84. package/dist/modules/types/randomid.js +1 -1
  85. package/dist/modules/types/regex.js +1 -1
  86. package/dist/modules/types/stack.js +1 -1
  87. package/dist/modules/types/tokenlist.js +1 -1
  88. package/dist/modules/types/typeof.js +1 -1
  89. package/dist/modules/types/uniquequeue.js +1 -1
  90. package/dist/modules/types/uuid.js +1 -1
  91. package/dist/modules/types/validate.js +1 -1
  92. package/dist/modules/types/version.js +2 -2
  93. package/dist/modules/util/clone.js +1 -1
  94. package/dist/modules/util/comparator.js +1 -1
  95. package/dist/modules/util/freeze.js +1 -1
  96. package/dist/modules/util/namespace.js +1 -1
  97. package/dist/modules/util/processing.js +1 -1
  98. package/dist/modules/util/trimspaces.js +1 -1
  99. package/dist/monster.dev.js +883 -604
  100. package/dist/monster.dev.js.map +1 -1
  101. package/dist/monster.js +2 -2
  102. package/package.json +1 -1
  103. package/source/constraints/andoperator.js +5 -5
  104. package/source/constraints/invalid.js +3 -3
  105. package/source/constraints/isarray.js +3 -3
  106. package/source/constraints/isobject.js +3 -3
  107. package/source/constraints/oroperator.js +5 -5
  108. package/source/constraints/valid.js +3 -3
  109. package/source/data/buildmap.js +8 -10
  110. package/source/data/buildtree.js +51 -17
  111. package/source/data/datasource/restapi.js +3 -3
  112. package/source/data/datasource/storage/localstorage.js +2 -2
  113. package/source/data/datasource/storage/sessionstorage.js +2 -2
  114. package/source/data/datasource/storage.js +3 -3
  115. package/source/data/datasource.js +3 -3
  116. package/source/data/diff.js +3 -3
  117. package/source/data/extend.js +2 -2
  118. package/source/data/pathfinder.js +4 -4
  119. package/source/data/pipe.js +3 -3
  120. package/source/data/transformer.js +3 -3
  121. package/source/dom/assembler.js +2 -2
  122. package/source/dom/attributes.js +111 -28
  123. package/source/dom/constants.js +17 -1
  124. package/source/dom/customcontrol.js +1 -1
  125. package/source/dom/customelement.js +1 -1
  126. package/source/dom/events.js +68 -12
  127. package/source/dom/focusmanager.js +2 -2
  128. package/source/dom/locale.js +2 -2
  129. package/source/dom/resource/data.js +2 -2
  130. package/source/dom/resource/link/stylesheet.js +2 -2
  131. package/source/dom/resource/link.js +2 -2
  132. package/source/dom/resource/script.js +2 -2
  133. package/source/dom/resource.js +2 -2
  134. package/source/dom/resourcemanager.js +2 -2
  135. package/source/dom/template.js +55 -15
  136. package/source/dom/theme.js +3 -3
  137. package/source/dom/updater.js +156 -96
  138. package/source/dom/util.js +6 -6
  139. package/source/dom/worker/factory.js +2 -2
  140. package/source/i18n/formatter.js +4 -4
  141. package/source/i18n/locale.js +4 -4
  142. package/source/i18n/provider.js +2 -2
  143. package/source/i18n/providers/fetch.js +3 -3
  144. package/source/i18n/translations.js +4 -4
  145. package/source/logging/handler/console.js +2 -2
  146. package/source/logging/handler.js +2 -2
  147. package/source/logging/logentry.js +2 -2
  148. package/source/logging/logger.js +2 -2
  149. package/source/math/random.js +2 -2
  150. package/source/namespace.js +1 -1
  151. package/source/text/formatter.js +3 -3
  152. package/source/types/base.js +2 -2
  153. package/source/types/basewithoptions.js +2 -2
  154. package/source/types/binary.js +4 -4
  155. package/source/types/dataurl.js +4 -4
  156. package/source/types/global.js +4 -4
  157. package/source/types/id.js +2 -2
  158. package/source/types/is.js +20 -20
  159. package/source/types/mediatype.js +4 -4
  160. package/source/types/node.js +33 -2
  161. package/source/types/nodelist.js +9 -5
  162. package/source/types/noderecursiveiterator.js +29 -7
  163. package/source/types/observer.js +3 -3
  164. package/source/types/observerlist.js +2 -2
  165. package/source/types/proxyobserver.js +5 -5
  166. package/source/types/queue.js +3 -3
  167. package/source/types/randomid.js +2 -2
  168. package/source/types/regex.js +2 -2
  169. package/source/types/stack.js +2 -2
  170. package/source/types/tokenlist.js +2 -2
  171. package/source/types/typeof.js +3 -3
  172. package/source/types/uniquequeue.js +2 -2
  173. package/source/types/uuid.js +2 -2
  174. package/source/types/validate.js +20 -20
  175. package/source/types/version.js +6 -6
  176. package/source/util/clone.js +2 -2
  177. package/source/util/comparator.js +3 -3
  178. package/source/util/freeze.js +2 -2
  179. package/source/util/processing.js +3 -3
  180. package/source/util/trimspaces.js +2 -2
  181. package/test/cases/data/buildtree.js +84 -21
  182. package/test/cases/dom/attributes.js +29 -6
  183. package/test/cases/dom/events.js +66 -1
  184. package/test/cases/dom/template.js +72 -14
  185. package/test/cases/dom/updater.js +102 -75
  186. package/test/cases/monster.js +1 -1
  187. package/test/cases/types/node.js +57 -1
  188. package/test/cases/types/nodelist.js +7 -0
  189. package/test/cases/types/noderecursiveiterator.js +21 -0
  190. package/test/web/monster-dev.html +3 -3
  191. package/test/web/monster.html +2 -2
  192. package/test/web/test.html +3 -3
  193. package/test/web/tests.js +2 -2
@@ -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.26.0/dist/monster.js';
24
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.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.26.0/dist/modules/dom/resourcemanager.js';
33
+ * import {Resource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.1/dist/modules/dom/resourcemanager.js';
34
34
  * new ResourceManager()
35
35
  * </script>
36
36
  * ```
@@ -7,6 +7,7 @@ import {assignToNamespace, Monster} from '../namespace.js';
7
7
  import {Base} from '../types/base.js';
8
8
  import {getGlobalFunction, getGlobalObject} from '../types/global.js';
9
9
  import {validateInstance, validateString} from "../types/validate.js";
10
+ import {ATTRIBUTE_TEMPLATE_PREFIX} from "./constants.js";
10
11
  import {getDocumentTheme} from "./theme.js";
11
12
 
12
13
  /**
@@ -14,7 +15,7 @@ import {getDocumentTheme} from "./theme.js";
14
15
  *
15
16
  * ```
16
17
  * <script type="module">
17
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.1/dist/monster.js';
18
19
  * new Monster.DOM.Template()
19
20
  * </script>
20
21
  * ```
@@ -23,7 +24,7 @@ import {getDocumentTheme} from "./theme.js";
23
24
  *
24
25
  * ```
25
26
  * <script type="module">
26
- * import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/dom/template.js';
27
+ * import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.1/dist/modules/dom/template.js';
27
28
  * new Template()
28
29
  * </script>
29
30
  * ```
@@ -78,14 +79,14 @@ class Template extends Base {
78
79
  *
79
80
  * If no theme was specified, the default theme is `monster`.
80
81
  *
81
- * Now it is looked if there is a template with the given ID and theme `id-theme` and if yes it is returned.
82
+ * Now it is looked if there is a template with the given ID and theme `id-theme` and if yes it is returned.
82
83
  * If there is no template a search for a template with the given ID `id` is done. If this is also not found, an error is thrown.
83
- *
84
+ *
84
85
  * You can call the method via the monster namespace `Monster.DOM.findDocumentTemplate()`.
85
86
  *
86
87
  * ```
87
88
  * <script type="module">
88
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
89
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.1/dist/monster.js';
89
90
  * Monster.DOM.findDocumentTemplate()
90
91
  * </script>
91
92
  * ```
@@ -94,14 +95,14 @@ class Template extends Base {
94
95
  *
95
96
  * ```
96
97
  * <script type="module">
97
- * import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/dom/template.js';
98
+ * import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.1/dist/modules/dom/template.js';
98
99
  * findDocumentTemplate()
99
100
  * </script>
100
101
  * ```
101
102
  *
102
103
  * @example
103
104
  *
104
- * import { findDocumentTemplate } from "https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/dom/template.js";
105
+ * import { findDocumentTemplate } from "https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.1/dist/modules/dom/template.js";
105
106
  *
106
107
  * const template = document.createElement("template");
107
108
  * template.id = "myTemplate";
@@ -122,8 +123,8 @@ class Template extends Base {
122
123
  * document
123
124
  * .querySelector("html")
124
125
  * .setAttribute("data-monster-theme-name", "myTheme");
125
- *
126
- * // now we don't get the default template,
126
+ *
127
+ * // now we don't get the default template,
127
128
  * // but the template with the theme in the id
128
129
  * const template2 = findDocumentTemplate("myTemplate");
129
130
  * console.log(template2.createDocumentFragment());
@@ -141,9 +142,22 @@ class Template extends Base {
141
142
  function findDocumentTemplate(id, currentNode) {
142
143
  validateString(id);
143
144
 
145
+ const document = getGlobalObject('document');
146
+ const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');
147
+ const DocumentFragment = getGlobalFunction('DocumentFragment');
148
+ const Document = getGlobalFunction('Document');
149
+
150
+
151
+ let prefixID;
152
+
144
153
  if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {
145
154
 
146
155
  if (currentNode instanceof Node) {
156
+
157
+ if (currentNode.hasAttribute(ATTRIBUTE_TEMPLATE_PREFIX)) {
158
+ prefixID = currentNode.getAttribute(ATTRIBUTE_TEMPLATE_PREFIX)
159
+ }
160
+
147
161
  currentNode = currentNode.getRootNode();
148
162
 
149
163
  if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {
@@ -153,27 +167,53 @@ function findDocumentTemplate(id, currentNode) {
153
167
  }
154
168
 
155
169
  if (!(currentNode instanceof Document || currentNode instanceof DocumentFragment)) {
156
- currentNode = getGlobalObject('document');
170
+ currentNode = document;
157
171
  }
158
172
  }
159
173
 
160
- const HTMLTemplateElement = getGlobalFunction('HTMLTemplateElement');
161
-
174
+ let template;
162
175
  let theme = getDocumentTheme()
176
+
177
+ if (prefixID) {
178
+ let themedPrefixID = prefixID + '-' + id + '-' + theme.getName();
179
+
180
+ // current + themedPrefixID
181
+ template = currentNode.getElementById(themedPrefixID);
182
+ if (template instanceof HTMLTemplateElement) {
183
+ return new Template(template);
184
+ }
185
+
186
+ // document + themedPrefixID
187
+ template = document.getElementById(themedPrefixID);
188
+ if (template instanceof HTMLTemplateElement) {
189
+ return new Template(template);
190
+ }
191
+ }
192
+
163
193
  let themedID = id + '-' + theme.getName();
164
194
 
165
- let template = currentNode.getElementById(themedID);
195
+ // current + themedID
196
+ template = currentNode.getElementById(themedID);
166
197
  if (template instanceof HTMLTemplateElement) {
167
198
  return new Template(template);
168
199
  }
169
200
 
201
+ // document + themedID
202
+ template = document.getElementById(themedID);
203
+ if (template instanceof HTMLTemplateElement) {
204
+ return new Template(template);
205
+ }
206
+
207
+ // current + ID
170
208
  template = currentNode.getElementById(id);
171
209
  if (template instanceof HTMLTemplateElement) {
172
210
  return new Template(template);
173
211
  }
174
212
 
175
- if (currentNode !== getGlobalObject('document')) {
176
- return findDocumentTemplate(id)
213
+ // document + ID
214
+ template = document.getElementById(id);
215
+ if (template instanceof HTMLTemplateElement) {
216
+ return new Template(template);
177
217
  }
178
218
 
179
219
  throw new Error("template " + id + " not found.")
@@ -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.26.0/dist/monster.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.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.26.0/dist/modules/dom/theme.js';
27
+ * import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.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.26.0/dist/modules/dom/theme.js';
34
+ * import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.1/dist/modules/dom/theme.js';
35
35
  *
36
36
  * const theme = getDocumentTheme();
37
37
  * console.log(theme.getName());