@stemy/ngx-utils 10.2.44 → 10.3.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/README.md +27 -27
- package/bundles/stemy-ngx-utils.umd.js +5654 -5640
- package/bundles/stemy-ngx-utils.umd.js.map +1 -1
- package/bundles/stemy-ngx-utils.umd.min.js +1 -1
- package/bundles/stemy-ngx-utils.umd.min.js.map +1 -1
- package/esm2015/ngx-utils/common-types.js +111 -111
- package/esm2015/ngx-utils/components/dynamic-table/dynamic-table.component.js +139 -139
- package/esm2015/ngx-utils/components/pagination-menu/pagination-menu.component.js +96 -96
- package/esm2015/ngx-utils/components/unordered-list/unordered-list.component.js +51 -51
- package/esm2015/ngx-utils/directives/async-method.directive.js +58 -58
- package/esm2015/ngx-utils/directives/background.directive.js +51 -51
- package/esm2015/ngx-utils/directives/dynamic-table-template.directive.js +19 -19
- package/esm2015/ngx-utils/directives/global-template.directive.js +27 -27
- package/esm2015/ngx-utils/directives/icon.directive.js +59 -59
- package/esm2015/ngx-utils/directives/ngx-template-outlet.directive.js +88 -88
- package/esm2015/ngx-utils/directives/pagination-item.directive.js +33 -33
- package/esm2015/ngx-utils/directives/pagination.directive.js +76 -71
- package/esm2015/ngx-utils/directives/resource-if.directive.js +51 -51
- package/esm2015/ngx-utils/directives/sticky-class.directive.js +35 -35
- package/esm2015/ngx-utils/directives/sticky.directive.js +48 -48
- package/esm2015/ngx-utils/directives/unordered-list-item.directive.js +70 -70
- package/esm2015/ngx-utils/directives/unordered-list-template.directive.js +26 -26
- package/esm2015/ngx-utils/ngx-utils.module.js +232 -232
- package/esm2015/ngx-utils/pipes/chunk.pipe.js +21 -21
- package/esm2015/ngx-utils/pipes/entries.pipe.js +24 -24
- package/esm2015/ngx-utils/pipes/extra-item-properties.pipe.js +27 -27
- package/esm2015/ngx-utils/pipes/filter.pipe.js +38 -38
- package/esm2015/ngx-utils/pipes/find.pipe.js +25 -25
- package/esm2015/ngx-utils/pipes/format-number.pipe.js +19 -19
- package/esm2015/ngx-utils/pipes/get-offset.pipe.js +13 -13
- package/esm2015/ngx-utils/pipes/get-type.pipe.js +12 -12
- package/esm2015/ngx-utils/pipes/global-template.pipe.js +35 -35
- package/esm2015/ngx-utils/pipes/group-by.pipe.js +23 -23
- package/esm2015/ngx-utils/pipes/is-type.pipe.js +12 -12
- package/esm2015/ngx-utils/pipes/join.pipe.js +15 -15
- package/esm2015/ngx-utils/pipes/keys.pipe.js +18 -18
- package/esm2015/ngx-utils/pipes/map.pipe.js +25 -25
- package/esm2015/ngx-utils/pipes/max.pipe.js +22 -22
- package/esm2015/ngx-utils/pipes/min.pipe.js +22 -22
- package/esm2015/ngx-utils/pipes/reduce.pipe.js +26 -26
- package/esm2015/ngx-utils/pipes/remap.pipe.js +28 -28
- package/esm2015/ngx-utils/pipes/replace.pipe.js +12 -12
- package/esm2015/ngx-utils/pipes/reverse.pipe.js +20 -20
- package/esm2015/ngx-utils/pipes/round.pipe.js +19 -19
- package/esm2015/ngx-utils/pipes/safe-html.pipe.js +32 -32
- package/esm2015/ngx-utils/pipes/translate.pipe.js +81 -81
- package/esm2015/ngx-utils/pipes/values.pipe.js +18 -18
- package/esm2015/ngx-utils/plugins/resize-event.plugin.js +59 -59
- package/esm2015/ngx-utils/plugins/scroll-event.plugin.js +52 -52
- package/esm2015/ngx-utils/services/acl.service.js +78 -78
- package/esm2015/ngx-utils/services/api.service.js +35 -35
- package/esm2015/ngx-utils/services/auth.service.js +14 -14
- package/esm2015/ngx-utils/services/base-http.client.js +46 -46
- package/esm2015/ngx-utils/services/base-http.service.js +274 -274
- package/esm2015/ngx-utils/services/config.service.js +95 -95
- package/esm2015/ngx-utils/services/error-handler.service.js +49 -49
- package/esm2015/ngx-utils/services/events.service.js +24 -24
- package/esm2015/ngx-utils/services/formatter.service.js +44 -44
- package/esm2015/ngx-utils/services/global-template.service.js +35 -35
- package/esm2015/ngx-utils/services/icon.service.js +24 -24
- package/esm2015/ngx-utils/services/language.service.js +117 -117
- package/esm2015/ngx-utils/services/open-api.service.js +41 -41
- package/esm2015/ngx-utils/services/promise.service.js +49 -49
- package/esm2015/ngx-utils/services/state.service.js +143 -143
- package/esm2015/ngx-utils/services/static-language.service.js +144 -144
- package/esm2015/ngx-utils/services/storage.service.js +48 -48
- package/esm2015/ngx-utils/services/toaster.service.js +29 -29
- package/esm2015/ngx-utils/services/translated-url.serializer.js +70 -70
- package/esm2015/ngx-utils/services/universal.service.js +73 -73
- package/esm2015/ngx-utils/utils/ajax-request-handler.js +40 -40
- package/esm2015/ngx-utils/utils/array.utils.js +100 -90
- package/esm2015/ngx-utils/utils/auth.guard.js +153 -153
- package/esm2015/ngx-utils/utils/canvas.utils.js +388 -388
- package/esm2015/ngx-utils/utils/date.utils.js +28 -28
- package/esm2015/ngx-utils/utils/file.utils.js +90 -90
- package/esm2015/ngx-utils/utils/generic-value.js +20 -20
- package/esm2015/ngx-utils/utils/geometry.js +132 -132
- package/esm2015/ngx-utils/utils/initializer.js +17 -17
- package/esm2015/ngx-utils/utils/loader.utils.js +55 -55
- package/esm2015/ngx-utils/utils/math.utils.js +15 -15
- package/esm2015/ngx-utils/utils/object.utils.js +248 -248
- package/esm2015/ngx-utils/utils/observable.utils.js +63 -63
- package/esm2015/ngx-utils/utils/reflect.utils.js +33 -33
- package/esm2015/ngx-utils/utils/set.utils.js +20 -20
- package/esm2015/ngx-utils/utils/string.utils.js +28 -28
- package/esm2015/ngx-utils/utils/timer.utils.js +52 -52
- package/esm2015/ngx-utils/utils/unique.utils.js +24 -24
- package/esm2015/ngx-utils/utils/vector.js +77 -77
- package/esm2015/public_api.js +83 -83
- package/esm2015/stemy-ngx-utils.js +7 -7
- package/fesm2015/stemy-ngx-utils.js +4552 -4537
- package/fesm2015/stemy-ngx-utils.js.map +1 -1
- package/ngx-utils/common-types.d.ts +284 -284
- package/ngx-utils/components/dynamic-table/dynamic-table.component.d.ts +43 -43
- package/ngx-utils/components/pagination-menu/pagination-menu.component.d.ts +28 -28
- package/ngx-utils/components/unordered-list/unordered-list.component.d.ts +22 -22
- package/ngx-utils/directives/async-method.directive.d.ts +16 -16
- package/ngx-utils/directives/background.directive.d.ts +14 -14
- package/ngx-utils/directives/dynamic-table-template.directive.d.ts +8 -8
- package/ngx-utils/directives/global-template.directive.d.ts +10 -10
- package/ngx-utils/directives/icon.directive.d.ts +20 -20
- package/ngx-utils/directives/ngx-template-outlet.directive.d.ts +14 -14
- package/ngx-utils/directives/pagination-item.directive.d.ts +12 -12
- package/ngx-utils/directives/pagination.directive.d.ts +22 -21
- package/ngx-utils/directives/resource-if.directive.d.ts +16 -16
- package/ngx-utils/directives/sticky-class.directive.d.ts +12 -12
- package/ngx-utils/directives/sticky.directive.d.ts +16 -16
- package/ngx-utils/directives/unordered-list-item.directive.d.ts +25 -25
- package/ngx-utils/directives/unordered-list-template.directive.d.ts +10 -10
- package/ngx-utils/ngx-utils.module.d.ts +76 -76
- package/ngx-utils/pipes/chunk.pipe.d.ts +4 -4
- package/ngx-utils/pipes/entries.pipe.d.ts +9 -9
- package/ngx-utils/pipes/extra-item-properties.pipe.d.ts +5 -5
- package/ngx-utils/pipes/filter.pipe.d.ts +5 -5
- package/ngx-utils/pipes/find.pipe.d.ts +5 -5
- package/ngx-utils/pipes/format-number.pipe.d.ts +7 -7
- package/ngx-utils/pipes/get-offset.pipe.d.ts +4 -4
- package/ngx-utils/pipes/get-type.pipe.d.ts +4 -4
- package/ngx-utils/pipes/global-template.pipe.d.ts +13 -13
- package/ngx-utils/pipes/group-by.pipe.d.ts +5 -5
- package/ngx-utils/pipes/is-type.pipe.d.ts +4 -4
- package/ngx-utils/pipes/join.pipe.d.ts +4 -4
- package/ngx-utils/pipes/keys.pipe.d.ts +4 -4
- package/ngx-utils/pipes/map.pipe.d.ts +5 -5
- package/ngx-utils/pipes/max.pipe.d.ts +4 -4
- package/ngx-utils/pipes/min.pipe.d.ts +4 -4
- package/ngx-utils/pipes/reduce.pipe.d.ts +5 -5
- package/ngx-utils/pipes/remap.pipe.d.ts +4 -4
- package/ngx-utils/pipes/replace.pipe.d.ts +4 -4
- package/ngx-utils/pipes/reverse.pipe.d.ts +4 -4
- package/ngx-utils/pipes/round.pipe.d.ts +7 -7
- package/ngx-utils/pipes/safe-html.pipe.d.ts +7 -7
- package/ngx-utils/pipes/translate.pipe.d.ts +15 -15
- package/ngx-utils/pipes/values.pipe.d.ts +4 -4
- package/ngx-utils/plugins/resize-event.plugin.d.ts +10 -10
- package/ngx-utils/plugins/scroll-event.plugin.d.ts +11 -11
- package/ngx-utils/services/acl.service.d.ts +12 -12
- package/ngx-utils/services/api.service.d.ts +14 -14
- package/ngx-utils/services/auth.service.d.ts +8 -8
- package/ngx-utils/services/base-http.client.d.ts +12 -12
- package/ngx-utils/services/base-http.service.d.ts +42 -42
- package/ngx-utils/services/config.service.d.ts +21 -21
- package/ngx-utils/services/error-handler.service.d.ts +10 -10
- package/ngx-utils/services/events.service.d.ts +11 -11
- package/ngx-utils/services/formatter.service.d.ts +12 -12
- package/ngx-utils/services/global-template.service.d.ts +16 -16
- package/ngx-utils/services/icon.service.d.ts +10 -10
- package/ngx-utils/services/language.service.d.ts +18 -18
- package/ngx-utils/services/open-api.service.d.ts +8 -8
- package/ngx-utils/services/promise.service.d.ts +15 -15
- package/ngx-utils/services/state.service.d.ts +41 -41
- package/ngx-utils/services/static-language.service.d.ts +41 -41
- package/ngx-utils/services/storage.service.d.ts +12 -12
- package/ngx-utils/services/toaster.service.d.ts +10 -10
- package/ngx-utils/services/translated-url.serializer.d.ts +16 -16
- package/ngx-utils/services/universal.service.d.ts +24 -24
- package/ngx-utils/utils/ajax-request-handler.d.ts +11 -11
- package/ngx-utils/utils/array.utils.d.ts +10 -9
- package/ngx-utils/utils/auth.guard.d.ts +26 -26
- package/ngx-utils/utils/canvas.utils.d.ts +13 -13
- package/ngx-utils/utils/date.utils.d.ts +8 -8
- package/ngx-utils/utils/file.utils.d.ts +14 -14
- package/ngx-utils/utils/generic-value.d.ts +8 -8
- package/ngx-utils/utils/geometry.d.ts +50 -50
- package/ngx-utils/utils/initializer.d.ts +11 -11
- package/ngx-utils/utils/loader.utils.d.ts +7 -7
- package/ngx-utils/utils/math.utils.d.ts +5 -5
- package/ngx-utils/utils/object.utils.d.ts +31 -31
- package/ngx-utils/utils/observable.utils.d.ts +12 -12
- package/ngx-utils/utils/reflect.utils.d.ts +9 -9
- package/ngx-utils/utils/set.utils.d.ts +4 -4
- package/ngx-utils/utils/string.utils.d.ts +7 -7
- package/ngx-utils/utils/timer.utils.d.ts +6 -6
- package/ngx-utils/utils/unique.utils.d.ts +5 -5
- package/ngx-utils/utils/vector.d.ts +23 -23
- package/package.json +1 -1
- package/public_api.d.ts +82 -82
- package/stemy-ngx-utils.d.ts +6 -6
- package/stemy-ngx-utils.metadata.json +1 -1
- package/tools/circular.js +116 -116
- package/tools/config.js +78 -78
- package/tools/icons.js +13 -13
|
@@ -1,144 +1,144 @@
|
|
|
1
|
-
import { Inject, Injectable } from "@angular/core";
|
|
2
|
-
import { CONFIG_SERVICE } from "../common-types";
|
|
3
|
-
import { ObjectUtils } from "../utils/object.utils";
|
|
4
|
-
import { EventsService } from "./events.service";
|
|
5
|
-
import { StorageService } from "./storage.service";
|
|
6
|
-
import { BaseHttpClient } from "./base-http.client";
|
|
7
|
-
export class StaticLanguageService {
|
|
8
|
-
constructor(events, storage, configs, client) {
|
|
9
|
-
this.events = events;
|
|
10
|
-
this.storage = storage;
|
|
11
|
-
this.configs = configs;
|
|
12
|
-
this.client = client;
|
|
13
|
-
this.editLang = null;
|
|
14
|
-
this.currentLang = null;
|
|
15
|
-
this.disableTrans = false;
|
|
16
|
-
this.languageList = [];
|
|
17
|
-
this.translations = {
|
|
18
|
-
none: {}
|
|
19
|
-
};
|
|
20
|
-
this.initService();
|
|
21
|
-
}
|
|
22
|
-
get defaultLanguage() {
|
|
23
|
-
return this.configs.getQueryParameter("lang") || this.storage.get("language", this.browserLang);
|
|
24
|
-
}
|
|
25
|
-
get dictionary() {
|
|
26
|
-
return this.translations[this.currentLanguage] || {};
|
|
27
|
-
}
|
|
28
|
-
set dictionary(value) {
|
|
29
|
-
this.translations[this.currentLanguage] = value;
|
|
30
|
-
}
|
|
31
|
-
get languages() {
|
|
32
|
-
return this.languageList;
|
|
33
|
-
}
|
|
34
|
-
get currentLanguage() {
|
|
35
|
-
return this.currentLang || this.defaultLanguage;
|
|
36
|
-
}
|
|
37
|
-
set currentLanguage(lang) {
|
|
38
|
-
this.currentLang = lang;
|
|
39
|
-
this.events.languageChanged.emit(lang);
|
|
40
|
-
}
|
|
41
|
-
get editLanguage() {
|
|
42
|
-
return this.editLang || this.currentLanguage;
|
|
43
|
-
}
|
|
44
|
-
set editLanguage(lang) {
|
|
45
|
-
this.editLang = lang || this.currentLanguage;
|
|
46
|
-
}
|
|
47
|
-
get disableTranslations() {
|
|
48
|
-
return this.disableTrans;
|
|
49
|
-
}
|
|
50
|
-
set disableTranslations(value) {
|
|
51
|
-
this.disableTrans = value;
|
|
52
|
-
this.events.languageChanged.emit(this.currentLang);
|
|
53
|
-
}
|
|
54
|
-
get httpClient() {
|
|
55
|
-
return this.client;
|
|
56
|
-
}
|
|
57
|
-
get config() {
|
|
58
|
-
return this.configs.config;
|
|
59
|
-
}
|
|
60
|
-
get browserLang() {
|
|
61
|
-
if (this.universal.isServer || typeof window.navigator === "undefined") {
|
|
62
|
-
return "de";
|
|
63
|
-
}
|
|
64
|
-
let browserLang = (window.navigator.languages ? window.navigator.languages[0] : null)
|
|
65
|
-
|| window.navigator.language || window.navigator["browserLanguage"] || window.navigator["userLanguage"] || null;
|
|
66
|
-
if (!browserLang)
|
|
67
|
-
return browserLang;
|
|
68
|
-
["-", "_"].forEach(splitter => {
|
|
69
|
-
if (browserLang.indexOf(splitter) >= 0) {
|
|
70
|
-
browserLang = browserLang.split(splitter)[0];
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
return browserLang;
|
|
74
|
-
}
|
|
75
|
-
get universal() {
|
|
76
|
-
return this.storage.universal;
|
|
77
|
-
}
|
|
78
|
-
initService() {
|
|
79
|
-
}
|
|
80
|
-
addLanguages(languages) {
|
|
81
|
-
languages.forEach(lang => {
|
|
82
|
-
this.translations[lang] = {};
|
|
83
|
-
this.languageList.push(lang);
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
getTranslationSync(key, params = null) {
|
|
87
|
-
const lowerKey = (key || "").toLocaleLowerCase();
|
|
88
|
-
const translation = this.dictionary[lowerKey] || lowerKey;
|
|
89
|
-
return this.interpolate(translation == lowerKey ? key : translation, params);
|
|
90
|
-
}
|
|
91
|
-
getTranslation(key, params) {
|
|
92
|
-
if (!ObjectUtils.isString(key) || !key.length) {
|
|
93
|
-
throw new Error(`Parameter "key" required`);
|
|
94
|
-
}
|
|
95
|
-
const translation = ObjectUtils.getValue(this.dictionary, key, key) || key;
|
|
96
|
-
return Promise.resolve(this.interpolate(translation, params));
|
|
97
|
-
}
|
|
98
|
-
getTranslations(...keys) {
|
|
99
|
-
return new Promise(resolve => {
|
|
100
|
-
Promise.all(keys.map(key => this.getTranslation(key))).then(translations => {
|
|
101
|
-
resolve(keys.reduce((result, key, i) => {
|
|
102
|
-
result[key] = translations[i];
|
|
103
|
-
return result;
|
|
104
|
-
}, {}));
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
getTranslationFromObject(translations, params, lang) {
|
|
109
|
-
lang = lang || this.currentLanguage;
|
|
110
|
-
return this.interpolate(translations ? (translations[lang] || "") : "");
|
|
111
|
-
}
|
|
112
|
-
getTranslationFromArray(translations, params, lang) {
|
|
113
|
-
lang = lang || this.currentLanguage;
|
|
114
|
-
const translation = translations ? translations.find(t => t.lang == lang) : null;
|
|
115
|
-
return this.interpolate(translation ? translation.translation : "", params);
|
|
116
|
-
}
|
|
117
|
-
interpolate(expr, params) {
|
|
118
|
-
if (typeof expr === "string") {
|
|
119
|
-
return this.interpolateString(expr, params);
|
|
120
|
-
}
|
|
121
|
-
if (typeof expr === "function") {
|
|
122
|
-
return expr(params);
|
|
123
|
-
}
|
|
124
|
-
return expr;
|
|
125
|
-
}
|
|
126
|
-
interpolateString(expr, params) {
|
|
127
|
-
if (!expr || !params)
|
|
128
|
-
return expr;
|
|
129
|
-
return expr.replace(/{{\s?([^{}\s]*)\s?}}/g, (substring, b) => {
|
|
130
|
-
const r = ObjectUtils.getValue(params, b);
|
|
131
|
-
return ObjectUtils.isDefined(r) ? r : substring;
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
StaticLanguageService.decorators = [
|
|
136
|
-
{ type: Injectable }
|
|
137
|
-
];
|
|
138
|
-
StaticLanguageService.ctorParameters = () => [
|
|
139
|
-
{ type: EventsService, decorators: [{ type: Inject, args: [EventsService,] }] },
|
|
140
|
-
{ type: StorageService, decorators: [{ type: Inject, args: [StorageService,] }] },
|
|
141
|
-
{ type: undefined, decorators: [{ type: Inject, args: [CONFIG_SERVICE,] }] },
|
|
142
|
-
{ type: BaseHttpClient }
|
|
143
|
-
];
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLWxhbmd1YWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvc3RlbXkvV29yay9uZ3gtdXRpbHMvc3JjLyIsInNvdXJjZXMiOlsibmd4LXV0aWxzL3NlcnZpY2VzL3N0YXRpYy1sYW5ndWFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFDSCxjQUFjLEVBTWpCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSWxELE1BQU0sT0FBTyxxQkFBcUI7SUE4RTlCLFlBQTRDLE1BQXFCLEVBQ3BCLE9BQXVCLEVBQ3ZCLE9BQXVCLEVBQzlDLE1BQXNCO1FBSEEsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNwQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUM5QyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLElBQUksRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBeEZELElBQUksZUFBZTtRQUNmLE9BQU8sSUFB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RUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFUyxXQUFXLENBQUMsSUFBdUIsRUFBRSxNQUFZO1FBQ3ZELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVTLGlCQUFpQixDQUFDLElBQVksRUFBRSxNQUFZO1FBQ2xELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBaUIsRUFBRSxDQUFTLEVBQUUsRUFBRTtZQUMxRSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7O1lBNUpKLFVBQVU7OztZQVBILGFBQWEsdUJBc0ZKLE1BQU0sU0FBQyxhQUFhO1lBcEY3QixjQUFjLHVCQXFGTCxNQUFNLFNBQUMsY0FBYzs0Q0FDckIsTUFBTSxTQUFDLGNBQWM7WUFwRjlCLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgQ09ORklHX1NFUlZJQ0UsXG4gICAgSUNvbmZpZ1NlcnZpY2UsXG4gICAgSUNvbmZpZ3VyYXRpb24sXG4gICAgSUxhbmd1YWdlU2VydmljZSxcbiAgICBJVHJhbnNsYXRpb24sXG4gICAgSVRyYW5zbGF0aW9uc1xufSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0LnV0aWxzXCI7XG5pbXBvcnQge0V2ZW50c1NlcnZpY2V9IGZyb20gXCIuL2V2ZW50cy5zZXJ2aWNlXCI7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gXCIuL2NvbmZpZy5zZXJ2aWNlXCI7XG5pbXBvcnQge1N0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi9zdG9yYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7VW5pdmVyc2FsU2VydmljZX0gZnJvbSBcIi4vdW5pdmVyc2FsLnNlcnZpY2VcIjtcbmltcG9ydCB7QmFzZUh0dHBDbGllbnR9IGZyb20gXCIuL2Jhc2UtaHR0cC5jbGllbnRcIjtcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdGF0aWNMYW5ndWFnZVNlcnZpY2UgaW1wbGVtZW50cyBJTGFuZ3VhZ2VTZXJ2aWNlIHtcblxuICAgIGdldCBkZWZhdWx0TGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlncy5nZXRRdWVyeVBhcmFtZXRlcihcImxhbmdcIikgfHwgdGhpcy5zdG9yYWdlLmdldChcImxhbmd1YWdlXCIsIHRoaXMuYnJvd3NlckxhbmcpO1xuICAgIH1cblxuICAgIGdldCBkaWN0aW9uYXJ5KCk6IElUcmFuc2xhdGlvbnMge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbnNbdGhpcy5jdXJyZW50TGFuZ3VhZ2VdIHx8IHt9O1xuICAgIH1cblxuICAgIHNldCBkaWN0aW9uYXJ5KHZhbHVlOiBJVHJhbnNsYXRpb25zKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25zW3RoaXMuY3VycmVudExhbmd1YWdlXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBsYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUxpc3Q7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnJlbnRMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZyB8fCB0aGlzLmRlZmF1bHRMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBzZXQgY3VycmVudExhbmd1YWdlKGxhbmc6IHN0cmluZykge1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5nID0gbGFuZztcbiAgICAgICAgdGhpcy5ldmVudHMubGFuZ3VhZ2VDaGFuZ2VkLmVtaXQobGFuZyk7XG4gICAgfVxuXG4gICAgZ2V0IGVkaXRMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0TGFuZyB8fCB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBzZXQgZWRpdExhbmd1YWdlKGxhbmc6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVkaXRMYW5nID0gbGFuZyB8fCB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBnZXQgZGlzYWJsZVRyYW5zbGF0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRyYW5zO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlVHJhbnNsYXRpb25zKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZVRyYW5zID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZXZlbnRzLmxhbmd1YWdlQ2hhbmdlZC5lbWl0KHRoaXMuY3VycmVudExhbmcpO1xuICAgIH1cblxuICAgIGdldCBodHRwQ2xpZW50KCk6IEh0dHBDbGllbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGNvbmZpZygpOiBJQ29uZmlndXJhdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3MuY29uZmlnO1xuICAgIH1cblxuICAgIGdldCBicm93c2VyTGFuZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy51bml2ZXJzYWwuaXNTZXJ2ZXIgfHwgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcImRlXCI7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJyb3dzZXJMYW5nOiBzdHJpbmcgPSAod2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXMgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG51bGwpXG4gICAgICAgICAgICB8fCB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIHx8IHdpbmRvdy5uYXZpZ2F0b3JbXCJicm93c2VyTGFuZ3VhZ2VcIl0gfHwgd2luZG93Lm5hdmlnYXRvcltcInVzZXJMYW5ndWFnZVwiXSB8fCBudWxsO1xuICAgICAgICBpZiAoIWJyb3dzZXJMYW5nKSByZXR1cm4gYnJvd3Nlckxhbmc7XG5cbiAgICAgICAgW1wiLVwiLCBcIl9cIl0uZm9yRWFjaChzcGxpdHRlciA9PiB7XG4gICAgICAgICAgICBpZiAoYnJvd3NlckxhbmcuaW5kZXhPZihzcGxpdHRlcikgPj0gMCkge1xuICAgICAgICAgICAgICAgIGJyb3dzZXJMYW5nID0gYnJvd3Nlckxhbmcuc3BsaXQoc3BsaXR0ZXIpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gYnJvd3Nlckxhbmc7XG4gICAgfVxuXG4gICAgZ2V0IHVuaXZlcnNhbCgpOiBVbml2ZXJzYWxTZXJ2aWNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS51bml2ZXJzYWw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGVkaXRMYW5nOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGN1cnJlbnRMYW5nOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGRpc2FibGVUcmFuczogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgbGFuZ3VhZ2VMaXN0OiBzdHJpbmdbXTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRpb25zOiBJVHJhbnNsYXRpb25zO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChFdmVudHNTZXJ2aWNlKSByZWFkb25seSBldmVudHM6IEV2ZW50c1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChTdG9yYWdlU2VydmljZSkgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChDT05GSUdfU0VSVklDRSkgcmVhZG9ubHkgY29uZmlnczogSUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGNsaWVudDogQmFzZUh0dHBDbGllbnQpIHtcbiAgICAgICAgdGhpcy5lZGl0TGFuZyA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudExhbmcgPSBudWxsO1xuICAgICAgICB0aGlzLmRpc2FibGVUcmFucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhbmd1YWdlTGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAgIG5vbmU6IHt9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdFNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5pdFNlcnZpY2UoKTogdm9pZCB7XG5cbiAgICB9XG5cbiAgICBhZGRMYW5ndWFnZXMobGFuZ3VhZ2VzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBsYW5ndWFnZXMuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25zW2xhbmddID0ge307XG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlTGlzdC5wdXNoKGxhbmcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmFuc2xhdGlvblN5bmMoa2V5OiBzdHJpbmcsIHBhcmFtczogYW55ID0gbnVsbCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxvd2VyS2V5ID0gKGtleSB8fCBcIlwiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuZGljdGlvbmFyeVtsb3dlcktleV0gfHwgbG93ZXJLZXk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlKHRyYW5zbGF0aW9uID09IGxvd2VyS2V5ID8ga2V5IDogdHJhbnNsYXRpb24sIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgZ2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNTdHJpbmcoa2V5KSB8fCAha2V5Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgXCJrZXlcIiByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gT2JqZWN0VXRpbHMuZ2V0VmFsdWUodGhpcy5kaWN0aW9uYXJ5LCBrZXksIGtleSkgfHwga2V5O1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuaW50ZXJwb2xhdGUodHJhbnNsYXRpb24sIHBhcmFtcykpO1xuICAgIH1cblxuICAgIGdldFRyYW5zbGF0aW9ucyguLi5rZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChrZXlzLm1hcChrZXkgPT4gdGhpcy5nZXRUcmFuc2xhdGlvbihrZXkpKSkudGhlbih0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cy5yZWR1Y2UoKHJlc3VsdCwga2V5LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdHJhbnNsYXRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0sIHt9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VHJhbnNsYXRpb25Gcm9tT2JqZWN0KHRyYW5zbGF0aW9uczogSVRyYW5zbGF0aW9ucywgcGFyYW1zPzogYW55LCBsYW5nPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgbGFuZyA9IGxhbmcgfHwgdGhpcy5jdXJyZW50TGFuZ3VhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlKHRyYW5zbGF0aW9ucyA/ICh0cmFuc2xhdGlvbnNbbGFuZ10gfHwgXCJcIikgOiBcIlwiKVxuICAgIH1cblxuICAgIGdldFRyYW5zbGF0aW9uRnJvbUFycmF5KHRyYW5zbGF0aW9uczogSVRyYW5zbGF0aW9uW10sIHBhcmFtcz86IGFueSwgbGFuZz86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxhbmcgPSBsYW5nIHx8IHRoaXMuY3VycmVudExhbmd1YWdlO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9ucyA/IHRyYW5zbGF0aW9ucy5maW5kKHQgPT4gdC5sYW5nID09IGxhbmcpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGUodHJhbnNsYXRpb24gPyB0cmFuc2xhdGlvbi50cmFuc2xhdGlvbiA6IFwiXCIsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGludGVycG9sYXRlKGV4cHI6IHN0cmluZyB8IEZ1bmN0aW9uLCBwYXJhbXM/OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIGV4cHIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlU3RyaW5nKGV4cHIsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBleHByID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBleHByKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cHIgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbnRlcnBvbGF0ZVN0cmluZyhleHByOiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xuICAgICAgICBpZiAoIWV4cHIgfHwgIXBhcmFtcykgcmV0dXJuIGV4cHI7XG4gICAgICAgIHJldHVybiBleHByLnJlcGxhY2UoL3t7XFxzPyhbXnt9XFxzXSopXFxzP319L2csIChzdWJzdHJpbmc6IHN0cmluZywgYjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByID0gT2JqZWN0VXRpbHMuZ2V0VmFsdWUocGFyYW1zLCBiKTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3RVdGlscy5pc0RlZmluZWQocikgPyByIDogc3Vic3RyaW5nO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { CONFIG_SERVICE } from "../common-types";
|
|
3
|
+
import { ObjectUtils } from "../utils/object.utils";
|
|
4
|
+
import { EventsService } from "./events.service";
|
|
5
|
+
import { StorageService } from "./storage.service";
|
|
6
|
+
import { BaseHttpClient } from "./base-http.client";
|
|
7
|
+
export class StaticLanguageService {
|
|
8
|
+
constructor(events, storage, configs, client) {
|
|
9
|
+
this.events = events;
|
|
10
|
+
this.storage = storage;
|
|
11
|
+
this.configs = configs;
|
|
12
|
+
this.client = client;
|
|
13
|
+
this.editLang = null;
|
|
14
|
+
this.currentLang = null;
|
|
15
|
+
this.disableTrans = false;
|
|
16
|
+
this.languageList = [];
|
|
17
|
+
this.translations = {
|
|
18
|
+
none: {}
|
|
19
|
+
};
|
|
20
|
+
this.initService();
|
|
21
|
+
}
|
|
22
|
+
get defaultLanguage() {
|
|
23
|
+
return this.configs.getQueryParameter("lang") || this.storage.get("language", this.browserLang);
|
|
24
|
+
}
|
|
25
|
+
get dictionary() {
|
|
26
|
+
return this.translations[this.currentLanguage] || {};
|
|
27
|
+
}
|
|
28
|
+
set dictionary(value) {
|
|
29
|
+
this.translations[this.currentLanguage] = value;
|
|
30
|
+
}
|
|
31
|
+
get languages() {
|
|
32
|
+
return this.languageList;
|
|
33
|
+
}
|
|
34
|
+
get currentLanguage() {
|
|
35
|
+
return this.currentLang || this.defaultLanguage;
|
|
36
|
+
}
|
|
37
|
+
set currentLanguage(lang) {
|
|
38
|
+
this.currentLang = lang;
|
|
39
|
+
this.events.languageChanged.emit(lang);
|
|
40
|
+
}
|
|
41
|
+
get editLanguage() {
|
|
42
|
+
return this.editLang || this.currentLanguage;
|
|
43
|
+
}
|
|
44
|
+
set editLanguage(lang) {
|
|
45
|
+
this.editLang = lang || this.currentLanguage;
|
|
46
|
+
}
|
|
47
|
+
get disableTranslations() {
|
|
48
|
+
return this.disableTrans;
|
|
49
|
+
}
|
|
50
|
+
set disableTranslations(value) {
|
|
51
|
+
this.disableTrans = value;
|
|
52
|
+
this.events.languageChanged.emit(this.currentLang);
|
|
53
|
+
}
|
|
54
|
+
get httpClient() {
|
|
55
|
+
return this.client;
|
|
56
|
+
}
|
|
57
|
+
get config() {
|
|
58
|
+
return this.configs.config;
|
|
59
|
+
}
|
|
60
|
+
get browserLang() {
|
|
61
|
+
if (this.universal.isServer || typeof window.navigator === "undefined") {
|
|
62
|
+
return "de";
|
|
63
|
+
}
|
|
64
|
+
let browserLang = (window.navigator.languages ? window.navigator.languages[0] : null)
|
|
65
|
+
|| window.navigator.language || window.navigator["browserLanguage"] || window.navigator["userLanguage"] || null;
|
|
66
|
+
if (!browserLang)
|
|
67
|
+
return browserLang;
|
|
68
|
+
["-", "_"].forEach(splitter => {
|
|
69
|
+
if (browserLang.indexOf(splitter) >= 0) {
|
|
70
|
+
browserLang = browserLang.split(splitter)[0];
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
return browserLang;
|
|
74
|
+
}
|
|
75
|
+
get universal() {
|
|
76
|
+
return this.storage.universal;
|
|
77
|
+
}
|
|
78
|
+
initService() {
|
|
79
|
+
}
|
|
80
|
+
addLanguages(languages) {
|
|
81
|
+
languages.forEach(lang => {
|
|
82
|
+
this.translations[lang] = {};
|
|
83
|
+
this.languageList.push(lang);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
getTranslationSync(key, params = null) {
|
|
87
|
+
const lowerKey = (key || "").toLocaleLowerCase();
|
|
88
|
+
const translation = this.dictionary[lowerKey] || lowerKey;
|
|
89
|
+
return this.interpolate(translation == lowerKey ? key : translation, params);
|
|
90
|
+
}
|
|
91
|
+
getTranslation(key, params) {
|
|
92
|
+
if (!ObjectUtils.isString(key) || !key.length) {
|
|
93
|
+
throw new Error(`Parameter "key" required`);
|
|
94
|
+
}
|
|
95
|
+
const translation = ObjectUtils.getValue(this.dictionary, key, key) || key;
|
|
96
|
+
return Promise.resolve(this.interpolate(translation, params));
|
|
97
|
+
}
|
|
98
|
+
getTranslations(...keys) {
|
|
99
|
+
return new Promise(resolve => {
|
|
100
|
+
Promise.all(keys.map(key => this.getTranslation(key))).then(translations => {
|
|
101
|
+
resolve(keys.reduce((result, key, i) => {
|
|
102
|
+
result[key] = translations[i];
|
|
103
|
+
return result;
|
|
104
|
+
}, {}));
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
getTranslationFromObject(translations, params, lang) {
|
|
109
|
+
lang = lang || this.currentLanguage;
|
|
110
|
+
return this.interpolate(translations ? (translations[lang] || "") : "");
|
|
111
|
+
}
|
|
112
|
+
getTranslationFromArray(translations, params, lang) {
|
|
113
|
+
lang = lang || this.currentLanguage;
|
|
114
|
+
const translation = translations ? translations.find(t => t.lang == lang) : null;
|
|
115
|
+
return this.interpolate(translation ? translation.translation : "", params);
|
|
116
|
+
}
|
|
117
|
+
interpolate(expr, params) {
|
|
118
|
+
if (typeof expr === "string") {
|
|
119
|
+
return this.interpolateString(expr, params);
|
|
120
|
+
}
|
|
121
|
+
if (typeof expr === "function") {
|
|
122
|
+
return expr(params);
|
|
123
|
+
}
|
|
124
|
+
return expr;
|
|
125
|
+
}
|
|
126
|
+
interpolateString(expr, params) {
|
|
127
|
+
if (!expr || !params)
|
|
128
|
+
return expr;
|
|
129
|
+
return expr.replace(/{{\s?([^{}\s]*)\s?}}/g, (substring, b) => {
|
|
130
|
+
const r = ObjectUtils.getValue(params, b);
|
|
131
|
+
return ObjectUtils.isDefined(r) ? r : substring;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
StaticLanguageService.decorators = [
|
|
136
|
+
{ type: Injectable }
|
|
137
|
+
];
|
|
138
|
+
StaticLanguageService.ctorParameters = () => [
|
|
139
|
+
{ type: EventsService, decorators: [{ type: Inject, args: [EventsService,] }] },
|
|
140
|
+
{ type: StorageService, decorators: [{ type: Inject, args: [StorageService,] }] },
|
|
141
|
+
{ type: undefined, decorators: [{ type: Inject, args: [CONFIG_SERVICE,] }] },
|
|
142
|
+
{ type: BaseHttpClient }
|
|
143
|
+
];
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLWxhbmd1YWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiRDovV29yay9uZ3gtdXRpbHMvc3JjLyIsInNvdXJjZXMiOlsibmd4LXV0aWxzL3NlcnZpY2VzL3N0YXRpYy1sYW5ndWFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFDSCxjQUFjLEVBTWpCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSWxELE1BQU0sT0FBTyxxQkFBcUI7SUE4RTlCLFlBQTRDLE1BQXFCLEVBQ3BCLE9BQXVCLEVBQ3ZCLE9BQXVCLEVBQzlDLE1BQXNCO1FBSEEsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNwQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUM5QyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLElBQUksRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBeEZELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9B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LE1BQU0sQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFUyxXQUFXLENBQUMsSUFBdUIsRUFBRSxNQUFZO1FBQ3ZELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVTLGlCQUFpQixDQUFDLElBQVksRUFBRSxNQUFZO1FBQ2xELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBaUIsRUFBRSxDQUFTLEVBQUUsRUFBRTtZQUMxRSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7O1lBNUpKLFVBQVU7OztZQVBILGFBQWEsdUJBc0ZKLE1BQU0sU0FBQyxhQUFhO1lBcEY3QixjQUFjLHVCQXFGTCxNQUFNLFNBQUMsY0FBYzs0Q0FDckIsTUFBTSxTQUFDLGNBQWM7WUFwRjlCLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICAgIENPTkZJR19TRVJWSUNFLFxyXG4gICAgSUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBJQ29uZmlndXJhdGlvbixcclxuICAgIElMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBJVHJhbnNsYXRpb24sXHJcbiAgICBJVHJhbnNsYXRpb25zXHJcbn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0LnV0aWxzXCI7XHJcbmltcG9ydCB7RXZlbnRzU2VydmljZX0gZnJvbSBcIi4vZXZlbnRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tIFwiLi9jb25maWcuc2VydmljZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi9zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtVbml2ZXJzYWxTZXJ2aWNlfSBmcm9tIFwiLi91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0Jhc2VIdHRwQ2xpZW50fSBmcm9tIFwiLi9iYXNlLWh0dHAuY2xpZW50XCI7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTdGF0aWNMYW5ndWFnZVNlcnZpY2UgaW1wbGVtZW50cyBJTGFuZ3VhZ2VTZXJ2aWNlIHtcclxuXHJcbiAgICBnZXQgZGVmYXVsdExhbmd1YWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlncy5nZXRRdWVyeVBhcmFtZXRlcihcImxhbmdcIikgfHwgdGhpcy5zdG9yYWdlLmdldChcImxhbmd1YWdlXCIsIHRoaXMuYnJvd3NlckxhbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkaWN0aW9uYXJ5KCk6IElUcmFuc2xhdGlvbnMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uc1t0aGlzLmN1cnJlbnRMYW5ndWFnZV0gfHwge307XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGRpY3Rpb25hcnkodmFsdWU6IElUcmFuc2xhdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uc1t0aGlzLmN1cnJlbnRMYW5ndWFnZV0gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFuZ3VhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUxpc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGN1cnJlbnRMYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nIHx8IHRoaXMuZGVmYXVsdExhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBjdXJyZW50TGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZyA9IGxhbmc7XHJcbiAgICAgICAgdGhpcy5ldmVudHMubGFuZ3VhZ2VDaGFuZ2VkLmVtaXQobGFuZyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVkaXRMYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRMYW5nIHx8IHRoaXMuY3VycmVudExhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBlZGl0TGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0TGFuZyA9IGxhbmcgfHwgdGhpcy5jdXJyZW50TGFuZ3VhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRpc2FibGVUcmFuc2xhdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRyYW5zO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBkaXNhYmxlVHJhbnNsYXRpb25zKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlVHJhbnMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5sYW5ndWFnZUNoYW5nZWQuZW1pdCh0aGlzLmN1cnJlbnRMYW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaHR0cENsaWVudCgpOiBIdHRwQ2xpZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbmZpZygpOiBJQ29uZmlndXJhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlncy5jb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJyb3dzZXJMYW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyIHx8IHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcImRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBicm93c2VyTGFuZzogc3RyaW5nID0gKHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VzID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBudWxsKVxyXG4gICAgICAgICAgICB8fCB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIHx8IHdpbmRvdy5uYXZpZ2F0b3JbXCJicm93c2VyTGFuZ3VhZ2VcIl0gfHwgd2luZG93Lm5hdmlnYXRvcltcInVzZXJMYW5ndWFnZVwiXSB8fCBudWxsO1xyXG4gICAgICAgIGlmICghYnJvd3NlckxhbmcpIHJldHVybiBicm93c2VyTGFuZztcclxuXHJcbiAgICAgICAgW1wiLVwiLCBcIl9cIl0uZm9yRWFjaChzcGxpdHRlciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChicm93c2VyTGFuZy5pbmRleE9mKHNwbGl0dGVyKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBicm93c2VyTGFuZyA9IGJyb3dzZXJMYW5nLnNwbGl0KHNwbGl0dGVyKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIGJyb3dzZXJMYW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1bml2ZXJzYWwoKTogVW5pdmVyc2FsU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS51bml2ZXJzYWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGVkaXRMYW5nOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgY3VycmVudExhbmc6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBkaXNhYmxlVHJhbnM6IGJvb2xlYW47XHJcbiAgICBwcm90ZWN0ZWQgbGFuZ3VhZ2VMaXN0OiBzdHJpbmdbXTtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGlvbnM6IElUcmFuc2xhdGlvbnM7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChFdmVudHNTZXJ2aWNlKSByZWFkb25seSBldmVudHM6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KFN0b3JhZ2VTZXJ2aWNlKSByZWFkb25seSBzdG9yYWdlOiBTdG9yYWdlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoQ09ORklHX1NFUlZJQ0UpIHJlYWRvbmx5IGNvbmZpZ3M6IElDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGNsaWVudDogQmFzZUh0dHBDbGllbnQpIHtcclxuICAgICAgICB0aGlzLmVkaXRMYW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRMYW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRpc2FibGVUcmFucyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIG5vbmU6IHt9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmluaXRTZXJ2aWNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRTZXJ2aWNlKCk6IHZvaWQge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZGRMYW5ndWFnZXMobGFuZ3VhZ2VzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgICAgIGxhbmd1YWdlcy5mb3JFYWNoKGxhbmcgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uc1tsYW5nXSA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlTGlzdC5wdXNoKGxhbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYW5zbGF0aW9uU3luYyhrZXk6IHN0cmluZywgcGFyYW1zOiBhbnkgPSBudWxsKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBsb3dlcktleSA9IChrZXkgfHwgXCJcIikudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuZGljdGlvbmFyeVtsb3dlcktleV0gfHwgbG93ZXJLZXk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGUodHJhbnNsYXRpb24gPT0gbG93ZXJLZXkgPyBrZXkgOiB0cmFuc2xhdGlvbiwgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZywgcGFyYW1zPzogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzU3RyaW5nKGtleSkgfHwgIWtleS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgXCJrZXlcIiByZXF1aXJlZGApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IE9iamVjdFV0aWxzLmdldFZhbHVlKHRoaXMuZGljdGlvbmFyeSwga2V5LCBrZXkpIHx8IGtleTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuaW50ZXJwb2xhdGUodHJhbnNsYXRpb24sIHBhcmFtcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYW5zbGF0aW9ucyguLi5rZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJVHJhbnNsYXRpb25zPihyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgUHJvbWlzZS5hbGwoa2V5cy5tYXAoa2V5ID0+IHRoaXMuZ2V0VHJhbnNsYXRpb24oa2V5KSkpLnRoZW4odHJhbnNsYXRpb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cy5yZWR1Y2UoKHJlc3VsdCwga2V5LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0cmFuc2xhdGlvbnNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH0sIHt9KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYW5zbGF0aW9uRnJvbU9iamVjdCh0cmFuc2xhdGlvbnM6IElUcmFuc2xhdGlvbnMsIHBhcmFtcz86IGFueSwgbGFuZz86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGFuZyA9IGxhbmcgfHwgdGhpcy5jdXJyZW50TGFuZ3VhZ2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGUodHJhbnNsYXRpb25zID8gKHRyYW5zbGF0aW9uc1tsYW5nXSB8fCBcIlwiKSA6IFwiXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJhbnNsYXRpb25Gcm9tQXJyYXkodHJhbnNsYXRpb25zOiBJVHJhbnNsYXRpb25bXSwgcGFyYW1zPzogYW55LCBsYW5nPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsYW5nID0gbGFuZyB8fCB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9ucyA/IHRyYW5zbGF0aW9ucy5maW5kKHQgPT4gdC5sYW5nID09IGxhbmcpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZSh0cmFuc2xhdGlvbiA/IHRyYW5zbGF0aW9uLnRyYW5zbGF0aW9uIDogXCJcIiwgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaW50ZXJwb2xhdGUoZXhwcjogc3RyaW5nIHwgRnVuY3Rpb24sIHBhcmFtcz86IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHByID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlU3RyaW5nKGV4cHIsIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHByKHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBleHByIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaW50ZXJwb2xhdGVTdHJpbmcoZXhwcjogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgICAgICBpZiAoIWV4cHIgfHwgIXBhcmFtcykgcmV0dXJuIGV4cHI7XHJcbiAgICAgICAgcmV0dXJuIGV4cHIucmVwbGFjZSgve3tcXHM/KFtee31cXHNdKilcXHM/fX0vZywgKHN1YnN0cmluZzogc3RyaW5nLCBiOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgciA9IE9iamVjdFV0aWxzLmdldFZhbHVlKHBhcmFtcywgYik7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3RVdGlscy5pc0RlZmluZWQocikgPyByIDogc3Vic3RyaW5nO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { StorageMode } from "../common-types";
|
|
3
|
-
import { UniversalService } from "./universal.service";
|
|
4
|
-
/**
|
|
5
|
-
* Use this service instead of Storage to avoid Angular Universal breaks on server environment
|
|
6
|
-
*/
|
|
7
|
-
export class StorageService {
|
|
8
|
-
constructor(universal) {
|
|
9
|
-
this.universal = universal;
|
|
10
|
-
}
|
|
11
|
-
get(key, defaultValue, mode = StorageMode.Local) {
|
|
12
|
-
if (this.universal.isServer)
|
|
13
|
-
return defaultValue;
|
|
14
|
-
const storage = mode == StorageMode.Local ? localStorage : sessionStorage;
|
|
15
|
-
const item = storage.getItem(key);
|
|
16
|
-
if (!item)
|
|
17
|
-
return defaultValue;
|
|
18
|
-
try {
|
|
19
|
-
return JSON.parse(item);
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
22
|
-
return item;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
set(key, value, mode = StorageMode.Local) {
|
|
26
|
-
if (this.universal.isServer)
|
|
27
|
-
return;
|
|
28
|
-
const storage = mode == StorageMode.Local ? localStorage : sessionStorage;
|
|
29
|
-
if (typeof value == "string") {
|
|
30
|
-
storage.setItem(key, value);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
storage.setItem(key, JSON.stringify(value));
|
|
34
|
-
}
|
|
35
|
-
remove(key, mode = StorageMode.Local) {
|
|
36
|
-
if (this.universal.isServer)
|
|
37
|
-
return;
|
|
38
|
-
const storage = mode == StorageMode.Local ? localStorage : sessionStorage;
|
|
39
|
-
storage.removeItem(key);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
StorageService.decorators = [
|
|
43
|
-
{ type: Injectable }
|
|
44
|
-
];
|
|
45
|
-
StorageService.ctorParameters = () => [
|
|
46
|
-
{ type: UniversalService }
|
|
47
|
-
];
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { StorageMode } from "../common-types";
|
|
3
|
+
import { UniversalService } from "./universal.service";
|
|
4
|
+
/**
|
|
5
|
+
* Use this service instead of Storage to avoid Angular Universal breaks on server environment
|
|
6
|
+
*/
|
|
7
|
+
export class StorageService {
|
|
8
|
+
constructor(universal) {
|
|
9
|
+
this.universal = universal;
|
|
10
|
+
}
|
|
11
|
+
get(key, defaultValue, mode = StorageMode.Local) {
|
|
12
|
+
if (this.universal.isServer)
|
|
13
|
+
return defaultValue;
|
|
14
|
+
const storage = mode == StorageMode.Local ? localStorage : sessionStorage;
|
|
15
|
+
const item = storage.getItem(key);
|
|
16
|
+
if (!item)
|
|
17
|
+
return defaultValue;
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(item);
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
return item;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
set(key, value, mode = StorageMode.Local) {
|
|
26
|
+
if (this.universal.isServer)
|
|
27
|
+
return;
|
|
28
|
+
const storage = mode == StorageMode.Local ? localStorage : sessionStorage;
|
|
29
|
+
if (typeof value == "string") {
|
|
30
|
+
storage.setItem(key, value);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
storage.setItem(key, JSON.stringify(value));
|
|
34
|
+
}
|
|
35
|
+
remove(key, mode = StorageMode.Local) {
|
|
36
|
+
if (this.universal.isServer)
|
|
37
|
+
return;
|
|
38
|
+
const storage = mode == StorageMode.Local ? localStorage : sessionStorage;
|
|
39
|
+
storage.removeItem(key);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
StorageService.decorators = [
|
|
43
|
+
{ type: Injectable }
|
|
44
|
+
];
|
|
45
|
+
StorageService.ctorParameters = () => [
|
|
46
|
+
{ type: UniversalService }
|
|
47
|
+
];
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkQ6L1dvcmsvbmd4LXV0aWxzL3NyYy8iLCJzb3VyY2VzIjpbIm5neC11dGlscy9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQUV2QixZQUFxQixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUNoRCxDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVcsRUFBRSxZQUFrQixFQUFFLE9BQW9CLFdBQVcsQ0FBQyxLQUFLO1FBQ3RFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQzFFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUMvQixJQUFJO1lBQ0EsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBVSxFQUFFLE9BQW9CLFdBQVcsQ0FBQyxLQUFLO1FBQzlELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDMUUsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLEVBQUU7WUFDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUIsT0FBTztTQUNWO1FBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVyxFQUFFLE9BQW9CLFdBQVcsQ0FBQyxLQUFLO1FBQ3JELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDMUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDOzs7WUFoQ0osVUFBVTs7O1lBTEgsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VNb2RlfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7VW5pdmVyc2FsU2VydmljZX0gZnJvbSBcIi4vdW5pdmVyc2FsLnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBVc2UgdGhpcyBzZXJ2aWNlIGluc3RlYWQgb2YgU3RvcmFnZSB0byBhdm9pZCBBbmd1bGFyIFVuaXZlcnNhbCBicmVha3Mgb24gc2VydmVyIGVudmlyb25tZW50XHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTdG9yYWdlU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgdW5pdmVyc2FsOiBVbml2ZXJzYWxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnksIG1vZGU6IFN0b3JhZ2VNb2RlID0gU3RvcmFnZU1vZGUuTG9jYWwpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnVuaXZlcnNhbC5pc1NlcnZlcikgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICBjb25zdCBzdG9yYWdlID0gbW9kZSA9PSBTdG9yYWdlTW9kZS5Mb2NhbCA/IGxvY2FsU3RvcmFnZSA6IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoaXRlbSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBtb2RlOiBTdG9yYWdlTW9kZSA9IFN0b3JhZ2VNb2RlLkxvY2FsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IG1vZGUgPT0gU3RvcmFnZU1vZGUuTG9jYWwgPyBsb2NhbFN0b3JhZ2UgOiBzZXNzaW9uU3RvcmFnZTtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgc3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlKGtleTogc3RyaW5nLCBtb2RlOiBTdG9yYWdlTW9kZSA9IFN0b3JhZ2VNb2RlLkxvY2FsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IG1vZGUgPT0gU3RvcmFnZU1vZGUuTG9jYWwgPyBsb2NhbFN0b3JhZ2UgOiBzZXNzaW9uU3RvcmFnZTtcclxuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { Inject, Injectable } from "@angular/core";
|
|
2
|
-
import { LANGUAGE_SERVICE } from "../common-types";
|
|
3
|
-
export class ConsoleToasterService {
|
|
4
|
-
constructor(language) {
|
|
5
|
-
this.language = language;
|
|
6
|
-
}
|
|
7
|
-
error(message, params, title) {
|
|
8
|
-
this.translateMessage(message, params, str => console.log(str, title, "background: #BD362F; color: #ffffff"));
|
|
9
|
-
}
|
|
10
|
-
info(message, params, title) {
|
|
11
|
-
this.translateMessage(message, params, str => console.log(str, title, "background: #2F96B4; color: #ffffff"));
|
|
12
|
-
}
|
|
13
|
-
success(message, params, title) {
|
|
14
|
-
this.translateMessage(message, params, str => console.log(str, title, "background: #51A351; color: #ffffff"));
|
|
15
|
-
}
|
|
16
|
-
warning(message, params, title) {
|
|
17
|
-
this.translateMessage(message, params, str => console.log(str, title, "background: #F89406; color: #ffffff"));
|
|
18
|
-
}
|
|
19
|
-
translateMessage(message, params, callback) {
|
|
20
|
-
this.language.getTranslation(message, params).then(callback);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
ConsoleToasterService.decorators = [
|
|
24
|
-
{ type: Injectable }
|
|
25
|
-
];
|
|
26
|
-
ConsoleToasterService.ctorParameters = () => [
|
|
27
|
-
{ type: undefined, decorators: [{ type: Inject, args: [LANGUAGE_SERVICE,] }] }
|
|
28
|
-
];
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { LANGUAGE_SERVICE } from "../common-types";
|
|
3
|
+
export class ConsoleToasterService {
|
|
4
|
+
constructor(language) {
|
|
5
|
+
this.language = language;
|
|
6
|
+
}
|
|
7
|
+
error(message, params, title) {
|
|
8
|
+
this.translateMessage(message, params, str => console.log(str, title, "background: #BD362F; color: #ffffff"));
|
|
9
|
+
}
|
|
10
|
+
info(message, params, title) {
|
|
11
|
+
this.translateMessage(message, params, str => console.log(str, title, "background: #2F96B4; color: #ffffff"));
|
|
12
|
+
}
|
|
13
|
+
success(message, params, title) {
|
|
14
|
+
this.translateMessage(message, params, str => console.log(str, title, "background: #51A351; color: #ffffff"));
|
|
15
|
+
}
|
|
16
|
+
warning(message, params, title) {
|
|
17
|
+
this.translateMessage(message, params, str => console.log(str, title, "background: #F89406; color: #ffffff"));
|
|
18
|
+
}
|
|
19
|
+
translateMessage(message, params, callback) {
|
|
20
|
+
this.language.getTranslation(message, params).then(callback);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
ConsoleToasterService.decorators = [
|
|
24
|
+
{ type: Injectable }
|
|
25
|
+
];
|
|
26
|
+
ConsoleToasterService.ctorParameters = () => [
|
|
27
|
+
{ type: undefined, decorators: [{ type: Inject, args: [LANGUAGE_SERVICE,] }] }
|
|
28
|
+
];
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkQ6L1dvcmsvbmd4LXV0aWxzL3NyYy8iLCJzb3VyY2VzIjpbIm5neC11dGlscy9zZXJ2aWNlcy90b2FzdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFvQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBR3BGLE1BQU0sT0FBTyxxQkFBcUI7SUFFOUIsWUFBOEMsUUFBMEI7UUFBMUIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7SUFFeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFlLEVBQUUsTUFBWSxFQUFFLEtBQWM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUscUNBQXFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFRCxJQUFJLENBQUMsT0FBZSxFQUFFLE1BQVksRUFBRSxLQUFjO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLHFDQUFxQyxDQUFDLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWUsRUFBRSxNQUFZLEVBQUUsS0FBYztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlLEVBQUUsTUFBWSxFQUFFLEtBQWM7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUscUNBQXFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxPQUFlLEVBQUUsTUFBVyxFQUFFLFFBQW1DO1FBQ3RGLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakUsQ0FBQzs7O1lBekJKLFVBQVU7Ozs0Q0FHTSxNQUFNLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SUxhbmd1YWdlU2VydmljZSwgSVRvYXN0ZXJTZXJ2aWNlLCBMQU5HVUFHRV9TRVJWSUNFfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDb25zb2xlVG9hc3RlclNlcnZpY2UgaW1wbGVtZW50cyBJVG9hc3RlclNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTEFOR1VBR0VfU0VSVklDRSkgcHJpdmF0ZSBsYW5ndWFnZTogSUxhbmd1YWdlU2VydmljZSkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZU1lc3NhZ2UobWVzc2FnZSwgcGFyYW1zLCBzdHIgPT4gY29uc29sZS5sb2coc3RyLCB0aXRsZSwgXCJiYWNrZ3JvdW5kOiAjQkQzNjJGOyBjb2xvcjogI2ZmZmZmZlwiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZU1lc3NhZ2UobWVzc2FnZSwgcGFyYW1zLCBzdHIgPT4gY29uc29sZS5sb2coc3RyLCB0aXRsZSwgXCJiYWNrZ3JvdW5kOiAjMkY5NkI0OyBjb2xvcjogI2ZmZmZmZlwiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3VjY2VzcyhtZXNzYWdlOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZU1lc3NhZ2UobWVzc2FnZSwgcGFyYW1zLCBzdHIgPT4gY29uc29sZS5sb2coc3RyLCB0aXRsZSwgXCJiYWNrZ3JvdW5kOiAjNTFBMzUxOyBjb2xvcjogI2ZmZmZmZlwiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2FybmluZyhtZXNzYWdlOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZU1lc3NhZ2UobWVzc2FnZSwgcGFyYW1zLCBzdHIgPT4gY29uc29sZS5sb2coc3RyLCB0aXRsZSwgXCJiYWNrZ3JvdW5kOiAjRjg5NDA2OyBjb2xvcjogI2ZmZmZmZlwiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgcGFyYW1zOiBhbnksIGNhbGxiYWNrOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZS5nZXRUcmFuc2xhdGlvbihtZXNzYWdlLCBwYXJhbXMpLnRoZW4oY2FsbGJhY2spO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|