UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

316 lines (315 loc) 27.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Component, Input, ElementRef } from '@angular/core'; import { ActionModelMenu } from '../model/ActionModelMenu'; const /** @type {?} */ TYPE_NAME = "phx-action-menu-bar"; export class ActionMenuBar { /** * @param {?} elementRef */ constructor(elementRef) { this.elementRef = elementRef; this.isShowMoreMenu = false; this.moreActionModels = []; this.activeActionModels = []; this.isRendering = false; let /** @type {?} */ showFunction = () => { return true; }; let /** @type {?} */ enableFunction = () => { return true; }; // let actionPerformedHandler: Function = () => { // console.log("MORE"); // }; this.moreModel = new ActionModelMenu(null, "More", "other", showFunction, enableFunction, null, this.moreActionModels); } /** * @return {?} */ ngOnInit() { this.init(); this.reload(); } /** * @return {?} */ ngOnDestroy() { if (this.contextMenu != null && typeof this.contextMenu !== 'undefined') { this.contextMenu.setContext(null); } } /** * @return {?} */ init() { if (this.contextMenu != null && typeof this.contextMenu !== 'undefined') { this.contextMenu.setContext(this); } if (this.menuFactory !== null && typeof this.menuFactory !== 'undefined') { this.menuModel = this.menuFactory.createMenuModel(this); } /* this.activeActionModels = []; if (this.models != null && typeof this.models !== 'undefined') { for(let item of this.models){ this.activeActionModels.push(item); } } */ } /** * @return {?} */ reRenderActionMenuBar() { if (this.maxWidth !== null && typeof this.maxWidth !== 'undefined') { let /** @type {?} */ tempMap = {}; let /** @type {?} */ allWidth = 0; $(this.elementRef.nativeElement).find(".phx-action-menu-bar >.action").each((index, value) => { let /** @type {?} */ width = $(value).width(); allWidth += width; let /** @type {?} */ indexString = index + ""; tempMap[indexString] = { width: width }; }); // remove from actions this.moreActionModels = []; if (allWidth > this.maxWidth) { let /** @type {?} */ tempArray = []; let /** @type {?} */ currentWidth = 0; for (let /** @type {?} */ i = 0; i < this.activeActionModels.length; i++) { let /** @type {?} */ indexString = i + ""; let /** @type {?} */ model = this.activeActionModels[i]; let /** @type {?} */ width = 0; if (tempMap[indexString] !== null && typeof tempMap[indexString] !== 'undefined') { width = tempMap[indexString].width; currentWidth += width; } if (currentWidth > this.maxWidth) { tempArray.push(model); } } for (let /** @type {?} */ item of tempArray) { let /** @type {?} */ removeIdx = this.activeActionModels.indexOf(item); if (removeIdx > -1) { this.activeActionModels.splice(removeIdx, 1); } this.moreActionModels.push(item); } } if (this.moreModel instanceof ActionModelMenu) { this.moreModel.items = this.moreActionModels; } } else { // clear moreItem this.moreActionModels = []; if (this.moreModel instanceof ActionModelMenu) { this.moreModel.items = this.moreActionModels; } } } /** * @return {?} */ getTopMoreMenu() { let /** @type {?} */ height = $(this.elementRef.nativeElement).find(".action-menu-bar").height(); return height - 10; } /** * @return {?} */ getLeftMoreMenu() { let /** @type {?} */ position = $(this.elementRef.nativeElement).find(".action-menu-bar >.more").position(); let /** @type {?} */ left = 0; if (typeof position !== 'undefined') { left = position.left; } return left; } /** * @param {?} show * @return {?} */ showMoreMenu(show) { this.isShowMoreMenu = show; } /** * @return {?} */ _isRendering() { return this.isRendering; } /** * @param {?} $event * @return {?} */ onMoreBtnClicked($event) { if (this.isShowMoreMenu) { this.showMoreMenu(false); } else { this.showMoreMenu(true); } } /** * @param {?} model * @return {?} */ isShow(model) { if (model.isShow === null) { return false; } if (typeof model.isShow !== 'function') { return false; } return model.isShow(this); } /** * @param {?} model * @return {?} */ isEnabled(model) { if (model.isEnabled === null) { return false; } if (typeof model.isEnabled !== 'function') { return false; } return model.isEnabled(this); } /** * @return {?} */ isShowMore() { return this.moreActionModels.length > 0 ? true : false; } /** * @return {?} */ reload() { this.activeActionModels = []; if (this.models != null && typeof this.models !== 'undefined') { for (let /** @type {?} */ item of this.models) { this.activeActionModels.push(item); } } if (this.delayTimer !== null && typeof this.delayTimer !== 'undefined') { clearTimeout(this.delayTimer); this.delayTimer = null; } this.isRendering = true; this.delayTimer = setTimeout(() => { this.reRenderActionMenuBar(); this.isRendering = false; }, 1); } /** * @return {?} */ getContextMenu() { return this.contextMenu; } /** * @param {?} menu * @return {?} */ setContextMenu(menu) { this.contextMenu = menu; } /** * @return {?} */ getMenuModelFactory() { return this.menuFactory; } /** * @param {?} menuFactory * @return {?} */ setMenuModelFactory(menuFactory) { this.menuFactory = menuFactory; } /** * @param {?} maxWidth * @return {?} */ setMaxWidth(maxWidth) { this.maxWidth = maxWidth; this.reload(); } /** * @return {?} */ getMoreModel() { return this.moreModel; } /** * @return {?} */ getActiveActionModels() { return this.activeActionModels; } } ActionMenuBar.TYPE_NAME = TYPE_NAME; ActionMenuBar.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-action-menu-bar" [class.rendering]="_isRendering()"> <div *ngFor="let action of getActiveActionModels()" class="action"> <phx-action-btn [model]="action" *ngIf="isShow(action)"></phx-action-btn> </div> <div class="more"> <phx-action-btn [model]="getMoreModel()" *ngIf="isShowMore()" (click)="onMoreBtnClicked($event)"></phx-action-btn> </div> </div> ` },] }, ]; /** @nocollapse */ ActionMenuBar.ctorParameters = () => [ { type: ElementRef, }, ]; ActionMenuBar.propDecorators = { "menuFactory": [{ type: Input },], "models": [{ type: Input },], "maxWidth": [{ type: Input },], }; function ActionMenuBar_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ActionMenuBar.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ActionMenuBar.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ActionMenuBar.propDecorators; /** @type {?} */ ActionMenuBar.TYPE_NAME; /** @type {?} */ ActionMenuBar.prototype.menuFactory; /** @type {?} */ ActionMenuBar.prototype.models; /** @type {?} */ ActionMenuBar.prototype.maxWidth; /** @type {?} */ ActionMenuBar.prototype.activeActionModels; /** @type {?} */ ActionMenuBar.prototype.moreActionModels; /** @type {?} */ ActionMenuBar.prototype.contextMenu; /** @type {?} */ ActionMenuBar.prototype.menuModel; /** @type {?} */ ActionMenuBar.prototype.moreModel; /** @type {?} */ ActionMenuBar.prototype.elementRef; /** @type {?} */ ActionMenuBar.prototype.delayTimer; /** @type {?} */ ActionMenuBar.prototype.isRendering; /** @type {?} */ ActionMenuBar.prototype.isShowMoreMenu; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aW9uTWVudUJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL0FjdGlvbk1lbnVCYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUTNELHVCQUFNLFNBQVMsR0FBVyxxQkFBcUIsQ0FBQztBQWVoRCxNQUFNOzs7O0lBb0JKLFlBQVksVUFBc0I7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLHFCQUFJLFlBQVksR0FBYSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxxQkFBSSxjQUFjLEdBQWEsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Ozs7UUFLdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUN4SDs7OztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7O0lBR1QsV0FBVztRQUNoQixFQUFFLENBQUMsQ0FB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TSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Ozs7OztJQUduQixtQkFBbUIsQ0FBQyxXQUE4QjtRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7Ozs7O0lBRzFCLFdBQVcsQ0FBQyxRQUFnQjtRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7O0lBR1QsWUFBWTtRQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzs7Ozs7SUFHakIscUJBQXFCO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7OzswQkFsT1UsU0FBUzs7WUFmckQsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDbkIsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLFFBQVEsRUFBRTs7Ozs7Ozs7Q0FRWDthQUNBOzs7O1lBeEJrQyxVQUFVOzs7NEJBNkIxQyxLQUFLO3VCQUVMLEtBQUs7eUJBRUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsJztcbmltcG9ydCB7IEFjdGlvbk1vZGVsTWVudSB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsTWVudSc7XG5pbXBvcnQgeyBNZW51TW9kZWwgfSBmcm9tICcuLi9tb2RlbC9NZW51TW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICcuLi9Db250ZXh0TWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUNvbnRleHQgfSBmcm9tICcuLi9JQ29udGV4dCc7XG5pbXBvcnQgeyBJTWVudU1vZGVsRmFjdG9yeSB9IGZyb20gJy4uL0lNZW51TW9kZWxGYWN0b3J5JztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWFjdGlvbi1tZW51LWJhclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LWFjdGlvbi1tZW51LWJhclwiIFtjbGFzcy5yZW5kZXJpbmddPVwiX2lzUmVuZGVyaW5nKClcIj5cblx0PGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGdldEFjdGl2ZUFjdGlvbk1vZGVscygpXCIgY2xhc3M9XCJhY3Rpb25cIj5cblx0XHQ8cGh4LWFjdGlvbi1idG4gW21vZGVsXT1cImFjdGlvblwiICpuZ0lmPVwiaXNTaG93KGFjdGlvbilcIj48L3BoeC1hY3Rpb24tYnRuPlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIm1vcmVcIj5cblx0XHQ8cGh4LWFjdGlvbi1idG4gW21vZGVsXT1cImdldE1vcmVNb2RlbCgpXCIgKm5nSWY9XCJpc1Nob3dNb3JlKClcIiAoY2xpY2spPVwib25Nb3JlQnRuQ2xpY2tlZCgkZXZlbnQpXCI+PC9waHgtYWN0aW9uLWJ0bj5cblx0PC9kaXY+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uTWVudUJhciBpbXBsZW1lbnRzIE9uSW5pdCwgSUNvbnRleHQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIG1lbnVGYWN0b3J5OiBJTWVudU1vZGVsRmFjdG9yeTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBtb2RlbHM6IEFjdGlvbk1vZGVsW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbWF4V2lkdGg6IG51bWJlcjsgLy8gYXMgcGl4ZWxcbiAgcHJpdmF0ZSBhY3RpdmVBY3Rpb25Nb2RlbHM6IEFjdGlvbk1vZGVsW107XG4gIHByaXZhdGUgbW9yZUFjdGlvbk1vZGVsczogQWN0aW9uTW9kZWxbXTtcbiAgcHJpdmF0ZSBjb250ZXh0TWVudTogQ29udGV4dE1lbnU7XG4gIHByaXZhdGUgbWVudU1vZGVsOiBNZW51TW9kZWw7XG4gIHByaXZhdGUgbW9yZU1vZGVsOiBBY3Rpb25Nb2RlbDtcbiAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGRlbGF5VGltZXI6IGFueTtcbiAgcHJpdmF0ZSBpc1JlbmRlcmluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBpc1Nob3dNb3JlTWVudTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLmlzU2hvd01vcmVNZW51ID0gZmFsc2U7XG5cbiAgICB0aGlzLm1vcmVBY3Rpb25Nb2RlbHMgPSBbXTtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgIHRoaXMuaXNSZW5kZXJpbmcgPSBmYWxzZTtcblxuICAgIGxldCBzaG93RnVuY3Rpb246IEZ1bmN0aW9uID0gKCkgPT4geyByZXR1cm4gdHJ1ZTsgfTtcbiAgICBsZXQgZW5hYmxlRnVuY3Rpb246IEZ1bmN0aW9uID0gKCkgPT4geyByZXR1cm4gdHJ1ZTsgfTtcbiAgICAvLyAgICAgICAgbGV0IGFjdGlvblBlcmZvcm1lZEhhbmRsZXI6IEZ1bmN0aW9uID0gKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgY29uc29sZS5sb2coXCJNT1JFXCIpO1xuICAgIC8vICAgICAgICB9O1xuXG4gICAgdGhpcy5tb3JlTW9kZWwgPSBuZXcgQWN0aW9uTW9kZWxNZW51KG51bGwsIFwiTW9yZVwiLCBcIm90aGVyXCIsIHNob3dGdW5jdGlvbiwgZW5hYmxlRnVuY3Rpb24sIG51bGwsIHRoaXMubW9yZUFjdGlvbk1vZGVscyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0TWVudSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbnRleHRNZW51ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5jb250ZXh0TWVudS5zZXRDb250ZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRleHRNZW51ICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuY29udGV4dE1lbnUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmNvbnRleHRNZW51LnNldENvbnRleHQodGhpcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1lbnVGYWN0b3J5ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1lbnVGYWN0b3J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5tZW51TW9kZWwgPSB0aGlzLm1lbnVGYWN0b3J5LmNyZWF0ZU1lbnVNb2RlbCh0aGlzKTtcbiAgICB9XG4gICAgLypcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgIGlmICh0aGlzLm1vZGVscyAhPSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVscyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZm9yKGxldCBpdGVtIG9mIHRoaXMubW9kZWxzKXtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKi9cbiAgfVxuXG4gIHByaXZhdGUgcmVSZW5kZXJBY3Rpb25NZW51QmFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1heFdpZHRoICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1heFdpZHRoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHRlbXBNYXA6IGFueSA9IHt9O1xuICAgICAgbGV0IGFsbFdpZHRoOiBudW1iZXIgPSAwO1xuXG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLnBoeC1hY3Rpb24tbWVudS1iYXIgPi5hY3Rpb25cIikuZWFjaCgoaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBsZXQgd2lkdGg6IG51bWJlciA9ICQodmFsdWUpLndpZHRoKCk7XG5cbiAgICAgICAgYWxsV2lkdGggKz0gd2lkdGg7XG5cbiAgICAgICAgbGV0IGluZGV4U3RyaW5nOiBzdHJpbmcgPSBpbmRleCArIFwiXCI7XG4gICAgICAgIHRlbXBNYXBbaW5kZXhTdHJpbmddID0ge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgICB9O1xuXG4gICAgICB9KTtcblxuICAgICAgLy8gcmVtb3ZlIGZyb20gYWN0aW9uc1xuICAgICAgdGhpcy5tb3JlQWN0aW9uTW9kZWxzID0gW107XG4gICAgICBpZiAoYWxsV2lkdGggPiB0aGlzLm1heFdpZHRoKSB7XG4gICAgICAgIGxldCB0ZW1wQXJyYXk6IGFueVtdID0gW107XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGg6IG51bWJlciA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsZXQgaW5kZXhTdHJpbmc6IHN0cmluZyA9IGkgKyBcIlwiO1xuICAgICAgICAgIGxldCBtb2RlbDogYW55ID0gdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHNbaV07XG4gICAgICAgICAgbGV0IHdpZHRoOiBudW1iZXIgPSAwO1xuICAgICAgICAgIGlmICh0ZW1wTWFwW2luZGV4U3RyaW5nXSAhPT0gbnVsbCAmJiB0eXBlb2YgdGVtcE1hcFtpbmRleFN0cmluZ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aWR0aCA9IHRlbXBNYXBbaW5kZXhTdHJpbmddLndpZHRoXG5cbiAgICAgICAgICAgIGN1cnJlbnRXaWR0aCArPSB3aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IHRoaXMubWF4V2lkdGgpIHtcbiAgICAgICAgICAgIHRlbXBBcnJheS5wdXNoKG1vZGVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRlbXBBcnJheSkge1xuICAgICAgICAgIGxldCByZW1vdmVJZHggPSB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAgIGlmIChyZW1vdmVJZHggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMuc3BsaWNlKHJlbW92ZUlkeCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tb3JlQWN0aW9uTW9kZWxzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubW9yZU1vZGVsIGluc3RhbmNlb2YgQWN0aW9uTW9kZWxNZW51KSB7XG4gICAgICAgIHRoaXMubW9yZU1vZGVsLml0ZW1zID0gdGhpcy5tb3JlQWN0aW9uTW9kZWxzO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsZWFyIG1vcmVJdGVtXG4gICAgICB0aGlzLm1vcmVBY3Rpb25Nb2RlbHMgPSBbXTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMubW9yZU1vZGVsIGluc3RhbmNlb2YgQWN0aW9uTW9kZWxNZW51KSB7XG4gICAgICAgIHRoaXMubW9yZU1vZGVsLml0ZW1zID0gdGhpcy5tb3JlQWN0aW9uTW9kZWxzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9wTW9yZU1lbnUoKTogbnVtYmVyIHtcbiAgICBsZXQgaGVpZ2h0ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5hY3Rpb24tbWVudS1iYXJcIikuaGVpZ2h0KCk7XG5cbiAgICByZXR1cm4gaGVpZ2h0IC0gMTA7XG4gIH1cblxuICBwcml2YXRlIGdldExlZnRNb3JlTWVudSgpOiBudW1iZXIge1xuICAgIGxldCBwb3NpdGlvbiA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuYWN0aW9uLW1lbnUtYmFyID4ubW9yZVwiKS5wb3NpdGlvbigpO1xuICAgIGxldCBsZWZ0ID0gMDtcbiAgICBpZiAodHlwZW9mIHBvc2l0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGVmdCA9IHBvc2l0aW9uLmxlZnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlZnQ7XG4gIH1cblxuICBwcml2YXRlIHNob3dNb3JlTWVudShzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1Nob3dNb3JlTWVudSA9IHNob3c7XG4gIH1cblxuICBwdWJsaWMgX2lzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUmVuZGVyaW5nO1xuICB9XG5cbiAgcHVibGljIG9uTW9yZUJ0bkNsaWNrZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2hvd01vcmVNZW51KSB7XG4gICAgICB0aGlzLnNob3dNb3JlTWVudShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd01vcmVNZW51KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3cobW9kZWw6IEFjdGlvbk1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKG1vZGVsLmlzU2hvdyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1vZGVsLmlzU2hvdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtb2RlbC5pc1Nob3codGhpcyk7XG4gIH1cblxuICBwdWJsaWMgaXNFbmFibGVkKG1vZGVsOiBBY3Rpb25Nb2RlbCk6IGJvb2xlYW4ge1xuICAgIGlmIChtb2RlbC5pc0VuYWJsZWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtb2RlbC5pc0VuYWJsZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWwuaXNFbmFibGVkKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGlzU2hvd01vcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9yZUFjdGlvbk1vZGVscy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgIGlmICh0aGlzLm1vZGVscyAhPSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVscyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZWxheVRpbWVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmRlbGF5VGltZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxheVRpbWVyKTtcbiAgICAgIHRoaXMuZGVsYXlUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5pc1JlbmRlcmluZyA9IHRydWU7XG4gICAgdGhpcy5kZWxheVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlUmVuZGVyQWN0aW9uTWVudUJhcigpO1xuICAgICAgdGhpcy5pc1JlbmRlcmluZyA9IGZhbHNlO1xuICAgIH0sIDEpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRleHRNZW51KCk6IENvbnRleHRNZW51IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0TWVudTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250ZXh0TWVudShtZW51OiBDb250ZXh0TWVudSk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dE1lbnUgPSBtZW51O1xuICB9XG5cbiAgcHVibGljIGdldE1lbnVNb2RlbEZhY3RvcnkoKTogSU1lbnVNb2RlbEZhY3Rvcnkge1xuICAgIHJldHVybiB0aGlzLm1lbnVGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIHNldE1lbnVNb2RlbEZhY3RvcnkobWVudUZhY3Rvcnk6IElNZW51TW9kZWxGYWN0b3J5KTogdm9pZCB7XG4gICAgdGhpcy5tZW51RmFjdG9yeSA9IG1lbnVGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIHNldE1heFdpZHRoKG1heFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHVibGljIGdldE1vcmVNb2RlbCgpOiBBY3Rpb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9yZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZUFjdGlvbk1vZGVscygpOiBBY3Rpb25Nb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHM7XG4gIH1cbn1cbiJdfQ==