@tilde-nlp/ngx-menu 2.0.4 → 4.0.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/esm2022/lib/components/menu-columns/menu-columns.component.mjs +163 -0
- package/{esm2020 → esm2022}/lib/components/menu-icon/menu-icon.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/menu-item-icon/menu-item-icon.component.mjs +5 -5
- package/esm2022/lib/components/menu-item-link/menu-item-link.component.mjs +52 -0
- package/{esm2020 → esm2022}/lib/components/menu-item-list/menu-item-list.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/modal-nav-menu/modal-nav-menu.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/nav-base/nav-base.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/side-nav-menu/side-nav-menu.component.mjs +13 -13
- package/{esm2020 → esm2022}/lib/menu.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/services/strapi.service.mjs +4 -4
- package/{fesm2020 → fesm2022}/tilde-nlp-ngx-menu.mjs +98 -98
- package/{fesm2020 → fesm2022}/tilde-nlp-ngx-menu.mjs.map +1 -1
- package/lib/components/menu-columns/menu-columns.component.d.ts +1 -1
- package/lib/components/menu-icon/menu-icon.component.d.ts +1 -1
- package/lib/components/menu-item-icon/menu-item-icon.component.d.ts +1 -1
- package/lib/components/menu-item-link/menu-item-link.component.d.ts +1 -1
- package/lib/components/menu-item-list/menu-item-list.component.d.ts +1 -1
- package/lib/components/modal-nav-menu/modal-nav-menu.component.d.ts +1 -1
- package/lib/components/nav-base/nav-base.component.d.ts +1 -1
- package/lib/components/side-nav-menu/side-nav-menu.component.d.ts +1 -1
- package/package.json +13 -19
- package/esm2020/lib/components/menu-columns/menu-columns.component.mjs +0 -163
- package/esm2020/lib/components/menu-item-link/menu-item-link.component.mjs +0 -52
- package/fesm2015/tilde-nlp-ngx-menu.mjs +0 -712
- package/fesm2015/tilde-nlp-ngx-menu.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/assets/menu-logo.svg.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/menu-item-icon/menu.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/menu-item-icon/models/menu-dialog-settings.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/menu-item-icon/models/menu-item-settings.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/menu-item-icon/models/menu-title-placement.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/nav-base/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/nav-base/models/strapi-data-location.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/side-nav-menu/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/side-nav-menu/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/side-nav-menu/models/side-nav-settings.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/injection-tokens/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/injection-tokens/menu-shared-config.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/custom-menu-item.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/menu-icon-strapi-extension.const.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/menu-item-group.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/menu-layout-direction.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/menu-shared-config.model.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tilde-nlp-ngx-menu.mjs +0 -0
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { Component, Inject, Input, Optional } from '@angular/core';
|
|
2
|
-
import { NavigationEnd } from '@angular/router';
|
|
3
|
-
import { filter } from 'rxjs';
|
|
4
|
-
import { MENU_SHARED_CONFIG } from '../../injection-tokens';
|
|
5
|
-
import { MenuLayoutDirection } from '../../models/menu-layout-direction.model';
|
|
6
|
-
import { StrapiDataLocation } from '../nav-base/models/strapi-data-location.enum';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../services/strapi.service";
|
|
9
|
-
import * as i2 from "@angular/router";
|
|
10
|
-
import * as i3 from "@angular/common";
|
|
11
|
-
import * as i4 from "@angular/material/divider";
|
|
12
|
-
import * as i5 from "../menu-item-list/menu-item-list.component";
|
|
13
|
-
export class MenuColumnsComponent {
|
|
14
|
-
constructor(strapiService, router, menuSharedConfig) {
|
|
15
|
-
this.strapiService = strapiService;
|
|
16
|
-
this.router = router;
|
|
17
|
-
this.menuSharedConfig = menuSharedConfig;
|
|
18
|
-
this.direction = MenuLayoutDirection.column;
|
|
19
|
-
this.hideSelectedCustomId = false;
|
|
20
|
-
this.strapiGroupBase = {};
|
|
21
|
-
this.strapiDataLocation = StrapiDataLocation.END;
|
|
22
|
-
this.labelsVisible = true;
|
|
23
|
-
this._menuItemGroups = [];
|
|
24
|
-
this.subscribedToStrapi = false;
|
|
25
|
-
this.strapiItems = [];
|
|
26
|
-
this._mergedGroups = [];
|
|
27
|
-
this.subscriptions = [];
|
|
28
|
-
this.isActiveMatchOptions = {
|
|
29
|
-
matrixParams: 'exact',
|
|
30
|
-
queryParams: 'exact',
|
|
31
|
-
paths: 'exact',
|
|
32
|
-
fragment: 'exact'
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
get customId() {
|
|
36
|
-
return this.menuSharedConfig?.customId;
|
|
37
|
-
}
|
|
38
|
-
get strapiGroup() { return this._strapiGroup; }
|
|
39
|
-
get menuItemGroups() { return this._menuItemGroups; }
|
|
40
|
-
set menuItemGroups(groups) {
|
|
41
|
-
this._menuItemGroups = groups ?? [];
|
|
42
|
-
}
|
|
43
|
-
get mergedGroups() { return this._mergedGroups; }
|
|
44
|
-
get allRootItems() {
|
|
45
|
-
const allItems = this.mergedGroups.map(map => map.items);
|
|
46
|
-
let newArray = [];
|
|
47
|
-
allItems.forEach((array) => { newArray = newArray.concat(array); });
|
|
48
|
-
return newArray;
|
|
49
|
-
}
|
|
50
|
-
ngOnInit() {
|
|
51
|
-
this.subscribeOnRouteChange();
|
|
52
|
-
this.getStrapiData();
|
|
53
|
-
}
|
|
54
|
-
ngOnDestroy() {
|
|
55
|
-
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
56
|
-
if (this.subscribedToStrapi) {
|
|
57
|
-
this.strapiService.unsubscribe();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
elementExpanded(element) {
|
|
61
|
-
if (!this.activeItem) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
// if active item is expanded, most likely some of his child should be active, or if it is collapsed, most likely parent should be active if no route change.
|
|
65
|
-
if (element !== this.activeItem && !element.children?.includes(this.activeItem)) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
this.changeActiveElement();
|
|
69
|
-
}
|
|
70
|
-
getStrapiData() {
|
|
71
|
-
if (!this.menuSharedConfig?.disableStrapi) {
|
|
72
|
-
this.subscribedToStrapi = true;
|
|
73
|
-
this.strapiService.getMenuItems().subscribe(this.loadData.bind(this));
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
loadData(data) {
|
|
77
|
-
// hide custom id based on input param
|
|
78
|
-
this.strapiItems = (this.hideSelectedCustomId && this.customId) ? data.filter(item => item.customId !== this.customId) : data;
|
|
79
|
-
this._strapiGroup = {
|
|
80
|
-
...this.strapiGroupBase,
|
|
81
|
-
items: this.strapiItems
|
|
82
|
-
};
|
|
83
|
-
if (this.strapiDataLocation === StrapiDataLocation.START) {
|
|
84
|
-
this._mergedGroups = [this.strapiGroup, ...this.menuItemGroups];
|
|
85
|
-
}
|
|
86
|
-
else if (this.strapiDataLocation === StrapiDataLocation.END) {
|
|
87
|
-
this._mergedGroups = [...this.menuItemGroups, this.strapiGroup];
|
|
88
|
-
}
|
|
89
|
-
this.changeActiveElement();
|
|
90
|
-
}
|
|
91
|
-
subscribeOnRouteChange() {
|
|
92
|
-
const subscription = this.router.events
|
|
93
|
-
.pipe(filter(e => e instanceof NavigationEnd))
|
|
94
|
-
.subscribe(() => { this.changeActiveElement(); });
|
|
95
|
-
this.subscriptions.push(subscription);
|
|
96
|
-
}
|
|
97
|
-
changeActiveElement() {
|
|
98
|
-
this.activeItem = this.findActiveElement(this.allRootItems);
|
|
99
|
-
}
|
|
100
|
-
/** Finds active element from whole list. RouterLink has priority over custom Id. */
|
|
101
|
-
// at this version, child elements should not have customId, since that property comes from strapi and strapi provides only one level structure
|
|
102
|
-
findActiveElement(list) {
|
|
103
|
-
if (!list) {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
let customIdElement = null;
|
|
107
|
-
for (const item of list) {
|
|
108
|
-
// Child element has priority over parent, so need to check if any child is active
|
|
109
|
-
if (this.isElementRouterLinkActive(item)) {
|
|
110
|
-
// If has children and they are visible, return active child or current item
|
|
111
|
-
return this.showChildren && item.expanded ? this.findActiveElement(item.children) ?? item : item;
|
|
112
|
-
}
|
|
113
|
-
// if selected custom id element is hidden, no need to look for it and set it to active;
|
|
114
|
-
else if (!this.hideSelectedCustomId && this.isElementCustomIdActive(item)) {
|
|
115
|
-
customIdElement = item;
|
|
116
|
-
}
|
|
117
|
-
else if (this.showChildren && item.children?.length) {
|
|
118
|
-
const activeChild = this.findActiveElement(item.children);
|
|
119
|
-
if (activeChild) {
|
|
120
|
-
return activeChild;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return customIdElement;
|
|
125
|
-
}
|
|
126
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
127
|
-
// private isMenuItem(item: any): item is MenuItems {
|
|
128
|
-
// return item.customId;
|
|
129
|
-
// }
|
|
130
|
-
isElementCustomIdActive(element) {
|
|
131
|
-
return this.customId && element.customId === this.customId;
|
|
132
|
-
}
|
|
133
|
-
isElementRouterLinkActive(element) {
|
|
134
|
-
const routerLinkActiveOptions = element.routerLinkActiveOptions ?? this.menuSharedConfig.activeMatchOptions ?? this.isActiveMatchOptions;
|
|
135
|
-
return this.router.isActive(element.link, routerLinkActiveOptions);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
MenuColumnsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuColumnsComponent, deps: [{ token: i1.StarpiMenuService }, { token: i2.Router }, { token: MENU_SHARED_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
139
|
-
MenuColumnsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MenuColumnsComponent, selector: "menu-columns", inputs: { direction: "direction", hideSelectedCustomId: "hideSelectedCustomId", strapiGroupBase: "strapiGroupBase", strapiDataLocation: "strapiDataLocation", labelsVisible: "labelsVisible", showChildren: "showChildren", menuItemGroups: "menuItemGroups" }, ngImport: i0, template: "<ng-container *ngFor=\"let group of mergedGroups\">\r\n <menu-item-list *ngIf=\"group.items.length\" [activeItem]=\"activeItem\" [direction]=\"direction\" (toggleExpand)=\"elementExpanded($event)\"\r\n [labelsVisible]=\"labelsVisible\" [menuItemGroup]=\"group\" [items]=\"group.items\" [showChildren]=\"showChildren\">\r\n </menu-item-list>\r\n <div class=\"divider\" *ngIf=\"group.bottomDivider\">\r\n <mat-divider></mat-divider>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:inline-block}:host menu-item-list{display:block}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i5.MenuItemListComponent, selector: "menu-item-list", inputs: ["direction", "labelsVisible", "activeItem", "showIcons", "showChildren", "items", "menuItemGroup"], outputs: ["toggleExpand"] }] });
|
|
140
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuColumnsComponent, decorators: [{
|
|
141
|
-
type: Component,
|
|
142
|
-
args: [{ selector: 'menu-columns', template: "<ng-container *ngFor=\"let group of mergedGroups\">\r\n <menu-item-list *ngIf=\"group.items.length\" [activeItem]=\"activeItem\" [direction]=\"direction\" (toggleExpand)=\"elementExpanded($event)\"\r\n [labelsVisible]=\"labelsVisible\" [menuItemGroup]=\"group\" [items]=\"group.items\" [showChildren]=\"showChildren\">\r\n </menu-item-list>\r\n <div class=\"divider\" *ngIf=\"group.bottomDivider\">\r\n <mat-divider></mat-divider>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:inline-block}:host menu-item-list{display:block}\n"] }]
|
|
143
|
-
}], ctorParameters: function () { return [{ type: i1.StarpiMenuService }, { type: i2.Router }, { type: undefined, decorators: [{
|
|
144
|
-
type: Optional
|
|
145
|
-
}, {
|
|
146
|
-
type: Inject,
|
|
147
|
-
args: [MENU_SHARED_CONFIG]
|
|
148
|
-
}] }]; }, propDecorators: { direction: [{
|
|
149
|
-
type: Input
|
|
150
|
-
}], hideSelectedCustomId: [{
|
|
151
|
-
type: Input
|
|
152
|
-
}], strapiGroupBase: [{
|
|
153
|
-
type: Input
|
|
154
|
-
}], strapiDataLocation: [{
|
|
155
|
-
type: Input
|
|
156
|
-
}], labelsVisible: [{
|
|
157
|
-
type: Input
|
|
158
|
-
}], showChildren: [{
|
|
159
|
-
type: Input
|
|
160
|
-
}], menuItemGroups: [{
|
|
161
|
-
type: Input
|
|
162
|
-
}] } });
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1jb2x1bW5zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tZW51L3NyYy9saWIvY29tcG9uZW50cy9tZW51LWNvbHVtbnMvbWVudS1jb2x1bW5zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tZW51L3NyYy9saWIvY29tcG9uZW50cy9tZW51LWNvbHVtbnMvbWVudS1jb2x1bW5zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBd0IsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDOUUsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7QUFPbEYsTUFBTSxPQUFPLG9CQUFvQjtJQTRDL0IsWUFBK0IsYUFBZ0MsRUFDMUMsTUFBYyxFQUMwQixnQkFBa0M7UUFGaEUsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQzFDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDMEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQTVDdEYsY0FBUyxHQUF3QixtQkFBbUIsQ0FBQyxNQUFNLENBQUM7UUFDNUQseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLG9CQUFlLEdBQXNCLEVBQUUsQ0FBQztRQUN4Qyx1QkFBa0IsR0FBdUIsa0JBQWtCLENBQUMsR0FBRyxDQUFDO1FBQ2hFLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBWXRCLG9CQUFlLEdBQW9CLEVBQUUsQ0FBQztRQU10Qyx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsZ0JBQVcsR0FBcUIsRUFBRSxDQUFDO1FBQ25DLGtCQUFhLEdBQW9CLEVBQUUsQ0FBQztRQVUzQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMseUJBQW9CLEdBQXlCO1lBQzVELFlBQVksRUFBRSxPQUFPO1lBQ3JCLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLEtBQUssRUFBRSxPQUFPO1lBQ2QsUUFBUSxFQUFFLE9BQU87U0FDbEIsQ0FBQztJQUtGLENBQUM7SUFwQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFHRCxJQUFJLFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBRy9DLElBQUksY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBYSxjQUFjLENBQUMsTUFBdUI7UUFDakQsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFLRCxJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRWpELElBQUksWUFBWTtRQUNkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELElBQUksUUFBUSxHQUFxQixFQUFFLENBQUM7UUFDcEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBZUQsUUFBUTtRQUNOLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFckQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsT0FBdUI7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsT0FBTztTQUNSO1FBQ0QsNkpBQTZKO1FBQzdKLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0UsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUU7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVPLFFBQVEsQ0FBQyxJQUFzQjtRQUNyQyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlILElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsR0FBRyxJQUFJLENBQUMsZUFBZTtZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDeEIsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLGtCQUFrQixDQUFDLEtBQUssRUFBRTtZQUN4RCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNqRTthQUNJLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtZQUMzRCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksYUFBYSxDQUFDLENBQUM7YUFDN0MsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUdELG9GQUFvRjtJQUNwRiwrSUFBK0k7SUFDdkksaUJBQWlCLENBQUMsSUFBeUI7UUFDakQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLGVBQWUsR0FBMEIsSUFBSSxDQUFDO1FBQ2xELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3ZCLGtGQUFrRjtZQUNsRixJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEMsNEVBQTRFO2dCQUM1RSxPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUNsRztZQUNELHdGQUF3RjtpQkFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pFLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDeEI7aUJBQ0ksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLFdBQVcsRUFBRTtvQkFDZixPQUFPLFdBQVcsQ0FBQztpQkFDcEI7YUFDRjtTQUNGO1FBQ0QsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxxREFBcUQ7SUFDckQsMEJBQTBCO0lBQzFCLElBQUk7SUFFSSx1QkFBdUIsQ0FBQyxPQUF1QjtRQUNyRCxPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzdELENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxPQUF1QjtRQUN2RCxNQUFNLHVCQUF1QixHQUEwQixPQUEwQixDQUFDLHVCQUF1QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFFbkwsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDckUsQ0FBQzs7aUhBdkpVLG9CQUFvQix5RUE4Q1Qsa0JBQWtCO3FHQTlDN0Isb0JBQW9CLG9UQ2hCakMsNGVBUUE7MkZEUWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7OzBCQWtEckIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0I7NENBNUMvQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBYU8sY0FBYztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElzQWN0aXZlTWF0Y2hPcHRpb25zLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNRU5VX1NIQVJFRF9DT05GSUcgfSBmcm9tICcuLi8uLi9pbmplY3Rpb24tdG9rZW5zJztcclxuaW1wb3J0IHsgQ3VzdG9tTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvY3VzdG9tLW1lbnUtaXRlbSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtR3JvdXAsIE1lbnVJdGVtR3JvdXBCYXNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL21lbnUtaXRlbS1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IE1lbnVTaGFyZWRDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWVudS1zaGFyZWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgTWVudUxheW91dERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9tZW51LWxheW91dC1kaXJlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTdGFycGlNZW51U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0cmFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RyYXBpRGF0YUxvY2F0aW9uIH0gZnJvbSAnLi4vbmF2LWJhc2UvbW9kZWxzL3N0cmFwaS1kYXRhLWxvY2F0aW9uLmVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtZW51LWNvbHVtbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LWNvbHVtbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lbnUtY29sdW1ucy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29sdW1uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZGlyZWN0aW9uOiBNZW51TGF5b3V0RGlyZWN0aW9uID0gTWVudUxheW91dERpcmVjdGlvbi5jb2x1bW47XHJcbiAgQElucHV0KCkgaGlkZVNlbGVjdGVkQ3VzdG9tSWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzdHJhcGlHcm91cEJhc2U6IE1lbnVJdGVtR3JvdXBCYXNlID0ge307XHJcbiAgQElucHV0KCkgc3RyYXBpRGF0YUxvY2F0aW9uOiBTdHJhcGlEYXRhTG9jYXRpb24gPSBTdHJhcGlEYXRhTG9jYXRpb24uRU5EO1xyXG4gIEBJbnB1dCgpIGxhYmVsc1Zpc2libGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dDaGlsZHJlbiE6IGJvb2xlYW47XHJcblxyXG4gIGFjdGl2ZUl0ZW0hOiBDdXN0b21NZW51SXRlbSB8IG51bGw7XHJcblxyXG4gIGdldCBjdXN0b21JZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1lbnVTaGFyZWRDb25maWc/LmN1c3RvbUlkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RyYXBpR3JvdXAhOiBNZW51SXRlbUdyb3VwO1xyXG4gIGdldCBzdHJhcGlHcm91cCgpIHsgcmV0dXJuIHRoaXMuX3N0cmFwaUdyb3VwOyB9XHJcblxyXG4gIHByaXZhdGUgX21lbnVJdGVtR3JvdXBzOiBNZW51SXRlbUdyb3VwW10gPSBbXTtcclxuICBnZXQgbWVudUl0ZW1Hcm91cHMoKSB7IHJldHVybiB0aGlzLl9tZW51SXRlbUdyb3VwczsgfVxyXG4gIEBJbnB1dCgpIHNldCBtZW51SXRlbUdyb3Vwcyhncm91cHM6IE1lbnVJdGVtR3JvdXBbXSkge1xyXG4gICAgdGhpcy5fbWVudUl0ZW1Hcm91cHMgPSBncm91cHMgPz8gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZWRUb1N0cmFwaSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3RyYXBpSXRlbXM6IEN1c3RvbU1lbnVJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIF9tZXJnZWRHcm91cHM6IE1lbnVJdGVtR3JvdXBbXSA9IFtdO1xyXG4gIGdldCBtZXJnZWRHcm91cHMoKSB7IHJldHVybiB0aGlzLl9tZXJnZWRHcm91cHM7IH1cclxuXHJcbiAgZ2V0IGFsbFJvb3RJdGVtcygpOiBDdXN0b21NZW51SXRlbVtdIHtcclxuICAgIGNvbnN0IGFsbEl0ZW1zID0gdGhpcy5tZXJnZWRHcm91cHMubWFwKG1hcCA9PiBtYXAuaXRlbXMpO1xyXG4gICAgbGV0IG5ld0FycmF5OiBDdXN0b21NZW51SXRlbVtdID0gW107XHJcbiAgICBhbGxJdGVtcy5mb3JFYWNoKChhcnJheSkgPT4geyBuZXdBcnJheSA9IG5ld0FycmF5LmNvbmNhdChhcnJheSkgfSk7XHJcbiAgICByZXR1cm4gbmV3QXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc0FjdGl2ZU1hdGNoT3B0aW9uczogSXNBY3RpdmVNYXRjaE9wdGlvbnMgPSB7XHJcbiAgICBtYXRyaXhQYXJhbXM6ICdleGFjdCcsXHJcbiAgICBxdWVyeVBhcmFtczogJ2V4YWN0JyxcclxuICAgIHBhdGhzOiAnZXhhY3QnLFxyXG4gICAgZnJhZ21lbnQ6ICdleGFjdCdcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgc3RyYXBpU2VydmljZTogU3RhcnBpTWVudVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1FTlVfU0hBUkVEX0NPTkZJRykgcHJvdGVjdGVkIHJlYWRvbmx5IG1lbnVTaGFyZWRDb25maWc6IE1lbnVTaGFyZWRDb25maWcpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVPblJvdXRlQ2hhbmdlKCk7XHJcbiAgICB0aGlzLmdldFN0cmFwaURhdGEoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVkVG9TdHJhcGkpIHtcclxuICAgICAgdGhpcy5zdHJhcGlTZXJ2aWNlLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbGVtZW50RXhwYW5kZWQoZWxlbWVudDogQ3VzdG9tTWVudUl0ZW0pIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmVJdGVtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGlmIGFjdGl2ZSBpdGVtIGlzIGV4cGFuZGVkLCBtb3N0IGxpa2VseSBzb21lIG9mIGhpcyBjaGlsZCBzaG91bGQgYmUgYWN0aXZlLCBvciBpZiBpdCBpcyBjb2xsYXBzZWQsIG1vc3QgbGlrZWx5IHBhcmVudCBzaG91bGQgYmUgYWN0aXZlIGlmIG5vIHJvdXRlIGNoYW5nZS5cclxuICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLmFjdGl2ZUl0ZW0gJiYgIWVsZW1lbnQuY2hpbGRyZW4/LmluY2x1ZGVzKHRoaXMuYWN0aXZlSXRlbSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VBY3RpdmVFbGVtZW50KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFN0cmFwaURhdGEoKSB7XHJcbiAgICBpZiAoIXRoaXMubWVudVNoYXJlZENvbmZpZz8uZGlzYWJsZVN0cmFwaSkge1xyXG4gICAgICB0aGlzLnN1YnNjcmliZWRUb1N0cmFwaSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3RyYXBpU2VydmljZS5nZXRNZW51SXRlbXMoKS5zdWJzY3JpYmUodGhpcy5sb2FkRGF0YS5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGEoZGF0YTogQ3VzdG9tTWVudUl0ZW1bXSkge1xyXG4gICAgLy8gaGlkZSBjdXN0b20gaWQgYmFzZWQgb24gaW5wdXQgcGFyYW1cclxuICAgIHRoaXMuc3RyYXBpSXRlbXMgPSAodGhpcy5oaWRlU2VsZWN0ZWRDdXN0b21JZCAmJiB0aGlzLmN1c3RvbUlkKSA/IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5jdXN0b21JZCAhPT0gdGhpcy5jdXN0b21JZCkgOiBkYXRhO1xyXG4gICAgdGhpcy5fc3RyYXBpR3JvdXAgPSB7XHJcbiAgICAgIC4uLnRoaXMuc3RyYXBpR3JvdXBCYXNlLFxyXG4gICAgICBpdGVtczogdGhpcy5zdHJhcGlJdGVtc1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnN0cmFwaURhdGFMb2NhdGlvbiA9PT0gU3RyYXBpRGF0YUxvY2F0aW9uLlNUQVJUKSB7XHJcbiAgICAgIHRoaXMuX21lcmdlZEdyb3VwcyA9IFt0aGlzLnN0cmFwaUdyb3VwLCAuLi50aGlzLm1lbnVJdGVtR3JvdXBzXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc3RyYXBpRGF0YUxvY2F0aW9uID09PSBTdHJhcGlEYXRhTG9jYXRpb24uRU5EKSB7XHJcbiAgICAgIHRoaXMuX21lcmdlZEdyb3VwcyA9IFsuLi50aGlzLm1lbnVJdGVtR3JvdXBzLCB0aGlzLnN0cmFwaUdyb3VwXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZUFjdGl2ZUVsZW1lbnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlT25Sb3V0ZUNoYW5nZSgpIHtcclxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLmNoYW5nZUFjdGl2ZUVsZW1lbnQoKTsgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VBY3RpdmVFbGVtZW50KCkge1xyXG4gICAgdGhpcy5hY3RpdmVJdGVtID0gdGhpcy5maW5kQWN0aXZlRWxlbWVudCh0aGlzLmFsbFJvb3RJdGVtcyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIEZpbmRzIGFjdGl2ZSBlbGVtZW50IGZyb20gd2hvbGUgbGlzdC4gUm91dGVyTGluayBoYXMgcHJpb3JpdHkgb3ZlciBjdXN0b20gSWQuICovXHJcbiAgLy8gYXQgdGhpcyB2ZXJzaW9uLCBjaGlsZCBlbGVtZW50cyBzaG91bGQgbm90IGhhdmUgY3VzdG9tSWQsIHNpbmNlIHRoYXQgcHJvcGVydHkgY29tZXMgZnJvbSBzdHJhcGkgYW5kIHN0cmFwaSBwcm92aWRlcyBvbmx5IG9uZSBsZXZlbCBzdHJ1Y3R1cmVcclxuICBwcml2YXRlIGZpbmRBY3RpdmVFbGVtZW50KGxpc3Q/OiAoQ3VzdG9tTWVudUl0ZW0pW10pOiBDdXN0b21NZW51SXRlbSB8IG51bGwge1xyXG4gICAgaWYgKCFsaXN0KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXN0b21JZEVsZW1lbnQ6IEN1c3RvbU1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xyXG4gICAgICAvLyBDaGlsZCBlbGVtZW50IGhhcyBwcmlvcml0eSBvdmVyIHBhcmVudCwgc28gbmVlZCB0byBjaGVjayBpZiBhbnkgY2hpbGQgaXMgYWN0aXZlXHJcbiAgICAgIGlmICh0aGlzLmlzRWxlbWVudFJvdXRlckxpbmtBY3RpdmUoaXRlbSkpIHtcclxuICAgICAgICAvLyBJZiBoYXMgY2hpbGRyZW4gYW5kIHRoZXkgYXJlIHZpc2libGUsIHJldHVybiBhY3RpdmUgY2hpbGQgb3IgY3VycmVudCBpdGVtXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0NoaWxkcmVuICYmIGl0ZW0uZXhwYW5kZWQgPyB0aGlzLmZpbmRBY3RpdmVFbGVtZW50KGl0ZW0uY2hpbGRyZW4pID8/IGl0ZW0gOiBpdGVtO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIHNlbGVjdGVkIGN1c3RvbSBpZCBlbGVtZW50IGlzIGhpZGRlbiwgbm8gbmVlZCB0byBsb29rIGZvciBpdCBhbmQgc2V0IGl0IHRvIGFjdGl2ZTtcclxuICAgICAgZWxzZSBpZiAoIXRoaXMuaGlkZVNlbGVjdGVkQ3VzdG9tSWQgJiYgdGhpcy5pc0VsZW1lbnRDdXN0b21JZEFjdGl2ZShpdGVtKSkge1xyXG4gICAgICAgIGN1c3RvbUlkRWxlbWVudCA9IGl0ZW07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5zaG93Q2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlQ2hpbGQgPSB0aGlzLmZpbmRBY3RpdmVFbGVtZW50KGl0ZW0uY2hpbGRyZW4pO1xyXG4gICAgICAgIGlmIChhY3RpdmVDaGlsZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGFjdGl2ZUNoaWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1c3RvbUlkRWxlbWVudDtcclxuICB9XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgLy8gcHJpdmF0ZSBpc01lbnVJdGVtKGl0ZW06IGFueSk6IGl0ZW0gaXMgTWVudUl0ZW1zIHtcclxuICAvLyAgIHJldHVybiBpdGVtLmN1c3RvbUlkO1xyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0VsZW1lbnRDdXN0b21JZEFjdGl2ZShlbGVtZW50OiBDdXN0b21NZW51SXRlbSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tSWQgJiYgZWxlbWVudC5jdXN0b21JZCA9PT0gdGhpcy5jdXN0b21JZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFbGVtZW50Um91dGVyTGlua0FjdGl2ZShlbGVtZW50OiBDdXN0b21NZW51SXRlbSkge1xyXG4gICAgY29uc3Qgcm91dGVyTGlua0FjdGl2ZU9wdGlvbnM6IElzQWN0aXZlTWF0Y2hPcHRpb25zID0gKGVsZW1lbnQgYXMgQ3VzdG9tTWVudUl0ZW0pLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zID8/IHRoaXMubWVudVNoYXJlZENvbmZpZy5hY3RpdmVNYXRjaE9wdGlvbnMgPz8gdGhpcy5pc0FjdGl2ZU1hdGNoT3B0aW9ucztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUoZWxlbWVudC5saW5rLCByb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIG1lcmdlZEdyb3Vwc1wiPlxyXG4gICAgPG1lbnUtaXRlbS1saXN0ICpuZ0lmPVwiZ3JvdXAuaXRlbXMubGVuZ3RoXCIgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiIFtkaXJlY3Rpb25dPVwiZGlyZWN0aW9uXCIgKHRvZ2dsZUV4cGFuZCk9XCJlbGVtZW50RXhwYW5kZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgW2xhYmVsc1Zpc2libGVdPVwibGFiZWxzVmlzaWJsZVwiIFttZW51SXRlbUdyb3VwXT1cImdyb3VwXCIgW2l0ZW1zXT1cImdyb3VwLml0ZW1zXCIgW3Nob3dDaGlsZHJlbl09XCJzaG93Q2hpbGRyZW5cIj5cclxuICAgIDwvbWVudS1pdGVtLWxpc3Q+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiICpuZ0lmPVwiZ3JvdXAuYm90dG9tRGl2aWRlclwiPlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { MenuLayoutDirection } from '../../models';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@tilde-nlp/ngx-strapi";
|
|
5
|
-
import * as i2 from "@angular/flex-layout/flex";
|
|
6
|
-
import * as i3 from "@angular/common";
|
|
7
|
-
import * as i4 from "@angular/material/tooltip";
|
|
8
|
-
import * as i5 from "@tilde-nlp/ngx-common";
|
|
9
|
-
import * as i6 from "../menu-icon/menu-icon.component";
|
|
10
|
-
import * as i7 from "@ngx-translate/core";
|
|
11
|
-
export class MenuItemLinkComponent {
|
|
12
|
-
constructor(strapiLinkService, placeholderService) {
|
|
13
|
-
this.strapiLinkService = strapiLinkService;
|
|
14
|
-
this.placeholderService = placeholderService;
|
|
15
|
-
this.showIcons = true;
|
|
16
|
-
this.updateTextWithPlaceholders = (textWithReplacedPlaceholders) => this.href = textWithReplacedPlaceholders;
|
|
17
|
-
}
|
|
18
|
-
get menuItemLayout() {
|
|
19
|
-
return this.direction === MenuLayoutDirection.column ? 'column' : 'row';
|
|
20
|
-
}
|
|
21
|
-
get menuLayoutDirection() {
|
|
22
|
-
return (this.direction === MenuLayoutDirection.column || !this.labelsVisible)
|
|
23
|
-
? 'start center' : 'start start';
|
|
24
|
-
}
|
|
25
|
-
ngOnInit() {
|
|
26
|
-
this.textWithPlaceholders = this.menuItem.link;
|
|
27
|
-
this.placeholderServiceId = this.placeholderService.register(this);
|
|
28
|
-
}
|
|
29
|
-
linkClick(event, item) {
|
|
30
|
-
this.strapiLinkService.strapiLinkClick(event, item.externalLink);
|
|
31
|
-
}
|
|
32
|
-
ngOnDestroy() {
|
|
33
|
-
this.placeholderService.unregister(this.placeholderServiceId);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
MenuItemLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuItemLinkComponent, deps: [{ token: i1.StrapiLinkService }, { token: i1.StrapiVariablesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
37
|
-
MenuItemLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MenuItemLinkComponent, selector: "tld-menu-item-link", inputs: { direction: "direction", labelsVisible: "labelsVisible", activeItem: "activeItem", showIcons: "showIcons", menuItem: "menuItem" }, ngImport: i0, template: "<a [libPlausibleEvent]=\"menuItem.plausibleEvent\" [fxLayout]=\"menuItemLayout\"\r\n [class.text-center]=\"menuItemLayout === 'column'\" class=\"text-m menu-item\"\r\n [matTooltip]=\"!labelsVisible ? (menuItem.title | translate) : ''\" matTooltipPosition=\"after\"\r\n [fxLayoutAlign]=\"menuLayoutDirection\" matTooltipClass=\"menu-tooltip\" (click)=\"linkClick($event, menuItem)\"\r\n [href]=\"href | translate\" [attr.target]=\"menuItem.externalLink?'_blank': '_self'\" fxLayoutGap=\"0.375rem\"\r\n [class.active-menu-item]=\"menuItem === activeItem\">\r\n <ng-container *ngIf=\"showIcons && menuItem.icon\">\r\n <tld-menu-icon [menuItem]=\"menuItem\"></tld-menu-icon>\r\n </ng-container>\r\n <span *ngIf=\"labelsVisible\" class=\"menu-item-title\">\r\n <span class=\"title-content\" [attr.content]=\"menuItem.title | translate\">\r\n {{ menuItem.title | translate}}\r\n </span>\r\n </span>\r\n</a>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.PlausibleEventDirective, selector: "[libPlausibleEvent]", inputs: ["libPlausibleEvent"] }, { kind: "component", type: i6.MenuIconComponent, selector: "tld-menu-icon", inputs: ["menuItem"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuItemLinkComponent, decorators: [{
|
|
39
|
-
type: Component,
|
|
40
|
-
args: [{ selector: 'tld-menu-item-link', template: "<a [libPlausibleEvent]=\"menuItem.plausibleEvent\" [fxLayout]=\"menuItemLayout\"\r\n [class.text-center]=\"menuItemLayout === 'column'\" class=\"text-m menu-item\"\r\n [matTooltip]=\"!labelsVisible ? (menuItem.title | translate) : ''\" matTooltipPosition=\"after\"\r\n [fxLayoutAlign]=\"menuLayoutDirection\" matTooltipClass=\"menu-tooltip\" (click)=\"linkClick($event, menuItem)\"\r\n [href]=\"href | translate\" [attr.target]=\"menuItem.externalLink?'_blank': '_self'\" fxLayoutGap=\"0.375rem\"\r\n [class.active-menu-item]=\"menuItem === activeItem\">\r\n <ng-container *ngIf=\"showIcons && menuItem.icon\">\r\n <tld-menu-icon [menuItem]=\"menuItem\"></tld-menu-icon>\r\n </ng-container>\r\n <span *ngIf=\"labelsVisible\" class=\"menu-item-title\">\r\n <span class=\"title-content\" [attr.content]=\"menuItem.title | translate\">\r\n {{ menuItem.title | translate}}\r\n </span>\r\n </span>\r\n</a>\r\n" }]
|
|
41
|
-
}], ctorParameters: function () { return [{ type: i1.StrapiLinkService }, { type: i1.StrapiVariablesService }]; }, propDecorators: { direction: [{
|
|
42
|
-
type: Input
|
|
43
|
-
}], labelsVisible: [{
|
|
44
|
-
type: Input
|
|
45
|
-
}], activeItem: [{
|
|
46
|
-
type: Input
|
|
47
|
-
}], showIcons: [{
|
|
48
|
-
type: Input
|
|
49
|
-
}], menuItem: [{
|
|
50
|
-
type: Input
|
|
51
|
-
}] } });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLWxpbmsuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1lbnUvc3JjL2xpYi9jb21wb25lbnRzL21lbnUtaXRlbS1saW5rL21lbnUtaXRlbS1saW5rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tZW51L3NyYy9saWIvY29tcG9uZW50cy9tZW51LWl0ZW0tbGluay9tZW51LWl0ZW0tbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFrQixtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7O0FBT25FLE1BQU0sT0FBTyxxQkFBcUI7SUFvQmhDLFlBQTZCLGlCQUFvQyxFQUM5QyxrQkFBMEM7UUFEaEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUM5Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXdCO1FBakJwRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBNEIxQiwrQkFBMEIsR0FBRyxDQUFDLDRCQUFvQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDO0lBWC9DLENBQUM7SUFWbEUsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFFLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzNFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBS0QsUUFBUTtRQUNOLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWlCLEVBQUUsSUFBb0I7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFJRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNoRSxDQUFDOztrSEFwQ1UscUJBQXFCO3NHQUFyQixxQkFBcUIsc01DVGxDLGk2QkFlQTsyRkROYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0Usb0JBQW9COzZJQUtyQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQbGFjZWhvbGRlckNvbXBvbmVudEJhc2UsIFN0cmFwaUxpbmtTZXJ2aWNlLCBTdHJhcGlWYXJpYWJsZXNTZXJ2aWNlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtc3RyYXBpJztcclxuaW1wb3J0IHsgQ3VzdG9tTWVudUl0ZW0sIE1lbnVMYXlvdXREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bGQtbWVudS1pdGVtLWxpbmsnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LWl0ZW0tbGluay5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS1pdGVtLWxpbmsuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudUl0ZW1MaW5rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFBsYWNlaG9sZGVyQ29tcG9uZW50QmFzZSB7XHJcbiAgQElucHV0KCkgZGlyZWN0aW9uITogTWVudUxheW91dERpcmVjdGlvbjtcclxuICBASW5wdXQoKSBsYWJlbHNWaXNpYmxlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBhY3RpdmVJdGVtITogQ3VzdG9tTWVudUl0ZW0gfCBudWxsO1xyXG4gIEBJbnB1dCgpIHNob3dJY29ucyA9IHRydWU7XHJcbiAgQElucHV0KCkgbWVudUl0ZW0hOiBDdXN0b21NZW51SXRlbTtcclxuXHJcbiAgdGV4dFdpdGhQbGFjZWhvbGRlcnMhOiBzdHJpbmc7XHJcbiAgaHJlZiE6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBwbGFjZWhvbGRlclNlcnZpY2VJZCE6IG51bWJlcjtcclxuICBnZXQgbWVudUl0ZW1MYXlvdXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbiA9PT0gTWVudUxheW91dERpcmVjdGlvbi5jb2x1bW4gPyAnY29sdW1uJyA6ICdyb3cnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1lbnVMYXlvdXREaXJlY3Rpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5kaXJlY3Rpb24gPT09IE1lbnVMYXlvdXREaXJlY3Rpb24uY29sdW1uIHx8ICF0aGlzLmxhYmVsc1Zpc2libGUpXHJcbiAgICAgID8gJ3N0YXJ0IGNlbnRlcicgOiAnc3RhcnQgc3RhcnQnO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdHJhcGlMaW5rU2VydmljZTogU3RyYXBpTGlua1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlaG9sZGVyU2VydmljZTogU3RyYXBpVmFyaWFibGVzU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy50ZXh0V2l0aFBsYWNlaG9sZGVycyA9IHRoaXMubWVudUl0ZW0ubGluaztcclxuICAgIHRoaXMucGxhY2Vob2xkZXJTZXJ2aWNlSWQgPSB0aGlzLnBsYWNlaG9sZGVyU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcclxuICB9XHJcblxyXG4gIGxpbmtDbGljayhldmVudDogTW91c2VFdmVudCwgaXRlbTogQ3VzdG9tTWVudUl0ZW0pIHtcclxuICAgIHRoaXMuc3RyYXBpTGlua1NlcnZpY2Uuc3RyYXBpTGlua0NsaWNrKGV2ZW50LCBpdGVtLmV4dGVybmFsTGluayk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUZXh0V2l0aFBsYWNlaG9sZGVycyA9ICh0ZXh0V2l0aFJlcGxhY2VkUGxhY2Vob2xkZXJzOiBzdHJpbmcpID0+IHRoaXMuaHJlZiA9IHRleHRXaXRoUmVwbGFjZWRQbGFjZWhvbGRlcnM7XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlclNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLnBsYWNlaG9sZGVyU2VydmljZUlkKTtcclxuICB9XHJcbn1cclxuIiwiPGEgW2xpYlBsYXVzaWJsZUV2ZW50XT1cIm1lbnVJdGVtLnBsYXVzaWJsZUV2ZW50XCIgW2Z4TGF5b3V0XT1cIm1lbnVJdGVtTGF5b3V0XCJcclxuICBbY2xhc3MudGV4dC1jZW50ZXJdPVwibWVudUl0ZW1MYXlvdXQgPT09ICdjb2x1bW4nXCIgY2xhc3M9XCJ0ZXh0LW0gbWVudS1pdGVtXCJcclxuICBbbWF0VG9vbHRpcF09XCIhbGFiZWxzVmlzaWJsZSA/IChtZW51SXRlbS50aXRsZSB8IHRyYW5zbGF0ZSkgOiAnJ1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFmdGVyXCJcclxuICBbZnhMYXlvdXRBbGlnbl09XCJtZW51TGF5b3V0RGlyZWN0aW9uXCIgbWF0VG9vbHRpcENsYXNzPVwibWVudS10b29sdGlwXCIgKGNsaWNrKT1cImxpbmtDbGljaygkZXZlbnQsIG1lbnVJdGVtKVwiXHJcbiAgW2hyZWZdPVwiaHJlZiB8IHRyYW5zbGF0ZVwiIFthdHRyLnRhcmdldF09XCJtZW51SXRlbS5leHRlcm5hbExpbms/J19ibGFuayc6ICdfc2VsZidcIiBmeExheW91dEdhcD1cIjAuMzc1cmVtXCJcclxuICBbY2xhc3MuYWN0aXZlLW1lbnUtaXRlbV09XCJtZW51SXRlbSA9PT0gYWN0aXZlSXRlbVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93SWNvbnMgJiYgbWVudUl0ZW0uaWNvblwiPlxyXG4gICAgPHRsZC1tZW51LWljb24gW21lbnVJdGVtXT1cIm1lbnVJdGVtXCI+PC90bGQtbWVudS1pY29uPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxzcGFuICpuZ0lmPVwibGFiZWxzVmlzaWJsZVwiIGNsYXNzPVwibWVudS1pdGVtLXRpdGxlXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cInRpdGxlLWNvbnRlbnRcIiBbYXR0ci5jb250ZW50XT1cIm1lbnVJdGVtLnRpdGxlIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgIHt7IG1lbnVJdGVtLnRpdGxlIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvc3Bhbj5cclxuICA8L3NwYW4+XHJcbjwvYT5cclxuIl19
|