i18nizeelement 0.4.0 → 0.5.1

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.
@@ -0,0 +1,4 @@
1
+ export default plugin;
2
+ /** @type {import('jamilih').JamilihPlugin} */
3
+ declare const plugin: import('jamilih').JamilihPlugin;
4
+ //# sourceMappingURL=i18nizeelement-jamilih-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18nizeelement-jamilih-plugin.d.ts","sourceRoot":"","sources":["../src/i18nizeelement-jamilih-plugin.js"],"names":[],"mappings":";AAEA,8CAA8C;AAC9C,sBADW,OAAO,SAAS,EAAE,aAAa,CA+BxC"}
@@ -0,0 +1 @@
1
+ export {default} from './dist/i18nizeelement-jamilih-plugin.js';
@@ -3,188 +3,186 @@
3
3
  * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
4
4
  */
5
5
 
6
- var self;
7
- var RtlDetectLib = self = {
6
+ // Private vars - star
7
+ const _regexEscape = /([\.\*\+\^\$\[\]\\\(\)\|\{\}\,\-\:\?])/g; // eslint-disable-line no-useless-escape
8
+ const _regexParseLocale = /^([a-zA-Z]+)([-a-zA-Z]*)$/;
9
+ // Private vars - end
10
+
11
+ class Locale {
8
12
  // eslint-disable-line consistent-this
13
+
14
+ constructor(locale) {
15
+ if (typeof locale !== 'string') {
16
+ throw new TypeError('A string argument is expected');
17
+ }
18
+ if (!_regexParseLocale.test(locale)) {
19
+ throw new RangeError('A proper locale must be provided');
20
+ }
21
+ this._locale = locale;
22
+ }
23
+
9
24
  // Private functions - star
10
- _escapeRegExpPattern: function (str) {
25
+ static _escapeRegExpPattern(str) {
11
26
  if (typeof str !== 'string') {
12
27
  return str;
13
28
  }
14
-
15
- return str.replace(/([\.\*\+\^\$\[\]\\\(\)\|\{\}\,\-\:\?])/g, '\\$1'); // eslint-disable-line no-useless-escape
16
- },
17
- _toLowerCase: function (str, reserveReturnValue) {
29
+ return str.replace(_regexEscape, '\\$1');
30
+ }
31
+ static _toLowerCase(str, reserveReturnValue) {
18
32
  if (typeof str !== 'string') {
19
33
  return reserveReturnValue && str;
20
34
  }
21
-
22
35
  return str.toLowerCase();
23
- },
24
- _toUpperCase: function (str, reserveReturnValue) {
36
+ }
37
+ static _toUpperCase(str, reserveReturnValue) {
25
38
  if (typeof str !== 'string') {
26
39
  return reserveReturnValue && str;
27
40
  }
28
-
29
41
  return str.toUpperCase();
30
- },
31
- _trim: function (str, delimiter, reserveReturnValue) {
32
- var patterns = [];
33
- var regexp;
34
-
35
- var addPatterns = function (pattern) {
42
+ }
43
+ static _trim(str, delimiter, reserveReturnValue) {
44
+ const patterns = [];
45
+ let regexp;
46
+ const addPatterns = function (pattern) {
36
47
  // Build trim RegExp pattern and push it to patterns array
37
48
  patterns.push('^' + pattern + '+|' + pattern + '+$');
38
- }; // fix reserveReturnValue value
39
-
49
+ };
40
50
 
51
+ // fix reserveReturnValue value
41
52
  if (typeof delimiter === 'boolean') {
42
53
  reserveReturnValue = delimiter;
43
54
  delimiter = null;
44
55
  }
45
-
46
56
  if (typeof str !== 'string') {
47
57
  return reserveReturnValue && str;
48
- } // Trim based on delimiter array values
49
-
58
+ }
50
59
 
60
+ // Trim based on delimiter array values
51
61
  if (Array.isArray(delimiter)) {
52
62
  // Loop through delimiter array
53
- delimiter.map(function (item) {
63
+ delimiter.map(item => {
54
64
  // Escape delimiter to be valid RegExp Pattern
55
- var pattern = self._escapeRegExpPattern(item); // Push pattern to patterns array
56
-
57
-
65
+ const pattern = this._escapeRegExpPattern(item);
66
+ // Push pattern to patterns array
58
67
  addPatterns(pattern);
59
68
  });
60
- } // Trim based on delimiter string value
61
-
69
+ }
62
70
 
71
+ // Trim based on delimiter string value
63
72
  if (typeof delimiter === 'string') {
64
73
  // Escape delimiter to be valid RegExp Pattern
65
- var patternDelimiter = self._escapeRegExpPattern(delimiter); // push pattern to patterns array
66
-
67
-
74
+ const patternDelimiter = this._escapeRegExpPattern(delimiter);
75
+ // push pattern to patterns array
68
76
  addPatterns(patternDelimiter);
69
- } // If delimiter is not defined, Trim white spaces
70
-
77
+ }
71
78
 
79
+ // If delimiter is not defined, Trim white spaces
72
80
  if (!delimiter) {
73
81
  // Push white space pattern to patterns array
74
82
  addPatterns('\\s');
75
- } // Build RegExp pattern
76
-
77
-
78
- var pattern = '(' + patterns.join('|') + ')'; // Build RegExp object
83
+ }
79
84
 
80
- regexp = new RegExp(pattern, 'g'); // trim string for all patterns
85
+ // Build RegExp pattern
86
+ const pattern = '(' + patterns.join('|') + ')';
87
+ // Build RegExp object
88
+ regexp = new RegExp(pattern, 'g');
81
89
 
90
+ // trim string for all patterns
82
91
  while (str.match(regexp)) {
83
92
  str = str.replace(regexp, '');
84
- } // Return trim string
85
-
93
+ }
86
94
 
95
+ // Return trim string
87
96
  return str;
88
- },
89
- _parseLocale: function (strLocale) {
90
- // parse locale regex object
91
- var regex = /^([a-zA-Z]*)([_\-a-zA-Z]*)$/;
92
- var matches = regex.exec(strLocale); // exec regex
93
-
94
- var parsedLocale;
95
- var lang;
96
- var countryCode;
97
-
97
+ }
98
+ static _parseLocale(strLocale) {
99
+ var matches = _regexParseLocale.exec(strLocale); // exec regex
100
+ let parsedLocale;
101
+ let lang;
102
+ let countryCode;
98
103
  if (!strLocale || !matches) {
99
104
  return;
100
- } // fix countryCode string by trimming '-' and '_'
101
-
105
+ }
102
106
 
