hedwi-app-menu 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/esm2022/lib/app-menu.component.mjs +7 -3
- package/esm2022/lib/app-menu.types.mjs +752 -13
- package/esm2022/public-api.mjs +3 -3
- package/fesm2022/hedwi-app-menu.mjs +759 -16
- package/fesm2022/hedwi-app-menu.mjs.map +1 -1
- package/lib/app-menu.component.d.ts +4 -2
- package/lib/app-menu.types.d.ts +8 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -2
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# bind-app-menu
|
|
2
2
|
|
|
3
3
|
应用菜单组件库,用于在多个项目中复用「更多应用」下拉菜单(Mail、Contacts、Calendar、Chat、Drive 等)。
|
|
4
4
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
在 `app.module.ts` 中:
|
|
8
8
|
|
|
9
9
|
```ts
|
|
10
|
-
import { HedwiAppMenuModule } from "../../projects/
|
|
10
|
+
import { HedwiAppMenuModule } from "../../projects/bind-app-menu/src/public-api";
|
|
11
11
|
|
|
12
12
|
@NgModule({
|
|
13
13
|
imports: [ ..., HedwiAppMenuModule ],
|
|
@@ -19,17 +19,17 @@ import { HedwiAppMenuModule } from "../../projects/hedwi-app-menu/src/public-api
|
|
|
19
19
|
|
|
20
20
|
```html
|
|
21
21
|
<mat-menu #appMenu="matMenu" class="app-menu">
|
|
22
|
-
<
|
|
22
|
+
<bind-app-menu
|
|
23
23
|
[baseUrl]="environment.baseurl"
|
|
24
24
|
[cacheTs]="cacheTs"
|
|
25
|
-
></
|
|
25
|
+
></bind-app-menu>
|
|
26
26
|
</mat-menu>
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
## 在其它项目中使用
|
|
30
30
|
|
|
31
|
-
1. **复制库目录**:将 `projects/
|
|
32
|
-
2. **发布为 npm 包**(可选):在库目录执行 `ng build
|
|
31
|
+
1. **复制库目录**:将 `projects/bind-app-menu` 复制到目标项目的 `projects/` 下,并在目标项目中用相对路径或 path 引用 `public-api`。
|
|
32
|
+
2. **发布为 npm 包**(可选):在库目录执行 `ng build bind-app-menu`(需在 angular.json 中注册该库项目),将 `dist/bind-app-menu` 发布后,在其它项目中 `npm i bind-app-menu` 并 `import { HedwiAppMenuModule } from 'bind-app-menu'`。
|
|
33
33
|
|
|
34
34
|
## API
|
|
35
35
|
|
|
@@ -10,6 +10,8 @@ export class AppMenuComponent {
|
|
|
10
10
|
this.cacheTs = '';
|
|
11
11
|
/** 应用列表,不传则使用默认列表 */
|
|
12
12
|
this.apps = HEDWI_APP_MENU_DEFAULT_APPS;
|
|
13
|
+
/** 界面语言:优先 names[language],缺省时回退 name(通常为 en-us) */
|
|
14
|
+
this.language = 'en-us';
|
|
13
15
|
/** 按 groupIndex 分组后的列表(仅当 apps 变化时重新计算,避免每次变更检测返回新数组导致图片循环请求) */
|
|
14
16
|
this.appGroups = [];
|
|
15
17
|
}
|
|
@@ -42,7 +44,7 @@ export class AppMenuComponent {
|
|
|
42
44
|
}
|
|
43
45
|
/** 返回应用显示名称 */
|
|
44
46
|
displayName(item) {
|
|
45
|
-
return item.name;
|
|
47
|
+
return item.names?.[this.language] ?? item.name;
|
|
46
48
|
}
|
|
47
49
|
iconUrl(item) {
|
|
48
50
|
const base = (this.baseUrl || '').replace(/\/$/, '');
|
|
@@ -56,7 +58,7 @@ export class AppMenuComponent {
|
|
|
56
58
|
return this.cacheTs ? `${fullPath}${sep}v=${this.cacheTs}` : fullPath;
|
|
57
59
|
}
|
|
58
60
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
59
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppMenuComponent, selector: "hedwi-app-menu", inputs: { baseUrl: "baseUrl", cacheTs: "cacheTs", apps: "apps" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"hedwi-app-list\" *ngFor=\"let group of appGroups; trackBy: trackByGroupIndex\">\n <div\n class=\"hedwi-app-item\"\n [class.extra]=\"group[0]?.extra\"\n *ngFor=\"let item of group; trackBy: trackByItemPath\"\n >\n <a [attr.href]=\"linkHref(item)\" target=\"_blank\">\n <div class=\"hedwi-app-logo\">\n <img [src]=\"iconUrl(item)\" [alt]=\"displayName(item)\" />\n </div>\n <div class=\"hedwi-app-name\">\n <span>{{ displayName(item) }}</span>\n </div>\n </a>\n </div>\n</div>\n", styles: [".hedwi-app-list{display:flex;padding:10px 5px;width:100%;overflow:auto;flex-wrap:wrap;box-sizing:border-box}.hedwi-app-item{width:80px;display:flex;flex-direction:column;box-sizing:border-box;padding:5px 0}.hedwi-app-item a{text-decoration:none;color:inherit}.hedwi-app-item:hover{background-color:var(--panel-bg-color, #f5f5f5);cursor:pointer}.hedwi-app-item div{display:flex;align-items:center;justify-content:center}.hedwi-app-item .hedwi-app-logo img{width:60px;height:60px}.hedwi-app-item .hedwi-app-name span{font-size:14px}.hedwi-app-item.extra .hedwi-app-logo img{padding:6px;box-sizing:border-box}:host-context(.app-menu){display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
|
|
61
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppMenuComponent, selector: "hedwi-app-menu", inputs: { baseUrl: "baseUrl", cacheTs: "cacheTs", apps: "apps", language: "language" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"hedwi-app-list\" *ngFor=\"let group of appGroups; trackBy: trackByGroupIndex\">\n <div\n class=\"hedwi-app-item\"\n [class.extra]=\"group[0]?.extra\"\n *ngFor=\"let item of group; trackBy: trackByItemPath\"\n >\n <a [attr.href]=\"linkHref(item)\" target=\"_blank\">\n <div class=\"hedwi-app-logo\">\n <img [src]=\"iconUrl(item)\" [alt]=\"displayName(item)\" />\n </div>\n <div class=\"hedwi-app-name\">\n <span>{{ displayName(item) }}</span>\n </div>\n </a>\n </div>\n</div>\n", styles: [".hedwi-app-list{display:flex;padding:10px 5px;width:100%;overflow:auto;flex-wrap:wrap;box-sizing:border-box}.hedwi-app-item{width:80px;display:flex;flex-direction:column;box-sizing:border-box;padding:5px 0}.hedwi-app-item a{text-decoration:none;color:inherit}.hedwi-app-item:hover{background-color:var(--panel-bg-color, #f5f5f5);cursor:pointer}.hedwi-app-item div{display:flex;align-items:center;justify-content:center}.hedwi-app-item .hedwi-app-logo img{width:60px;height:60px}.hedwi-app-item .hedwi-app-name span{font-size:14px}.hedwi-app-item.extra .hedwi-app-logo img{padding:6px;box-sizing:border-box}:host-context(.app-menu){display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
|
|
60
62
|
}
|
|
61
63
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppMenuComponent, decorators: [{
|
|
62
64
|
type: Component,
|
|
@@ -67,5 +69,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
67
69
|
type: Input
|
|
68
70
|
}], apps: [{
|
|
69
71
|
type: Input
|
|
72
|
+
}], language: [{
|
|
73
|
+
type: Input
|
|
70
74
|
}] } });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaGVkd2ktYXBwLW1lbnUvc3JjL2xpYi9hcHAtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9oZWR3aS1hcHAtbWVudS9zcmMvbGliL2FwcC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQXNDLDJCQUEyQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQVFuRyxNQUFNLE9BQU8sZ0JBQWdCO0lBTjdCO1FBT0UsdUNBQXVDO1FBQzlCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDdEIsdUJBQXVCO1FBQ2QsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUN0QixxQkFBcUI7UUFDWixTQUFJLEdBQW1CLDJCQUEyQixDQUFDO1FBQzVELG9EQUFvRDtRQUMzQyxhQUFRLEdBQXlCLE9BQU8sQ0FBQztRQUVsRCxpRUFBaUU7UUFDakUsY0FBUyxHQUFxQixFQUFFLENBQUM7S0FrRGxDO0lBaERDLFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7UUFDOUMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QjtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsTUFBc0I7UUFDckQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELGVBQWUsQ0FBQyxLQUFhLEVBQUUsSUFBa0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxlQUFlO0lBQ2YsV0FBVyxDQUFDLElBQWtCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFFRCxPQUFPLENBQUMsSUFBa0I7UUFDeEIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLHVCQUF1QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMzRCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQWtCO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsR0FBRyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3hFLENBQUM7K0dBNURVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLG1LQ1Q3QiwraEJBZ0JBOzs0RkRQYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsS0FBSzs4QkFNUixPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhlZHdpQXBwSXRlbSwgSGVkd2lBcHBNZW51TGFuZ3VhZ2UsIEhFRFdJX0FQUF9NRU5VX0RFRkFVTFRfQVBQUyB9IGZyb20gJy4vYXBwLW1lbnUudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZWR3aS1hcHAtbWVudScsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHAtbWVudS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFwcE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gIC8qKiDpnZnmgIHotYTmupDln7rnoYAgVVJM77yM5aaCIGVudmlyb25tZW50LmJhc2V1cmwgKi9cbiAgQElucHV0KCkgYmFzZVVybCA9ICcnO1xuICAvKiog57yT5a2Y5pe26Ze05oiz77yM55So5LqOIFVSTCDpmLLnvJPlrZggKi9cbiAgQElucHV0KCkgY2FjaGVUcyA9ICcnO1xuICAvKiog5bqU55So5YiX6KGo77yM5LiN5Lyg5YiZ5L2/55So6buY6K6k5YiX6KGoICovXG4gIEBJbnB1dCgpIGFwcHM6IEhlZHdpQXBwSXRlbVtdID0gSEVEV0lfQVBQX01FTlVfREVGQVVMVF9BUFBTO1xuICAvKiog55WM6Z2i6K+t6KiA77ya5LyY5YWIIG5hbWVzW2xhbmd1YWdlXe+8jOe8uuecgeaXtuWbnumAgCBuYW1l77yI6YCa5bi45Li6IGVuLXVz77yJICovXG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBIZWR3aUFwcE1lbnVMYW5ndWFnZSA9ICdlbi11cyc7XG5cbiAgLyoqIOaMiSBncm91cEluZGV4IOWIhue7hOWQjueahOWIl+ihqO+8iOS7heW9kyBhcHBzIOWPmOWMluaXtumHjeaWsOiuoeeul++8jOmBv+WFjeavj+asoeWPmOabtOajgOa1i+i/lOWbnuaWsOaVsOe7hOWvvOiHtOWbvueJh+W+queOr+ivt+axgu+8iSAqL1xuICBhcHBHcm91cHM6IEhlZHdpQXBwSXRlbVtdW10gPSBbXTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcEdyb3VwcyA9IHRoaXMuYnVpbGRBcHBHcm91cHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snYXBwcyddKSB7XG4gICAgICB0aGlzLmFwcEdyb3VwcyA9IHRoaXMuYnVpbGRBcHBHcm91cHMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQXBwR3JvdXBzKCk6IEhlZHdpQXBwSXRlbVtdW10ge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8bnVtYmVyLCBIZWR3aUFwcEl0ZW1bXT4oKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5hcHBzKSB7XG4gICAgICBjb25zdCBnID0gaXRlbS5ncm91cEluZGV4ID8/IChpdGVtLmV4dHJhID8gMSA6IDApO1xuICAgICAgaWYgKCFtYXAuaGFzKGcpKSBtYXAuc2V0KGcsIFtdKTtcbiAgICAgIG1hcC5nZXQoZykhLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIGNvbnN0IG1heEcgPSBNYXRoLm1heCgwLCAuLi5tYXAua2V5cygpKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogbWF4RyArIDEgfSwgKF8sIGkpID0+IG1hcC5nZXQoaSkgPz8gW10pO1xuICB9XG5cbiAgLyoqIHRyYWNrQnnvvJrmjInliIbnu4TntKLlvJXvvIzpgb/lhY3ml6DmhI/kuYnnmoQgRE9NIOmHjeW7uiAqL1xuICB0cmFja0J5R3JvdXBJbmRleChpbmRleDogbnVtYmVyLCBfZ3JvdXA6IEhlZHdpQXBwSXRlbVtdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKiogdHJhY2tCee+8muaMiSBwYXRoIOWUr+S4gOagh+ivhuW6lOeUqOmhue+8jOmBv+WFjeaXoOaEj+S5ieeahCBET00g6YeN5bu65LiO5Zu+54mH6YeN5aSN6K+35rGCICovXG4gIHRyYWNrQnlJdGVtUGF0aChpbmRleDogbnVtYmVyLCBpdGVtOiBIZWR3aUFwcEl0ZW0pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLnBhdGg7XG4gIH1cblxuICAvKiog6L+U5Zue5bqU55So5pi+56S65ZCN56ewICovXG4gIGRpc3BsYXlOYW1lKGl0ZW06IEhlZHdpQXBwSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZXM/Llt0aGlzLmxhbmd1YWdlXSA/PyBpdGVtLm5hbWU7XG4gIH1cblxuICBpY29uVXJsKGl0ZW06IEhlZHdpQXBwSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZSA9ICh0aGlzLmJhc2VVcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgY29uc3QgcGF0aCA9IGAke2Jhc2V9L21haWwvYXNzZXRzL2ltYWdlcy8ke2l0ZW0uaWNvbn1gO1xuICAgIHJldHVybiB0aGlzLmNhY2hlVHMgPyBgJHtwYXRofT92PSR7dGhpcy5jYWNoZVRzfWAgOiBwYXRoO1xuICB9XG5cbiAgbGlua0hyZWYoaXRlbTogSGVkd2lBcHBJdGVtKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlID0gKHRoaXMuYmFzZVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJhc2UgPyBgJHtiYXNlfSR7aXRlbS5wYXRofWAgOiBpdGVtLnBhdGg7XG4gICAgY29uc3Qgc2VwID0gZnVsbFBhdGguaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JztcbiAgICByZXR1cm4gdGhpcy5jYWNoZVRzID8gYCR7ZnVsbFBhdGh9JHtzZXB9dj0ke3RoaXMuY2FjaGVUc31gIDogZnVsbFBhdGg7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJoZWR3aS1hcHAtbGlzdFwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBhcHBHcm91cHM7IHRyYWNrQnk6IHRyYWNrQnlHcm91cEluZGV4XCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImhlZHdpLWFwcC1pdGVtXCJcbiAgICBbY2xhc3MuZXh0cmFdPVwiZ3JvdXBbMF0/LmV4dHJhXCJcbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncm91cDsgdHJhY2tCeTogdHJhY2tCeUl0ZW1QYXRoXCJcbiAgPlxuICAgIDxhIFthdHRyLmhyZWZdPVwibGlua0hyZWYoaXRlbSlcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWR3aS1hcHAtbG9nb1wiPlxuICAgICAgICA8aW1nIFtzcmNdPVwiaWNvblVybChpdGVtKVwiIFthbHRdPVwiZGlzcGxheU5hbWUoaXRlbSlcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVkd2ktYXBwLW5hbWVcIj5cbiAgICAgICAgPHNwYW4+e3sgZGlzcGxheU5hbWUoaXRlbSkgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|