@schukai/monster 1.22.0 → 1.26.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 (221) hide show
  1. package/CHANGELOG +56 -0
  2. package/README.md +4 -4
  3. package/dist/modules/constants.js +2 -2
  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 +2 -0
  17. package/dist/modules/data/datasource/restapi.js +2 -2
  18. package/dist/modules/data/datasource/storage/localstorage.js +2 -2
  19. package/dist/modules/data/datasource/storage/namespace.js +1 -1
  20. package/dist/modules/data/datasource/storage/sessionstorage.js +2 -2
  21. package/dist/modules/data/datasource/storage.js +2 -2
  22. package/dist/modules/data/datasource.js +2 -2
  23. package/dist/modules/data/diff.js +2 -2
  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 +2 -2
  27. package/dist/modules/data/pipe.js +1 -1
  28. package/dist/modules/data/transformer.js +2 -2
  29. package/dist/modules/dom/assembler.js +1 -1
  30. package/dist/modules/dom/attributes.js +1 -1
  31. package/dist/modules/dom/constants.js +2 -2
  32. package/dist/modules/dom/customcontrol.js +2 -2
  33. package/dist/modules/dom/customelement.js +2 -2
  34. package/dist/modules/dom/events.js +1 -1
  35. package/dist/modules/dom/focusmanager.js +2 -0
  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 +2 -0
  39. package/dist/modules/dom/resource/link/stylesheet.js +2 -0
  40. package/dist/modules/dom/resource/link.js +2 -0
  41. package/dist/modules/dom/resource/script.js +2 -0
  42. package/dist/modules/dom/resource.js +2 -0
  43. package/dist/modules/dom/resourcemanager.js +2 -0
  44. package/dist/modules/dom/template.js +1 -1
  45. package/dist/modules/dom/theme.js +1 -1
  46. package/dist/modules/dom/updater.js +2 -2
  47. package/dist/modules/dom/util.js +1 -1
  48. package/dist/modules/dom/worker/factory.js +2 -0
  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 +2 -2
  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 +2 -2
  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 +2 -2
  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 +2 -2
  82. package/dist/modules/types/proxyobserver.js +2 -2
  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 +2 -2
  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 +2 -0
  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 +2 -2
  94. package/dist/modules/util/comparator.js +2 -2
  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 +2 -2
  98. package/dist/modules/util/trimspaces.js +2 -0
  99. package/dist/monster.dev.js +1838 -792
  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/constants.js +16 -7
  104. package/source/constraints/abstract.js +5 -0
  105. package/source/constraints/abstractoperator.js +5 -0
  106. package/source/constraints/andoperator.js +10 -5
  107. package/source/constraints/invalid.js +8 -3
  108. package/source/constraints/isarray.js +9 -4
  109. package/source/constraints/isobject.js +8 -3
  110. package/source/constraints/oroperator.js +10 -5
  111. package/source/constraints/valid.js +8 -3
  112. package/source/data/buildmap.js +27 -11
  113. package/source/data/buildtree.js +95 -0
  114. package/source/data/datasource/restapi/writeerror.js +49 -0
  115. package/source/data/datasource/restapi.js +95 -11
  116. package/source/data/datasource/storage/localstorage.js +15 -8
  117. package/source/data/datasource/storage/sessionstorage.js +16 -12
  118. package/source/data/datasource/storage.js +16 -7
  119. package/source/data/datasource.js +60 -16
  120. package/source/data/diff.js +8 -8
  121. package/source/data/extend.js +5 -5
  122. package/source/data/pathfinder.js +12 -6
  123. package/source/data/pipe.js +6 -5
  124. package/source/data/transformer.js +131 -24
  125. package/source/dom/assembler.js +2 -2
  126. package/source/dom/attributes.js +24 -24
  127. package/source/dom/constants.js +305 -12
  128. package/source/dom/customcontrol.js +40 -19
  129. package/source/dom/customelement.js +182 -102
  130. package/source/dom/events.js +6 -6
  131. package/source/dom/focusmanager.js +250 -0
  132. package/source/dom/locale.js +10 -5
  133. package/source/dom/resource/data.js +170 -0
  134. package/source/dom/resource/link/stylesheet.js +54 -0
  135. package/source/dom/resource/link.js +125 -0
  136. package/source/dom/resource/script.js +112 -0
  137. package/source/dom/resource.js +268 -0
  138. package/source/dom/resourcemanager.js +214 -0
  139. package/source/dom/template.js +40 -10
  140. package/source/dom/theme.js +3 -3
  141. package/source/dom/updater.js +115 -39
  142. package/source/dom/util.js +6 -6
  143. package/source/dom/worker/factory.js +134 -0
  144. package/source/i18n/formatter.js +140 -0
  145. package/source/i18n/locale.js +10 -8
  146. package/source/i18n/provider.js +4 -4
  147. package/source/i18n/providers/fetch.js +24 -14
  148. package/source/i18n/translations.js +20 -10
  149. package/source/logging/handler/console.js +2 -2
  150. package/source/logging/handler.js +2 -2
  151. package/source/logging/logentry.js +2 -2
  152. package/source/logging/logger.js +4 -4
  153. package/source/math/random.js +11 -5
  154. package/source/namespace.js +1 -1
  155. package/source/text/formatter.js +244 -27
  156. package/source/types/base.js +4 -4
  157. package/source/types/basewithoptions.js +10 -15
  158. package/source/types/binary.js +8 -8
  159. package/source/types/dataurl.js +6 -6
  160. package/source/types/global.js +9 -7
  161. package/source/types/id.js +6 -3
  162. package/source/types/is.js +103 -85
  163. package/source/types/mediatype.js +4 -4
  164. package/source/types/node.js +179 -0
  165. package/source/types/nodelist.js +125 -0
  166. package/source/types/noderecursiveiterator.js +126 -0
  167. package/source/types/observer.js +3 -3
  168. package/source/types/observerlist.js +3 -3
  169. package/source/types/proxyobserver.js +24 -7
  170. package/source/types/queue.js +6 -6
  171. package/source/types/randomid.js +2 -2
  172. package/source/types/regex.js +49 -0
  173. package/source/types/stack.js +2 -2
  174. package/source/types/tokenlist.js +8 -9
  175. package/source/types/typeof.js +3 -3
  176. package/source/types/uniquequeue.js +4 -4
  177. package/source/types/uuid.js +102 -0
  178. package/source/types/validate.js +20 -20
  179. package/source/types/version.js +6 -6
  180. package/source/util/clone.js +5 -6
  181. package/source/util/comparator.js +5 -5
  182. package/source/util/freeze.js +5 -5
  183. package/source/util/processing.js +33 -36
  184. package/source/util/trimspaces.js +85 -0
  185. package/test/cases/data/buildtree.js +149 -0
  186. package/test/cases/data/datasource/restapi.js +1 -1
  187. package/test/cases/data/datasource.js +4 -4
  188. package/test/cases/data/diff.js +4 -4
  189. package/test/cases/data/pathfinder.js +18 -9
  190. package/test/cases/data/pipe.js +26 -2
  191. package/test/cases/data/transformer.js +41 -10
  192. package/test/cases/dom/attributes.js +18 -14
  193. package/test/cases/dom/customcontrol.js +6 -5
  194. package/test/cases/dom/customelement.js +25 -26
  195. package/test/cases/dom/focusmanager.js +111 -0
  196. package/test/cases/dom/locale.js +1 -4
  197. package/test/cases/dom/resource/data.js +129 -0
  198. package/test/cases/dom/resource/link/stylesheet.js +101 -0
  199. package/test/cases/dom/resource/link.js +101 -0
  200. package/test/cases/dom/resource/script.js +115 -0
  201. package/test/cases/dom/resourcemanager.js +118 -0
  202. package/test/cases/dom/updater.js +42 -19
  203. package/test/cases/dom/worker/factory.js +63 -0
  204. package/test/cases/i18n/formatter.js +66 -0
  205. package/test/cases/monster.js +1 -1
  206. package/test/cases/text/formatter.js +71 -8
  207. package/test/cases/types/node.js +196 -0
  208. package/test/cases/types/nodelist.js +64 -0
  209. package/test/cases/types/noderecursiveiterator.js +54 -0
  210. package/test/cases/types/proxyobserver.js +55 -11
  211. package/test/cases/types/regex.js +32 -0
  212. package/test/cases/types/uuid.js +42 -0
  213. package/test/cases/util/freeze.js +30 -4
  214. package/test/cases/util/trimspaces.js +24 -0
  215. package/test/util/cleanupdom.js +48 -0
  216. package/test/util/jsdom.js +22 -9
  217. package/test/web/import.js +15 -0
  218. package/test/web/monster-dev.html +3 -3
  219. package/test/web/monster.html +2 -2
  220. package/test/web/test.html +3 -3
  221. package/test/web/tests.js +7 -7
