raise-common-lib-new 0.0.15 → 0.0.21
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/assets/language/fr.d.ts +3377 -0
- package/assets/language/ja.d.ts +3351 -0
- package/assets/language/ko.d.ts +3351 -0
- package/assets/language/zh-CN.d.ts +3064 -0
- package/assets/language/zh-TW.d.ts +3354 -0
- package/esm2022/assets/language/fr.mjs +3378 -0
- package/esm2022/assets/language/ja.mjs +3352 -0
- package/esm2022/assets/language/ko.mjs +3352 -0
- package/esm2022/assets/language/zh-CN.mjs +3065 -0
- package/esm2022/assets/language/zh-TW.mjs +3355 -0
- package/esm2022/lib/commentary/constants.mjs +2 -0
- package/esm2022/lib/commentary/index.component.mjs +146 -0
- package/esm2022/lib/common-grid/grid-action/grid-action-item/grid-action-item.component.mjs +44 -0
- package/esm2022/lib/common-grid/grid-action/grid-action.component.mjs +18 -0
- package/esm2022/lib/common-grid/index.component.mjs +52 -30
- package/esm2022/lib/dialog/common-delete-dialog/index.component.mjs +2 -2
- package/esm2022/lib/dialog/common-dialog/index.component.mjs +4 -4
- package/esm2022/lib/form/checkbox-group/index.component.mjs +2 -2
- package/esm2022/lib/form/drawer-form/constants.mjs +10 -0
- package/esm2022/lib/form/drawer-form/drawer-form.component.mjs +336 -0
- package/esm2022/lib/form/encrypted-input/index.component.mjs +35 -0
- package/esm2022/lib/form/radio-group/index.component.mjs +2 -2
- package/esm2022/lib/form/switch-input/index.component.mjs +2 -2
- package/esm2022/lib/form/tag-input/index.component.mjs +31 -11
- package/esm2022/lib/form/toolbar-item/index.component.mjs +56 -0
- package/esm2022/lib/layout/drawer/index.component.mjs +165 -0
- package/esm2022/lib/layout/grid-box/index.component.mjs +67 -0
- package/esm2022/lib/layout/main-container/index.component.mjs +50 -8
- package/esm2022/lib/layout/multi-tab/index.component.mjs +267 -0
- package/esm2022/lib/layout/nav-card-group/constants.mjs +2 -0
- package/esm2022/lib/layout/nav-card-group/index.component.mjs +37 -0
- package/esm2022/lib/layout/page-list/index.component.mjs +73 -0
- package/esm2022/lib/layout/page-tab/index.component.mjs +56 -0
- package/esm2022/lib/layout/rs-aside/index.component.mjs +55 -10
- package/esm2022/lib/layout/rs-footer/index.component.mjs +2 -2
- package/esm2022/lib/layout/rs-header/index.component.mjs +38 -29
- package/esm2022/lib/layout/toolbar/constants.mjs +2 -0
- package/esm2022/lib/layout/toolbar/index.component.mjs +79 -0
- package/esm2022/lib/raise-common-lib.module.mjs +116 -17
- package/esm2022/lib/service/common-function.service.mjs +125 -1
- package/esm2022/lib/service/dialog.service.mjs +5 -5
- package/esm2022/lib/service/drawer.service.mjs +111 -0
- package/esm2022/lib/service/icon-loader.service.mjs +12 -9
- package/esm2022/lib/service/keep-alive.service.mjs +83 -0
- package/esm2022/lib/service/translation.service.mjs +98 -0
- package/esm2022/lib/utils/decorator.mjs +14 -0
- package/esm2022/public-api.mjs +35 -16
- package/fesm2022/raise-common-lib-new.mjs +18952 -538
- package/fesm2022/raise-common-lib-new.mjs.map +1 -1
- package/lib/commentary/constants.d.ts +15 -0
- package/lib/commentary/index.component.d.ts +38 -0
- package/lib/common-grid/grid-action/grid-action-item/grid-action-item.component.d.ts +10 -0
- package/lib/common-grid/grid-action/grid-action.component.d.ts +14 -0
- package/lib/common-grid/index.component.d.ts +8 -5
- package/lib/float-box/index.component.d.ts +2 -2
- package/lib/form/drawer-form/constants.d.ts +34 -0
- package/lib/form/drawer-form/drawer-form.component.d.ts +67 -0
- package/lib/form/encrypted-input/index.component.d.ts +14 -0
- package/lib/form/tag-input/index.component.d.ts +9 -3
- package/lib/form/toolbar-item/index.component.d.ts +17 -0
- package/lib/layout/drawer/index.component.d.ts +45 -0
- package/lib/layout/grid-box/index.component.d.ts +19 -0
- package/lib/layout/main-container/index.component.d.ts +11 -1
- package/lib/layout/multi-tab/index.component.d.ts +53 -0
- package/lib/layout/nav-card-group/constants.d.ts +14 -0
- package/lib/layout/nav-card-group/index.component.d.ts +16 -0
- package/lib/layout/page-list/index.component.d.ts +21 -0
- package/lib/layout/page-tab/index.component.d.ts +18 -0
- package/lib/layout/rs-aside/index.component.d.ts +8 -3
- package/lib/layout/rs-header/index.component.d.ts +12 -12
- package/lib/layout/toolbar/constants.d.ts +8 -0
- package/lib/layout/toolbar/index.component.d.ts +22 -0
- package/lib/raise-common-lib.module.d.ts +48 -34
- package/lib/service/common-function.service.d.ts +11 -0
- package/lib/service/drawer.service.d.ts +46 -0
- package/lib/service/icon-loader.service.d.ts +5 -3
- package/lib/service/keep-alive.service.d.ts +15 -0
- package/lib/service/translation.service.d.ts +12 -0
- package/lib/utils/decorator.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +34 -15
- package/src/assets/img/close-url.svg +10 -0
- package/src/assets/img/comment-cancel.svg +4 -0
- package/src/assets/img/comment-check.svg +5 -0
- package/src/assets/img/desktop-refresh-btn.svg +6 -0
- package/src/assets/img/down-arrow.svg +3 -0
- package/src/assets/img/drawer-back.svg +4 -0
- package/src/assets/img/eye-close.svg +4 -0
- package/src/assets/img/eye-open.svg +4 -0
- package/src/assets/img/grid-action-copy.svg +6 -0
- package/src/assets/img/grid-action-delete.svg +14 -0
- package/src/assets/img/grid-action-detail.svg +7 -0
- package/src/assets/img/grid-action-download.svg +7 -0
- package/src/assets/img/grid-action-edit.svg +4 -0
- package/src/assets/img/grid-action-export.svg +12 -0
- package/src/assets/img/grid-action-move.svg +8 -0
- package/src/assets/img/grid-action-note.svg +10 -0
- package/src/assets/img/grid-action-send.svg +5 -0
- package/src/assets/img/grid-action-settle.svg +13 -0
- package/src/assets/img/grid-menu-arrow-right.svg +3 -0
- package/src/assets/img/grid-pager-arrow-left.svg +3 -0
- package/src/assets/img/grid-pager-arrows-left.svg +4 -0
- package/src/assets/img/icon-more-active.svg +7 -0
- package/src/assets/img/icon-more.svg +7 -0
- package/src/assets/img/more.svg +5 -0
- package/src/assets/img/split-button-arrow.svg +3 -0
- package/src/assets/img/table-column-menu.svg +5 -0
- package/src/assets/img/table-sort-arrow.svg +6 -0
- package/src/assets/img/toolbar-action-add.svg +4 -0
- package/src/assets/img/toolbar-action-delete.svg +14 -0
- package/src/assets/img/toolbar-action-download.svg +5 -0
- package/src/assets/img/toolbar-action-duplicate.svg +6 -0
- package/src/assets/img/toolbar-action-export.svg +5 -0
- package/src/assets/img/toolbar-action-import.svg +5 -0
- package/src/assets/img/toolbar-action-refresh.svg +14 -0
- package/src/assets/img/toolbar-action-upload.svg +5 -0
- package/src/assets/img/tooltip-icon.svg +4 -0
- package/src/assets/language/fr.ts +3603 -0
- package/src/assets/language/ja.ts +3501 -0
- package/src/assets/language/ko.ts +3478 -0
- package/src/assets/language/zh-CN.ts +3115 -0
- package/src/assets/language/zh-TW.ts +3411 -0
- package/src/assets/style/reset/button.scss +78 -10
- package/src/assets/style/reset/checkbox.scss +33 -0
- package/src/assets/style/reset/dropdown.scss +42 -10
- package/src/assets/style/reset/grid.scss +733 -132
- package/src/assets/style/reset/input.scss +45 -12
- package/src/assets/style/reset/mat-dialog.scss +6 -2
- package/src/assets/style/reset/radio.scss +37 -0
- package/src/assets/style/reset/switch.scss +32 -0
- package/src/assets/style/style.scss +6 -0
- package/src/assets/style/syncfusion.min.css +1 -1
- package/src/assets/style/variables.scss +4 -4
- package/esm2022/lib/layout/common-list/index.component.mjs +0 -43
- package/lib/layout/common-list/index.component.d.ts +0 -15
|
@@ -1,18 +1,60 @@
|
|
|
1
1
|
// 组件类
|
|
2
|
-
import { Component, Input } from "@angular/core";
|
|
2
|
+
import { Component, ContentChild, HostListener, Input, ViewChild, } from "@angular/core";
|
|
3
|
+
import { RSHeaderComponent } from "../rs-header/index.component";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "
|
|
5
|
-
import * as i2 from "
|
|
5
|
+
import * as i1 from "../../service/drawer.service";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "../rs-footer/index.component";
|
|
8
|
+
import * as i4 from "../drawer/index.component";
|
|
6
9
|
export class MainContainerComponent {
|
|
10
|
+
globalDrawer;
|
|
11
|
+
headerRef;
|
|
12
|
+
drawer;
|
|
7
13
|
isCollapsed = false; // 接收输入属性
|
|
14
|
+
singleReuseUrls = []; //只能单个缓存的url
|
|
15
|
+
constructor(globalDrawer) {
|
|
16
|
+
this.globalDrawer = globalDrawer;
|
|
17
|
+
}
|
|
8
18
|
ngOnInit() { }
|
|
9
|
-
|
|
10
|
-
|
|
19
|
+
onResize(event) {
|
|
20
|
+
const screenWidth = window.innerWidth; // 更新屏幕宽度
|
|
21
|
+
if (screenWidth <= 992) {
|
|
22
|
+
this.headerRef && this.headerRef.onToggleMenu(false);
|
|
23
|
+
}
|
|
24
|
+
else if (screenWidth < 1200) {
|
|
25
|
+
this.headerRef && this.headerRef.onToggleMenu(true);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.headerRef && this.headerRef.onToggleMenu(false);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
ngAfterViewInit() {
|
|
32
|
+
this.globalDrawer.setDrawer(this.drawer); // 设置抽屉组件
|
|
33
|
+
}
|
|
34
|
+
onRightAsideClick() {
|
|
35
|
+
const screenWidth = window.innerWidth;
|
|
36
|
+
if (screenWidth <= 992 && this.isCollapsed) {
|
|
37
|
+
this.headerRef && this.headerRef.onToggleMenu();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MainContainerComponent, deps: [{ token: i1.DrawerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MainContainerComponent, selector: "rs-main-container", inputs: { isCollapsed: "isCollapsed", singleReuseUrls: "singleReuseUrls" }, host: { listeners: { "window:resize": "onResize($event)" } }, queries: [{ propertyName: "headerRef", first: true, predicate: RSHeaderComponent, descendants: true, static: true }], viewQueries: [{ propertyName: "drawer", first: true, predicate: ["drawer"], descendants: true }], ngImport: i0, template: "<div class=\"app-main-container\">\r\n <ng-content select=\"[headerSlot]\"></ng-content>\r\n <div class=\"main-page\">\r\n <div class=\"left-aside\">\r\n <ng-content select=\"[leftAsideSlot]\"></ng-content>\r\n </div>\r\n <div\r\n class=\"right-aside\"\r\n [ngClass]=\"{ isCollapsed: isCollapsed }\"\r\n (click)=\"onRightAsideClick()\"\r\n >\r\n <ng-content select=\"[multiTabSlot]\"></ng-content>\r\n <!-- <rs-multi-tab [singleReuseUrls]=\"singleReuseUrls\"></rs-multi-tab> -->\r\n <div class=\"router-content\">\r\n <rs-drawer #drawer>\r\n <ng-content select=\"[routerSlot]\"></ng-content>\r\n </rs-drawer>\r\n </div>\r\n <rs-footer></rs-footer>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".app-main-container{display:flex;flex-direction:column;height:100vh}.app-main-container .main-page{flex:1;height:0;display:flex;background-color:var(--rs-container-bg)}.app-main-container .left-aside{height:100%}.app-main-container .right-aside{width:0;flex:1;display:flex;flex-direction:column;padding-right:12px}.app-main-container .right-aside .router-content{flex:1;overflow:auto;max-width:1886px;width:100%;margin:0 auto}@media (max-width: 992px){.app-main-container .right-aside.isCollapsed{position:relative}.app-main-container .right-aside.isCollapsed:after{content:\" \";position:absolute;z-index:5;inset:0;background-color:#0003}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.RSFooterComponent, selector: "rs-footer" }, { kind: "component", type: i4.DrawerComponent, selector: "rs-drawer" }] });
|
|
11
42
|
}
|
|
12
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MainContainerComponent, decorators: [{
|
|
13
44
|
type: Component,
|
|
14
|
-
args: [{ selector: "rs-main-container", template: "<div class=\"app-main-container\">\r\n <ng-content select=\"[headerSlot]\"></ng-content>\r\n <div class=\"main-page\">\r\n <div class=\"left-aside\"
|
|
15
|
-
}], propDecorators: {
|
|
45
|
+
args: [{ selector: "rs-main-container", template: "<div class=\"app-main-container\">\r\n <ng-content select=\"[headerSlot]\"></ng-content>\r\n <div class=\"main-page\">\r\n <div class=\"left-aside\">\r\n <ng-content select=\"[leftAsideSlot]\"></ng-content>\r\n </div>\r\n <div\r\n class=\"right-aside\"\r\n [ngClass]=\"{ isCollapsed: isCollapsed }\"\r\n (click)=\"onRightAsideClick()\"\r\n >\r\n <ng-content select=\"[multiTabSlot]\"></ng-content>\r\n <!-- <rs-multi-tab [singleReuseUrls]=\"singleReuseUrls\"></rs-multi-tab> -->\r\n <div class=\"router-content\">\r\n <rs-drawer #drawer>\r\n <ng-content select=\"[routerSlot]\"></ng-content>\r\n </rs-drawer>\r\n </div>\r\n <rs-footer></rs-footer>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".app-main-container{display:flex;flex-direction:column;height:100vh}.app-main-container .main-page{flex:1;height:0;display:flex;background-color:var(--rs-container-bg)}.app-main-container .left-aside{height:100%}.app-main-container .right-aside{width:0;flex:1;display:flex;flex-direction:column;padding-right:12px}.app-main-container .right-aside .router-content{flex:1;overflow:auto;max-width:1886px;width:100%;margin:0 auto}@media (max-width: 992px){.app-main-container .right-aside.isCollapsed{position:relative}.app-main-container .right-aside.isCollapsed:after{content:\" \";position:absolute;z-index:5;inset:0;background-color:#0003}}\n"] }]
|
|
46
|
+
}], ctorParameters: function () { return [{ type: i1.DrawerService }]; }, propDecorators: { headerRef: [{
|
|
47
|
+
type: ContentChild,
|
|
48
|
+
args: [RSHeaderComponent, { static: true }]
|
|
49
|
+
}], drawer: [{
|
|
50
|
+
type: ViewChild,
|
|
51
|
+
args: ["drawer", { static: false }]
|
|
52
|
+
}], isCollapsed: [{
|
|
16
53
|
type: Input
|
|
54
|
+
}], singleReuseUrls: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}], onResize: [{
|
|
57
|
+
type: HostListener,
|
|
58
|
+
args: ["window:resize", ["$event"]]
|
|
17
59
|
}] } });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2xheW91dC9tYWluLWNvbnRhaW5lci9pbmRleC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYWlzZS1jb21tb24tbGliL3NyYy9saWIvbGF5b3V0L21haW4tY29udGFpbmVyL2luZGV4LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU07QUFDTixPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBU2pFLE1BQU0sT0FBTyxzQkFBc0I7SUFPYjtJQU4rQixTQUFTLENBQUM7SUFDckIsTUFBTSxDQUFrQjtJQUV2RCxXQUFXLEdBQVksS0FBSyxDQUFDLENBQUMsU0FBUztJQUN2QyxlQUFlLEdBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTtJQUVyRCxZQUFvQixZQUEyQjtRQUEzQixpQkFBWSxHQUFaLFlBQVksQ0FBZTtJQUFHLENBQUM7SUFFbkQsUUFBUSxLQUFJLENBQUM7SUFHYixRQUFRLENBQUMsS0FBSztRQUNaLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTO1FBQ2hELElBQUksV0FBVyxJQUFJLEdBQUcsRUFBRTtZQUN0QixJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3REO2FBQU0sSUFBSSxXQUFXLEdBQUcsSUFBSSxFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7SUFDckQsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDdEMsSUFBSSxXQUFXLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQzt3R0FoQ1Usc0JBQXNCOzRGQUF0QixzQkFBc0IsME9BQ25CLGlCQUFpQixnS0NuQmpDLG13QkFzQkE7OzRGREphLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxtQkFBbUI7b0dBS3NCLFNBQVM7c0JBQTNELFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNULE1BQU07c0JBQTdDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFN0IsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9OLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDnu4Tku7bnsbtcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJTSGVhZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL3JzLWhlYWRlci9pbmRleC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRHJhd2VyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2RyYXdlci9pbmRleC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRHJhd2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2RyYXdlci5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1tYWluLWNvbnRhaW5lclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vaW5kZXguY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vaW5kZXguY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYWluQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAQ29udGVudENoaWxkKFJTSGVhZGVyQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBoZWFkZXJSZWY7XHJcbiAgQFZpZXdDaGlsZChcImRyYXdlclwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZHJhd2VyOiBEcmF3ZXJDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIGlzQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7IC8vIOaOpeaUtui+k+WFpeWxnuaAp1xyXG4gIEBJbnB1dCgpIHNpbmdsZVJldXNlVXJsczogc3RyaW5nW10gPSBbXTsgLy/lj6rog73ljZXkuKrnvJPlrZjnmoR1cmxcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnbG9iYWxEcmF3ZXI6IERyYXdlclNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIG9uUmVzaXplKGV2ZW50KSB7XHJcbiAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOyAvLyDmm7TmlrDlsY/luZXlrr3luqZcclxuICAgIGlmIChzY3JlZW5XaWR0aCA8PSA5OTIpIHtcclxuICAgICAgdGhpcy5oZWFkZXJSZWYgJiYgdGhpcy5oZWFkZXJSZWYub25Ub2dnbGVNZW51KGZhbHNlKTtcclxuICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPCAxMjAwKSB7XHJcbiAgICAgIHRoaXMuaGVhZGVyUmVmICYmIHRoaXMuaGVhZGVyUmVmLm9uVG9nZ2xlTWVudSh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGVhZGVyUmVmICYmIHRoaXMuaGVhZGVyUmVmLm9uVG9nZ2xlTWVudShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmdsb2JhbERyYXdlci5zZXREcmF3ZXIodGhpcy5kcmF3ZXIpOyAvLyDorr7nva7mir3lsYnnu4Tku7ZcclxuICB9XHJcblxyXG4gIG9uUmlnaHRBc2lkZUNsaWNrKCkge1xyXG4gICAgY29uc3Qgc2NyZWVuV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIGlmIChzY3JlZW5XaWR0aCA8PSA5OTIgJiYgdGhpcy5pc0NvbGxhcHNlZCkge1xyXG4gICAgICB0aGlzLmhlYWRlclJlZiAmJiB0aGlzLmhlYWRlclJlZi5vblRvZ2dsZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImFwcC1tYWluLWNvbnRhaW5lclwiPlxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJTbG90XVwiPjwvbmctY29udGVudD5cclxuICA8ZGl2IGNsYXNzPVwibWFpbi1wYWdlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGVmdC1hc2lkZVwiPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGVmdEFzaWRlU2xvdF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJyaWdodC1hc2lkZVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgaXNDb2xsYXBzZWQ6IGlzQ29sbGFwc2VkIH1cIlxyXG4gICAgICAoY2xpY2spPVwib25SaWdodEFzaWRlQ2xpY2soKVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttdWx0aVRhYlNsb3RdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICA8IS0tIDxycy1tdWx0aS10YWIgW3NpbmdsZVJldXNlVXJsc109XCJzaW5nbGVSZXVzZVVybHNcIj48L3JzLW11bHRpLXRhYj4gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3V0ZXItY29udGVudFwiPlxyXG4gICAgICAgIDxycy1kcmF3ZXIgI2RyYXdlcj5cclxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltyb3V0ZXJTbG90XVwiPjwvbmctY29udGVudD5cclxuICAgICAgICA8L3JzLWRyYXdlcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxycy1mb290ZXI+PC9ycy1mb290ZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
// 组件类
|
|
2
|
+
import { Component, EventEmitter, HostListener, Input, Output, } from "@angular/core";
|
|
3
|
+
import { NavigationEnd, } from "@angular/router";
|
|
4
|
+
import { filter } from "rxjs/operators";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
import * as i2 from "../../service/common-function.service";
|
|
8
|
+
import * as i3 from "../../service/drawer.service";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
import * as i5 from "@syncfusion/ej2-angular-popups";
|
|
11
|
+
export class MultiTabComponent {
|
|
12
|
+
router;
|
|
13
|
+
cf;
|
|
14
|
+
activatedRoute;
|
|
15
|
+
ref;
|
|
16
|
+
drawer;
|
|
17
|
+
routeReuseStrategy;
|
|
18
|
+
constructor(router, cf, activatedRoute, ref, drawer, routeReuseStrategy) {
|
|
19
|
+
this.router = router;
|
|
20
|
+
this.cf = cf;
|
|
21
|
+
this.activatedRoute = activatedRoute;
|
|
22
|
+
this.ref = ref;
|
|
23
|
+
this.drawer = drawer;
|
|
24
|
+
this.routeReuseStrategy = routeReuseStrategy;
|
|
25
|
+
this.keepAlive = this.routeReuseStrategy;
|
|
26
|
+
}
|
|
27
|
+
keepAlive;
|
|
28
|
+
singleReuseUrls = []; //只能单个缓存的url
|
|
29
|
+
noGenerateTabUrls = []; //不生成tab的url
|
|
30
|
+
onRefreshTab = new EventEmitter();
|
|
31
|
+
subscriptions = [];
|
|
32
|
+
TAB_WIDTH = 164;
|
|
33
|
+
GAP_NORMAL = 54;
|
|
34
|
+
GAP_SMALL = 30;
|
|
35
|
+
textGap; // 文本与边框的总间距
|
|
36
|
+
foo;
|
|
37
|
+
comRef;
|
|
38
|
+
tabList = [];
|
|
39
|
+
selectedTab = 0;
|
|
40
|
+
maxTabs = 10;
|
|
41
|
+
screenWidth = window.innerWidth; // 初始化屏幕宽度
|
|
42
|
+
onResize(event) {
|
|
43
|
+
this.screenWidth = window.innerWidth; // 更新屏幕宽度
|
|
44
|
+
this.setEllipsisTitle();
|
|
45
|
+
}
|
|
46
|
+
ngOnInit() {
|
|
47
|
+
this.initTab();
|
|
48
|
+
// 解决刷新页面后,选中的 tab 丢失问题
|
|
49
|
+
const isExistIdx = this.tabList.findIndex((ele) => this.urlWithoutQuery(ele.url) ===
|
|
50
|
+
this.urlWithoutQuery(this.router.url));
|
|
51
|
+
if (isExistIdx !== -1) {
|
|
52
|
+
this.selectedTab = isExistIdx;
|
|
53
|
+
}
|
|
54
|
+
this.subscriptions.push(this.router.events
|
|
55
|
+
.pipe(filter((event) => event instanceof NavigationEnd))
|
|
56
|
+
.subscribe(() => {
|
|
57
|
+
const navigation = this.router.getCurrentNavigation(); // 获取当前导航
|
|
58
|
+
if (navigation) {
|
|
59
|
+
const tooltipElements = document.querySelectorAll(".e-popup-open");
|
|
60
|
+
// 删除tooltips
|
|
61
|
+
tooltipElements.forEach((element) => {
|
|
62
|
+
const htmlElement = element;
|
|
63
|
+
htmlElement.style.display = "none";
|
|
64
|
+
});
|
|
65
|
+
const state = navigation.extras.state; // 获取传递的 state
|
|
66
|
+
const skipLocationChange = navigation.extras.skipLocationChange; // 获取是否跳过 location change
|
|
67
|
+
const currentRoute = this.router.routerState.root.firstChild;
|
|
68
|
+
const navigationInfo = JSON.parse(sessionStorage.getItem("navigationInfo") || "{}");
|
|
69
|
+
let title = (state && state.title) ||
|
|
70
|
+
navigationInfo.title ||
|
|
71
|
+
navigationInfo.subTitle ||
|
|
72
|
+
navigationInfo.name;
|
|
73
|
+
let noReused = (state && state.noReused) || false; // 当前tab不复用,新开一个tab,当有已经存在的tab时候也是新开
|
|
74
|
+
if (currentRoute && !skipLocationChange) {
|
|
75
|
+
if (this.noGenerateTabUrls.includes(this.urlWithoutQuery(this.router.url))) {
|
|
76
|
+
return; // 排除不生成tab的url
|
|
77
|
+
}
|
|
78
|
+
this.setTab(this.router.url, currentRoute.snapshot.routeConfig.path, title, noReused);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
ngAfterViewInit() {
|
|
84
|
+
setTimeout(() => {
|
|
85
|
+
this.setEllipsisTitle();
|
|
86
|
+
}, 50);
|
|
87
|
+
}
|
|
88
|
+
ngOnDestroy() {
|
|
89
|
+
this.subscriptions.forEach((sub) => sub.unsubscribe());
|
|
90
|
+
}
|
|
91
|
+
setEllipsisTitle(title) {
|
|
92
|
+
this.textGap = this.GAP_NORMAL;
|
|
93
|
+
if (this.screenWidth <= 1100) {
|
|
94
|
+
this.textGap = this.GAP_SMALL;
|
|
95
|
+
}
|
|
96
|
+
let { allWidth, leftWidth, rightWidth } = this.calcTabWidth();
|
|
97
|
+
let width = Math.floor((allWidth - rightWidth) / (this.tabList && this.tabList.length));
|
|
98
|
+
if (title) {
|
|
99
|
+
return this.cf.setMiddleEllipsis(title, width > this.TAB_WIDTH
|
|
100
|
+
? this.TAB_WIDTH - this.textGap
|
|
101
|
+
: width - this.textGap, 12);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.tabList.forEach((ele, idx) => {
|
|
105
|
+
ele.displayTitle = this.cf.setMiddleEllipsis(ele.title, width > this.TAB_WIDTH
|
|
106
|
+
? this.TAB_WIDTH - this.textGap
|
|
107
|
+
: width - this.textGap, 12);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
calcTabWidth() {
|
|
112
|
+
const wrap = document.querySelector(".rs-multi-tab");
|
|
113
|
+
const ulElement = document.querySelector(".rs-multi-tab > ul");
|
|
114
|
+
const refreshTabDiv = document.querySelector(".rs-multi-tab .refresh-tab");
|
|
115
|
+
let allWidth;
|
|
116
|
+
let leftWidth;
|
|
117
|
+
let rightWidth;
|
|
118
|
+
if (wrap && ulElement) {
|
|
119
|
+
// 获取元素的位置信息
|
|
120
|
+
const wrapRect = wrap.getBoundingClientRect();
|
|
121
|
+
const ulRect = ulElement.getBoundingClientRect();
|
|
122
|
+
const refreshTabRect = refreshTabDiv && refreshTabDiv.getBoundingClientRect();
|
|
123
|
+
allWidth = wrapRect.width;
|
|
124
|
+
leftWidth = ulRect.width;
|
|
125
|
+
rightWidth = (refreshTabRect && refreshTabRect.width) || 100;
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
allWidth,
|
|
129
|
+
leftWidth,
|
|
130
|
+
rightWidth,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
initTab() {
|
|
134
|
+
let TabCache = JSON.parse(sessionStorage.getItem("TabCache"));
|
|
135
|
+
this.tabList = TabCache || [];
|
|
136
|
+
if (this.tabList.length === 0) {
|
|
137
|
+
const title = sessionStorage.getItem("firstTabTitle");
|
|
138
|
+
if (title) {
|
|
139
|
+
sessionStorage.removeItem("firstTabTitle");
|
|
140
|
+
const url = this.router.url;
|
|
141
|
+
this.addTab(url, title);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
closeTab(idx, isExternal) {
|
|
146
|
+
const tab = this.tabList[idx];
|
|
147
|
+
this.tabList = this.tabList.filter((ele) => ele.url !== tab.url);
|
|
148
|
+
this.clearCache(this.urlWithoutQuery(tab.url));
|
|
149
|
+
if (!isExternal && this.selectedTab === idx) {
|
|
150
|
+
const targetIdx = Math.max(0, idx - 1);
|
|
151
|
+
this.changeTab(this.tabList[targetIdx], targetIdx);
|
|
152
|
+
}
|
|
153
|
+
if (idx < this.selectedTab) {
|
|
154
|
+
this.selectedTab = this.selectedTab - 1; // 如果关闭的tab在当前选中的tab之前,选中tab索引减1
|
|
155
|
+
}
|
|
156
|
+
this.setEllipsisTitle();
|
|
157
|
+
sessionStorage.setItem("TabCache", JSON.stringify(this.tabList));
|
|
158
|
+
this.ref.markForCheck();
|
|
159
|
+
}
|
|
160
|
+
changeTab(tab, idx) {
|
|
161
|
+
this.router.navigateByUrl(tab.url);
|
|
162
|
+
if (tab.navigationInfo) {
|
|
163
|
+
sessionStorage.setItem("navigationInfo", JSON.stringify(tab.navigationInfo));
|
|
164
|
+
}
|
|
165
|
+
if (tab.fromUrl) {
|
|
166
|
+
sessionStorage.setItem("fromUrl", tab.fromUrl);
|
|
167
|
+
}
|
|
168
|
+
if (tab.permissions) {
|
|
169
|
+
sessionStorage.setItem("permissions", JSON.stringify(tab.permissions));
|
|
170
|
+
}
|
|
171
|
+
this.selectedTab = idx;
|
|
172
|
+
this.ref.markForCheck();
|
|
173
|
+
}
|
|
174
|
+
addTab(url, title) {
|
|
175
|
+
if (this.tabList.length >= this.maxTabs) {
|
|
176
|
+
this.closeTab(1); // 删除第二个,第一个固定
|
|
177
|
+
}
|
|
178
|
+
const localPermissions = sessionStorage.getItem("permissions") ||
|
|
179
|
+
localStorage.getItem("permissions");
|
|
180
|
+
const navigationInfo = JSON.parse(sessionStorage.getItem("navigationInfo"));
|
|
181
|
+
const fromUrl = sessionStorage.getItem("fromUrl");
|
|
182
|
+
const permissions = JSON.parse(localPermissions);
|
|
183
|
+
this.tabList.push({
|
|
184
|
+
url: url,
|
|
185
|
+
title: title || "default",
|
|
186
|
+
displayTitle: title,
|
|
187
|
+
navigationInfo: navigationInfo,
|
|
188
|
+
permissions: permissions,
|
|
189
|
+
fromUrl: fromUrl,
|
|
190
|
+
});
|
|
191
|
+
this.selectedTab = this.tabList.length - 1;
|
|
192
|
+
this.setEllipsisTitle();
|
|
193
|
+
sessionStorage.setItem("TabCache", JSON.stringify(this.tabList));
|
|
194
|
+
this.ref.markForCheck();
|
|
195
|
+
}
|
|
196
|
+
setTab(url, pureUrl, title, noReused) {
|
|
197
|
+
const isExistIdx = this.tabList.findIndex((ele) => this.urlWithoutQuery(ele.url) === this.urlWithoutQuery(url));
|
|
198
|
+
if (isExistIdx === -1) {
|
|
199
|
+
const singleIdx = this.singleReuseUrls.findIndex((ele) => ele === pureUrl);
|
|
200
|
+
if (singleIdx !== -1) {
|
|
201
|
+
this.tabList = this.tabList.filter((ele) => !ele.url.includes(this.singleReuseUrls[singleIdx]));
|
|
202
|
+
this.keepAlive.clearCache(url);
|
|
203
|
+
this.drawer.deleteCache(url);
|
|
204
|
+
}
|
|
205
|
+
this.addTab(url, title);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
const targetTabUrl = this.tabList[isExistIdx].url;
|
|
209
|
+
if (targetTabUrl !== url || noReused) {
|
|
210
|
+
// 当缓存一致时候,但是url不一致,重新按照新的url生成tab
|
|
211
|
+
this.closeTab(isExistIdx, true);
|
|
212
|
+
this.addTab(url, title);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.changeTab(this.tabList[isExistIdx], isExistIdx);
|
|
216
|
+
}
|
|
217
|
+
this.ref.markForCheck();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
timer = null;
|
|
221
|
+
refreshTab() {
|
|
222
|
+
const loadingIcon = document.getElementById("loadingIcon");
|
|
223
|
+
loadingIcon.classList.add("refresh-tab-loading");
|
|
224
|
+
if (this.timer) {
|
|
225
|
+
clearInterval(this.timer);
|
|
226
|
+
}
|
|
227
|
+
// 模拟加载过程,1秒后移除动画
|
|
228
|
+
this.timer = setTimeout(() => {
|
|
229
|
+
loadingIcon.classList.remove("refresh-tab-loading");
|
|
230
|
+
this.timer = null;
|
|
231
|
+
}, 1500);
|
|
232
|
+
// this.keepAlive.clearCache(this.tabList[this.selectedTab].url);
|
|
233
|
+
// this.drawer.deleteCache(this.tabList[this.selectedTab].url);
|
|
234
|
+
const currentUrl = this.router.url; // 获取当前 URL
|
|
235
|
+
this.onRefreshTab.emit(currentUrl);
|
|
236
|
+
// this.router.navigateByUrl("/", { skipLocationChange: true }).then(() => {
|
|
237
|
+
// this.router.navigateByUrl(currentUrl); // 重新导航到当前 URL
|
|
238
|
+
// });
|
|
239
|
+
}
|
|
240
|
+
clearCache(url) {
|
|
241
|
+
this.keepAlive.clearCache(url); // 调用自定义策略的清除缓存方法
|
|
242
|
+
this.drawer.deleteCache(url);
|
|
243
|
+
}
|
|
244
|
+
cleanAllCache() {
|
|
245
|
+
this.ngOnDestroy();
|
|
246
|
+
this.keepAlive.clearAllCache(); // 调用自定义策略的清除缓存方法
|
|
247
|
+
}
|
|
248
|
+
urlWithoutQuery(url) {
|
|
249
|
+
return url.split("?")[0];
|
|
250
|
+
}
|
|
251
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiTabComponent, deps: [{ token: i1.Router }, { token: i2.CommonFunctionService }, { token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i3.DrawerService }, { token: i1.RouteReuseStrategy }], target: i0.ɵɵFactoryTarget.Component });
|
|
252
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MultiTabComponent, selector: "rs-multi-tab", inputs: { singleReuseUrls: "singleReuseUrls", noGenerateTabUrls: "noGenerateTabUrls" }, outputs: { onRefreshTab: "onRefreshTab" }, host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<div class=\"rs-multi-tab\" [ngClass]=\"{ 'b-line': tabList.length > 0 }\">\r\n\t<ul>\r\n\t\t<ng-container *ngFor=\"let tab of tabList; let i = index\">\r\n\t\t\t<li\r\n\t\t\t\t[ngClass]=\"selectedTab === i ? 'isSelect' : 'notSelect'\"\r\n\t\t\t\t(click)=\"changeTab(tab, i)\"\r\n\t\t\t>\r\n\t\t\t\t<ejs-tooltip\r\n\t\t\t\t\tid=\"notSelectTooltip\"\r\n\t\t\t\t\t[showTipPointer]=\"false\"\r\n\t\t\t\t\t[openDelay]=\"500\"\r\n\t\t\t\t\t*ngIf=\"tab.displayTitle !== tab.title; else originText\"\r\n\t\t\t\t\tstyle=\"height: 27px\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<ng-template #content>\r\n\t\t\t\t\t\t<div class=\"tooltip-content\">\r\n\t\t\t\t\t\t\t{{ tab.title }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t<span class=\"tabTitle\">{{ tab.displayTitle }}</span>\r\n\t\t\t\t</ejs-tooltip>\r\n\t\t\t\t<ng-template #originText>\r\n\t\t\t\t\t<span class=\"tabTitle\">\r\n\t\t\t\t\t\t{{ tab.displayTitle }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<span\r\n\t\t\t\t\tclass=\"img-block\"\r\n\t\t\t\t\t*ngIf=\"selectedTab !== i && i !== 0\"\r\n\t\t\t\t></span>\r\n\t\t\t\t<img\r\n\t\t\t\t\t*ngIf=\"i !== 0\"\r\n\t\t\t\t\tsrc=\"../../../assets/img/close-url.svg\"\r\n\t\t\t\t\t(click)=\"closeTab(i)\"\r\n\t\t\t\t/>\r\n\t\t\t</li>\r\n\t\t</ng-container>\r\n\t</ul>\r\n\t<div class=\"refresh-tab\" (click)=\"refreshTab()\" *ngIf=\"tabList.length > 0\">\r\n\t\t<ejs-tooltip\r\n\t\t\tid=\"notSelectTooltip\"\r\n\t\t\tcssClass=\"notSelectTooltip\"\r\n\t\t\t[showTipPointer]=\"false\"\r\n\t\t\t[openDelay]=\"500\"\r\n\t\t\tstyle=\"height: 27px\"\r\n\t\t>\r\n\t\t\t<ng-template #content>\r\n\t\t\t\t<div class=\"tooltip-content\">Refresh Current Tab</div>\r\n\t\t\t</ng-template>\r\n\t\t\t<img\r\n\t\t\t\tid=\"loadingIcon\"\r\n\t\t\t\talt\r\n\t\t\t\tclass=\"refresh-btn\"\r\n\t\t\t\tsrc=\"../../../assets/img/desktop-refresh-btn.svg\"\r\n\t\t\t/>\r\n\t\t</ejs-tooltip>\r\n\t</div>\r\n</div>\r\n", styles: [".rs-multi-tab{width:100%;display:flex;justify-content:space-between;margin:0 auto;max-width:1886px}.rs-multi-tab.b-line{border-bottom:1px solid #e5eaef}.rs-multi-tab ul{display:flex;margin:0 8px;padding:0;overflow:hidden;height:100%}.rs-multi-tab ul li{max-width:164px;padding:0 12px;display:flex;align-items:center;flex:auto;border:1px solid #e5eaef;border-bottom:none;color:#5f6f81;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:28px;height:28px;background:#f8fafb;vertical-align:top;position:relative;cursor:default}.rs-multi-tab ul li .tabTitle{display:inline-block;white-space:nowrap;font-size:11px;font-family:Arial;font-style:normal;font-weight:400;line-height:16px;transition:width .3s ease}.rs-multi-tab ul li img{border-radius:4px;padding:4px;margin-left:6px;margin-top:1px;vertical-align:top;cursor:pointer}.rs-multi-tab ul li img:hover{background:#dce8f6}.rs-multi-tab ul li:not(:last-child){border-right:none}.rs-multi-tab ul li:first-of-type{border-top-left-radius:8px}.rs-multi-tab ul li:last-child{border-top-right-radius:8px}.rs-multi-tab ul .isSelect{color:#1f3f5c;background:#fff}.rs-multi-tab ul .notSelect img{display:none}.rs-multi-tab ul .notSelect .img-block{display:inline-block;width:22px}.rs-multi-tab ul .notSelect:hover{color:#1f3f5c;background-color:#1f7bff0a}.rs-multi-tab ul .notSelect:hover .img-block{display:none}.rs-multi-tab ul .notSelect:hover img{display:inline-block}.rs-multi-tab .refresh-tab{cursor:pointer;text-align:right;color:#6c7c90;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:28px;padding-right:12px}.rs-multi-tab .refresh-tab img{vertical-align:middle;margin-right:4px}.refresh-tab-loading{animation:spin 1s linear infinite}.notSelectTooltip{transform:translate(-12px)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.tooltip-content{padding:4px;color:#f8fafb;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:14px}@media (max-width: 1400px){.refresh-tab{padding-right:0!important}.refresh-tab span{display:none!important}}@media (max-width: 1100px){.rs-multi-tab ul li img{position:absolute;right:3px;background-color:#fff}.notSelect:hover img{position:absolute;right:3px;background-color:#eff5fb}.img-block{display:none!important}.isSelect:not(:first-child){padding-right:20px!important}}@media (max-width: 600px){.rs-multi-tab ul li{padding:0 8px}.rs-multi-tab ul .notSelect .img-block{width:0px!important}}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TooltipComponent, selector: "ejs-tooltip", inputs: ["animation", "closeDelay", "container", "content", "cssClass", "enableHtmlParse", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "height", "htmlAttributes", "isSticky", "locale", "mouseTrail", "offsetX", "offsetY", "openDelay", "opensOn", "position", "showTipPointer", "target", "tipPointerPosition", "width", "windowCollision"], outputs: ["afterClose", "afterOpen", "beforeClose", "beforeCollision", "beforeOpen", "beforeRender", "created", "destroyed"] }] });
|
|
253
|
+
}
|
|
254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiTabComponent, decorators: [{
|
|
255
|
+
type: Component,
|
|
256
|
+
args: [{ selector: "rs-multi-tab", template: "<div class=\"rs-multi-tab\" [ngClass]=\"{ 'b-line': tabList.length > 0 }\">\r\n\t<ul>\r\n\t\t<ng-container *ngFor=\"let tab of tabList; let i = index\">\r\n\t\t\t<li\r\n\t\t\t\t[ngClass]=\"selectedTab === i ? 'isSelect' : 'notSelect'\"\r\n\t\t\t\t(click)=\"changeTab(tab, i)\"\r\n\t\t\t>\r\n\t\t\t\t<ejs-tooltip\r\n\t\t\t\t\tid=\"notSelectTooltip\"\r\n\t\t\t\t\t[showTipPointer]=\"false\"\r\n\t\t\t\t\t[openDelay]=\"500\"\r\n\t\t\t\t\t*ngIf=\"tab.displayTitle !== tab.title; else originText\"\r\n\t\t\t\t\tstyle=\"height: 27px\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<ng-template #content>\r\n\t\t\t\t\t\t<div class=\"tooltip-content\">\r\n\t\t\t\t\t\t\t{{ tab.title }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t<span class=\"tabTitle\">{{ tab.displayTitle }}</span>\r\n\t\t\t\t</ejs-tooltip>\r\n\t\t\t\t<ng-template #originText>\r\n\t\t\t\t\t<span class=\"tabTitle\">\r\n\t\t\t\t\t\t{{ tab.displayTitle }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<span\r\n\t\t\t\t\tclass=\"img-block\"\r\n\t\t\t\t\t*ngIf=\"selectedTab !== i && i !== 0\"\r\n\t\t\t\t></span>\r\n\t\t\t\t<img\r\n\t\t\t\t\t*ngIf=\"i !== 0\"\r\n\t\t\t\t\tsrc=\"../../../assets/img/close-url.svg\"\r\n\t\t\t\t\t(click)=\"closeTab(i)\"\r\n\t\t\t\t/>\r\n\t\t\t</li>\r\n\t\t</ng-container>\r\n\t</ul>\r\n\t<div class=\"refresh-tab\" (click)=\"refreshTab()\" *ngIf=\"tabList.length > 0\">\r\n\t\t<ejs-tooltip\r\n\t\t\tid=\"notSelectTooltip\"\r\n\t\t\tcssClass=\"notSelectTooltip\"\r\n\t\t\t[showTipPointer]=\"false\"\r\n\t\t\t[openDelay]=\"500\"\r\n\t\t\tstyle=\"height: 27px\"\r\n\t\t>\r\n\t\t\t<ng-template #content>\r\n\t\t\t\t<div class=\"tooltip-content\">Refresh Current Tab</div>\r\n\t\t\t</ng-template>\r\n\t\t\t<img\r\n\t\t\t\tid=\"loadingIcon\"\r\n\t\t\t\talt\r\n\t\t\t\tclass=\"refresh-btn\"\r\n\t\t\t\tsrc=\"../../../assets/img/desktop-refresh-btn.svg\"\r\n\t\t\t/>\r\n\t\t</ejs-tooltip>\r\n\t</div>\r\n</div>\r\n", styles: [".rs-multi-tab{width:100%;display:flex;justify-content:space-between;margin:0 auto;max-width:1886px}.rs-multi-tab.b-line{border-bottom:1px solid #e5eaef}.rs-multi-tab ul{display:flex;margin:0 8px;padding:0;overflow:hidden;height:100%}.rs-multi-tab ul li{max-width:164px;padding:0 12px;display:flex;align-items:center;flex:auto;border:1px solid #e5eaef;border-bottom:none;color:#5f6f81;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:28px;height:28px;background:#f8fafb;vertical-align:top;position:relative;cursor:default}.rs-multi-tab ul li .tabTitle{display:inline-block;white-space:nowrap;font-size:11px;font-family:Arial;font-style:normal;font-weight:400;line-height:16px;transition:width .3s ease}.rs-multi-tab ul li img{border-radius:4px;padding:4px;margin-left:6px;margin-top:1px;vertical-align:top;cursor:pointer}.rs-multi-tab ul li img:hover{background:#dce8f6}.rs-multi-tab ul li:not(:last-child){border-right:none}.rs-multi-tab ul li:first-of-type{border-top-left-radius:8px}.rs-multi-tab ul li:last-child{border-top-right-radius:8px}.rs-multi-tab ul .isSelect{color:#1f3f5c;background:#fff}.rs-multi-tab ul .notSelect img{display:none}.rs-multi-tab ul .notSelect .img-block{display:inline-block;width:22px}.rs-multi-tab ul .notSelect:hover{color:#1f3f5c;background-color:#1f7bff0a}.rs-multi-tab ul .notSelect:hover .img-block{display:none}.rs-multi-tab ul .notSelect:hover img{display:inline-block}.rs-multi-tab .refresh-tab{cursor:pointer;text-align:right;color:#6c7c90;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:28px;padding-right:12px}.rs-multi-tab .refresh-tab img{vertical-align:middle;margin-right:4px}.refresh-tab-loading{animation:spin 1s linear infinite}.notSelectTooltip{transform:translate(-12px)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.tooltip-content{padding:4px;color:#f8fafb;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:14px}@media (max-width: 1400px){.refresh-tab{padding-right:0!important}.refresh-tab span{display:none!important}}@media (max-width: 1100px){.rs-multi-tab ul li img{position:absolute;right:3px;background-color:#fff}.notSelect:hover img{position:absolute;right:3px;background-color:#eff5fb}.img-block{display:none!important}.isSelect:not(:first-child){padding-right:20px!important}}@media (max-width: 600px){.rs-multi-tab ul li{padding:0 8px}.rs-multi-tab ul .notSelect .img-block{width:0px!important}}\n"] }]
|
|
257
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.CommonFunctionService }, { type: i1.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.DrawerService }, { type: i1.RouteReuseStrategy }]; }, propDecorators: { singleReuseUrls: [{
|
|
258
|
+
type: Input
|
|
259
|
+
}], noGenerateTabUrls: [{
|
|
260
|
+
type: Input
|
|
261
|
+
}], onRefreshTab: [{
|
|
262
|
+
type: Output
|
|
263
|
+
}], onResize: [{
|
|
264
|
+
type: HostListener,
|
|
265
|
+
args: ["window:resize", ["$event"]]
|
|
266
|
+
}] } });
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2xheW91dC9tdWx0aS10YWIvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2xheW91dC9tdWx0aS10YWIvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTTtBQUNOLE9BQU8sRUFHTixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTixhQUFhLEdBR2IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFZeEMsTUFBTSxPQUFPLGlCQUFpQjtJQUVyQjtJQUNBO0lBQ0E7SUFDQztJQUNBO0lBQ0E7SUFOVCxZQUNRLE1BQWMsRUFDZCxFQUF5QixFQUN6QixjQUE4QixFQUM3QixHQUFzQixFQUN0QixNQUFxQixFQUNyQixrQkFBc0M7UUFMdkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLE9BQUUsR0FBRixFQUFFLENBQXVCO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM3QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFFOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQXNDLENBQUM7SUFDOUQsQ0FBQztJQUNELFNBQVMsQ0FBbUI7SUFDbkIsZUFBZSxHQUFhLEVBQUUsQ0FBQyxDQUFDLFlBQVk7SUFDNUMsaUJBQWlCLEdBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTtJ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NUUsMERBQTBEO1FBQzFELE1BQU07SUFDUCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQUc7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsYUFBYTtRQUNaLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsaUJBQWlCO0lBQ2xELENBQUM7SUFFTyxlQUFlLENBQUMsR0FBRztRQUMxQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsQ0FBQzt3R0F0U1csaUJBQWlCOzRGQUFqQixpQkFBaUIscVBDOUI5Qix3M0RBMERBOzs0RkQ1QmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNDLGNBQWM7MlBBZ0JmLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBY1AsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIOe7hOS7tuexu1xyXG5pbXBvcnQge1xyXG5cdEFmdGVyVmlld0luaXQsXHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0Q29tcG9uZW50LFxyXG5cdEV2ZW50RW1pdHRlcixcclxuXHRIb3N0TGlzdGVuZXIsXHJcblx0SW5wdXQsXHJcblx0T25EZXN0cm95LFxyXG5cdE9uSW5pdCxcclxuXHRPdXRwdXQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuXHRBY3RpdmF0ZWRSb3V0ZSxcclxuXHROYXZpZ2F0aW9uRW5kLFxyXG5cdFJvdXRlcixcclxuXHRSb3V0ZXJPdXRsZXQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgUm91dGVSZXVzZVN0cmF0ZWd5IH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBDb21tb25GdW5jdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZS9jb21tb24tZnVuY3Rpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcmF3ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvZHJhd2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgS2VlcEFsaXZlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2tlZXAtYWxpdmUuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwicnMtbXVsdGktdGFiXCIsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi9pbmRleC5jb21wb25lbnQuaHRtbFwiLFxyXG5cdHN0eWxlVXJsczogW1wiLi9pbmRleC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpVGFiQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHJvdXRlcjogUm91dGVyLFxyXG5cdFx0cHVibGljIGNmOiBDb21tb25GdW5jdGlvblNlcnZpY2UsXHJcblx0XHRwdWJsaWMgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG5cdFx0cHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHJpdmF0ZSBkcmF3ZXI6IERyYXdlclNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJvdXRlUmV1c2VTdHJhdGVneTogUm91dGVSZXVzZVN0cmF0ZWd5XHJcblx0KSB7XHJcblx0XHR0aGlzLmtlZXBBbGl2ZSA9IHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5IGFzIEtlZXBBbGl2ZVNlcnZpY2U7XHJcblx0fVxyXG5cdGtlZXBBbGl2ZTogS2VlcEFsaXZlU2VydmljZTtcclxuXHRASW5wdXQoKSBzaW5nbGVSZXVzZVVybHM6IHN0cmluZ1tdID0gW107IC8v5Y+q6IO95Y2V5Liq57yT5a2Y55qEdXJsXHJcblx0QElucHV0KCkgbm9HZW5lcmF0ZVRhYlVybHM6IHN0cmluZ1tdID0gW107IC8v5LiN55Sf5oiQdGFi55qEdXJsXHJcblx0QE91dHB1dCgpIG9uUmVmcmVzaFRhYiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cdFRBQl9XSURUSCA9IDE2NDtcclxuXHRHQVBfTk9STUFMID0gNTQ7XHJcblx0R0FQX1NNQUxMID0gMzA7XHJcblx0dGV4dEdhcDsgLy8g5paH5pys5LiO6L655qGG55qE5oC76Ze06LedXHJcblx0Zm9vOiBSb3V0ZXJPdXRsZXQ7XHJcblx0Y29tUmVmOiBhbnk7XHJcblx0dGFiTGlzdCA9IFtdO1xyXG5cdHNlbGVjdGVkVGFiOiBudW1iZXIgPSAwO1xyXG5cdG1heFRhYnM6IG51bWJlciA9IDEwO1xyXG5cdHNjcmVlbldpZHRoOiBudW1iZXIgPSB3aW5kb3cuaW5uZXJXaWR0aDsgLy8g5Yid5aeL5YyW5bGP5bmV5a695bqmXHJcblx0QEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxyXG5cdG9uUmVzaXplKGV2ZW50KSB7XHJcblx0XHR0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7IC8vIOabtOaWsOWxj+W5leWuveW6plxyXG5cdFx0dGhpcy5zZXRFbGxpcHNpc1RpdGxlKCk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuaW5pdFRhYigpO1xyXG5cdFx0Ly8g6Kej5Yaz5Yi35paw6aG16Z2i5ZCO77yM6YCJ5Lit55qEIHRhYiDkuKLlpLHpl67pophcclxuXHRcdGNvbnN0IGlzRXhpc3RJZHggPSB0aGlzLnRhYkxpc3QuZmluZEluZGV4KFxyXG5cdFx0XHQoZWxlKSA9PlxyXG5cdFx0XHRcdHRoaXMudXJsV2l0aG91dFF1ZXJ5KGVsZS51cmwpID09PVxyXG5cdFx0XHRcdHRoaXMudXJsV2l0aG91dFF1ZXJ5KHRoaXMucm91dGVyLnVybClcclxuXHRcdCk7XHJcblx0XHRpZiAoaXNFeGlzdElkeCAhPT0gLTEpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZFRhYiA9IGlzRXhpc3RJZHg7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMucm91dGVyLmV2ZW50c1xyXG5cdFx0XHRcdC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKTsgLy8g6I635Y+W5b2T5YmN5a+86IiqXHJcblx0XHRcdFx0XHRpZiAobmF2aWdhdGlvbikge1xyXG5cdFx0XHRcdFx0XHRjb25zdCB0b29sdGlwRWxlbWVudHMgPVxyXG5cdFx0XHRcdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZS1wb3B1cC1vcGVuXCIpO1xyXG5cdFx0XHRcdFx0XHQvLyDliKDpmaR0b29sdGlwc1xyXG5cdFx0XHRcdFx0XHR0b29sdGlwRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGh0bWxFbGVtZW50ID0gZWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuXHRcdFx0XHRcdFx0XHRodG1sRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IG5hdmlnYXRpb24uZXh0cmFzLnN0YXRlOyAvLyDojrflj5bkvKDpgJLnmoQgc3RhdGVcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc2tpcExvY2F0aW9uQ2hhbmdlID1cclxuXHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2U7IC8vIOiOt+WPluaYr+WQpui3s+i/hyBsb2NhdGlvbiBjaGFuZ2VcclxuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFJvdXRlID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5yb290LmZpcnN0Q2hpbGQ7XHJcblx0XHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25JbmZvID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwibmF2aWdhdGlvbkluZm9cIikgfHwgXCJ7fVwiXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGxldCB0aXRsZSA9XHJcblx0XHRcdFx0XHRcdFx0KHN0YXRlICYmIHN0YXRlLnRpdGxlKSB8fFxyXG5cdFx0XHRcdFx0XHRcdG5hdmlnYXRpb25JbmZvLnRpdGxlIHx8XHJcblx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvbkluZm8uc3ViVGl0bGUgfHxcclxuXHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uSW5mby5uYW1lO1xyXG5cclxuXHRcdFx0XHRcdFx0bGV0IG5vUmV1c2VkID0gKHN0YXRlICYmIHN0YXRlLm5vUmV1c2VkKSB8fCBmYWxzZTsgLy8g5b2T5YmNdGFi5LiN5aSN55So77yM5paw5byA5LiA5LiqdGFiLOW9k+acieW3sue7j+WtmOWcqOeahHRhYuaXtuWAmeS5n+aYr+aWsOW8gFxyXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudFJvdXRlICYmICFza2lwTG9jYXRpb25DaGFuZ2UpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm5vR2VuZXJhdGVUYWJVcmxzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnVybFdpdGhvdXRRdWVyeSh0aGlzLnJvdXRlci51cmwpXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47IC8vIOaOkumZpOS4jeeUn+aIkHRhYueahHVybFxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNldFRhYihcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucm91dGVyLnVybCxcclxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRSb3V0ZS5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUsXHJcblx0XHRcdFx0XHRcdFx0XHRub1JldXNlZFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblx0bmdBZnRlclZpZXdJbml0KCkge1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuc2V0RWxsaXBzaXNUaXRsZSgpO1xyXG5cdFx0fSwgNTApO1xyXG5cdH1cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcblxyXG5cdHNldEVsbGlwc2lzVGl0bGUodGl0bGU/KSB7XHJcblx0XHR0aGlzLnRleHRHYXAgPSB0aGlzLkdBUF9OT1JNQUw7XHJcblx0XHRpZiAodGhpcy5zY3JlZW5XaWR0aCA8PSAxMTAwKSB7XHJcblx0XHRcdHRoaXMudGV4dEdhcCA9IHRoaXMuR0FQX1NNQUxMO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHsgYWxsV2lkdGgsIGxlZnRXaWR0aCwgcmlnaHRXaWR0aCB9ID0gdGhpcy5jYWxjVGFiV2lkdGgoKTtcclxuXHRcdGxldCB3aWR0aCA9IE1hdGguZmxvb3IoXHJcblx0XHRcdChhbGxXaWR0aCAtIHJpZ2h0V2lkdGgpIC8gKHRoaXMudGFiTGlzdCAmJiB0aGlzLnRhYkxpc3QubGVuZ3RoKVxyXG5cdFx0KTtcclxuXHRcdGlmICh0aXRsZSkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jZi5zZXRNaWRkbGVFbGxpcHNpcyhcclxuXHRcdFx0XHR0aXRsZSxcclxuXHRcdFx0XHR3aWR0aCA+IHRoaXMuVEFCX1dJRFRIXHJcblx0XHRcdFx0XHQ/IHRoaXMuVEFCX1dJRFRIIC0gdGhpcy50ZXh0R2FwXHJcblx0XHRcdFx0XHQ6IHdpZHRoIC0gdGhpcy50ZXh0R2FwLFxyXG5cdFx0XHRcdDEyXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnRhYkxpc3QuZm9yRWFjaCgoZWxlLCBpZHgpID0+IHtcclxuXHRcdFx0XHRlbGUuZGlzcGxheVRpdGxlID0gdGhpcy5jZi5zZXRNaWRkbGVFbGxpcHNpcyhcclxuXHRcdFx0XHRcdGVsZS50aXRsZSxcclxuXHRcdFx0XHRcdHdpZHRoID4gdGhpcy5UQUJfV0lEVEhcclxuXHRcdFx0XHRcdFx0PyB0aGlzLlRBQl9XSURUSCAtIHRoaXMudGV4dEdhcFxyXG5cdFx0XHRcdFx0XHQ6IHdpZHRoIC0gdGhpcy50ZXh0R2FwLFxyXG5cdFx0XHRcdFx0MTJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNhbGNUYWJXaWR0aCgpIHtcclxuXHRcdGNvbnN0IHdyYXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnJzLW11bHRpLXRhYlwiKTtcclxuXHRcdGNvbnN0IHVsRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucnMtbXVsdGktdGFiID4gdWxcIik7XHJcblx0XHRjb25zdCByZWZyZXNoVGFiRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XCIucnMtbXVsdGktdGFiIC5yZWZyZXNoLXRhYlwiXHJcblx0XHQpO1xyXG5cdFx0bGV0IGFsbFdpZHRoO1xyXG5cdFx0bGV0IGxlZnRXaWR0aDtcclxuXHRcdGxldCByaWdodFdpZHRoO1xyXG5cdFx0aWYgKHdyYXAgJiYgdWxFbGVtZW50KSB7XHJcblx0XHRcdC8vIOiOt+WPluWFg+e0oOeahOS9jee9ruS/oeaBr1xyXG5cdFx0XHRjb25zdCB3cmFwUmVjdCA9IHdyYXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRcdGNvbnN0IHVsUmVjdCA9IHVsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdFx0Y29uc3QgcmVmcmVzaFRhYlJlY3QgPVxyXG5cdFx0XHRcdHJlZnJlc2hUYWJEaXYgJiYgcmVmcmVzaFRhYkRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdFx0YWxsV2lkdGggPSB3cmFwUmVjdC53aWR0aDtcclxuXHRcdFx0bGVmdFdpZHRoID0gdWxSZWN0LndpZHRoO1xyXG5cdFx0XHRyaWdodFdpZHRoID0gKHJlZnJlc2hUYWJSZWN0ICYmIHJlZnJlc2hUYWJSZWN0LndpZHRoKSB8fCAxMDA7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRhbGxXaWR0aCxcclxuXHRcdFx0bGVmdFdpZHRoLFxyXG5cdFx0XHRyaWdodFdpZHRoLFxyXG5cdFx0fTtcclxuXHR9XHJcblx0aW5pdFRhYigpIHtcclxuXHRcdGxldCBUYWJDYWNoZSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcIlRhYkNhY2hlXCIpKTtcclxuXHRcdHRoaXMudGFiTGlzdCA9IFRhYkNhY2hlIHx8IFtdO1xyXG5cdFx0aWYgKHRoaXMudGFiTGlzdC5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0Y29uc3QgdGl0bGUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiZmlyc3RUYWJUaXRsZVwiKTtcclxuXHRcdFx0aWYgKHRpdGxlKSB7XHJcblx0XHRcdFx0c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcImZpcnN0VGFiVGl0bGVcIik7XHJcblx0XHRcdFx0Y29uc3QgdXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cdFx0XHRcdHRoaXMuYWRkVGFiKHVybCwgdGl0bGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbG9zZVRhYihpZHgsIGlzRXh0ZXJuYWw/KSB7XHJcblx0XHRjb25zdCB0YWIgPSB0aGlzLnRhYkxpc3RbaWR4XTtcclxuXHRcdHRoaXMudGFiTGlzdCA9IHRoaXMudGFiTGlzdC5maWx0ZXIoKGVsZSkgPT4gZWxlLnVybCAhPT0gdGFiLnVybCk7XHJcblx0XHR0aGlzLmNsZWFyQ2FjaGUodGhpcy51cmxXaXRob3V0UXVlcnkodGFiLnVybCkpO1xyXG5cdFx0aWYgKCFpc0V4dGVybmFsICYmIHRoaXMuc2VsZWN0ZWRUYWIgPT09IGlkeCkge1xyXG5cdFx0XHRjb25zdCB0YXJnZXRJZHggPSBNYXRoLm1heCgwLCBpZHggLSAxKTtcclxuXHRcdFx0dGhpcy5jaGFuZ2VUYWIodGhpcy50YWJMaXN0W3RhcmdldElkeF0sIHRhcmdldElkeCk7XHJcblx0XHR9XHJcblx0XHRpZiAoaWR4IDwgdGhpcy5zZWxlY3RlZFRhYikge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy5zZWxlY3RlZFRhYiAtIDE7IC8vIOWmguaenOWFs+mXreeahHRhYuWcqOW9k+WJjemAieS4reeahHRhYuS5i+WJje+8jOmAieS4rXRhYue0ouW8leWHjzFcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0RWxsaXBzaXNUaXRsZSgpO1xyXG5cdFx0c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcIlRhYkNhY2hlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudGFiTGlzdCkpO1xyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0fVxyXG5cclxuXHRjaGFuZ2VUYWIodGFiLCBpZHgpIHtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGFiLnVybCk7XHJcblx0XHRpZiAodGFiLm5hdmlnYXRpb25JbmZvKSB7XHJcblx0XHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXHJcblx0XHRcdFx0XCJuYXZpZ2F0aW9uSW5mb1wiLFxyXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KHRhYi5uYXZpZ2F0aW9uSW5mbylcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdGlmICh0YWIuZnJvbVVybCkge1xyXG5cdFx0XHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwiZnJvbVVybFwiLCB0YWIuZnJvbVVybCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGFiLnBlcm1pc3Npb25zKSB7XHJcblx0XHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXHJcblx0XHRcdFx0XCJwZXJtaXNzaW9uc1wiLFxyXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KHRhYi5wZXJtaXNzaW9ucylcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2VsZWN0ZWRUYWIgPSBpZHg7XHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdGFkZFRhYih1cmwsIHRpdGxlKSB7XHJcblx0XHRpZiAodGhpcy50YWJMaXN0Lmxlbmd0aCA+PSB0aGlzLm1heFRhYnMpIHtcclxuXHRcdFx0dGhpcy5jbG9zZVRhYigxKTsgLy8g5Yig6Zmk56ys5LqM5Liq77yM56ys5LiA5Liq5Zu65a6aXHJcblx0XHR9XHJcblx0XHRjb25zdCBsb2NhbFBlcm1pc3Npb25zID1cclxuXHRcdFx0c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInBlcm1pc3Npb25zXCIpIHx8XHJcblx0XHRcdGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicGVybWlzc2lvbnNcIik7XHJcblx0XHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IEpTT04ucGFyc2UoXHJcblx0XHRcdHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJuYXZpZ2F0aW9uSW5mb1wiKVxyXG5cdFx0KTtcclxuXHRcdGNvbnN0IGZyb21VcmwgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiZnJvbVVybFwiKTtcclxuXHRcdGNvbnN0IHBlcm1pc3Npb25zID0gSlNPTi5wYXJzZShsb2NhbFBlcm1pc3Npb25zKTtcclxuXHJcblx0XHR0aGlzLnRhYkxpc3QucHVzaCh7XHJcblx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHR0aXRsZTogdGl0bGUgfHwgXCJkZWZhdWx0XCIsXHJcblx0XHRcdGRpc3BsYXlUaXRsZTogdGl0bGUsXHJcblx0XHRcdG5hdmlnYXRpb25JbmZvOiBuYXZpZ2F0aW9uSW5mbyxcclxuXHRcdFx0cGVybWlzc2lvbnM6IHBlcm1pc3Npb25zLFxyXG5cdFx0XHRmcm9tVXJsOiBmcm9tVXJsLFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy50YWJMaXN0Lmxlbmd0aCAtIDE7XHJcblx0XHR0aGlzLnNldEVsbGlwc2lzVGl0bGUoKTtcclxuXHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJUYWJDYWNoZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRhYkxpc3QpKTtcclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldFRhYih1cmwsIHB1cmVVcmwsIHRpdGxlLCBub1JldXNlZCkge1xyXG5cdFx0Y29uc3QgaXNFeGlzdElkeCA9IHRoaXMudGFiTGlzdC5maW5kSW5kZXgoXHJcblx0XHRcdChlbGUpID0+IHRoaXMudXJsV2l0aG91dFF1ZXJ5KGVsZS51cmwpID09PSB0aGlzLnVybFdpdGhvdXRRdWVyeSh1cmwpXHJcblx0XHQpO1xyXG5cdFx0aWYgKGlzRXhpc3RJZHggPT09IC0xKSB7XHJcblx0XHRcdGNvbnN0IHNpbmdsZUlkeCA9IHRoaXMuc2luZ2xlUmV1c2VVcmxzLmZpbmRJbmRleChcclxuXHRcdFx0XHQoZWxlKSA9PiBlbGUgPT09IHB1cmVVcmxcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHNpbmdsZUlkeCAhPT0gLTEpIHtcclxuXHRcdFx0XHR0aGlzLnRhYkxpc3QgPSB0aGlzLnRhYkxpc3QuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsZSkgPT4gIWVsZS51cmwuaW5jbHVkZXModGhpcy5zaW5nbGVSZXVzZVVybHNbc2luZ2xlSWR4XSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdHRoaXMua2VlcEFsaXZlLmNsZWFyQ2FjaGUodXJsKTtcclxuXHRcdFx0XHR0aGlzLmRyYXdlci5kZWxldGVDYWNoZSh1cmwpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuYWRkVGFiKHVybCwgdGl0bGUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgdGFyZ2V0VGFiVXJsID0gdGhpcy50YWJMaXN0W2lzRXhpc3RJZHhdLnVybDtcclxuXHRcdFx0aWYgKHRhcmdldFRhYlVybCAhPT0gdXJsIHx8IG5vUmV1c2VkKSB7XHJcblx0XHRcdFx0Ly8g5b2T57yT5a2Y5LiA6Ie05pe25YCZ77yM5L2G5pivdXJs5LiN5LiA6Ie077yM6YeN5paw5oyJ54Wn5paw55qEdXJs55Sf5oiQdGFiXHJcblx0XHRcdFx0dGhpcy5jbG9zZVRhYihpc0V4aXN0SWR4LCB0cnVlKTtcclxuXHRcdFx0XHR0aGlzLmFkZFRhYih1cmwsIHRpdGxlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNoYW5nZVRhYih0aGlzLnRhYkxpc3RbaXNFeGlzdElkeF0sIGlzRXhpc3RJZHgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHR0aW1lciA9IG51bGw7XHJcblx0cmVmcmVzaFRhYigpIHtcclxuXHRcdGNvbnN0IGxvYWRpbmdJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb2FkaW5nSWNvblwiKTtcclxuXHRcdGxvYWRpbmdJY29uLmNsYXNzTGlzdC5hZGQoXCJyZWZyZXNoLXRhYi1sb2FkaW5nXCIpO1xyXG5cdFx0aWYgKHRoaXMudGltZXIpIHtcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTtcclxuXHRcdH1cclxuXHRcdC8vIOaooeaLn+WKoOi9vei/h+eoi++8jDHnp5LlkI7np7vpmaTliqjnlLtcclxuXHRcdHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0bG9hZGluZ0ljb24uY2xhc3NMaXN0LnJlbW92ZShcInJlZnJlc2gtdGFiLWxvYWRpbmdcIik7XHJcblx0XHRcdHRoaXMudGltZXIgPSBudWxsO1xyXG5cdFx0fSwgMTUwMCk7XHJcblx0XHQvLyB0aGlzLmtlZXBBbGl2ZS5jbGVhckNhY2hlKHRoaXMudGFiTGlzdFt0aGlzLnNlbGVjdGVkVGFiXS51cmwpO1xyXG5cdFx0Ly8gdGhpcy5kcmF3ZXIuZGVsZXRlQ2FjaGUodGhpcy50YWJMaXN0W3RoaXMuc2VsZWN0ZWRUYWJdLnVybCk7XHJcblx0XHRjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsOyAvLyDojrflj5blvZPliY0gVVJMXHJcblx0XHR0aGlzLm9uUmVmcmVzaFRhYi5lbWl0KGN1cnJlbnRVcmwpO1xyXG5cdFx0Ly8gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcIi9cIiwgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcblx0XHQvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCk7IC8vIOmHjeaWsOWvvOiIquWIsOW9k+WJjSBVUkxcclxuXHRcdC8vIH0pO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJDYWNoZSh1cmwpIHtcclxuXHRcdHRoaXMua2VlcEFsaXZlLmNsZWFyQ2FjaGUodXJsKTsgLy8g6LCD55So6Ieq5a6a5LmJ562W55Wl55qE5riF6Zmk57yT5a2Y5pa55rOVXHJcblx0XHR0aGlzLmRyYXdlci5kZWxldGVDYWNoZSh1cmwpO1xyXG5cdH1cclxuXHJcblx0Y2xlYW5BbGxDYWNoZSgpIHtcclxuXHRcdHRoaXMubmdPbkRlc3Ryb3koKTtcclxuXHRcdHRoaXMua2VlcEFsaXZlLmNsZWFyQWxsQ2FjaGUoKTsgLy8g6LCD55So6Ieq5a6a5LmJ562W55Wl55qE5riF6Zmk57yT5a2Y5pa55rOVXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVybFdpdGhvdXRRdWVyeSh1cmwpIHtcclxuXHRcdHJldHVybiB1cmwuc3BsaXQoXCI/XCIpWzBdO1xyXG5cdH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicnMtbXVsdGktdGFiXCIgW25nQ2xhc3NdPVwieyAnYi1saW5lJzogdGFiTGlzdC5sZW5ndGggPiAwIH1cIj5cclxuXHQ8dWw+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxyXG5cdFx0XHQ8bGlcclxuXHRcdFx0XHRbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0gaSA/ICdpc1NlbGVjdCcgOiAnbm90U2VsZWN0J1wiXHJcblx0XHRcdFx0KGNsaWNrKT1cImNoYW5nZVRhYih0YWIsIGkpXCJcclxuXHRcdFx0PlxyXG5cdFx0XHRcdDxlanMtdG9vbHRpcFxyXG5cdFx0XHRcdFx0aWQ9XCJub3RTZWxlY3RUb29sdGlwXCJcclxuXHRcdFx0XHRcdFtzaG93VGlwUG9pbnRlcl09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRbb3BlbkRlbGF5XT1cIjUwMFwiXHJcblx0XHRcdFx0XHQqbmdJZj1cInRhYi5kaXNwbGF5VGl0bGUgIT09IHRhYi50aXRsZTsgZWxzZSBvcmlnaW5UZXh0XCJcclxuXHRcdFx0XHRcdHN0eWxlPVwiaGVpZ2h0OiAyN3B4XCJcclxuXHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2NvbnRlbnQ+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIj5cclxuXHRcdFx0XHRcdFx0XHR7eyB0YWIudGl0bGUgfX1cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ0YWJUaXRsZVwiPnt7IHRhYi5kaXNwbGF5VGl0bGUgfX08L3NwYW4+XHJcblx0XHRcdFx0PC9lanMtdG9vbHRpcD5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgI29yaWdpblRleHQ+XHJcblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRhYlRpdGxlXCI+XHJcblx0XHRcdFx0XHRcdHt7IHRhYi5kaXNwbGF5VGl0bGUgfX1cclxuXHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdDxzcGFuXHJcblx0XHRcdFx0XHRjbGFzcz1cImltZy1ibG9ja1wiXHJcblx0XHRcdFx0XHQqbmdJZj1cInNlbGVjdGVkVGFiICE9PSBpICYmIGkgIT09IDBcIlxyXG5cdFx0XHRcdD48L3NwYW4+XHJcblx0XHRcdFx0PGltZ1xyXG5cdFx0XHRcdFx0Km5nSWY9XCJpICE9PSAwXCJcclxuXHRcdFx0XHRcdHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWcvY2xvc2UtdXJsLnN2Z1wiXHJcblx0XHRcdFx0XHQoY2xpY2spPVwiY2xvc2VUYWIoaSlcIlxyXG5cdFx0XHRcdC8+XHJcblx0XHRcdDwvbGk+XHJcblx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHQ8L3VsPlxyXG5cdDxkaXYgY2xhc3M9XCJyZWZyZXNoLXRhYlwiIChjbGljayk9XCJyZWZyZXNoVGFiKClcIiAqbmdJZj1cInRhYkxpc3QubGVuZ3RoID4gMFwiPlxyXG5cdFx0PGVqcy10b29sdGlwXHJcblx0XHRcdGlkPVwibm90U2VsZWN0VG9vbHRpcFwiXHJcblx0XHRcdGNzc0NsYXNzPVwibm90U2VsZWN0VG9vbHRpcFwiXHJcblx0XHRcdFtzaG93VGlwUG9pbnRlcl09XCJmYWxzZVwiXHJcblx0XHRcdFtvcGVuRGVsYXldPVwiNTAwXCJcclxuXHRcdFx0c3R5bGU9XCJoZWlnaHQ6IDI3cHhcIlxyXG5cdFx0PlxyXG5cdFx0XHQ8bmctdGVtcGxhdGUgI2NvbnRlbnQ+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cInRvb2x0aXAtY29udGVudFwiPlJlZnJlc2ggQ3VycmVudCBUYWI8L2Rpdj5cclxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0PGltZ1xyXG5cdFx0XHRcdGlkPVwibG9hZGluZ0ljb25cIlxyXG5cdFx0XHRcdGFsdFxyXG5cdFx0XHRcdGNsYXNzPVwicmVmcmVzaC1idG5cIlxyXG5cdFx0XHRcdHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWcvZGVza3RvcC1yZWZyZXNoLWJ0bi5zdmdcIlxyXG5cdFx0XHQvPlxyXG5cdFx0PC9lanMtdG9vbHRpcD5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2xheW91dC9uYXYtY2FyZC1ncm91cC9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTmF2SXRlbSB7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICB1cmw6IHN0cmluZztcclxuICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmF2R3JvdXAge1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgc3ViVGl0bGU/OiBzdHJpbmc7XHJcbiAgaW1nPzogc3RyaW5nO1xyXG4gIGRlc2M/OiBzdHJpbmc7XHJcbiAgdXJsPzogc3RyaW5nO1xyXG4gIHN1Ykxpc3Q/OiBOYXZJdGVtW107XHJcbiAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// 组件类
|
|
2
|
+
import { Component, EventEmitter, Input, Output } from "@angular/core";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/router";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
export class RSNavCardGroupComponent {
|
|
7
|
+
router;
|
|
8
|
+
constructor(router) {
|
|
9
|
+
this.router = router;
|
|
10
|
+
}
|
|
11
|
+
ngOnInit() { }
|
|
12
|
+
navClick = new EventEmitter();
|
|
13
|
+
navList = [];
|
|
14
|
+
customNavClick = false; // 接收输入属性
|
|
15
|
+
title = "";
|
|
16
|
+
onNavClick(item) {
|
|
17
|
+
if (!this.customNavClick) {
|
|
18
|
+
this.router.navigate([item.url], { state: { title: item.title } });
|
|
19
|
+
}
|
|
20
|
+
this.navClick.emit(item);
|
|
21
|
+
}
|
|
22
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RSNavCardGroupComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RSNavCardGroupComponent, selector: "nav-card-group", inputs: { navList: "navList", customNavClick: "customNavClick", title: "title" }, outputs: { navClick: "navClick" }, ngImport: i0, template: "<div class=\"rs-setting\">\r\n <h1 class=\"rs-page-title\">{{ title }}</h1>\r\n <div class=\"setting-content\">\r\n <div\r\n class=\"setting-group-card\"\r\n *ngFor=\"let group of navList\"\r\n [ngClass]=\"{ pointer: !group.subList }\"\r\n (click)=\"!group.subList && onNavClick(group)\"\r\n >\r\n <header class=\"setting-card-header\">\r\n <div class=\"setting-card-logo\">\r\n <img [src]=\"group.img\" alt=\"\" />\r\n </div>\r\n <h4 class=\"setting-card-title\">{{ group.title }}</h4>\r\n <div\r\n class=\"setting-card-sub-title\"\r\n *ngIf=\"!group.subList\"\r\n >\r\n {{ group.subTitle }}\r\n </div>\r\n </header>\r\n <div class=\"setting-card-desc\" *ngIf=\"!group.subList\">\r\n {{ group.desc }}\r\n </div>\r\n <div\r\n class=\"setting-item\"\r\n *ngFor=\"let item of group.subList\"\r\n (click)=\"onNavClick(item)\"\r\n >\r\n {{ item.title }}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".rs-setting{height:100%;display:flex;flex-direction:column;position:relative;margin:0 auto;max-width:1885px}.rs-setting .rs-page-title{font-family:var(--rs-font-family);font-size:var(--rs-page-title-font-size);font-weight:700;text-align:left;color:var(--rs-page-title-color);display:flex;align-items:center;padding:16px 8px 12px 20px}.rs-setting .setting-content{flex:1;height:0;overflow:auto;display:flex;flex-flow:row wrap;gap:20px;padding:4px 20px 40px}.rs-setting .setting-content .setting-group-card{width:100%;min-width:320px;padding:0 12px 16px;border-radius:10px;border:1px solid #eaedf0;background-color:#fff;display:flex;flex-flow:column nowrap}.rs-setting .setting-content .setting-group-card.pointer{cursor:pointer}.rs-setting .setting-content .setting-group-card .setting-card-header{padding:12px 8px;display:flex;flex-flow:column nowrap}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-logo{display:flex;flex-flow:column nowrap;gap:4px}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-logo img{width:24px;height:24px}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-logo:after{content:\" \";width:24px;height:3px;background-color:#ff9618;border-radius:2px}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-title{padding:0;margin:12px 0 0;color:#1f3f5c;font-family:Arial;font-size:15px;font-style:normal;font-weight:700;line-height:18px}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-sub-title{color:#6c7c90;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;margin-top:6px}.rs-setting .setting-content .setting-group-card .setting-card-desc{padding:6px 8px;color:#44566c;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.rs-setting .setting-content .setting-group-card .setting-item{padding:6px 8px;border-radius:4px;cursor:pointer;color:#44566c;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.rs-setting .setting-content .setting-group-card .setting-item:hover{background-color:#1364b30d}@media screen and (min-width: 741px){.rs-setting .setting-content .setting-group-card{width:calc((100% - 20px)/2)}}@media screen and (min-width: 1297px){.rs-setting .setting-content .setting-group-card{width:calc((100% - 40px) / 3)}}@media screen and (min-width: 1632px){.rs-setting .setting-content .setting-group-card{width:calc((100% - 60px)/4)}}@media screen and (min-width: 1972px){.rs-setting .setting-content .setting-group-card{width:calc((100% - 80px)/5)}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RSNavCardGroupComponent, decorators: [{
|
|
26
|
+
type: Component,
|
|
27
|
+
args: [{ selector: "nav-card-group", template: "<div class=\"rs-setting\">\r\n <h1 class=\"rs-page-title\">{{ title }}</h1>\r\n <div class=\"setting-content\">\r\n <div\r\n class=\"setting-group-card\"\r\n *ngFor=\"let group of navList\"\r\n [ngClass]=\"{ pointer: !group.subList }\"\r\n (click)=\"!group.subList && onNavClick(group)\"\r\n >\r\n <header class=\"setting-card-header\">\r\n <div class=\"setting-card-logo\">\r\n <img [src]=\"group.img\" alt=\"\" />\r\n </div>\r\n <h4 class=\"setting-card-title\">{{ group.title }}</h4>\r\n <div\r\n class=\"setting-card-sub-title\"\r\n *ngIf=\"!group.subList\"\r\n >\r\n {{ group.subTitle }}\r\n </div>\r\n </header>\r\n <div class=\"setting-card-desc\" *ngIf=\"!group.subList\">\r\n {{ group.desc }}\r\n </div>\r\n <div\r\n class=\"setting-item\"\r\n *ngFor=\"let item of group.subList\"\r\n (click)=\"onNavClick(item)\"\r\n >\r\n {{ item.title }}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".rs-setting{height:100%;display:flex;flex-direction:column;position:relative;margin:0 auto;max-width:1885px}.rs-setting .rs-page-title{font-family:var(--rs-font-family);font-size:var(--rs-page-title-font-size);font-weight:700;text-align:left;color:var(--rs-page-title-color);display:flex;align-items:center;padding:16px 8px 12px 20px}.rs-setting .setting-content{flex:1;height:0;overflow:auto;display:flex;flex-flow:row wrap;gap:20px;padding:4px 20px 40px}.rs-setting .setting-content .setting-group-card{width:100%;min-width:320px;padding:0 12px 16px;border-radius:10px;border:1px solid #eaedf0;background-color:#fff;display:flex;flex-flow:column nowrap}.rs-setting .setting-content .setting-group-card.pointer{cursor:pointer}.rs-setting .setting-content .setting-group-card .setting-card-header{padding:12px 8px;display:flex;flex-flow:column nowrap}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-logo{display:flex;flex-flow:column nowrap;gap:4px}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-logo img{width:24px;height:24px}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-logo:after{content:\" \";width:24px;height:3px;background-color:#ff9618;border-radius:2px}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-title{padding:0;margin:12px 0 0;color:#1f3f5c;font-family:Arial;font-size:15px;font-style:normal;font-weight:700;line-height:18px}.rs-setting .setting-content .setting-group-card .setting-card-header .setting-card-sub-title{color:#6c7c90;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;margin-top:6px}.rs-setting .setting-content .setting-group-card .setting-card-desc{padding:6px 8px;color:#44566c;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.rs-setting .setting-content .setting-group-card .setting-item{padding:6px 8px;border-radius:4px;cursor:pointer;color:#44566c;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.rs-setting .setting-content .setting-group-card .setting-item:hover{background-color:#1364b30d}@media screen and (min-width: 741px){.rs-setting .setting-content .setting-group-card{width:calc((100% - 20px)/2)}}@media screen and (min-width: 1297px){.rs-setting .setting-content .setting-group-card{width:calc((100% - 40px) / 3)}}@media screen and (min-width: 1632px){.rs-setting .setting-content .setting-group-card{width:calc((100% - 60px)/4)}}@media screen and (min-width: 1972px){.rs-setting .setting-content .setting-group-card{width:calc((100% - 80px)/5)}}\n"] }]
|
|
28
|
+
}], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { navClick: [{
|
|
29
|
+
type: Output
|
|
30
|
+
}], navList: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}], customNavClick: [{
|
|
33
|
+
type: Input
|
|
34
|
+
}], title: [{
|
|
35
|
+
type: Input
|
|
36
|
+
}] } });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2xheW91dC9uYXYtY2FyZC1ncm91cC9pbmRleC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYWlzZS1jb21tb24tbGliL3NyYy9saWIvbGF5b3V0L25hdi1jYXJkLWdyb3VwL2luZGV4LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU07QUFDTixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUy9FLE1BQU0sT0FBTyx1QkFBdUI7SUFDZjtJQUFuQixZQUFtQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFHLENBQUM7SUFDckMsUUFBUSxLQUFVLENBQUM7SUFHbkIsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFMUIsT0FBTyxHQUFlLEVBQUUsQ0FBQztJQUN6QixjQUFjLEdBQVksS0FBSyxDQUFDLENBQUMsU0FBUztJQUMxQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRXBCLFVBQVUsQ0FBQyxJQUFJO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNwRTtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7d0dBaEJVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLDJLQ1ZwQyxzakNBa0NBOzs0RkR4QmEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGdCQUFnQjs2RkFTMUIsUUFBUTtzQkFEUCxNQUFNO2dCQUdFLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIOe7hOS7tuexu1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBOYXZHcm91cCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibmF2LWNhcmQtZ3JvdXBcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUlNOYXZDYXJkR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlcikge31cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG5hdkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBJbnB1dCgpIG5hdkxpc3Q6IE5hdkdyb3VwW10gPSBbXTtcclxuICBASW5wdXQoKSBjdXN0b21OYXZDbGljazogYm9vbGVhbiA9IGZhbHNlOyAvLyDmjqXmlLbovpPlhaXlsZ7mgKdcclxuICBASW5wdXQoKSB0aXRsZSA9IFwiXCI7XHJcblxyXG4gIG9uTmF2Q2xpY2soaXRlbSkge1xyXG4gICAgaWYgKCF0aGlzLmN1c3RvbU5hdkNsaWNrKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtpdGVtLnVybF0sIHsgc3RhdGU6IHsgdGl0bGU6IGl0ZW0udGl0bGUgfSB9KTtcclxuICAgIH1cclxuICAgIHRoaXMubmF2Q2xpY2suZW1pdChpdGVtKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJzLXNldHRpbmdcIj5cclxuICA8aDEgY2xhc3M9XCJycy1wYWdlLXRpdGxlXCI+e3sgdGl0bGUgfX08L2gxPlxyXG4gIDxkaXYgY2xhc3M9XCJzZXR0aW5nLWNvbnRlbnRcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJzZXR0aW5nLWdyb3VwLWNhcmRcIlxyXG4gICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgbmF2TGlzdFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgcG9pbnRlcjogIWdyb3VwLnN1Ykxpc3QgfVwiXHJcbiAgICAgIChjbGljayk9XCIhZ3JvdXAuc3ViTGlzdCAmJiBvbk5hdkNsaWNrKGdyb3VwKVwiXHJcbiAgICA+XHJcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJzZXR0aW5nLWNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmctY2FyZC1sb2dvXCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiZ3JvdXAuaW1nXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJzZXR0aW5nLWNhcmQtdGl0bGVcIj57eyBncm91cC50aXRsZSB9fTwvaDQ+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJzZXR0aW5nLWNhcmQtc3ViLXRpdGxlXCJcclxuICAgICAgICAgICpuZ0lmPVwiIWdyb3VwLnN1Ykxpc3RcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdyb3VwLnN1YlRpdGxlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvaGVhZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZy1jYXJkLWRlc2NcIiAqbmdJZj1cIiFncm91cC5zdWJMaXN0XCI+XHJcbiAgICAgICAge3sgZ3JvdXAuZGVzYyB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwic2V0dGluZy1pdGVtXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncm91cC5zdWJMaXN0XCJcclxuICAgICAgICAoY2xpY2spPVwib25OYXZDbGljayhpdGVtKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBpdGVtLnRpdGxlIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|