@schukai/monster 1.25.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/CHANGELOG +43 -0
  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 -0
  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 +1 -1
  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 +2 -0
  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 +2 -2
  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 +2 -2
  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 -0
  78. package/dist/modules/types/nodelist.js +2 -0
  79. package/dist/modules/types/noderecursiveiterator.js +2 -0
  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 +2 -0
  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 +1181 -708
  100. package/dist/monster.dev.js.map +1 -1
  101. package/dist/monster.js +2 -2
  102. package/package.json +13 -2
  103. package/source/constraints/abstract.js +5 -0
  104. package/source/constraints/abstractoperator.js +5 -0
  105. package/source/constraints/andoperator.js +10 -5
  106. package/source/constraints/invalid.js +8 -3
  107. package/source/constraints/isarray.js +9 -4
  108. package/source/constraints/isobject.js +8 -3
  109. package/source/constraints/oroperator.js +10 -5
  110. package/source/constraints/valid.js +8 -3
  111. package/source/data/buildmap.js +27 -13
  112. package/source/data/buildtree.js +129 -0
  113. package/source/data/datasource/restapi.js +3 -3
  114. package/source/data/datasource/storage/localstorage.js +2 -2
  115. package/source/data/datasource/storage/sessionstorage.js +2 -2
  116. package/source/data/datasource/storage.js +3 -3
  117. package/source/data/datasource.js +3 -3
  118. package/source/data/diff.js +3 -3
  119. package/source/data/extend.js +2 -2
  120. package/source/data/pathfinder.js +4 -4
  121. package/source/data/pipe.js +3 -3
  122. package/source/data/transformer.js +3 -3
  123. package/source/dom/assembler.js +2 -2
  124. package/source/dom/attributes.js +111 -28
  125. package/source/dom/constants.js +17 -1
  126. package/source/dom/customcontrol.js +1 -1
  127. package/source/dom/customelement.js +1 -1
  128. package/source/dom/events.js +6 -7
  129. package/source/dom/focusmanager.js +6 -7
  130. package/source/dom/locale.js +8 -4
  131. package/source/dom/resource/data.js +2 -2
  132. package/source/dom/resource/link/stylesheet.js +2 -2
  133. package/source/dom/resource/link.js +2 -2
  134. package/source/dom/resource/script.js +2 -2
  135. package/source/dom/resource.js +2 -2
  136. package/source/dom/resourcemanager.js +2 -2
  137. package/source/dom/template.js +55 -15
  138. package/source/dom/theme.js +3 -3
  139. package/source/dom/updater.js +158 -98
  140. package/source/dom/util.js +6 -6
  141. package/source/dom/worker/factory.js +2 -2
  142. package/source/i18n/formatter.js +140 -0
  143. package/source/i18n/locale.js +6 -4
  144. package/source/i18n/provider.js +2 -2
  145. package/source/i18n/providers/fetch.js +18 -3
  146. package/source/i18n/translations.js +18 -9
  147. package/source/logging/handler/console.js +2 -2
  148. package/source/logging/handler.js +2 -2
  149. package/source/logging/logentry.js +2 -2
  150. package/source/logging/logger.js +2 -2
  151. package/source/math/random.js +2 -2
  152. package/source/namespace.js +1 -1
  153. package/source/text/formatter.js +190 -48
  154. package/source/types/base.js +2 -2
  155. package/source/types/basewithoptions.js +2 -2
  156. package/source/types/binary.js +4 -4
  157. package/source/types/dataurl.js +4 -4
  158. package/source/types/global.js +4 -4
  159. package/source/types/id.js +6 -3
  160. package/source/types/is.js +100 -82
  161. package/source/types/mediatype.js +4 -4
  162. package/source/types/node.js +210 -0
  163. package/source/types/nodelist.js +129 -0
  164. package/source/types/noderecursiveiterator.js +148 -0
  165. package/source/types/observer.js +3 -3
  166. package/source/types/observerlist.js +2 -2
  167. package/source/types/proxyobserver.js +5 -5
  168. package/source/types/queue.js +4 -4
  169. package/source/types/randomid.js +2 -2
  170. package/source/types/regex.js +49 -0
  171. package/source/types/stack.js +2 -2
  172. package/source/types/tokenlist.js +2 -2
  173. package/source/types/typeof.js +3 -3
  174. package/source/types/uniquequeue.js +2 -2
  175. package/source/types/uuid.js +2 -2
  176. package/source/types/validate.js +20 -20
  177. package/source/types/version.js +6 -6
  178. package/source/util/clone.js +2 -2
  179. package/source/util/comparator.js +3 -3
  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 +212 -0
  184. package/test/cases/dom/attributes.js +46 -19
  185. package/test/cases/dom/resource/link/stylesheet.js +1 -1
  186. package/test/cases/dom/template.js +72 -14
  187. package/test/cases/dom/updater.js +102 -75
  188. package/test/cases/i18n/formatter.js +66 -0
  189. package/test/cases/monster.js +1 -1
  190. package/test/cases/text/formatter.js +36 -5
  191. package/test/cases/types/node.js +252 -0
  192. package/test/cases/types/nodelist.js +71 -0
  193. package/test/cases/types/noderecursiveiterator.js +75 -0
  194. package/test/cases/types/regex.js +32 -0
  195. package/test/util/jsdom.js +0 -1
  196. package/test/web/import.js +6 -0
  197. package/test/web/monster-dev.html +3 -3
  198. package/test/web/monster.html +2 -2
  199. package/test/web/test.html +3 -3
  200. package/test/web/tests.js +3 -3
