@coreui/angular
Version:
CoreUI for Angular UI components library
94 lines • 24 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { NavigationEnd } from '@angular/router';
import { filter } from 'rxjs/operators';
import { SidebarNavHelper } from './sidebar-nav.service';
import * as i0 from "@angular/core";
import * as i1 from "./sidebar-nav.service";
import * as i2 from "@angular/common";
import * as i3 from "@angular/router";
import * as i4 from "../../shared/html-attr.directive";
import * as i5 from "@coreui/icons-angular";
import * as i6 from "./sidebar-nav-link.pipe";
import * as i7 from "./sidebar-nav-badge.pipe";
import * as i8 from "./sidebar-nav-icon.pipe";
export class SidebarNavLinkContentComponent {
constructor(helper) {
this.helper = helper;
}
}
SidebarNavLinkContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: SidebarNavLinkContentComponent, deps: [{ token: i1.SidebarNavHelper }], target: i0.ɵɵFactoryTarget.Component });
SidebarNavLinkContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: SidebarNavLinkContentComponent, selector: "c-sidebar-nav-link-content", inputs: { item: "item" }, providers: [SidebarNavHelper], ngImport: i0, template: `
<ng-container *ngIf="true">
<ng-container>{{item?.name ?? ''}}</ng-container>
</ng-container>
`, isInline: true, directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: SidebarNavLinkContentComponent, decorators: [{
type: Component,
args: [{
selector: 'c-sidebar-nav-link-content',
template: `
<ng-container *ngIf="true">
<ng-container>{{item?.name ?? ''}}</ng-container>
</ng-container>
`,
providers: [SidebarNavHelper]
}]
}], ctorParameters: function () { return [{ type: i1.SidebarNavHelper }]; }, propDecorators: { item: [{
type: Input
}] } });
export class SidebarNavLinkComponent {
constructor(router) {
this.router = router;
// tslint:disable-next-line:variable-name
this._item = {};
this.linkClick = new EventEmitter();
this.navigationEndObservable = router.events.pipe(filter(event => {
return event instanceof NavigationEnd;
}));
}
set item(item) {
this._item = JSON.parse(JSON.stringify(item));
}
get item() {
return this._item;
}
ngOnInit() {
// @ts-ignore
this.url = typeof this.item.url === 'string' ? this.item.url : this.router.serializeUrl(this.router.createUrlTree(this.item.url));
this.linkType = this.getLinkType();
this.href = this.isDisabled() ? '' : (this.item.href || this.url);
this.linkActive = this.router.url.split(/[?#(;]/)[0] === this.href.split(/[?#(;]/)[0];
this.navSubscription = this.navigationEndObservable.subscribe(event => {
const itemUrlArray = this.href.split(/[?#(;]/)[0].split('/');
const urlArray = event.urlAfterRedirects.split(/[?#(;]/)[0].split('/');
this.linkActive = itemUrlArray.every((value, index) => value === urlArray[index]);
});
}
ngOnDestroy() {
this.navSubscription.unsubscribe();
}
getLinkType() {
return this.isDisabled() ? 'disabled' : this.isExternalLink() ? 'external' : 'link';
}
isDisabled() {
return this.item?.attributes?.['disabled'];
}
isExternalLink() {
const linkPath = Array.isArray(this.item.url) ? this.item.url[0] : this.item.url;
return !!this.item.href || linkPath.substring(0, 4) === 'http';
}
linkClicked() {
this.linkClick.emit();
}
}
SidebarNavLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: SidebarNavLinkComponent, deps: [{ token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
SidebarNavLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: SidebarNavLinkComponent, selector: "c-sidebar-nav-link", inputs: { item: "item" }, outputs: { linkClick: "linkClick" }, providers: [SidebarNavHelper], ngImport: i0, template: "<ng-container [ngSwitch]=\"linkType\">\r\n <a *ngSwitchCase=\"'disabled'\"\r\n [ngClass]=\"item | cSidebarNavLink\"\r\n [cHtmlAttr]=\"item.attributes ?? {}\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: {$implicit: item}\"></ng-container>\r\n <c-sidebar-nav-link-content [item]=\"item\"></c-sidebar-nav-link-content>\r\n <span *ngIf=\"item.badge\" [ngClass]=\"item | cSidebarNavBadge\">{{ item.badge?.text }}</span>\r\n </a>\r\n <a *ngSwitchCase=\"'external'\"\r\n [ngClass]=\"item | cSidebarNavLink\"\r\n [href]=\"href\"\r\n [cHtmlAttr]=\"item.attributes ?? {}\"\r\n (click)=\"linkClicked()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: {$implicit: item}\"></ng-container>\r\n <c-sidebar-nav-link-content [item]=\"item\"></c-sidebar-nav-link-content>\r\n <span *ngIf=\"item.badge\" [ngClass]=\"item | cSidebarNavBadge\">{{ item.badge?.text }}</span>\r\n </a>\r\n <a *ngSwitchDefault\r\n [ngClass]=\"item | cSidebarNavLink\"\r\n [cHtmlAttr]=\"item.attributes ?? {}\"\r\n [target]=\"item.attributes?.['target']\"\r\n [queryParams]=\"item.linkProps?.queryParams ?? null\"\r\n [fragment]=\"item.linkProps?.fragment\"\r\n [queryParamsHandling]=\"item.linkProps?.queryParamsHandling\"\r\n [preserveFragment]=\"item.linkProps?.preserveFragment ?? false\"\r\n [skipLocationChange]=\"item.linkProps?.skipLocationChange ?? false\"\r\n [replaceUrl]=\"item.linkProps?.replaceUrl ?? false\"\r\n [state]=\"item.linkProps?.state ?? {}\"\r\n [routerLink]=\"item.url\"\r\n routerLinkActive=\"active\"\r\n (click)=\"linkClicked()\"\r\n >\r\n<!-- [class.active]=\"linkActive\"-->\r\n <ng-container *ngTemplateOutlet=\"iconTemplate ; context: {$implicit: item}\"></ng-container>\r\n <c-sidebar-nav-link-content [item]=\"item\"></c-sidebar-nav-link-content>\r\n <span *ngIf=\"item.badge\" [ngClass]=\"item | cSidebarNavBadge\">{{ item.badge?.text }}</span>\r\n </a>\r\n</ng-container>\r\n\r\n<ng-template #iconTemplate let-item>\r\n <i *ngIf=\"item?.icon\" [ngClass]=\"item | cSidebarNavIcon\"></i>\r\n <ng-template [ngIf]=\"item?.iconComponent\">\r\n <svg\r\n [cIcon]=\"item.iconComponent?.content\"\r\n [name]=\"item.iconComponent?.name\"\r\n [customClasses]=\"item | cSidebarNavIcon\"\r\n ></svg>\r\n </ng-template>\r\n <span *ngIf=\"!item?.icon && !item?.iconComponent\" [ngClass]=\"item | cSidebarNavIcon\"></span>\r\n</ng-template>\r\n", components: [{ type: SidebarNavLinkContentComponent, selector: "c-sidebar-nav-link-content", inputs: ["item"] }], directives: [{ type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { type: i5.IconDirective, selector: "svg[cIcon]", inputs: ["cIcon", "size", "title", "customClasses", "width", "height", "name", "viewBox", "xmlns", "pointer-events", "role"], exportAs: ["cIcon"] }], pipes: { "cSidebarNavLink": i6.SidebarNavLinkPipe, "cSidebarNavBadge": i7.SidebarNavBadgePipe, "cSidebarNavIcon": i8.SidebarNavIconPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: SidebarNavLinkComponent, decorators: [{
type: Component,
args: [{ selector: 'c-sidebar-nav-link', providers: [SidebarNavHelper], template: "<ng-container [ngSwitch]=\"linkType\">\r\n <a *ngSwitchCase=\"'disabled'\"\r\n [ngClass]=\"item | cSidebarNavLink\"\r\n [cHtmlAttr]=\"item.attributes ?? {}\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: {$implicit: item}\"></ng-container>\r\n <c-sidebar-nav-link-content [item]=\"item\"></c-sidebar-nav-link-content>\r\n <span *ngIf=\"item.badge\" [ngClass]=\"item | cSidebarNavBadge\">{{ item.badge?.text }}</span>\r\n </a>\r\n <a *ngSwitchCase=\"'external'\"\r\n [ngClass]=\"item | cSidebarNavLink\"\r\n [href]=\"href\"\r\n [cHtmlAttr]=\"item.attributes ?? {}\"\r\n (click)=\"linkClicked()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: {$implicit: item}\"></ng-container>\r\n <c-sidebar-nav-link-content [item]=\"item\"></c-sidebar-nav-link-content>\r\n <span *ngIf=\"item.badge\" [ngClass]=\"item | cSidebarNavBadge\">{{ item.badge?.text }}</span>\r\n </a>\r\n <a *ngSwitchDefault\r\n [ngClass]=\"item | cSidebarNavLink\"\r\n [cHtmlAttr]=\"item.attributes ?? {}\"\r\n [target]=\"item.attributes?.['target']\"\r\n [queryParams]=\"item.linkProps?.queryParams ?? null\"\r\n [fragment]=\"item.linkProps?.fragment\"\r\n [queryParamsHandling]=\"item.linkProps?.queryParamsHandling\"\r\n [preserveFragment]=\"item.linkProps?.preserveFragment ?? false\"\r\n [skipLocationChange]=\"item.linkProps?.skipLocationChange ?? false\"\r\n [replaceUrl]=\"item.linkProps?.replaceUrl ?? false\"\r\n [state]=\"item.linkProps?.state ?? {}\"\r\n [routerLink]=\"item.url\"\r\n routerLinkActive=\"active\"\r\n (click)=\"linkClicked()\"\r\n >\r\n<!-- [class.active]=\"linkActive\"-->\r\n <ng-container *ngTemplateOutlet=\"iconTemplate ; context: {$implicit: item}\"></ng-container>\r\n <c-sidebar-nav-link-content [item]=\"item\"></c-sidebar-nav-link-content>\r\n <span *ngIf=\"item.badge\" [ngClass]=\"item | cSidebarNavBadge\">{{ item.badge?.text }}</span>\r\n </a>\r\n</ng-container>\r\n\r\n<ng-template #iconTemplate let-item>\r\n <i *ngIf=\"item?.icon\" [ngClass]=\"item | cSidebarNavIcon\"></i>\r\n <ng-template [ngIf]=\"item?.iconComponent\">\r\n <svg\r\n [cIcon]=\"item.iconComponent?.content\"\r\n [name]=\"item.iconComponent?.name\"\r\n [customClasses]=\"item | cSidebarNavIcon\"\r\n ></svg>\r\n </ng-template>\r\n <span *ngIf=\"!item?.icon && !item?.iconComponent\" [ngClass]=\"item | cSidebarNavIcon\"></span>\r\n</ng-template>\r\n" }]
}], ctorParameters: function () { return [{ type: i3.Router }]; }, propDecorators: { item: [{
type: Input
}], linkClick: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1uYXYtbGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NpZGViYXIvc2lkZWJhci1uYXYvc2lkZWJhci1uYXYtbGluay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NpZGViYXIvc2lkZWJhci1uYXYvc2lkZWJhci1uYXYtbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUMsYUFBYSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFdEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0FBYXZELE1BQU0sT0FBTyw4QkFBOEI7SUFHekMsWUFDUyxNQUF3QjtRQUF4QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtJQUM3QixDQUFDOzsySEFMTSw4QkFBOEI7K0dBQTlCLDhCQUE4QiwrRUFGOUIsQ0FBRSxnQkFBZ0IsQ0FBRSwwQkFMckI7Ozs7R0FJVDsyRkFHVSw4QkFBOEI7a0JBVDFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsUUFBUSxFQUFFOzs7O0dBSVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUUsZ0JBQWdCLENBQUU7aUJBQ2hDO3VHQUVVLElBQUk7c0JBQVosS0FBSzs7QUFZUixNQUFNLE9BQU8sdUJBQXVCO0lBNEJsQyxZQUNTLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBM0J2Qix5Q0FBeUM7UUFDL0IsVUFBSyxHQUFh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SSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2pGLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUNqRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7b0hBekVVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDRHQUZ2QixDQUFFLGdCQUFnQixDQUFFLDBCQzdCakMsNDhFQW9EQSx1QkRsQ2EsOEJBQThCOzJGQWE5Qix1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usb0JBQW9CLGFBRW5CLENBQUUsZ0JBQWdCLENBQUU7NkZBUTNCLElBQUk7c0JBRFAsS0FBSztnQkFRSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtTaWRlYmFyTmF2SGVscGVyfSBmcm9tICcuL3NpZGViYXItbmF2LnNlcnZpY2UnO1xyXG4vLyBpbXBvcnQge1NpZGViYXJTZXJ2aWNlfSBmcm9tICcuLi9zaWRlYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJTmF2RGF0YSB9IGZyb20gJy4vc2lkZWJhci1uYXYnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjLXNpZGViYXItbmF2LWxpbmstY29udGVudCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cnVlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXI+e3tpdGVtPy5uYW1lID8/ICcnfX08L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIGAsXHJcbiAgcHJvdmlkZXJzOiBbIFNpZGViYXJOYXZIZWxwZXIgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lkZWJhck5hdkxpbmtDb250ZW50Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSBpdGVtPzogSU5hdkRhdGE7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGhlbHBlcjogU2lkZWJhck5hdkhlbHBlclxyXG4gICkgeyB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYy1zaWRlYmFyLW5hdi1saW5rJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2lkZWJhci1uYXYtbGluay5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbIFNpZGViYXJOYXZIZWxwZXIgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lkZWJhck5hdkxpbmtDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXHJcbiAgcHJvdGVjdGVkIF9pdGVtOiBJTmF2RGF0YSA9IHt9O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtKGl0ZW06IElOYXZEYXRhKSB7XHJcbiAgICB0aGlzLl9pdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7XHJcbiAgfVxyXG4gIGdldCBpdGVtKCk6IElOYXZEYXRhIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIGxpbmtDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIHB1YmxpYyBsaW5rVHlwZTogc3RyaW5nO1xyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBwdWJsaWMgaHJlZjogc3RyaW5nO1xyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBwdWJsaWMgbGlua0FjdGl2ZTogYm9vbGVhbjtcclxuICAvLyBAdHMtaWdub3JlXHJcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kPjtcclxuICAvLyBAdHMtaWdub3JlXHJcbiAgcHJpdmF0ZSBuYXZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAvLyBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAvLyBwcml2YXRlIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgLy8gcHJpdmF0ZSBzaWRlYmFyU2VydmljZTogU2lkZWJhclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMubmF2aWdhdGlvbkVuZE9ic2VydmFibGUgPSByb3V0ZXIuZXZlbnRzLnBpcGUoXHJcbiAgICAgIGZpbHRlcihldmVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcclxuICAgICAgfSlcclxuICAgICkgYXMgT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kPjtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgdGhpcy51cmwgPSB0eXBlb2YgdGhpcy5pdGVtLnVybCA9PT0gJ3N0cmluZycgPyB0aGlzLml0ZW0udXJsIDogdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5pdGVtLnVybCkpIDtcclxuICAgIHRoaXMubGlua1R5cGUgPSB0aGlzLmdldExpbmtUeXBlKCk7XHJcbiAgICB0aGlzLmhyZWYgPSB0aGlzLmlzRGlzYWJsZWQoKSA/ICcnIDogKHRoaXMuaXRlbS5ocmVmIHx8IHRoaXMudXJsKTtcclxuICAgIHRoaXMubGlua0FjdGl2ZSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgvWz8jKDtdLylbMF0gPT09IHRoaXMuaHJlZi5zcGxpdCgvWz8jKDtdLylbMF07XHJcbiAgICB0aGlzLm5hdlN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdGlvbkVuZE9ic2VydmFibGUuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgY29uc3QgaXRlbVVybEFycmF5ID0gdGhpcy5ocmVmLnNwbGl0KC9bPyMoO10vKVswXS5zcGxpdCgnLycpO1xyXG4gICAgICBjb25zdCB1cmxBcnJheSA9IGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzLnNwbGl0KC9bPyMoO10vKVswXS5zcGxpdCgnLycpO1xyXG4gICAgICB0aGlzLmxpbmtBY3RpdmUgPSBpdGVtVXJsQXJyYXkuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IHVybEFycmF5W2luZGV4XSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uYXZTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRMaW5rVHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCgpID8gJ2Rpc2FibGVkJyA6IHRoaXMuaXNFeHRlcm5hbExpbmsoKSA/ICdleHRlcm5hbCcgOiAnbGluayc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW0/LmF0dHJpYnV0ZXM/LlsnZGlzYWJsZWQnXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0V4dGVybmFsTGluaygpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGxpbmtQYXRoID0gQXJyYXkuaXNBcnJheSh0aGlzLml0ZW0udXJsKSA/IHRoaXMuaXRlbS51cmxbMF0gOiB0aGlzLml0ZW0udXJsO1xyXG4gICAgcmV0dXJuICEhdGhpcy5pdGVtLmhyZWYgfHwgbGlua1BhdGguc3Vic3RyaW5nKDAsIDQpID09PSAnaHR0cCc7XHJcbiAgfVxyXG5cclxuICBsaW5rQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMubGlua0NsaWNrLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBoaWRlTW9iaWxlKCkge1xyXG4gIC8vICAgLy8gdG9kbzogcHJvcGVyIHNjcm9sbEludG9WaWV3KCkgYWZ0ZXIgTmF2aWdhdGlvbkVuZFxyXG4gIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKCdzY3JvbGwnKVxyXG4gIC8vICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAvLyAgIH0sIDEwMDApXHJcbiAgLy8gICB0aGlzLnNpZGViYXJTZXJ2aWNlLnRvZ2dsZSh7b3BlbjogZmFsc2UsIGJyZWFrcG9pbnQ6ICcnfSk7XHJcbiAgLy8gfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImxpbmtUeXBlXCI+XHJcbiAgPGEgKm5nU3dpdGNoQ2FzZT1cIidkaXNhYmxlZCdcIlxyXG4gICAgIFtuZ0NsYXNzXT1cIml0ZW0gfCBjU2lkZWJhck5hdkxpbmtcIlxyXG4gICAgIFtjSHRtbEF0dHJdPVwiaXRlbS5hdHRyaWJ1dGVzID8/IHt9XCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGMtc2lkZWJhci1uYXYtbGluay1jb250ZW50IFtpdGVtXT1cIml0ZW1cIj48L2Mtc2lkZWJhci1uYXYtbGluay1jb250ZW50PlxyXG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLmJhZGdlXCIgW25nQ2xhc3NdPVwiaXRlbSB8IGNTaWRlYmFyTmF2QmFkZ2VcIj57eyBpdGVtLmJhZGdlPy50ZXh0IH19PC9zcGFuPlxyXG4gIDwvYT5cclxuICA8YSAqbmdTd2l0Y2hDYXNlPVwiJ2V4dGVybmFsJ1wiXHJcbiAgICAgW25nQ2xhc3NdPVwiaXRlbSB8IGNTaWRlYmFyTmF2TGlua1wiXHJcbiAgICAgW2hyZWZdPVwiaHJlZlwiXHJcbiAgICAgW2NIdG1sQXR0cl09XCJpdGVtLmF0dHJpYnV0ZXMgPz8ge31cIlxyXG4gICAgIChjbGljayk9XCJsaW5rQ2xpY2tlZCgpXCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGMtc2lkZWJhci1uYXYtbGluay1jb250ZW50IFtpdGVtXT1cIml0ZW1cIj48L2Mtc2lkZWJhci1uYXYtbGluay1jb250ZW50PlxyXG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLmJhZGdlXCIgW25nQ2xhc3NdPVwiaXRlbSB8IGNTaWRlYmFyTmF2QmFkZ2VcIj57eyBpdGVtLmJhZGdlPy50ZXh0IH19PC9zcGFuPlxyXG4gIDwvYT5cclxuICA8YSAqbmdTd2l0Y2hEZWZhdWx0XHJcbiAgICAgW25nQ2xhc3NdPVwiaXRlbSB8IGNTaWRlYmFyTmF2TGlua1wiXHJcbiAgICAgW2NIdG1sQXR0cl09XCJpdGVtLmF0dHJpYnV0ZXMgPz8ge31cIlxyXG4gICAgIFt0YXJnZXRdPVwiaXRlbS5hdHRyaWJ1dGVzPy5bJ3RhcmdldCddXCJcclxuICAgICBbcXVlcnlQYXJhbXNdPVwiaXRlbS5saW5rUHJvcHM/LnF1ZXJ5UGFyYW1zID8/IG51bGxcIlxyXG4gICAgIFtmcmFnbWVudF09XCJpdGVtLmxpbmtQcm9wcz8uZnJhZ21lbnRcIlxyXG4gICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cIml0ZW0ubGlua1Byb3BzPy5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcclxuICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJpdGVtLmxpbmtQcm9wcz8ucHJlc2VydmVGcmFnbWVudCA/PyBmYWxzZVwiXHJcbiAgICAgW3NraXBMb2NhdGlvbkNoYW5nZV09XCJpdGVtLmxpbmtQcm9wcz8uc2tpcExvY2F0aW9uQ2hhbmdlID8/IGZhbHNlXCJcclxuICAgICBbcmVwbGFjZVVybF09XCJpdGVtLmxpbmtQcm9wcz8ucmVwbGFjZVVybCA/PyBmYWxzZVwiXHJcbiAgICAgW3N0YXRlXT1cIml0ZW0ubGlua1Byb3BzPy5zdGF0ZSA/PyB7fVwiXHJcbiAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS51cmxcIlxyXG4gICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgIChjbGljayk9XCJsaW5rQ2xpY2tlZCgpXCJcclxuICA+XHJcbjwhLS0gICAgW2NsYXNzLmFjdGl2ZV09XCJsaW5rQWN0aXZlXCItLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGUgOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGMtc2lkZWJhci1uYXYtbGluay1jb250ZW50IFtpdGVtXT1cIml0ZW1cIj48L2Mtc2lkZWJhci1uYXYtbGluay1jb250ZW50PlxyXG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLmJhZGdlXCIgW25nQ2xhc3NdPVwiaXRlbSB8IGNTaWRlYmFyTmF2QmFkZ2VcIj57eyBpdGVtLmJhZGdlPy50ZXh0IH19PC9zcGFuPlxyXG4gIDwvYT5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI2ljb25UZW1wbGF0ZSBsZXQtaXRlbT5cclxuICA8aSAqbmdJZj1cIml0ZW0/Lmljb25cIiBbbmdDbGFzc109XCJpdGVtIHwgY1NpZGViYXJOYXZJY29uXCI+PC9pPlxyXG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpdGVtPy5pY29uQ29tcG9uZW50XCI+XHJcbiAgICA8c3ZnXHJcbiAgICAgIFtjSWNvbl09XCJpdGVtLmljb25Db21wb25lbnQ/LmNvbnRlbnRcIlxyXG4gICAgICBbbmFtZV09XCJpdGVtLmljb25Db21wb25lbnQ/Lm5hbWVcIlxyXG4gICAgICBbY3VzdG9tQ2xhc3Nlc109XCJpdGVtIHwgY1NpZGViYXJOYXZJY29uXCJcclxuICAgID48L3N2Zz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxzcGFuICpuZ0lmPVwiIWl0ZW0/Lmljb24gJiYgIWl0ZW0/Lmljb25Db21wb25lbnRcIiBbbmdDbGFzc109XCJpdGVtIHwgY1NpZGViYXJOYXZJY29uXCI+PC9zcGFuPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=