ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
97 lines • 20.9 kB
JavaScript
import { Component, ElementRef, Injector, ViewEncapsulation, forwardRef } from '@angular/core';
import { Subscription } from 'rxjs';
import { AppMenuService } from '../../services/app-menu.service';
import { PermissionsService } from '../../services/permissions/permissions.service';
import { OTranslateService } from '../../services/translate/o-translate.service';
import { Util } from '../../util/util';
import { OBarMenuBase } from './o-bar-menu-base.class';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/icon";
import * as i2 from "@angular/material/toolbar";
import * as i3 from "./menu-nested/o-bar-menu-nested.component";
import * as i4 from "../../pipes/o-translate.pipe";
export const DEFAULT_INPUTS_O_BAR_MENU = [
'menuTitle: title',
'tooltip',
];
export class OBarMenuComponent {
constructor(elRef, injector) {
this.elRef = elRef;
this.injector = injector;
this.subscription = new Subscription();
this.id = 'm_' + String((new Date()).getTime() + Util.randomNumber().toString());
this.permissionsService = this.injector.get(PermissionsService);
this.translateService = this.injector.get(OTranslateService);
this.appMenuService = this.injector.get(AppMenuService);
this.subscription.add(this.appMenuService.onPermissionMenuChanged.subscribe(() => this.refreshMenuRoots()));
this.menuRoots = this.appMenuService.getMenuRoots();
}
ngOnInit() {
if (!this.tooltip) {
this.tooltip = this.menuTitle;
}
if (this.translateService) {
this.translateService.onLanguageChanged.subscribe(() => {
this.setDOMTitle();
});
this.setDOMTitle();
}
}
setDOMTitle() {
const tooltip = this.translateService.get(this.tooltip);
this.elRef.nativeElement.setAttribute('title', tooltip);
}
collapseAll() {
const inputs = this.elRef.nativeElement.querySelectorAll('input');
if (inputs) {
inputs.forEach(element => {
element.checked = false;
});
}
const fakeLis = this.elRef.nativeElement.querySelectorAll('.fake-li-hover');
if (fakeLis) {
fakeLis.forEach(element => {
element.classList.remove('fake-li-hover');
});
}
}
getPermissionsService() {
return this.permissionsService;
}
get menuTitle() {
return this._menuTitle;
}
set menuTitle(val) {
this._menuTitle = val;
}
get tooltip() {
return this._tooltip;
}
set tooltip(val) {
this._tooltip = val;
}
get id() {
return this._id;
}
set id(val) {
this._id = val;
}
get menuItems() {
return this.menuRoots;
}
refreshMenuRoots() {
this.menuRoots = [...this.appMenuService.getMenuRoots()];
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
OBarMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OBarMenuComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
OBarMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OBarMenuComponent, selector: "o-bar-menu", inputs: { menuTitle: ["title", "menuTitle"], tooltip: "tooltip" }, host: { properties: { "class.o-bar-menu": "true" } }, providers: [{ provide: OBarMenuBase, useExisting: forwardRef(() => OBarMenuComponent) }], ngImport: i0, template: "<mat-toolbar color=\"primary\">\n <nav>\n <mat-icon class=\"mat-24 menu-icon toggle\" (click)=\"input.checked = !input.checked\" svgIcon=\"ontimize:menu\"></mat-icon>\n <label [attr.for]=\"id\" class=\"toggle title-label\">{{ menuTitle | oTranslate }}</label>\n <input #input [attr.id]=\"id\" type=\"checkbox\" />\n <div class=\"fake-ul mat-primary menu\">\n <ng-container>\n <o-bar-menu-nested [items]=\"menuItems\"></o-bar-menu-nested>\n </ng-container>\n <ng-content></ng-content>\n </div>\n </nav>\n</mat-toolbar>", styles: [".o-bar-menu .toggle,.o-bar-menu input{display:none}.o-bar-menu nav{margin:0;padding:0}.o-bar-menu nav:after{content:\"\";display:table;clear:both}.o-bar-menu nav .fake-li a{cursor:pointer}.o-bar-menu nav .fake-ul{float:right;padding:0;margin:0;list-style:none;position:relative}.o-bar-menu nav .fake-ul.menu>.o-bar-menu-item .o-bar-menu-item-title{top:0;padding-left:0}.o-bar-menu nav .fake-ul .fake-li{margin:0;display:inline-block}.o-bar-menu nav .fake-ul .fake-ul{display:none;position:absolute;top:60px}.o-bar-menu nav .fake-ul .fake-ul .fake-li{min-width:250px;width:250px;float:none;display:list-item;position:relative;white-space:nowrap}.o-bar-menu nav .fake-ul .fake-ul .fake-ul{top:0}.o-bar-menu nav .fake-ul .fake-ul .fake-ul .fake-li{position:relative;top:0;left:0}.o-bar-menu nav a{display:flex;align-items:center;padding:0 20px;font-size:20px;line-height:60px;text-decoration:none}.o-bar-menu .fake-li>a:only-child:after{content:\"\"}@media all and (min-width: 768px){.o-bar-menu nav .fake-ul .fake-li-hover>.fake-ul{display:inline-block;z-index:1000}.o-bar-menu nav .fake-ul .fake-ul .fake-li-hover>.fake-ul{display:inline-block;z-index:1000;left:250px}}@media all and (max-width: 767px){.o-bar-menu .mat-toolbar{height:auto!important}.o-bar-menu nav{margin:10px 0;width:100%}.o-bar-menu nav .o-bar-menu-group,.o-bar-menu nav .o-bar-menu-item,.o-bar-menu nav .o-bar-menu-separator,.o-bar-menu nav .o-locale-bar-menu-item{display:flex}.o-bar-menu nav .o-bar-menu-group .mat-mdc-list-item,.o-bar-menu nav .o-bar-menu-item .mat-mdc-list-item,.o-bar-menu nav .o-bar-menu-separator .mat-mdc-list-item,.o-bar-menu nav .o-locale-bar-menu-item .mat-mdc-list-item{display:flex;justify-content:flex-start;align-items:center}.o-bar-menu nav .fake-ul{width:100%}.o-bar-menu nav .fake-ul .fake-li{width:100%}.o-bar-menu nav .fake-ul .fake-ul{float:none;position:static;width:100%}.o-bar-menu nav .fake-ul .fake-ul .fake-li{padding-left:20px;width:100%}.o-bar-menu nav .fake-ul .fake-ul .mat-elevation-z4{box-shadow:none}.o-bar-menu .toggle{display:inline-block;padding:0 20px;font-size:20px;line-height:60px;text-decoration:none;border:none;cursor:pointer}.o-bar-menu .toggle+a{display:none!important}.o-bar-menu .menu{display:none;float:left!important}.o-bar-menu label.title-label{display:inline-block}.o-bar-menu .mat-icon.menu-icon{vertical-align:middle;display:inline-block;line-height:1;padding:0 4px}.o-bar-menu input:checked+.fake-ul{display:block}}@media all and (max-width: 330px){.o-bar-menu nav .fake-ul .fake-li{width:94%}}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i3.OBarMenuNestedComponent, selector: "o-bar-menu-nested", inputs: ["items"] }, { kind: "pipe", type: i4.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OBarMenuComponent, decorators: [{
type: Component,
args: [{ selector: 'o-bar-menu', inputs: DEFAULT_INPUTS_O_BAR_MENU, encapsulation: ViewEncapsulation.None, host: {
'[class.o-bar-menu]': 'true'
}, providers: [{ provide: OBarMenuBase, useExisting: forwardRef(() => OBarMenuComponent) }], template: "<mat-toolbar color=\"primary\">\n <nav>\n <mat-icon class=\"mat-24 menu-icon toggle\" (click)=\"input.checked = !input.checked\" svgIcon=\"ontimize:menu\"></mat-icon>\n <label [attr.for]=\"id\" class=\"toggle title-label\">{{ menuTitle | oTranslate }}</label>\n <input #input [attr.id]=\"id\" type=\"checkbox\" />\n <div class=\"fake-ul mat-primary menu\">\n <ng-container>\n <o-bar-menu-nested [items]=\"menuItems\"></o-bar-menu-nested>\n </ng-container>\n <ng-content></ng-content>\n </div>\n </nav>\n</mat-toolbar>", styles: [".o-bar-menu .toggle,.o-bar-menu input{display:none}.o-bar-menu nav{margin:0;padding:0}.o-bar-menu nav:after{content:\"\";display:table;clear:both}.o-bar-menu nav .fake-li a{cursor:pointer}.o-bar-menu nav .fake-ul{float:right;padding:0;margin:0;list-style:none;position:relative}.o-bar-menu nav .fake-ul.menu>.o-bar-menu-item .o-bar-menu-item-title{top:0;padding-left:0}.o-bar-menu nav .fake-ul .fake-li{margin:0;display:inline-block}.o-bar-menu nav .fake-ul .fake-ul{display:none;position:absolute;top:60px}.o-bar-menu nav .fake-ul .fake-ul .fake-li{min-width:250px;width:250px;float:none;display:list-item;position:relative;white-space:nowrap}.o-bar-menu nav .fake-ul .fake-ul .fake-ul{top:0}.o-bar-menu nav .fake-ul .fake-ul .fake-ul .fake-li{position:relative;top:0;left:0}.o-bar-menu nav a{display:flex;align-items:center;padding:0 20px;font-size:20px;line-height:60px;text-decoration:none}.o-bar-menu .fake-li>a:only-child:after{content:\"\"}@media all and (min-width: 768px){.o-bar-menu nav .fake-ul .fake-li-hover>.fake-ul{display:inline-block;z-index:1000}.o-bar-menu nav .fake-ul .fake-ul .fake-li-hover>.fake-ul{display:inline-block;z-index:1000;left:250px}}@media all and (max-width: 767px){.o-bar-menu .mat-toolbar{height:auto!important}.o-bar-menu nav{margin:10px 0;width:100%}.o-bar-menu nav .o-bar-menu-group,.o-bar-menu nav .o-bar-menu-item,.o-bar-menu nav .o-bar-menu-separator,.o-bar-menu nav .o-locale-bar-menu-item{display:flex}.o-bar-menu nav .o-bar-menu-group .mat-mdc-list-item,.o-bar-menu nav .o-bar-menu-item .mat-mdc-list-item,.o-bar-menu nav .o-bar-menu-separator .mat-mdc-list-item,.o-bar-menu nav .o-locale-bar-menu-item .mat-mdc-list-item{display:flex;justify-content:flex-start;align-items:center}.o-bar-menu nav .fake-ul{width:100%}.o-bar-menu nav .fake-ul .fake-li{width:100%}.o-bar-menu nav .fake-ul .fake-ul{float:none;position:static;width:100%}.o-bar-menu nav .fake-ul .fake-ul .fake-li{padding-left:20px;width:100%}.o-bar-menu nav .fake-ul .fake-ul .mat-elevation-z4{box-shadow:none}.o-bar-menu .toggle{display:inline-block;padding:0 20px;font-size:20px;line-height:60px;text-decoration:none;border:none;cursor:pointer}.o-bar-menu .toggle+a{display:none!important}.o-bar-menu .menu{display:none;float:left!important}.o-bar-menu label.title-label{display:inline-block}.o-bar-menu .mat-icon.menu-icon{vertical-align:middle;display:inline-block;line-height:1;padding:0 4px}.o-bar-menu input:checked+.fake-ul{display:block}}@media all and (max-width: 330px){.o-bar-menu nav .fake-ul .fake-li{width:94%}}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1iYXItbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9iYXItbWVudS9vLWJhci1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2Jhci1tZW51L28tYmFyLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFVLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVqRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFFdkQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7SUFFdkMsa0JBQWtCO0lBRWxCLFNBQVM7Q0FDVixDQUFDO0FBYUYsTUFBTSxPQUFPLGlCQUFpQjtJQVk1QixZQUNZLEtBQWlCLEVBQ2pCLFFBQWtCO1FBRGxCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUpwQixpQkFBWSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBS3hELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUks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QUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFbEMsQ0FBQzs7K0dBL0ZVLGlCQUFpQjttR0FBakIsaUJBQWlCLDhKQUZqQixDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQywwQkMxQjFGLDhpQkFZYzs0RkRnQkQsaUJBQWlCO2tCQVg3QixTQUFTOytCQUNFLFlBQVksVUFHZCx5QkFBeUIsaUJBQ2xCLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osb0JBQW9CLEVBQUUsTUFBTTtxQkFDN0IsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBNZW51Um9vdEl0ZW0gfSBmcm9tICcuLi8uLi90eXBlcy9tZW51LXJvb3QtaXRlbS50eXBlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Jhck1lbnVCYXNlIH0gZnJvbSAnLi9vLWJhci1tZW51LWJhc2UuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19CQVJfTUVOVSA9IFtcbiAgLy8gdGl0bGUgW3N0cmluZ106IG1lbnUgdGl0bGUuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnbWVudVRpdGxlOiB0aXRsZScsXG4gIC8vIHRvb2x0aXAgW3N0cmluZ106IG1lbnUgdG9vbHRpcC4gRGVmYXVsdDogJ3RpdGxlJyB2YWx1ZS5cbiAgJ3Rvb2x0aXAnLFxuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1iYXItbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWJhci1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1iYXItbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fQkFSX01FTlUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tYmFyLW1lbnVdJzogJ3RydWUnXG4gIH0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogT0Jhck1lbnVCYXNlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPQmFyTWVudUNvbXBvbmVudCkgfV0sXG59KVxuZXhwb3J0IGNsYXNzIE9CYXJNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2U7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcbiAgcHJpdmF0ZSBhcHBNZW51U2VydmljZTogQXBwTWVudVNlcnZpY2U7XG4gIHByaXZhdGUgbWVudVJvb3RzOiBNZW51Um9vdEl0ZW1bXTtcblxuICBwcm90ZWN0ZWQgX21lbnVUaXRsZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3Rvb2x0aXA6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9pZDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmlkID0gJ21fJyArIFN0cmluZygobmV3IERhdGUoKSkuZ2V0VGltZSgpICsgVXRpbC5yYW5kb21OdW1iZXIoKS50b1N0cmluZygpKTtcbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25zU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMuYXBwTWVudVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChBcHBNZW51U2VydmljZSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuYXBwTWVudVNlcnZpY2Uub25QZXJtaXNzaW9uTWVudUNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaE1lbnVSb290cygpKSk7XG4gICAgdGhpcy5tZW51Um9vdHMgPSB0aGlzLmFwcE1lbnVTZXJ2aWNlLmdldE1lbnVSb290cygpO1xuICB9XG5cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLnRvb2x0aXApIHtcbiAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMubWVudVRpdGxlO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uub25MYW5ndWFnZUNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRET01UaXRsZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldERPTVRpdGxlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RE9NVGl0bGUoKSB7XG4gICAgY29uc3QgdG9vbHRpcCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy50b29sdGlwKTtcbiAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsIHRvb2x0aXApO1xuICB9XG5cbiAgY29sbGFwc2VBbGwoKSB7XG4gICAgY29uc3QgaW5wdXRzID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0Jyk7XG4gICAgaWYgKGlucHV0cykge1xuICAgICAgaW5wdXRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGZha2VMaXMgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZha2UtbGktaG92ZXInKTtcbiAgICBpZiAoZmFrZUxpcykge1xuICAgICAgZmFrZUxpcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Zha2UtbGktaG92ZXInKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFBlcm1pc3Npb25zU2VydmljZSgpOiBQZXJtaXNzaW9uc1NlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zU2VydmljZTtcbiAgfVxuXG4gIGdldCBtZW51VGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudVRpdGxlO1xuICB9XG5cbiAgc2V0IG1lbnVUaXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX21lbnVUaXRsZSA9IHZhbDtcbiAgfVxuXG4gIGdldCB0b29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Rvb2x0aXA7XG4gIH1cblxuICBzZXQgdG9vbHRpcCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX3Rvb2x0aXAgPSB2YWw7XG4gIH1cblxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBzZXQgaWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pZCA9IHZhbDtcbiAgfVxuXG4gIGdldCBtZW51SXRlbXMoKTogTWVudVJvb3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLm1lbnVSb290cztcbiAgfVxuXG4gIHJlZnJlc2hNZW51Um9vdHMoKTogdm9pZCB7XG4gICAgdGhpcy5tZW51Um9vdHMgPSBbLi4udGhpcy5hcHBNZW51U2VydmljZS5nZXRNZW51Um9vdHMoKV07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gIH1cbn1cblxuIiwiPG1hdC10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPlxuICA8bmF2PlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC0yNCBtZW51LWljb24gdG9nZ2xlXCIgKGNsaWNrKT1cImlucHV0LmNoZWNrZWQgPSAhaW5wdXQuY2hlY2tlZFwiIHN2Z0ljb249XCJvbnRpbWl6ZTptZW51XCI+PC9tYXQtaWNvbj5cbiAgICA8bGFiZWwgW2F0dHIuZm9yXT1cImlkXCIgY2xhc3M9XCJ0b2dnbGUgdGl0bGUtbGFiZWxcIj57eyBtZW51VGl0bGUgfCBvVHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8aW5wdXQgI2lucHV0IFthdHRyLmlkXT1cImlkXCIgdHlwZT1cImNoZWNrYm94XCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwiZmFrZS11bCBtYXQtcHJpbWFyeSBtZW51XCI+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICA8by1iYXItbWVudS1uZXN0ZWQgW2l0ZW1zXT1cIm1lbnVJdGVtc1wiPjwvby1iYXItbWVudS1uZXN0ZWQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9uYXY+XG48L21hdC10b29sYmFyPiJdfQ==