103
- matches[2] = self._trim(matches[2], ['-', '_']);
104
- lang = self._toLowerCase(matches[1]);
105
- countryCode = self._toUpperCase(matches[2]) || countryCode; // object with lang, countryCode properties
107
+ // fix countryCode string by trimming '-' and '_'
108
+ matches[2] = this._trim(matches[2], ['-', '_']);
109
+ lang = this._toLowerCase(matches[1]);
110
+ countryCode = this._toUpperCase(matches[2]) || countryCode;
106
111
 
112
+ // object with lang, countryCode properties
107
113
  parsedLocale = {
108
- lang: lang,
109
- countryCode: countryCode
110
- }; // return parsed locale object
114
+ lang,
115
+ countryCode
116
+ };
111
117
 
118
+ // return parsed locale object
112
119
  return parsedLocale;
113
- },
120
+ }
114
121
  // Private functions - End
115
- // Public functions - star
116
- isRtlLang: function (strLocale) {
117
- var objLocale = self._parseLocale(strLocale);
118
122
 
119
- if (!objLocale) {
120
- return;
121
- } // return true if the intel string lang exists in the BID RTL LANGS array else return false
123
+ _isRtlLang() {
124
+ const objLocale = this.constructor._parseLocale(this._locale);
122
125
 
126
+ // return true if the intel string lang exists in the BID RTL LANGS array else return false
127
+ return this.constructor._BIDI_RTL_LANGS.indexOf(objLocale.lang) >= 0;
128
+ }
123
129
 
124
- return self._BIDI_RTL_LANGS.indexOf(objLocale.lang) >= 0;
125
- },
126
- getLangDir: function (strLocale) {
130
+ // Public functions - star
131
+ get textInfo() {
127
132
  // return 'rtl' if the intel string lang exists in the BID RTL LANGS array else return 'ltr'
128
- return self.isRtlLang(strLocale) ? 'rtl' : 'ltr';
129
- } // Public functions - End
133
+ const direction = this._isRtlLang() ? 'rtl' : 'ltr';
134
+ return {
135
+ direction
136
+ };
137
+ }
130
138
 