@@ -0,0 +1,140 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @author schukai GmbH
5
+ */
6
+
7
+
8
+ import {internalSymbol} from "../constants.js";
9
+ import {extend} from "../data/extend.js";
10
+ import {assignToNamespace, Monster} from '../namespace.js';
11
+ import {Formatter as TextFormatter} from "../text/formatter.js";
12
+ import {validateInstance, validateString} from "../types/validate.js";
13
+ import {Translations} from "./translations.js";
14
+
15
+ /**
16
+ * @private
17
+ * @type {symbol}
18
+ */
19
+ const internalTranslationSymbol = Symbol('internalTranslation')
20
+
21
+ /**
22
+ * The Formatter extends the Text.Formatter with the possibility to replace the key by a translation.
23
+ *
24
+ * You can create an instance via the monster namespace `new Monster.I18n.Formatter()`.
25
+ *
26
+ * ```
27
+ * <script type="module">
28
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
29
+ * new Monster.I18n.Formatter()
30
+ * </script>
31
+ * ```
32
+ *
33
+ * Alternatively, you can also integrate this function individually.
34
+ *
35
+ * ```
36
+ * <script type="module">
37
+ * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/formatter.js';
38
+ * new Formatter()
39
+ * </script>
40
+ * ```
41
+ *
42
+ * @example
43
+ *
44
+ * import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/formatter.js';
45
+ * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/translations.js';
46
+ *
47
+ * const translations = new Translations('en')
48
+ * .assignTranslations({
49
+ * thekey: "${animal} has eaten the ${food}!"
50
+ * });
51
+ *
52
+ * new Formatter({}, translations).format("thekey:animal=dog::food=cake")
53
+ * // ↦ dog has eaten the cake!
54
+ *
55
+ * @since 1.26.0
56
+ * @copyright schukai GmbH
57
+ * @memberOf Monster.I18n
58
+ */
59
+ class Formatter extends TextFormatter {
60
+
61
+ /**
62
+ * Default values for the markers are `${` and `}`
63
+ *
64
+ * @param {object} object
65
+ * @throws {TypeError} value is not a object
66
+ */
67
+ constructor(object, translation, options) {
68
+ super(object, options);
69
+ this[internalTranslationSymbol] = validateInstance(translation, Translations);
70
+ }
71
+
72
+ /**
73
+ * @property {object} marker
74
+ * @property {array} marker.open=["i18n{","${"]
75
+ * @property {array} marker.close=["${"]
76
+ * @property {object} parameter
77
+ * @property {string} parameter.delimiter="::"
78
+ * @property {string} parameter.assignment="="
79
+ * @property {object} callbacks
80
+ * @property {function} callbacks.i18n=()=>{}
81
+ */
82
+ get defaults() {
83
+ const self = this;
84
+ return extend({}, super.defaults, {
85
+ callbacks: {
86
+ i18n: (value) => {
87
+ return self[internalTranslationSymbol].getText(validateString(value));
88
+ }
89
+ },
90
+ marker: {
91
+ open: ['i18n{', '${'],
92
+ close: ['}'],
93
+ },
94
+ })
95
+ }
96
+
97
+ /**
98
+ *
99
+ * @param {string} text
100
+ * @return {string}
101
+ * @throws {TypeError} value is not a string
102
+ * @throws {Error} too deep nesting
103
+ * @throws {Error} key not found
104
+ * @throws {Error} the closing marker is missing
105
+ */
106
+ format(text) {
107
+ validateString(text)
108
+
109
+ const openMarker = this[internalSymbol]['marker']['open']?.[0];
110
+ const closeMarker = this[internalSymbol]['marker']['close']?.[0];
111
+
112
+ if (text.indexOf(openMarker) === 0) {
113
+ text = text.substring(openMarker.length);
114
+
115
+ if (text.indexOf(closeMarker) === text.length - closeMarker.length) {
116
+ text = text.substring(0, text.length - closeMarker.length);
117
+ } else {
118
+ throw new Error("the closing marker is missing")
119
+ }
120
+ }
121
+
122
+
123
+ const parts = validateString(text).split('::')
124
+ const translationKey = parts.shift().trim(); // key value delimiter
125
+ const parameter = parts.join('::').trim();
126
+
127
+
128
+ let assembledText = openMarker + 'static:' + translationKey + ' | call:i18n';
129
+ if (parameter.length > 0) {
130
+ assembledText += '::' + parameter;
131
+ }
132
+ assembledText += closeMarker;
133
+ return super.format(assembledText);
134
+ }
135
+
136
+
137
+ }
138
+
139
+ assignToNamespace('Monster.I18n', Formatter);
140
+ export {Monster, Formatter}
@@ -25,8 +25,8 @@ const localeStringSymbol = Symbol('localeString');
25
25
  *
