cu-ng-design-library
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.3.0.
116 lines • 30 kB
JavaScript
import { Component, Input } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "@angular/material/icon";
import * as i3 from "@angular/material/sidenav";
import * as i4 from "@angular/material/list";
import * as i5 from "@angular/material/toolbar";
import * as i6 from "@angular/common";
import * as i7 from "../admin-toolbar/admin-toolbar.component";
export class SideMenuComponent {
// options = {
// autoCollapseOnClick: false,
// autoCollapseOnHover: false,
// sidenavCollapsed: false,
// };
constructor(
// @Inject(MAT_DIALOG_DATA) public data: DialogData,
activeRouter) {
this.activeRouter = activeRouter;
this.title = 'Admin Toolbar';
this.showToggle = true;
this.svgIconUrl = 'https://cdn.jsdelivr.net/gh/CU-CommunityApps/cwd_base/images/cornell/bold_cornell_seal_simple_white.svg';
this.imgHeight = '45px';
this.mode = 'side'; // 'over' | 'push' | 'side'
this.opened = true;
this.isMobileLayout = false;
this.showToggle = true;
}
ngOnInit() {
// this.options.autoCollapseOnClick = this.isMobileLayout;
if (this.isMobileLayout) {
this.mode = 'over';
this.opened = false;
}
}
// @todo do this in a more angular way.
handleExpandClick(contentClass) {
console.log('handleExpandClick', contentClass);
// slide opn and close
const content = document.querySelector('.content.' + contentClass);
if (content) {
if (content?.style.maxHeight) {
content.style.maxHeight = '';
}
else {
content.style.maxHeight = content?.scrollHeight + 'px';
}
}
// toggle aria attributes
const collapsible = document.querySelector('.collapsible.' + contentClass);
if (collapsible) {
// toggle aria expanded attribute
if (collapsible.getAttribute('aria-expanded') !== 'true') {
collapsible.setAttribute('aria-expanded', 'true');
}
else {
collapsible.setAttribute('aria-expanded', 'false');
}
}
}
handleFocus(contentClass) {
console.log('handleFocus', contentClass);
const content = document.querySelector('.content.' + contentClass);
if (content) {
content.style.maxHeight = content?.scrollHeight + 'px';
}
const collapsible = document.querySelector('.collapsible.' + contentClass);
if (collapsible) {
collapsible.setAttribute('aria-expanded', 'true');
}
}
routeHasActiveChild(route) {
const _activeChild = this.activeRouter.children.length;
if (_activeChild != 0) {
for (let i = 0; i < _activeChild; i++) {
if (this.activeRouter.children[i].outlet === 'primary') {
if (this.activeRouter.children[i].snapshot.url[0].path === route.path) {
return 'active-parent';
}
}
}
}
return '';
}
handleLinkClick() {
if (this.isMobileLayout) {
this.handleToggleClick();
}
}
handleToggleClick() {
this.opened = !this.opened;
}
}
SideMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: SideMenuComponent, deps: [{ token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
SideMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: SideMenuComponent, selector: "lib-side-menu", inputs: { routes: "routes", title: "title", showToggle: "showToggle", svgIconUrl: "svgIconUrl", imgHeight: "imgHeight", mode: "mode", opened: "opened", isMobileLayout: "isMobileLayout" }, ngImport: i0, template: "<mat-drawer-container>\n <mat-drawer\n #drawer\n [opened]=\"opened\"\n class=\"sidenav\"\n [mode]=\"mode\"\n autosize\n [ngClass]=\"{ 'mobile': isMobileLayout }\"\n >\n\n <mat-toolbar\n class=\"sidebar-logo\"\n color=\"primary\"\n >\n <a routerLink=\"/\">\n <img\n alt=\"Cornell University\"\n [src]=\"svgIconUrl\"\n height=\"{{imgHeight}}\"\n >\n {{title}}\n </a>\n </mat-toolbar>\n\n <mat-nav-list>\n <ng-container *ngFor=\"let route of routes\">\n <ng-container *ngIf=\"route.data && route.data['menu'] == 'admin'\">\n <a\n mat-list-item\n *ngIf=\"!route.children; else parent \"\n [routerLink]=\"route.path\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n (click)=\"handleLinkClick()\"\n >\n <span class=\"flex align-items-center\">\n <span>\n <mat-icon\n matListIcon\n *ngIf=\"route.data['icon']\"\n >\n {{route.data['icon']}}\n </mat-icon>\n </span>\n <span class=\"pl-1\">\n {{route.data && route.data['title'] ? route.data['title'] : route.path}}\n </span>\n </span>\n\n </a>\n\n <ng-template #parent>\n <mat-list-item\n [ngClass]=\"routeHasActiveChild(route)\"\n [ngClass]=\"['collapsible', route.path]\"\n (click)=\"handleExpandClick(route.path)\"\n >\n <span class=\"flex align-items-center\">\n <span>\n <mat-icon\n matListIcon\n *ngIf=\"route.data['icon']\"\n >\n {{route.data['icon']}}\n </mat-icon>\n </span>\n <span class=\"pl-1\">\n {{route.data && route.data['title'] ? route.data['title'] : route.path}}\n </span>\n <span class=\"flex-grow\"></span>\n <span>\n <mat-icon class=\"expand-more\">expand_more</mat-icon>\n </span>\n </span>\n\n </mat-list-item>\n\n <div [ngClass]=\"['content', route.path]\">\n <ng-container *ngFor=\"let child of route.children\">\n <mat-list-item\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n (click)=\"handleLinkClick()\"\n >\n <a\n routerLink=\"{{route.path}}/{{child.path}}\"\n (focus)=\"handleFocus(child.path)\"\n class=\"pad-left\"\n >\n <span>\n <mat-icon\n matListIcon\n *ngIf=\"child.data && child.data['icon']\"\n >\n {{ child.data['icon'] }}\n </mat-icon>\n </span>\n <span class=\"pl-1\">\n {{child.data && child.data['title'] ? child.data['title'] : child.path}}\n </span>\n </a>\n </mat-list-item>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n\n </mat-nav-list>\n\n </mat-drawer>\n\n <mat-drawer-content>\n <lib-admin-toolbar\n (toggleSidenav)=\"handleToggleClick()\"\n (toggleSidenavNotice)=\"handleToggleClick()\"\n >\n <ng-content select=\"[toolbar]\"></ng-content>\n </lib-admin-toolbar>\n <ng-content></ng-content>\n </mat-drawer-content>\n</mat-drawer-container>\n", styles: [".pad-left{padding-left:16px}.pl-1{padding-left:4px}mat-drawer{min-width:200px;background-color:#f7f7f7}.mat-mdc-list-base .mdc-list-item{font-size:18px}.sidebar-logo a{display:flex;align-items:center;justify-content:flex-start;width:100%;height:64px;color:#fff;text-decoration:none}.sidebar-logo a:hover{text-decoration:underline}.sidebar-logo a img{padding-right:8px}mat-nav-list a{display:flex;align-items:center}.expand-more{transition:transform .15s cubic-bezier(.4,0,.2,1) 0ms}.collapsible{width:100%}.flex{display:flex}.flex-grow{flex-grow:1}.justify-content-space-between{justify-content:space-evenly}.align-items-center{align-items:center}.content{background:rgba(0,0,0,.1);max-height:0;overflow:hidden;transition:max-height .2s ease-out}.mat-mdc-list-item{min-height:48px}.mat-mdc-list-item a{text-decoration:none;color:var(--mdc-list-list-item-label-text-color)}.mat-mdc-list-item.active{background:rgba(0,0,0,.2)}.mat-mdc-list-item.active:focus{background:rgba(0,0,0,.2)}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i3.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i3.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "component", type: i4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.AdminToolbarComponent, selector: "lib-admin-toolbar", inputs: ["showToggle"], outputs: ["toggleSidenav", "toggleSidenavNotice"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: SideMenuComponent, decorators: [{
type: Component,
args: [{ selector: 'lib-side-menu', template: "<mat-drawer-container>\n <mat-drawer\n #drawer\n [opened]=\"opened\"\n class=\"sidenav\"\n [mode]=\"mode\"\n autosize\n [ngClass]=\"{ 'mobile': isMobileLayout }\"\n >\n\n <mat-toolbar\n class=\"sidebar-logo\"\n color=\"primary\"\n >\n <a routerLink=\"/\">\n <img\n alt=\"Cornell University\"\n [src]=\"svgIconUrl\"\n height=\"{{imgHeight}}\"\n >\n {{title}}\n </a>\n </mat-toolbar>\n\n <mat-nav-list>\n <ng-container *ngFor=\"let route of routes\">\n <ng-container *ngIf=\"route.data && route.data['menu'] == 'admin'\">\n <a\n mat-list-item\n *ngIf=\"!route.children; else parent \"\n [routerLink]=\"route.path\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n (click)=\"handleLinkClick()\"\n >\n <span class=\"flex align-items-center\">\n <span>\n <mat-icon\n matListIcon\n *ngIf=\"route.data['icon']\"\n >\n {{route.data['icon']}}\n </mat-icon>\n </span>\n <span class=\"pl-1\">\n {{route.data && route.data['title'] ? route.data['title'] : route.path}}\n </span>\n </span>\n\n </a>\n\n <ng-template #parent>\n <mat-list-item\n [ngClass]=\"routeHasActiveChild(route)\"\n [ngClass]=\"['collapsible', route.path]\"\n (click)=\"handleExpandClick(route.path)\"\n >\n <span class=\"flex align-items-center\">\n <span>\n <mat-icon\n matListIcon\n *ngIf=\"route.data['icon']\"\n >\n {{route.data['icon']}}\n </mat-icon>\n </span>\n <span class=\"pl-1\">\n {{route.data && route.data['title'] ? route.data['title'] : route.path}}\n </span>\n <span class=\"flex-grow\"></span>\n <span>\n <mat-icon class=\"expand-more\">expand_more</mat-icon>\n </span>\n </span>\n\n </mat-list-item>\n\n <div [ngClass]=\"['content', route.path]\">\n <ng-container *ngFor=\"let child of route.children\">\n <mat-list-item\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n (click)=\"handleLinkClick()\"\n >\n <a\n routerLink=\"{{route.path}}/{{child.path}}\"\n (focus)=\"handleFocus(child.path)\"\n class=\"pad-left\"\n >\n <span>\n <mat-icon\n matListIcon\n *ngIf=\"child.data && child.data['icon']\"\n >\n {{ child.data['icon'] }}\n </mat-icon>\n </span>\n <span class=\"pl-1\">\n {{child.data && child.data['title'] ? child.data['title'] : child.path}}\n </span>\n </a>\n </mat-list-item>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n\n </mat-nav-list>\n\n </mat-drawer>\n\n <mat-drawer-content>\n <lib-admin-toolbar\n (toggleSidenav)=\"handleToggleClick()\"\n (toggleSidenavNotice)=\"handleToggleClick()\"\n >\n <ng-content select=\"[toolbar]\"></ng-content>\n </lib-admin-toolbar>\n <ng-content></ng-content>\n </mat-drawer-content>\n</mat-drawer-container>\n", styles: [".pad-left{padding-left:16px}.pl-1{padding-left:4px}mat-drawer{min-width:200px;background-color:#f7f7f7}.mat-mdc-list-base .mdc-list-item{font-size:18px}.sidebar-logo a{display:flex;align-items:center;justify-content:flex-start;width:100%;height:64px;color:#fff;text-decoration:none}.sidebar-logo a:hover{text-decoration:underline}.sidebar-logo a img{padding-right:8px}mat-nav-list a{display:flex;align-items:center}.expand-more{transition:transform .15s cubic-bezier(.4,0,.2,1) 0ms}.collapsible{width:100%}.flex{display:flex}.flex-grow{flex-grow:1}.justify-content-space-between{justify-content:space-evenly}.align-items-center{align-items:center}.content{background:rgba(0,0,0,.1);max-height:0;overflow:hidden;transition:max-height .2s ease-out}.mat-mdc-list-item{min-height:48px}.mat-mdc-list-item a{text-decoration:none;color:var(--mdc-list-list-item-label-text-color)}.mat-mdc-list-item.active{background:rgba(0,0,0,.2)}.mat-mdc-list-item.active:focus{background:rgba(0,0,0,.2)}\n"] }]
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }]; }, propDecorators: { routes: [{
type: Input
}], title: [{
type: Input
}], showToggle: [{
type: Input
}], svgIconUrl: [{
type: Input
}], imgHeight: [{
type: Input
}], mode: [{
type: Input
}], opened: [{
type: Input
}], isMobileLayout: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2N1LW5nLWRlc2lnbi1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9sYXlvdXQvc2lkZS1tZW51L3NpZGUtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jdS1uZy1kZXNpZ24tbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvbGF5b3V0L3NpZGUtbWVudS9zaWRlLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQVN6RCxNQUFNLE9BQU8saUJBQWlCO0lBVzVCLGNBQWM7SUFDZCxnQ0FBZ0M7SUFDaEMsZ0NBQWdDO0lBQ2hDLDZCQUE2QjtJQUM3QixLQUFLO0lBRUw7SUFDRSxvREFBb0Q7SUFDNUMsWUFBNEI7UUFBNUIsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBakI3QixVQUFLLEdBQUcsZUFBZSxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsZUFBVSxHQUNqQix5R0FBeUcsQ0FBQztRQUNuRyxjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ25CLFNBQUksR0FBa0IsTUFBTSxDQUFDLENBQUMsMkJBQTJCO1FBQ3pELFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQVk5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNOLDBEQUEwRDtRQUMxRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDckI7SUFD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LEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREcmF3ZXJNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQgeyBSb3V0ZXMsIFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zaWRlLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2lkZS1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2lkZS1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNpZGVNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcm91dGVzITogUm91dGVzO1xuICBASW5wdXQoKSB0aXRsZSA9ICdBZG1pbiBUb29sYmFyJztcbiAgQElucHV0KCkgc2hvd1RvZ2dsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHN2Z0ljb25VcmwgPVxuICAgICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvQ1UtQ29tbXVuaXR5QXBwcy9jd2RfYmFzZS9pbWFnZXMvY29ybmVsbC9ib2xkX2Nvcm5lbGxfc2VhbF9zaW1wbGVfd2hpdGUuc3ZnJztcbiAgQElucHV0KCkgaW1nSGVpZ2h0ID0gJzQ1cHgnO1xuICBASW5wdXQoKSBtb2RlOiBNYXREcmF3ZXJNb2RlID0gJ3NpZGUnOyAvLyAnb3ZlcicgfCAncHVzaCcgfCAnc2lkZSdcbiAgQElucHV0KCkgb3BlbmVkID0gdHJ1ZTtcbiAgQElucHV0KCkgaXNNb2JpbGVMYXlvdXQgPSBmYWxzZTtcblxuICAvLyBvcHRpb25zID0ge1xuICAvLyAgIGF1dG9Db2xsYXBzZU9uQ2xpY2s6IGZhbHNlLFxuICAvLyAgIGF1dG9Db2xsYXBzZU9uSG92ZXI6IGZhbHNlLFxuICAvLyAgIHNpZGVuYXZDb2xsYXBzZWQ6IGZhbHNlLFxuICAvLyB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogRGlhbG9nRGF0YSxcbiAgICBwcml2YXRlIGFjdGl2ZVJvdXRlcjogQWN0aXZhdGVkUm91dGVcbiAgKSB7XG4gICAgdGhpcy5zaG93VG9nZ2xlID0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIHRoaXMub3B0aW9ucy5hdXRvQ29sbGFwc2VPbkNsaWNrID0gdGhpcy5pc01vYmlsZUxheW91dDtcbiAgICBpZiAodGhpcy5pc01vYmlsZUxheW91dCkge1xuICAgICAgdGhpcy5tb2RlID0gJ292ZXInO1xuICAgICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBAdG9kbyBkbyB0aGlzIGluIGEgbW9yZSBhbmd1bGFyIHdheS5cbiAgaGFuZGxlRXhwYW5kQ2xpY2soY29udGVudENsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnaGFuZGxlRXhwYW5kQ2xpY2snLCBjb250ZW50Q2xhc3MpO1xuICAgIC8vIHNsaWRlIG9wbiBhbmQgY2xvc2VcbiAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuY29udGVudC4nICsgY29udGVudENsYXNzXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChjb250ZW50KSB7XG4gICAgICBpZiAoY29udGVudD8uc3R5bGUubWF4SGVpZ2h0KSB7XG4gICAgICAgIGNvbnRlbnQuc3R5bGUubWF4SGVpZ2h0ID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50LnN0eWxlLm1heEhlaWdodCA9IGNvbnRlbnQ/LnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHRvZ2dsZSBhcmlhIGF0dHJpYnV0ZXNcbiAgICBjb25zdCBjb2xsYXBzaWJsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb2xsYXBzaWJsZS4nICsgY29udGVudENsYXNzKTtcbiAgICBpZiAoY29sbGFwc2libGUpIHtcbiAgICAgIC8vIHRvZ2dsZSBhcmlhIGV4cGFuZGVkIGF0dHJpYnV0ZVxuICAgICAgaWYgKGNvbGxhcHNpYmxlLmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpICE9PSAndHJ1ZScpIHtcbiAgICAgICAgY29sbGFwc2libGUuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbGxhcHNpYmxlLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZvY3VzKGNvbnRlbnRDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2hhbmRsZUZvY3VzJywgY29udGVudENsYXNzKTtcbiAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuY29udGVudC4nICsgY29udGVudENsYXNzXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoY29udGVudCkge1xuICAgICAgY29udGVudC5zdHlsZS5tYXhIZWlnaHQgPSBjb250ZW50Py5zY3JvbGxIZWlnaHQgKyAncHgnO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbGxhcHNpYmxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbGxhcHNpYmxlLicgKyBjb250ZW50Q2xhc3MpO1xuICAgIGlmIChjb2xsYXBzaWJsZSkge1xuICAgICAgY29sbGFwc2libGUuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICB9XG4gIH1cblxuICByb3V0ZUhhc0FjdGl2ZUNoaWxkKHJvdXRlOiBSb3V0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgX2FjdGl2ZUNoaWxkID0gdGhpcy5hY3RpdmVSb3V0ZXIuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGlmIChfYWN0aXZlQ2hpbGQgIT0gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfYWN0aXZlQ2hpbGQ7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVSb3V0ZXIuY2hpbGRyZW5baV0ub3V0bGV0ID09PSAncHJpbWFyeScpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJvdXRlci5jaGlsZHJlbltpXS5zbmFwc2hvdC51cmxbMF0ucGF0aCA9PT0gcm91dGUucGF0aFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuICdhY3RpdmUtcGFyZW50JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaGFuZGxlTGlua0NsaWNrKCkge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlTGF5b3V0KSB7XG4gICAgICB0aGlzLmhhbmRsZVRvZ2dsZUNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlVG9nZ2xlQ2xpY2soKSB7XG4gICAgdGhpcy5vcGVuZWQgPSAhdGhpcy5vcGVuZWQ7XG4gIH1cbn1cbiIsIjxtYXQtZHJhd2VyLWNvbnRhaW5lcj5cbiAgPG1hdC1kcmF3ZXJcbiAgICAjZHJhd2VyXG4gICAgW29wZW5lZF09XCJvcGVuZWRcIlxuICAgIGNsYXNzPVwic2lkZW5hdlwiXG4gICAgW21vZGVdPVwibW9kZVwiXG4gICAgYXV0b3NpemVcbiAgICBbbmdDbGFzc109XCJ7ICdtb2JpbGUnOiBpc01vYmlsZUxheW91dCB9XCJcbiAgPlxuXG4gICAgPG1hdC10b29sYmFyXG4gICAgICBjbGFzcz1cInNpZGViYXItbG9nb1wiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgID5cbiAgICAgIDxhIHJvdXRlckxpbms9XCIvXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICBhbHQ9XCJDb3JuZWxsIFVuaXZlcnNpdHlcIlxuICAgICAgICAgIFtzcmNdPVwic3ZnSWNvblVybFwiXG4gICAgICAgICAgaGVpZ2h0PVwie3tpbWdIZWlnaHR9fVwiXG4gICAgICAgID5cbiAgICAgICAge3t0aXRsZX19XG4gICAgICA8L2E+XG4gICAgPC9tYXQtdG9vbGJhcj5cblxuICAgIDxtYXQtbmF2LWxpc3Q+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3V0ZSBvZiByb3V0ZXNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlLmRhdGEgJiYgcm91dGUuZGF0YVsnbWVudSddID09ICdhZG1pbidcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgbWF0LWxpc3QtaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCIhcm91dGUuY2hpbGRyZW47IGVsc2UgcGFyZW50IFwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZS5wYXRoXCJcbiAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntleGFjdDogdHJ1ZX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUxpbmtDbGljaygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgbWF0TGlzdEljb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm91dGUuZGF0YVsnaWNvbiddXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7e3JvdXRlLmRhdGFbJ2ljb24nXX19XG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIj5cbiAgICAgICAgICAgICAgICB7e3JvdXRlLmRhdGEgJiYgcm91dGUuZGF0YVsndGl0bGUnXSA/IHJvdXRlLmRhdGFbJ3RpdGxlJ10gOiByb3V0ZS5wYXRofX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8bWF0LWxpc3QtaXRlbVxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3V0ZUhhc0FjdGl2ZUNoaWxkKHJvdXRlKVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnY29sbGFwc2libGUnLCByb3V0ZS5wYXRoXVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVFeHBhbmRDbGljayhyb3V0ZS5wYXRoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgICBtYXRMaXN0SWNvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdXRlLmRhdGFbJ2ljb24nXVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7cm91dGUuZGF0YVsnaWNvbiddfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMVwiPlxuICAgICAgICAgICAgICAgICAge3tyb3V0ZS5kYXRhICYmIHJvdXRlLmRhdGFbJ3RpdGxlJ10gPyByb3V0ZS5kYXRhWyd0aXRsZSddIDogcm91dGUucGF0aH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC1ncm93XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZXhwYW5kLW1vcmVcIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cblxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJbJ2NvbnRlbnQnLCByb3V0ZS5wYXRoXVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3V0ZS5jaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7ZXhhY3Q6IHRydWV9XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVMaW5rQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgcm91dGVyTGluaz1cInt7cm91dGUucGF0aH19L3t7Y2hpbGQucGF0aH19XCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzKGNoaWxkLnBhdGgpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0TGlzdEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hpbGQuZGF0YSAmJiBjaGlsZC5kYXRhWydpY29uJ11cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkLmRhdGFbJ2ljb24nXSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3tjaGlsZC5kYXRhICYmIGNoaWxkLmRhdGFbJ3RpdGxlJ10gPyBjaGlsZC5kYXRhWyd0aXRsZSddIDogY2hpbGQucGF0aH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbWF0LW5hdi1saXN0PlxuXG4gIDwvbWF0LWRyYXdlcj5cblxuICA8bWF0LWRyYXdlci1jb250ZW50PlxuICAgIDxsaWItYWRtaW4tdG9vbGJhclxuICAgICAgKHRvZ2dsZVNpZGVuYXYpPVwiaGFuZGxlVG9nZ2xlQ2xpY2soKVwiXG4gICAgICAodG9nZ2xlU2lkZW5hdk5vdGljZSk9XCJoYW5kbGVUb2dnbGVDbGljaygpXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbdG9vbGJhcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9saWItYWRtaW4tdG9vbGJhcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvbWF0LWRyYXdlci1jb250ZW50PlxuPC9tYXQtZHJhd2VyLWNvbnRhaW5lcj5cbiJdfQ==