131
- }; // Const BIDI_RTL_LANGS Array
139
+ // Public functions - End
140
+ }
141
+
142
+ // Why not working as static property
143
+ Locale._BIDI_RTL_LANGS = [
144
+ // Const BIDI_RTL_LANGS Array
132
145
  // BIDI_RTL_LANGS ref: http://en.wikipedia.org/wiki/Right-to-left
133
146
  // Table of scripts in Unicode: https://en.wikipedia.org/wiki/Script_(Unicode)
134
-
135
- Object.defineProperty(self, '_BIDI_RTL_LANGS', {
136
- value: ['ae',
137
- /* Avestan */
138
- 'ar',
139
- /* 'العربية', Arabic */
140
- 'arc',
141
- /* Aramaic */
142
- 'bcc',
143
- /* 'بلوچی مکرانی', Southern Balochi */
144
- 'bqi',
145
- /* 'بختياري', Bakthiari */
146
- 'ckb',
147
- /* 'Soranî / کوردی', Sorani */
148
- 'dv',
149
- /* Dhivehi */
150
- 'fa',
151
- /* 'فارسی', Persian */
152
- 'glk',
153
- /* 'گیلکی', Gilaki */
154
- 'he',
155
- /* 'עברית', Hebrew */
156
- 'ku',
157
- /* 'Kurdî / كوردی', Kurdish */
158
- 'mzn',
159
- /* 'مازِرونی', Mazanderani */
160
- 'nqo',
161
- /* N'Ko */
162
- 'pnb',
163
- /* 'پنجابی', Western Punjabi */
164
- 'ps',
165
- /* 'پښتو', Pashto, */
166
- 'sd',
167
- /* 'سنڌي', Sindhi */
168
- 'ug',
169
- /* 'Uyghurche / ئۇيغۇرچە', Uyghur */
170
- 'ur',
171
- /* 'اردو', Urdu */
172
- 'yi'
173
- /* 'ייִדיש', Yiddish */
174
- ],
175
- writable: false,
176
- enumerable: true,
177
- configurable: false
178
- });
179
- var rtlDetect = RtlDetectLib;
180
-
181
- var rtlDetect_1 = {
182
- isRtlLang: rtlDetect.isRtlLang,
183
- getLangDir: rtlDetect.getLangDir
184
- };
147
+ 'ae', /* Avestan */
148
+ 'ar', /* 'العربية', Arabic */
149
+ 'arc', /* Aramaic */
150
+ 'bcc', /* 'بلوچی مکرانی', Southern Balochi */
151
+ 'bqi', /* 'بختياري', Bakthiari */
152
+ 'ckb', /* 'Soranî / کوردی', Sorani */
153
+ 'dv', /* Dhivehi */
154
+ 'fa', /* 'فارسی', Persian */
155
+ 'glk', /* 'گیلکی', Gilaki */
156
+ 'he', /* 'עברית', Hebrew */
157
+ 'ku', /* 'Kurdî / كوردی', Kurdish */
158
+ 'mzn', /* 'مازِرونی', Mazanderani */
159
+ 'nqo', /* N'Ko */
160
+ 'pnb', /* 'پنجابی', Western Punjabi */
161
+ 'prs', /* 'دری', Darī */
162
+ 'ps', /* 'پښتو', Pashto, */
163
+ 'sd', /* 'سنڌي', Sindhi */
164
+ 'ug', /* 'Uyghurche / ئۇيغۇرچە', Uyghur */
165
+ 'ur', /* 'اردو', Urdu */
166
+ 'yi' /* 'ייִדיש', Yiddish */];
167
+
168
+ if (typeof Intl === 'undefined') {
169
+ globalThis.Intl = {};
170
+ }
171
+ if (typeof Intl.Locale === 'undefined') {
172
+ Intl.Locale = Locale;
173
+ }
185
174
 
186
175
  // e.g., `i18nizeElement(document.title, {language: 'ar-AR'});`
187
176
 
