rpx-xui-translation 0.1.2 → 0.1.4
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/bundles/rpx-xui-translation.umd.js +18 -0
- package/bundles/rpx-xui-translation.umd.js.map +1 -1
- package/bundles/rpx-xui-translation.umd.min.js +2 -2
- package/bundles/rpx-xui-translation.umd.min.js.map +1 -1
- package/esm2015/lib/rpx-translation.service.js +18 -1
- package/esm5/lib/rpx-translation.service.js +19 -1
- package/fesm2015/rpx-xui-translation.js +17 -0
- package/fesm2015/rpx-xui-translation.js.map +1 -1
- package/fesm5/rpx-xui-translation.js +18 -0
- package/fesm5/rpx-xui-translation.js.map +1 -1
- package/lib/rpx-translation.service.d.ts +3 -0
- package/package.json +1 -1
- package/rpx-xui-translation.metadata.json +1 -1
|
@@ -268,9 +268,18 @@
|
|
|
268
268
|
this.config = config;
|
|
269
269
|
this.http = http;
|
|
270
270
|
this.currentLanguage = 'en';
|
|
271
|
+
this.languageKey = 'exui-preferred-language';
|
|
271
272
|
this.phrases = {};
|
|
272
273
|
this.observables = {};
|
|
273
274
|
this.requesting = {};
|
|
275
|
+
var persistedLanguage = this.getPersistedLanguage();
|
|
276
|
+
if (persistedLanguage) {
|
|
277
|
+
this.language = persistedLanguage;
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
// no language persisted yet, save default
|
|
281
|
+
this.persistLanguage();
|
|
282
|
+
}
|
|
274
283
|
}
|
|
275
284
|
Object.defineProperty(RpxTranslationService.prototype, "language", {
|
|
276
285
|
get: function () {
|
|
@@ -280,6 +289,7 @@
|
|
|
280
289
|
var _this = this;
|
|
281
290
|
if (lang !== this.currentLanguage) {
|
|
282
291
|
this.currentLanguage = lang;
|
|
292
|
+
this.persistLanguage();
|
|
283
293
|
Object.keys(this.phrases).forEach(function (phrase) { return _this.translate(phrase); });
|
|
284
294
|
}
|
|
285
295
|
},
|
|
@@ -355,6 +365,14 @@
|
|
|
355
365
|
});
|
|
356
366
|
});
|
|
357
367
|
};
|
|
368
|
+
RpxTranslationService.prototype.persistLanguage = function () {
|
|
369
|
+
document.cookie = this.languageKey + "=" + this.currentLanguage + ";";
|
|
370
|
+
};
|
|
371
|
+
RpxTranslationService.prototype.getPersistedLanguage = function () {
|
|
372
|
+
var _this = this;
|
|
373
|
+
var _a;
|
|
374
|
+
return (_a = document.cookie.split(';').find(function (cookie) { return cookie.trim().startsWith(_this.languageKey + '='); })) === null || _a === void 0 ? void 0 : _a.split('=')[1].trim();
|
|
375
|
+
};
|
|
358
376
|
RpxTranslationService.ctorParameters = function () { return [
|
|
359
377
|
{ type: RpxTranslationConfig },
|
|
360
378
|
{ type: http.HttpClient }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpx-xui-translation.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) { }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T): T|null {\n if (typeof value === 'string') {\n // lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,\n // but due to overloading the async interface we can't specify that.\n const o = this.translationService.getTranslation(value as unknown as string) as unknown as Observable<T>;\n const ret = super.transform<T>(o);\n return ret;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n"],"names":["DateTime","Dexie","BehaviorSubject","from","liveQuery","tap","timer","map","catchError","of","HttpClient","Injectable","ChangeDetectorRef","Pipe","AsyncPipe","NgModule","HttpClientModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rpx-xui-translation.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T): T|null {\n if (typeof value === 'string') {\n // lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,\n // but due to overloading the async interface we can't specify that.\n const o = this.translationService.getTranslation(value as unknown as string) as unknown as Observable<T>;\n const ret = super.transform<T>(o);\n return ret;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n"],"names":["DateTime","Dexie","BehaviorSubject","from","liveQuery","tap","timer","map","catchError","of","HttpClient","Injectable","ChangeDetectorRef","Pipe","AsyncPipe","NgModule","HttpClientModule"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(t
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/common/http"),require("@angular/core"),require("dexie"),require("luxon"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("rpx-xui-translation",["exports","@angular/common/http","@angular/core","dexie","luxon","rxjs","rxjs/operators","@angular/common"],t):t((e=e||self)["rpx-xui-translation"]={},e.ng.common.http,e.ng.core,e.Dexie,e.luxon,e.rxjs,e.rxjs.operators,e.ng.common)}(this,(function(e,t,r,n,i,s,o,a){"use strict";var u="default"in n?n.default:n,c=function(e,t){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */function p(t
|
|
15
|
+
***************************************************************************** */function p(e,t){function r(){this.constructor=e}c(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function l(e,t,r,n){var i,s=arguments.length,o=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,n);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(o=(s<3?i(o):s>3?i(t,r,o):i(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o}var f=function(){this.debounceTimeMs=300,this.testMode=!1},h=function(){function e(){}return e.create=function(t,r,n,i){var s=new e;return s.phrase=t,s.lang=r,s.translation=n,s.validity=i,s},e.prototype.isExpired=function(){return i.DateTime.fromISO(this.validity)<i.DateTime.now()},e}(),g=new(function(e){function t(){var t=e.call(this,"RpxTranslations")||this;return t.version(1).stores({translations:"++id, [phrase+lang]"}),t.translations.mapToClass(h),t}return p(t,e),t}(u)),d=function(){function e(e,t){this.config=e,this.http=t,this.currentLanguage="en",this.languageKey="exui-preferred-language",this.phrases={},this.observables={},this.requesting={};var r=this.getPersistedLanguage();r?this.language=r:this.persistLanguage()}return Object.defineProperty(e.prototype,"language",{get:function(){return this.currentLanguage},set:function(e){var t=this;e!==this.currentLanguage&&(this.currentLanguage=e,this.persistLanguage(),Object.keys(this.phrases).forEach((function(e){return t.translate(e)})))},enumerable:!0,configurable:!0}),e.prototype.getTranslation=function(e){return this.observables.hasOwnProperty(e)?this.observables[e]:this.translate(e)},e.prototype.translate=function(e){var t=this,r=this.language;return this.phrases.hasOwnProperty(e)||(this.phrases[e]=new s.BehaviorSubject(e),this.observables[e]=this.phrases[e].asObservable()),"en"===r?this.phrases[e].next(e):s.from(n.liveQuery((function(){return g.translations.where("[phrase+lang]").equals([e,r]).first()}))).pipe(o.tap((function(n){n&&!n.isExpired()?t.phrases[e].next(n.translation):(n&&g.translations.delete(n.id),t.phrases[e].next(e+" [Translation in progress]"),t.load(e,r))}))).subscribe((function(){})),this.observables[e]},e.prototype.load=function(e,t){var r=this;"en"!==t?(this.requesting.hasOwnProperty(t)||(this.requesting[t]=[]),-1===this.requesting[t].indexOf(e)&&(this.requesting[t].push(e),this.requestTimerSubscription&&this.requestTimerSubscription.unsubscribe(),this.requestTimerSubscription=s.timer(this.config.debounceTimeMs).subscribe((function(){var e=r.config.baseUrl+"/"+t,n=r.http.post(e,{phrases:r.requesting[t]}).pipe(o.map((function(e){return e.translations})),o.catchError((function(){var e={};return r.requesting[t].forEach((function(t){return e[t]=r.config.testMode?"[Test translation for "+t+"]":t})),s.of(e)}))).subscribe((function(e){var s=[];Object.keys(e).forEach((function(n){s.push(h.create(n,t,e[n],i.DateTime.now().plus(r.config.validity).toISO())),r.phrases[n].next(e[n])})),g.translations.bulkAdd(s),r.requesting[t]=[],r.requestTimerSubscription.unsubscribe(),r.requestTimerSubscription=null,n.unsubscribe()}))})))):this.phrases[e].next(e)},e.prototype.persistLanguage=function(){document.cookie=this.languageKey+"="+this.currentLanguage+";"},e.prototype.getPersistedLanguage=function(){var e,t=this;return null===(e=document.cookie.split(";").find((function(e){return e.trim().startsWith(t.languageKey+"=")})))||void 0===e?void 0:e.split("=")[1].trim()},e.ctorParameters=function(){return[{type:f},{type:t.HttpClient}]},e=l([r.Injectable()],e)}(),b=function(e){function t(t,r){var n=e.call(this,r)||this;return n.translationService=t,n}return p(t,e),t.prototype.transform=function(t){if("string"==typeof t){var r=this.translationService.getTranslation(t);return e.prototype.transform.call(this,r)}return null},t.ctorParameters=function(){return[{type:d},{type:r.ChangeDetectorRef}]},t=l([r.Pipe({name:"rpxTranslate",pure:!1})],t)}(a.AsyncPipe),y=function(){function e(){}var n;return n=e,e.forRoot=function(e){return{ngModule:n,providers:[{provide:f,useValue:e},d]}},e.forChild=function(){return{ngModule:n}},e=n=l([r.NgModule({declarations:[b],imports:[t.HttpClientModule],exports:[b]})],e)}();e.RpxTranslatePipe=b,e.RpxTranslationConfig=f,e.RpxTranslationModule=y,e.RpxTranslationService=d,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
16
16
|
//# sourceMappingURL=rpx-xui-translation.umd.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","debounceTimeMs","testMode","Translation","phrase","lang","translation","validity","t","isExpired","DateTime","fromISO","now","db","_super","TranslationDB","_this","call","version","stores","translations","mapToClass","Dexie","RpxTranslationService","config","http","currentLanguage","phrases","observables","requesting","keys","forEach","translate","getTranslation","language","BehaviorSubject","asObservable","next","from","liveQuery","where","equals","first","pipe","tap","delete","id","load","subscribe","indexOf","push","requestTimerSubscription","unsubscribe","timer","url","baseUrl","s","post","map","catchError","of","toAdd","plus","toISO","bulkAdd","RpxTranslationConfig","HttpClient","Injectable","RpxTranslatePipe","translationService","ref","transform","value","o","ChangeDetectorRef","Pipe","name","pure","AsyncPipe","RpxTranslationModule","forRoot","ngModule","RpxTranslationModule_1","providers","provide","useValue","forChild","NgModule","declarations","imports","HttpClientModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) { }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T): T|null {\n if (typeof value === 'string') {\n // lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,\n // but due to overloading the async interface we can't specify that.\n const o = this.translationService.getTranslation(value as unknown as string) as unknown as Observable<T>;\n const ret = super.transform<T>(o);\n return ret;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","debounceTimeMs","testMode","Translation","phrase","lang","translation","validity","t","isExpired","DateTime","fromISO","now","db","_super","TranslationDB","_this","call","version","stores","translations","mapToClass","Dexie","RpxTranslationService","config","http","currentLanguage","languageKey","phrases","observables","requesting","persistedLanguage","getPersistedLanguage","language","persistLanguage","keys","forEach","translate","getTranslation","BehaviorSubject","asObservable","next","from","liveQuery","where","equals","first","pipe","tap","delete","id","load","subscribe","indexOf","push","requestTimerSubscription","unsubscribe","timer","url","baseUrl","s","post","map","catchError","of","toAdd","plus","toISO","bulkAdd","document","cookie","_a","split","find","trim","startsWith","RpxTranslationConfig","HttpClient","Injectable","RpxTranslatePipe","translationService","ref","transform","value","o","ChangeDetectorRef","Pipe","name","pure","AsyncPipe","RpxTranslationModule","forRoot","ngModule","RpxTranslationModule_1","providers","provide","useValue","forChild","NgModule","declarations","imports","HttpClientModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T): T|null {\n if (typeof value === 'string') {\n // lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,\n // but due to overloading the async interface we can't specify that.\n const o = this.translationService.getTranslation(value as unknown as string) as unknown as Observable<T>;\n const ret = super.transform<T>(o);\n return ret;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n"]}
|
|
@@ -12,13 +12,23 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
12
12
|
this.config = config;
|
|
13
13
|
this.http = http;
|
|
14
14
|
this.currentLanguage = 'en';
|
|
15
|
+
this.languageKey = 'exui-preferred-language';
|
|
15
16
|
this.phrases = {};
|
|
16
17
|
this.observables = {};
|
|
17
18
|
this.requesting = {};
|
|
19
|
+
const persistedLanguage = this.getPersistedLanguage();
|
|
20
|
+
if (persistedLanguage) {
|
|
21
|
+
this.language = persistedLanguage;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
// no language persisted yet, save default
|
|
25
|
+
this.persistLanguage();
|
|
26
|
+
}
|
|
18
27
|
}
|
|
19
28
|
set language(lang) {
|
|
20
29
|
if (lang !== this.currentLanguage) {
|
|
21
30
|
this.currentLanguage = lang;
|
|
31
|
+
this.persistLanguage();
|
|
22
32
|
Object.keys(this.phrases).forEach(phrase => this.translate(phrase));
|
|
23
33
|
}
|
|
24
34
|
}
|
|
@@ -92,6 +102,13 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
92
102
|
});
|
|
93
103
|
});
|
|
94
104
|
}
|
|
105
|
+
persistLanguage() {
|
|
106
|
+
document.cookie = `${this.languageKey}=${this.currentLanguage};`;
|
|
107
|
+
}
|
|
108
|
+
getPersistedLanguage() {
|
|
109
|
+
var _a;
|
|
110
|
+
return (_a = document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))) === null || _a === void 0 ? void 0 : _a.split('=')[1].trim();
|
|
111
|
+
}
|
|
95
112
|
};
|
|
96
113
|
RpxTranslationService.ctorParameters = () => [
|
|
97
114
|
{ type: RpxTranslationConfig },
|
|
@@ -101,4 +118,4 @@ RpxTranslationService = __decorate([
|
|
|
101
118
|
Injectable()
|
|
102
119
|
], RpxTranslationService);
|
|
103
120
|
export { RpxTranslationService };
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPaEUsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFvQmhDLFlBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXBCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBRXBDLFlBQU8sR0FBaUQsRUFBRSxDQUFDO1FBQzNELGdCQUFXLEdBQTRDLEVBQUUsQ0FBQztRQUMxRCxlQUFVLEdBQWlDLEVBQUUsQ0FBQztJQWlCbEQsQ0FBQztJQWRMLElBQVcsUUFBUSxDQUFDLElBQWlCO1FBQ25DLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7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QUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDcEMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQztnQkFDSCxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyx3QkFBeUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztnQkFDckMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQTs7WUFwRm1CLG9CQUFvQjtZQUN0QixVQUFVOztBQXRCZixxQkFBcUI7SUFEakMsVUFBVSxFQUFFO0dBQ0EscUJBQXFCLENBeUdqQztTQXpHWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGl2ZVF1ZXJ5IH0gZnJvbSAnZGV4aWUnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRiLCBUcmFuc2xhdGlvbiB9IGZyb20gJy4vZGInO1xuaW1wb3J0IHsgUnB4TGFuZ3VhZ2UgfSBmcm9tICcuL3JweC1sYW5ndWFnZS5lbnVtJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uQ29uZmlnIH0gZnJvbSAnLi9ycHgtdHJhbnNsYXRpb24uY29uZmlnJztcblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uc0RUTyB7XG4gIHRyYW5zbGF0aW9uczogeyBbZnJvbTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBScHhUcmFuc2xhdGlvblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgY3VycmVudExhbmd1YWdlOiBScHhMYW5ndWFnZSA9ICdlbic7XG5cbiAgcHJpdmF0ZSBwaHJhc2VzOiB7IFtwaHJhc2U6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIG9ic2VydmFibGVzOiB7IFtwaHJhc2U6IHN0cmluZ106IE9ic2VydmFibGU8c3RyaW5nPn0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0aW5nOiB7IFtsYW5nOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gIHB1YmxpYyBzZXQgbGFuZ3VhZ2UobGFuZzogUnB4TGFuZ3VhZ2UpIHtcbiAgICBpZiAobGFuZyAhPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gbGFuZztcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucGhyYXNlcykuZm9yRWFjaChwaHJhc2UgPT4gdGhpcy50cmFuc2xhdGUocGhyYXNlKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZSgpOiBScHhMYW5ndWFnZSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmd1YWdlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWc6IFJweFRyYW5zbGF0aW9uQ29uZmlnLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICApIHsgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMub2JzZXJ2YWJsZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUocGhyYXNlKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2xhdGUocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmd1YWdlO1xuICAgIGlmICghdGhpcy5waHJhc2VzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHBocmFzZSk7XG4gICAgICB0aGlzLm9ic2VydmFibGVzW3BocmFzZV0gPSB0aGlzLnBocmFzZXNbcGhyYXNlXS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChwaHJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tKGxpdmVRdWVyeSgoKSA9PiBkYi50cmFuc2xhdGlvbnMud2hlcmUoJ1twaHJhc2UrbGFuZ10nKS5lcXVhbHMoW3BocmFzZSwgbGFuZ10pLmZpcnN0KCkpKS5waXBlKFxuICAgICAgICB0YXAodCA9PiB7XG4gICAgICAgICAgaWYgKHQgJiYgIXQuaXNFeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQodC50cmFuc2xhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICAgIC8vIGV4cGlyZWQsIGNsZWFuIHVwIERCXG4gICAgICAgICAgICAgIGRiLnRyYW5zbGF0aW9ucy5kZWxldGUodC5pZCEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChgJHtwaHJhc2V9IFtUcmFuc2xhdGlvbiBpbiBwcm9ncmVzc11gKTtcbiAgICAgICAgICAgIHRoaXMubG9hZChwaHJhc2UsIGxhbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkKHBocmFzZTogc3RyaW5nLCBsYW5nOiBScHhMYW5ndWFnZSk6IHZvaWQge1xuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHBocmFzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RpbmcuaGFzT3duUHJvcGVydHkobGFuZykpIHtcbiAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlcXVlc3RpbmdbbGFuZ10uaW5kZXhPZihwaHJhc2UpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5wdXNoKHBocmFzZSk7XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcih0aGlzLmNvbmZpZy5kZWJvdW5jZVRpbWVNcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgKyBgLyR7bGFuZ31gO1xuICAgICAgY29uc3QgcyA9IHRoaXMuaHR0cC5wb3N0PFRyYW5zbGF0aW9uc0RUTz4odXJsLCB7IHBocmFzZXM6IHRoaXMucmVxdWVzdGluZ1tsYW5nXSB9KS5waXBlKFxuICAgICAgICBtYXAodCA9PiB0LnRyYW5zbGF0aW9ucyksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogeyBbZnJvbTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10uZm9yRWFjaChwID0+IHRyYW5zbGF0aW9uc1twXSA9IHRoaXMuY29uZmlnLnRlc3RNb2RlID8gIGBbVGVzdCB0cmFuc2xhdGlvbiBmb3IgJHtwfV1gIDogcCk7XG4gICAgICAgICAgcmV0dXJuIG9mKHRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSh0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICBjb25zdCB0b0FkZDogVHJhbnNsYXRpb25bXSA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgdG9BZGQucHVzaChUcmFuc2xhdGlvbi5jcmVhdGUocCwgbGFuZywgdHJhbnNsYXRpb25zW3BdLCBEYXRlVGltZS5ub3coKS5wbHVzKHRoaXMuY29uZmlnLnZhbGlkaXR5KS50b0lTTygpKSk7XG4gICAgICAgICAgdGhpcy5waHJhc2VzW3BdLm5leHQodHJhbnNsYXRpb25zW3BdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRiLnRyYW5zbGF0aW9ucy5idWxrQWRkKHRvQWRkKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uIS51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPaEUsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFzQmhDLFlBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXRCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUFpRCxFQUFFLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO1FBQzFELGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBbUJwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RELElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxD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LFdBQVcsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUM7SUFDbkUsQ0FBQztJQUVPLG9CQUFvQjs7UUFDMUIsT0FBTyxNQUFBLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQywwQ0FBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQWlCLENBQUM7SUFDMUksQ0FBQztDQUNGLENBQUE7O1lBcEdtQixvQkFBb0I7WUFDdEIsVUFBVTs7QUF4QmYscUJBQXFCO0lBRGpDLFVBQVUsRUFBRTtHQUNBLHFCQUFxQixDQTJIakM7U0EzSFkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGxpdmVRdWVyeSB9IGZyb20gJ2RleGllJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBkYiwgVHJhbnNsYXRpb24gfSBmcm9tICcuL2RiJztcbmltcG9ydCB7IFJweExhbmd1YWdlIH0gZnJvbSAnLi9ycHgtbGFuZ3VhZ2UuZW51bSc7XG5pbXBvcnQgeyBScHhUcmFuc2xhdGlvbkNvbmZpZyB9IGZyb20gJy4vcnB4LXRyYW5zbGF0aW9uLmNvbmZpZyc7XG5cbmludGVyZmFjZSBUcmFuc2xhdGlvbnNEVE8ge1xuICB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIGN1cnJlbnRMYW5ndWFnZTogUnB4TGFuZ3VhZ2UgPSAnZW4nO1xuICBwcml2YXRlIGxhbmd1YWdlS2V5ID0gJ2V4dWktcHJlZmVycmVkLWxhbmd1YWdlJztcblxuICBwcml2YXRlIHBocmFzZXM6IHsgW3BocmFzZTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz59ID0ge307XG4gIHByaXZhdGUgb2JzZXJ2YWJsZXM6IHsgW3BocmFzZTogc3RyaW5nXTogT2JzZXJ2YWJsZTxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3Rpbmc6IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0VGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgcHVibGljIHNldCBsYW5ndWFnZShsYW5nOiBScHhMYW5ndWFnZSkge1xuICAgIGlmIChsYW5nICE9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucGhyYXNlcykuZm9yRWFjaChwaHJhc2UgPT4gdGhpcy50cmFuc2xhdGUocGhyYXNlKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZSgpOiBScHhMYW5ndWFnZSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmd1YWdlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWc6IFJweFRyYW5zbGF0aW9uQ29uZmlnLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICApIHtcbiAgICBjb25zdCBwZXJzaXN0ZWRMYW5ndWFnZSA9IHRoaXMuZ2V0UGVyc2lzdGVkTGFuZ3VhZ2UoKTtcbiAgICBpZiAocGVyc2lzdGVkTGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMubGFuZ3VhZ2UgPSBwZXJzaXN0ZWRMYW5ndWFnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm8gbGFuZ3VhZ2UgcGVyc2lzdGVkIHlldCwgc2F2ZSBkZWZhdWx0XG4gICAgICB0aGlzLnBlcnNpc3RMYW5ndWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMub2JzZXJ2YWJsZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUocGhyYXNlKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2xhdGUocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmd1YWdlO1xuICAgIGlmICghdGhpcy5waHJhc2VzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHBocmFzZSk7XG4gICAgICB0aGlzLm9ic2VydmFibGVzW3BocmFzZV0gPSB0aGlzLnBocmFzZXNbcGhyYXNlXS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChwaHJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tKGxpdmVRdWVyeSgoKSA9PiBkYi50cmFuc2xhdGlvbnMud2hlcmUoJ1twaHJhc2UrbGFuZ10nKS5lcXVhbHMoW3BocmFzZSwgbGFuZ10pLmZpcnN0KCkpKS5waXBlKFxuICAgICAgICB0YXAodCA9PiB7XG4gICAgICAgICAgaWYgKHQgJiYgIXQuaXNFeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQodC50cmFuc2xhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICAgIC8vIGV4cGlyZWQsIGNsZWFuIHVwIERCXG4gICAgICAgICAgICAgIGRiLnRyYW5zbGF0aW9ucy5kZWxldGUodC5pZCEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChgJHtwaHJhc2V9IFtUcmFuc2xhdGlvbiBpbiBwcm9ncmVzc11gKTtcbiAgICAgICAgICAgIHRoaXMubG9hZChwaHJhc2UsIGxhbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkKHBocmFzZTogc3RyaW5nLCBsYW5nOiBScHhMYW5ndWFnZSk6IHZvaWQge1xuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHBocmFzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RpbmcuaGFzT3duUHJvcGVydHkobGFuZykpIHtcbiAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlcXVlc3RpbmdbbGFuZ10uaW5kZXhPZihwaHJhc2UpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5wdXNoKHBocmFzZSk7XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcih0aGlzLmNvbmZpZy5kZWJvdW5jZVRpbWVNcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgKyBgLyR7bGFuZ31gO1xuICAgICAgY29uc3QgcyA9IHRoaXMuaHR0cC5wb3N0PFRyYW5zbGF0aW9uc0RUTz4odXJsLCB7IHBocmFzZXM6IHRoaXMucmVxdWVzdGluZ1tsYW5nXSB9KS5waXBlKFxuICAgICAgICBtYXAodCA9PiB0LnRyYW5zbGF0aW9ucyksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogeyBbZnJvbTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10uZm9yRWFjaChwID0+IHRyYW5zbGF0aW9uc1twXSA9IHRoaXMuY29uZmlnLnRlc3RNb2RlID8gIGBbVGVzdCB0cmFuc2xhdGlvbiBmb3IgJHtwfV1gIDogcCk7XG4gICAgICAgICAgcmV0dXJuIG9mKHRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSh0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICBjb25zdCB0b0FkZDogVHJhbnNsYXRpb25bXSA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgdG9BZGQucHVzaChUcmFuc2xhdGlvbi5jcmVhdGUocCwgbGFuZywgdHJhbnNsYXRpb25zW3BdLCBEYXRlVGltZS5ub3coKS5wbHVzKHRoaXMuY29uZmlnLnZhbGlkaXR5KS50b0lTTygpKSk7XG4gICAgICAgICAgdGhpcy5waHJhc2VzW3BdLm5leHQodHJhbnNsYXRpb25zW3BdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRiLnRyYW5zbGF0aW9ucy5idWxrQWRkKHRvQWRkKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uIS51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0TGFuZ3VhZ2UoKTogdm9pZCB7XG4gICAgZG9jdW1lbnQuY29va2llID0gYCR7dGhpcy5sYW5ndWFnZUtleX09JHt0aGlzLmN1cnJlbnRMYW5ndWFnZX07YDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVyc2lzdGVkTGFuZ3VhZ2UoKTogUnB4TGFuZ3VhZ2Uge1xuICAgIHJldHVybiBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKS5maW5kKGNvb2tpZSA9PiBjb29raWUudHJpbSgpLnN0YXJ0c1dpdGgodGhpcy5sYW5ndWFnZUtleSArICc9JykpPy5zcGxpdCgnPScpWzFdLnRyaW0oKSBhcyBScHhMYW5ndWFnZTtcbiAgfVxufVxuIl19
|
|
@@ -12,9 +12,18 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
12
12
|
this.config = config;
|
|
13
13
|
this.http = http;
|
|
14
14
|
this.currentLanguage = 'en';
|
|
15
|
+
this.languageKey = 'exui-preferred-language';
|
|
15
16
|
this.phrases = {};
|
|
16
17
|
this.observables = {};
|
|
17
18
|
this.requesting = {};
|
|
19
|
+
var persistedLanguage = this.getPersistedLanguage();
|
|
20
|
+
if (persistedLanguage) {
|
|
21
|
+
this.language = persistedLanguage;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
// no language persisted yet, save default
|
|
25
|
+
this.persistLanguage();
|
|
26
|
+
}
|
|
18
27
|
}
|
|
19
28
|
Object.defineProperty(RpxTranslationService.prototype, "language", {
|
|
20
29
|
get: function () {
|
|
@@ -24,6 +33,7 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
24
33
|
var _this = this;
|
|
25
34
|
if (lang !== this.currentLanguage) {
|
|
26
35
|
this.currentLanguage = lang;
|
|
36
|
+
this.persistLanguage();
|
|
27
37
|
Object.keys(this.phrases).forEach(function (phrase) { return _this.translate(phrase); });
|
|
28
38
|
}
|
|
29
39
|
},
|
|
@@ -99,6 +109,14 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
99
109
|
});
|
|
100
110
|
});
|
|
101
111
|
};
|
|
112
|
+
RpxTranslationService.prototype.persistLanguage = function () {
|
|
113
|
+
document.cookie = this.languageKey + "=" + this.currentLanguage + ";";
|
|
114
|
+
};
|
|
115
|
+
RpxTranslationService.prototype.getPersistedLanguage = function () {
|
|
116
|
+
var _this = this;
|
|
117
|
+
var _a;
|
|
118
|
+
return (_a = document.cookie.split(';').find(function (cookie) { return cookie.trim().startsWith(_this.languageKey + '='); })) === null || _a === void 0 ? void 0 : _a.split('=')[1].trim();
|
|
119
|
+
};
|
|
102
120
|
RpxTranslationService.ctorParameters = function () { return [
|
|
103
121
|
{ type: RpxTranslationConfig },
|
|
104
122
|
{ type: HttpClient }
|
|
@@ -109,4 +127,4 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
109
127
|
return RpxTranslationService;
|
|
110
128
|
}());
|
|
111
129
|
export { RpxTranslationService };
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPaEU7SUFvQkUsK0JBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXBCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBRXBDLFlBQU8sR0FBaUQsRUFBRSxDQUFDO1FBQzNELGdCQUFXLEdBQTRDLEVBQUUsQ0FBQztRQUMxRCxlQUFVLEdBQWlDLEVBQUUsQ0FBQztJQWlCbEQsQ0FBQztJQWRMLHNCQUFXLDJDQUFRO2FBT25CO1lBQ0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlCLENBQUM7YUFURCxVQUFvQixJQUFpQjtZQUFyQyxpQkFLQztZQUpDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7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QU0sS0FBSyxHQUFrQixFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQztvQkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVHLEtBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQztnQkFDSCxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLEtBQUksQ0FBQyx3QkFBeUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0MsS0FBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztnQkFDckMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztnQkFuRmlCLG9CQUFvQjtnQkFDdEIsVUFBVTs7SUF0QmYscUJBQXFCO1FBRGpDLFVBQVUsRUFBRTtPQUNBLHFCQUFxQixDQXlHakM7SUFBRCw0QkFBQztDQUFBLEFBekdELElBeUdDO1NBekdZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICdkZXhpZSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGIsIFRyYW5zbGF0aW9uIH0gZnJvbSAnLi9kYic7XG5pbXBvcnQgeyBScHhMYW5ndWFnZSB9IGZyb20gJy4vcnB4LWxhbmd1YWdlLmVudW0nO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25Db25maWcgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5jb25maWcnO1xuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25zRFRPIHtcbiAgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJweFRyYW5zbGF0aW9uU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2U6IFJweExhbmd1YWdlID0gJ2VuJztcblxuICBwcml2YXRlIHBocmFzZXM6IHsgW3BocmFzZTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz59ID0ge307XG4gIHByaXZhdGUgb2JzZXJ2YWJsZXM6IHsgW3BocmFzZTogc3RyaW5nXTogT2JzZXJ2YWJsZTxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3Rpbmc6IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0VGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgcHVibGljIHNldCBsYW5ndWFnZShsYW5nOiBScHhMYW5ndWFnZSkge1xuICAgIGlmIChsYW5nICE9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5waHJhc2VzKS5mb3JFYWNoKHBocmFzZSA9PiB0aGlzLnRyYW5zbGF0ZShwaHJhc2UpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZ3VhZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogUnB4VHJhbnNsYXRpb25Db25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkgeyB9XG5cbiAgcHVibGljIGdldFRyYW5zbGF0aW9uKHBocmFzZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5vYnNlcnZhYmxlcy5oYXNPd25Qcm9wZXJ0eShwaHJhc2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZShwaHJhc2UpO1xuICB9XG5cbiAgcHVibGljIHRyYW5zbGF0ZShwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMubGFuZ3VhZ2U7XG4gICAgaWYgKCF0aGlzLnBocmFzZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ocGhyYXNlKTtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXSA9IHRoaXMucGhyYXNlc1twaHJhc2VdLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHBocmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb20obGl2ZVF1ZXJ5KCgpID0+IGRiLnRyYW5zbGF0aW9ucy53aGVyZSgnW3BocmFzZStsYW5nXScpLmVxdWFscyhbcGhyYXNlLCBsYW5nXSkuZmlyc3QoKSkpLnBpcGUoXG4gICAgICAgIHRhcCh0ID0+IHtcbiAgICAgICAgICBpZiAodCAmJiAhdC5pc0V4cGlyZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dCh0LnRyYW5zbGF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgICAgLy8gZXhwaXJlZCwgY2xlYW4gdXAgREJcbiAgICAgICAgICAgICAgZGIudHJhbnNsYXRpb25zLmRlbGV0ZSh0LmlkISk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KGAke3BocmFzZX0gW1RyYW5zbGF0aW9uIGluIHByb2dyZXNzXWApO1xuICAgICAgICAgICAgdGhpcy5sb2FkKHBocmFzZSwgbGFuZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gIH1cblxuICBwcml2YXRlIGxvYWQocGhyYXNlOiBzdHJpbmcsIGxhbmc6IFJweExhbmd1YWdlKTogdm9pZCB7XG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQocGhyYXNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVxdWVzdGluZy5oYXNPd25Qcm9wZXJ0eShsYW5nKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdGluZ1tsYW5nXS5pbmRleE9mKHBocmFzZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLnB1c2gocGhyYXNlKTtcblxuICAgIGlmICh0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuY29uZmlnLmRlYm91bmNlVGltZU1zKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYmFzZVVybCArIGAvJHtsYW5nfWA7XG4gICAgICBjb25zdCBzID0gdGhpcy5odHRwLnBvc3Q8VHJhbnNsYXRpb25zRFRPPih1cmwsIHsgcGhyYXNlczogdGhpcy5yZXF1ZXN0aW5nW2xhbmddIH0pLnBpcGUoXG4gICAgICAgIG1hcCh0ID0+IHQudHJhbnNsYXRpb25zKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5mb3JFYWNoKHAgPT4gdHJhbnNsYXRpb25zW3BdID0gdGhpcy5jb25maWcudGVzdE1vZGUgPyAgYFtUZXN0IHRyYW5zbGF0aW9uIGZvciAke3B9XWAgOiBwKTtcbiAgICAgICAgICByZXR1cm4gb2YodHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKHRyYW5zbGF0aW9ucyA9PiB7XG4gICAgICAgIGNvbnN0IHRvQWRkOiBUcmFuc2xhdGlvbltdID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICB0b0FkZC5wdXNoKFRyYW5zbGF0aW9uLmNyZWF0ZShwLCBsYW5nLCB0cmFuc2xhdGlvbnNbcF0sIERhdGVUaW1lLm5vdygpLnBsdXModGhpcy5jb25maWcudmFsaWRpdHkpLnRvSVNPKCkpKTtcbiAgICAgICAgICB0aGlzLnBocmFzZXNbcF0ubmV4dCh0cmFuc2xhdGlvbnNbcF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGIudHJhbnNsYXRpb25zLmJ1bGtBZGQodG9BZGQpO1xuICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24hLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPaEU7SUFzQkUsK0JBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXRCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUFpRCxFQUFFLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO1FBQzFELGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBbUJwRCxJQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RELElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztTQUNu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LFFBQVEsQ0FBQyxNQUFNLEdBQU0sSUFBSSxDQUFDLFdBQVcsU0FBSSxJQUFJLENBQUMsZUFBZSxNQUFHLENBQUM7SUFDbkUsQ0FBQztJQUVPLG9EQUFvQixHQUE1QjtRQUFBLGlCQUVDOztRQURDLE9BQU8sTUFBQSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLEVBQWhELENBQWdELENBQUMsMENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFpQixDQUFDO0lBQzFJLENBQUM7O2dCQW5HaUIsb0JBQW9CO2dCQUN0QixVQUFVOztJQXhCZixxQkFBcUI7UUFEakMsVUFBVSxFQUFFO09BQ0EscUJBQXFCLENBMkhqQztJQUFELDRCQUFDO0NBQUEsQUEzSEQsSUEySEM7U0EzSFkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGxpdmVRdWVyeSB9IGZyb20gJ2RleGllJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBkYiwgVHJhbnNsYXRpb24gfSBmcm9tICcuL2RiJztcbmltcG9ydCB7IFJweExhbmd1YWdlIH0gZnJvbSAnLi9ycHgtbGFuZ3VhZ2UuZW51bSc7XG5pbXBvcnQgeyBScHhUcmFuc2xhdGlvbkNvbmZpZyB9IGZyb20gJy4vcnB4LXRyYW5zbGF0aW9uLmNvbmZpZyc7XG5cbmludGVyZmFjZSBUcmFuc2xhdGlvbnNEVE8ge1xuICB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIGN1cnJlbnRMYW5ndWFnZTogUnB4TGFuZ3VhZ2UgPSAnZW4nO1xuICBwcml2YXRlIGxhbmd1YWdlS2V5ID0gJ2V4dWktcHJlZmVycmVkLWxhbmd1YWdlJztcblxuICBwcml2YXRlIHBocmFzZXM6IHsgW3BocmFzZTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz59ID0ge307XG4gIHByaXZhdGUgb2JzZXJ2YWJsZXM6IHsgW3BocmFzZTogc3RyaW5nXTogT2JzZXJ2YWJsZTxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3Rpbmc6IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0VGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgcHVibGljIHNldCBsYW5ndWFnZShsYW5nOiBScHhMYW5ndWFnZSkge1xuICAgIGlmIChsYW5nICE9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucGhyYXNlcykuZm9yRWFjaChwaHJhc2UgPT4gdGhpcy50cmFuc2xhdGUocGhyYXNlKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZSgpOiBScHhMYW5ndWFnZSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmd1YWdlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWc6IFJweFRyYW5zbGF0aW9uQ29uZmlnLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICApIHtcbiAgICBjb25zdCBwZXJzaXN0ZWRMYW5ndWFnZSA9IHRoaXMuZ2V0UGVyc2lzdGVkTGFuZ3VhZ2UoKTtcbiAgICBpZiAocGVyc2lzdGVkTGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMubGFuZ3VhZ2UgPSBwZXJzaXN0ZWRMYW5ndWFnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm8gbGFuZ3VhZ2UgcGVyc2lzdGVkIHlldCwgc2F2ZSBkZWZhdWx0XG4gICAgICB0aGlzLnBlcnNpc3RMYW5ndWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMub2JzZXJ2YWJsZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUocGhyYXNlKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2xhdGUocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmd1YWdlO1xuICAgIGlmICghdGhpcy5waHJhc2VzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHBocmFzZSk7XG4gICAgICB0aGlzLm9ic2VydmFibGVzW3BocmFzZV0gPSB0aGlzLnBocmFzZXNbcGhyYXNlXS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChwaHJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tKGxpdmVRdWVyeSgoKSA9PiBkYi50cmFuc2xhdGlvbnMud2hlcmUoJ1twaHJhc2UrbGFuZ10nKS5lcXVhbHMoW3BocmFzZSwgbGFuZ10pLmZpcnN0KCkpKS5waXBlKFxuICAgICAgICB0YXAodCA9PiB7XG4gICAgICAgICAgaWYgKHQgJiYgIXQuaXNFeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQodC50cmFuc2xhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICAgIC8vIGV4cGlyZWQsIGNsZWFuIHVwIERCXG4gICAgICAgICAgICAgIGRiLnRyYW5zbGF0aW9ucy5kZWxldGUodC5pZCEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChgJHtwaHJhc2V9IFtUcmFuc2xhdGlvbiBpbiBwcm9ncmVzc11gKTtcbiAgICAgICAgICAgIHRoaXMubG9hZChwaHJhc2UsIGxhbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkKHBocmFzZTogc3RyaW5nLCBsYW5nOiBScHhMYW5ndWFnZSk6IHZvaWQge1xuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHBocmFzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RpbmcuaGFzT3duUHJvcGVydHkobGFuZykpIHtcbiAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlcXVlc3RpbmdbbGFuZ10uaW5kZXhPZihwaHJhc2UpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5wdXNoKHBocmFzZSk7XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcih0aGlzLmNvbmZpZy5kZWJvdW5jZVRpbWVNcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgKyBgLyR7bGFuZ31gO1xuICAgICAgY29uc3QgcyA9IHRoaXMuaHR0cC5wb3N0PFRyYW5zbGF0aW9uc0RUTz4odXJsLCB7IHBocmFzZXM6IHRoaXMucmVxdWVzdGluZ1tsYW5nXSB9KS5waXBlKFxuICAgICAgICBtYXAodCA9PiB0LnRyYW5zbGF0aW9ucyksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogeyBbZnJvbTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10uZm9yRWFjaChwID0+IHRyYW5zbGF0aW9uc1twXSA9IHRoaXMuY29uZmlnLnRlc3RNb2RlID8gIGBbVGVzdCB0cmFuc2xhdGlvbiBmb3IgJHtwfV1gIDogcCk7XG4gICAgICAgICAgcmV0dXJuIG9mKHRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSh0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICBjb25zdCB0b0FkZDogVHJhbnNsYXRpb25bXSA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgdG9BZGQucHVzaChUcmFuc2xhdGlvbi5jcmVhdGUocCwgbGFuZywgdHJhbnNsYXRpb25zW3BdLCBEYXRlVGltZS5ub3coKS5wbHVzKHRoaXMuY29uZmlnLnZhbGlkaXR5KS50b0lTTygpKSk7XG4gICAgICAgICAgdGhpcy5waHJhc2VzW3BdLm5leHQodHJhbnNsYXRpb25zW3BdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRiLnRyYW5zbGF0aW9ucy5idWxrQWRkKHRvQWRkKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uIS51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0TGFuZ3VhZ2UoKTogdm9pZCB7XG4gICAgZG9jdW1lbnQuY29va2llID0gYCR7dGhpcy5sYW5ndWFnZUtleX09JHt0aGlzLmN1cnJlbnRMYW5ndWFnZX07YDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVyc2lzdGVkTGFuZ3VhZ2UoKTogUnB4TGFuZ3VhZ2Uge1xuICAgIHJldHVybiBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKS5maW5kKGNvb2tpZSA9PiBjb29raWUudHJpbSgpLnN0YXJ0c1dpdGgodGhpcy5sYW5ndWFnZUtleSArICc9JykpPy5zcGxpdCgnPScpWzFdLnRyaW0oKSBhcyBScHhMYW5ndWFnZTtcbiAgfVxufVxuIl19
|
|
@@ -43,13 +43,23 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
43
43
|
this.config = config;
|
|
44
44
|
this.http = http;
|
|
45
45
|
this.currentLanguage = 'en';
|
|
46
|
+
this.languageKey = 'exui-preferred-language';
|
|
46
47
|
this.phrases = {};
|
|
47
48
|
this.observables = {};
|
|
48
49
|
this.requesting = {};
|
|
50
|
+
const persistedLanguage = this.getPersistedLanguage();
|
|
51
|
+
if (persistedLanguage) {
|
|
52
|
+
this.language = persistedLanguage;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// no language persisted yet, save default
|
|
56
|
+
this.persistLanguage();
|
|
57
|
+
}
|
|
49
58
|
}
|
|
50
59
|
set language(lang) {
|
|
51
60
|
if (lang !== this.currentLanguage) {
|
|
52
61
|
this.currentLanguage = lang;
|
|
62
|
+
this.persistLanguage();
|
|
53
63
|
Object.keys(this.phrases).forEach(phrase => this.translate(phrase));
|
|
54
64
|
}
|
|
55
65
|
}
|
|
@@ -123,6 +133,13 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
123
133
|
});
|
|
124
134
|
});
|
|
125
135
|
}
|
|
136
|
+
persistLanguage() {
|
|
137
|
+
document.cookie = `${this.languageKey}=${this.currentLanguage};`;
|
|
138
|
+
}
|
|
139
|
+
getPersistedLanguage() {
|
|
140
|
+
var _a;
|
|
141
|
+
return (_a = document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))) === null || _a === void 0 ? void 0 : _a.split('=')[1].trim();
|
|
142
|
+
}
|
|
126
143
|
};
|
|
127
144
|
RpxTranslationService.ctorParameters = () => [
|
|
128
145
|
{ type: RpxTranslationConfig },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpx-xui-translation.js","sources":["ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts","ng://rpx-xui-translation/public-api.ts","ng://rpx-xui-translation/rpx-xui-translation.ts"],"sourcesContent":["export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) { }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T): T|null {\n if (typeof value === 'string') {\n // lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,\n // but due to overloading the async interface we can't specify that.\n const o = this.translationService.getTranslation(value as unknown as string) as unknown as Observable<T>;\n const ret = super.transform<T>(o);\n return ret;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rpx-xui-translation.js","sources":["ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts","ng://rpx-xui-translation/public-api.ts","ng://rpx-xui-translation/rpx-xui-translation.ts"],"sourcesContent":["export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T): T|null {\n if (typeof value === 'string') {\n // lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,\n // but due to overloading the async interface we can't specify that.\n const o = this.translationService.getTranslation(value as unknown as string) as unknown as Observable<T>;\n const ret = super.transform<T>(o);\n return ret;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -50,9 +50,18 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
50
50
|
this.config = config;
|
|
51
51
|
this.http = http;
|
|
52
52
|
this.currentLanguage = 'en';
|
|
53
|
+
this.languageKey = 'exui-preferred-language';
|
|
53
54
|
this.phrases = {};
|
|
54
55
|
this.observables = {};
|
|
55
56
|
this.requesting = {};
|
|
57
|
+
var persistedLanguage = this.getPersistedLanguage();
|
|
58
|
+
if (persistedLanguage) {
|
|
59
|
+
this.language = persistedLanguage;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// no language persisted yet, save default
|
|
63
|
+
this.persistLanguage();
|
|
64
|
+
}
|
|
56
65
|
}
|
|
57
66
|
Object.defineProperty(RpxTranslationService.prototype, "language", {
|
|
58
67
|
get: function () {
|
|
@@ -62,6 +71,7 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
62
71
|
var _this = this;
|
|
63
72
|
if (lang !== this.currentLanguage) {
|
|
64
73
|
this.currentLanguage = lang;
|
|
74
|
+
this.persistLanguage();
|
|
65
75
|
Object.keys(this.phrases).forEach(function (phrase) { return _this.translate(phrase); });
|
|
66
76
|
}
|
|
67
77
|
},
|
|
@@ -137,6 +147,14 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
137
147
|
});
|
|
138
148
|
});
|
|
139
149
|
};
|
|
150
|
+
RpxTranslationService.prototype.persistLanguage = function () {
|
|
151
|
+
document.cookie = this.languageKey + "=" + this.currentLanguage + ";";
|
|
152
|
+
};
|
|
153
|
+
RpxTranslationService.prototype.getPersistedLanguage = function () {
|
|
154
|
+
var _this = this;
|
|
155
|
+
var _a;
|
|
156
|
+
return (_a = document.cookie.split(';').find(function (cookie) { return cookie.trim().startsWith(_this.languageKey + '='); })) === null || _a === void 0 ? void 0 : _a.split('=')[1].trim();
|
|
157
|
+
};
|
|
140
158
|
RpxTranslationService.ctorParameters = function () { return [
|
|
141
159
|
{ type: RpxTranslationConfig },
|
|
142
160
|
{ type: HttpClient }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpx-xui-translation.js","sources":["ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts","ng://rpx-xui-translation/public-api.ts","ng://rpx-xui-translation/rpx-xui-translation.ts"],"sourcesContent":["export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) { }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T): T|null {\n if (typeof value === 'string') {\n // lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,\n // but due to overloading the async interface we can't specify that.\n const o = this.translationService.getTranslation(value as unknown as string) as unknown as Observable<T>;\n const ret = super.transform<T>(o);\n return ret;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rpx-xui-translation.js","sources":["ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts","ng://rpx-xui-translation/public-api.ts","ng://rpx-xui-translation/rpx-xui-translation.ts"],"sourcesContent":["export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T): T|null {\n if (typeof value === 'string') {\n // lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,\n // but due to overloading the async interface we can't specify that.\n const o = this.translationService.getTranslation(value as unknown as string) as unknown as Observable<T>;\n const ret = super.transform<T>(o);\n return ret;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export declare class RpxTranslationService {
|
|
|
6
6
|
private config;
|
|
7
7
|
private http;
|
|
8
8
|
private currentLanguage;
|
|
9
|
+
private languageKey;
|
|
9
10
|
private phrases;
|
|
10
11
|
private observables;
|
|
11
12
|
private requesting;
|
|
@@ -16,4 +17,6 @@ export declare class RpxTranslationService {
|
|
|
16
17
|
getTranslation(phrase: string): Observable<string>;
|
|
17
18
|
translate(phrase: string): Observable<string>;
|
|
18
19
|
private load;
|
|
20
|
+
private persistLanguage;
|
|
21
|
+
private getPersistedLanguage;
|
|
19
22
|
}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"RpxLanguage":{"__symbolic":"interface"},"ValidityDurationSpec":{"__symbolic":"interface"},"RpxTranslationConfig":{"__symbolic":"class","members":{}},"RpxTranslationService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":14,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"RpxTranslationConfig"},{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"RpxLanguage":{"__symbolic":"interface"},"ValidityDurationSpec":{"__symbolic":"interface"},"RpxTranslationConfig":{"__symbolic":"class","members":{}},"RpxTranslationService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":14,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"RpxTranslationConfig"},{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":39,"character":18}]}],"getTranslation":[{"__symbolic":"method"}],"translate":[{"__symbolic":"method"}],"load":[{"__symbolic":"method"}],"persistLanguage":[{"__symbolic":"method"}],"getPersistedLanguage":[{"__symbolic":"method"}]}},"RpxTranslatePipe":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@angular/common","name":"AsyncPipe","line":9,"character":38},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Pipe","line":5,"character":1},"arguments":[{"name":"rpxTranslate","pure":false}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"RpxTranslationService"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":13,"character":9}]}],"transform":[{"__symbolic":"method"},{"__symbolic":"method"},{"__symbolic":"method"},{"__symbolic":"method"},{"__symbolic":"method"}]}},"RpxTranslationModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":6,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"RpxTranslatePipe"}],"imports":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClientModule","line":8,"character":12}],"exports":[{"__symbolic":"reference","name":"RpxTranslatePipe"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"RpxTranslationModule"},"providers":[{"provide":{"__symbolic":"reference","name":"RpxTranslationConfig"},"useValue":{"__symbolic":"reference","name":"config"}},{"__symbolic":"reference","name":"RpxTranslationService"}]}},"forChild":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"RpxTranslationModule"}}}}}},"origins":{"RpxLanguage":"./lib/rpx-language.enum","ValidityDurationSpec":"./lib/rpx-translation.config","RpxTranslationConfig":"./lib/rpx-translation.config","RpxTranslationService":"./lib/rpx-translation.service","RpxTranslatePipe":"./lib/rpx-translate.pipe","RpxTranslationModule":"./lib/rpx-translation.module"},"importAs":"rpx-xui-translation"}
|