com.phloxui
Version:
PhloxUI Ng2+ Framework
419 lines (418 loc) • 30.9 kB
JavaScript
/**
* @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