177
+ /**
178
+ * @param {HTMLElement} element
179
+ * @param {{
180
+ * language?: string,
181
+ * avoidLangIfSet?: boolean,
182
+ * avoidDirIfSet?: boolean,
183
+ * avoidLTRByDefault?: boolean
184
+ * }} cfg
185
+ */
188
186
  const i18nizeElement = (element, {
189
187
  language,
190
188
  // These avoid setting if found to be already set with the same value
@@ -198,21 +196,23 @@ const i18nizeElement = (element, {
198
196
  if (!element || !language) {
199
197
  throw new TypeError('You must supply an element and language');
200
198
  }
199
+ let presetLangElement;
201
200
 
202
- let presetLangElement; // We set `lang` if:
201
+ // We set `lang` if:
203
202
  // 1. The user is not avoiding setting `lang` when the supplied language
204
203
  // is the same as the closest ancestor with `lang`
205
204
  // 2. There is no ancestor with `lang`
206
205
  // 3. The closest ancestor with `lang` has a different language from
207
206
  // the supplied
208
-
209
207
  if (avoidLangIfSet) {
210
- presetLangElement = element.closest('[lang]');
208
+ presetLangElement = /** @type {HTMLElement} */
209
+ element.closest('[lang]');
211
210
  }
212
-
213
211
  if (!presetLangElement || presetLangElement.lang !== language) {
214
212
  element.lang = language;
215
- } // See <https://github.com/tc39/ecma402/issues/205> for request for JavaScript to detect this
213
+ }
214
+
215
+ // See <https://github.com/tc39/ecma402/issues/205> for request for JavaScript to detect this
216
216
  // We set `dir` if:
217
217
  // 1. The user is not avoiding setting `dir` when the supplied
218
218
  // language's directionality is the same as the closest ancestor
@@ -221,65 +221,84 @@ const i18nizeElement = (element, {
221
221
  // direction or the user isn't avoiding (the default) LTR)
222
222
  // 3. The closest ancestor with `dir` has a different `dir` from the
223
223
  // direction of the supplied language
224
-
225
-
226
- const dir = rtlDetect_1.getLangDir(language);
224
+ const {
225
+ direction: dir
226
+ } =
227
+ /**
228
+ * @type {Intl.Locale & {
229
+ * textInfo: {direction: "ltr"|"rtl"|"ttb"}
230
+ * }}
231
+ */
232
+ new Intl.Locale(language).textInfo;
233
+
234
+ /** @type {HTMLElement|undefined} */
227
235
  let presetDirElement;
228
-
229
- if (avoidDirIfSet || // If avoiding the default LTR except when different (even if not
236
+ if (avoidDirIfSet ||
237
+ // If avoiding the default LTR except when different (even if not
230
238
  // avoiding an (RTL) already-set dir), we need to know if different
231
239
  avoidLTRByDefault && dir === 'ltr') {
232
- presetDirElement = element.closest('[dir]');
240
+ presetDirElement = /** @type {HTMLElement} */
241
+ element.closest('[dir]');
233
242
  }
234
-
235
- if ( // If the closest ancestor with `dir` is different, we need to
243
+ if (
244
+ // If the closest ancestor with `dir` is different, we need to
236
245
  // set regardless
237
- presetDirElement && presetDirElement.dir !== dir || // We set if the user is not avoiding (whether there is no ancestor
246
+ presetDirElement && presetDirElement.dir !== dir ||
247
+ // We set if the user is not avoiding (whether there is no ancestor
238
248
  // with `div` or even when there is and the language has the same
239
249
  // directionality as the closest ancestor with `dir`) OR
240
- !avoidDirIfSet || // ...if there is no ancestor with `dir` AND...
241
- !presetDirElement && ( // this is either not an LTR direction or the user isn't
250
+ !avoidDirIfSet ||
251
+ // ...if there is no ancestor with `dir` AND...
252
+ !presetDirElement && (
253
+ // this is either not an LTR direction or the user isn't
242
254
  // avoiding (the default) LTR
243
255
  !avoidLTRByDefault || dir !== 'ltr')) {
244
256
  element.dir = dir;
245
- /* istanbul ignore next */
246
257
 
258
+ /* c8 ignore next 3 */
247
259
  if (dir === 'ttb') {
248
- // Assumes https://github.com/shadiabuhilal/rtl-detect/issues/2
249
260
  element.style.writingMode = 'vertical-lr';
250
261
  }
251
262
  }
252
263
  };
253
264
 
265
+ /** @type {import('jamilih').JamilihPlugin} */
254
266
  const plugin = {
255
267
  name: '$_language',
256
-
257
268
  async set({
258
269
  element,
259
270
  attribute: {
260
- value: options
271
+ value
261
272
  }
262
273
  }) {
274
+ let options = /** @type {import('jamilih').PluginValue} */
275
+ value;
263
276
  if (typeof options === 'string') {
264
277
  options = {
265
278
  language: options
266
279
  };
267
280
  } else if (Array.isArray(options)) {
268
- options = { ...options[1],
281
+ options = {
282
+ ...options[1],
269
283
  language: options[0]
270
284
  };
271
- } // We don't immediately internationalize
285
+ }
286
+ // We don't immediately internationalize
272
287
  // because Jamilih has not yet appended
273
288
  // the child element into the ancestors
274
289
  // it is being built with
275
-
276
-
277
290
  await Promise.resolve();
278
- i18nizeElement(element, { ...options
291
+ i18nizeElement( /** @type {HTMLElement} */element, {
292
+ ...
293
+ /**
294
+ * @type {{
295
+ * [key: string]: any;
296
+ * }}
297
+ */
298
+ options
279
299
  });
280
300
  }
281
-
282
301
  };
283
302
 
284
- export default plugin;
303
+ export { plugin as default };
285
304
  //# sourceMappingURL=i18nizeelement-jamilih-plugin.es6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18nizeelement-jamilih-plugin.es6.js","sources":["../node_modules/rtl-detect/lib/rtl-detect.js","../node_modules/rtl-detect/index.js","../src/index.js","../src/i18nizeelement-jamilih-plugin.js"],"sourcesContent":["/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nvar self;\nvar RtlDetectLib = self = { // eslint-disable-line consistent-this\n\n // Private functions - star\n _escapeRegExpPattern: function (str) {\n if (typeof str !== 'string') {\n return str;\n }\n return str.replace(/([\\.\\*\\+\\^\\$\\[\\]\\\\\\(\\)\\|\\{\\}\\,\\-\\:\\?])/g, '\\\\$1'); // eslint-disable-line no-useless-escape\n },\n _toLowerCase: function (str, reserveReturnValue) {\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n return str.toLowerCase();\n },\n _toUpperCase: function (str, reserveReturnValue) {\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n return str.toUpperCase();\n },\n _trim: function (str, delimiter, reserveReturnValue) {\n var patterns = [];\n var regexp;\n var addPatterns = function (pattern) {\n // Build trim RegExp pattern and push it to patterns array\n patterns.push('^' + pattern + '+|' + pattern + '+$');\n };\n\n // fix reserveReturnValue value\n if (typeof delimiter === 'boolean') {\n reserveReturnValue = delimiter;\n delimiter = null;\n }\n\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n\n // Trim based on delimiter array values\n if (Array.isArray(delimiter)) {\n // Loop through delimiter array\n delimiter.map(function (item) {\n // Escape delimiter to be valid RegExp Pattern\n var pattern = self._escapeRegExpPattern(item);\n // Push pattern to patterns array\n addPatterns(pattern);\n });\n }\n\n // Trim based on delimiter string value\n if (typeof delimiter === 'string') {\n // Escape delimiter to be valid RegExp Pattern\n var patternDelimiter = self._escapeRegExpPattern(delimiter);\n // push pattern to patterns array\n addPatterns(patternDelimiter);\n }\n\n // If delimiter is not defined, Trim white spaces\n if (!delimiter) {\n // Push white space pattern to patterns array\n addPatterns('\\\\s');\n }\n\n // Build RegExp pattern\n var pattern = '(' + patterns.join('|') + ')';\n // Build RegExp object\n regexp = new RegExp(pattern, 'g');\n\n // trim string for all patterns\n while (str.match(regexp)) {\n str = str.replace(regexp, '');\n }\n\n // Return trim string\n return str;\n },\n\n _parseLocale : function (strLocale) {\n // parse locale regex object\n var regex = /^([a-zA-Z]*)([_\\-a-zA-Z]*)$/;\n var matches = regex.exec(strLocale); // exec regex\n var parsedLocale;\n var lang;\n var countryCode;\n\n if (!strLocale || !matches) {\n return;\n }\n\n // fix countryCode string by trimming '-' and '_'\n matches[2] = self._trim(matches[2], ['-', '_']);\n\n lang = self._toLowerCase(matches[1]);\n countryCode = self._toUpperCase(matches[2]) || countryCode;\n\n // object with lang, countryCode properties\n parsedLocale = {\n lang: lang,\n countryCode: countryCode\n };\n\n // return parsed locale object\n return parsedLocale;\n },\n // Private functions - End\n\n // Public functions - star\n isRtlLang: function (strLocale) {\n var objLocale = self._parseLocale(strLocale);\n if (!objLocale) {\n return;\n }\n // return true if the intel string lang exists in the BID RTL LANGS array else return false\n return (self._BIDI_RTL_LANGS.indexOf(objLocale.lang) >= 0);\n },\n\n getLangDir: function (strLocale) {\n // return 'rtl' if the intel string lang exists in the BID RTL LANGS array else return 'ltr'\n return self.isRtlLang(strLocale) ? 'rtl' : 'ltr';\n }\n\n // Public functions - End\n};\n\n// Const BIDI_RTL_LANGS Array\n// BIDI_RTL_LANGS ref: http://en.wikipedia.org/wiki/Right-to-left\n// Table of scripts in Unicode: https://en.wikipedia.org/wiki/Script_(Unicode)\nObject.defineProperty(self, '_BIDI_RTL_LANGS', {\n value: [\n 'ae',\t/* Avestan */\n 'ar', /* 'العربية', Arabic */\n 'arc', /* Aramaic */\n 'bcc', /* 'بلوچی مکرانی', Southern Balochi */\n 'bqi', /* 'بختياري', Bakthiari */\n 'ckb', /* 'Soranî / کوردی', Sorani */\n 'dv', /* Dhivehi */\n 'fa', /* 'فارسی', Persian */\n 'glk', /* 'گیلکی', Gilaki */\n 'he', /* 'עברית', Hebrew */\n 'ku', /* 'Kurdî / كوردی', Kurdish */\n 'mzn', /* 'مازِرونی', Mazanderani */\n 'nqo', /* N'Ko */\n 'pnb', /* 'پنجابی', Western Punjabi */\n 'ps', /* 'پښتو', Pashto, */\n 'sd', /* 'سنڌي', Sindhi */\n 'ug', /* 'Uyghurche / ئۇيغۇرچە', Uyghur */\n 'ur', /* 'اردو', Urdu */\n 'yi' /* 'ייִדיש', Yiddish */\n ],\n writable: false,\n enumerable: true,\n configurable: false\n});\n\n\nmodule.exports = RtlDetectLib;\n","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nvar rtlDetect = require('./lib/rtl-detect');\n\nmodule.exports = {\n\n isRtlLang: rtlDetect.isRtlLang,\n\n getLangDir: rtlDetect.getLangDir\n\n};\n","import rtlDetect from 'rtl-detect';\n// https://github.com/shadiabuhilal/rtl-detect/issues/3\n// e.g., `i18nizeElement(document.title, {language: 'ar-AR'});`\nconst i18nizeElement = (element, {\n language,\n // These avoid setting if found to be already set with the same value\n // on the closest ancestor\n avoidLangIfSet = true, avoidDirIfSet = true,\n // This avoids setting LTR if there is no ancestor with `dir` (since\n // LTR is the default)\n avoidLTRByDefault = true\n} = {}) => {\n if (!element || !language) {\n throw new TypeError('You must supply an element and language');\n }\n let presetLangElement;\n\n // We set `lang` if:\n // 1. The user is not avoiding setting `lang` when the supplied language\n // is the same as the closest ancestor with `lang`\n // 2. There is no ancestor with `lang`\n // 3. The closest ancestor with `lang` has a different language from\n // the supplied\n if (avoidLangIfSet) {\n presetLangElement = element.closest('[lang]');\n }\n if (!presetLangElement || presetLangElement.lang !== language) {\n element.lang = language;\n }\n\n // See <https://github.com/tc39/ecma402/issues/205> for request for JavaScript to detect this\n // We set `dir` if:\n // 1. The user is not avoiding setting `dir` when the supplied\n // language's directionality is the same as the closest ancestor\n // with `dir`\n // 2. There is no ancestor with `dir` (and this is either not an LTR\n // direction or the user isn't avoiding (the default) LTR)\n // 3. The closest ancestor with `dir` has a different `dir` from the\n // direction of the supplied language\n const dir = rtlDetect.getLangDir(language);\n let presetDirElement;\n if (avoidDirIfSet ||\n // If avoiding the default LTR except when different (even if not\n // avoiding an (RTL) already-set dir), we need to know if different\n (avoidLTRByDefault && dir === 'ltr')\n ) {\n presetDirElement = element.closest('[dir]');\n }\n if (\n // If the closest ancestor with `dir` is different, we need to\n // set regardless\n (presetDirElement && presetDirElement.dir !== dir) ||\n // We set if the user is not avoiding (whether there is no ancestor\n // with `div` or even when there is and the language has the same\n // directionality as the closest ancestor with `dir`) OR\n (!avoidDirIfSet ||\n // ...if there is no ancestor with `dir` AND...\n (!presetDirElement &&\n // this is either not an LTR direction or the user isn't\n // avoiding (the default) LTR\n (!avoidLTRByDefault || dir !== 'ltr'))\n )\n ) {\n element.dir = dir;\n\n /* istanbul ignore next */\n if (dir === 'ttb') { // Assumes https://github.com/shadiabuhilal/rtl-detect/issues/2\n element.style.writingMode = 'vertical-lr';\n }\n }\n};\nexport default i18nizeElement;\n","import i18nizeElement from './index.js';\n\nconst plugin = {\n name: '$_language',\n async set ({element, attribute: {value: options}}) {\n if (typeof options === 'string') {\n options = {language: options};\n } else if (Array.isArray(options)) {\n options = {\n ...options[1],\n language: options[0]\n };\n }\n // We don't immediately internationalize\n // because Jamilih has not yet appended\n // the child element into the ancestors\n // it is being built with\n await Promise.resolve();\n i18nizeElement(element, {\n ...options\n });\n }\n};\n\nexport default plugin;\n"],"names":["self","RtlDetectLib","_escapeRegExpPattern","str","replace","_toLowerCase","reserveReturnValue","toLowerCase","_toUpperCase","toUpperCase","_trim","delimiter","patterns","regexp","addPatterns","pattern","push","Array","isArray","map","item","patternDelimiter","join","RegExp","match","_parseLocale","strLocale","regex","matches","exec","parsedLocale","lang","countryCode","isRtlLang","objLocale","_BIDI_RTL_LANGS","indexOf","getLangDir","Object","defineProperty","value","writable","enumerable","configurable","module","rtlDetect","i18nizeElement","element","language","avoidLangIfSet","avoidDirIfSet","avoidLTRByDefault","TypeError","presetLangElement","closest","dir","presetDirElement","style","writingMode","plugin","name","set","attribute","options","Promise","resolve"],"mappings":"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"}
1
+ {"version":3,"file":"i18nizeelement-jamilih-plugin.es6.js","sources":["../node_modules/.pnpm/intl-locale-textinfo-polyfill@1.0.1/node_modules/intl-locale-textinfo-polyfill/lib/Locale.js","../node_modules/.pnpm/intl-locale-textinfo-polyfill@1.0.1/node_modules/intl-locale-textinfo-polyfill/lib/polyfill.js","../src/index.js","../src/i18nizeelement-jamilih-plugin.js"],"sourcesContent":["/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n// Private vars - star\nconst _regexEscape = /([\\.\\*\\+\\^\\$\\[\\]\\\\\\(\\)\\|\\{\\}\\,\\-\\:\\?])/g; // eslint-disable-line no-useless-escape\nconst _regexParseLocale = /^([a-zA-Z]+)([-a-zA-Z]*)$/;\n// Private vars - end\n\nclass Locale { // eslint-disable-line consistent-this\n\n constructor (locale) {\n if (typeof locale !== 'string') {\n throw new TypeError('A string argument is expected');\n }\n if (!_regexParseLocale.test(locale)) {\n throw new RangeError('A proper locale must be provided');\n }\n this._locale = locale;\n }\n\n // Private functions - star\n static _escapeRegExpPattern (str) {\n if (typeof str !== 'string') {\n return str;\n }\n return str.replace(_regexEscape, '\\\\$1');\n }\n\n static _toLowerCase (str, reserveReturnValue) {\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n return str.toLowerCase();\n }\n\n static _toUpperCase (str, reserveReturnValue) {\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n return str.toUpperCase();\n }\n\n static _trim (str, delimiter, reserveReturnValue) {\n const patterns = [];\n let regexp;\n const addPatterns = function (pattern) {\n // Build trim RegExp pattern and push it to patterns array\n patterns.push('^' + pattern + '+|' + pattern + '+$');\n };\n\n // fix reserveReturnValue value\n if (typeof delimiter === 'boolean') {\n reserveReturnValue = delimiter;\n delimiter = null;\n }\n\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n\n // Trim based on delimiter array values\n if (Array.isArray(delimiter)) {\n // Loop through delimiter array\n delimiter.map((item) => {\n // Escape delimiter to be valid RegExp Pattern\n const pattern = this._escapeRegExpPattern(item);\n // Push pattern to patterns array\n addPatterns(pattern);\n });\n }\n\n // Trim based on delimiter string value\n if (typeof delimiter === 'string') {\n // Escape delimiter to be valid RegExp Pattern\n const patternDelimiter = this._escapeRegExpPattern(delimiter);\n // push pattern to patterns array\n addPatterns(patternDelimiter);\n }\n\n // If delimiter is not defined, Trim white spaces\n if (!delimiter) {\n // Push white space pattern to patterns array\n addPatterns('\\\\s');\n }\n\n // Build RegExp pattern\n const pattern = '(' + patterns.join('|') + ')';\n // Build RegExp object\n regexp = new RegExp(pattern, 'g');\n\n // trim string for all patterns\n while (str.match(regexp)) {\n str = str.replace(regexp, '');\n }\n\n // Return trim string\n return str;\n }\n\n static _parseLocale (strLocale) {\n var matches = _regexParseLocale.exec(strLocale); // exec regex\n let parsedLocale;\n let lang;\n let countryCode;\n\n if (!strLocale || !matches) {\n return;\n }\n\n // fix countryCode string by trimming '-' and '_'\n matches[2] = this._trim(matches[2], ['-', '_']);\n\n lang = this._toLowerCase(matches[1]);\n countryCode = this._toUpperCase(matches[2]) || countryCode;\n\n // object with lang, countryCode properties\n parsedLocale = {\n lang,\n countryCode\n };\n\n // return parsed locale object\n return parsedLocale;\n }\n // Private functions - End\n\n _isRtlLang () {\n const objLocale = this.constructor._parseLocale(this._locale);\n\n // return true if the intel string lang exists in the BID RTL LANGS array else return false\n return (this.constructor._BIDI_RTL_LANGS.indexOf(objLocale.lang) >= 0);\n }\n\n // Public functions - star\n get textInfo () {\n // return 'rtl' if the intel string lang exists in the BID RTL LANGS array else return 'ltr'\n const direction = this._isRtlLang() ? 'rtl' : 'ltr';\n return { direction };\n }\n\n // Public functions - End\n}\n\n// Why not working as static property\nLocale._BIDI_RTL_LANGS = [\n // Const BIDI_RTL_LANGS Array\n // BIDI_RTL_LANGS ref: http://en.wikipedia.org/wiki/Right-to-left\n // Table of scripts in Unicode: https://en.wikipedia.org/wiki/Script_(Unicode)\n 'ae',\t/* Avestan */\n 'ar', /* 'العربية', Arabic */\n 'arc', /* Aramaic */\n 'bcc', /* 'بلوچی مکرانی', Southern Balochi */\n 'bqi', /* 'بختياري', Bakthiari */\n 'ckb', /* 'Soranî / کوردی', Sorani */\n 'dv', /* Dhivehi */\n 'fa', /* 'فارسی', Persian */\n 'glk', /* 'گیلکی', Gilaki */\n 'he', /* 'עברית', Hebrew */\n 'ku', /* 'Kurdî / كوردی', Kurdish */\n 'mzn', /* 'مازِرونی', Mazanderani */\n 'nqo', /* N'Ko */\n 'pnb', /* 'پنجابی', Western Punjabi */\n 'prs', /* 'دری', Darī */\n 'ps', /* 'پښتو', Pashto, */\n 'sd', /* 'سنڌي', Sindhi */\n 'ug', /* 'Uyghurche / ئۇيغۇرچە', Uyghur */\n 'ur', /* 'اردو', Urdu */\n 'yi' /* 'ייִדיש', Yiddish */\n];\n\nexport default Locale;\n","import Locale from './Locale.js';\n\nif (typeof Intl === 'undefined') {\n globalThis.Intl = {};\n}\n\nif (typeof Intl.Locale === 'undefined') {\n Intl.Locale = Locale;\n}\n","import 'intl-locale-textinfo-polyfill/lib/polyfill.js';\n\n// e.g., `i18nizeElement(document.title, {language: 'ar-AR'});`\n\n/**\n * @param {HTMLElement} element\n * @param {{\n * language?: string,\n * avoidLangIfSet?: boolean,\n * avoidDirIfSet?: boolean,\n * avoidLTRByDefault?: boolean\n * }} cfg\n */\nconst i18nizeElement = (element, {\n language,\n // These avoid setting if found to be already set with the same value\n // on the closest ancestor\n avoidLangIfSet = true, avoidDirIfSet = true,\n // This avoids setting LTR if there is no ancestor with `dir` (since\n // LTR is the default)\n avoidLTRByDefault = true\n} = {}) => {\n if (!element || !language) {\n throw new TypeError('You must supply an element and language');\n }\n let presetLangElement;\n\n // We set `lang` if:\n // 1. The user is not avoiding setting `lang` when the supplied language\n // is the same as the closest ancestor with `lang`\n // 2. There is no ancestor with `lang`\n // 3. The closest ancestor with `lang` has a different language from\n // the supplied\n if (avoidLangIfSet) {\n presetLangElement = /** @type {HTMLElement} */ (\n element.closest('[lang]')\n );\n }\n if (!presetLangElement || presetLangElement.lang !== language) {\n element.lang = language;\n }\n\n // See <https://github.com/tc39/ecma402/issues/205> for request for JavaScript to detect this\n // We set `dir` if:\n // 1. The user is not avoiding setting `dir` when the supplied\n // language's directionality is the same as the closest ancestor\n // with `dir`\n // 2. There is no ancestor with `dir` (and this is either not an LTR\n // direction or the user isn't avoiding (the default) LTR)\n // 3. The closest ancestor with `dir` has a different `dir` from the\n // direction of the supplied language\n const {direction: dir} =\n /**\n * @type {Intl.Locale & {\n * textInfo: {direction: \"ltr\"|\"rtl\"|\"ttb\"}\n * }}\n */ (\n new Intl.Locale(language)\n ).textInfo;\n\n /** @type {HTMLElement|undefined} */\n let presetDirElement;\n if (avoidDirIfSet ||\n // If avoiding the default LTR except when different (even if not\n // avoiding an (RTL) already-set dir), we need to know if different\n (avoidLTRByDefault && dir === 'ltr')\n ) {\n presetDirElement = /** @type {HTMLElement} */ (\n element.closest('[dir]')\n );\n }\n if (\n // If the closest ancestor with `dir` is different, we need to\n // set regardless\n (presetDirElement && presetDirElement.dir !== dir) ||\n // We set if the user is not avoiding (whether there is no ancestor\n // with `div` or even when there is and the language has the same\n // directionality as the closest ancestor with `dir`) OR\n (!avoidDirIfSet ||\n // ...if there is no ancestor with `dir` AND...\n (!presetDirElement &&\n // this is either not an LTR direction or the user isn't\n // avoiding (the default) LTR\n (!avoidLTRByDefault || dir !== 'ltr'))\n )\n ) {\n element.dir = dir;\n\n /* c8 ignore next 3 */\n if (dir === 'ttb') {\n element.style.writingMode = 'vertical-lr';\n }\n }\n};\nexport default i18nizeElement;\n","import i18nizeElement from './index.js';\n\n/** @type {import('jamilih').JamilihPlugin} */\nconst plugin = {\n name: '$_language',\n async set ({element, attribute: {value}}) {\n let options = /** @type {import('jamilih').PluginValue} */ (\n value\n );\n if (typeof options === 'string') {\n options = {language: options};\n } else if (Array.isArray(options)) {\n options = {\n ...options[1],\n language: options[0]\n };\n }\n // We don't immediately internationalize\n // because Jamilih has not yet appended\n // the child element into the ancestors\n // it is being built with\n await Promise.resolve();\n i18nizeElement(/** @type {HTMLElement} */ (element), {\n ...(\n /**\n * @type {{\n * [key: string]: any;\n * }}\n */\n (options)\n )\n });\n }\n};\n\nexport default plugin;\n"],"names":["_regexEscape","_regexParseLocale","Locale","constructor","locale","TypeError","test","RangeError","_locale","_escapeRegExpPattern","str","replace","_toLowerCase","reserveReturnValue","toLowerCase","_toUpperCase","toUpperCase","_trim","delimiter","patterns","regexp","addPatterns","pattern","push","Array","isArray","map","item","patternDelimiter","join","RegExp","match","_parseLocale","strLocale","matches","exec","parsedLocale","lang","countryCode","_isRtlLang","objLocale","_BIDI_RTL_LANGS","indexOf","textInfo","direction","Intl","globalThis","i18nizeElement","element","language","avoidLangIfSet","avoidDirIfSet","avoidLTRByDefault","presetLangElement","closest","dir","presetDirElement","style","writingMode","plugin","name","set","attribute","value","options","Promise","resolve"],"mappings":"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","x_google_ignoreList":[0,1]}