@schukai/monster 3.25.0 → 3.27.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schukai/monster",
3
- "version": "3.25.0",
3
+ "version": "3.27.0",
4
4
  "description": "Monster is a simple library for creating fast, robust and lightweight websites.",
5
5
  "keywords": [
6
6
  "framework",
@@ -969,5 +969,14 @@ function initShadowRoot() {
969
969
  */
970
970
  function registerCustomElement(element) {
971
971
  validateFunction(element);
972
- getGlobalObject("customElements").define(element.getTag(), element);
972
+ const customElements = getGlobalObject("customElements")
973
+ if (customElements === undefined) {
974
+ throw new Error("customElements is not supported.");
975
+ }
976
+
977
+ if (customElements.get(element.getTag()) !== undefined) {
978
+ return;
979
+ }
980
+
981
+ customElements.define(element.getTag(), element);
973
982
  }
@@ -5,14 +5,14 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import { internalSymbol } from "../constants.mjs";
9
- import { extend } from "../data/extend.mjs";
8
+ import {instanceSymbol, internalSymbol} from "../constants.mjs";
9
+ import {extend} from "../data/extend.mjs";
10
10
 
11
- import { Formatter as TextFormatter } from "../text/formatter.mjs";
12
- import { validateInstance, validateString } from "../types/validate.mjs";
13
- import { Translations } from "./translations.mjs";
11
+ import {Formatter as TextFormatter} from "../text/formatter.mjs";
12
+ import {validateInstance, validateString} from "../types/validate.mjs";
13
+ import {Translations} from "./translations.mjs";
14
14
 
15
- export { Formatter };
15
+ export {Formatter};
16
16
 
17
17
  /**
18
18
  * @private
@@ -41,6 +41,15 @@ class Formatter extends TextFormatter {
41
41
  this[internalTranslationSymbol] = validateInstance(translation, Translations);
42
42
  }
43
43
 
44
+ /**
45
+ * This method is called by the `instanceof` operator.
46
+ * @returns {symbol}
47
+ * @since 3.27.0
48
+ */
49
+ static get [instanceSymbol]() {
50
+ return Symbol.for("@schukai/monster/i18n/formatter@@instance");
51
+ }
52
+
44
53
  /**
45
54
  * @property {object} marker
46
55
  * @property {array} marker.open=["i18n{","${"]
@@ -5,6 +5,7 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
+ import {instanceSymbol} from "../constants.mjs";
8
9
  import { Base } from "../types/base.mjs";
9
10
  import { validateString } from "../types/validate.mjs";
10
11
  import { clone } from "../util/clone.mjs";
@@ -100,6 +101,15 @@ class Locale extends Base {
100
101
  this[localeStringSymbol] = s.join("-");
101
102
  }
102
103
 
104
+ /**
105
+ * This method is called by the `instanceof` operator.
106
+ * @returns {symbol}
107
+ * @since 3.27.0
108
+ */
109
+ static get [instanceSymbol]() {
110
+ return Symbol.for("@schukai/monster/i18n/locale@@instance");
111
+ }
112
+
103
113
  /**
104
114
  * @return {string}
105
115
  */
@@ -5,6 +5,7 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
+ import {instanceSymbol} from "../constants.mjs";
8
9
  import {hasObjectLink, getLinkedObjects,addToObjectLink} from "../dom/attributes.mjs";
9
10
  import {getLocaleOfDocument} from "../dom/locale.mjs";
10
11
  import {BaseWithOptions} from "../types/basewithoptions.mjs";
@@ -32,6 +33,16 @@ const translationsLinkSymbol = Symbol.for("@schukai/monster/i18n/translations@@l
32
33
  * @see {@link https://datatracker.ietf.org/doc/html/rfc3066}
33
34
  */
34
35
  class Provider extends BaseWithOptions {
36
+
37
+ /**
38
+ * This method is called by the `instanceof` operator.
39
+ * @returns {symbol}
40
+ * @since 3.27.0
41
+ */
42
+ static get [instanceSymbol]() {
43
+ return Symbol.for("@schukai/monster/i18n/provider@@instance");
44
+ }
45
+
35
46
  /**
36
47
  * @param {Locale|string} locale
37
48
  * @return {Promise}
@@ -5,7 +5,8 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import { getLinkedObjects,hasObjectLink} from "../dom/attributes.mjs";
8
+ import {instanceSymbol} from "../constants.mjs";
9
+ import {getLinkedObjects, hasObjectLink} from "../dom/attributes.mjs";
9
10
  import {ATTRIBUTE_OBJECTLINK} from "../dom/constants.mjs";
10
11
  import {getDocument} from "../dom/util.mjs";
11
12
  import {Base} from "../types/base.mjs";
@@ -44,6 +45,15 @@ class Translations extends Base {
44
45
  this.storage = new Map();
45
46
  }
46
47
 
48
+ /**
49
+ * This method is called by the `instanceof` operator.
50
+ * @returns {symbol}
51
+ * @since 3.27.0
52
+ */
53
+ static get [instanceSymbol]() {
54
+ return Symbol.for("@schukai/monster/i18n/translations@@instance");
55
+ }
56
+
47
57
  /**
48
58
  * Fetches a text using the specified key.
49
59
  * If no suitable key is found, `defaultText` is taken.
@@ -107,9 +117,11 @@ class Translations extends Base {
107
117
  return validateString(r[keyword]);
108
118
  }
109
119
 
110
- if (r.hasOwnProperty(DEFAULT_KEY)) {
111
- return validateString(r[DEFAULT_KEY]);
112
- }
120
+ // @deprecated since 2023-03-14
121
+ // DEFAULT_KEY is undefined
122
+ // if (r.hasOwnProperty(DEFAULT_KEY)) {
123
+ // return validateString(r[DEFAULT_KEY]);
124
+ // }
113
125
 
114
126
  return validateString(defaultText);
115
127
  }
@@ -171,7 +183,7 @@ class Translations extends Base {
171
183
  */
172
184
  assignTranslations(translations) {
173
185
  validateObject(translations);
174
-
186
+
175
187
  if (translations instanceof Translations) {
176
188
  translations.storage.forEach((v, k) => {
177
189
  this.setText(k, v);
@@ -202,7 +214,7 @@ function getDocumentTranslations(element) {
202
214
  const d = getDocument()
203
215
 
204
216
  if (!(element instanceof HTMLElement)) {
205
- element = d.querySelector('['+ATTRIBUTE_OBJECTLINK+'~="' + translationsLinkSymbol.toString() + '"]');
217
+ element = d.querySelector('[' + ATTRIBUTE_OBJECTLINK + '~="' + translationsLinkSymbol.toString() + '"]');
206
218
  if (element === null) {
207
219
  throw new Error("Cannot find element with translations. Add a translations object to the document.");
208
220
  }
@@ -215,9 +227,9 @@ function getDocumentTranslations(element) {
215
227
  if (!hasObjectLink(element, translationsLinkSymbol)) {
216
228
  throw new Error("This element has no translations.");
217
229
  }
218
-
230
+
219
231
  let obj = getLinkedObjects(element, translationsLinkSymbol);
220
-
232
+
221
233
  for (const t of obj) {
222
234
  if (t instanceof Translations) {
223
235
  return t;
@@ -142,7 +142,7 @@ function getMonsterVersion() {
142
142
  }
143
143
 
144
144
  /** don't touch, replaced by make with package.json version */
145
- monsterVersion = new Version("3.25.0");
145
+ monsterVersion = new Version("3.27.0");
146
146
 
147
147
  return monsterVersion;
148
148
  }
@@ -7,7 +7,7 @@ describe('Monster', function () {
7
7
  let monsterVersion
8
8
 
9
9
  /** don´t touch, replaced by make with package.json version */
10
- monsterVersion = new Version("3.25.0")
10
+ monsterVersion = new Version("3.27.0")
11
11
 
12
12
  let m = getMonsterVersion();
13
13