@yelon/bis 14.1.1 → 15.0.0-beta.0
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/LICENSE +1 -1
- package/README.md +23 -1
- package/esm2020/bis.mjs +2 -2
- package/esm2020/index.mjs +2 -0
- package/esm2020/public_api.mjs +2 -2
- package/esm2020/src/bis.config.mjs +11 -0
- package/esm2020/src/icon/style-icons.mjs +796 -0
- package/esm2020/src/index.mjs +12 -0
- package/esm2020/src/layout-basic/index.mjs +4 -0
- package/esm2020/src/layout-basic/interface.mjs +7 -0
- package/esm2020/src/layout-basic/layout-basic.component.mjs +312 -0
- package/esm2020/src/layout-basic/layout-display.service.mjs +87 -0
- package/esm2020/src/layout-nav/index.mjs +5 -0
- package/esm2020/src/layout-nav/layout-nav-application.component.mjs +262 -0
- package/esm2020/{layout/widgets/yz.application.group.component.mjs → src/layout-nav/layout-nav-group.component.mjs} +23 -21
- package/esm2020/src/layout-nav/layout-nav-tile.component.mjs +15 -0
- package/esm2020/src/layout-nav/types.mjs +7 -0
- package/esm2020/src/widgets/index.mjs +7 -0
- package/esm2020/src/widgets/yunzai-clear-storage.component.mjs +45 -0
- package/esm2020/src/widgets/yunzai-fullscreen.component.mjs +45 -0
- package/esm2020/src/widgets/yunzai-i18n.component.mjs +115 -0
- package/esm2020/src/widgets/yunzai-notify.component.mjs +183 -0
- package/esm2020/src/widgets/yunzai-theme-btn.component.mjs +195 -0
- package/esm2020/{layout/widgets/yz.user.component.mjs → src/widgets/yunzai-user.component.mjs} +6 -6
- package/esm2020/src/yunzai-act.guard.mjs +107 -0
- package/esm2020/src/yunzai-auth.service.mjs +153 -0
- package/esm2020/src/yunzai-default.interceptor.mjs +207 -0
- package/esm2020/src/yunzai-i18n.service.mjs +94 -0
- package/esm2020/src/yunzai-layout.module.mjs +76 -0
- package/esm2020/src/yunzai-startup.service.mjs +157 -0
- package/fesm2015/bis.mjs +2960 -1
- package/fesm2015/bis.mjs.map +1 -1
- package/fesm2020/bis.mjs +2968 -1
- package/fesm2020/bis.mjs.map +1 -1
- package/index.d.ts +0 -4
- package/index.less +1 -1
- package/package.json +12 -27
- package/public_api.d.ts +1 -2
- package/{layout → src}/bis.config.d.ts +0 -0
- package/{shared → src/icon}/style-icons.d.ts +0 -0
- package/src/index.d.ts +11 -0
- package/src/layout-basic/index.d.ts +3 -0
- package/src/layout-basic/interface.d.ts +24 -0
- package/src/layout-basic/layout-basic.component.d.ts +33 -0
- package/src/layout-basic/layout-display.service.d.ts +15 -0
- package/src/layout-nav/index.d.ts +4 -0
- package/src/layout-nav/layout-nav-application.component.d.ts +26 -0
- package/src/layout-nav/layout-nav-group.component.d.ts +17 -0
- package/src/layout-nav/layout-nav-tile.component.d.ts +6 -0
- package/src/layout-nav/types.d.ts +20 -0
- package/src/widgets/index.d.ts +6 -0
- package/{layout/widgets/yz.clear-storage.component.d.ts → src/widgets/yunzai-clear-storage.component.d.ts} +3 -3
- package/src/widgets/yunzai-fullscreen.component.d.ts +8 -0
- package/{layout/widgets/yz.i18n.component.d.ts → src/widgets/yunzai-i18n.component.d.ts} +5 -5
- package/{layout/widgets/yz.notify.component.d.ts → src/widgets/yunzai-notify.component.d.ts} +5 -5
- package/{layout/widgets/yz.them-btn.component.d.ts → src/widgets/yunzai-theme-btn.component.d.ts} +5 -5
- package/{layout/widgets/yz.user.component.d.ts → src/widgets/yunzai-user.component.d.ts} +3 -3
- package/{layout/act.guard.d.ts → src/yunzai-act.guard.d.ts} +1 -2
- package/{layout/yz.auth.service.d.ts → src/yunzai-auth.service.d.ts} +6 -7
- package/{layout/yz.default.interceptor.d.ts → src/yunzai-default.interceptor.d.ts} +4 -6
- package/{layout/yz.i18n.service.d.ts → src/yunzai-i18n.service.d.ts} +4 -3
- package/src/yunzai-layout.module.d.ts +21 -0
- package/src/yunzai-startup.service.d.ts +37 -0
- package/esm2020/layout/act.guard.mjs +0 -108
- package/esm2020/layout/bis.config.mjs +0 -11
- package/esm2020/layout/contact/contact.component.mjs +0 -492
- package/esm2020/layout/contact/contact.service.mjs +0 -146
- package/esm2020/layout/layout.mjs +0 -5
- package/esm2020/layout/layout.module.mjs +0 -76
- package/esm2020/layout/path-to-regexp.service.mjs +0 -238
- package/esm2020/layout/public_api.mjs +0 -15
- package/esm2020/layout/stomp.config.mjs +0 -18
- package/esm2020/layout/widgets/index.mjs +0 -9
- package/esm2020/layout/widgets/yz.application.component.mjs +0 -271
- package/esm2020/layout/widgets/yz.clear-storage.component.mjs +0 -45
- package/esm2020/layout/widgets/yz.fullscreen.component.mjs +0 -45
- package/esm2020/layout/widgets/yz.i18n.component.mjs +0 -115
- package/esm2020/layout/widgets/yz.notify.component.mjs +0 -183
- package/esm2020/layout/widgets/yz.them-btn.component.mjs +0 -195
- package/esm2020/layout/yz.auth.service.mjs +0 -155
- package/esm2020/layout/yz.basic.component.mjs +0 -269
- package/esm2020/layout/yz.default.interceptor.mjs +0 -207
- package/esm2020/layout/yz.i18n.service.mjs +0 -93
- package/esm2020/layout/yz.startup.service.mjs +0 -139
- package/esm2020/layout/yz.stomp.service.mjs +0 -88
- package/esm2020/shared/public_api.mjs +0 -5
- package/esm2020/shared/shared-yelon.module.mjs +0 -106
- package/esm2020/shared/shared-zorro.module.mjs +0 -81
- package/esm2020/shared/shared.mjs +0 -5
- package/esm2020/shared/shared.module.mjs +0 -115
- package/esm2020/shared/style-icons.mjs +0 -796
- package/fesm2015/layout.mjs +0 -2968
- package/fesm2015/layout.mjs.map +0 -1
- package/fesm2015/shared.mjs +0 -1103
- package/fesm2015/shared.mjs.map +0 -1
- package/fesm2020/layout.mjs +0 -2977
- package/fesm2020/layout.mjs.map +0 -1
- package/fesm2020/shared.mjs +0 -1103
- package/fesm2020/shared.mjs.map +0 -1
- package/layout/contact/contact.component.d.ts +0 -169
- package/layout/contact/contact.service.d.ts +0 -118
- package/layout/index.d.ts +0 -5
- package/layout/layout.module.d.ts +0 -21
- package/layout/path-to-regexp.service.d.ts +0 -26
- package/layout/public_api.d.ts +0 -14
- package/layout/stomp.config.d.ts +0 -3
- package/layout/style/index.less +0 -155
- package/layout/widgets/index.d.ts +0 -8
- package/layout/widgets/yz.application.component.d.ts +0 -49
- package/layout/widgets/yz.application.group.component.d.ts +0 -19
- package/layout/widgets/yz.fullscreen.component.d.ts +0 -8
- package/layout/yz.basic.component.d.ts +0 -27
- package/layout/yz.startup.service.d.ts +0 -36
- package/layout/yz.stomp.service.d.ts +0 -42
- package/shared/index.d.ts +0 -5
- package/shared/public_api.d.ts +0 -4
- package/shared/shared-yelon.module.d.ts +0 -3
- package/shared/shared-zorro.module.d.ts +0 -2
- package/shared/shared.module.d.ts +0 -94
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { WINDOW } from '@yelon/util';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@yelon/cache";
|
|
5
|
-
import * as i2 from "./yz.stomp.service";
|
|
6
|
-
import * as i3 from "@yelon/theme/layout-default";
|
|
7
|
-
import * as i4 from "@angular/common";
|
|
8
|
-
import * as i5 from "@angular/router";
|
|
9
|
-
import * as i6 from "@yelon/abc/reuse-tab";
|
|
10
|
-
import * as i7 from "ng-zorro-antd/core/transition-patch";
|
|
11
|
-
import * as i8 from "ng-zorro-antd/menu";
|
|
12
|
-
import * as i9 from "ng-zorro-antd/dropdown";
|
|
13
|
-
import * as i10 from "ng-zorro-antd/icon";
|
|
14
|
-
import * as i11 from "ng-zorro-antd/avatar";
|
|
15
|
-
import * as i12 from "./widgets/yz.application.component";
|
|
16
|
-
import * as i13 from "./widgets/yz.notify.component";
|
|
17
|
-
import * as i14 from "./widgets/yz.them-btn.component";
|
|
18
|
-
import * as i15 from "./widgets/yz.user.component";
|
|
19
|
-
import * as i16 from "./widgets/yz.fullscreen.component";
|
|
20
|
-
import * as i17 from "./widgets/yz.clear-storage.component";
|
|
21
|
-
import * as i18 from "./widgets/yz.i18n.component";
|
|
22
|
-
import * as i19 from "./widgets/yz.application.group.component";
|
|
23
|
-
import * as i20 from "@yelon/theme";
|
|
24
|
-
export class YzLayoutBasicComponent {
|
|
25
|
-
constructor(cacheService, yzStompService, layoutService, injector) {
|
|
26
|
-
this.cacheService = cacheService;
|
|
27
|
-
this.yzStompService = yzStompService;
|
|
28
|
-
this.layoutService = layoutService;
|
|
29
|
-
this.injector = injector;
|
|
30
|
-
this.options = {
|
|
31
|
-
logoExpanded: `./assets/logo-full.svg`,
|
|
32
|
-
logoCollapsed: `./assets/logo.svg`
|
|
33
|
-
};
|
|
34
|
-
this.intro = '';
|
|
35
|
-
this.text = '';
|
|
36
|
-
this.icon = '';
|
|
37
|
-
this.showReuseTab = true;
|
|
38
|
-
this.showHeader = true;
|
|
39
|
-
this.showSider = true;
|
|
40
|
-
this.headerType = 'application';
|
|
41
|
-
}
|
|
42
|
-
get reuseStyleSheet() {
|
|
43
|
-
let cascadingStyleSheet = {};
|
|
44
|
-
if (!this.showHeader) {
|
|
45
|
-
cascadingStyleSheet = {
|
|
46
|
-
...cascadingStyleSheet,
|
|
47
|
-
top: 0
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
if (!this.showSider) {
|
|
51
|
-
cascadingStyleSheet = {
|
|
52
|
-
...cascadingStyleSheet,
|
|
53
|
-
left: '24px'
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
return cascadingStyleSheet;
|
|
57
|
-
}
|
|
58
|
-
ngOnInit() {
|
|
59
|
-
const current = this.cacheService.get('_yz_current', { mode: 'none' });
|
|
60
|
-
const project = this.cacheService.get('_yz_project_info', { mode: 'none' });
|
|
61
|
-
const headerType = this.cacheService.get('_yz_header_type', { mode: 'none' });
|
|
62
|
-
if (headerType)
|
|
63
|
-
this.headerType = headerType;
|
|
64
|
-
this.text = current.text ? current.text : '应用名称';
|
|
65
|
-
this.intro = current.intro ? current.intro : '应用描述';
|
|
66
|
-
this.icon = current.icon ? current.icon : `./assets/tmp/img/avatar.jpg`;
|
|
67
|
-
this.options.logoExpanded = project.maxLogoUrl ? project.maxLogoUrl : `./assets/logo-full.svg`;
|
|
68
|
-
this.options.logoCollapsed = project.miniLogoUrl ? project.miniLogoUrl : `./assets/logo.svg`;
|
|
69
|
-
this.yzStompService.listen();
|
|
70
|
-
this.layoutService.reuseTab.asObservable().subscribe(show => (this.showReuseTab = show));
|
|
71
|
-
this.layoutService.header.asObservable().subscribe(show => (this.showHeader = show));
|
|
72
|
-
this.layoutService.sidebar.asObservable().subscribe(show => (this.showSider = show));
|
|
73
|
-
}
|
|
74
|
-
onHeaderTypeChange(type) {
|
|
75
|
-
this.cacheService.set('_yz_header_type', type);
|
|
76
|
-
this.injector.get(WINDOW).location.reload();
|
|
77
|
-
}
|
|
78
|
-
ngOnDestroy() {
|
|
79
|
-
this.yzStompService.unListen();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
YzLayoutBasicComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: YzLayoutBasicComponent, deps: [{ token: i1.CacheService }, { token: i2.YzStompService }, { token: i3.LayoutService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
-
YzLayoutBasicComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.5", type: YzLayoutBasicComponent, selector: "yz-layout-basic", ngImport: i0, template: `
|
|
84
|
-
<layout-default [options]="options" [asideUser]="asideUserTpl" [content]="showReuseTab ? contentTpl : noneTpl">
|
|
85
|
-
<layout-default-header-item direction="left">
|
|
86
|
-
<ng-container [ngSwitch]="headerType">
|
|
87
|
-
<ng-container *ngSwitchCase="'application'">
|
|
88
|
-
<yz-header-application></yz-header-application>
|
|
89
|
-
</ng-container>
|
|
90
|
-
|
|
91
|
-
<ng-container *ngSwitchCase="'group'">
|
|
92
|
-
<yz-header-application-group></yz-header-application-group>
|
|
93
|
-
</ng-container>
|
|
94
|
-
|
|
95
|
-
<ng-container *ngSwitchDefault>
|
|
96
|
-
<yz-header-application></yz-header-application>
|
|
97
|
-
</ng-container>
|
|
98
|
-
</ng-container>
|
|
99
|
-
</layout-default-header-item>
|
|
100
|
-
|
|
101
|
-
<layout-default-header-item direction="right" hidden="mobile">
|
|
102
|
-
<yz-header-notify></yz-header-notify>
|
|
103
|
-
</layout-default-header-item>
|
|
104
|
-
|
|
105
|
-
<layout-default-header-item direction="right" hidden="mobile">
|
|
106
|
-
<yz-header-theme-btn></yz-header-theme-btn>
|
|
107
|
-
</layout-default-header-item>
|
|
108
|
-
|
|
109
|
-
<layout-default-header-item direction="right" hidden="mobile">
|
|
110
|
-
<div
|
|
111
|
-
layout-default-header-item-trigger
|
|
112
|
-
nz-dropdown
|
|
113
|
-
[nzDropdownMenu]="settingsMenu"
|
|
114
|
-
nzTrigger="click"
|
|
115
|
-
nzPlacement="bottomRight"
|
|
116
|
-
>
|
|
117
|
-
<i nz-icon nzType="setting"></i>
|
|
118
|
-
</div>
|
|
119
|
-
<nz-dropdown-menu #settingsMenu="nzDropdownMenu">
|
|
120
|
-
<div nz-menu style="width: 200px;">
|
|
121
|
-
<div nz-menu-item>
|
|
122
|
-
{{ 'menu.application.mode' | i18n }}
|
|
123
|
-
</div>
|
|
124
|
-
|
|
125
|
-
<div nz-menu-item (click)="onHeaderTypeChange('application')">
|
|
126
|
-
<i nz-icon nzType="appstore" class="mr-sm"></i>
|
|
127
|
-
{{ 'menu.application.application' | i18n }}
|
|
128
|
-
</div>
|
|
129
|
-
|
|
130
|
-
<div nz-menu-item (click)="onHeaderTypeChange('group')">
|
|
131
|
-
<i nz-icon nzType="group" class="mr-sm"></i>
|
|
132
|
-
{{ 'menu.application.group' | i18n }}
|
|
133
|
-
</div>
|
|
134
|
-
|
|
135
|
-
<div nz-menu-item>
|
|
136
|
-
<yz-header-fullscreen></yz-header-fullscreen>
|
|
137
|
-
</div>
|
|
138
|
-
<div nz-menu-item>
|
|
139
|
-
<yz-header-clear-storage></yz-header-clear-storage>
|
|
140
|
-
</div>
|
|
141
|
-
<div nz-menu-item>
|
|
142
|
-
<yz-header-i18n></yz-header-i18n>
|
|
143
|
-
</div>
|
|
144
|
-
</div>
|
|
145
|
-
</nz-dropdown-menu>
|
|
146
|
-
</layout-default-header-item>
|
|
147
|
-
<layout-default-header-item direction="right">
|
|
148
|
-
<yz-header-user></yz-header-user>
|
|
149
|
-
</layout-default-header-item>
|
|
150
|
-
<ng-template #asideUserTpl>
|
|
151
|
-
<div nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu" class="yunzai-default__aside-user">
|
|
152
|
-
<nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="icon"></nz-avatar>
|
|
153
|
-
<div class="yunzai-default__aside-user-info">
|
|
154
|
-
<strong>{{ text }}</strong>
|
|
155
|
-
<p class="mb0">{{ intro }}</p>
|
|
156
|
-
</div>
|
|
157
|
-
</div>
|
|
158
|
-
<nz-dropdown-menu #userMenu="nzDropdownMenu">
|
|
159
|
-
<ul nz-menu>
|
|
160
|
-
<li nz-menu-item routerLink="/">{{ 'menu.backtohome' | i18n }}</li>
|
|
161
|
-
</ul>
|
|
162
|
-
</nz-dropdown-menu>
|
|
163
|
-
</ng-template>
|
|
164
|
-
<ng-template #contentTpl>
|
|
165
|
-
<reuse-tab #reuseTab [ngStyle]="reuseStyleSheet"></reuse-tab>
|
|
166
|
-
<router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>
|
|
167
|
-
</ng-template>
|
|
168
|
-
<ng-template #noneTpl>
|
|
169
|
-
<router-outlet></router-outlet>
|
|
170
|
-
</ng-template>
|
|
171
|
-
</layout-default>
|
|
172
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i5.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.ReuseTabComponent, selector: "reuse-tab, [reuse-tab]", inputs: ["mode", "i18n", "debug", "max", "tabMaxWidth", "excludes", "allowClose", "keepingScroll", "storageState", "keepingScrollContainer", "customContextMenu", "tabBarExtraContent", "tabBarGutter", "tabBarStyle", "tabType", "routeParamMatchMode", "disabled", "titleRender", "canClose"], outputs: ["change", "close"], exportAs: ["reuseTab"] }, { kind: "component", type: i3.LayoutDefaultComponent, selector: "layout-default", inputs: ["options", "asideUser", "nav", "content", "customError"], exportAs: ["layoutDefault"] }, { kind: "component", type: i3.LayoutDefaultHeaderItemComponent, selector: "layout-default-header-item", inputs: ["hidden", "direction"] }, { kind: "directive", type: i3.LayoutDefaultHeaderItemTriggerDirective, selector: "[layout-default-header-item-trigger]" }, { kind: "directive", type: i7.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i8.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "directive", type: i8.NzMenuItemDirective, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i9.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i9.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i10.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i11.NzAvatarComponent, selector: "nz-avatar", inputs: ["nzShape", "nzSize", "nzGap", "nzText", "nzSrc", "nzSrcSet", "nzAlt", "nzIcon"], outputs: ["nzError"], exportAs: ["nzAvatar"] }, { kind: "component", type: i12.YzHeaderApplicationComponent, selector: "yz-header-application" }, { kind: "component", type: i13.YzHeaderNotifyComponent, selector: "yz-header-notify" }, { kind: "component", type: i14.YzHeaderThemBtnComponent, selector: "yz-header-theme-btn", inputs: ["types", "devTips", "deployUrl"] }, { kind: "component", type: i15.YzHeaderUserComponent, selector: "yz-header-user" }, { kind: "component", type: i16.YzHeaderFullScreenComponent, selector: "yz-header-fullscreen" }, { kind: "component", type: i17.YzHeaderClearStorageComponent, selector: "yz-header-clear-storage" }, { kind: "component", type: i18.YzHeaderI18NComponent, selector: "yz-header-i18n", inputs: ["showLangText"] }, { kind: "component", type: i19.YzHeaderApplicationGroupComponent, selector: "yz-header-application-group" }, { kind: "pipe", type: i20.I18nPipe, name: "i18n" }] });
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: YzLayoutBasicComponent, decorators: [{
|
|
174
|
-
type: Component,
|
|
175
|
-
args: [{
|
|
176
|
-
selector: 'yz-layout-basic',
|
|
177
|
-
template: `
|
|
178
|
-
<layout-default [options]="options" [asideUser]="asideUserTpl" [content]="showReuseTab ? contentTpl : noneTpl">
|
|
179
|
-
<layout-default-header-item direction="left">
|
|
180
|
-
<ng-container [ngSwitch]="headerType">
|
|
181
|
-
<ng-container *ngSwitchCase="'application'">
|
|
182
|
-
<yz-header-application></yz-header-application>
|
|
183
|
-
</ng-container>
|
|
184
|
-
|
|
185
|
-
<ng-container *ngSwitchCase="'group'">
|
|
186
|
-
<yz-header-application-group></yz-header-application-group>
|
|
187
|
-
</ng-container>
|
|
188
|
-
|
|
189
|
-
<ng-container *ngSwitchDefault>
|
|
190
|
-
<yz-header-application></yz-header-application>
|
|
191
|
-
</ng-container>
|
|
192
|
-
</ng-container>
|
|
193
|
-
</layout-default-header-item>
|
|
194
|
-
|
|
195
|
-
<layout-default-header-item direction="right" hidden="mobile">
|
|
196
|
-
<yz-header-notify></yz-header-notify>
|
|
197
|
-
</layout-default-header-item>
|
|
198
|
-
|
|
199
|
-
<layout-default-header-item direction="right" hidden="mobile">
|
|
200
|
-
<yz-header-theme-btn></yz-header-theme-btn>
|
|
201
|
-
</layout-default-header-item>
|
|
202
|
-
|
|
203
|
-
<layout-default-header-item direction="right" hidden="mobile">
|
|
204
|
-
<div
|
|
205
|
-
layout-default-header-item-trigger
|
|
206
|
-
nz-dropdown
|
|
207
|
-
[nzDropdownMenu]="settingsMenu"
|
|
208
|
-
nzTrigger="click"
|
|
209
|
-
nzPlacement="bottomRight"
|
|
210
|
-
>
|
|
211
|
-
<i nz-icon nzType="setting"></i>
|
|
212
|
-
</div>
|
|
213
|
-
<nz-dropdown-menu #settingsMenu="nzDropdownMenu">
|
|
214
|
-
<div nz-menu style="width: 200px;">
|
|
215
|
-
<div nz-menu-item>
|
|
216
|
-
{{ 'menu.application.mode' | i18n }}
|
|
217
|
-
</div>
|
|
218
|
-
|
|
219
|
-
<div nz-menu-item (click)="onHeaderTypeChange('application')">
|
|
220
|
-
<i nz-icon nzType="appstore" class="mr-sm"></i>
|
|
221
|
-
{{ 'menu.application.application' | i18n }}
|
|
222
|
-
</div>
|
|
223
|
-
|
|
224
|
-
<div nz-menu-item (click)="onHeaderTypeChange('group')">
|
|
225
|
-
<i nz-icon nzType="group" class="mr-sm"></i>
|
|
226
|
-
{{ 'menu.application.group' | i18n }}
|
|
227
|
-
</div>
|
|
228
|
-
|
|
229
|
-
<div nz-menu-item>
|
|
230
|
-
<yz-header-fullscreen></yz-header-fullscreen>
|
|
231
|
-
</div>
|
|
232
|
-
<div nz-menu-item>
|
|
233
|
-
<yz-header-clear-storage></yz-header-clear-storage>
|
|
234
|
-
</div>
|
|
235
|
-
<div nz-menu-item>
|
|
236
|
-
<yz-header-i18n></yz-header-i18n>
|
|
237
|
-
</div>
|
|
238
|
-
</div>
|
|
239
|
-
</nz-dropdown-menu>
|
|
240
|
-
</layout-default-header-item>
|
|
241
|
-
<layout-default-header-item direction="right">
|
|
242
|
-
<yz-header-user></yz-header-user>
|
|
243
|
-
</layout-default-header-item>
|
|
244
|
-
<ng-template #asideUserTpl>
|
|
245
|
-
<div nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu" class="yunzai-default__aside-user">
|
|
246
|
-
<nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="icon"></nz-avatar>
|
|
247
|
-
<div class="yunzai-default__aside-user-info">
|
|
248
|
-
<strong>{{ text }}</strong>
|
|
249
|
-
<p class="mb0">{{ intro }}</p>
|
|
250
|
-
</div>
|
|
251
|
-
</div>
|
|
252
|
-
<nz-dropdown-menu #userMenu="nzDropdownMenu">
|
|
253
|
-
<ul nz-menu>
|
|
254
|
-
<li nz-menu-item routerLink="/">{{ 'menu.backtohome' | i18n }}</li>
|
|
255
|
-
</ul>
|
|
256
|
-
</nz-dropdown-menu>
|
|
257
|
-
</ng-template>
|
|
258
|
-
<ng-template #contentTpl>
|
|
259
|
-
<reuse-tab #reuseTab [ngStyle]="reuseStyleSheet"></reuse-tab>
|
|
260
|
-
<router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>
|
|
261
|
-
</ng-template>
|
|
262
|
-
<ng-template #noneTpl>
|
|
263
|
-
<router-outlet></router-outlet>
|
|
264
|
-
</ng-template>
|
|
265
|
-
</layout-default>
|
|
266
|
-
`
|
|
267
|
-
}]
|
|
268
|
-
}], ctorParameters: function () { return [{ type: i1.CacheService }, { type: i2.YzStompService }, { type: i3.LayoutService }, { type: i0.Injector }]; } });
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouYmFzaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC95ei5iYXNpYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFJdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtHckMsTUFBTSxPQUFPLHNCQUFzQjtJQWdDakMsWUFDVSxZQUEwQixFQUMxQixjQUE4QixFQUM5QixhQUE0QixFQUM1QixRQUFrQjtRQUhsQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQW5DNUIsWUFBTyxHQUF5QjtZQUM5QixZQUFZLEVBQUUsd0JBQXdCO1lBQ3RDLGFBQWEsRUFBRSxtQkFBbUI7U0FDbkMsQ0FBQztRQUVGLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzdCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixlQUFVLEdBQVcsYUFBYSxDQUFDO0lBd0IvQixDQUFDO0lBdEJMLElBQUksZUFBZTtRQUNqQixJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixtQkFBbUIsR0FBRztnQkFDcEIsR0FBRyxtQkFBbUI7Z0JBQ3RCLEdBQUcsRUFBRSxDQUFDO2FBQ1AsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFT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Q1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlGVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJ0B5ZWxvbi9jYWNoZSc7XG5pbXBvcnQgeyBMYXlvdXREZWZhdWx0T3B0aW9ucywgTGF5b3V0U2VydmljZSB9IGZyb20gJ0B5ZWxvbi90aGVtZS9sYXlvdXQtZGVmYXVsdCc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICdAeWVsb24vdXRpbCc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBZelN0b21wU2VydmljZSB9IGZyb20gJy4veXouc3RvbXAuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l6LWxheW91dC1iYXNpYycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGxheW91dC1kZWZhdWx0IFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbYXNpZGVVc2VyXT1cImFzaWRlVXNlclRwbFwiIFtjb250ZW50XT1cInNob3dSZXVzZVRhYiA/IGNvbnRlbnRUcGwgOiBub25lVHBsXCI+XG4gICAgICA8bGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0gZGlyZWN0aW9uPVwibGVmdFwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJoZWFkZXJUeXBlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FwcGxpY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPHl6LWhlYWRlci1hcHBsaWNhdGlvbj48L3l6LWhlYWRlci1hcHBsaWNhdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIj5cbiAgICAgICAgICAgIDx5ei1oZWFkZXItYXBwbGljYXRpb24tZ3JvdXA+PC95ei1oZWFkZXItYXBwbGljYXRpb24tZ3JvdXA+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICA8eXotaGVhZGVyLWFwcGxpY2F0aW9uPjwveXotaGVhZGVyLWFwcGxpY2F0aW9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0+XG5cbiAgICAgIDxsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbSBkaXJlY3Rpb249XCJyaWdodFwiIGhpZGRlbj1cIm1vYmlsZVwiPlxuICAgICAgICA8eXotaGVhZGVyLW5vdGlmeT48L3l6LWhlYWRlci1ub3RpZnk+XG4gICAgICA8L2xheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtPlxuXG4gICAgICA8bGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0gZGlyZWN0aW9uPVwicmlnaHRcIiBoaWRkZW49XCJtb2JpbGVcIj5cbiAgICAgICAgPHl6LWhlYWRlci10aGVtZS1idG4+PC95ei1oZWFkZXItdGhlbWUtYnRuPlxuICAgICAgPC9sYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbT5cblxuICAgICAgPGxheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtIGRpcmVjdGlvbj1cInJpZ2h0XCIgaGlkZGVuPVwibW9iaWxlXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbS10cmlnZ2VyXG4gICAgICAgICAgbnotZHJvcGRvd25cbiAgICAgICAgICBbbnpEcm9wZG93bk1lbnVdPVwic2V0dGluZ3NNZW51XCJcbiAgICAgICAgICBuelRyaWdnZXI9XCJjbGlja1wiXG4gICAgICAgICAgbnpQbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cInNldHRpbmdcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bnotZHJvcGRvd24tbWVudSAjc2V0dGluZ3NNZW51PVwibnpEcm9wZG93bk1lbnVcIj5cbiAgICAgICAgICA8ZGl2IG56LW1lbnUgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IG56LW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAge3sgJ21lbnUuYXBwbGljYXRpb24ubW9kZScgfCBpMThuIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBuei1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uSGVhZGVyVHlwZUNoYW5nZSgnYXBwbGljYXRpb24nKVwiPlxuICAgICAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cImFwcHN0b3JlXCIgY2xhc3M9XCJtci1zbVwiPjwvaT5cbiAgICAgICAgICAgICAge3sgJ21lbnUuYXBwbGljYXRpb24uYXBwbGljYXRpb24nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgbnotbWVudS1pdGVtIChjbGljayk9XCJvbkhlYWRlclR5cGVDaGFuZ2UoJ2dyb3VwJylcIj5cbiAgICAgICAgICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJncm91cFwiIGNsYXNzPVwibXItc21cIj48L2k+XG4gICAgICAgICAgICAgIHt7ICdtZW51LmFwcGxpY2F0aW9uLmdyb3VwJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IG56LW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAgPHl6LWhlYWRlci1mdWxsc2NyZWVuPjwveXotaGVhZGVyLWZ1bGxzY3JlZW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgbnotbWVudS1pdGVtPlxuICAgICAgICAgICAgICA8eXotaGVhZGVyLWNsZWFyLXN0b3JhZ2U+PC95ei1oZWFkZXItY2xlYXItc3RvcmFnZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBuei1tZW51LWl0ZW0+XG4gICAgICAgICAgICAgIDx5ei1oZWFkZXItaTE4bj48L3l6LWhlYWRlci1pMThuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbnotZHJvcGRvd24tbWVudT5cbiAgICAgIDwvbGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0+XG4gICAgICA8bGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0gZGlyZWN0aW9uPVwicmlnaHRcIj5cbiAgICAgICAgPHl6LWhlYWRlci11c2VyPjwveXotaGVhZGVyLXVzZXI+XG4gICAgICA8L2xheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtPlxuICAgICAgPG5nLXRlbXBsYXRlICNhc2lkZVVzZXJUcGw+XG4gICAgICAgIDxkaXYgbnotZHJvcGRvd24gbnpUcmlnZ2VyPVwiY2xpY2tcIiBbbnpEcm9wZG93bk1lbnVdPVwidXNlck1lbnVcIiBjbGFzcz1cInl1bnphaS1kZWZhdWx0X19hc2lkZS11c2VyXCI+XG4gICAgICAgICAgPG56LWF2YXRhciBjbGFzcz1cInl1bnphaS1kZWZhdWx0X19hc2lkZS11c2VyLWF2YXRhclwiIFtuelNyY109XCJpY29uXCI+PC9uei1hdmF0YXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInl1bnphaS1kZWZhdWx0X19hc2lkZS11c2VyLWluZm9cIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYjBcIj57eyBpbnRybyB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuei1kcm9wZG93bi1tZW51ICN1c2VyTWVudT1cIm56RHJvcGRvd25NZW51XCI+XG4gICAgICAgICAgPHVsIG56LW1lbnU+XG4gICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIHJvdXRlckxpbms9XCIvXCI+e3sgJ21lbnUuYmFja3RvaG9tZScgfCBpMThuIH19PC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L256LWRyb3Bkb3duLW1lbnU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50VHBsPlxuICAgICAgICA8cmV1c2UtdGFiICNyZXVzZVRhYiBbbmdTdHlsZV09XCJyZXVzZVN0eWxlU2hlZXRcIj48L3JldXNlLXRhYj5cbiAgICAgICAgPHJvdXRlci1vdXRsZXQgKGFjdGl2YXRlKT1cInJldXNlVGFiLmFjdGl2YXRlKCRldmVudClcIiAoYXR0YWNoKT1cInJldXNlVGFiLmFjdGl2YXRlKCRldmVudClcIj48L3JvdXRlci1vdXRsZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNub25lVHBsPlxuICAgICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbGF5b3V0LWRlZmF1bHQ+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgWXpMYXlvdXRCYXNpY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgb3B0aW9uczogTGF5b3V0RGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgbG9nb0V4cGFuZGVkOiBgLi9hc3NldHMvbG9nby1mdWxsLnN2Z2AsXG4gICAgbG9nb0NvbGxhcHNlZDogYC4vYXNzZXRzL2xvZ28uc3ZnYFxuICB9O1xuXG4gIGludHJvOiBzdHJpbmcgPSAnJztcbiAgdGV4dDogc3RyaW5nID0gJyc7XG4gIGljb246IHN0cmluZyA9ICcnO1xuXG4gIHNob3dSZXVzZVRhYjogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93U2lkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBoZWFkZXJUeXBlOiBzdHJpbmcgPSAnYXBwbGljYXRpb24nO1xuXG4gIGdldCByZXVzZVN0eWxlU2hlZXQoKTogTnpTYWZlQW55IHtcbiAgICBsZXQgY2FzY2FkaW5nU3R5bGVTaGVldCA9IHt9O1xuICAgIGlmICghdGhpcy5zaG93SGVhZGVyKSB7XG4gICAgICBjYXNjYWRpbmdTdHlsZVNoZWV0ID0ge1xuICAgICAgICAuLi5jYXNjYWRpbmdTdHlsZVNoZWV0LFxuICAgICAgICB0b3A6IDBcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy5zaG93U2lkZXIpIHtcbiAgICAgIGNhc2NhZGluZ1N0eWxlU2hlZXQgPSB7XG4gICAgICAgIC4uLmNhc2NhZGluZ1N0eWxlU2hlZXQsXG4gICAgICAgIGxlZnQ6ICcyNHB4J1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNhc2NhZGluZ1N0eWxlU2hlZXQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgeXpTdG9tcFNlcnZpY2U6IFl6U3RvbXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQ6IE56U2FmZUFueSA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldCgnX3l6X2N1cnJlbnQnLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBjb25zdCBwcm9qZWN0OiBOelNhZmVBbnkgPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoJ195el9wcm9qZWN0X2luZm8nLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBjb25zdCBoZWFkZXJUeXBlID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfaGVhZGVyX3R5cGUnLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBpZiAoaGVhZGVyVHlwZSkgdGhpcy5oZWFkZXJUeXBlID0gaGVhZGVyVHlwZTtcbiAgICB0aGlzLnRleHQgPSBjdXJyZW50LnRleHQgPyBjdXJyZW50LnRleHQgOiAn5bqU55So5ZCN56ewJztcbiAgICB0aGlzLmludHJvID0gY3VycmVudC5pbnRybyA/IGN1cnJlbnQuaW50cm8gOiAn5bqU55So5o+P6L+wJztcbiAgICB0aGlzLmljb24gPSBjdXJyZW50Lmljb24gPyBjdXJyZW50Lmljb24gOiBgLi9hc3NldHMvdG1wL2ltZy9hdmF0YXIuanBnYDtcbiAgICB0aGlzLm9wdGlvbnMubG9nb0V4cGFuZGVkID0gcHJvamVjdC5tYXhMb2dvVXJsID8gcHJvamVjdC5tYXhMb2dvVXJsIDogYC4vYXNzZXRzL2xvZ28tZnVsbC5zdmdgO1xuICAgIHRoaXMub3B0aW9ucy5sb2dvQ29sbGFwc2VkID0gcHJvamVjdC5taW5pTG9nb1VybCA/IHByb2plY3QubWluaUxvZ29VcmwgOiBgLi9hc3NldHMvbG9nby5zdmdgO1xuICAgIHRoaXMueXpTdG9tcFNlcnZpY2UubGlzdGVuKCk7XG4gICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnJldXNlVGFiLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShzaG93ID0+ICh0aGlzLnNob3dSZXVzZVRhYiA9IHNob3cpKTtcbiAgICB0aGlzLmxheW91dFNlcnZpY2UuaGVhZGVyLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShzaG93ID0+ICh0aGlzLnNob3dIZWFkZXIgPSBzaG93KSk7XG4gICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnNpZGViYXIuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKHNob3cgPT4gKHRoaXMuc2hvd1NpZGVyID0gc2hvdykpO1xuICB9XG5cbiAgb25IZWFkZXJUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X2hlYWRlcl90eXBlJywgdHlwZSk7XG4gICAgdGhpcy5pbmplY3Rvci5nZXQoV0lORE9XKS5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMueXpTdG9tcFNlcnZpY2UudW5MaXN0ZW4oKTtcbiAgfVxufVxuIl19
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { HttpErrorResponse, HttpResponse, HttpResponseBase } from '@angular/common/http';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { Router } from '@angular/router';
|
|
4
|
-
import { BehaviorSubject, of, throwError, catchError, filter, mergeMap, switchMap, take } from 'rxjs';
|
|
5
|
-
import { YA_SERVICE_TOKEN, ALLOW_ANONYMOUS } from '@yelon/auth';
|
|
6
|
-
import { YUNZAI_I18N_TOKEN, _HttpClient } from '@yelon/theme';
|
|
7
|
-
import { WINDOW } from '@yelon/util';
|
|
8
|
-
import { YunzaiConfigService } from '@yelon/util/config';
|
|
9
|
-
import { log } from '@yelon/util/other';
|
|
10
|
-
import { NzNotificationService } from 'ng-zorro-antd/notification';
|
|
11
|
-
import { mergeBisConfig } from './bis.config';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
const CODEMESSAGE = {
|
|
14
|
-
200: '服务器成功返回请求的数据。',
|
|
15
|
-
201: '新建或修改数据成功。',
|
|
16
|
-
202: '一个请求已经进入后台排队(异步任务)。',
|
|
17
|
-
204: '删除数据成功。',
|
|
18
|
-
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
|
|
19
|
-
401: '用户没有权限(令牌、用户名、密码错误)。',
|
|
20
|
-
403: '用户得到授权,但是访问是被禁止的。',
|
|
21
|
-
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
|
|
22
|
-
406: '请求的格式不可得。',
|
|
23
|
-
410: '请求的资源被永久删除,且不会再得到的。',
|
|
24
|
-
422: '当创建一个对象时,发生一个验证错误。',
|
|
25
|
-
500: '服务器发生错误,请检查服务器。',
|
|
26
|
-
502: '网关错误。',
|
|
27
|
-
503: '服务不可用,服务器暂时过载或维护。',
|
|
28
|
-
504: '网关超时。'
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* 默认HTTP拦截器,其注册细节见 `app.module.ts`
|
|
32
|
-
*/
|
|
33
|
-
export class YzDefaultInterceptor {
|
|
34
|
-
constructor(injector) {
|
|
35
|
-
this.injector = injector;
|
|
36
|
-
this.jump = false;
|
|
37
|
-
this.refreshToking = false;
|
|
38
|
-
this.refreshToken$ = new BehaviorSubject(null);
|
|
39
|
-
if (this.config.refreshTokenType === 'auth-refresh') {
|
|
40
|
-
console.error("can't use auth-refresh, please change yz.default.interceptor to default.interceptor!");
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
get notification() {
|
|
44
|
-
return this.injector.get(NzNotificationService);
|
|
45
|
-
}
|
|
46
|
-
get tokenSrv() {
|
|
47
|
-
return this.injector.get(YA_SERVICE_TOKEN);
|
|
48
|
-
}
|
|
49
|
-
get http() {
|
|
50
|
-
return this.injector.get(_HttpClient);
|
|
51
|
-
}
|
|
52
|
-
get config() {
|
|
53
|
-
return mergeBisConfig(this.injector.get(YunzaiConfigService));
|
|
54
|
-
}
|
|
55
|
-
goTo(url) {
|
|
56
|
-
setTimeout(() => this.injector.get(Router).navigateByUrl(url));
|
|
57
|
-
}
|
|
58
|
-
checkStatus(ev) {
|
|
59
|
-
if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
if (ev instanceof HttpErrorResponse && (ev.error.message || ev.error.errorMessage)) {
|
|
63
|
-
if (ev.error.errorMessage) {
|
|
64
|
-
this.notification.error(`发生了一些错误 `, ev.error.errorMessage);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
this.notification.error(`发生了一些错误 `, ev.error.message);
|
|
68
|
-
}
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if (ev instanceof HttpResponse && ev.body.errorMessage) {
|
|
72
|
-
this.notification.error(`发生了一些错误 `, ev.body.errorMessage);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const errortext = CODEMESSAGE[ev.status] || ev.statusText;
|
|
76
|
-
this.notification.error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
|
|
77
|
-
}
|
|
78
|
-
ToLogin() {
|
|
79
|
-
this.notification.error(`未登录或登录状态已过期,5秒后将跳转到登录页面。`, ``);
|
|
80
|
-
setTimeout(() => {
|
|
81
|
-
localStorage.clear();
|
|
82
|
-
this.injector.get(WINDOW).location.href = `${this.config.baseUrl}/cas-proxy/app/logout`;
|
|
83
|
-
}, 5000);
|
|
84
|
-
}
|
|
85
|
-
reAttachToken(req) {
|
|
86
|
-
const token = this.tokenSrv.get()?.token;
|
|
87
|
-
return req.clone({
|
|
88
|
-
setHeaders: {
|
|
89
|
-
Authorization: `Bearer ${token}`
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
refreshTokenRequest() {
|
|
94
|
-
const model = this.tokenSrv.get();
|
|
95
|
-
const form = new FormData();
|
|
96
|
-
form.set('refresh_token', model?.refreshToken);
|
|
97
|
-
form.set('grant_type', 'refresh_token');
|
|
98
|
-
form.set('scope', 'webapp');
|
|
99
|
-
log('yz.default.interceptor: use the refresh token to request a new token', model?.refreshToken);
|
|
100
|
-
// return this.http.post(`/auth/user/token/refresh?_allow_anonymous=true`, form);
|
|
101
|
-
return this.http.post(`/auth/oauth/getOrCreateToken/webapp`, form);
|
|
102
|
-
}
|
|
103
|
-
tryRefreshToken(ev, req, next) {
|
|
104
|
-
// 连刷新Token的请求都错了,那就是真错了
|
|
105
|
-
if (['/auth/oauth/getOrCreateToken/webapp'].some(url => req.url.includes(url))) {
|
|
106
|
-
this.ToLogin();
|
|
107
|
-
return throwError(() => ev);
|
|
108
|
-
}
|
|
109
|
-
// 正在刷新token,所有其他请求排队
|
|
110
|
-
if (this.refreshToking) {
|
|
111
|
-
return this.refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next.handle(this.reAttachToken(req))));
|
|
112
|
-
}
|
|
113
|
-
//尝试调用刷新 Token
|
|
114
|
-
this.refreshToking = true;
|
|
115
|
-
this.refreshToken$.next(null);
|
|
116
|
-
// 处理Token
|
|
117
|
-
return this.refreshTokenRequest().pipe(switchMap(res => {
|
|
118
|
-
log('yz.default.interceptor: refresh token accessed -> ', res);
|
|
119
|
-
// 重新保存新 token
|
|
120
|
-
const { access_token, expires_in, refresh_token, scope, token_type } = res;
|
|
121
|
-
this.tokenSrv.set({
|
|
122
|
-
token: access_token,
|
|
123
|
-
expired: expires_in,
|
|
124
|
-
refreshToken: refresh_token,
|
|
125
|
-
tokenType: token_type,
|
|
126
|
-
scope
|
|
127
|
-
});
|
|
128
|
-
// 通知后续请求继续执行
|
|
129
|
-
this.refreshToking = false;
|
|
130
|
-
this.refreshToken$.next(res);
|
|
131
|
-
// 重新发起请求
|
|
132
|
-
return next.handle(this.reAttachToken(req));
|
|
133
|
-
}), catchError(err => {
|
|
134
|
-
this.refreshToking = false;
|
|
135
|
-
this.ToLogin();
|
|
136
|
-
return throwError(() => err);
|
|
137
|
-
}));
|
|
138
|
-
}
|
|
139
|
-
getAdditionalHeaders(headers) {
|
|
140
|
-
const res = {};
|
|
141
|
-
const lang = this.injector.get(YUNZAI_I18N_TOKEN).currentLang;
|
|
142
|
-
if (!headers?.has('Accept-Language') && lang) {
|
|
143
|
-
res['Accept-Language'] = lang;
|
|
144
|
-
}
|
|
145
|
-
return res;
|
|
146
|
-
}
|
|
147
|
-
handleData(ev, req, next) {
|
|
148
|
-
this.checkStatus(ev);
|
|
149
|
-
switch (ev.status) {
|
|
150
|
-
case 200:
|
|
151
|
-
return of(ev);
|
|
152
|
-
case 401:
|
|
153
|
-
if (this.config.refreshTokenEnabled && this.config.refreshTokenType === 're-request') {
|
|
154
|
-
return this.tryRefreshToken(ev, req, next);
|
|
155
|
-
}
|
|
156
|
-
this.ToLogin();
|
|
157
|
-
break;
|
|
158
|
-
case 403:
|
|
159
|
-
case 404:
|
|
160
|
-
case 500:
|
|
161
|
-
if (this.jump) {
|
|
162
|
-
this.goTo(`/exception/${ev.status}`);
|
|
163
|
-
}
|
|
164
|
-
break;
|
|
165
|
-
default:
|
|
166
|
-
if (ev instanceof HttpErrorResponse) {
|
|
167
|
-
console.warn('未可知错误,大部分是由于后端不支持跨域CORS或无效配置引起,请参考 https://ng.yunzainfo.com/docs/server 解决跨域问题', ev);
|
|
168
|
-
}
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
if (ev instanceof HttpErrorResponse) {
|
|
172
|
-
return throwError(() => ev);
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
return of(ev);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
intercept(req, next) {
|
|
179
|
-
if (req.context.get(ALLOW_ANONYMOUS))
|
|
180
|
-
return next.handle(req);
|
|
181
|
-
log('yz.default.interceptor.ts: ', 'request ', req);
|
|
182
|
-
// 统一加前缀
|
|
183
|
-
let url = req.url;
|
|
184
|
-
if (!url.startsWith('https://') && !url.startsWith('http://')) {
|
|
185
|
-
url = this.config.baseUrl + url;
|
|
186
|
-
}
|
|
187
|
-
if (url.includes('.json') && url.includes('assets')) {
|
|
188
|
-
url = req.url;
|
|
189
|
-
}
|
|
190
|
-
// 加入语言头
|
|
191
|
-
const newReq = req.clone({ url, setHeaders: this.getAdditionalHeaders(req.headers) });
|
|
192
|
-
return next.handle(newReq).pipe(mergeMap(ev => {
|
|
193
|
-
// 允许统一对请求错误处理
|
|
194
|
-
if (ev instanceof HttpResponseBase) {
|
|
195
|
-
return this.handleData(ev, newReq, next);
|
|
196
|
-
}
|
|
197
|
-
// 若一切都正常,则后续操作
|
|
198
|
-
return of(ev);
|
|
199
|
-
}), catchError((err) => this.handleData(err, newReq, next)));
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
YzDefaultInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: YzDefaultInterceptor, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
203
|
-
YzDefaultInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: YzDefaultInterceptor });
|
|
204
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: YzDefaultInterceptor, decorators: [{
|
|
205
|
-
type: Injectable
|
|
206
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouZGVmYXVsdC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQveXouZGVmYXVsdC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBTWpCLFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWlCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUU5QyxNQUFNLFdBQVcsR0FBOEI7SUFDN0MsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLFlBQVk7SUFDakIsR0FBRyxFQUFFLHFCQUFxQjtJQUMxQixHQUFHLEVBQUUsU0FBUztJQUNkLEdBQUcsRUFBRSw2QkFBNkI7SUFDbEMsR0FBRyxFQUFFLHNCQUFz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QUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM3RCxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7U0FDZjtRQUNELFFBQVE7UUFDUixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUM3QixRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDWixjQUFjO1lBQ2QsSUFBSSxFQUFFLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsZUFBZTtZQUNmLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUMzRSxDQUFDO0lBQ0osQ0FBQzs7aUhBbk1VLG9CQUFvQjtxSEFBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEV2ZW50LFxuICBIdHRwSGFuZGxlcixcbiAgSHR0cEhlYWRlcnMsXG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBSZXNwb25zZSxcbiAgSHR0cFJlc3BvbnNlQmFzZVxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBZQV9TRVJWSUNFX1RPS0VOLCBJVG9rZW5TZXJ2aWNlLCBBTExPV19BTk9OWU1PVVMgfSBmcm9tICdAeWVsb24vYXV0aCc7XG5pbXBvcnQgeyBZVU5aQUlfSTE4Tl9UT0tFTiwgX0h0dHBDbGllbnQgfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnQHllbG9uL3V0aWwnO1xuaW1wb3J0IHsgWXVuemFpQnVzaW5lc3NDb25maWcsIFl1bnphaUNvbmZpZ1NlcnZpY2UgfSBmcm9tICdAeWVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnQHllbG9uL3V0aWwvb3RoZXInO1xuaW1wb3J0IHsgTnpOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9ub3RpZmljYXRpb24nO1xuXG5pbXBvcnQgeyBtZXJnZUJpc0NvbmZpZyB9IGZyb20gJy4vYmlzLmNvbmZpZyc7XG5cbmNvbnN0IENPREVNRVNTQUdFOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge1xuICAyMDA6ICfmnI3liqHlmajmiJDlip/ov5Tlm57or7fmsYLnmoTmlbDmja7jgIInLFxuICAyMDE6ICfmlrDlu7rmiJbkv67mlLnmlbDmja7miJDlip/jgIInLFxuICAyMDI6ICfkuIDkuKror7fmsYLlt7Lnu4/ov5vlhaXlkI7lj7DmjpLpmJ/vvIjlvILmraXku7vliqHvvInjgIInLFxuICAyMDQ6ICfliKDpmaTmlbDmja7miJDlip/jgIInLFxuICA0MDA6ICflj5Hlh7rnmoTor7fmsYLmnInplJnor6/vvIzmnI3liqHlmajmsqHmnInov5vooYzmlrDlu7rmiJbkv67mlLnmlbDmja7nmoTmk43kvZzjgIInLFxuICA0MDE6ICfnlKjmiLfmsqHmnInmnYPpmZDvvIjku6TniYzjgIHnlKjmiLflkI3jgIHlr4bnoIHplJnor6/vvInjgIInLFxuICA0MDM6ICfnlKjmiLflvpfliLDmjojmnYPvvIzkvYbmmK/orr/pl67mmK/ooqvnpoHmraLnmoTjgIInLFxuICA0MDQ6ICflj5Hlh7rnmoTor7fmsYLpkojlr7nnmoTmmK/kuI3lrZjlnKjnmoTorrDlvZXvvIzmnI3liqHlmajmsqHmnInov5vooYzmk43kvZzjgIInLFxuICA0MDY6ICfor7fmsYLnmoTmoLzlvI/kuI3lj6/lvpfjgIInLFxuICA0MTA6ICfor7fmsYLnmoTotYTmupDooqvmsLjkuYXliKDpmaTvvIzkuJTkuI3kvJrlho3lvpfliLDnmoTjgIInLFxuICA0MjI6ICflvZPliJvlu7rkuIDkuKrlr7nosaHml7bvvIzlj5HnlJ/kuIDkuKrpqozor4HplJnor6/jgIInLFxuICA1MDA6ICfmnI3liqHlmajlj5HnlJ/plJnor6/vvIzor7fmo4Dmn6XmnI3liqHlmajjgIInLFxuICA1MDI6ICfnvZHlhbPplJnor6/jgIInLFxuICA1MDM6ICfmnI3liqHkuI3lj6/nlKjvvIzmnI3liqHlmajmmoLml7bov4fovb3miJbnu7TmiqTjgIInLFxuICA1MDQ6ICfnvZHlhbPotoXml7bjgIInXG59O1xuXG4vKipcbiAqIOm7mOiupEhUVFDmi6bmiKrlmajvvIzlhbbms6jlhoznu4boioLop4EgYGFwcC5tb2R1bGUudHNgXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBZekRlZmF1bHRJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIHByaXZhdGUganVtcCA9IGZhbHNlO1xuICBwcml2YXRlIHJlZnJlc2hUb2tpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW4kOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblxuICBwcml2YXRlIGdldCBub3RpZmljYXRpb24oKTogTnpOb3RpZmljYXRpb25TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoTnpOb3RpZmljYXRpb25TZXJ2aWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRva2VuU3J2KCk6IElUb2tlblNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChZQV9TRVJWSUNFX1RPS0VOKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGh0dHAoKTogX0h0dHBDbGllbnQge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChfSHR0cENsaWVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25maWcoKTogWXVuemFpQnVzaW5lc3NDb25maWcge1xuICAgIHJldHVybiBtZXJnZUJpc0NvbmZpZyh0aGlzLmluamVjdG9yLmdldChZdW56YWlDb25maWdTZXJ2aWNlKSk7XG4gIH1cblxuICBwcml2YXRlIGdvVG8odXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcikubmF2aWdhdGVCeVVybCh1cmwpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlblR5cGUgPT09ICdhdXRoLXJlZnJlc2gnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiY2FuJ3QgdXNlIGF1dGgtcmVmcmVzaCwgcGxlYXNlIGNoYW5nZSB5ei5kZWZhdWx0LmludGVyY2VwdG9yIHRvIGRlZmF1bHQuaW50ZXJjZXB0b3IhXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tTdGF0dXMoZXY6IEh0dHBSZXNwb25zZUJhc2UpOiB2b2lkIHtcbiAgICBpZiAoKGV2LnN0YXR1cyA+PSAyMDAgJiYgZXYuc3RhdHVzIDwgMzAwKSB8fCBldi5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldiBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIChldi5lcnJvci5tZXNzYWdlIHx8IGV2LmVycm9yLmVycm9yTWVzc2FnZSkpIHtcbiAgICAgIGlmIChldi5lcnJvci5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOWPkeeUn+S6huS4gOS6m+mUmeivryBgLCBldi5lcnJvci5lcnJvck1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOWPkeeUn+S6huS4gOS6m+mUmeivryBgLCBldi5lcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXYgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgJiYgZXYuYm9keS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKGDlj5HnlJ/kuobkuIDkupvplJnor68gYCwgZXYuYm9keS5lcnJvck1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlcnJvcnRleHQgPSBDT0RFTUVTU0FHRVtldi5zdGF0dXNdIHx8IGV2LnN0YXR1c1RleHQ7XG4gICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOivt+axgumUmeivryAke2V2LnN0YXR1c306ICR7ZXYudXJsfWAsIGVycm9ydGV4dCk7XG4gIH1cblxuICBwcml2YXRlIFRvTG9naW4oKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOacqueZu+W9leaIlueZu+W9leeKtuaAgeW3sui/h+acn++8jDXnp5LlkI7lsIbot7PovazliLDnmbvlvZXpobXpnaLjgIJgLCBgYCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KFdJTkRPVykubG9jYXRpb24uaHJlZiA9IGAke3RoaXMuY29uZmlnLmJhc2VVcmx9L2Nhcy1wcm94eS9hcHAvbG9nb3V0YDtcbiAgICB9LCA1MDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVBdHRhY2hUb2tlbihyZXE6IEh0dHBSZXF1ZXN0PGFueT4pOiBIdHRwUmVxdWVzdDxhbnk+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5TcnYuZ2V0KCk/LnRva2VuO1xuICAgIHJldHVybiByZXEuY2xvbmUoe1xuICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5SZXF1ZXN0KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnRva2VuU3J2LmdldCgpO1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtLnNldCgncmVmcmVzaF90b2tlbicsIG1vZGVsPy5yZWZyZXNoVG9rZW4pO1xuICAgIGZvcm0uc2V0KCdncmFudF90eXBlJywgJ3JlZnJlc2hfdG9rZW4nKTtcbiAgICBmb3JtLnNldCgnc2NvcGUnLCAnd2ViYXBwJyk7XG4gICAgbG9nKCd5ei5kZWZhdWx0LmludGVyY2VwdG9yOiB1c2UgdGhlIHJlZnJlc2ggdG9rZW4gdG8gcmVxdWVzdCBhIG5ldyB0b2tlbicsIG1vZGVsPy5yZWZyZXNoVG9rZW4pO1xuICAgIC8vIHJldHVybiB0aGlzLmh0dHAucG9zdChgL2F1dGgvdXNlci90b2tlbi9yZWZyZXNoP19hbGxvd19hbm9ueW1vdXM9dHJ1ZWAsIGZvcm0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgL2F1dGgvb2F1dGgvZ2V0T3JDcmVhdGVUb2tlbi93ZWJhcHBgLCBmb3JtKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJ5UmVmcmVzaFRva2VuKGV2OiBIdHRwUmVzcG9uc2VCYXNlLCByZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyDov57liLfmlrBUb2tlbueahOivt+axgumDvemUmeS6hu+8jOmCo+WwseaYr+ecn+mUmeS6hlxuICAgIGlmIChbJy9hdXRoL29hdXRoL2dldE9yQ3JlYXRlVG9rZW4vd2ViYXBwJ10uc29tZSh1cmwgPT4gcmVxLnVybC5pbmNsdWRlcyh1cmwpKSkge1xuICAgICAgdGhpcy5Ub0xvZ2luKCk7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBldik7XG4gICAgfVxuXG4gICAgLy8g5q2j5Zyo5Yi35pawdG9rZW7vvIzmiYDmnInlhbbku5bor7fmsYLmjpLpmJ9cbiAgICBpZiAodGhpcy5yZWZyZXNoVG9raW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW4kLnBpcGUoXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBuZXh0LmhhbmRsZSh0aGlzLnJlQXR0YWNoVG9rZW4ocmVxKSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8v5bCd6K+V6LCD55So5Yi35pawIFRva2VuXG4gICAgdGhpcy5yZWZyZXNoVG9raW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiQubmV4dChudWxsKTtcblxuICAgIC8vIOWkhOeQhlRva2VuXG4gICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuUmVxdWVzdCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocmVzID0+IHtcbiAgICAgICAgbG9nKCd5ei5kZWZhdWx0LmludGVyY2VwdG9yOiByZWZyZXNoIHRva2VuIGFjY2Vzc2VkIC0+ICcsIHJlcyk7XG4gICAgICAgIC8vIOmHjeaWsOS/neWtmOaWsCB0b2tlblxuICAgICAgICBjb25zdCB7IGFjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbiwgc2NvcGUsIHRva2VuX3R5cGUgfSA9IHJlcztcbiAgICAgICAgdGhpcy50b2tlblNydi5zZXQoe1xuICAgICAgICAgIHRva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgZXhwaXJlZDogZXhwaXJlc19pbixcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgdG9rZW5UeXBlOiB0b2tlbl90eXBlLFxuICAgICAgICAgIHNjb3BlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyDpgJrnn6XlkI7nu63or7fmsYLnu6fnu63miafooYxcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVmcmVzaFRva2VuJC5uZXh0KHJlcyk7XG4gICAgICAgIC8vIOmHjeaWsOWPkei1t+ivt+axglxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5yZUF0dGFjaFRva2VuKHJlcSkpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaFRva2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLlRvTG9naW4oKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWRkaXRpb25hbEhlYWRlcnMoaGVhZGVycz86IEh0dHBIZWFkZXJzKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHJlczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5pbmplY3Rvci5nZXQoWVVOWkFJX0kxOE5fVE9LRU4pLmN1cnJlbnRMYW5nO1xuICAgIGlmICghaGVhZGVycz8uaGFzKCdBY2NlcHQtTGFuZ3VhZ2UnKSAmJiBsYW5nKSB7XG4gICAgICByZXNbJ0FjY2VwdC1MYW5ndWFnZSddID0gbGFuZztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0YShldjogSHR0cFJlc3BvbnNlQmFzZSwgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgdGhpcy5jaGVja1N0YXR1cyhldik7XG4gICAgc3dpdGNoIChldi5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gb2YoZXYpO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZWZyZXNoVG9rZW5FbmFibGVkICYmIHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlblR5cGUgPT09ICdyZS1yZXF1ZXN0Jykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRyeVJlZnJlc2hUb2tlbihldiwgcmVxLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLlRvTG9naW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgIGNhc2UgNDA0OlxuICAgICAgY2FzZSA1MDA6XG4gICAgICAgIGlmICh0aGlzLmp1bXApIHtcbiAgICAgICAgICB0aGlzLmdvVG8oYC9leGNlcHRpb24vJHtldi5zdGF0dXN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICfmnKrlj6/nn6XplJnor6/vvIzlpKfpg6jliIbmmK/nlLHkuo7lkI7nq6/kuI3mlK/mjIHot6jln59DT1JT5oiW5peg5pWI6YWN572u5byV6LW377yM6K+35Y+C6ICDIGh0dHBzOi8vbmcueXVuemFpbmZvLmNvbS9kb2NzL3NlcnZlciDop6PlhrPot6jln5/pl67popgnLFxuICAgICAgICAgICAgZXZcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoZXYgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXYpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoZXYpO1xuICAgIH1cbiAgfVxuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIGlmIChyZXEuY29udGV4dC5nZXQoQUxMT1dfQU5PTllNT1VTKSkgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgbG9nKCd5ei5kZWZhdWx0LmludGVyY2VwdG9yLnRzOiAnLCAncmVxdWVzdCAnLCByZXEpO1xuICAgIC8vIOe7n+S4gOWKoOWJjee8gFxuICAgIGxldCB1cmwgPSByZXEudXJsO1xuICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiYgIXVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpIHtcbiAgICAgIHVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxuICAgIGlmICh1cmwuaW5jbHVkZXMoJy5qc29uJykgJiYgdXJsLmluY2x1ZGVzKCdhc3NldHMnKSkge1xuICAgICAgdXJsID0gcmVxLnVybDtcbiAgICB9XG4gICAgLy8g5Yqg5YWl6K+t6KiA5aS0XG4gICAgY29uc3QgbmV3UmVxID0gcmVxLmNsb25lKHsgdXJsLCBzZXRIZWFkZXJzOiB0aGlzLmdldEFkZGl0aW9uYWxIZWFkZXJzKHJlcS5oZWFkZXJzKSB9KTtcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUobmV3UmVxKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZXYgPT4ge1xuICAgICAgICAvLyDlhYHorrjnu5/kuIDlr7nor7fmsYLplJnor6/lpITnkIZcbiAgICAgICAgaWYgKGV2IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZURhdGEoZXYsIG5ld1JlcSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g6Iul5LiA5YiH6YO95q2j5bi477yM5YiZ5ZCO57ut5pON5L2cXG4gICAgICAgIHJldHVybiBvZihldik7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRGF0YShlcnIsIG5ld1JlcSwgbmV4dCkpXG4gICAgKTtcbiAgfVxufVxuIl19
|