@tiposaurio/guido-lib
Version:
200 lines • 22.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/components/menu/menu.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, EventEmitter, Output } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
export class GuiMenuComponent {
/**
* @param {?} router
* @param {?} route
*/
constructor(router, route) {
this.router = router;
this.route = route;
this.showMenu = '';
this.showSubMenu = '';
this.sidebarnavItems = [];
this.selectedItem = new EventEmitter();
this.userData = {
name: '',
email: '',
};
}
/**
* @param {?} d
* @return {?}
*/
set menu(d) {
if (d) {
this.sidebarnavItems = d;
this.openMenuLoad(d);
}
}
// this is for the open close
/**
* @param {?} element
* @return {?}
*/
addExpandClass(element) {
if (element === this.showMenu) {
this.showMenu = '0';
}
else {
this.showMenu = element;
}
}
/**
* @param {?} element
* @return {?}
*/
addActiveClass(element) {
if (element === this.showSubMenu) {
this.showSubMenu = '0';
}
else {
this.showSubMenu = element;
}
}
// End open close
/**
* @return {?}
*/
ngOnInit() {
// this.getListMenu();
// this.getUserData();
// this.getEnterprise();
// this.MenuDataState$ = this.stateService.onMenuState$().subscribe(res => {
// const arr = [];
// arr.push(res); // console.log('res...', res);
// this.showMenu = res.title;
// this.sidebarnavItems = arr;
// });
// this.MenuDataAllState$ = this.stateService.onMenuAllState$().subscribe(response => {
// this.sidebarnavItems = response;
// });
}
/**
* @return {?}
*/
ngOnDestroy() {
this.MenuDataState$.unsubscribe();
this.MenuDataAllState$.unsubscribe();
}
// public getListMenu() {
// this.menuService.getAll$().subscribe(res => {
// this.sidebarnavItems = res.data;
// this.openMenuLoad();
// });
// }
// private getEnterprise() {
// this.enterpriseService.getAll$().subscribe(response => {
// const enterData = response && response.data || {};
// this.authStoreService.setEnterpriseData(enterData);
// })
// }
// public getUserData() {
// this.userData = this.authStoreService.getUserData();
// }
// public logout() {
// this.logoutService.getAll$().subscribe(res => {
// this.authStoreService.clearAll();
// this.router.navigate(['/authentication/login'], {relativeTo: this.route});
// });
// }
// onPathLink(path) {
// if (path) {
// console.log(path, '<<------------');
// this.router.navigate([path], {relativeTo: this.route});
// }
// }
/**
* @private
* @param {?} sidebarnavItems
* @return {?}
*/
openMenuLoad(sidebarnavItems) {
/** @type {?} */
const path = window.location.pathname;
/** @type {?} */
const s_path = path.split('/');
if (s_path[1]) {
if (s_path[2]) {
sidebarnavItems = sidebarnavItems.map((/**
* @param {?} items
* @return {?}
*/
items => {
if (items.path === `${s_path[2]}`) {
this.showMenu = items.title;
}
items.submenu.forEach((/**
* @param {?} subItems
* @return {?}
*/
subItems => {
if (subItems.path === `/${s_path[1]}/${s_path[2]}/${s_path[3]}`) {
this.showSubMenu = subItems.title;
}
return subItems;
}));
return items;
}));
}
}
}
}
GuiMenuComponent.decorators = [
{ type: Component, args: [{
selector: 'gui-menu',
template: "<nav class=\"sidebar-nav\">\r\n <ul id=\"sidebarnav\">\r\n <!-- User Profile-->\r\n <!-- <li *ngIf=\"userData && userData.name\">\r\n <div class=\"user-profile d-flex no-block m-t-20\">\r\n <div class=\"user-pic\">\r\n <img src=\"assets/images/users/1.jpg\" alt=\"users\" class=\"rounded-circle\" width=\"40\" />\r\n </div>\r\n <div class=\"dropdown user-content hide-menu m-l-10\" ngbDropdown placement=\"bottom-right\">\r\n <a ngbDropdownToggle href=\"javascript:void(0)\" class=\"dropdown-toggle\" id=\"Userdd\" role=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\"\r\n aria-expanded=\"false\">\r\n <h5 class=\"m-b-0 user-name font-medium\">{{userData.name}}\r\n <i class=\"fa fa-angle-down\"></i>\r\n </h5>\r\n <span class=\"op-5 user-email\">{{userData.email}}</span>\r\n </a>\r\n <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"Userdd\" ngbDropdownMenu>\r\n <a class=\"dropdown-item\" href=\"javascript:void(0)\">\r\n <i class=\"ti-user m-r-5 m-l-5\"></i> My Profile</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <a class=\"dropdown-item\" href=\"javascript:void(0)\">\r\n <i class=\"ti-settings m-r-5 m-l-5\"></i> Account Setting</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <a class=\"dropdown-item\" (click)=\"logout()\">\r\n <i class=\"fa fa-power-off m-r-5 m-l-5\"></i> Logout</a>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n <li class=\"p-15 m-t-10\">\r\n <a href=\"javascript:void(0)\" class=\"btn btn-block create-btn text-white no-block d-flex align-items-center\">\r\n <i class=\"fa fa-plus-square\"></i>\r\n <span class=\"hide-menu m-l-5\">Create New</span>\r\n </a>\r\n </li> -->\r\n <ng-container *ngIf=\"sidebarnavItems && sidebarnavItems.length\">\r\n <!-- First level menu -->\r\n <li class=\"sidebar-item\" [class.active]=\"showMenu === sidebarnavItem.title\" *ngFor=\"let sidebarnavItem of sidebarnavItems\"\r\n [routerLinkActive]=\"sidebarnavItem.submenu.length != 0 ? '' : 'active'\">\r\n <div class=\"nav-small-cap\" *ngIf=\"sidebarnavItem.extralink === true\">\r\n <i [ngClass]=\"[sidebarnavItem.icon]\"></i><span class=\"hide-menu\">{{sidebarnavItem.title | uppercase}}</span>\r\n </div>\r\n <a class=\"sidebar-link waves-effect waves-dark lines\" [routerLink]=\"sidebarnavItem.class === '' ? [sidebarnavItem.path] : null\"\r\n [ngClass]=\"[sidebarnavItem.class]\" *ngIf=\"!sidebarnavItem.extralink;\" (click)=\"addExpandClass(sidebarnavItem.title)\"\r\n [routerLinkActive]=\"sidebarnavItem.submenu.length != 0 ? '' : 'active'\">\r\n <i [ngClass]=\"[sidebarnavItem.icon]\"></i>\r\n <span class=\"hide-menu\">{{sidebarnavItem.title | uppercase }}</span>\r\n </a>\r\n <!-- Second level menu -->\r\n <ul aria-expanded=\"false\" class=\"collapse first-level\" *ngIf=\"sidebarnavItem.submenu.length > 0\" [ngClass]=\"{'in' : showMenu === sidebarnavItem.title }\">\r\n <li class=\"sidebar-item\" *ngFor=\"let sidebarnavSubItem of sidebarnavItem.submenu\"\r\n [class.active]=\"showSubMenu === sidebarnavSubItem.title\"\r\n [routerLinkActive]=\"sidebarnavSubItem.submenu.length > 0 ? '' : 'active'\">\r\n <!-- [routerLink]=\"sidebarnavSubItem.submenu.length > 0 ? null : [sidebarnavSubItem.path]\" -->\r\n <a class=\"sidebar-link\" (click)=\"selectedItem.emit(sidebarnavSubItem)\"\r\n [routerLinkActive]=\"sidebarnavSubItem.submenu.length > 0 ? '' : 'router-link-active'\"\r\n [ngClass]=\"[sidebarnavSubItem.class]\" *ngIf=\"!sidebarnavSubItem.extralink;\" (click)=\"addActiveClass(sidebarnavSubItem.title)\">\r\n <i [ngClass]=\"[sidebarnavSubItem.icon]\"></i>\r\n <span class=\"hide-menu\">{{sidebarnavSubItem.title}}</span>\r\n </a>\r\n <!-- Third level menu -->\r\n <!-- <ul aria-expanded=\"false\" class=\"collapse Second-level\" *ngIf=\"sidebarnavSubItem.submenu.length > 0\" [ngClass]=\"{'in' : showSubMenu === sidebarnavSubItem.title }\">\r\n <li class=\"sidebar-item\" *ngFor=\"let sidebarnavSubsubItem of sidebarnavSubItem.submenu\" routerLinkActive=\"active\" [ngClass]=\"[sidebarnavSubsubItem.class]\">\r\n <a class=\"sidebar-link\" [routerLink]=\"[sidebarnavSubsubItem.path]\" *ngIf=\"!sidebarnavSubsubItem.extralink;\" [routerLinkActive]=\"sidebarnavSubsubItem.submenu.length > 0 ? '' : 'router-link-active'\">\r\n <i [ngClass]=\"[sidebarnavSubsubItem.icon]\"></i>\r\n <span class=\"hide-menu\">{{sidebarnavSubsubItem.title}}</span>\r\n </a>\r\n </li>\r\n </ul> -->\r\n </li>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n</nav>\r\n",
styles: ["@import url(https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,600,700,800);.left-sidebar{position:absolute;width:250px;height:100%;top:0;z-index:10;padding-top:64px;background:#fff;box-shadow:1px 0 20px rgba(0,0,0,.08);-webkit-transition:.2s ease-in;transition:.2s ease-in}.scroll-sidebar{height:calc(100% - 20px);position:relative}.sidebar-nav ul .sidebar-item{width:250px}.sidebar-nav ul .sidebar-item .sidebar-link{color:#5f6368!important;padding:7px 15px;display:-webkit-box;display:flex;white-space:nowrap;-webkit-box-align:center;align-items:center;line-height:25px;font-weight:700;letter-spacing:.2px}.sidebar-nav ul .sidebar-item .sidebar-link i{font-style:normal;width:35px;line-height:25px;font-size:17px;color:#5f6368!important;display:inline-block;text-align:center}.sidebar-nav ul .sidebar-item .sidebar-link span{margin-left:10px}.sidebar-nav ul .sidebar-item .sidebar-link.active,.sidebar-nav ul .sidebar-item .sidebar-link:hover{opacity:1;background:rgba(0,0,0,.04)}.sidebar-nav ul .sidebar-item.active>.sidebar-link{background:rgba(0,0,0,.04);color:#2962ff!important;opacity:1}.sidebar-nav ul .sidebar-item.active>.sidebar-link i{color:#2962ff!important}.sidebar-nav ul .sidebar-item .first-level{padding:0 0 10px;background-color:#f5f5f5!important}.sidebar-nav ul .sidebar-item .first-level .sidebar-item.active .sidebar-link{opacity:1}.sidebar-nav ul .sidebar-item .first-level .sidebar-item .sidebar-link{padding:7px 15px}.sidebar-nav ul .sidebar-item .first-level .sidebar-item .sidebar-link i{font-size:14px}.nav-small-cap{font-size:12px;padding:7px 15px;white-space:nowrap;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;line-height:30px;color:#fff;opacity:.3;text-transform:uppercase}.nav-small-cap i{line-height:30px;margin:0 5px}.sidebar-nav ul{margin:0;padding:0}.sidebar-nav ul li{list-style:none}.collapse.in{display:block}.sidebar-nav .has-arrow{position:relative}.sidebar-nav .has-arrow::after{position:absolute;content:\"\";width:7px;height:7px;border-width:1px 0 0 1px;border-style:solid;border-color:#fff;margin-left:10px;-webkit-transform:rotate(135deg) translate(0,-50%);transform:rotate(135deg) translate(0,-50%);-webkit-transform-origin:top;transform-origin:top;top:26px;right:15px;-webkit-transition:.3s ease-out;transition:.3s ease-out}.sidebar-nav .has-arrow[aria-expanded=true]::after,.sidebar-nav li.active>.has-arrow::after,.sidebar-nav li>.has-arrow.active::after{-webkit-transform:rotate(-135deg) translate(0,-50%);transform:rotate(-135deg) translate(0,-50%)}.user-profile{padding:15px}.user-profile .user-content,.user-profile .user-email,.user-profile .user-name{color:#fff;white-space:nowrap;text-overflow:ellipsis}.user-profile a:after{display:none}.create-btn{height:40px;background:#343a40}"]
}] }
];
/** @nocollapse */
GuiMenuComponent.ctorParameters = () => [
{ type: Router },
{ type: ActivatedRoute }
];
GuiMenuComponent.propDecorators = {
menu: [{ type: Input }],
selectedItem: [{ type: Output }]
};
if (false) {
/** @type {?} */
GuiMenuComponent.prototype.showMenu;
/** @type {?} */
GuiMenuComponent.prototype.showSubMenu;
/** @type {?} */
GuiMenuComponent.prototype.sidebarnavItems;
/** @type {?} */
GuiMenuComponent.prototype.selectedItem;
/** @type {?} */
GuiMenuComponent.prototype.enterpriseData;
/** @type {?} */
GuiMenuComponent.prototype.userData;
/**
* @type {?}
* @private
*/
GuiMenuComponent.prototype.MenuDataState$;
/**
* @type {?}
* @private
*/
GuiMenuComponent.prototype.MenuDataAllState$;
/** @type {?} */
GuiMenuComponent.prototype.openActivatemenu;
/**
* @type {?}
* @private
*/
GuiMenuComponent.prototype.router;
/**
* @type {?}
* @private
*/
GuiMenuComponent.prototype.route;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGlwb3NhdXJpby9ndWlkby1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9tZW51L21lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUXpELE1BQU0sT0FBTyxnQkFBZ0I7Ozs7O0lBbUMzQixZQUNVLE1BQWMsRUFDZCxLQUFxQjtRQURyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFwQzdCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNWLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBT3pCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdyQyxhQUFRLEdBQVE7WUFDdkIsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7SUEyQkMsQ0FBQzs7Ozs7SUF2Q0YsSUFBYSxJQUFJLENBQUMsQ0FBTTtRQUNwQixJQUFJLENBQUMsRUFBRTtZQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7SUFDTCxDQUFDOzs7Ozs7SUFTSCxjQUFjLENBQUMsT0FBWTtRQUN6QixJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1NBQ3JCO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztTQUN6QjtJQUNILENBQUM7Ozs7O0lBQ0QsY0FBYyxDQUFDLE9BQVk7UUFDekIsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztTQUN4QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7U0FDNUI7SUFDSCxDQUFDOzs7OztJQWVELFFBQVE7UUFDTixzQkFBc0I7UUFDdEIsc0JBQXNCO1FBQ3RCLHdCQUF3QjtRQUN4Qiw0RUFBNEU7UUFDNUUsb0JBQW9CO1FBQ3BCLGtEQUFrRDtRQUNsRCwrQkFBK0I7UUFDL0IsZ0NBQWdDO1FBQ2hDLE1BQU07UUFDTix1RkFBdUY7UUFDdkYscUNBQXFDO1FBQ3JDLE1BQU07SUFDUixDQUFDOzs7O0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTZCTyxZQUFZLENBQUMsZUFBZTs7Y0FDNUIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUTs7Y0FDL0IsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQy9CLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1osSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2IsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHOzs7O2dCQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM1QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO3FCQUM3QjtvQkFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU87Ozs7b0JBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQy9CLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7NEJBQy9ELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQzt5QkFDbkM7d0JBQ0QsT0FBTyxRQUFRLENBQUM7b0JBQ2xCLENBQUMsRUFBQyxDQUFDO29CQUNILE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUMsRUFBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7OztZQXJIRixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLDBnTEFBa0M7O2FBRXJDOzs7O1lBTlEsTUFBTTtZQUFFLGNBQWM7OzttQkFZMUIsS0FBSzsyQkFNTCxNQUFNOzs7O0lBVFAsb0NBQWM7O0lBQ2QsdUNBQWlCOztJQUNqQiwyQ0FBbUM7O0lBT25DLHdDQUE0Qzs7SUFFNUMsMENBQTJCOztJQUMzQixvQ0FHQTs7Ozs7SUFnQkYsMENBQXFDOzs7OztJQUNyQyw2Q0FBd0M7O0lBQ3hDLDRDQUF5Qjs7Ozs7SUFFdkIsa0NBQXNCOzs7OztJQUN0QixpQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdndWktbWVudScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJ21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBzaG93TWVudSA9ICcnO1xyXG4gICAgc2hvd1N1Yk1lbnUgPSAnJztcclxuICAgIHB1YmxpYyBzaWRlYmFybmF2SXRlbXM6IGFueVtdID0gW107XHJcbiAgICBASW5wdXQoKSBzZXQgbWVudShkOiBhbnkpIHtcclxuICAgICAgICBpZiAoZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNpZGViYXJuYXZJdGVtcyA9IGQ7XHJcbiAgICAgICAgICAgIHRoaXMub3Blbk1lbnVMb2FkKGQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBcclxuICAgIHB1YmxpYyBlbnRlcnByaXNlRGF0YTogYW55O1xyXG4gICAgcHVibGljIHVzZXJEYXRhOiBhbnkgPSB7XHJcbiAgICBuYW1lOiAnJyxcclxuICAgIGVtYWlsOiAnJyxcclxuICB9O1xyXG4gIC8vIHRoaXMgaXMgZm9yIHRoZSBvcGVuIGNsb3NlXHJcbiAgYWRkRXhwYW5kQ2xhc3MoZWxlbWVudDogYW55KSB7XHJcbiAgICBpZiAoZWxlbWVudCA9PT0gdGhpcy5zaG93TWVudSkge1xyXG4gICAgICB0aGlzLnNob3dNZW51ID0gJzAnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93TWVudSA9IGVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZEFjdGl2ZUNsYXNzKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgaWYgKGVsZW1lbnQgPT09IHRoaXMuc2hvd1N1Yk1lbnUpIHtcclxuICAgICAgdGhpcy5zaG93U3ViTWVudSA9ICcwJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd1N1Yk1lbnUgPSBlbGVtZW50O1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIE1lbnVEYXRhU3RhdGUkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBNZW51RGF0YUFsbFN0YXRlJDogU3Vic2NyaXB0aW9uO1xyXG4gIG9wZW5BY3RpdmF0ZW1lbnU6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIC8vIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBhdXRoU3RvcmVTZXJ2aWNlOiBBdXRoU3RvcmVTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBsb2dvdXRTZXJ2aWNlOiBMb2dvdXRTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBzdGF0ZVNlcnZpY2U6IFN0YXRlU2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgZW50ZXJwcmlzZVNlcnZpY2U6IEVudGVycHJpc2VTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgLy8gRW5kIG9wZW4gY2xvc2VcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHRoaXMuZ2V0TGlzdE1lbnUoKTtcclxuICAgIC8vIHRoaXMuZ2V0VXNlckRhdGEoKTtcclxuICAgIC8vIHRoaXMuZ2V0RW50ZXJwcmlzZSgpO1xyXG4gICAgLy8gdGhpcy5NZW51RGF0YVN0YXRlJCA9IHRoaXMuc3RhdGVTZXJ2aWNlLm9uTWVudVN0YXRlJCgpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgLy8gICBjb25zdCBhcnIgPSBbXTtcclxuICAgIC8vICAgYXJyLnB1c2gocmVzKTsgLy8gY29uc29sZS5sb2coJ3Jlcy4uLicsIHJlcyk7XHJcbiAgICAvLyAgIHRoaXMuc2hvd01lbnUgPSByZXMudGl0bGU7XHJcbiAgICAvLyAgIHRoaXMuc2lkZWJhcm5hdkl0ZW1zID0gYXJyO1xyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLk1lbnVEYXRhQWxsU3RhdGUkID0gdGhpcy5zdGF0ZVNlcnZpY2Uub25NZW51QWxsU3RhdGUkKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgIC8vICAgdGhpcy5zaWRlYmFybmF2SXRlbXMgPSByZXNwb25zZTtcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuTWVudURhdGFTdGF0ZSQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuTWVudURhdGFBbGxTdGF0ZSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbi8vICAgcHVibGljIGdldExpc3RNZW51KCkge1xyXG4vLyAgICAgdGhpcy5tZW51U2VydmljZS5nZXRBbGwkKCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbi8vICAgICAgIHRoaXMuc2lkZWJhcm5hdkl0ZW1zID0gcmVzLmRhdGE7XHJcbi8vICAgICAgIHRoaXMub3Blbk1lbnVMb2FkKCk7XHJcbi8vICAgICB9KTtcclxuLy8gICB9XHJcbi8vICAgcHJpdmF0ZSBnZXRFbnRlcnByaXNlKCkge1xyXG4vLyAgICAgIHRoaXMuZW50ZXJwcmlzZVNlcnZpY2UuZ2V0QWxsJCgpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbi8vICAgICAgICAgICBjb25zdCBlbnRlckRhdGEgPSByZXNwb25zZSAmJiByZXNwb25zZS5kYXRhIHx8IHt9O1xyXG4vLyAgICAgICAgICAgdGhpcy5hdXRoU3RvcmVTZXJ2aWNlLnNldEVudGVycHJpc2VEYXRhKGVudGVyRGF0YSk7XHJcbi8vICAgICAgIH0pXHJcbi8vICAgfVxyXG4vLyAgIHB1YmxpYyBnZXRVc2VyRGF0YSgpIHtcclxuLy8gICAgIHRoaXMudXNlckRhdGEgPSB0aGlzLmF1dGhTdG9yZVNlcnZpY2UuZ2V0VXNlckRhdGEoKTtcclxuLy8gICB9XHJcblxyXG4vLyAgIHB1YmxpYyBsb2dvdXQoKSB7XHJcbi8vICAgICB0aGlzLmxvZ291dFNlcnZpY2UuZ2V0QWxsJCgpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4vLyAgICAgICB0aGlzLmF1dGhTdG9yZVNlcnZpY2UuY2xlYXJBbGwoKTtcclxuLy8gICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXV0aGVudGljYXRpb24vbG9naW4nXSwge3JlbGF0aXZlVG86IHRoaXMucm91dGV9KTtcclxuLy8gICAgIH0pO1xyXG4vLyAgIH1cclxuICAvLyBvblBhdGhMaW5rKHBhdGgpIHtcclxuICAvLyAgIGlmIChwYXRoKSB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKHBhdGgsICc8PC0tLS0tLS0tLS0tLScpO1xyXG4gIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0sIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG4gIHByaXZhdGUgb3Blbk1lbnVMb2FkKHNpZGViYXJuYXZJdGVtcykge1xyXG4gICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcclxuICAgIGNvbnN0IHNfcGF0aCA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgaWYgKHNfcGF0aFsxXSkge1xyXG4gICAgICBpZiAoc19wYXRoWzJdKSB7XHJcbiAgICAgICAgc2lkZWJhcm5hdkl0ZW1zID0gc2lkZWJhcm5hdkl0ZW1zLm1hcChpdGVtcyA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbXMucGF0aCA9PT0gYCR7c19wYXRoWzJdfWApIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93TWVudSA9IGl0ZW1zLnRpdGxlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbXMuc3VibWVudS5mb3JFYWNoKHN1Ykl0ZW1zID0+IHtcclxuICAgICAgICAgICAgaWYgKHN1Ykl0ZW1zLnBhdGggPT09IGAvJHtzX3BhdGhbMV19LyR7c19wYXRoWzJdfS8ke3NfcGF0aFszXX1gKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93U3ViTWVudSA9IHN1Ykl0ZW1zLnRpdGxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzdWJJdGVtcztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59Il19