rpx-xui-translation 0.1.1 → 0.1.3
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 +28 -1
- 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-translate.pipe.js +2 -2
- package/esm2015/lib/rpx-translation.service.js +28 -1
- package/esm5/lib/rpx-translate.pipe.js +2 -2
- package/esm5/lib/rpx-translation.service.js +28 -1
- package/fesm2015/rpx-xui-translation.js +28 -1
- package/fesm2015/rpx-xui-translation.js.map +1 -1
- package/fesm5/rpx-xui-translation.js +28 -1
- package/fesm5/rpx-xui-translation.js.map +1 -1
- package/lib/rpx-translation.service.d.ts +4 -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,12 +289,19 @@
|
|
|
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
|
},
|
|
286
296
|
enumerable: true,
|
|
287
297
|
configurable: true
|
|
288
298
|
});
|
|
299
|
+
RpxTranslationService.prototype.getTranslation = function (phrase) {
|
|
300
|
+
if (this.observables.hasOwnProperty(phrase)) {
|
|
301
|
+
return this.observables[phrase];
|
|
302
|
+
}
|
|
303
|
+
return this.translate(phrase);
|
|
304
|
+
};
|
|
289
305
|
RpxTranslationService.prototype.translate = function (phrase) {
|
|
290
306
|
var _this = this;
|
|
291
307
|
var lang = this.language;
|
|
@@ -349,6 +365,17 @@
|
|
|
349
365
|
});
|
|
350
366
|
});
|
|
351
367
|
};
|
|
368
|
+
RpxTranslationService.prototype.persistLanguage = function () {
|
|
369
|
+
try {
|
|
370
|
+
window.sessionStorage.setItem(this.languageKey, this.currentLanguage);
|
|
371
|
+
}
|
|
372
|
+
catch (e) {
|
|
373
|
+
// swallow exception as sessionStorage is unavailable
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
RpxTranslationService.prototype.getPersistedLanguage = function () {
|
|
377
|
+
return window.sessionStorage.getItem(this.languageKey);
|
|
378
|
+
};
|
|
352
379
|
RpxTranslationService.ctorParameters = function () { return [
|
|
353
380
|
{ type: RpxTranslationConfig },
|
|
354
381
|
{ type: http.HttpClient }
|
|
@@ -370,7 +397,7 @@
|
|
|
370
397
|
if (typeof value === 'string') {
|
|
371
398
|
// lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,
|
|
372
399
|
// but due to overloading the async interface we can't specify that.
|
|
373
|
-
var o = this.translationService.
|
|
400
|
+
var o = this.translationService.getTranslation(value);
|
|
374
401
|
var ret = _super.prototype.transform.call(this, o);
|
|
375
402
|
return ret;
|
|
376
403
|
}
|
|
@@ -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 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.translate(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":";;;;;;;;IAAA;IACA;AACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,IAAI,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE;IACnC,IAAI,aAAa,GAAG,MAAM,CAAC,cAAc;IACzC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IACpF,QAAQ,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,IAAI,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC;AACF;IACO,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;IAChC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,IAAI,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;IAC3C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;AACD;IACO,IAAI,QAAQ,GAAG,WAAW;IACjC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,EAAE;IACrD,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IAC7D,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7B,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,SAAS;IACT,QAAQ,OAAO,CAAC,CAAC;IACjB,MAAK;IACL,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,EAAC;AACD;IACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACf,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACvF,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU;IACvE,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAChF,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,SAAS;IACT,IAAI,OAAO,CAAC,CAAC;IACb,CAAC;AACD;IACO,SAAS,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC1D,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACjI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACnI,SAAS,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACtJ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;AACD;IACO,SAAS,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE;IAC/C,IAAI,OAAO,UAAU,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE;IACzE,CAAC;AACD;IACO,SAAS,UAAU,CAAC,WAAW,EAAE,aAAa,EAAE;IACvD,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACnI,CAAC;AACD;IACO,SAAS,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;IAC7D,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;IAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;IACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;IACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;IACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,CAAC;IACP,CAAC;AACD;IACO,SAAS,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;IAC3C,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrH,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7J,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACtE,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE;IACtB,QAAQ,IAAI,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACtE,QAAQ,OAAO,CAAC,EAAE,IAAI;IACtB,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzK,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzB,gBAAgB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM;IAC9C,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxE,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IACjE,gBAAgB,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;IACjE,gBAAgB;IAChB,oBAAoB,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE;IAChI,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;IAC1G,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACzF,oBAAoB,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;IACvF,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC1C,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;IAC3C,aAAa;IACb,YAAY,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;IAClE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzF,KAAK;IACL,CAAC;AACD;IACO,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;IAC7C,IAAI,IAAI,EAAE,KAAK,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACD;IACO,SAAS,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE;IACzC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;AACD;IACO,SAAS,QAAQ,CAAC,CAAC,EAAE;IAC5B,IAAI,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAClF,IAAI,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,OAAO;IAClD,QAAQ,IAAI,EAAE,YAAY;IAC1B,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IAC/C,YAAY,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACpD,SAAS;IACT,KAAK,CAAC;IACN,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,yBAAyB,GAAG,iCAAiC,CAAC,CAAC;IAC3F,CAAC;AACD;IACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IAC7B,IAAI,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,IAAI;IACR,QAAQ,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnF,KAAK;IACL,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3C,YAAY;IACZ,QAAQ,IAAI;IACZ,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,SAAS;IACT,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE;IACzC,KAAK;IACL,IAAI,OAAO,EAAE,CAAC;IACd,CAAC;AACD;IACO,SAAS,QAAQ,GAAG;IAC3B,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE;IACtD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;IACd,CAAC;AACD;IACO,SAAS,cAAc,GAAG;IACjC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACxF,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;IACpD,QAAQ,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;IACzE,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;AACF;IACO,SAAS,OAAO,CAAC,CAAC,EAAE;IAC3B,IAAI,OAAO,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;AACD;IACO,SAAS,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE;IACjE,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC3F,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IAClE,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1H,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IAC9I,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;IACtF,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;IAC5H,IAAI,SAAS,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE;IACtD,IAAI,SAAS,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE;IACtD,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IACtF,CAAC;AACD;IACO,SAAS,gBAAgB,CAAC,CAAC,EAAE;IACpC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChJ,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;IACnJ,CAAC;AACD;IACO,SAAS,aAAa,CAAC,CAAC,EAAE;IACjC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC3F,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACrN,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IACpK,IAAI,SAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE;IAChI,CAAC;AACD;IACO,SAAS,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE;IAClD,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;IACnH,IAAI,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AACF;IACO,SAAS,YAAY,CAAC,GAAG,EAAE;IAClC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC;IAC1C,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC;IACpB,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,IAAI,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;IACzB,IAAI,OAAO,MAAM,CAAC;IAClB,CAAC;AACD;IACO,SAAS,eAAe,CAAC,GAAG,EAAE;IACrC,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC5D,CAAC;AACD;IACO,SAAS,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC7D,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;IACnC,QAAQ,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAC9E,KAAK;IACL,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;AACD;IACO,SAAS,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE;IACpE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;IACnC,QAAQ,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAC9E,KAAK;IACL,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpC,IAAI,OAAO,KAAK,CAAC;IACjB;;;QC7MA;YAII,mBAAc,GAAG,GAAG,CAAC;YACrB,aAAQ,GAAG,KAAK,CAAC;SACpB;QAAD,2BAAC;IAAD,CAAC;;ICdD;QAAA;SAmBC;QAZiB,kBAAM,GAApB,UAAqB,MAAc,EAAE,IAAiB,EAAE,WAAmB,EAAE,QAAgB;YACzF,IAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;YAClB,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;YACd,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC;YAC5B,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACtB,OAAO,CAAC,CAAC;SACZ;QAED,+BAAS,GAAT;YACI,OAAOA,cAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAGA,cAAQ,CAAC,GAAG,EAAE,CAAC;SAC3D;QACL,kBAAC;IAAD,CAAC,IAAA;IAED;QAAmC,iCAAK;QAGpC;YAAA,YACI,kBAAM,iBAAiB,CAAC,SAK3B;YAJG,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACnB,YAAY,EAAE,qBAAqB;aACtC,CAAC,CAAC;YACH,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;;SAC7C;QACL,oBAAC;IAAD,CAVA,CAAmCC,cAAK,GAUvC;IAEM,IAAM,EAAE,GAAG,IAAI,aAAa,EAAE;;;QCFnC,+BACU,MAA4B,EAC5B,IAAgB;YADhB,WAAM,GAAN,MAAM,CAAsB;YAC5B,SAAI,GAAJ,IAAI,CAAY;YApBlB,oBAAe,GAAgB,IAAI,CAAC;YAEpC,YAAO,GAAiD,EAAE,CAAC;YAC3D,gBAAW,GAA4C,EAAE,CAAC;YAC1D,eAAU,GAAiC,EAAE,CAAC;SAiBjD;QAdL,sBAAW,2CAAQ;iBAOnB;gBACE,OAAO,IAAI,CAAC,eAAe,CAAC;aAC7B;iBATD,UAAoB,IAAiB;gBAArC,iBAKC;gBAJC,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE;oBACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;iBACrE;aACF;;;WAAA;QAWM,yCAAS,GAAhB,UAAiB,MAAc;YAA/B,iBA2BC;YA1BC,IAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;gBACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAIC,oBAAe,CAAS,MAAM,CAAC,CAAC;gBAC3D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;aAChE;YAED,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACnC;iBAAM;gBACLC,SAAI,CAACC,eAAS,CAAC,cAAM,OAAA,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAA,CAAC,CAAC,CAAC,IAAI,CAC/FC,aAAG,CAAC,UAAA,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE;wBACvB,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;qBAC1C;yBAAM;wBACL,IAAI,CAAC,EAAE;;4BAEL,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC;yBAC/B;wBACD,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAI,MAAM,+BAA4B,CAAC,CAAC;wBACjE,KAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBACzB;iBACF,CAAC,CACH,CAAC,SAAS,CAAC,eAAQ,CAAC,CAAC;aACvB;YAED,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SACjC;QAEO,oCAAI,GAAZ,UAAa,MAAc,EAAE,IAAiB;YAA9C,iBA0CC;YAzCC,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClC,OAAO;aACR;YAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;aAC5B;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;gBAChD,OAAO;aACR;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,wBAAwB,EAAE;gBACjC,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC;aAC7C;YAED,IAAI,CAAC,wBAAwB,GAAGC,UAAK,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;gBAC1E,IAAM,GAAG,GAAG,KAAI,CAAC,MAAM,CAAC,OAAO,IAAG,MAAI,IAAM,CAAA,CAAC;gBAC7C,IAAM,CAAC,GAAG,KAAI,CAAC,IAAI,CAAC,IAAI,CAAkB,GAAG,EAAE,EAAE,OAAO,EAAE,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CACrFC,aAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,YAAY,GAAA,CAAC,EACxBC,oBAAU,CAAC;oBACT,IAAM,YAAY,GAA+B,EAAE,CAAC;oBACpD,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,YAAY,CAAC,CAAC,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,QAAQ,GAAI,2BAAyB,CAAC,MAAG,GAAG,CAAC,GAAA,CAAC,CAAC;oBAChH,OAAOC,OAAE,CAAC,YAAY,CAAC,CAAC;iBACzB,CAAC,CACH,CAAC,SAAS,CAAC,UAAA,YAAY;oBACtB,IAAM,KAAK,GAAkB,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;wBACjC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAET,cAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC5G,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;qBACvC,CAAC,CAAC;oBACH,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC/B,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC3B,KAAI,CAAC,wBAAyB,CAAC,WAAW,EAAE,CAAC;oBAC7C,KAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;oBACrC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACjB,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;;oBA3EiB,oBAAoB;oBACtBU,eAAU;;QAtBf,qBAAqB;YADjCC,eAAU,EAAE;WACA,qBAAqB,CAiGjC;QAAD,4BAAC;KAjGD;;;QCNsC,oCAAS;QAE7C,0BACU,kBAAyC,EACjD,GAAsB;YAFxB,YAIE,kBAAM,GAAG,CAAC,SACX;YAJS,wBAAkB,GAAlB,kBAAkB,CAAuB;;SAIlD;QAMD,oCAAS,GAAT,UAAsB,KAAQ;YAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;;gBAG7B,IAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAA0B,CAA6B,CAAC;gBACpG,IAAM,GAAG,GAAG,iBAAM,SAAS,YAAI,CAAC,CAAC,CAAC;gBAClC,OAAO,GAAG,CAAC;aACZ;YACD,OAAO,IAAI,CAAC;SACb;;oBAnB6B,qBAAqB;oBAC5CC,sBAAiB;;QAJb,gBAAgB;YAJ5BC,SAAI,CAAC;gBACJ,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,KAAK;aACZ,CAAC;WACW,gBAAgB,CAwB5B;QAAD,uBAAC;KAAA,CAxBqCC,gBAAS;;;QCE/C;SAmBC;iCAnBY,oBAAoB;QAEjB,4BAAO,GAArB,UAAsB,MAA4B;YAChD,OAAO;gBACL,QAAQ,EAAE,sBAAoB;gBAC9B,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM;qBAChD;oBACD,qBAAqB;iBACtB;aACF,CAAC;SACH;QAEa,6BAAQ,GAAtB;YACE,OAAO;gBACL,QAAQ,EAAE,sBAAoB;aAC/B,CAAC;SACH;;QAlBU,oBAAoB;YALhCC,aAAQ,CAAC;gBACR,YAAY,EAAE,CAAC,gBAAgB,CAAC;gBAChC,OAAO,EAAE,CAACC,qBAAgB,CAAC;gBAC3B,OAAO,EAAE,CAAC,gBAAgB,CAAC;aAC5B,CAAC;WACW,oBAAoB,CAmBhC;QAAD,2BAAC;KAnBD;;;;;;;;;;;;;;;"}
|
|
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 try {\n window.sessionStorage.setItem(this.languageKey, this.currentLanguage);\n } catch (e) {\n // swallow exception as sessionStorage is unavailable\n }\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return window.sessionStorage.getItem(this.languageKey) 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(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,o,
|
|
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(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,
|
|
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(){try{window.sessionStorage.setItem(this.languageKey,this.currentLanguage)}catch(e){}},e.prototype.getPersistedLanguage=function(){return window.sessionStorage.getItem(this.languageKey)},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","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 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.translate(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","window","sessionStorage","setItem","e","getItem","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 try {\n window.sessionStorage.setItem(this.languageKey, this.currentLanguage);\n } catch (e) {\n // swallow exception as sessionStorage is unavailable\n }\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return window.sessionStorage.getItem(this.languageKey) 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"]}
|
|
@@ -11,7 +11,7 @@ let RpxTranslatePipe = class RpxTranslatePipe extends AsyncPipe {
|
|
|
11
11
|
if (typeof value === 'string') {
|
|
12
12
|
// lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,
|
|
13
13
|
// but due to overloading the async interface we can't specify that.
|
|
14
|
-
const o = this.translationService.
|
|
14
|
+
const o = this.translationService.getTranslation(value);
|
|
15
15
|
const ret = super.transform(o);
|
|
16
16
|
return ret;
|
|
17
17
|
}
|
|
@@ -29,4 +29,4 @@ RpxTranslatePipe = __decorate([
|
|
|
29
29
|
})
|
|
30
30
|
], RpxTranslatePipe);
|
|
31
31
|
export { RpxTranslatePipe };
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vcnB4LXh1aS10cmFuc2xhdGlvbi8iLCJzb3VyY2VzIjpbImxpYi9ycHgtdHJhbnNsYXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU1sRSxJQUFhLGdCQUFnQixHQUE3QixNQUFhLGdCQUFpQixTQUFRLFNBQVM7SUFFN0MsWUFDVSxrQkFBeUMsRUFDakQsR0FBc0I7UUFFdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSEgsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtJQUluRCxDQUFDO0lBTUQsU0FBUyxDQUFhLEtBQVE7UUFDNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsaUlBQWlJO1lBQ2pJLG9FQUFvRTtZQUNwRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQTBCLENBQTZCLENBQUM7WUFDekcsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBSSxDQUFDLENBQUMsQ0FBQztZQUNsQyxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBRUYsQ0FBQTs7WUFyQitCLHFCQUFxQjtZQUM1QyxpQkFBaUI7O0FBSmIsZ0JBQWdCO0lBSjVCLElBQUksQ0FBQztRQUNKLElBQUksRUFBRSxjQUFjO1FBQ3BCLElBQUksRUFBRSxLQUFLO0tBQ1osQ0FBQztHQUNXLGdCQUFnQixDQXdCNUI7U0F4QlksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpYmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vcnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdycHhUcmFuc2xhdGUnLFxuICBwdXJlOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBScHhUcmFuc2xhdGVQaXBlIGV4dGVuZHMgQXN5bmNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSAge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBScHhUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcihyZWYpO1xuICB9XG5cbiAgdHJhbnNmb3JtPFQ+KG9iajogT2JzZXJ2YWJsZTxUPnxTdWJzY3JpYmFibGU8VD58UHJvbWlzZTxUPik6IFR8bnVsbDtcbiAgdHJhbnNmb3JtPFQ+KG9iajogbnVsbHx1bmRlZmluZWQpOiBudWxsO1xuICB0cmFuc2Zvcm08VD4ob2JqOiBPYnNlcnZhYmxlPFQ+fFN1YnNjcmliYWJsZTxUPnxQcm9taXNlPFQ+fG51bGx8dW5kZWZpbmVkKTogVHxudWxsO1xuICB0cmFuc2Zvcm08VCA9IHN0cmluZz4odmFsdWU6IFQpOiBUfG51bGw7XG4gIHRyYW5zZm9ybTxUID0gc3RyaW5nPih2YWx1ZTogVCk6IFR8bnVsbCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGxvdCBvZiBjYXN0aW5nIG5lZWRlZCB0byBtb3ZlIGZyb20gdGhlIGludGVyZmFjZSBwcm92aWRlZCBieSBhc3luYyB0byB0aGUgaW50ZXJmYWNlIHdlIG5lZWQuIFdlIGtub3cgdmFsdWUgaXMgYWx3YXlzIGEgc3RyaW5nLFxuICAgICAgLy8gYnV0IGR1ZSB0byBvdmVybG9hZGluZyB0aGUgYXN5bmMgaW50ZXJmYWNlIHdlIGNhbid0IHNwZWNpZnkgdGhhdC5cbiAgICAgIGNvbnN0IG8gPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRUcmFuc2xhdGlvbih2YWx1ZSBhcyB1bmtub3duIGFzIHN0cmluZykgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPFQ+O1xuICAgICAgY29uc3QgcmV0ID0gc3VwZXIudHJhbnNmb3JtPFQ+KG8pO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxufVxuIl19
|
|
@@ -12,19 +12,35 @@ 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
|
}
|
|
25
35
|
get language() {
|
|
26
36
|
return this.currentLanguage;
|
|
27
37
|
}
|
|
38
|
+
getTranslation(phrase) {
|
|
39
|
+
if (this.observables.hasOwnProperty(phrase)) {
|
|
40
|
+
return this.observables[phrase];
|
|
41
|
+
}
|
|
42
|
+
return this.translate(phrase);
|
|
43
|
+
}
|
|
28
44
|
translate(phrase) {
|
|
29
45
|
const lang = this.language;
|
|
30
46
|
if (!this.phrases.hasOwnProperty(phrase)) {
|
|
@@ -86,6 +102,17 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
86
102
|
});
|
|
87
103
|
});
|
|
88
104
|
}
|
|
105
|
+
persistLanguage() {
|
|
106
|
+
try {
|
|
107
|
+
window.sessionStorage.setItem(this.languageKey, this.currentLanguage);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
// swallow exception as sessionStorage is unavailable
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
getPersistedLanguage() {
|
|
114
|
+
return window.sessionStorage.getItem(this.languageKey);
|
|
115
|
+
}
|
|
89
116
|
};
|
|
90
117
|
RpxTranslationService.ctorParameters = () => [
|
|
91
118
|
{ type: RpxTranslationConfig },
|
|
@@ -95,4 +122,4 @@ RpxTranslationService = __decorate([
|
|
|
95
122
|
Injectable()
|
|
96
123
|
], RpxTranslationService);
|
|
97
124
|
export { RpxTranslationService };
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPaEUsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFvQmhDLFlBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXBCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBRXBDLFlBQU8sR0FBaUQsRUFBRSxDQUFDO1FBQzNELGdCQUFXLEdBQTRDLEVBQUUsQ0FBQztRQUMxRCxlQUFVLEdBQWlDLEVBQUUsQ0FBQztJQWlCbEQsQ0FBQztJQWRMLElBQVcsUUFBUSxDQUFDLElBQWlCO1FBQ25DLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7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QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUNILEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHdCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBOztZQTVFbUIsb0JBQW9CO1lBQ3RCLFVBQVU7O0FBdEJmLHFCQUFxQjtJQURqQyxVQUFVLEVBQUU7R0FDQSxxQkFBcUIsQ0FpR2pDO1NBakdZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICdkZXhpZSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGIsIFRyYW5zbGF0aW9uIH0gZnJvbSAnLi9kYic7XG5pbXBvcnQgeyBScHhMYW5ndWFnZSB9IGZyb20gJy4vcnB4LWxhbmd1YWdlLmVudW0nO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25Db25maWcgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5jb25maWcnO1xuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25zRFRPIHtcbiAgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJweFRyYW5zbGF0aW9uU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2U6IFJweExhbmd1YWdlID0gJ2VuJztcblxuICBwcml2YXRlIHBocmFzZXM6IHsgW3BocmFzZTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz59ID0ge307XG4gIHByaXZhdGUgb2JzZXJ2YWJsZXM6IHsgW3BocmFzZTogc3RyaW5nXTogT2JzZXJ2YWJsZTxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3Rpbmc6IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0VGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgcHVibGljIHNldCBsYW5ndWFnZShsYW5nOiBScHhMYW5ndWFnZSkge1xuICAgIGlmIChsYW5nICE9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5waHJhc2VzKS5mb3JFYWNoKHBocmFzZSA9PiB0aGlzLnRyYW5zbGF0ZShwaHJhc2UpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZ3VhZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogUnB4VHJhbnNsYXRpb25Db25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkgeyB9XG5cbiAgcHVibGljIHRyYW5zbGF0ZShwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMubGFuZ3VhZ2U7XG4gICAgaWYgKCF0aGlzLnBocmFzZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ocGhyYXNlKTtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXSA9IHRoaXMucGhyYXNlc1twaHJhc2VdLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHBocmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb20obGl2ZVF1ZXJ5KCgpID0+IGRiLnRyYW5zbGF0aW9ucy53aGVyZSgnW3BocmFzZStsYW5nXScpLmVxdWFscyhbcGhyYXNlLCBsYW5nXSkuZmlyc3QoKSkpLnBpcGUoXG4gICAgICAgIHRhcCh0ID0+IHtcbiAgICAgICAgICBpZiAodCAmJiAhdC5pc0V4cGlyZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dCh0LnRyYW5zbGF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgICAgLy8gZXhwaXJlZCwgY2xlYW4gdXAgREJcbiAgICAgICAgICAgICAgZGIudHJhbnNsYXRpb25zLmRlbGV0ZSh0LmlkISk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KGAke3BocmFzZX0gW1RyYW5zbGF0aW9uIGluIHByb2dyZXNzXWApO1xuICAgICAgICAgICAgdGhpcy5sb2FkKHBocmFzZSwgbGFuZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gIH1cblxuICBwcml2YXRlIGxvYWQocGhyYXNlOiBzdHJpbmcsIGxhbmc6IFJweExhbmd1YWdlKTogdm9pZCB7XG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQocGhyYXNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVxdWVzdGluZy5oYXNPd25Qcm9wZXJ0eShsYW5nKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdGluZ1tsYW5nXS5pbmRleE9mKHBocmFzZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLnB1c2gocGhyYXNlKTtcblxuICAgIGlmICh0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuY29uZmlnLmRlYm91bmNlVGltZU1zKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYmFzZVVybCArIGAvJHtsYW5nfWA7XG4gICAgICBjb25zdCBzID0gdGhpcy5odHRwLnBvc3Q8VHJhbnNsYXRpb25zRFRPPih1cmwsIHsgcGhyYXNlczogdGhpcy5yZXF1ZXN0aW5nW2xhbmddIH0pLnBpcGUoXG4gICAgICAgIG1hcCh0ID0+IHQudHJhbnNsYXRpb25zKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5mb3JFYWNoKHAgPT4gdHJhbnNsYXRpb25zW3BdID0gdGhpcy5jb25maWcudGVzdE1vZGUgPyAgYFtUZXN0IHRyYW5zbGF0aW9uIGZvciAke3B9XWAgOiBwKTtcbiAgICAgICAgICByZXR1cm4gb2YodHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKHRyYW5zbGF0aW9ucyA9PiB7XG4gICAgICAgIGNvbnN0IHRvQWRkOiBUcmFuc2xhdGlvbltdID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICB0b0FkZC5wdXNoKFRyYW5zbGF0aW9uLmNyZWF0ZShwLCBsYW5nLCB0cmFuc2xhdGlvbnNbcF0sIERhdGVUaW1lLm5vdygpLnBsdXModGhpcy5jb25maWcudmFsaWRpdHkpLnRvSVNPKCkpKTtcbiAgICAgICAgICB0aGlzLnBocmFzZXNbcF0ubmV4dCh0cmFuc2xhdGlvbnNbcF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGIudHJhbnNsYXRpb25zLmJ1bGtBZGQodG9BZGQpO1xuICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24hLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPaEUsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFzQmhDLFlBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXRCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUFpRCxFQUFFLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO1FBQzFELGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBbUJwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RELElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxD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LENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDdkU7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLHFEQUFxRDtTQUN0RDtJQUNILENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFnQixDQUFDO0lBQ3hFLENBQUM7Q0FDRixDQUFBOztZQXhHbUIsb0JBQW9CO1lBQ3RCLFVBQVU7O0FBeEJmLHFCQUFxQjtJQURqQyxVQUFVLEVBQUU7R0FDQSxxQkFBcUIsQ0ErSGpDO1NBL0hZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICdkZXhpZSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGIsIFRyYW5zbGF0aW9uIH0gZnJvbSAnLi9kYic7XG5pbXBvcnQgeyBScHhMYW5ndWFnZSB9IGZyb20gJy4vcnB4LWxhbmd1YWdlLmVudW0nO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25Db25maWcgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5jb25maWcnO1xuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25zRFRPIHtcbiAgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJweFRyYW5zbGF0aW9uU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2U6IFJweExhbmd1YWdlID0gJ2VuJztcbiAgcHJpdmF0ZSBsYW5ndWFnZUtleSA9ICdleHVpLXByZWZlcnJlZC1sYW5ndWFnZSc7XG5cbiAgcHJpdmF0ZSBwaHJhc2VzOiB7IFtwaHJhc2U6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIG9ic2VydmFibGVzOiB7IFtwaHJhc2U6IHN0cmluZ106IE9ic2VydmFibGU8c3RyaW5nPn0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0aW5nOiB7IFtsYW5nOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gIHB1YmxpYyBzZXQgbGFuZ3VhZ2UobGFuZzogUnB4TGFuZ3VhZ2UpIHtcbiAgICBpZiAobGFuZyAhPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gbGFuZztcbiAgICAgIHRoaXMucGVyc2lzdExhbmd1YWdlKCk7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnBocmFzZXMpLmZvckVhY2gocGhyYXNlID0+IHRoaXMudHJhbnNsYXRlKHBocmFzZSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2UoKTogUnB4TGFuZ3VhZ2Uge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnOiBScHhUcmFuc2xhdGlvbkNvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgY29uc3QgcGVyc2lzdGVkTGFuZ3VhZ2UgPSB0aGlzLmdldFBlcnNpc3RlZExhbmd1YWdlKCk7XG4gICAgaWYgKHBlcnNpc3RlZExhbmd1YWdlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlID0gcGVyc2lzdGVkTGFuZ3VhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vIGxhbmd1YWdlIHBlcnNpc3RlZCB5ZXQsIHNhdmUgZGVmYXVsdFxuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24ocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLm9ic2VydmFibGVzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKHBocmFzZSk7XG4gIH1cblxuICBwdWJsaWMgdHJhbnNsYXRlKHBocmFzZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5ndWFnZTtcbiAgICBpZiAoIXRoaXMucGhyYXNlcy5oYXNPd25Qcm9wZXJ0eShwaHJhc2UpKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihwaHJhc2UpO1xuICAgICAgdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdID0gdGhpcy5waHJhc2VzW3BocmFzZV0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQocGhyYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbShsaXZlUXVlcnkoKCkgPT4gZGIudHJhbnNsYXRpb25zLndoZXJlKCdbcGhyYXNlK2xhbmddJykuZXF1YWxzKFtwaHJhc2UsIGxhbmddKS5maXJzdCgpKSkucGlwZShcbiAgICAgICAgdGFwKHQgPT4ge1xuICAgICAgICAgIGlmICh0ICYmICF0LmlzRXhwaXJlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHQudHJhbnNsYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAvLyBleHBpcmVkLCBjbGVhbiB1cCBEQlxuICAgICAgICAgICAgICBkYi50cmFuc2xhdGlvbnMuZGVsZXRlKHQuaWQhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQoYCR7cGhyYXNlfSBbVHJhbnNsYXRpb24gaW4gcHJvZ3Jlc3NdYCk7XG4gICAgICAgICAgICB0aGlzLmxvYWQocGhyYXNlLCBsYW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZChwaHJhc2U6IHN0cmluZywgbGFuZzogUnB4TGFuZ3VhZ2UpOiB2b2lkIHtcbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChwaHJhc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5yZXF1ZXN0aW5nLmhhc093blByb3BlcnR5KGxhbmcpKSB7XG4gICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0aW5nW2xhbmddLmluZGV4T2YocGhyYXNlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10ucHVzaChwaHJhc2UpO1xuXG4gICAgaWYgKHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5jb25maWcuZGVib3VuY2VUaW1lTXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5iYXNlVXJsICsgYC8ke2xhbmd9YDtcbiAgICAgIGNvbnN0IHMgPSB0aGlzLmh0dHAucG9zdDxUcmFuc2xhdGlvbnNEVE8+KHVybCwgeyBwaHJhc2VzOiB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gfSkucGlwZShcbiAgICAgICAgbWFwKHQgPT4gdC50cmFuc2xhdGlvbnMpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLmZvckVhY2gocCA9PiB0cmFuc2xhdGlvbnNbcF0gPSB0aGlzLmNvbmZpZy50ZXN0TW9kZSA/ICBgW1Rlc3QgdHJhbnNsYXRpb24gZm9yICR7cH1dYCA6IHApO1xuICAgICAgICAgIHJldHVybiBvZih0cmFuc2xhdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUodHJhbnNsYXRpb25zID0+IHtcbiAgICAgICAgY29uc3QgdG9BZGQ6IFRyYW5zbGF0aW9uW10gPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIHRvQWRkLnB1c2goVHJhbnNsYXRpb24uY3JlYXRlKHAsIGxhbmcsIHRyYW5zbGF0aW9uc1twXSwgRGF0ZVRpbWUubm93KCkucGx1cyh0aGlzLmNvbmZpZy52YWxpZGl0eSkudG9JU08oKSkpO1xuICAgICAgICAgIHRoaXMucGhyYXNlc1twXS5uZXh0KHRyYW5zbGF0aW9uc1twXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkYi50cmFuc2xhdGlvbnMuYnVsa0FkZCh0b0FkZCk7XG4gICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdExhbmd1YWdlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxhbmd1YWdlS2V5LCB0aGlzLmN1cnJlbnRMYW5ndWFnZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc3dhbGxvdyBleGNlcHRpb24gYXMgc2Vzc2lvblN0b3JhZ2UgaXMgdW5hdmFpbGFibGVcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBlcnNpc3RlZExhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5sYW5ndWFnZUtleSkgYXMgUnB4TGFuZ3VhZ2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -13,7 +13,7 @@ var RpxTranslatePipe = /** @class */ (function (_super) {
|
|
|
13
13
|
if (typeof value === 'string') {
|
|
14
14
|
// lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,
|
|
15
15
|
// but due to overloading the async interface we can't specify that.
|
|
16
|
-
var o = this.translationService.
|
|
16
|
+
var o = this.translationService.getTranslation(value);
|
|
17
17
|
var ret = _super.prototype.transform.call(this, o);
|
|
18
18
|
return ret;
|
|
19
19
|
}
|
|
@@ -32,4 +32,4 @@ var RpxTranslatePipe = /** @class */ (function (_super) {
|
|
|
32
32
|
return RpxTranslatePipe;
|
|
33
33
|
}(AsyncPipe));
|
|
34
34
|
export { RpxTranslatePipe };
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vcnB4LXh1aS10cmFuc2xhdGlvbi8iLCJzb3VyY2VzIjpbImxpYi9ycHgtdHJhbnNsYXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU1sRTtJQUFzQyxvQ0FBUztJQUU3QywwQkFDVSxrQkFBeUMsRUFDakQsR0FBc0I7UUFGeEIsWUFJRSxrQkFBTSxHQUFHLENBQUMsU0FDWDtRQUpTLHdCQUFrQixHQUFsQixrQkFBa0IsQ0FBdUI7O0lBSW5ELENBQUM7SUFNRCxvQ0FBUyxHQUFULFVBQXNCLEtBQVE7UUFDNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsaUlBQWlJO1lBQ2pJLG9FQUFvRTtZQUNwRSxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQTBCLENBQTZCLENBQUM7WUFDekcsSUFBTSxHQUFHLEdBQUcsaUJBQU0sU0FBUyxZQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O2dCQW5CNkIscUJBQXFCO2dCQUM1QyxpQkFBaUI7O0lBSmIsZ0JBQWdCO1FBSjVCLElBQUksQ0FBQztZQUNKLElBQUksRUFBRSxjQUFjO1lBQ3BCLElBQUksRUFBRSxLQUFLO1NBQ1osQ0FBQztPQUNXLGdCQUFnQixDQXdCNUI7SUFBRCx1QkFBQztDQUFBLEFBeEJELENBQXNDLFNBQVMsR0F3QjlDO1NBeEJZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaWJhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBScHhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuQFBpcGUoe1xuICBuYW1lOiAncnB4VHJhbnNsYXRlJyxcbiAgcHVyZTogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRlUGlwZSBleHRlbmRzIEFzeW5jUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0gIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogUnB4VHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIocmVmKTtcbiAgfVxuXG4gIHRyYW5zZm9ybTxUPihvYmo6IE9ic2VydmFibGU8VD58U3Vic2NyaWJhYmxlPFQ+fFByb21pc2U8VD4pOiBUfG51bGw7XG4gIHRyYW5zZm9ybTxUPihvYmo6IG51bGx8dW5kZWZpbmVkKTogbnVsbDtcbiAgdHJhbnNmb3JtPFQ+KG9iajogT2JzZXJ2YWJsZTxUPnxTdWJzY3JpYmFibGU8VD58UHJvbWlzZTxUPnxudWxsfHVuZGVmaW5lZCk6IFR8bnVsbDtcbiAgdHJhbnNmb3JtPFQgPSBzdHJpbmc+KHZhbHVlOiBUKTogVHxudWxsO1xuICB0cmFuc2Zvcm08VCA9IHN0cmluZz4odmFsdWU6IFQpOiBUfG51bGwge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBsb3Qgb2YgY2FzdGluZyBuZWVkZWQgdG8gbW92ZSBmcm9tIHRoZSBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgYXN5bmMgdG8gdGhlIGludGVyZmFjZSB3ZSBuZWVkLiBXZSBrbm93IHZhbHVlIGlzIGFsd2F5cyBhIHN0cmluZyxcbiAgICAgIC8vIGJ1dCBkdWUgdG8gb3ZlcmxvYWRpbmcgdGhlIGFzeW5jIGludGVyZmFjZSB3ZSBjYW4ndCBzcGVjaWZ5IHRoYXQuXG4gICAgICBjb25zdCBvID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuZ2V0VHJhbnNsYXRpb24odmFsdWUgYXMgdW5rbm93biBhcyBzdHJpbmcpIGFzIHVua25vd24gYXMgT2JzZXJ2YWJsZTxUPjtcbiAgICAgIGNvbnN0IHJldCA9IHN1cGVyLnRyYW5zZm9ybTxUPihvKTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -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,12 +33,19 @@ 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
|
},
|
|
30
40
|
enumerable: true,
|
|
31
41
|
configurable: true
|
|
32
42
|
});
|
|
43
|
+
RpxTranslationService.prototype.getTranslation = function (phrase) {
|
|
44
|
+
if (this.observables.hasOwnProperty(phrase)) {
|
|
45
|
+
return this.observables[phrase];
|
|
46
|
+
}
|
|
47
|
+
return this.translate(phrase);
|
|
48
|
+
};
|
|
33
49
|
RpxTranslationService.prototype.translate = function (phrase) {
|
|
34
50
|
var _this = this;
|
|
35
51
|
var lang = this.language;
|
|
@@ -93,6 +109,17 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
93
109
|
});
|
|
94
110
|
});
|
|
95
111
|
};
|
|
112
|
+
RpxTranslationService.prototype.persistLanguage = function () {
|
|
113
|
+
try {
|
|
114
|
+
window.sessionStorage.setItem(this.languageKey, this.currentLanguage);
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
// swallow exception as sessionStorage is unavailable
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
RpxTranslationService.prototype.getPersistedLanguage = function () {
|
|
121
|
+
return window.sessionStorage.getItem(this.languageKey);
|
|
122
|
+
};
|
|
96
123
|
RpxTranslationService.ctorParameters = function () { return [
|
|
97
124
|
{ type: RpxTranslationConfig },
|
|
98
125
|
{ type: HttpClient }
|
|
@@ -103,4 +130,4 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
103
130
|
return RpxTranslationService;
|
|
104
131
|
}());
|
|
105
132
|
export { RpxTranslationService };
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPaEU7SUFvQkUsK0JBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXBCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBRXBDLFlBQU8sR0FBaUQsRUFBRSxDQUFDO1FBQzNELGdCQUFXLEdBQTRDLEVBQUUsQ0FBQztRQUMxRCxlQUFVLEdBQWlDLEVBQUUsQ0FBQztJQWlCbEQsQ0FBQztJQWRMLHNCQUFXLDJDQUFRO2FBT25CO1lBQ0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlCLENBQUM7YUFURCxVQUFvQixJQUFpQjtZQUFyQyxpQkFLQztZQUpDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxLQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUF0QixDQUFzQixDQUFDLENBQUM7YUFDckU7UUFDSCxDQUFDOzs7T0FBQTtJQVdNLHlDQUFTLEdBQWhCLFVBQWlCLE1BQWM7UUFBL0IsaUJBMkJDO1FBMUJDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxlQUFlLENBQVMsTUFBTSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQU0sT0FBQSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBckUsQ0FBcUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRixHQUFHLENBQUMsVUFBQSxDQUFDO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUN2QixLQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzFDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxFQUFFO3dCQUNMLHVCQUF1Qjt3QkFDdkIsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDO3FCQUMvQjtvQkFDRCxLQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBSSxNQUFNLCtCQUE0QixDQUFDLENBQUM7b0JBQ2pFLEtBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxDQUFDLGNBQU8sQ0FBQyxDQUFDLENBQUM7U0FDdkI7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLG9DQUFJLEdBQVosVUFBYSxNQUFjLEVBQUUsSUFBaUI7UUFBOUMsaUJBMENDO1FBekNDLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5DLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM3QztRQUVELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDMUUsSUFBTSxHQUFHLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUcsTUFBSSxJQUFNLENBQUEsQ0FBQztZQUM3QyxJQUFNLENBQUMsR0FBRyxLQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBa0IsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDckYsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFlBQVksRUFBZCxDQUFjLENBQUMsRUFDeEIsVUFBVSxDQUFDO2dCQUNULElBQU0sWUFBWSxHQUErQixFQUFFLENBQUM7Z0JBQ3BELEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSwyQkFBeUIsQ0FBQyxNQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBM0UsQ0FBMkUsQ0FBQyxDQUFDO2dCQUNoSCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxVQUFBLFlBQVk7Z0JBQ3RCLElBQU0sS0FBSyxHQUFrQixFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQztvQkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVHLEtBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQztnQkFDSCxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLEtBQUksQ0FBQyx3QkFBeUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0MsS0FBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztnQkFDckMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztnQkEzRWlCLG9CQUFvQjtnQkFDdEIsVUFBVTs7SUF0QmYscUJBQXFCO1FBRGpDLFVBQVUsRUFBRTtPQUNBLHFCQUFxQixDQWlHakM7SUFBRCw0QkFBQztDQUFBLEFBakdELElBaUdDO1NBakdZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICdkZXhpZSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGIsIFRyYW5zbGF0aW9uIH0gZnJvbSAnLi9kYic7XG5pbXBvcnQgeyBScHhMYW5ndWFnZSB9IGZyb20gJy4vcnB4LWxhbmd1YWdlLmVudW0nO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25Db25maWcgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5jb25maWcnO1xuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25zRFRPIHtcbiAgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJweFRyYW5zbGF0aW9uU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2U6IFJweExhbmd1YWdlID0gJ2VuJztcblxuICBwcml2YXRlIHBocmFzZXM6IHsgW3BocmFzZTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz59ID0ge307XG4gIHByaXZhdGUgb2JzZXJ2YWJsZXM6IHsgW3BocmFzZTogc3RyaW5nXTogT2JzZXJ2YWJsZTxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3Rpbmc6IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0VGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgcHVibGljIHNldCBsYW5ndWFnZShsYW5nOiBScHhMYW5ndWFnZSkge1xuICAgIGlmIChsYW5nICE9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5waHJhc2VzKS5mb3JFYWNoKHBocmFzZSA9PiB0aGlzLnRyYW5zbGF0ZShwaHJhc2UpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZ3VhZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogUnB4VHJhbnNsYXRpb25Db25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkgeyB9XG5cbiAgcHVibGljIHRyYW5zbGF0ZShwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMubGFuZ3VhZ2U7XG4gICAgaWYgKCF0aGlzLnBocmFzZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ocGhyYXNlKTtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXSA9IHRoaXMucGhyYXNlc1twaHJhc2VdLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHBocmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb20obGl2ZVF1ZXJ5KCgpID0+IGRiLnRyYW5zbGF0aW9ucy53aGVyZSgnW3BocmFzZStsYW5nXScpLmVxdWFscyhbcGhyYXNlLCBsYW5nXSkuZmlyc3QoKSkpLnBpcGUoXG4gICAgICAgIHRhcCh0ID0+IHtcbiAgICAgICAgICBpZiAodCAmJiAhdC5pc0V4cGlyZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dCh0LnRyYW5zbGF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgICAgLy8gZXhwaXJlZCwgY2xlYW4gdXAgREJcbiAgICAgICAgICAgICAgZGIudHJhbnNsYXRpb25zLmRlbGV0ZSh0LmlkISk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KGAke3BocmFzZX0gW1RyYW5zbGF0aW9uIGluIHByb2dyZXNzXWApO1xuICAgICAgICAgICAgdGhpcy5sb2FkKHBocmFzZSwgbGFuZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gIH1cblxuICBwcml2YXRlIGxvYWQocGhyYXNlOiBzdHJpbmcsIGxhbmc6IFJweExhbmd1YWdlKTogdm9pZCB7XG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQocGhyYXNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVxdWVzdGluZy5oYXNPd25Qcm9wZXJ0eShsYW5nKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdGluZ1tsYW5nXS5pbmRleE9mKHBocmFzZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLnB1c2gocGhyYXNlKTtcblxuICAgIGlmICh0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuY29uZmlnLmRlYm91bmNlVGltZU1zKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYmFzZVVybCArIGAvJHtsYW5nfWA7XG4gICAgICBjb25zdCBzID0gdGhpcy5odHRwLnBvc3Q8VHJhbnNsYXRpb25zRFRPPih1cmwsIHsgcGhyYXNlczogdGhpcy5yZXF1ZXN0aW5nW2xhbmddIH0pLnBpcGUoXG4gICAgICAgIG1hcCh0ID0+IHQudHJhbnNsYXRpb25zKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5mb3JFYWNoKHAgPT4gdHJhbnNsYXRpb25zW3BdID0gdGhpcy5jb25maWcudGVzdE1vZGUgPyAgYFtUZXN0IHRyYW5zbGF0aW9uIGZvciAke3B9XWAgOiBwKTtcbiAgICAgICAgICByZXR1cm4gb2YodHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKHRyYW5zbGF0aW9ucyA9PiB7XG4gICAgICAgIGNvbnN0IHRvQWRkOiBUcmFuc2xhdGlvbltdID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICB0b0FkZC5wdXNoKFRyYW5zbGF0aW9uLmNyZWF0ZShwLCBsYW5nLCB0cmFuc2xhdGlvbnNbcF0sIERhdGVUaW1lLm5vdygpLnBsdXModGhpcy5jb25maWcudmFsaWRpdHkpLnRvSVNPKCkpKTtcbiAgICAgICAgICB0aGlzLnBocmFzZXNbcF0ubmV4dCh0cmFuc2xhdGlvbnNbcF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGIudHJhbnNsYXRpb25zLmJ1bGtBZGQodG9BZGQpO1xuICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24hLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFPaEU7SUFzQkUsK0JBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXRCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUFpRCxFQUFFLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO1FBQzFELGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBbUJwRCxJQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RELElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztTQUNu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LElBQUk7WUFDRixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN2RTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YscURBQXFEO1NBQ3REO0lBQ0gsQ0FBQztJQUVPLG9EQUFvQixHQUE1QjtRQUNFLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBZ0IsQ0FBQztJQUN4RSxDQUFDOztnQkF2R2lCLG9CQUFvQjtnQkFDdEIsVUFBVTs7SUF4QmYscUJBQXFCO1FBRGpDLFVBQVUsRUFBRTtPQUNBLHFCQUFxQixDQStIakM7SUFBRCw0QkFBQztDQUFBLEFBL0hELElBK0hDO1NBL0hZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICdkZXhpZSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGIsIFRyYW5zbGF0aW9uIH0gZnJvbSAnLi9kYic7XG5pbXBvcnQgeyBScHhMYW5ndWFnZSB9IGZyb20gJy4vcnB4LWxhbmd1YWdlLmVudW0nO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25Db25maWcgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5jb25maWcnO1xuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25zRFRPIHtcbiAgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJweFRyYW5zbGF0aW9uU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2U6IFJweExhbmd1YWdlID0gJ2VuJztcbiAgcHJpdmF0ZSBsYW5ndWFnZUtleSA9ICdleHVpLXByZWZlcnJlZC1sYW5ndWFnZSc7XG5cbiAgcHJpdmF0ZSBwaHJhc2VzOiB7IFtwaHJhc2U6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIG9ic2VydmFibGVzOiB7IFtwaHJhc2U6IHN0cmluZ106IE9ic2VydmFibGU8c3RyaW5nPn0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0aW5nOiB7IFtsYW5nOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gIHB1YmxpYyBzZXQgbGFuZ3VhZ2UobGFuZzogUnB4TGFuZ3VhZ2UpIHtcbiAgICBpZiAobGFuZyAhPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gbGFuZztcbiAgICAgIHRoaXMucGVyc2lzdExhbmd1YWdlKCk7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnBocmFzZXMpLmZvckVhY2gocGhyYXNlID0+IHRoaXMudHJhbnNsYXRlKHBocmFzZSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2UoKTogUnB4TGFuZ3VhZ2Uge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnOiBScHhUcmFuc2xhdGlvbkNvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgY29uc3QgcGVyc2lzdGVkTGFuZ3VhZ2UgPSB0aGlzLmdldFBlcnNpc3RlZExhbmd1YWdlKCk7XG4gICAgaWYgKHBlcnNpc3RlZExhbmd1YWdlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlID0gcGVyc2lzdGVkTGFuZ3VhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vIGxhbmd1YWdlIHBlcnNpc3RlZCB5ZXQsIHNhdmUgZGVmYXVsdFxuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24ocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLm9ic2VydmFibGVzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKHBocmFzZSk7XG4gIH1cblxuICBwdWJsaWMgdHJhbnNsYXRlKHBocmFzZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5ndWFnZTtcbiAgICBpZiAoIXRoaXMucGhyYXNlcy5oYXNPd25Qcm9wZXJ0eShwaHJhc2UpKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihwaHJhc2UpO1xuICAgICAgdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdID0gdGhpcy5waHJhc2VzW3BocmFzZV0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQocGhyYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbShsaXZlUXVlcnkoKCkgPT4gZGIudHJhbnNsYXRpb25zLndoZXJlKCdbcGhyYXNlK2xhbmddJykuZXF1YWxzKFtwaHJhc2UsIGxhbmddKS5maXJzdCgpKSkucGlwZShcbiAgICAgICAgdGFwKHQgPT4ge1xuICAgICAgICAgIGlmICh0ICYmICF0LmlzRXhwaXJlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHQudHJhbnNsYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAvLyBleHBpcmVkLCBjbGVhbiB1cCBEQlxuICAgICAgICAgICAgICBkYi50cmFuc2xhdGlvbnMuZGVsZXRlKHQuaWQhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQoYCR7cGhyYXNlfSBbVHJhbnNsYXRpb24gaW4gcHJvZ3Jlc3NdYCk7XG4gICAgICAgICAgICB0aGlzLmxvYWQocGhyYXNlLCBsYW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZChwaHJhc2U6IHN0cmluZywgbGFuZzogUnB4TGFuZ3VhZ2UpOiB2b2lkIHtcbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChwaHJhc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5yZXF1ZXN0aW5nLmhhc093blByb3BlcnR5KGxhbmcpKSB7XG4gICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0aW5nW2xhbmddLmluZGV4T2YocGhyYXNlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10ucHVzaChwaHJhc2UpO1xuXG4gICAgaWYgKHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5jb25maWcuZGVib3VuY2VUaW1lTXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5iYXNlVXJsICsgYC8ke2xhbmd9YDtcbiAgICAgIGNvbnN0IHMgPSB0aGlzLmh0dHAucG9zdDxUcmFuc2xhdGlvbnNEVE8+KHVybCwgeyBwaHJhc2VzOiB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gfSkucGlwZShcbiAgICAgICAgbWFwKHQgPT4gdC50cmFuc2xhdGlvbnMpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLmZvckVhY2gocCA9PiB0cmFuc2xhdGlvbnNbcF0gPSB0aGlzLmNvbmZpZy50ZXN0TW9kZSA/ICBgW1Rlc3QgdHJhbnNsYXRpb24gZm9yICR7cH1dYCA6IHApO1xuICAgICAgICAgIHJldHVybiBvZih0cmFuc2xhdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUodHJhbnNsYXRpb25zID0+IHtcbiAgICAgICAgY29uc3QgdG9BZGQ6IFRyYW5zbGF0aW9uW10gPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIHRvQWRkLnB1c2goVHJhbnNsYXRpb24uY3JlYXRlKHAsIGxhbmcsIHRyYW5zbGF0aW9uc1twXSwgRGF0ZVRpbWUubm93KCkucGx1cyh0aGlzLmNvbmZpZy52YWxpZGl0eSkudG9JU08oKSkpO1xuICAgICAgICAgIHRoaXMucGhyYXNlc1twXS5uZXh0KHRyYW5zbGF0aW9uc1twXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkYi50cmFuc2xhdGlvbnMuYnVsa0FkZCh0b0FkZCk7XG4gICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdExhbmd1YWdlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxhbmd1YWdlS2V5LCB0aGlzLmN1cnJlbnRMYW5ndWFnZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc3dhbGxvdyBleGNlcHRpb24gYXMgc2Vzc2lvblN0b3JhZ2UgaXMgdW5hdmFpbGFibGVcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBlcnNpc3RlZExhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5sYW5ndWFnZUtleSkgYXMgUnB4TGFuZ3VhZ2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -43,19 +43,35 @@ 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
|
}
|
|
56
66
|
get language() {
|
|
57
67
|
return this.currentLanguage;
|
|
58
68
|
}
|
|
69
|
+
getTranslation(phrase) {
|
|
70
|
+
if (this.observables.hasOwnProperty(phrase)) {
|
|
71
|
+
return this.observables[phrase];
|
|
72
|
+
}
|
|
73
|
+
return this.translate(phrase);
|
|
74
|
+
}
|
|
59
75
|
translate(phrase) {
|
|
60
76
|
const lang = this.language;
|
|
61
77
|
if (!this.phrases.hasOwnProperty(phrase)) {
|
|
@@ -117,6 +133,17 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
117
133
|
});
|
|
118
134
|
});
|
|
119
135
|
}
|
|
136
|
+
persistLanguage() {
|
|
137
|
+
try {
|
|
138
|
+
window.sessionStorage.setItem(this.languageKey, this.currentLanguage);
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
// swallow exception as sessionStorage is unavailable
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
getPersistedLanguage() {
|
|
145
|
+
return window.sessionStorage.getItem(this.languageKey);
|
|
146
|
+
}
|
|
120
147
|
};
|
|
121
148
|
RpxTranslationService.ctorParameters = () => [
|
|
122
149
|
{ type: RpxTranslationConfig },
|
|
@@ -135,7 +162,7 @@ let RpxTranslatePipe = class RpxTranslatePipe extends AsyncPipe {
|
|
|
135
162
|
if (typeof value === 'string') {
|
|
136
163
|
// lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,
|
|
137
164
|
// but due to overloading the async interface we can't specify that.
|
|
138
|
-
const o = this.translationService.
|
|
165
|
+
const o = this.translationService.getTranslation(value);
|
|
139
166
|
const ret = super.transform(o);
|
|
140
167
|
return ret;
|
|
141
168
|
}
|
|
@@ -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 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.translate(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 try {\n window.sessionStorage.setItem(this.languageKey, this.currentLanguage);\n } catch (e) {\n // swallow exception as sessionStorage is unavailable\n }\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return window.sessionStorage.getItem(this.languageKey) 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,12 +71,19 @@ 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
|
},
|
|
68
78
|
enumerable: true,
|
|
69
79
|
configurable: true
|
|
70
80
|
});
|
|
81
|
+
RpxTranslationService.prototype.getTranslation = function (phrase) {
|
|
82
|
+
if (this.observables.hasOwnProperty(phrase)) {
|
|
83
|
+
return this.observables[phrase];
|
|
84
|
+
}
|
|
85
|
+
return this.translate(phrase);
|
|
86
|
+
};
|
|
71
87
|
RpxTranslationService.prototype.translate = function (phrase) {
|
|
72
88
|
var _this = this;
|
|
73
89
|
var lang = this.language;
|
|
@@ -131,6 +147,17 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
131
147
|
});
|
|
132
148
|
});
|
|
133
149
|
};
|
|
150
|
+
RpxTranslationService.prototype.persistLanguage = function () {
|
|
151
|
+
try {
|
|
152
|
+
window.sessionStorage.setItem(this.languageKey, this.currentLanguage);
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
// swallow exception as sessionStorage is unavailable
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
RpxTranslationService.prototype.getPersistedLanguage = function () {
|
|
159
|
+
return window.sessionStorage.getItem(this.languageKey);
|
|
160
|
+
};
|
|
134
161
|
RpxTranslationService.ctorParameters = function () { return [
|
|
135
162
|
{ type: RpxTranslationConfig },
|
|
136
163
|
{ type: HttpClient }
|
|
@@ -152,7 +179,7 @@ var RpxTranslatePipe = /** @class */ (function (_super) {
|
|
|
152
179
|
if (typeof value === 'string') {
|
|
153
180
|
// lot of casting needed to move from the interface provided by async to the interface we need. We know value is always a string,
|
|
154
181
|
// but due to overloading the async interface we can't specify that.
|
|
155
|
-
var o = this.translationService.
|
|
182
|
+
var o = this.translationService.getTranslation(value);
|
|
156
183
|
var ret = _super.prototype.transform.call(this, o);
|
|
157
184
|
return ret;
|
|
158
185
|
}
|
|
@@ -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 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.translate(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 try {\n window.sessionStorage.setItem(this.languageKey, this.currentLanguage);\n } catch (e) {\n // swallow exception as sessionStorage is unavailable\n }\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return window.sessionStorage.getItem(this.languageKey) 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":";;;;;;;;;;IAYA;QAII,mBAAc,GAAG,GAAG,CAAC;QACrB,aAAQ,GAAG,KAAK,CAAC;KACpB;IAAD,2BAAC;AAAD,CAAC;;ACdD;IAAA;KAmBC;IAZiB,kBAAM,GAApB,UAAqB,MAAc,EAAE,IAAiB,EAAE,WAAmB,EAAE,QAAgB;QACzF,IAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC;QAC5B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;QACd,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5B,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACtB,OAAO,CAAC,CAAC;KACZ;IAED,+BAAS,GAAT;QACI,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;KAC3D;IACL,kBAAC;AAAD,CAAC,IAAA;AAED;IAAmC,iCAAK;IAGpC;QAAA,YACI,kBAAM,iBAAiB,CAAC,SAK3B;QAJG,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACnB,YAAY,EAAE,qBAAqB;SACtC,CAAC,CAAC;QACH,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;;KAC7C;IACL,oBAAC;AAAD,CAVA,CAAmC,KAAK,GAUvC;AAEM,IAAM,EAAE,GAAG,IAAI,aAAa,EAAE;;;ICAnC,+BACU,MAA4B,EAC5B,IAAgB;QADhB,WAAM,GAAN,MAAM,CAAsB;QAC5B,SAAI,GAAJ,IAAI,CAAY;QAtBlB,oBAAe,GAAgB,IAAI,CAAC;QACpC,gBAAW,GAAG,yBAAyB,CAAC;QAExC,YAAO,GAAiD,EAAE,CAAC;QAC3D,gBAAW,GAA4C,EAAE,CAAC;QAC1D,eAAU,GAAiC,EAAE,CAAC;QAmBpD,IAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC;SACnC;aAAM;;YAEL,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;KACF;IAvBD,sBAAW,2CAAQ;aAQnB;YACE,OAAO,IAAI,CAAC,eAAe,CAAC;SAC7B;aAVD,UAAoB,IAAiB;YAArC,iBAMC;YALC,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE;gBACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;aACrE;SACF;;;OAAA;IAmBM,8CAAc,GAArB,UAAsB,MAAc;QAClC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SACjC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC/B;IAEM,yCAAS,GAAhB,UAAiB,MAAc;QAA/B,iBA2BC;QA1BC,IAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,eAAe,CAAS,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;SAChE;QAED,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,cAAM,OAAA,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAA,CAAC,CAAC,CAAC,IAAI,CAC/F,GAAG,CAAC,UAAA,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE;oBACvB,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;iBAC1C;qBAAM;oBACL,IAAI,CAAC,EAAE;;wBAEL,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC;qBAC/B;oBACD,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAI,MAAM,+BAA4B,CAAC,CAAC;oBACjE,KAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;iBACzB;aACF,CAAC,CACH,CAAC,SAAS,CAAC,eAAQ,CAAC,CAAC;SACvB;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KACjC;IAEO,oCAAI,GAAZ,UAAa,MAAc,EAAE,IAAiB;QAA9C,iBA0CC;QAzCC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SAC5B;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;YAChD,OAAO;SACR;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC;SAC7C;QAED,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;YAC1E,IAAM,GAAG,GAAG,KAAI,CAAC,MAAM,CAAC,OAAO,IAAG,MAAI,IAAM,CAAA,CAAC;YAC7C,IAAM,CAAC,GAAG,KAAI,CAAC,IAAI,CAAC,IAAI,CAAkB,GAAG,EAAE,EAAE,OAAO,EAAE,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CACrF,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,YAAY,GAAA,CAAC,EACxB,UAAU,CAAC;gBACT,IAAM,YAAY,GAA+B,EAAE,CAAC;gBACpD,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,YAAY,CAAC,CAAC,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,QAAQ,GAAI,2BAAyB,CAAC,MAAG,GAAG,CAAC,GAAA,CAAC,CAAC;gBAChH,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;aACzB,CAAC,CACH,CAAC,SAAS,CAAC,UAAA,YAAY;gBACtB,IAAM,KAAK,GAAkB,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oBACjC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC5G,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC,CAAC;gBACH,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC/B,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,KAAI,CAAC,wBAAyB,CAAC,WAAW,EAAE,CAAC;gBAC7C,KAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;gBACrC,CAAC,CAAC,WAAW,EAAE,CAAC;aACjB,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;IAEO,+CAAe,GAAvB;QACE,IAAI;YACF,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;SACvE;QAAC,OAAO,CAAC,EAAE;;SAEX;KACF;IAEO,oDAAoB,GAA5B;QACE,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAgB,CAAC;KACvE;;gBAvGiB,oBAAoB;gBACtB,UAAU;;IAxBf,qBAAqB;QADjC,UAAU,EAAE;OACA,qBAAqB,CA+HjC;IAAD,4BAAC;CA/HD;;;ICNsC,oCAAS;IAE7C,0BACU,kBAAyC,EACjD,GAAsB;QAFxB,YAIE,kBAAM,GAAG,CAAC,SACX;QAJS,wBAAkB,GAAlB,kBAAkB,CAAuB;;KAIlD;IAMD,oCAAS,GAAT,UAAsB,KAAQ;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;;YAG7B,IAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAA0B,CAA6B,CAAC;YACzG,IAAM,GAAG,GAAG,iBAAM,SAAS,YAAI,CAAC,CAAC,CAAC;YAClC,OAAO,GAAG,CAAC;SACZ;QACD,OAAO,IAAI,CAAC;KACb;;gBAnB6B,qBAAqB;gBAC5C,iBAAiB;;IAJb,gBAAgB;QAJ5B,IAAI,CAAC;YACJ,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,KAAK;SACZ,CAAC;OACW,gBAAgB,CAwB5B;IAAD,uBAAC;CAAA,CAxBqC,SAAS;;;ICE/C;KAmBC;6BAnBY,oBAAoB;IAEjB,4BAAO,GAArB,UAAsB,MAA4B;QAChD,OAAO;YACL,QAAQ,EAAE,sBAAoB;YAC9B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM;iBAChD;gBACD,qBAAqB;aACtB;SACF,CAAC;KACH;IAEa,6BAAQ,GAAtB;QACE,OAAO;YACL,QAAQ,EAAE,sBAAoB;SAC/B,CAAC;KACH;;IAlBU,oBAAoB;QALhC,QAAQ,CAAC;YACR,YAAY,EAAE,CAAC,gBAAgB,CAAC;YAChC,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,OAAO,EAAE,CAAC,gBAAgB,CAAC;SAC5B,CAAC;OACW,oBAAoB,CAmBhC;IAAD,2BAAC;CAnBD;;ACXA;;;;ACAA;;;;;;"}
|
|
@@ -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;
|
|
@@ -13,6 +14,9 @@ export declare class RpxTranslationService {
|
|
|
13
14
|
set language(lang: RpxLanguage);
|
|
14
15
|
get language(): RpxLanguage;
|
|
15
16
|
constructor(config: RpxTranslationConfig, http: HttpClient);
|
|
17
|
+
getTranslation(phrase: string): Observable<string>;
|
|
16
18
|
translate(phrase: string): Observable<string>;
|
|
17
19
|
private load;
|
|
20
|
+
private persistLanguage;
|
|
21
|
+
private getPersistedLanguage;
|
|
18
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"}
|