@@ -17,13 +17,17 @@ const DEFAULT_LANGUAGE = 'en';
17
17
  /**
18
18
  * With this function you can read the language version set by the document.
19
19
  * For this the attribute `lang` in the html tag is read. If no attribute is set, `en` is used as default.
20
+ *
21
+ * ```html
22
+ * <html lang="en">
23
+ * ```
20
24
  *
21
25
  * You can call the function via the monster namespace `new Monster.DOM.getLocaleOfDocument()`.
22
26
  *
23
27
  * ```
24
28
  * <script type="module">
25
- * import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/locale.js';
26
- * console.log(new Monster.DOM.getLocaleOfDocument())
29
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
30
+ * new Monster.DOM.getLocaleOfDocument()
27
31
  * </script>
28
32
  * ```
29
33
  *
@@ -31,8 +35,8 @@ const DEFAULT_LANGUAGE = 'en';
31
35
  *
32
36
  * ```
33
37
  * <script type="module">
34
- * import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/locale.js';
35
- * console.log(new getLocaleOfDocument())
38
+ * import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/dom/locale.js';
39
+ * new getLocaleOfDocument()
36
40
  * </script>
37
41
  * ```
38
42
  *
@@ -27,7 +27,7 @@ import {KEY_DOCUMENT, KEY_QUERY, referenceSymbol, Resource} from "../resource.js
27
27
  *
28
28
  * ```
29
29
  * <script type="module">
30
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/resource/data.js';
30
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
31
31
  * new Monster.DOM.Resource.Data()
32
32
  * </script>
33
33
  * ```
@@ -36,7 +36,7 @@ import {KEY_DOCUMENT, KEY_QUERY, referenceSymbol, Resource} from "../resource.js
36
36
  *
37
37
  * ```
38
38
  * <script type="module">
39
- * import {Data} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/resource/data.js';
39
+ * import {Data} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/dom/resource/data.js';
40
40
  * new Data()
41
41
  * </script>
42
42
  * ```
@@ -16,7 +16,7 @@ import {Link} from "../link.js";
16
16
  *
17
17
  * ```
18
18
  * <script type="module">
19
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/resource/link/stylesheet.js';
19
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
20
20
  * new Monster.DOM.Resource.Link.Stylesheet()
21
21
  * </script>
22
22
  * ```
@@ -25,7 +25,7 @@ import {Link} from "../link.js";
25
25
  *
26
26
  * ```
27
27
  * <script type="module">
28
- * import {Style} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/resource/link/stylesheet.js';
28
+ * import {Style} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/dom/resource/link/stylesheet.js';
29
29
  * new Stylesheet()
30
30
  * </script>
31
31
  * ```
@@ -24,7 +24,7 @@ import {KEY_DOCUMENT, referenceSymbol, Resource} from "../resource.js";
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/resource/link.js';
27
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
28
28
  * new Monster.DOM.Resource.Link()
29
29
  * </script>
30
30
  * ```
@@ -33,7 +33,7 @@ import {KEY_DOCUMENT, referenceSymbol, Resource} from "../resource.js";
33
33
  *
34
34
  * ```
35
35
  * <script type="module">
36
- * import {Link} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/resource/link.js';
36
+ * import {Link} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/dom/resource/link.js';
37
37
  * new Link()
38
38
  * </script>
39
39
  * ```
@@ -25,7 +25,7 @@ import {KEY_DOCUMENT, referenceSymbol, Resource} from "../resource.js";
25
25
  *
26
26
  * ```
27
27
  * <script type="module">
28
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/resource/script.js';
28
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
29
29
  * new Monster.DOM.Resource.Script()
30
30
  * </script>
31
31
  * ```
@@ -34,7 +34,7 @@ import {KEY_DOCUMENT, referenceSymbol, Resource} from "../resource.js";
34
34
  *
35
35
  * ```
36
36
  * <script type="module">
37
- * import {Script} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/dom/resource/script.js';
37
+ * import {Script} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/dom/resource/script.js';
38
38
  * new Script()
39
39
  * </script>
40
40
  * ```
@@ -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.25.0/dist/modules/dom/resource.js';
50
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/resource.js';
59
+ * import {Resource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/resourcemanager.js';
24
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/resourcemanager.js';
33
+ * import {Resource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/template.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/template.js';
27
+ * import {Template} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/template.js';
89
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/template.js';
98
+ * import {findTemplate} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/template.js";
105
+ * import { findDocumentTemplate } from "https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/theme.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/theme.js';
27
+ * import {Theme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/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.25.0/dist/modules/dom/theme.js';
34
+ * import {getDocumentTheme} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/dom/theme.js';
35
35
  *
36
36
  * const theme = getDocumentTheme();
37
37
  * console.log(theme.getName());