imm-element-ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/imm-element-ui.mjs +5 -0
- package/esm2022/lib/am/am.component.mjs +502 -0
- package/esm2022/lib/crumb-action/crumb-action.component.mjs +127 -0
- package/esm2022/lib/form/form/form.component.mjs +217 -0
- package/esm2022/lib/form/form-field/field-control.mjs +19 -0
- package/esm2022/lib/form/form-field/field-utils.mjs +227 -0
- package/esm2022/lib/form/form-field/form-field.mjs +129 -0
- package/esm2022/lib/form/form-field/form-type.mjs +123 -0
- package/esm2022/lib/form/form-field/label.directive.mjs +62 -0
- package/esm2022/lib/form/form-type/autocomplete.type.mjs +200 -0
- package/esm2022/lib/form/form-type/codemirror.type.mjs +167 -0
- package/esm2022/lib/form/form-type/datepicker.type.mjs +212 -0
- package/esm2022/lib/form/form-type/image.type.mjs +225 -0
- package/esm2022/lib/form/form-type/inputnumber.type.mjs +144 -0
- package/esm2022/lib/form/form-type/inputtext.type.mjs +69 -0
- package/esm2022/lib/form/form-type/multiselect.type.mjs +219 -0
- package/esm2022/lib/form/form-type/radio.type.mjs +167 -0
- package/esm2022/lib/form/form-type/select.type.mjs +196 -0
- package/esm2022/lib/form/form-type/textarea.type.mjs +75 -0
- package/esm2022/lib/form/form-type/treeselect.type.mjs +174 -0
- package/esm2022/lib/form/form-type/upload.type.mjs +228 -0
- package/esm2022/lib/grid/actions/actions.component.mjs +30 -0
- package/esm2022/lib/grid/cell-edit/cell-edit-autoComplete.component.mjs +89 -0
- package/esm2022/lib/grid/cell-edit/cell-edit-datePicker.compoent.mjs +182 -0
- package/esm2022/lib/grid/cell-edit/cell-edit-inputNumber.component.mjs +107 -0
- package/esm2022/lib/grid/cell-edit/cell-edit-inputText.compoent.mjs +46 -0
- package/esm2022/lib/grid/cell-edit/cell-edit-select.component.mjs +148 -0
- package/esm2022/lib/grid/cell-edit/index.mjs +7 -0
- package/esm2022/lib/grid/cell-render/async-renderer.mjs +29 -0
- package/esm2022/lib/grid/cell-render/link-render.mjs +42 -0
- package/esm2022/lib/grid/grid/grid.component.mjs +373 -0
- package/esm2022/lib/grid/grid-utils.mjs +103 -0
- package/esm2022/lib/grid/mock-data.mjs +14 -0
- package/esm2022/lib/grid/pager/pager.component.mjs +19 -0
- package/esm2022/lib/head/head.component.mjs +43 -0
- package/esm2022/lib/import/import.component.mjs +68 -0
- package/esm2022/lib/log/log.component.mjs +37 -0
- package/esm2022/lib/page-form/page-form.component.mjs +167 -0
- package/esm2022/lib/page-form/page-form.interface.mjs +2 -0
- package/esm2022/lib/page-grid-list/page-grid-list.component.mjs +60 -0
- package/esm2022/lib/row-selector/row-selector.component.mjs +58 -0
- package/esm2022/lib/search/mock-data.mjs +40 -0
- package/esm2022/lib/search/pop-date/pop-date.component.mjs +106 -0
- package/esm2022/lib/search/pop-list/pop-list.component.mjs +32 -0
- package/esm2022/lib/search/pop-panel/pop-panel.component.mjs +44 -0
- package/esm2022/lib/search/pop-select/pop-select.component.mjs +45 -0
- package/esm2022/lib/search/pop-self/pop-self.component.mjs +132 -0
- package/esm2022/lib/search/pop-tree/pop-tree.component.mjs +50 -0
- package/esm2022/lib/search/search/search.component.mjs +138 -0
- package/esm2022/lib/search/search-tip/search-tip.component.mjs +54 -0
- package/esm2022/lib/search/search-utils.mjs +165 -0
- package/esm2022/lib/search/text-panel/text-panel.component.mjs +41 -0
- package/esm2022/lib/service/action.service.mjs +115 -0
- package/esm2022/lib/service/i18n.service.mjs +79 -0
- package/esm2022/lib/service/themeConfig.service.mjs +82 -0
- package/esm2022/lib/service/userHistory.service.mjs +106 -0
- package/esm2022/lib/share/utils.mjs +150 -0
- package/esm2022/lib/steps/steps.component.mjs +31 -0
- package/esm2022/lib/theme-config/theme-config-panel.compoent.mjs +141 -0
- package/esm2022/lib/theme-config/theme-config.compoent.mjs +45 -0
- package/esm2022/public-api.mjs +26 -0
- package/fesm2022/imm-element-ui.mjs +6382 -0
- package/fesm2022/imm-element-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/am/am.component.d.ts +191 -0
- package/lib/crumb-action/crumb-action.component.d.ts +40 -0
- package/lib/form/form/form.component.d.ts +53 -0
- package/lib/form/form-field/field-control.d.ts +13 -0
- package/lib/form/form-field/field-utils.d.ts +12 -0
- package/lib/form/form-field/form-field.d.ts +86 -0
- package/lib/form/form-field/form-type.d.ts +22 -0
- package/lib/form/form-field/label.directive.d.ts +14 -0
- package/lib/form/form-type/autocomplete.type.d.ts +77 -0
- package/lib/form/form-type/codemirror.type.d.ts +31 -0
- package/lib/form/form-type/datepicker.type.d.ts +83 -0
- package/lib/form/form-type/image.type.d.ts +49 -0
- package/lib/form/form-type/inputnumber.type.d.ts +49 -0
- package/lib/form/form-type/inputtext.type.d.ts +17 -0
- package/lib/form/form-type/multiselect.type.d.ts +85 -0
- package/lib/form/form-type/radio.type.d.ts +31 -0
- package/lib/form/form-type/select.type.d.ts +73 -0
- package/lib/form/form-type/textarea.type.d.ts +19 -0
- package/lib/form/form-type/treeselect.type.d.ts +62 -0
- package/lib/form/form-type/upload.type.d.ts +51 -0
- package/lib/grid/actions/actions.component.d.ts +14 -0
- package/lib/grid/cell-edit/cell-edit-autoComplete.component.d.ts +18 -0
- package/lib/grid/cell-edit/cell-edit-datePicker.compoent.d.ts +16 -0
- package/lib/grid/cell-edit/cell-edit-inputNumber.component.d.ts +15 -0
- package/lib/grid/cell-edit/cell-edit-inputText.compoent.d.ts +16 -0
- package/lib/grid/cell-edit/cell-edit-select.component.d.ts +12 -0
- package/lib/grid/cell-edit/index.d.ts +6 -0
- package/lib/grid/cell-render/async-renderer.d.ts +10 -0
- package/lib/grid/cell-render/link-render.d.ts +14 -0
- package/lib/grid/grid/grid.component.d.ts +272 -0
- package/lib/grid/grid-utils.d.ts +751 -0
- package/lib/grid/mock-data.d.ts +12 -0
- package/lib/grid/pager/pager.component.d.ts +15 -0
- package/lib/head/head.component.d.ts +17 -0
- package/lib/import/import.component.d.ts +22 -0
- package/lib/log/log.component.d.ts +14 -0
- package/lib/page-form/page-form.component.d.ts +46 -0
- package/lib/page-form/page-form.interface.d.ts +27 -0
- package/lib/page-grid-list/page-grid-list.component.d.ts +18 -0
- package/lib/row-selector/row-selector.component.d.ts +21 -0
- package/lib/search/mock-data.d.ts +20 -0
- package/lib/search/pop-date/pop-date.component.d.ts +26 -0
- package/lib/search/pop-list/pop-list.component.d.ts +12 -0
- package/lib/search/pop-panel/pop-panel.component.d.ts +15 -0
- package/lib/search/pop-select/pop-select.component.d.ts +13 -0
- package/lib/search/pop-self/pop-self.component.d.ts +31 -0
- package/lib/search/pop-tree/pop-tree.component.d.ts +22 -0
- package/lib/search/search/search.component.d.ts +60 -0
- package/lib/search/search-tip/search-tip.component.d.ts +22 -0
- package/lib/search/search-utils.d.ts +10 -0
- package/lib/search/text-panel/text-panel.component.d.ts +21 -0
- package/lib/service/action.service.d.ts +54 -0
- package/lib/service/i18n.service.d.ts +93 -0
- package/lib/service/themeConfig.service.d.ts +24 -0
- package/lib/service/userHistory.service.d.ts +26 -0
- package/lib/share/utils.d.ts +16 -0
- package/lib/steps/steps.component.d.ts +16 -0
- package/lib/theme-config/theme-config-panel.compoent.d.ts +78 -0
- package/lib/theme-config/theme-config.compoent.d.ts +6 -0
- package/package.json +28 -0
- package/public-api.d.ts +20 -0
- package/src/lib/crumb-action/crumb-action.component.scss +51 -0
- package/src/lib/form/form/form.component.scss +0 -0
- package/src/lib/grid/actions/actions.component.scss +0 -0
- package/src/lib/grid/grid/grid.component.scss +0 -0
- package/src/lib/grid/pager/pager.component.scss +13 -0
- package/src/lib/head/head.component.scss +3 -0
- package/src/lib/import/import.component.scss +10 -0
- package/src/lib/log/log.component.scss +21 -0
- package/src/lib/page-form/page-form.component.scss +14 -0
- package/src/lib/page-grid-list/page-grid-list.component.scss +14 -0
- package/src/lib/row-selector/row-selector.component.scss +1 -0
- package/src/lib/search/dynamic-search/dynamic-search.component.scss +70 -0
- package/src/lib/search/pop-date/pop-date.component.scss +47 -0
- package/src/lib/search/pop-list/pop-list.component.scss +23 -0
- package/src/lib/search/pop-panel/pop-panel.component.scss +49 -0
- package/src/lib/search/pop-select/pop-select.component.scss +29 -0
- package/src/lib/search/pop-self/pop-self.component.scss +60 -0
- package/src/lib/search/pop-tree/pop-tree.component.scss +34 -0
- package/src/lib/search/search/search.component.scss +70 -0
- package/src/lib/search/search-tip/search-tip.component.scss +47 -0
- package/src/lib/search/text-panel/text-panel.component.scss +16 -0
- package/src/lib/steps/steps.component.scss +52 -0
- package/src/lib/styles/styles.scss +232 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Injectable, signal, untracked } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/router";
|
|
4
|
+
export class ActionService {
|
|
5
|
+
constructor(router) {
|
|
6
|
+
this.router = router;
|
|
7
|
+
this.searchList = signal([]);
|
|
8
|
+
this.searchItem = signal(undefined);
|
|
9
|
+
this.groupItem = signal(undefined);
|
|
10
|
+
this.searchClear = signal(undefined);
|
|
11
|
+
this.groupClear = signal(undefined);
|
|
12
|
+
this.selectedRows = signal([]);
|
|
13
|
+
this.actionType = signal({});
|
|
14
|
+
this.page = signal(undefined);
|
|
15
|
+
this.fieldLabelAction = signal(undefined);
|
|
16
|
+
this.fieldAction = signal(undefined);
|
|
17
|
+
}
|
|
18
|
+
clearSearch(modelName) {
|
|
19
|
+
if (modelName == undefined) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const key = this.router.url;
|
|
23
|
+
let searchList = untracked(() => this.searchList()).filter((item) => item.key != key || item.modelName != modelName);
|
|
24
|
+
this.searchList.set([...searchList]);
|
|
25
|
+
}
|
|
26
|
+
setSearch(search, modelName) {
|
|
27
|
+
if (modelName == undefined) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const searchRow = { key: this.router.url, modelName, search };
|
|
31
|
+
let searchList = untracked(() => this.searchList()).filter((item) => item.key != searchRow.key || item.modelName != searchRow.modelName);
|
|
32
|
+
this.searchList.set([...searchList, searchRow]);
|
|
33
|
+
}
|
|
34
|
+
getSearch(modelName) {
|
|
35
|
+
if (modelName == undefined) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const key = this.router.url;
|
|
39
|
+
const result = this.searchList().filter((item) => item.key == key && item.modelName == modelName);
|
|
40
|
+
return result.length ? result[0].search : undefined;
|
|
41
|
+
}
|
|
42
|
+
setSearchItem(searchItem) {
|
|
43
|
+
if (searchItem == undefined) {
|
|
44
|
+
this.searchItem.set(undefined);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.searchItem.set({ ...searchItem });
|
|
48
|
+
}
|
|
49
|
+
getSearchItem() {
|
|
50
|
+
return this.searchItem();
|
|
51
|
+
}
|
|
52
|
+
setGroupItem(groupItem) {
|
|
53
|
+
if (groupItem == undefined) {
|
|
54
|
+
this.groupItem.set(undefined);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.groupItem.set({ ...groupItem });
|
|
58
|
+
}
|
|
59
|
+
getGroupItem() {
|
|
60
|
+
return this.groupItem();
|
|
61
|
+
}
|
|
62
|
+
setSearchClear(searchClear) {
|
|
63
|
+
if (searchClear == undefined) {
|
|
64
|
+
this.searchClear.set(undefined);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.searchClear.set(new String(searchClear));
|
|
68
|
+
}
|
|
69
|
+
getSearchClear() {
|
|
70
|
+
return this.searchClear();
|
|
71
|
+
}
|
|
72
|
+
setGroupClear(groupClear) {
|
|
73
|
+
if (groupClear == undefined) {
|
|
74
|
+
this.groupClear.set(undefined);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.groupClear.set(new Boolean(groupClear));
|
|
78
|
+
}
|
|
79
|
+
getGroupClear() {
|
|
80
|
+
return this.groupClear();
|
|
81
|
+
}
|
|
82
|
+
setSelectedRows(selectedRows) {
|
|
83
|
+
this.selectedRows.set(selectedRows);
|
|
84
|
+
}
|
|
85
|
+
getSelectedRows() {
|
|
86
|
+
return this.selectedRows();
|
|
87
|
+
}
|
|
88
|
+
setPage(page) {
|
|
89
|
+
this.page.set(page);
|
|
90
|
+
}
|
|
91
|
+
getPage() {
|
|
92
|
+
return this.page();
|
|
93
|
+
}
|
|
94
|
+
setFieldLabelAction(key, type) {
|
|
95
|
+
this.fieldLabelAction.set({ key, type });
|
|
96
|
+
}
|
|
97
|
+
getFieldLabelAction() {
|
|
98
|
+
return this.fieldLabelAction();
|
|
99
|
+
}
|
|
100
|
+
setFieldAction(field) {
|
|
101
|
+
this.fieldAction.set(field);
|
|
102
|
+
}
|
|
103
|
+
getFieldAction() {
|
|
104
|
+
return this.fieldAction();
|
|
105
|
+
}
|
|
106
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
107
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionService, providedIn: 'root' }); }
|
|
108
|
+
}
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionService, decorators: [{
|
|
110
|
+
type: Injectable,
|
|
111
|
+
args: [{
|
|
112
|
+
providedIn: 'root',
|
|
113
|
+
}]
|
|
114
|
+
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tdWkvc3JjL2xpYi9zZXJ2aWNlL2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBeUI5RCxNQUFNLE9BQU8sYUFBYTtJQVl6QixZQUFtQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVhqQyxlQUFVLEdBQUcsTUFBTSxDQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxNQUFNLENBQXlCLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxNQUFNLENBQXlCLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELGdCQUFXLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUNwRCxlQUFVLEdBQUcsTUFBTSxDQUFzQixTQUFTLENBQUMsQ0FBQztRQUNwRCxpQkFBWSxHQUFHLE1BQU0sQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUNqQyxlQUFVLEdBQUcsTUFBTSxDQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLFNBQUksR0FBRyxNQUFNLENBQW1CLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLHFCQUFnQixHQUFHLE1BQU0sQ0FBK0IsU0FBUyxDQUFDLENBQUM7UUFDbkUsZ0JBQVcsR0FBRyxNQUFNLENBQXdCLFNBQVMsQ0FBQyxDQUFDO0lBRW5CLENBQUM7SUFFckMsV0FBVyxDQUFDLFNBQTZCO1FBQ3hDLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDUixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDNUIsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FB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YTttSEFBYixhQUFhLGNBRmIsTUFBTTs7NEZBRU4sYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWFyY2hJdGVtIH0gZnJvbSAnLi4vc2VhcmNoL3NlYXJjaC9zZWFyY2guY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnLi4vYW0vYW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnLi4vZm9ybS9mb3JtLWZpZWxkL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBQYWdlIH0gZnJvbSAnLi4vZ3JpZC9wYWdlci9wYWdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblR5cGUge1xyXG5cdHR5cGU/OiBzdHJpbmc7XHJcblx0cm93cz86IGFueVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJvdyB7XHJcblx0a2V5Pzogc3RyaW5nO1xyXG5cdG1vZGVsTmFtZT86IHN0cmluZztcclxuXHRzZWFyY2g/OiBTZWFyY2g7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRMYWJlbEFjdGlvbiB7XHJcblx0a2V5Pzogc3RyaW5nO1xyXG5cdHR5cGU/OiAnbW91c2VlbnRlcicgfCAnbW91c2VsZWF2ZScgfCAnY2xpY2snIHwgJ2RibGNsaWNrJztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjdGlvblNlcnZpY2Uge1xyXG5cdHNlYXJjaExpc3QgPSBzaWduYWw8U2VhcmNoUm93W10+KFtdKTtcclxuXHRzZWFyY2hJdGVtID0gc2lnbmFsPFNlYXJjaEl0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblx0Z3JvdXBJdGVtID0gc2lnbmFsPFNlYXJjaEl0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblx0c2VhcmNoQ2xlYXIgPSBzaWduYWw8U3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cdGdyb3VwQ2xlYXIgPSBzaWduYWw8Qm9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHRzZWxlY3RlZFJvd3MgPSBzaWduYWw8YW55W10+KFtdKTtcclxuXHRhY3Rpb25UeXBlID0gc2lnbmFsPEFjdGlvblR5cGU+KHt9KTtcclxuXHRwYWdlID0gc2lnbmFsPFBhZ2UgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblx0ZmllbGRMYWJlbEFjdGlvbiA9IHNpZ25hbDxGaWVsZExhYmVsQWN0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cdGZpZWxkQWN0aW9uID0gc2lnbmFsPEZvcm1GaWVsZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcblx0Y29uc3RydWN0b3IocHVibGljIHJvdXRlcjogUm91dGVyKSB7fVxyXG5cclxuXHRjbGVhclNlYXJjaChtb2RlbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG5cdFx0aWYgKG1vZGVsTmFtZSA9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3Qga2V5ID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cdFx0bGV0IHNlYXJjaExpc3QgPSB1bnRyYWNrZWQoKCkgPT4gdGhpcy5zZWFyY2hMaXN0KCkpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5rZXkgIT0ga2V5IHx8IGl0ZW0ubW9kZWxOYW1lICE9IG1vZGVsTmFtZSk7XHJcblx0XHR0aGlzLnNlYXJjaExpc3Quc2V0KFsuLi5zZWFyY2hMaXN0XSk7XHJcblx0fVxyXG5cdHNldFNlYXJjaChzZWFyY2g6IFNlYXJjaCwgbW9kZWxOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuXHRcdGlmIChtb2RlbE5hbWUgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHNlYXJjaFJvdyA9IHsga2V5OiB0aGlzLnJvdXRlci51cmwsIG1vZGVsTmFtZSwgc2VhcmNoIH07XHJcblx0XHRsZXQgc2VhcmNoTGlzdCA9IHVudHJhY2tlZCgoKSA9PiB0aGlzLnNlYXJjaExpc3QoKSkuZmlsdGVyKFxyXG5cdFx0XHQoaXRlbSkgPT4gaXRlbS5rZXkgIT0gc2VhcmNoUm93LmtleSB8fCBpdGVtLm1vZGVsTmFtZSAhPSBzZWFyY2hSb3cubW9kZWxOYW1lLFxyXG5cdFx0KTtcclxuXHRcdHRoaXMuc2VhcmNoTGlzdC5zZXQoWy4uLnNlYXJjaExpc3QsIHNlYXJjaFJvd10pO1xyXG5cdH1cclxuXHRnZXRTZWFyY2gobW9kZWxOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBTZWFyY2ggfCB1bmRlZmluZWQge1xyXG5cdFx0aWYgKG1vZGVsTmFtZSA9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3Qga2V5ID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2hMaXN0KCkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtleSA9PSBrZXkgJiYgaXRlbS5tb2RlbE5hbWUgPT0gbW9kZWxOYW1lKTtcclxuXHRcdHJldHVybiByZXN1bHQubGVuZ3RoID8gcmVzdWx0WzBdLnNlYXJjaCA6IHVuZGVmaW5lZDtcclxuXHR9XHJcblx0c2V0U2VhcmNoSXRlbShzZWFyY2hJdGVtOiBTZWFyY2hJdGVtIHwgdW5kZWZpbmVkKSB7XHJcblx0XHRpZiAoc2VhcmNoSXRlbSA9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5zZWFyY2hJdGVtLnNldCh1bmRlZmluZWQpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnNlYXJjaEl0ZW0uc2V0KHsgLi4uc2VhcmNoSXRlbSB9KTtcclxuXHR9XHJcblx0Z2V0U2VhcmNoSXRlbSgpOiBTZWFyY2hJdGVtIHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLnNlYXJjaEl0ZW0oKTtcclxuXHR9XHJcblx0c2V0R3JvdXBJdGVtKGdyb3VwSXRlbTogU2VhcmNoSXRlbSB8IHVuZGVmaW5lZCkge1xyXG5cdFx0aWYgKGdyb3VwSXRlbSA9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5ncm91cEl0ZW0uc2V0KHVuZGVmaW5lZCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuZ3JvdXBJdGVtLnNldCh7IC4uLmdyb3VwSXRlbSB9KTtcclxuXHR9XHJcblx0Z2V0R3JvdXBJdGVtKCk6IFNlYXJjaEl0ZW0gfCB1bmRlZmluZWQge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBJdGVtKCk7XHJcblx0fVxyXG5cdHNldFNlYXJjaENsZWFyKHNlYXJjaENsZWFyOiBTdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuXHRcdGlmIChzZWFyY2hDbGVhciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5zZWFyY2hDbGVhci5zZXQodW5kZWZpbmVkKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZWFyY2hDbGVhci5zZXQobmV3IFN0cmluZyhzZWFyY2hDbGVhcikpO1xyXG5cdH1cclxuXHRnZXRTZWFyY2hDbGVhcigpOiBTdHJpbmcgfCB1bmRlZmluZWQge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VhcmNoQ2xlYXIoKTtcclxuXHR9XHJcblx0c2V0R3JvdXBDbGVhcihncm91cENsZWFyOiBCb29sZWFuIHwgdW5kZWZpbmVkKSB7XHJcblx0XHRpZiAoZ3JvdXBDbGVhciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5ncm91cENsZWFyLnNldCh1bmRlZmluZWQpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLmdyb3VwQ2xlYXIuc2V0KG5ldyBCb29sZWFuKGdyb3VwQ2xlYXIpKTtcclxuXHR9XHJcblx0Z2V0R3JvdXBDbGVhcigpOiBCb29sZWFuIHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLmdyb3VwQ2xlYXIoKTtcclxuXHR9XHJcblx0c2V0U2VsZWN0ZWRSb3dzKHNlbGVjdGVkUm93czogYW55W10pIHtcclxuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzLnNldChzZWxlY3RlZFJvd3MpO1xyXG5cdH1cclxuXHRnZXRTZWxlY3RlZFJvd3MoKTogYW55W10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzKCk7XHJcblx0fVxyXG5cdHNldFBhZ2UocGFnZTogUGFnZSkge1xyXG5cdFx0dGhpcy5wYWdlLnNldChwYWdlKTtcclxuXHR9XHJcblx0Z2V0UGFnZSgpOiBQYWdlIHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLnBhZ2UoKTtcclxuXHR9XHJcblx0c2V0RmllbGRMYWJlbEFjdGlvbihrZXk6IHN0cmluZywgdHlwZTogJ21vdXNlZW50ZXInIHwgJ21vdXNlbGVhdmUnIHwgJ2NsaWNrJyB8ICdkYmxjbGljaycpIHtcclxuXHRcdHRoaXMuZmllbGRMYWJlbEFjdGlvbi5zZXQoeyBrZXksIHR5cGUgfSk7XHJcblx0fVxyXG5cdGdldEZpZWxkTGFiZWxBY3Rpb24oKTogRmllbGRMYWJlbEFjdGlvbiB8IHVuZGVmaW5lZCB7XHJcblx0XHRyZXR1cm4gdGhpcy5maWVsZExhYmVsQWN0aW9uKCk7XHJcblx0fVxyXG5cdHNldEZpZWxkQWN0aW9uKGZpZWxkOiBGb3JtRmllbGQgfCB1bmRlZmluZWQpIHtcclxuXHRcdHRoaXMuZmllbGRBY3Rpb24uc2V0KGZpZWxkKTtcclxuXHR9XHJcblx0Z2V0RmllbGRBY3Rpb24oKTogRm9ybUZpZWxkIHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLmZpZWxkQWN0aW9uKCk7XHJcblx0fVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Injectable, InjectionToken } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { filter } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@ngx-translate/core";
|
|
6
|
+
import * as i2 from "@angular/cdk/platform";
|
|
7
|
+
import * as i3 from "primeng/config";
|
|
8
|
+
export const LANGS = {
|
|
9
|
+
'zh-CN': {
|
|
10
|
+
text: '简体中文',
|
|
11
|
+
langKey: 'zh-CN',
|
|
12
|
+
abbr: '🇨🇳',
|
|
13
|
+
},
|
|
14
|
+
'en-US': {
|
|
15
|
+
text: 'English',
|
|
16
|
+
langKey: 'en-US',
|
|
17
|
+
abbr: '🇬🇧',
|
|
18
|
+
},
|
|
19
|
+
'th-TH': {
|
|
20
|
+
text: 'แบบไทย',
|
|
21
|
+
langKey: 'th-TH',
|
|
22
|
+
abbr: '🇹🇭',
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export const I18N_Token = (InjectionToken);
|
|
26
|
+
export class I18nService {
|
|
27
|
+
constructor(translate, platform, config) {
|
|
28
|
+
this.translate = translate;
|
|
29
|
+
this.platform = platform;
|
|
30
|
+
this.config = config;
|
|
31
|
+
this.default = 'zh-CN';
|
|
32
|
+
this.change$ = new BehaviorSubject(null);
|
|
33
|
+
this._langs = Object.keys(LANGS).map((code) => {
|
|
34
|
+
const item = LANGS[code];
|
|
35
|
+
return { code, text: item.text, abbr: item.abbr };
|
|
36
|
+
});
|
|
37
|
+
const lans = this._langs.map((item) => item.code);
|
|
38
|
+
translate.addLangs(lans);
|
|
39
|
+
}
|
|
40
|
+
getDefaultLang() {
|
|
41
|
+
if (!this.platform.isBrowser) {
|
|
42
|
+
return 'zh-CN';
|
|
43
|
+
}
|
|
44
|
+
return (navigator.languages ? navigator.languages[0] : null) || navigator.language;
|
|
45
|
+
}
|
|
46
|
+
use(lang) {
|
|
47
|
+
lang = lang || this.translate.getDefaultLang();
|
|
48
|
+
this.translate.use(lang).subscribe(() => this.change$.next(lang));
|
|
49
|
+
this.translate.get('primeng').subscribe(res => this.config.setTranslation(res));
|
|
50
|
+
}
|
|
51
|
+
get change() {
|
|
52
|
+
return this.change$.asObservable().pipe(filter((w) => w != null));
|
|
53
|
+
}
|
|
54
|
+
/** 获取语言列表 */
|
|
55
|
+
getLangs() {
|
|
56
|
+
return this._langs;
|
|
57
|
+
}
|
|
58
|
+
/** 翻译 */
|
|
59
|
+
fanyi(key, interpolateParams) {
|
|
60
|
+
return this.translate.instant(key, interpolateParams);
|
|
61
|
+
}
|
|
62
|
+
/** 默认语言 */
|
|
63
|
+
get defaultLang() {
|
|
64
|
+
return this.default;
|
|
65
|
+
}
|
|
66
|
+
/** 当前语言 */
|
|
67
|
+
get currentLang() {
|
|
68
|
+
return this.translate.currentLang || this.translate.getDefaultLang() || this.default;
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: I18nService, deps: [{ token: i1.TranslateService }, { token: i2.Platform }, { token: i3.PrimeNG }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
71
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: I18nService, providedIn: 'root' }); }
|
|
72
|
+
}
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: I18nService, decorators: [{
|
|
74
|
+
type: Injectable,
|
|
75
|
+
args: [{
|
|
76
|
+
providedIn: 'root'
|
|
77
|
+
}]
|
|
78
|
+
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.Platform }, { type: i3.PrimeNG }] });
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW1tLXVpL3NyYy9saWIvc2VydmljZS9pMThuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBV3hDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBZ0M7SUFDaEQsT0FBTyxFQUFFO1FBQ1AsSUFBSSxFQUFFLE1BQU07UUFDWixPQUFPLEVBQUUsT0FBTztRQUNoQixJQUFJLEVBQUUsTUFBTTtLQUNiO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsT0FBTztRQUNoQixJQUFJLEVBQUUsTUFBTTtLQUNiO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPLEVBQUUsT0FBTztRQUNoQixJQUFJLEVBQUUsTUFBTTtLQUNiO0NBQ0YsQ0FBQTtBQUNELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFBLGNBQW9DLENBQUEsQ0FBQTtBQStDOUQsTUFBTSxPQUFPLFdBQVc7SUFRdEIsWUFDUyxTQUEyQixFQUMzQixRQUFrQixFQUNsQixNQUFlO1FBRmYsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBVnhCLFlBQU8sR0FBVyxPQUFPLENBQUE7UUFDekIsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUNuRCxXQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBT0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0IsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQ3JGLENBQUM7SUFDRCxHQUFHLENBQUMsSUFBWTtRQUNkLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUF1QixDQUFDO0lBQzFGLENBQUM7SUFFQSxhQUFhO0lBQ2IsUUFBUTtRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsU0FBUztJQUNULEtBQUssQ0FBQyxHQUFXLEVBQUUsaUJBQXNCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELFdBQVc7SUFDWCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNELFdBQVc7SUFDWCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2RixDQUFDOytHQS9DVSxXQUFXO21IQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcclxuLy8gaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbGVEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBQcmltZU5HIH0gZnJvbSAncHJpbWVuZy9jb25maWcnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMYW5nRGF0YSB7XHJcbiAgYWJicjogc3RyaW5nO1xyXG4gIHRleHQ6IHN0cmluZztcclxuICBsYW5nS2V5OnN0cmluZ1xyXG59IFxyXG5leHBvcnQgY29uc3QgTEFOR1M6IHsgW2tleTogc3RyaW5nXTogTGFuZ0RhdGEgfSA9IHtcclxuICAnemgtQ04nOiB7XHJcbiAgICB0ZXh0OiAn566A5L2T5Lit5paHJyxcclxuICAgIGxhbmdLZXk6ICd6aC1DTicsXHJcbiAgICBhYmJyOiAn8J+HqPCfh7MnLFxyXG4gIH0sXHJcbiAgJ2VuLVVTJzoge1xyXG4gICAgdGV4dDogJ0VuZ2xpc2gnLFxyXG4gICAgbGFuZ0tleTogJ2VuLVVTJyxcclxuICAgIGFiYnI6ICfwn4es8J+HpycsXHJcbiAgfSxcclxuICAndGgtVEgnOiB7XHJcbiAgICB0ZXh0OiAn4LmB4Lia4Lia4LmE4LiX4LiiJyxcclxuICAgIGxhbmdLZXk6ICd0aC1USCcsXHJcbiAgICBhYmJyOiAn8J+HufCfh60nLFxyXG4gIH0sXHJcbn1cclxuZXhwb3J0IGNvbnN0IEkxOE5fVG9rZW4gPSBJbmplY3Rpb25Ub2tlbjxJMThOU2VydmljZUludGVyZmFjZT5cclxuZXhwb3J0IGludGVyZmFjZSBJMThOU2VydmljZUludGVyZmFjZSB7XHJcbiAgW2tleTogc3RyaW5nXTogYW55O1xyXG4gIC8qKlxyXG4gICAqIENhbGwgYHVzZWAgdG8gdHJpZ2dlciBjaGFuZ2Ugbm90aWZpY2F0aW9uXHJcbiAgICpcclxuICAgKiDosIPnlKggYHVzZWAg6Kem5Y+R5Y+Y5pu06YCa55+lXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY2hhbmdlOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlXHJcbiAgICpcclxuICAgKiDojrflj5bpu5jorqTor63oqIBcclxuICAgKi9cclxuICByZWFkb25seSBkZWZhdWx0TGFuZzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIEdldCBjdXJyZW50IGxhbmd1YWdlXHJcbiAgICpcclxuICAgKiDojrflj5blvZPliY3or63oqIBcclxuICAgKi9cclxuICByZWFkb25seSBjdXJyZW50TGFuZzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIENoYW5nZSBsYW5ndWFnZVxyXG4gICAqXHJcbiAgICog5Y+Y5pu06K+t6KiAXHJcbiAgICogQHBhcmFtIGxhbmcg6K+t6KiA5Luj56CBXHJcbiAgICogQHBhcmFtIGVtaXQg5piv5ZCm6Kem5Y+RIGBjaGFuZ2Vg77yM6buY6K6k77yadHJ1ZVxyXG4gICAqL1xyXG4gIHVzZShsYW5nOiBzdHJpbmcsIGVtaXQ/OiBib29sZWFuKTogdm9pZDtcclxuICAvKipcclxuICAgKiBSZXR1cm4gdG8gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgbGlzdFxyXG4gICAqXHJcbiAgICog6L+U5Zue5b2T5YmN6K+t6KiA5YiX6KGoXHJcbiAgICovXHJcbiAgZ2V0TGFuZ3MoKTogYW55W107XHJcbiAgLyoqXHJcbiAgICog57+76K+RXHJcbiAgICogLSBgcGFyYW1zYCDmqKHmnb/miYDpnIDopoHnmoTlj4LmlbDlr7nosaFcclxuICAgKiAtIGBpc1NhZmVgIOaYr+WQpui/lOWbnuWuieWFqOWtl+espu+8jOiHquWKqOiwg+eUqCBgYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWxgXHJcbiAgICovXHJcbiAgZmFueWkoa2V5OiBzdHJpbmcsIHBhcmFtcz86IHtcclxuICAgICAgW2tleTogc3RyaW5nXTogYW55O1xyXG4gIH0sIGlzU2FmZT86IGJvb2xlYW4pOiBzdHJpbmc7XHJcbn1cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSTE4blNlcnZpY2Uge1xyXG4gIGRlZmF1bHQgOnN0cmluZyA9ICd6aC1DTidcclxuICBjaGFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICBfbGFuZ3MgPSBPYmplY3Qua2V5cyhMQU5HUykubWFwKChjb2RlKSA9PiB7XHJcbiAgICBjb25zdCBpdGVtID0gTEFOR1NbY29kZV07XHJcbiAgICByZXR1cm4geyBjb2RlLCB0ZXh0OiBpdGVtLnRleHQsIGFiYnI6IGl0ZW0uYWJiciB9O1xyXG4gIH0pO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gICAgcHVibGljIGNvbmZpZzogUHJpbWVOR1xyXG4gICl7XHJcbiAgICBjb25zdCBsYW5zID0gdGhpcy5fbGFuZ3MubWFwKChpdGVtKSA9PiBpdGVtLmNvZGUpO1xyXG4gICAgdHJhbnNsYXRlLmFkZExhbmdzKGxhbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdExhbmcoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcclxuICAgICAgcmV0dXJuICd6aC1DTic7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG5hdmlnYXRvci5sYW5ndWFnZXMgPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbnVsbCkgfHwgbmF2aWdhdG9yLmxhbmd1YWdlO1xyXG4gIH1cclxuICB1c2UobGFuZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsYW5nID0gbGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5nZXREZWZhdWx0TGFuZygpO1xyXG4gICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNoYW5nZSQubmV4dChsYW5nKSk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoJ3ByaW1lbmcnKS5zdWJzY3JpYmUocmVzID0+IHRoaXMuY29uZmlnLnNldFRyYW5zbGF0aW9uKHJlcykpO1xyXG4gIH1cclxuICBnZXQgY2hhbmdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKCh3KSA9PiB3ICE9IG51bGwpKSBhcyBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgfVxyXG5cclxuICAgLyoqIOiOt+WPluivreiogOWIl+ihqCAqL1xyXG4gICBnZXRMYW5ncygpOiBBcnJheTx7IGNvZGU6IHN0cmluZzsgdGV4dDogc3RyaW5nOyBhYmJyOiBzdHJpbmcgfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhbmdzO1xyXG4gIH1cclxuICAvKiog57+76K+RICovXHJcbiAgZmFueWkoa2V5OiBzdHJpbmcsIGludGVycG9sYXRlUGFyYW1zPzoge30pOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoa2V5LCBpbnRlcnBvbGF0ZVBhcmFtcyk7XHJcbiAgfVxyXG4gIC8qKiDpu5jorqTor63oqIAgKi9cclxuICBnZXQgZGVmYXVsdExhbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRlZmF1bHQ7XHJcbiAgfVxyXG4gIC8qKiDlvZPliY3or63oqIAgKi9cclxuICBnZXQgY3VycmVudExhbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5nZXREZWZhdWx0TGFuZygpIHx8IHRoaXMuZGVmYXVsdDtcclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { computed, effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ThemeConfigService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.STORAGE_KEY = 'themeConfigState';
|
|
7
|
+
this.appState = signal(null);
|
|
8
|
+
this.document = inject(DOCUMENT);
|
|
9
|
+
this.platformId = inject(PLATFORM_ID);
|
|
10
|
+
this.theme = computed(() => (this.appState()?.darkTheme ? 'dark' : 'light'));
|
|
11
|
+
this.initialized = false;
|
|
12
|
+
this.transitionComplete = signal(false);
|
|
13
|
+
this.appState.set({ ...this.loadAppState() });
|
|
14
|
+
effect(() => {
|
|
15
|
+
const state = this.appState();
|
|
16
|
+
if (!this.initialized || !state) {
|
|
17
|
+
this.initialized = true;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
this.saveAppState(state);
|
|
21
|
+
this.handleDarkModeTransition(state);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
handleDarkModeTransition(state) {
|
|
25
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
26
|
+
if (document.startViewTransition) {
|
|
27
|
+
this.startViewTransition(state);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.toggleDarkMode(state);
|
|
31
|
+
this.onTransitionEnd();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
startViewTransition(state) {
|
|
36
|
+
const transition = document.startViewTransition(() => {
|
|
37
|
+
this.toggleDarkMode(state);
|
|
38
|
+
});
|
|
39
|
+
transition.ready.then(() => this.onTransitionEnd());
|
|
40
|
+
}
|
|
41
|
+
onTransitionEnd() {
|
|
42
|
+
this.transitionComplete.set(true);
|
|
43
|
+
setTimeout(() => {
|
|
44
|
+
this.transitionComplete.set(false);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
toggleDarkMode(state) {
|
|
48
|
+
if (state.darkTheme) {
|
|
49
|
+
this.document.documentElement.classList.add('p-dark');
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.document.documentElement.classList.remove('p-dark');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
loadAppState() {
|
|
56
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
57
|
+
const storedState = localStorage.getItem(this.STORAGE_KEY);
|
|
58
|
+
if (storedState) {
|
|
59
|
+
return JSON.parse(storedState);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
preset: 'Aura',
|
|
64
|
+
primary: 'orange',
|
|
65
|
+
darkTheme: false,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
saveAppState(state) {
|
|
69
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
70
|
+
localStorage.setItem(this.STORAGE_KEY, JSON.stringify(state));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
74
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeConfigService, providedIn: 'root' }); }
|
|
75
|
+
}
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeConfigService, decorators: [{
|
|
77
|
+
type: Injectable,
|
|
78
|
+
args: [{
|
|
79
|
+
providedIn: 'root'
|
|
80
|
+
}]
|
|
81
|
+
}], ctorParameters: () => [] });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWVDb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS11aS9zcmMvbGliL3NlcnZpY2UvdGhlbWVDb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVkxRixNQUFNLE9BQU8sa0JBQWtCO0lBZTdCO1FBZFMsZ0JBQVcsR0FBRyxrQkFBa0IsQ0FBQztRQUUxQyxhQUFRLEdBQUcsTUFBTSxDQUFrQixJQUFJLENBQUMsQ0FBQztRQUV6QyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVCLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakMsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUV4RSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQix1QkFBa0IsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFHMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBQyxDQUFDLENBQUE7UUFDM0MsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUM3QixJQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtnQkFDdkIsT0FBTTtZQUNSLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV0QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxLQUFlO1FBQ3RDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSyxRQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWU7UUFDakMsTUFBTSxVQUFVLEdBQUksUUFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7WUFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxjQUFjLENBQUMsS0FBZTtRQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUNELFlBQVk7UUFDVixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNELElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTztZQUNMLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLFFBQVE7WUFDakIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBUztRQUNwQixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7K0dBN0VVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBSGpCLE1BQU07OzRGQUdQLGtCQUFrQjtrQkFKOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBwU3RhdGUge1xyXG4gIHByZXNldD86IHN0cmluZztcclxuICBwcmltYXJ5Pzogc3RyaW5nO1xyXG4gIGRhcmtUaGVtZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBUaGVtZUNvbmZpZ1NlcnZpY2Uge1xyXG4gIHJlYWRvbmx5IFNUT1JBR0VfS0VZID0gJ3RoZW1lQ29uZmlnU3RhdGUnO1xyXG5cclxuICBhcHBTdGF0ZSA9IHNpZ25hbDxBcHBTdGF0ZSB8IG51bGw+KG51bGwpO1xyXG5cclxuICBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XHJcblxyXG4gIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xyXG5cclxuICB0aGVtZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmFwcFN0YXRlKCk/LmRhcmtUaGVtZSA/ICdkYXJrJyA6ICdsaWdodCcpKTtcclxuICBcclxuICBpbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICB0cmFuc2l0aW9uQ29tcGxldGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgdGhpcy5hcHBTdGF0ZS5zZXQoey4uLnRoaXMubG9hZEFwcFN0YXRlKCl9KVxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmFwcFN0YXRlKClcclxuICAgICAgaWYoIXRoaXMuaW5pdGlhbGl6ZWQgfHwgIXN0YXRlKXtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZSBcclxuICAgICAgICByZXR1cm4gXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zYXZlQXBwU3RhdGUoc3RhdGUpXHJcbiAgICAgIHRoaXMuaGFuZGxlRGFya01vZGVUcmFuc2l0aW9uKHN0YXRlKVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG4gIGhhbmRsZURhcmtNb2RlVHJhbnNpdGlvbihzdGF0ZTogQXBwU3RhdGUpOiB2b2lkIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgICAgaWYgKChkb2N1bWVudCBhcyBhbnkpLnN0YXJ0Vmlld1RyYW5zaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFZpZXdUcmFuc2l0aW9uKHN0YXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZURhcmtNb2RlKHN0YXRlKTtcclxuICAgICAgICAgICAgdGhpcy5vblRyYW5zaXRpb25FbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydFZpZXdUcmFuc2l0aW9uKHN0YXRlOiBBcHBTdGF0ZSk6IHZvaWQge1xyXG4gICAgY29uc3QgdHJhbnNpdGlvbiA9IChkb2N1bWVudCBhcyBhbnkpLnN0YXJ0Vmlld1RyYW5zaXRpb24oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlRGFya01vZGUoc3RhdGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdHJhbnNpdGlvbi5yZWFkeS50aGVuKCgpID0+IHRoaXMub25UcmFuc2l0aW9uRW5kKCkpO1xyXG4gIH1cclxuICBvblRyYW5zaXRpb25FbmQoKSB7XHJcbiAgICB0aGlzLnRyYW5zaXRpb25Db21wbGV0ZS5zZXQodHJ1ZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRyYW5zaXRpb25Db21wbGV0ZS5zZXQoZmFsc2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRvZ2dsZURhcmtNb2RlKHN0YXRlOiBBcHBTdGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKHN0YXRlLmRhcmtUaGVtZSkge1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3AtZGFyaycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwLWRhcmsnKTtcclxuICAgIH1cclxuICB9XHJcbiAgbG9hZEFwcFN0YXRlKCl7XHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICBjb25zdCBzdG9yZWRTdGF0ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xyXG4gICAgICBpZiAoc3RvcmVkU3RhdGUpIHtcclxuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0b3JlZFN0YXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJlc2V0OiAnQXVyYScsXHJcbiAgICAgIHByaW1hcnk6ICdvcmFuZ2UnLFxyXG4gICAgICBkYXJrVGhlbWU6IGZhbHNlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNhdmVBcHBTdGF0ZShzdGF0ZTphbnkpe1xyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { inject, Injectable, signal } from '@angular/core';
|
|
2
|
+
import { NavigationEnd } from '@angular/router';
|
|
3
|
+
import { filter, map } from 'rxjs';
|
|
4
|
+
import { I18nService } from './i18n.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
export class UserHistoryService {
|
|
8
|
+
constructor(router, route) {
|
|
9
|
+
this.router = router;
|
|
10
|
+
this.route = route;
|
|
11
|
+
this.historyList = signal([]);
|
|
12
|
+
this.router$ = this.router.events
|
|
13
|
+
.pipe(filter(event => event instanceof NavigationEnd), map((event) => {
|
|
14
|
+
// console.log('event----',event)
|
|
15
|
+
return this.createBreadcrumbs(this.router.routerState.snapshot.root);
|
|
16
|
+
}));
|
|
17
|
+
this.detailName = '';
|
|
18
|
+
this.i18n = inject(I18nService);
|
|
19
|
+
window.addEventListener('beforeunload', (event) => {
|
|
20
|
+
window.sessionStorage.setItem('crumbAction', JSON.stringify(this.historyList()));
|
|
21
|
+
});
|
|
22
|
+
window.addEventListener('load', () => {
|
|
23
|
+
let history = window.sessionStorage.getItem('crumbAction');
|
|
24
|
+
console.log('crumbAction-localstory', history);
|
|
25
|
+
if (history) {
|
|
26
|
+
this.historyList.set(JSON.parse(history));
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
createBreadcrumbs(route, url = '', breadcrumbs = []) {
|
|
31
|
+
const children = route.children;
|
|
32
|
+
if (children.length == 0)
|
|
33
|
+
return;
|
|
34
|
+
const child = children[0];
|
|
35
|
+
const routeURL = child.url.map(segment => segment.path).join('/');
|
|
36
|
+
const queryKeys = Object.keys(child.queryParams) || [];
|
|
37
|
+
if (routeURL !== '') {
|
|
38
|
+
url += `/${routeURL}`;
|
|
39
|
+
}
|
|
40
|
+
if (queryKeys.length > 0) {
|
|
41
|
+
url += '?';
|
|
42
|
+
queryKeys.forEach(v => {
|
|
43
|
+
url += `${v}=${child.queryParams[v]}`;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
let title = '';
|
|
47
|
+
if (child.data['title']) {
|
|
48
|
+
if (typeof child.data['title'] === 'function') {
|
|
49
|
+
title = child.data['title'](child);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
title = child.data['title'];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const i18nKey = child.data['i18nKey'] ? child.data['i18nKey'] : '';
|
|
56
|
+
// const configPath: string = child.routeConfig?.path as string
|
|
57
|
+
const configPath = child.params.hasOwnProperty('id') ? url.replace(/([^\/]*)$/, "") : url;
|
|
58
|
+
const paramsKeys = Object.keys(child.params);
|
|
59
|
+
// console.log('title',child,configPath,url)
|
|
60
|
+
if (title && configPath) {
|
|
61
|
+
let isExit = this.historyList().filter(v => v.configPath == configPath);
|
|
62
|
+
// configPath.indexOf(':') > -1 && paramsKeys.length > 0 && ( title = this.detailName)
|
|
63
|
+
if (isExit.length == 0) {
|
|
64
|
+
this.historyList.update((value) => [...value, { title, url, configPath, i18nKey }]);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.backUrl(url);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// console.log('history----',this.historyList())
|
|
71
|
+
return this.createBreadcrumbs(child, url, breadcrumbs);
|
|
72
|
+
}
|
|
73
|
+
addHistoryList(item) {
|
|
74
|
+
this.historyList.update((value) => [...value, item]);
|
|
75
|
+
}
|
|
76
|
+
backUrl(url) {
|
|
77
|
+
let index = this.historyList().findIndex(v => v.url == url);
|
|
78
|
+
let length = this.historyList().length;
|
|
79
|
+
if (index + 1 !== length) {
|
|
80
|
+
let newHistory = this.historyList().slice(0, index);
|
|
81
|
+
this.historyList.set(newHistory);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
lastPop() {
|
|
85
|
+
this.historyList().pop();
|
|
86
|
+
}
|
|
87
|
+
// 清空history
|
|
88
|
+
clear() {
|
|
89
|
+
window.sessionStorage.removeItem('crumbAction');
|
|
90
|
+
this.historyList.set([]);
|
|
91
|
+
}
|
|
92
|
+
// 手动触发详情页面获取title
|
|
93
|
+
setLastTitle(title) {
|
|
94
|
+
const last = this.historyList().pop();
|
|
95
|
+
this.historyList.update((value) => ([...value, { ...last, title }]));
|
|
96
|
+
console.log('set--title', this.historyList());
|
|
97
|
+
// const last = this.historyList()[this.historyList().length - 1]
|
|
98
|
+
}
|
|
99
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserHistoryService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
100
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserHistoryService, providedIn: 'root' }); }
|
|
101
|
+
}
|
|
102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserHistoryService, decorators: [{
|
|
103
|
+
type: Injectable,
|
|
104
|
+
args: [{ providedIn: 'root' }]
|
|
105
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }] });
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlckhpc3Rvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS11aS9zcmMvbGliL3NlcnZpY2UvdXNlckhpc3Rvcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUQsT0FBTyxFQUEwQyxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBVSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVc3QyxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFlBQW1CLE1BQWMsRUFBUSxLQUFxQjtRQUEzQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVEsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFYOUQsZ0JBQVcsR0FBRyxNQUFNLENBQWdCLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZDLFlBQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDekIsSUFBSSxDQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDL0MsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixpQ0FBaUM7WUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RFLENBQUMsQ0FBQyxDQUNILENBQUE7UUFDSCxlQUFVLEdBQUcsRUFBRSxDQUFBO1FBQ2YsU0FBSSxHQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUd2QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFDLENBQUMsS0FBSyxFQUFF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V0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsQ0FBQTtZQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUNELFlBQVk7SUFDWixLQUFLO1FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixZQUFZLENBQUMsS0FBWTtRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFpQixDQUFBO1FBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUMsRUFBQyxHQUFHLElBQUksRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUM1QyxpRUFBaUU7SUFFbkUsQ0FBQzsrR0FsR1Usa0JBQWtCO21IQUFsQixrQkFBa0IsY0FEUCxNQUFNOzs0RkFDakIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBjb25maWcgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuL2kxOG4uc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlJdGVtIHtcclxuICAvLyB0eXBlOiAncm91dGVyTGluaycgfCAnY3JlYXRlJyxcclxuICB0aXRsZTogc3RyaW5nLFxyXG4gIHVybDogc3RyaW5nLFxyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZyxcclxuICBpMThuS2V5OnN0cmluZ1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjoncm9vdCd9KVxyXG5leHBvcnQgY2xhc3MgVXNlckhpc3RvcnlTZXJ2aWNlIHtcclxuICBoaXN0b3J5TGlzdCA9IHNpZ25hbDxIaXN0b3J5SXRlbVtdPihbXSlcclxuICByb3V0ZXIkID0gdGhpcy5yb3V0ZXIuZXZlbnRzXHJcbiAgICAucGlwZShcclxuICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXHJcbiAgICAgIG1hcCgoZXZlbnQpID0+e1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdldmVudC0tLS0nLGV2ZW50KVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUJyZWFkY3J1bWJzKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgZGV0YWlsTmFtZSA9ICcnXHJcbiAgaTE4biA9aW5qZWN0KEkxOG5TZXJ2aWNlKVxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlcixwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlKXtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywoZXZlbnQpID0+IHtcclxuICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NydW1iQWN0aW9uJywgSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5TGlzdCgpKSlcclxuICAgIH0pXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsKCkgPT4ge1xyXG4gICAgICBsZXQgaGlzdG9yeSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjcnVtYkFjdGlvbicpXHJcbiAgICAgIGNvbnNvbGUubG9nKCdjcnVtYkFjdGlvbi1sb2NhbHN0b3J5JyxoaXN0b3J5KVxyXG4gICAgICBpZihoaXN0b3J5KXtcclxuICAgICAgICB0aGlzLmhpc3RvcnlMaXN0LnNldChKU09OLnBhcnNlKGhpc3RvcnkpKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBcclxuICBwcml2YXRlIGNyZWF0ZUJyZWFkY3J1bWJzKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCB1cmw6IHN0cmluZyA9ICcnLCBicmVhZGNydW1iczogYW55W10gPSBbXSk6YW55IHtcclxuICAgIGNvbnN0IGNoaWxkcmVuOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90W10gPSByb3V0ZS5jaGlsZHJlbjtcclxuICAgIGlmKGNoaWxkcmVuLmxlbmd0aCA9PSAwKSByZXR1cm4gXHJcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgY29uc3Qgcm91dGVVUkw6IHN0cmluZyA9IGNoaWxkLnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcclxuICAgIGNvbnN0IHF1ZXJ5S2V5cyA9IE9iamVjdC5rZXlzKGNoaWxkLnF1ZXJ5UGFyYW1zKSAgfHwgW11cclxuICAgIGlmIChyb3V0ZVVSTCAhPT0gJycpIHtcclxuICAgICAgdXJsICs9IGAvJHtyb3V0ZVVSTH1gO1xyXG4gICAgfVxyXG4gICAgaWYocXVlcnlLZXlzLmxlbmd0aCA+IDApe1xyXG4gICAgICB1cmwrPSc/J1xyXG4gICAgICBxdWVyeUtleXMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICB1cmwrPWAke3Z9PSR7Y2hpbGQucXVlcnlQYXJhbXNbdl19YFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgbGV0IHRpdGxlOiBzdHJpbmcgPSAnJztcclxuICAgIGlmIChjaGlsZC5kYXRhWyd0aXRsZSddKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQuZGF0YVsndGl0bGUnXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRpdGxlID0gY2hpbGQuZGF0YVsndGl0bGUnXShjaGlsZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGl0bGUgPSBjaGlsZC5kYXRhWyd0aXRsZSddXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGkxOG5LZXkgPSBjaGlsZC5kYXRhWydpMThuS2V5J10gPyBjaGlsZC5kYXRhWydpMThuS2V5J10gOiAnJ1xyXG4gICAgLy8gY29uc3QgY29uZmlnUGF0aDogc3RyaW5nID0gY2hpbGQucm91dGVDb25maWc/LnBhdGggYXMgc3RyaW5nXHJcbiAgICBjb25zdCBjb25maWdQYXRoID0gY2hpbGQucGFyYW1zLmhhc093blByb3BlcnR5KCdpZCcpID8gdXJsLnJlcGxhY2UoLyhbXlxcL10qKSQvLCBcIlwiKSA6IHVybFxyXG4gICAgY29uc3QgcGFyYW1zS2V5cyA9IE9iamVjdC5rZXlzKGNoaWxkLnBhcmFtcylcclxuICAgIC8vIGNvbnNvbGUubG9nKCd0aXRsZScsY2hpbGQsY29uZmlnUGF0aCx1cmwpXHJcbiAgICBpZih0aXRsZSAmJiBjb25maWdQYXRoKXtcclxuICAgICAgbGV0IGlzRXhpdCA9IHRoaXMuaGlzdG9yeUxpc3QoKS5maWx0ZXIodiA9PiB2LmNvbmZpZ1BhdGggPT0gY29uZmlnUGF0aCkgXHJcbiAgICAgIC8vIGNvbmZpZ1BhdGguaW5kZXhPZignOicpID4gLTEgJiYgcGFyYW1zS2V5cy5sZW5ndGggPiAwICYmICggdGl0bGUgPSB0aGlzLmRldGFpbE5hbWUpXHJcbiAgICAgIGlmKGlzRXhpdC5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5TGlzdC51cGRhdGUoKHZhbHVlKSA9PiBbLi4udmFsdWUse3RpdGxlLHVybCxjb25maWdQYXRoLGkxOG5LZXl9XSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmJhY2tVcmwodXJsKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZygnaGlzdG9yeS0tLS0nLHRoaXMuaGlzdG9yeUxpc3QoKSlcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUJyZWFkY3J1bWJzKGNoaWxkLCB1cmwsIGJyZWFkY3J1bWJzKTtcclxuICB9XHJcbiAgYWRkSGlzdG9yeUxpc3QoaXRlbTogSGlzdG9yeUl0ZW0pe1xyXG4gICAgdGhpcy5oaXN0b3J5TGlzdC51cGRhdGUoKHZhbHVlKSA9PiBbLi4udmFsdWUsaXRlbV0pXHJcbiAgfVxyXG5cclxuICBiYWNrVXJsKHVybDpzdHJpbmcpe1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5oaXN0b3J5TGlzdCgpLmZpbmRJbmRleCh2ID0+IHYudXJsID09IHVybClcclxuICAgIGxldCBsZW5ndGggPSB0aGlzLmhpc3RvcnlMaXN0KCkubGVuZ3RoXHJcbiAgICBpZihpbmRleCArIDEgIT09IGxlbmd0aCl7XHJcbiAgICAgIGxldCBuZXdIaXN0b3J5ID0gdGhpcy5oaXN0b3J5TGlzdCgpLnNsaWNlKDAsaW5kZXgpXHJcbiAgICAgIHRoaXMuaGlzdG9yeUxpc3Quc2V0KG5ld0hpc3RvcnkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsYXN0UG9wKCl7XHJcbiAgICB0aGlzLmhpc3RvcnlMaXN0KCkucG9wKClcclxuICB9XHJcbiAgLy8g5riF56m6aGlzdG9yeVxyXG4gIGNsZWFyKCl7XHJcbiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY3J1bWJBY3Rpb24nKVxyXG4gICAgdGhpcy5oaXN0b3J5TGlzdC5zZXQoW10pXHJcbiAgfVxyXG5cclxuICAvLyDmiYvliqjop6blj5Hor6bmg4XpobXpnaLojrflj5Z0aXRsZSBcclxuICBzZXRMYXN0VGl0bGUodGl0bGU6c3RyaW5nKXtcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmhpc3RvcnlMaXN0KCkucG9wKCkgYXMgSGlzdG9yeUl0ZW1cclxuICAgIHRoaXMuaGlzdG9yeUxpc3QudXBkYXRlKCh2YWx1ZSkgPT4gKFsuLi52YWx1ZSx7Li4ubGFzdCx0aXRsZX1dKSlcclxuICAgIGNvbnNvbGUubG9nKCdzZXQtLXRpdGxlJyx0aGlzLmhpc3RvcnlMaXN0KCkpXHJcbiAgICAvLyBjb25zdCBsYXN0ID0gdGhpcy5oaXN0b3J5TGlzdCgpW3RoaXMuaGlzdG9yeUxpc3QoKS5sZW5ndGggLSAxXVxyXG5cclxuICB9XHJcblxyXG59Il19
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Observable, of, shareReplay, pipe } from 'rxjs';
|
|
2
|
+
import * as ts from 'typescript';
|
|
3
|
+
export let toPascalCase = (str) => str
|
|
4
|
+
.replace(/_/g, ' ') // 下划线替换为空格
|
|
5
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2') // 小驼峰分割为单词
|
|
6
|
+
.toLowerCase() // 转为小写
|
|
7
|
+
.split(/\s+/) // 按空格分割
|
|
8
|
+
.map((word) => (word ? word[0].toUpperCase() + word.slice(1) : ''))
|
|
9
|
+
.join('');
|
|
10
|
+
export const generateUniqueId = () => {
|
|
11
|
+
const timestamp = Date.now().toString(36); // 时间戳转36进制缩短长度
|
|
12
|
+
const random = Math.random().toString(36).substring(2, 4); // 随机部分
|
|
13
|
+
return `${timestamp}${random}`;
|
|
14
|
+
};
|
|
15
|
+
export const createCircularIterator = (array) => {
|
|
16
|
+
let index = -1;
|
|
17
|
+
return {
|
|
18
|
+
next: () => {
|
|
19
|
+
index++;
|
|
20
|
+
return array[index % array.length];
|
|
21
|
+
},
|
|
22
|
+
prev: () => {
|
|
23
|
+
index--;
|
|
24
|
+
return array[((index % array.length) + array.length) % array.length];
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export const parseFunctions = (obj, _this) => {
|
|
29
|
+
if (typeof obj === 'string') {
|
|
30
|
+
// 尝试检测是否是函数字符串
|
|
31
|
+
if ((obj.includes('=>') || obj.includes('Promise')) && !isJSONParsable(obj)) {
|
|
32
|
+
const o = compileTsToJs(obj);
|
|
33
|
+
console.log('解析函数:', obj);
|
|
34
|
+
try {
|
|
35
|
+
const sandbox = {
|
|
36
|
+
Observable,
|
|
37
|
+
of,
|
|
38
|
+
shareReplay,
|
|
39
|
+
pipe,
|
|
40
|
+
Promise, // 添加 Promise 到 sandbox
|
|
41
|
+
async: true, // 标记支持异步
|
|
42
|
+
resolve: Promise.resolve.bind(Promise),
|
|
43
|
+
reject: Promise.reject.bind(Promise),
|
|
44
|
+
};
|
|
45
|
+
// 处理 Promise 构造函数的情况
|
|
46
|
+
if (obj.includes('new Promise')) {
|
|
47
|
+
return new Function('sandbox', `
|
|
48
|
+
with(sandbox) {
|
|
49
|
+
return ${o};
|
|
50
|
+
}
|
|
51
|
+
`).bind(_this)(sandbox);
|
|
52
|
+
}
|
|
53
|
+
// 处理普通函数和箭头函数
|
|
54
|
+
return new Function('sandbox', `
|
|
55
|
+
with(sandbox) {
|
|
56
|
+
return (${o});
|
|
57
|
+
}
|
|
58
|
+
`).bind(_this)(sandbox);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
console.error('函数解析失败:', e, '\n原始字符串:', obj);
|
|
62
|
+
return obj;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (isJSONParsable(obj)) {
|
|
66
|
+
let json = JSON.parse(obj);
|
|
67
|
+
return parseFunctions(json, _this);
|
|
68
|
+
}
|
|
69
|
+
return obj;
|
|
70
|
+
}
|
|
71
|
+
if (Array.isArray(obj)) {
|
|
72
|
+
return obj.map((item) => parseFunctions(item, _this));
|
|
73
|
+
}
|
|
74
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
75
|
+
const result = {};
|
|
76
|
+
for (const key in obj) {
|
|
77
|
+
if (obj.hasOwnProperty(key)) {
|
|
78
|
+
result[key] = parseFunctions(obj[key], _this);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
return obj;
|
|
84
|
+
};
|
|
85
|
+
// 辅助函数:检查是否包含 Promise 构造函数
|
|
86
|
+
const containsPromiseConstructor = (str) => {
|
|
87
|
+
return /new\s+Promise/.test(str);
|
|
88
|
+
};
|
|
89
|
+
// 修改 compileTsToJs 函数以更好地处理 Promise
|
|
90
|
+
export const compileTsToJs = (tsCode) => {
|
|
91
|
+
// 如果是 Promise 构造函数,不需要额外处理
|
|
92
|
+
if (containsPromiseConstructor(tsCode)) {
|
|
93
|
+
return tsCode;
|
|
94
|
+
}
|
|
95
|
+
const result = ts.transpileModule(tsCode, {
|
|
96
|
+
compilerOptions: {
|
|
97
|
+
module: ts.ModuleKind.CommonJS,
|
|
98
|
+
target: ts.ScriptTarget.ES2015,
|
|
99
|
+
// 启用异步函数支持
|
|
100
|
+
lib: ['es2015', 'es2015.promise', 'dom'],
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
return removeTrailingSemicolon(result.outputText);
|
|
104
|
+
};
|
|
105
|
+
const removeTrailingSemicolon = (funcStr) => {
|
|
106
|
+
// 先去除前后空白
|
|
107
|
+
const trimmed = funcStr.trim();
|
|
108
|
+
// 只替换最后一个分号(如果它不在花括号内)
|
|
109
|
+
if (trimmed.endsWith(';')) {
|
|
110
|
+
return trimmed.slice(0, -1);
|
|
111
|
+
}
|
|
112
|
+
return trimmed;
|
|
113
|
+
};
|
|
114
|
+
export const isJSONParsable = (str) => {
|
|
115
|
+
try {
|
|
116
|
+
JSON.parse(str);
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch (e) {
|
|
120
|
+
// let strIsObj = /\{[^}]*\}|\[[^\]]*\]/.test(str)
|
|
121
|
+
// if(strIsObj){
|
|
122
|
+
// console.error('JSON 解析失败:', e, '\n原始字符串:', str)
|
|
123
|
+
// }
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* 根据指定的键数组过滤对象
|
|
129
|
+
* @param {Object} obj - 要过滤的原始对象
|
|
130
|
+
* @param {Array} keys - 需要保留的键数组
|
|
131
|
+
* @returns {Object} 过滤后的新对象
|
|
132
|
+
*/
|
|
133
|
+
export const filterObjectByKeys = (obj, keys) => {
|
|
134
|
+
// 参数校验
|
|
135
|
+
if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
|
|
136
|
+
throw new TypeError('第一个参数必须是普通对象');
|
|
137
|
+
}
|
|
138
|
+
if (!Array.isArray(keys)) {
|
|
139
|
+
throw new TypeError('第二个参数必须是数组');
|
|
140
|
+
}
|
|
141
|
+
// 使用reduce创建新对象
|
|
142
|
+
return keys.reduce((acc, key) => {
|
|
143
|
+
// 只有当原对象有该属性时才添加到新对象
|
|
144
|
+
if (key in obj) {
|
|
145
|
+
acc[key] = obj[key];
|
|
146
|
+
}
|
|
147
|
+
return acc;
|
|
148
|
+
}, {});
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tdWkvc3JjL2xpYi9zaGFyZS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxJQUFJLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQ3pDLEdBQUc7S0FDRCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVc7S0FDOUIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVc7S0FDL0MsV0FBVyxFQUFFLENBQUMsT0FBTztLQUNyQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUTtLQUNyQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRVosTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlO0lBQzFELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87SUFD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WSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsR0FBVyxFQUFFLEVBQUU7UUFDNUMscUJBQXFCO1FBQ3JCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBwaXBlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xyXG5cclxuZXhwb3J0IGxldCB0b1Bhc2NhbENhc2UgPSAoc3RyOiBzdHJpbmcpID0+XHJcblx0c3RyXHJcblx0XHQucmVwbGFjZSgvXy9nLCAnICcpIC8vIOS4i+WIkue6v+abv+aNouS4uuepuuagvFxyXG5cdFx0LnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMSAkMicpIC8vIOWwj+mpvOWzsOWIhuWJsuS4uuWNleivjVxyXG5cdFx0LnRvTG93ZXJDYXNlKCkgLy8g6L2s5Li65bCP5YaZXHJcblx0XHQuc3BsaXQoL1xccysvKSAvLyDmjInnqbrmoLzliIblibJcclxuXHRcdC5tYXAoKHdvcmQpID0+ICh3b3JkID8gd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSA6ICcnKSlcclxuXHRcdC5qb2luKCcnKTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVVuaXF1ZUlkID0gKCkgPT4ge1xyXG5cdGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCkudG9TdHJpbmcoMzYpOyAvLyDml7bpl7TmiLPovawzNui/m+WItue8qeefremVv+W6plxyXG5cdGNvbnN0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA0KTsgLy8g6ZqP5py66YOo5YiGXHJcblx0cmV0dXJuIGAke3RpbWVzdGFtcH0ke3JhbmRvbX1gO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNpcmN1bGFySXRlcmF0b3IgPSAoYXJyYXk6IGFueVtdKSA9PiB7XHJcblx0bGV0IGluZGV4ID0gLTE7XHJcblx0cmV0dXJuIHtcclxuXHRcdG5leHQ6ICgpID0+IHtcclxuXHRcdFx0aW5kZXgrKztcclxuXHRcdFx0cmV0dXJuIGFycmF5W2luZGV4ICUgYXJyYXkubGVuZ3RoXTtcclxuXHRcdH0sXHJcblx0XHRwcmV2OiAoKSA9PiB7XHJcblx0XHRcdGluZGV4LS07XHJcblx0XHRcdHJldHVybiBhcnJheVsoKGluZGV4ICUgYXJyYXkubGVuZ3RoKSArIGFycmF5Lmxlbmd0aCkgJSBhcnJheS5sZW5ndGhdO1xyXG5cdFx0fSxcclxuXHR9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlRnVuY3Rpb25zID0gKG9iajogYW55LCBfdGhpczogYW55KTogYW55ID0+IHtcclxuXHRpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdC8vIOWwneivleajgOa1i+aYr+WQpuaYr+WHveaVsOWtl+espuS4slxyXG5cdFx0aWYgKChvYmouaW5jbHVkZXMoJz0+JykgfHwgb2JqLmluY2x1ZGVzKCdQcm9taXNlJykpICYmICFpc0pTT05QYXJzYWJsZShvYmopKSB7XHJcblx0XHRcdGNvbnN0IG8gPSBjb21waWxlVHNUb0pzKG9iaik7XHJcblx0XHRcdGNvbnNvbGUubG9nKCfop6PmnpDlh73mlbA6Jywgb2JqKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBzYW5kYm94ID0ge1xyXG5cdFx0XHRcdFx0T2JzZXJ2YWJsZSxcclxuXHRcdFx0XHRcdG9mLFxyXG5cdFx0XHRcdFx0c2hhcmVSZXBsYXksXHJcblx0XHRcdFx0XHRwaXBlLFxyXG5cdFx0XHRcdFx0UHJvbWlzZSwgLy8g5re75YqgIFByb21pc2Ug5YiwIHNhbmRib3hcclxuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLCAvLyDmoIforrDmlK/mjIHlvILmraVcclxuXHRcdFx0XHRcdHJlc29sdmU6IFByb21pc2UucmVzb2x2ZS5iaW5kKFByb21pc2UpLFxyXG5cdFx0XHRcdFx0cmVqZWN0OiBQcm9taXNlLnJlamVjdC5iaW5kKFByb21pc2UpLFxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdC8vIOWkhOeQhiBQcm9taXNlIOaehOmAoOWHveaVsOeahOaDheWGtVxyXG5cdFx0XHRcdGlmIChvYmouaW5jbHVkZXMoJ25ldyBQcm9taXNlJykpIHtcclxuXHRcdFx0XHRcdHJldHVybiBuZXcgRnVuY3Rpb24oXHJcblx0XHRcdFx0XHRcdCdzYW5kYm94JyxcclxuXHRcdFx0XHRcdFx0YFxyXG5cdFx0XHRcdFx0XHRcdHdpdGgoc2FuZGJveCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuICR7b307XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRgLFxyXG5cdFx0XHRcdFx0KS5iaW5kKF90aGlzKShzYW5kYm94KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIOWkhOeQhuaZrumAmuWHveaVsOWSjOeureWktOWHveaVsFxyXG5cdFx0XHRcdHJldHVybiBuZXcgRnVuY3Rpb24oXHJcblx0XHRcdFx0XHQnc2FuZGJveCcsXHJcblx0XHRcdFx0XHRgXHJcblx0XHRcdFx0XHRcdHdpdGgoc2FuZGJveCkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoJHtvfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGAsXHJcblx0XHRcdFx0KS5iaW5kKF90aGlzKShzYW5kYm94KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ+WHveaVsOino+aekOWksei0pTonLCBlLCAnXFxu5Y6f5aeL5a2X56ym5LiyOicsIG9iaik7XHJcblx0XHRcdFx0cmV0dXJuIG9iajtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGlzSlNPTlBhcnNhYmxlKG9iaikpIHtcclxuXHRcdFx0bGV0IGpzb24gPSBKU09OLnBhcnNlKG9iaik7XHJcblx0XHRcdHJldHVybiBwYXJzZUZ1bmN0aW9ucyhqc29uLCBfdGhpcyk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gb2JqO1xyXG5cdH1cclxuXHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcblx0XHRyZXR1cm4gb2JqLm1hcCgoaXRlbTogYW55KSA9PiBwYXJzZUZ1bmN0aW9ucyhpdGVtLCBfdGhpcykpO1xyXG5cdH1cclxuXHRpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcblx0XHRcdGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdHJlc3VsdFtrZXldID0gcGFyc2VGdW5jdGlvbnMob2JqW2tleV0sIF90aGlzKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBvYmo7XHJcbn07XHJcblxyXG4vLyDovoXliqnlh73mlbDvvJrmo4Dmn6XmmK/lkKbljIXlkKsgUHJvbWlzZSDmnoTpgKDlh73mlbBcclxuY29uc3QgY29udGFpbnNQcm9taXNlQ29uc3RydWN0b3IgPSAoc3RyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuXHRyZXR1cm4gL25ld1xccytQcm9taXNlLy50ZXN0KHN0cik7XHJcbn07XHJcblxyXG4vLyDkv67mlLkgY29tcGlsZVRzVG9KcyDlh73mlbDku6Xmm7Tlpb3lnLDlpITnkIYgUHJvbWlzZVxyXG5leHBvcnQgY29uc3QgY29tcGlsZVRzVG9KcyA9ICh0c0NvZGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcblx0Ly8g5aaC5p6c5pivIFByb21pc2Ug5p6E6YCg5Ye95pWw77yM5LiN6ZyA6KaB6aKd5aSW5aSE55CGXHJcblx0aWYgKGNvbnRhaW5zUHJvbWlzZUNvbnN0cnVjdG9yKHRzQ29kZSkpIHtcclxuXHRcdHJldHVybiB0c0NvZGU7XHJcblx0fVxyXG5cclxuXHRjb25zdCByZXN1bHQgPSB0cy50cmFuc3BpbGVNb2R1bGUodHNDb2RlLCB7XHJcblx0XHRjb21waWxlck9wdGlvbnM6IHtcclxuXHRcdFx0bW9kdWxlOiB0cy5Nb2R1bGVLaW5kLkNvbW1vbkpTLFxyXG5cdFx0XHR0YXJnZXQ6IHRzLlNjcmlwdFRhcmdldC5FUzIwMTUsXHJcblx0XHRcdC8vIOWQr+eUqOW8guatpeWHveaVsOaUr+aMgVxyXG5cdFx0XHRsaWI6IFsnZXMyMDE1JywgJ2VzMjAxNS5wcm9taXNlJywgJ2RvbSddLFxyXG5cdFx0fSxcclxuXHR9KTtcclxuXHRyZXR1cm4gcmVtb3ZlVHJhaWxpbmdTZW1pY29sb24ocmVzdWx0Lm91dHB1dFRleHQpO1xyXG59O1xyXG5cclxuY29uc3QgcmVtb3ZlVHJhaWxpbmdTZW1pY29sb24gPSAoZnVuY1N0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuXHQvLyDlhYjljrvpmaTliY3lkI7nqbrnmb1cclxuXHRjb25zdCB0cmltbWVkID0gZnVuY1N0ci50cmltKCk7XHJcblx0Ly8g5Y+q5pu/5o2i5pyA5ZCO5LiA5Liq5YiG5Y+377yI5aaC5p6c5a6D5LiN5Zyo6Iqx5ous5Y+35YaF77yJXHJcblx0aWYgKHRyaW1tZWQuZW5kc1dpdGgoJzsnKSkge1xyXG5cdFx0cmV0dXJuIHRyaW1tZWQuc2xpY2UoMCwgLTEpO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJpbW1lZDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0pTT05QYXJzYWJsZSA9IChzdHI6IGFueSkgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRKU09OLnBhcnNlKHN0cik7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHQvLyBsZXQgc3RySXNPYmogPSAvXFx7W159XSpcXH18XFxbW15cXF1dKlxcXS8udGVzdChzdHIpXHJcblx0XHQvLyBpZihzdHJJc09iail7XHJcblx0XHQvLyBcdGNvbnNvbGUuZXJyb3IoJ0pTT04g6Kej5p6Q5aSx6LSlOicsIGUsICdcXG7ljp/lp4vlrZfnrKbkuLI6Jywgc3RyKVxyXG5cdFx0Ly8gfVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiDmoLnmja7mjIflrprnmoTplK7mlbDnu4Tov4fmu6Tlr7nosaFcclxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIOimgei/h+a7pOeahOWOn+Wni+WvueixoVxyXG4gKiBAcGFyYW0ge0FycmF5fSBrZXlzIC0g6ZyA6KaB5L+d55WZ55qE6ZSu5pWw57uEXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IOi/h+a7pOWQjueahOaWsOWvueixoVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGZpbHRlck9iamVjdEJ5S2V5cyA9IChvYmo6IGFueSwga2V5czogc3RyaW5nW10pID0+IHtcclxuXHQvLyDlj4LmlbDmoKHpqoxcclxuXHRpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcign56ys5LiA5Liq5Y+C5pWw5b+F6aG75piv5pmu6YCa5a+56LGhJyk7XHJcblx0fVxyXG5cclxuXHRpZiAoIUFycmF5LmlzQXJyYXkoa2V5cykpIHtcclxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ+esrOS6jOS4quWPguaVsOW/hemhu+aYr+aVsOe7hCcpO1xyXG5cdH1cclxuXHJcblx0Ly8g5L2/55SocmVkdWNl5Yib5bu65paw5a+56LGhXHJcblx0cmV0dXJuIGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcpID0+IHtcclxuXHRcdC8vIOWPquacieW9k+WOn+WvueixoeacieivpeWxnuaAp+aXtuaJjea3u+WKoOWIsOaWsOWvueixoVxyXG5cdFx0aWYgKGtleSBpbiBvYmopIHtcclxuXHRcdFx0YWNjW2tleV0gPSBvYmpba2V5XTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBhY2M7XHJcblx0fSwge30pO1xyXG59O1xyXG4iXX0=
|