UNPKG

ngx-dynamic-dashboard

Version:
125 lines 21.4 kB
import { Component, Input, ViewChild } from '@angular/core'; import { ConfigurationService } from '../services/configuration.service'; import { MenuEventService } from './menu-service'; import { environment } from '../../environments/environment'; /**a * Menu component * */ export class MenuComponent { constructor(_configurationService, _menuEventService) { this._configurationService = _configurationService; this._menuEventService = _menuEventService; this.host = window.location.host; this.dashboardList = []; this.selectedBoard = ''; this.placeHolderText = 'Ask the board to do something!'; this.searchList = []; this.show = false; this.typeAheadIsInMenu = true; this.layoutId = 0; this._menuEventService.unSubscribeAll(); this.setupEventListeners(); this.env = environment; } setupEventListeners() { let gridEventSubscription = this._menuEventService.listenForGridEvents().subscribe((event) => { const edata = event['data']; switch (event['name']) { case 'boardUpdateEvent': this.updateDashboardMenu(edata); break; } }); this._menuEventService.addSubscriber(gridEventSubscription); } ngOnInit() { this.updateDashboardMenu(''); } ngAfterViewInit() { this.stickyMenu = jQuery(this.stickyMenuRef.nativeElement); this.stickyMenu.sticky(); } emitBoardChangeLayoutEvent(event) { this._menuEventService.raiseMenuEvent({ name: 'boardChangeLayoutEvent', data: event }); } emitBoardSelectEvent(event) { this.boardSelect(event); this._menuEventService.raiseMenuEvent({ name: 'boardSelectEvent', data: event }); } emitBoardCreateEvent(event) { this._menuEventService.raiseMenuEvent({ name: 'boardCreateEvent', data: event }); this.updateDashboardMenu(event); } emitBoardEditEvent(event) { this._menuEventService.raiseMenuEvent({ name: 'boardEditEvent', data: event }); } emitBoardDeleteEvent(event) { this._menuEventService.raiseMenuEvent({ name: 'boardDeleteEvent', data: event }); this.updateDashboardMenu(''); } emitBoardAddGadgetEvent(event) { this._menuEventService.raiseMenuEvent({ name: 'boardAddGadgetEvent', data: event }); } emitBoardAIAddGadgetEvent(event) { this._menuEventService.raiseMenuEvent({ name: 'boardAIAddGadgetEvent', data: event }); } updateDashboardMenu(selectedBoard) { this._configurationService.getBoards().subscribe(data => { const me = this; if (data && data instanceof Array && data.length) { this.dashboardList.length = 0; // sort boards data.sort((a, b) => a.boardInstanceId - b.boardInstanceId); data.forEach(board => { me.dashboardList.push(board.title); }); if (selectedBoard === '') { this.boardSelect(this.dashboardList[0]); } else { this.boardSelect(selectedBoard); } } }); } boardSelect(selectedBoard) { this.selectedBoard = selectedBoard; } toggleLayoutSideBar() { this.layoutSideBar = jQuery(this.layoutSideBarRef.nativeElement); this.layoutSideBar.sidebar('setting', 'transition', 'overlay'); this.layoutSideBar.sidebar('toggle'); this.layoutId = this._configurationService.currentModel.id; } toggleNotificationSideBar() { this.notificationSideBar = jQuery(this.notificationSideBarRef.nativeElement); this.notificationSideBar.sidebar('setting', 'transition', 'overlay'); this.notificationSideBar.sidebar('toggle'); } toggleAboutSideBar() { this.aboutSideBar = jQuery(this.aboutSideBarRef.nativeElement); this.aboutSideBar.sidebar('setting', 'transition', 'overlay'); this.aboutSideBar.sidebar('toggle'); } } MenuComponent.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: 'dashboard-menu', template: "<div #stickymenu_tag class=\"ui inverted menu sticky\" ng-show=\"show\" style=\"height: 66px !important\">\n\n\n <dashboard-typeahead-input (ArtificialIntelligenceEventEmitter)=\"emitBoardAIAddGadgetEvent($event)\" *ngIf=\"env.menu.aiSearch\" [placeHolderText]=\"placeHolderText\"\n [searchList]=\"searchList\"\n [typeAheadIsInMenu]=\"typeAheadIsInMenu\"\n class=\"item\"\n style=\"width:25%; padding-bottom:0\">\n </dashboard-typeahead-input>\n\n\n <div class=\"ui secondary inverted pointing menu board\">\n <a (click)=\"emitBoardSelectEvent(board)\" *ngFor=\"let board of dashboardList; let i = index\"\n [ngClass]=\"{'active':board == selectedBoard}\"\n class=\"item\">\n {{board}}\n </a>\n </div>\n\n\n <div class=\"right inverted menu\">\n <a (click)=\"toggleNotificationSideBar()\" *ngIf=\"env.menu.notification\"\n class=\"item\">\n <i class=\"large inverted alarm icon\"></i>\n <div class=\"floating ui red label\">\n <span style=\"font-size: 1.2em; font-weight: normal\">4</span>\n </div>\n </a>\n\n\n <a (click)=\"addGadgetModal.showComponentLibraryModal('Add Gadget')\"\n class=\"item\">\n <i class=\"large inverted plus icon\"></i>\n </a>\n\n\n <a (click)=\"toggleLayoutSideBar()\"\n class=\"item\">\n <i class=\"large inverted grid layout icon\"></i>\n </a>\n\n\n <a (click)=\"boardConfigModal.showConfigurationModal('Configuration')\"\n class=\"item\">\n <i class=\"large inverted setting icon\"></i>\n </a>\n\n\n <a (click)=\"toggleAboutSideBar()\"\n class=\"item\">\n <i class=\"large inverted info icon\"></i>\n </a>\n\n </div>\n\n</div>\n<br>\n\n<!-- the modal will emit an event and call the grid component to add the requested cell to the board -->\n<dashboard-add-gadget-modal #addGadgetModal\n (addGadgetEvent)=\"emitBoardAddGadgetEvent($event)\">\n</dashboard-add-gadget-modal>\n\n<dashboard-configuration-modal #boardConfigModal\n (dashboardCreateEvent)=\"emitBoardCreateEvent($event)\"\n (dashboardDeleteEvent)=\"emitBoardDeleteEvent($event)\"\n (dashboardEditEvent)=\"emitBoardEditEvent($event)\"\n [dashboardList]=\"dashboardList\">\n\n\n</dashboard-configuration-modal>\n\n\n<!-- side bar content -->\n<div #notificationSideBar_tag class=\"ui sidebar inverted right vertical menu\">\n <dashboard-notification-modal></dashboard-notification-modal>\n</div>\n\n<!-- side bar content -->\n<div #aboutSideBar_tag class=\"ui sidebar inverted right vertical menu\">\n <dashboard-about-modal></dashboard-about-modal>\n</div>\n\n\n<div #layoutSideBar_tag class=\"ui sidebar inverted right vertical menu\">\n <dashboard-layout-manager-modal (boardLayoutChangeEvent)=\"emitBoardChangeLayoutEvent($event)\"\n [layoutId]=\"layoutId\">\n </dashboard-layout-manager-modal>\n</div>\n\n", styles: [".ui.secondary.pointing.menu .active.item{border-color:#0f0!important;border-width:medium!important;color:#f9f9f9!important}.ui.secondary.pointing.menu .active.item,.ui.secondary.pointing.menu .item{font-family:Roboto,sans-serif!important;font-size:1.2em;font-weight:500!important}.ui.secondary.pointing.menu .item{color:hsla(0,0%,50.2%,.7)!important}.ui.secondary.pointing.menu{border-bottom:none!important}input{font-family:Roboto,sans-serif!important;font-size:1.1em;font-weight:300!important;outline:none!important;padding:5px}.ui.floating.label{margin:0;top:.5em}.ui.menu .item>.floating.label{padding:.3em .6em}.ui.menu{border-radius:0}.ui.inverted.menu{background-color:#1c2b36}.ui.menu .item>i.icon{margin:0}"] },] } ]; MenuComponent.ctorParameters = () => [ { type: ConfigurationService }, { type: MenuEventService } ]; MenuComponent.propDecorators = { show: [{ type: Input }], notificationSideBarRef: [{ type: ViewChild, args: ['notificationSideBar_tag', { static: false },] }], layoutSideBarRef: [{ type: ViewChild, args: ['layoutSideBar_tag', { static: false },] }], aboutSideBarRef: [{ type: ViewChild, args: ['aboutSideBar_tag', { static: false },] }], stickyMenuRef: [{ type: ViewChild, args: ['stickymenu_tag', { static: false },] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2JlbmxpL3dvcmtzcGFjZXMvbmd4LWR5bmFtaWMtZGFzaGJvYXJkLWZyYW1ld29yay9wcm9qZWN0cy9uZ3gtZHluYW1pYy1kYXNoYm9hcmQvc3JjLyIsInNvdXJjZXMiOlsiZGFzaGJvYXJkL21lbnUvbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFPM0Q7OztHQUdHO0FBUUgsTUFBTSxPQUFPLGFBQWE7SUEwQnRCLFlBQW9CLHFCQUEyQyxFQUMzQyxpQkFBbUM7UUFEbkMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQjtRQUMzQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBekJ2RCxTQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDNUIsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsb0JBQWUsR0FBRyxnQ0FBZ0MsQ0FBQztRQUNuRCxlQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUkvQixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBWWIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRXpCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFLVCxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJ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QUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7OztZQXRKSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixtdUdBQTBCOzthQUc3Qjs7O1lBbkJPLG9CQUFvQjtZQUNwQixnQkFBZ0I7OzttQkE0Qm5CLEtBQUs7cUNBR0wsU0FBUyxTQUFDLHlCQUF5QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQzsrQkFDcEQsU0FBUyxTQUFDLG1CQUFtQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQzs4QkFDOUMsU0FBUyxTQUFDLGtCQUFrQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQzs0QkFDN0MsU0FBUyxTQUFDLGdCQUFnQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7TWVudUV2ZW50U2VydmljZX0gZnJvbSAnLi9tZW51LXNlcnZpY2UnO1xuaW1wb3J0IHtlbnZpcm9ubWVudH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7SUV2ZW50fSBmcm9tICcuL0lFdmVudCc7XG5cblxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBhbnk7XG5cblxuLyoqYVxuICogTWVudSBjb21wb25lbnRcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gICAgc2VsZWN0b3I6ICdkYXNoYm9hcmQtbWVudScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3ZpZXcuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzLmNzcyddLFxuXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gICAgaG9zdCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xuICAgIGRhc2hib2FyZExpc3Q6IGFueVtdID0gW107XG4gICAgc2VsZWN0ZWRCb2FyZCA9ICcnO1xuICAgIHBsYWNlSG9sZGVyVGV4dCA9ICdBc2sgdGhlIGJvYXJkIHRvIGRvIHNvbWV0aGluZyEnO1xuICAgIHNlYXJjaExpc3Q6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBlbnY6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2hvdyA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZCgnbm90aWZpY2F0aW9uU2lkZUJhcl90YWcnLCB7c3RhdGljOiBmYWxzZX0pIG5vdGlmaWNhdGlvblNpZGVCYXJSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnbGF5b3V0U2lkZUJhcl90YWcnLCB7c3RhdGljOiBmYWxzZX0pIGxheW91dFNpZGVCYXJSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnYWJvdXRTaWRlQmFyX3RhZycsIHtzdGF0aWM6IGZhbHNlfSkgYWJvdXRTaWRlQmFyUmVmOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3N0aWNreW1lbnVfdGFnJywge3N0YXRpYzogZmFsc2V9KSBzdGlja3lNZW51UmVmOiBFbGVtZW50UmVmO1xuXG4gICAgbm90aWZpY2F0aW9uU2lkZUJhcjogYW55O1xuICAgIGxheW91dFNpZGVCYXI6IGFueTtcbiAgICBhYm91dFNpZGVCYXI6IGFueTtcbiAgICBzdGlja3lNZW51OiBhbnk7XG5cbiAgICB0eXBlQWhlYWRJc0luTWVudSA9IHRydWU7XG5cbiAgICBsYXlvdXRJZCA9IDA7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbWVudUV2ZW50U2VydmljZTogTWVudUV2ZW50U2VydmljZSkge1xuXG4gICAgICAgIHRoaXMuX21lbnVFdmVudFNlcnZpY2UudW5TdWJzY3JpYmVBbGwoKTtcblxuICAgICAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgdGhpcy5lbnYgPSBlbnZpcm9ubWVudDtcbiAgICB9XG5cbiAgICBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgICBsZXQgZ3JpZEV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5fbWVudUV2ZW50U2VydmljZS5saXN0ZW5Gb3JHcmlkRXZlbnRzKCkuc3Vic2NyaWJlKChldmVudDogSUV2ZW50KSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGVkYXRhID0gZXZlbnRbJ2RhdGEnXTtcblxuICAgICAgICAgICAgc3dpdGNoIChldmVudFsnbmFtZSddKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYm9hcmRVcGRhdGVFdmVudCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkTWVudShlZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX21lbnVFdmVudFNlcnZpY2UuYWRkU3Vic2NyaWJlcihncmlkRXZlbnRTdWJzY3JpcHRpb24pO1xuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkTWVudSgnJyk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnN0aWNreU1lbnUgPSBqUXVlcnkodGhpcy5zdGlja3lNZW51UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnN0aWNreU1lbnUuc3RpY2t5KCk7XG4gICAgfVxuXG4gICAgZW1pdEJvYXJkQ2hhbmdlTGF5b3V0RXZlbnQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fbWVudUV2ZW50U2VydmljZS5yYWlzZU1lbnVFdmVudCh7bmFtZTogJ2JvYXJkQ2hhbmdlTGF5b3V0RXZlbnQnLCBkYXRhOiBldmVudH0pO1xuICAgIH1cblxuICAgIGVtaXRCb2FyZFNlbGVjdEV2ZW50KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuYm9hcmRTZWxlY3QoZXZlbnQpO1xuICAgICAgICB0aGlzLl9tZW51RXZlbnRTZXJ2aWNlLnJhaXNlTWVudUV2ZW50KHtuYW1lOiAnYm9hcmRTZWxlY3RFdmVudCcsIGRhdGE6IGV2ZW50fSk7XG4gICAgfVxuXG4gICAgZW1pdEJvYXJkQ3JlYXRlRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fbWVudUV2ZW50U2VydmljZS5yYWlzZU1lbnVFdmVudCh7bmFtZTogJ2JvYXJkQ3JlYXRlRXZlbnQnLCBkYXRhOiBldmVudH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZE1lbnUoZXZlbnQpO1xuICAgIH1cblxuICAgIGVtaXRCb2FyZEVkaXRFdmVudChldmVudCkge1xuICAgICAgICB0aGlzLl9tZW51RXZlbnRTZXJ2aWNlLnJhaXNlTWVudUV2ZW50KHtuYW1lOiAnYm9hcmRFZGl0RXZlbnQnLCBkYXRhOiBldmVudH0pO1xuICAgIH1cblxuICAgIGVtaXRCb2FyZERlbGV0ZUV2ZW50KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX21lbnVFdmVudFNlcnZpY2UucmFpc2VNZW51RXZlbnQoe25hbWU6ICdib2FyZERlbGV0ZUV2ZW50JywgZGF0YTogZXZlbnR9KTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRNZW51KCcnKTtcbiAgICB9XG5cbiAgICBlbWl0Qm9hcmRBZGRHYWRnZXRFdmVudChldmVudCkge1xuICAgICAgICB0aGlzLl9tZW51RXZlbnRTZXJ2aWNlLnJhaXNlTWVudUV2ZW50KHtuYW1lOiAnYm9hcmRBZGRHYWRnZXRFdmVudCcsIGRhdGE6IGV2ZW50fSk7XG4gICAgfVxuXG4gICAgZW1pdEJvYXJkQUlBZGRHYWRnZXRFdmVudChldmVudCkge1xuICAgICAgICB0aGlzLl9tZW51RXZlbnRTZXJ2aWNlLnJhaXNlTWVudUV2ZW50KHtuYW1lOiAnYm9hcmRBSUFkZEdhZGdldEV2ZW50JywgZGF0YTogZXZlbnR9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVEYXNoYm9hcmRNZW51KHNlbGVjdGVkQm9hcmQ6IHN0cmluZykge1xuXG4gICAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEJvYXJkcygpLnN1YnNjcmliZShkYXRhID0+IHtcblxuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRMaXN0Lmxlbmd0aCA9IDA7XG5cblxuICAgICAgICAgICAgICAgIC8vIHNvcnQgYm9hcmRzXG4gICAgICAgICAgICAgICAgZGF0YS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5ib2FyZEluc3RhbmNlSWQgLSBiLmJvYXJkSW5zdGFuY2VJZCk7XG5cbiAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goYm9hcmQgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIG1lLmRhc2hib2FyZExpc3QucHVzaChib2FyZC50aXRsZSk7XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEJvYXJkID09PSAnJykge1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRTZWxlY3QodGhpcy5kYXNoYm9hcmRMaXN0WzBdKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFNlbGVjdChzZWxlY3RlZEJvYXJkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGJvYXJkU2VsZWN0KHNlbGVjdGVkQm9hcmQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQm9hcmQgPSBzZWxlY3RlZEJvYXJkO1xuICAgIH1cblxuICAgIHRvZ2dsZUxheW91dFNpZGVCYXIoKSB7XG4gICAgICAgIHRoaXMubGF5b3V0U2lkZUJhciA9IGpRdWVyeSh0aGlzLmxheW91dFNpZGVCYXJSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMubGF5b3V0U2lkZUJhci5zaWRlYmFyKCdzZXR0aW5nJywgJ3RyYW5zaXRpb24nLCAnb3ZlcmxheScpO1xuICAgICAgICB0aGlzLmxheW91dFNpZGVCYXIuc2lkZWJhcigndG9nZ2xlJyk7XG4gICAgICAgIHRoaXMubGF5b3V0SWQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50TW9kZWwuaWQ7XG4gICAgfVxuXG4gICAgdG9nZ2xlTm90aWZpY2F0aW9uU2lkZUJhcigpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TaWRlQmFyID0galF1ZXJ5KHRoaXMubm90aWZpY2F0aW9uU2lkZUJhclJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TaWRlQmFyLnNpZGViYXIoJ3NldHRpbmcnLCAndHJhbnNpdGlvbicsICdvdmVybGF5Jyk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2lkZUJhci5zaWRlYmFyKCd0b2dnbGUnKTtcbiAgICB9XG5cbiAgICB0b2dnbGVBYm91dFNpZGVCYXIoKSB7XG4gICAgICAgIHRoaXMuYWJvdXRTaWRlQmFyID0galF1ZXJ5KHRoaXMuYWJvdXRTaWRlQmFyUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLmFib3V0U2lkZUJhci5zaWRlYmFyKCdzZXR0aW5nJywgJ3RyYW5zaXRpb24nLCAnb3ZlcmxheScpO1xuICAgICAgICB0aGlzLmFib3V0U2lkZUJhci5zaWRlYmFyKCd0b2dnbGUnKTtcbiAgICB9XG59XG4iXX0=