26
26
  * ```
27
27
  * <script type="module">
28
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/locale.js';
29
- * console.log(new Monster.I18n.Locale())
28
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
29
+ * new Monster.I18n.Locale()
30
30
  * </script>
31
31
  * ```
32
32
  *
@@ -34,8 +34,8 @@ const localeStringSymbol = Symbol('localeString');
34
34
  *
35
35
  * ```
36
36
  * <script type="module">
37
- * import {Locale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/locale.js';
38
- * console.log(new Locale())
37
+ * import {Locale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/locale.js';
38
+ * new Locale()
39
39
  * </script>
40
40
  * ```
41
41
  *
@@ -172,6 +172,8 @@ class Locale extends Base {
172
172
  }
173
173
 
174
174
  /**
175
+ * The structure has the following: language, script, region, variants, extlang, privateUse
176
+ *
175
177
  * @return {Monster.I18n.LocaleMap}
176
178
  */
177
179
  getMap() {
@@ -201,8 +203,8 @@ class Locale extends Base {
201
203
  *
202
204
  * ```
203
205
  * <script type="module">
204
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/locale.js';
205
- * console.log(new Monster.I18n.createLocale())
206
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
207
+ * new Monster.I18n.createLocale()
206
208
  * </script>
207
209
  * ```
208
210
  *
@@ -210,8 +212,8 @@ class Locale extends Base {
210
212
  *
211
213
  * ```
212
214
  * <script type="module">
213
- * import {createLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/locale.js';
214
- * console.log(createLocale())
215
+ * import {createLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/locale.js';
216
+ * createLocale()
215
217
  * </script>
216
218
  * ```
217
219
  *
@@ -15,8 +15,8 @@ import {Translations} from "./translations.js"
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/provider.js';
19
- * console.log(new Monster.I18n.Provider())
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
19
+ * new Monster.I18n.Provider()
20
20
  * </script>
21
21
  * ```
22
22
  *
@@ -24,8 +24,8 @@ 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.22.0/dist/modules/i18n/provider.js';
28
- * console.log(new Provider())
27
+ * import {Provider} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/provider.js';
28
+ * new Provider()
29
29
  * </script>
30
30
  * ```
31
31
  *
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
 
3
- import {PROPERTY_KEY_INTERNALDATA} from "../../constants.js";
4
- import {extend} from "../../data/extend.js";
5
3
  /**
6
4
  * @author schukai GmbH
7
5
  */
6
+
7
+ import {internalSymbol} from "../../constants.js";
8
+ import {extend} from "../../data/extend.js";
8
9
  import {assignToNamespace, Monster} from '../../namespace.js';
9
10
  import {Formatter} from "../../text/formatter.js";
10
11
  import {getGlobalFunction} from "../../types/global.js";
@@ -14,12 +15,6 @@ import {parseLocale} from "../locale.js";
14
15
  import {Provider} from "../provider.js";
15
16
  import {Translations} from "../translations.js";
16
17
 
17
- /**
18
- * @private
19
- * @type {symbol}
20
- */
21
- const optionsSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);
22
-
23
18
  /**
24
19
  * The fetch provider retrieves a JSON file from the given URL and returns a translation object.
25
20
  *
@@ -27,8 +22,8 @@ const optionsSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);
27
22
  *
28
23
  * ```
29
24
  * <script type="module">
30
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/providers/fetch.js';
31
- * console.log(new Monster.I18n.Providers.Fetch())
25
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
26
+ * new Monster.I18n.Providers.Fetch()
32
27
  * </script>
33
28
  * ```
34
29
  *
@@ -36,21 +31,36 @@ const optionsSymbol = Symbol.for(PROPERTY_KEY_INTERNALDATA);
36
31
  *
37
32
  * ```
38
33
  * <script type="module">
39
- * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/providers/fetch.js';
40
- * console.log(new Fetch())
34
+ * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/providers/fetch.js';
35
+ * new Fetch()
41
36
  * </script>
42
37
  * ```
38
+ *
39
+ * @example <caption>das ist ein test</caption>
40
+ *
41
+ * import {Fetch} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/providers/fetch.js';
42
+ *
43
+ * // fetch from API
44
+ * const translation = new Fetch('https://example.com/${language}.json').getTranslation('en-GB');
45
+ * // ↦ https://example.com/en.json
43
46
  *
44
47
  * @since 1.13.0
45
48
  * @copyright schukai GmbH
46
49
  * @memberOf Monster.I18n.Providers
47
50
  * @see {@link https://datatracker.ietf.org/doc/html/rfc3066}
51
+ * @tutorial i18n-locale-and-formatter
48
52
  */
49
53
  class Fetch extends Provider {
50
54
 
51
55
  /**
52
56
  * As options the key `fetch` can be passed. This config object is passed to the fetch method as init.
53
- *
57
+ *
58
+ * The url may contain placeholders (language, script, region, variants, extlang, privateUse), so you can specify one url for all translations.
59
+ *
60
+ * ```
61
+ * new Fetch('https://www.example.com/assets/${language}.json')
62
+ * ```
63
+ *
54
64
  * @param {string|URL} url
55
65
  * @param {Object} options see {@link Monster.I18n.Providers.Fetch#defaults}
56
66
  * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/fetch}
@@ -77,7 +87,7 @@ class Fetch extends Provider {
77
87
  * @private
78
88
  * @property {Object} options
79
89
  */
80
- this[optionsSymbol] = extend({}, super.defaults, this.defaults, validateObject(options));
90
+ this[internalSymbol] = extend({}, super.defaults, this.defaults, validateObject(options));
81
91
 
82
92
  }
83
93
 
@@ -17,8 +17,8 @@ import {Locale, parseLocale} from "./locale.js";
17
17
  *
18
18
  * ```
19
19
  * <script type="module">
20
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/translations.js';
21
- * console.log(new Monster.I18n.Translations())
20
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
21
+ * new Monster.I18n.Translations()
22
22
  * </script>
23
23
  * ```
24
24
  *
@@ -26,22 +26,33 @@ import {Locale, parseLocale} from "./locale.js";
26
26
  *
27
27
  * ```
28
28
  * <script type="module">
29
- * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/i18n/translations.js';
30
- * console.log(new Translations())
29
+ * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/translations.js';
30
+ * new Translations()
31
31
  * </script>
32
32
  * ```
33
33
  *
34
34
  * @example
35
35
  *
36
+ * import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/translations.js';
37
+ * import {parseLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/i18n/locale.js';
38
+ *
36
39
  * const translation = new Translations(parseLocale('en-GB'));
37
40
  *
38
41
  * translation.assignTranslations({
39
- * text1: "abc",
40
- * text2: {'other': 'xyz'}
41
- * });
42
+ * text1: "click",
43
+ * text2: {
44
+ * 'one': 'click once',
45
+ * 'other': 'click n times'
46
+ * }
47
+ * });
48
+ *
49
+ * console.log(translation.getText('text1'));
50
+ * // ↦ click
42
51
  *
43
- * translation.getText('text1);
44
- * translation.getPluralRuleText('text1',2);
52
+ * console.log(translation.getPluralRuleText('text2',1));
53
+ * // -> click once
54
+ * console.log(translation.getPluralRuleText('text2',2));
55
+ * // -> click n times
45
56
  *
46
57
  * @since 1.13.0
47
58
  * @copyright schukai GmbH
@@ -204,6 +215,5 @@ class Translations extends Base {
204
215
 
205
216
  }
206
217
 
207
-
208
218
  assignToNamespace('Monster.I18n', Translations);
209
219
  export {Monster, Translations}
@@ -15,7 +15,7 @@ import {LogEntry} from "../logentry.js";
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/logging/handler/console.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
19
19
  * console.log(new Monster.Logging.Handler.ConsoleHandler())
20
20
  * </script>
21
21
  * ```
@@ -24,7 +24,7 @@ import {LogEntry} from "../logentry.js";
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {ConsoleHandler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/logging/handler/console.js';
27
+ * import {ConsoleHandler} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/logging/handler/console.js';
28
28
  * console.log(new ConsoleHandler())
29
29
  * </script>
30
30
  * ```
@@ -15,7 +15,7 @@ import {ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN} from "./logger.js";
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/logging/handler.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
19
19
  * console.log(new Monster.Logging.Handler())
20
20
  * </script>
21
21
  * ```
@@ -24,7 +24,7 @@ import {ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN} from "./logger.js";
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/logging/handler.js';
27
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/logging/handler.js';
28
28
  * console.log(new Handler())
29
29
  * </script>
30
30
  * ```
@@ -14,7 +14,7 @@ import {validateInteger} from '../types/validate.js';
14
14
  *
15
15
  * ```
16
16
  * <script type="module">
17
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/logging/logentry.js';
17
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
18
18
  * console.log(new Monster.Logging.LogEntry())
19
19
  * </script>
20
20
  * ```
@@ -23,7 +23,7 @@ import {validateInteger} from '../types/validate.js';
23
23
  *
24
24
  * ```
25
25
  * <script type="module">
26
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/logging/logentry.js';
26
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/logging/logentry.js';
27
27
  * console.log(new LogEntry())
28
28
  * </script>
29
29
  * ```
@@ -65,8 +65,8 @@ const OFF = 0;
65
65
  *
66
66
  * ```
67
67
  * <script type="module">
68
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/logging/logger.js';
69
- * console.log(new Monster.Logging.Logger())
68
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
69
+ * new Monster.Logging.Logger()
70
70
  * </script>
71
71
  * ```
72
72
  *
@@ -74,8 +74,8 @@ const OFF = 0;
74
74
  *
75
75
  * ```
76
76
  * <script type="module">
77
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/logging/logger.js';
78
- * console.log(new Logger())
77
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/logging/logger.js';
78
+ * new Logger()
79
79
  * </script>
80
80
  * ```
81
81
  *
@@ -15,8 +15,9 @@ import {getGlobal} from '../types/global.js';
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/math/random.js';
19
- * console.log(Monster.Math.random(1,10)) // ↦ 5
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
19
+ * Monster.Math.random(1,10)
20
+ * // ↦ 5
20
21
  * </script>
21
22
  * ```
22
23
  *
@@ -24,8 +25,9 @@ import {getGlobal} from '../types/global.js';
24
25
  *
25
26
  * ```
26
27
  * <script type="module">
27
- * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/math/random.js';
28
- * console.log(random(1,10)) // ↦ 5
28
+ * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/math/random.js';
29
+ * random(1,10)
30
+ * // ↦ 5
29
31
  * </script>
30
32
  * ```
31
33
  *
@@ -116,7 +118,11 @@ function create(min, max) {
116
118
  return create(min, max);
117
119
  }
118
120
 
119
- return min + rval;
121
+ if (rval < min) {
122
+ rval += min;
123
+ }
124
+
125
+ return rval;
120
126
 
121
127
  }
122
128
 
@@ -65,7 +65,7 @@ export const Monster = new Namespace("Monster");
65
65
  *
66
66
  * ```
67
67
  * <script type="module">
68
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/namespace.js';
68
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
69
69
  * function hello() {
70
70
  * console.log('Hello World!');
71
71
  * }