i18nizeelement 0.3.0 → 0.5.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.
- package/README.md +10 -2
- package/dist/i18nizeelement-jamilih-plugin.d.ts +4 -0
- package/dist/i18nizeelement-jamilih-plugin.d.ts.map +1 -0
- package/dist/i18nizeelement-jamilih-plugin.es6.js +168 -149
- package/dist/i18nizeelement-jamilih-plugin.es6.js.map +1 -1
- package/dist/i18nizeelement-jamilih-plugin.umd.js +296 -277
- package/dist/i18nizeelement-jamilih-plugin.umd.js.map +1 -1
- package/dist/i18nizeelement.es6.js +152 -141
- package/dist/i18nizeelement.es6.js.map +1 -1
- package/dist/i18nizeelement.umd.js +257 -246
- package/dist/i18nizeelement.umd.js.map +1 -1
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/package.json +64 -49
- package/src/i18nizeelement-jamilih-plugin.js +14 -3
- package/src/index.js +30 -7
- package/CHANGES.md +0 -28
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ i18nizeElement(document.querySelector('html'), {
|
|
|
39
39
|
## Usage (as a [jamilih](https://github.com/brettz9/jamilih) plugin)
|
|
40
40
|
|
|
41
41
|
```js
|
|
42
|
-
import jml from 'jamilih';
|
|
42
|
+
import {jml, body} from 'jamilih';
|
|
43
43
|
import i18nizeElement from
|
|
44
44
|
'i18nizeelement/dist/i18nizeelement-jamilih-plugin.js';
|
|
45
45
|
|
|
@@ -52,7 +52,15 @@ j('div', {id: 'myDiv', $_language: {
|
|
|
52
52
|
avoidLangIfSet: true,
|
|
53
53
|
avoidDirIfSet: true,
|
|
54
54
|
avoidLTRByDefault: true
|
|
55
|
-
}},
|
|
55
|
+
}}, body);
|
|
56
|
+
|
|
57
|
+
// An alternative API is:
|
|
58
|
+
j('div', {id: 'myDiv', $_language: [
|
|
59
|
+
'en-US' /* , optionalOptionsObjectHere */
|
|
60
|
+
]});
|
|
61
|
+
|
|
62
|
+
// If options are not needed you can use this format:
|
|
63
|
+
j('div', {id: 'myDiv', $_language: 'en-US'}, body);
|
|
56
64
|
```
|
|
57
65
|
|
|
58
66
|
Please note that this plugin suffers from one limitation: The
|
|
@@ -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"}
|
|
@@ -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
|
-
|
|
7
|
-
|
|
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
|
|
25
|
+
static _escapeRegExpPattern(str) {
|
|
11
26
|
if (typeof str !== 'string') {
|
|
12
27
|
return str;
|
|
13
28
|
}
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
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
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
};
|
|
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
|
-
}
|
|
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(
|
|
63
|
+
delimiter.map(item => {
|
|
54
64
|
// Escape delimiter to be valid RegExp Pattern
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
65
|
+
const pattern = this._escapeRegExpPattern(item);
|
|
66
|
+
// Push pattern to patterns array
|
|
58
67
|
addPatterns(pattern);
|
|
59
68
|
});
|
|
60
|
-
}
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
74
|
+
const patternDelimiter = this._escapeRegExpPattern(delimiter);
|
|
75
|
+
// push pattern to patterns array
|
|
68
76
|
addPatterns(patternDelimiter);
|
|
69
|
-
}
|
|
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
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
var pattern = '(' + patterns.join('|') + ')'; // Build RegExp object
|
|
83
|
+
}
|
|
79
84
|
|
|
80
|
-
|
|
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
|
-
}
|
|
85
|
-
|
|
93
|
+
}
|
|
86
94
|
|
|
95
|
+
// Return trim string
|
|
87
96
|
return str;
|
|
88
|
-
}
|
|
89
|
-
_parseLocale
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
}
|
|
101
|
-
|
|
105
|
+
}
|
|
102
106
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
|
109
|
-
countryCode
|
|
110
|
-
};
|
|
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
|
-
|
|
120
|
-
|
|
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
|
-
|
|
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
|
-
|
|
129
|
-
|
|
133
|
+
const direction = this._isRtlLang() ? 'rtl' : 'ltr';
|
|
134
|
+
return {
|
|
135
|
+
direction
|
|
136
|
+
};
|
|
137
|
+
}
|
|
130
138
|
|
|
131
|
-
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
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 =
|
|
208
|
+
presetLangElement = /** @type {HTMLElement} */
|
|
209
|
+
element.closest('[lang]');
|
|
211
210
|
}
|
|
212
|
-
|
|
213
211
|
if (!presetLangElement || presetLangElement.lang !== language) {
|
|
214
212
|
element.lang = language;
|
|
215
|
-
}
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
240
|
+
presetDirElement = /** @type {HTMLElement} */
|
|
241
|
+
element.closest('[dir]');
|
|
233
242
|
}
|
|
234
|
-
|
|
235
|
-
|
|
243
|
+
if (
|
|
244
|
+
// If the closest ancestor with `dir` is different, we need to
|
|
236
245
|
// set regardless
|
|
237
|
-
presetDirElement && presetDirElement.dir !== dir ||
|
|
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 ||
|
|
241
|
-
|
|
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
|
|
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 = {
|
|
281
|
+
options = {
|
|
282
|
+
...options[1],
|
|
269
283
|
language: options[0]
|
|
270
284
|
};
|
|
271
|
-
}
|
|
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, {
|
|
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
|
|
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]}
|