UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

419 lines (418 loc) 30.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, ElementRef, ChangeDetectionStrategy } from '@angular/core'; import { ActionModelMenu } from '../../model/ActionModelMenu'; var /** @type {?} */ TYPE_NAME = "phx-action-menu-bar"; var ActionMenuBar = /** @class */ (function () { function ActionMenuBar(elementRef) { this.elementRef = elementRef; this.isShowMoreMenu = false; this.moreActionModels = []; this.activeActionModels = []; this.isRendering = false; var /** @type {?} */ showFunction = function () { return true; }; var /** @type {?} */ enableFunction = function () { return true; }; // let actionPerformedHandler: Function = () => { // console.log("MORE"); // }; this.moreModel = new ActionModelMenu(null, "More", "other", showFunction, enableFunction, null, this.moreActionModels); } /** * @return {?} */ ActionMenuBar.prototype.ngOnInit = /** * @return {?} */ function () { this.init(); this.reload(); }; /** * @return {?} */ ActionMenuBar.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.contextMenu != null && typeof this.contextMenu !== 'undefined') { this.contextMenu.setContext(null); } }; /** * @return {?} */ ActionMenuBar.prototype.init = /** * @return {?} */ function () { 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 {?} */ ActionMenuBar.prototype.reRenderActionMenuBar = /** * @return {?} */ function () { if (this.maxWidth !== null && typeof this.maxWidth !== 'undefined') { var /** @type {?} */ tempMap_1 = {}; var /** @type {?} */ allWidth_1 = 0; $(this.elementRef.nativeElement).find(".phx-action-menu-bar >.action").each(function (index, value) { var /** @type {?} */ width = $(value).width(); allWidth_1 += width; var /** @type {?} */ indexString = index + ""; tempMap_1[indexString] = { width: width }; }); // remove from actions this.moreActionModels = []; if (allWidth_1 > this.maxWidth) { var /** @type {?} */ tempArray = []; var /** @type {?} */ currentWidth = 0; for (var /** @type {?} */ i = 0; i < this.activeActionModels.length; i++) { var /** @type {?} */ indexString = i + ""; var /** @type {?} */ model = this.activeActionModels[i]; var /** @type {?} */ width = 0; if (tempMap_1[indexString] !== null && typeof tempMap_1[indexString] !== 'undefined') { width = tempMap_1[indexString].width; currentWidth += width; } if (currentWidth > this.maxWidth) { tempArray.push(model); } } try { for (var tempArray_1 = tslib_1.__values(tempArray), tempArray_1_1 = tempArray_1.next(); !tempArray_1_1.done; tempArray_1_1 = tempArray_1.next()) { var item = tempArray_1_1.value; var /** @type {?} */ removeIdx = this.activeActionModels.indexOf(item); if (removeIdx > -1) { this.activeActionModels.splice(removeIdx, 1); } this.moreActionModels.push(item); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (tempArray_1_1 && !tempArray_1_1.done && (_a = tempArray_1.return)) _a.call(tempArray_1); } finally { if (e_1) throw e_1.error; } } } 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; } } var e_1, _a; }; /** * @return {?} */ ActionMenuBar.prototype.getTopMoreMenu = /** * @return {?} */ function () { var /** @type {?} */ height = $(this.elementRef.nativeElement).find(".action-menu-bar").height(); return height - 10; }; /** * @return {?} */ ActionMenuBar.prototype.getLeftMoreMenu = /** * @return {?} */ function () { var /** @type {?} */ position = $(this.elementRef.nativeElement).find(".action-menu-bar >.more").position(); var /** @type {?} */ left = 0; if (typeof position !== 'undefined') { left = position.left; } return left; }; /** * @param {?} show * @return {?} */ ActionMenuBar.prototype.showMoreMenu = /** * @param {?} show * @return {?} */ function (show) { this.isShowMoreMenu = show; }; /** * @return {?} */ ActionMenuBar.prototype._isRendering = /** * @return {?} */ function () { return this.isRendering; }; /** * @param {?} $event * @return {?} */ ActionMenuBar.prototype.onMoreBtnClicked = /** * @param {?} $event * @return {?} */ function ($event) { if (this.isShowMoreMenu) { this.showMoreMenu(false); } else { this.showMoreMenu(true); } }; /** * @param {?} model * @return {?} */ ActionMenuBar.prototype.isShow = /** * @param {?} model * @return {?} */ function (model) { if (model.isShow === null) { return false; } if (typeof model.isShow !== 'function') { return false; } return model.isShow(this); }; /** * @param {?} model * @return {?} */ ActionMenuBar.prototype.isEnabled = /** * @param {?} model * @return {?} */ function (model) { if (model.isEnabled === null) { return false; } if (typeof model.isEnabled !== 'function') { return false; } return model.isEnabled(this); }; /** * @return {?} */ ActionMenuBar.prototype.isShowMore = /** * @return {?} */ function () { return this.moreActionModels.length > 0 ? true : false; }; /** * @return {?} */ ActionMenuBar.prototype.reload = /** * @return {?} */ function () { this.activeActionModels = []; if (this.models != null && typeof this.models !== 'undefined') { try { for (var _a = tslib_1.__values(this.models), _b = _a.next(); !_b.done; _b = _a.next()) { var item = _b.value; this.activeActionModels.push(item); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_2) throw e_2.error; } } } // 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); var e_2, _c; }; /** * @return {?} */ ActionMenuBar.prototype.getContextMenu = /** * @return {?} */ function () { return this.contextMenu; }; /** * @param {?} menu * @return {?} */ ActionMenuBar.prototype.setContextMenu = /** * @param {?} menu * @return {?} */ function (menu) { this.contextMenu = menu; }; /** * @return {?} */ ActionMenuBar.prototype.getMenuModelFactory = /** * @return {?} */ function () { return this.menuFactory; }; /** * @param {?} menuFactory * @return {?} */ ActionMenuBar.prototype.setMenuModelFactory = /** * @param {?} menuFactory * @return {?} */ function (menuFactory) { this.menuFactory = menuFactory; }; /** * @param {?} maxWidth * @return {?} */ ActionMenuBar.prototype.setMaxWidth = /** * @param {?} maxWidth * @return {?} */ function (maxWidth) { this.maxWidth = maxWidth; this.reload(); }; /** * @return {?} */ ActionMenuBar.prototype.getMoreModel = /** * @return {?} */ function () { return this.moreModel; }; /** * @return {?} */ ActionMenuBar.prototype.getActiveActionModels = /** * @return {?} */ function () { return this.activeActionModels; }; /** * @return {?} */ ActionMenuBar.prototype.getModels = /** * @return {?} */ function () { return this.models; }; /** * @param {?} models * @return {?} */ ActionMenuBar.prototype.setModels = /** * @param {?} models * @return {?} */ function (models) { this.models = models; this.reload(); }; 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()\">\n\t<div *ngFor=\"let action of getActiveActionModels()\" class=\"action\">\n\t\t<phx-action-btn [model]=\"action\" *ngIf=\"isShow(action)\"></phx-action-btn>\n\t</div>\n\t<div class=\"more\">\n\t\t<phx-action-btn [model]=\"getMoreModel()\" *ngIf=\"isShowMore()\" (click)=\"onMoreBtnClicked($event)\"></phx-action-btn>\n\t</div>\n</div>\n", changeDetection: ChangeDetectionStrategy.Default },] }, ]; /** @nocollapse */ ActionMenuBar.ctorParameters = function () { return [ { type: ElementRef, }, ]; }; ActionMenuBar.propDecorators = { "menuFactory": [{ type: Input },], "models": [{ type: Input },], "maxWidth": [{ type: Input },], }; return ActionMenuBar; }()); export { ActionMenuBar }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aW9uTWVudUJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL2VkaXRvci5pbnRlcm5hbC9BY3Rpb25NZW51QmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFVBQVUsRUFBYSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFROUQscUJBQU0sU0FBUyxHQUFXLHFCQUFxQixDQUFDOztJQW9DOUMsdUJBQVksVUFBc0I7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLHFCQUFJLFlBQVksR0FBYSxjQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BELHFCQUFJLGNBQWMsR0FBYSxjQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDOzs7O1FBS3RELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDeEg7Ozs7SUFFTSxnQ0FBUTs7OztRQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7Ozs7SUFHVCxtQ0FBVzs7OztRQUNoQixFQUFFLENB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Q0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7Ozs7SUFHVCxvQ0FBWTs7OztRQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzs7Ozs7SUFHakIsNkNBQXFCOzs7O1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Ozs7O0lBRzFCLGlDQUFTOzs7O1FBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7OztJQUdkLGlDQUFTOzs7O2NBQUMsTUFBcUI7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOzs4QkE1TzJCLFNBQVM7O2dCQWhCckQsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDbkIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFFBQVEsRUFBRSw0WkFRWDtvQkFDQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsT0FBTztpQkFDakQ7Ozs7Z0JBekJrQyxVQUFVOzs7Z0NBOEIxQyxLQUFLOzJCQUVMLEtBQUs7NkJBRUwsS0FBSzs7d0JBbENSOztTQTBCYSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL0FjdGlvbk1vZGVsJztcbmltcG9ydCB7IEFjdGlvbk1vZGVsTWVudSB9IGZyb20gJy4uLy4uL21vZGVsL0FjdGlvbk1vZGVsTWVudSc7XG5pbXBvcnQgeyBNZW51TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbC9NZW51TW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICcuLi8uLi9Db250ZXh0TWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUNvbnRleHQgfSBmcm9tICcuLi8uLi9JQ29udGV4dCc7XG5pbXBvcnQgeyBJTWVudU1vZGVsRmFjdG9yeSB9IGZyb20gJy4uLy4uL0lNZW51TW9kZWxGYWN0b3J5JztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWFjdGlvbi1tZW51LWJhclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LWFjdGlvbi1tZW51LWJhclwiIFtjbGFzcy5yZW5kZXJpbmddPVwiX2lzUmVuZGVyaW5nKClcIj5cblx0PGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGdldEFjdGl2ZUFjdGlvbk1vZGVscygpXCIgY2xhc3M9XCJhY3Rpb25cIj5cblx0XHQ8cGh4LWFjdGlvbi1idG4gW21vZGVsXT1cImFjdGlvblwiICpuZ0lmPVwiaXNTaG93KGFjdGlvbilcIj48L3BoeC1hY3Rpb24tYnRuPlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIm1vcmVcIj5cblx0XHQ8cGh4LWFjdGlvbi1idG4gW21vZGVsXT1cImdldE1vcmVNb2RlbCgpXCIgKm5nSWY9XCJpc1Nob3dNb3JlKClcIiAoY2xpY2spPVwib25Nb3JlQnRuQ2xpY2tlZCgkZXZlbnQpXCI+PC9waHgtYWN0aW9uLWJ0bj5cblx0PC9kaXY+XG48L2Rpdj5cbmAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdFxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25NZW51QmFyIGltcGxlbWVudHMgT25Jbml0LCBJQ29udGV4dCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbWVudUZhY3Rvcnk6IElNZW51TW9kZWxGYWN0b3J5O1xuICBASW5wdXQoKVxuICBwcml2YXRlIG1vZGVsczogQWN0aW9uTW9kZWxbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBtYXhXaWR0aDogbnVtYmVyOyAvLyBhcyBwaXhlbFxuICBwcml2YXRlIGFjdGl2ZUFjdGlvbk1vZGVsczogQWN0aW9uTW9kZWxbXTtcbiAgcHJpdmF0ZSBtb3JlQWN0aW9uTW9kZWxzOiBBY3Rpb25Nb2RlbFtdO1xuICBwcml2YXRlIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcbiAgcHJpdmF0ZSBtZW51TW9kZWw6IE1lbnVNb2RlbDtcbiAgcHJpdmF0ZSBtb3JlTW9kZWw6IEFjdGlvbk1vZGVsO1xuICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgZGVsYXlUaW1lcjogYW55O1xuICBwcml2YXRlIGlzUmVuZGVyaW5nOiBib29sZWFuO1xuICBwcml2YXRlIGlzU2hvd01vcmVNZW51OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuaXNTaG93TW9yZU1lbnUgPSBmYWxzZTtcblxuICAgIHRoaXMubW9yZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgIHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzID0gW107XG4gICAgdGhpcy5pc1JlbmRlcmluZyA9IGZhbHNlO1xuXG4gICAgbGV0IHNob3dGdW5jdGlvbjogRnVuY3Rpb24gPSAoKSA9PiB7IHJldHVybiB0cnVlOyB9O1xuICAgIGxldCBlbmFibGVGdW5jdGlvbjogRnVuY3Rpb24gPSAoKSA9PiB7IHJldHVybiB0cnVlOyB9O1xuICAgIC8vICAgICAgICBsZXQgYWN0aW9uUGVyZm9ybWVkSGFuZGxlcjogRnVuY3Rpb24gPSAoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk1PUkVcIik7XG4gICAgLy8gICAgICAgIH07XG5cbiAgICB0aGlzLm1vcmVNb2RlbCA9IG5ldyBBY3Rpb25Nb2RlbE1lbnUobnVsbCwgXCJNb3JlXCIsIFwib3RoZXJcIiwgc2hvd0Z1bmN0aW9uLCBlbmFibGVGdW5jdGlvbiwgbnVsbCwgdGhpcy5tb3JlQWN0aW9uTW9kZWxzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmNvbnRleHRNZW51ICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuY29udGV4dE1lbnUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmNvbnRleHRNZW51LnNldENvbnRleHQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnUgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb250ZXh0TWVudSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnUuc2V0Q29udGV4dCh0aGlzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWVudUZhY3RvcnkgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubWVudUZhY3RvcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLm1lbnVNb2RlbCA9IHRoaXMubWVudUZhY3RvcnkuY3JlYXRlTWVudU1vZGVsKHRoaXMpO1xuICAgIH1cbiAgICAvKlxuICAgIHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzID0gW107XG4gICAgaWYgKHRoaXMubW9kZWxzICE9IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWxzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmb3IobGV0IGl0ZW0gb2YgdGhpcy5tb2RlbHMpe1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAqL1xuICB9XG5cbiAgcHVibGljIHJlUmVuZGVyQWN0aW9uTWVudUJhcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXhXaWR0aCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tYXhXaWR0aCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCB0ZW1wTWFwOiBhbnkgPSB7fTtcbiAgICAgIGxldCBhbGxXaWR0aDogbnVtYmVyID0gMDtcblxuICAgICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5waHgtYWN0aW9uLW1lbnUtYmFyID4uYWN0aW9uXCIpLmVhY2goKGluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHdpZHRoOiBudW1iZXIgPSAkKHZhbHVlKS53aWR0aCgpO1xuXG4gICAgICAgIGFsbFdpZHRoICs9IHdpZHRoO1xuXG4gICAgICAgIGxldCBpbmRleFN0cmluZzogc3RyaW5nID0gaW5kZXggKyBcIlwiO1xuICAgICAgICB0ZW1wTWFwW2luZGV4U3RyaW5nXSA9IHtcbiAgICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgICAgfTtcblxuICAgICAgfSk7XG5cbiAgICAgIC8vIHJlbW92ZSBmcm9tIGFjdGlvbnNcbiAgICAgIHRoaXMubW9yZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgICAgaWYgKGFsbFdpZHRoID4gdGhpcy5tYXhXaWR0aCkge1xuICAgICAgICBsZXQgdGVtcEFycmF5OiBhbnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudFdpZHRoOiBudW1iZXIgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGluZGV4U3RyaW5nOiBzdHJpbmcgPSBpICsgXCJcIjtcbiAgICAgICAgICBsZXQgbW9kZWw6IGFueSA9IHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzW2ldO1xuICAgICAgICAgIGxldCB3aWR0aDogbnVtYmVyID0gMDtcbiAgICAgICAgICBpZiAodGVtcE1hcFtpbmRleFN0cmluZ10gIT09IG51bGwgJiYgdHlwZW9mIHRlbXBNYXBbaW5kZXhTdHJpbmddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2lkdGggPSB0ZW1wTWFwW2luZGV4U3RyaW5nXS53aWR0aFxuXG4gICAgICAgICAgICBjdXJyZW50V2lkdGggKz0gd2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50V2lkdGggPiB0aGlzLm1heFdpZHRoKSB7XG4gICAgICAgICAgICB0ZW1wQXJyYXkucHVzaChtb2RlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0ZW1wQXJyYXkpIHtcbiAgICAgICAgICBsZXQgcmVtb3ZlSWR4ID0gdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICBpZiAocmVtb3ZlSWR4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzLnNwbGljZShyZW1vdmVJZHgsIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMubW9yZUFjdGlvbk1vZGVscy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1vcmVNb2RlbCBpbnN0YW5jZW9mIEFjdGlvbk1vZGVsTWVudSkge1xuICAgICAgICB0aGlzLm1vcmVNb2RlbC5pdGVtcyA9IHRoaXMubW9yZUFjdGlvbk1vZGVscztcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjbGVhciBtb3JlSXRlbVxuICAgICAgdGhpcy5tb3JlQWN0aW9uTW9kZWxzID0gW107XG5cbiAgICAgIGlmICh0aGlzLm1vcmVNb2RlbCBpbnN0YW5jZW9mIEFjdGlvbk1vZGVsTWVudSkge1xuICAgICAgICB0aGlzLm1vcmVNb2RlbC5pdGVtcyA9IHRoaXMubW9yZUFjdGlvbk1vZGVscztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFRvcE1vcmVNZW51KCk6IG51bWJlciB7XG4gICAgbGV0IGhlaWdodCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuYWN0aW9uLW1lbnUtYmFyXCIpLmhlaWdodCgpO1xuXG4gICAgcmV0dXJuIGhlaWdodCAtIDEwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMZWZ0TW9yZU1lbnUoKTogbnVtYmVyIHtcbiAgICBsZXQgcG9zaXRpb24gPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmFjdGlvbi1tZW51LWJhciA+Lm1vcmVcIikucG9zaXRpb24oKTtcbiAgICBsZXQgbGVmdCA9IDA7XG4gICAgaWYgKHR5cGVvZiBwb3NpdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxlZnQgPSBwb3NpdGlvbi5sZWZ0O1xuICAgIH1cblxuICAgIHJldHVybiBsZWZ0O1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93TW9yZU1lbnUoc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZU1lbnUgPSBzaG93O1xuICB9XG5cbiAgcHVibGljIF9pc1JlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlbmRlcmluZztcbiAgfVxuXG4gIHB1YmxpYyBvbk1vcmVCdG5DbGlja2VkKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Nob3dNb3JlTWVudSkge1xuICAgICAgdGhpcy5zaG93TW9yZU1lbnUoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dNb3JlTWVudSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNTaG93KG1vZGVsOiBBY3Rpb25Nb2RlbCk6IGJvb2xlYW4ge1xuICAgIGlmIChtb2RlbC5pc1Nob3cgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtb2RlbC5pc1Nob3cgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWwuaXNTaG93KHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGlzRW5hYmxlZChtb2RlbDogQWN0aW9uTW9kZWwpOiBib29sZWFuIHtcbiAgICBpZiAobW9kZWwuaXNFbmFibGVkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbW9kZWwuaXNFbmFibGVkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsLmlzRW5hYmxlZCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3dNb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vcmVBY3Rpb25Nb2RlbHMubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMgPSBbXTtcbiAgICBpZiAodGhpcy5tb2RlbHMgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMubW9kZWxzKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgKHRoaXMuZGVsYXlUaW1lciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kZWxheVRpbWVyICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVsYXlUaW1lcik7XG4gICAgLy8gICB0aGlzLmRlbGF5VGltZXIgPSBudWxsO1xuICAgIC8vIH1cblxuICAgIHRoaXMuaXNSZW5kZXJpbmcgPSB0cnVlO1xuICAgIC8vIHRoaXMuZGVsYXlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZVJlbmRlckFjdGlvbk1lbnVCYXIoKTtcbiAgICAgIHRoaXMuaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAvLyB9LCAxKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZXh0TWVudSgpOiBDb250ZXh0TWVudSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dE1lbnU7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29udGV4dE1lbnUobWVudTogQ29udGV4dE1lbnUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRNZW51ID0gbWVudTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZW51TW9kZWxGYWN0b3J5KCk6IElNZW51TW9kZWxGYWN0b3J5IHtcbiAgICByZXR1cm4gdGhpcy5tZW51RmFjdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNZW51TW9kZWxGYWN0b3J5KG1lbnVGYWN0b3J5OiBJTWVudU1vZGVsRmFjdG9yeSk6IHZvaWQge1xuICAgIHRoaXMubWVudUZhY3RvcnkgPSBtZW51RmFjdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNYXhXaWR0aChtYXhXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb3JlTW9kZWwoKTogQWN0aW9uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vcmVNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY3RpdmVBY3Rpb25Nb2RlbHMoKTogQWN0aW9uTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzO1xuICB9XG5cbiAgcHVibGljIGdldE1vZGVscygpOiBBY3Rpb25Nb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbHM7XG4gIH1cblxuICBwdWJsaWMgc2V0TW9kZWxzKG1vZGVsczogQWN0aW9uTW9kZWxbXSk6IHZvaWQge1xuICAgIHRoaXMubW9kZWxzID0gbW9kZWxzO1xuXG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxufVxuIl19