com.phloxui
Version:
PhloxUI Ng2+ Framework
398 lines (397 loc) • 30 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, ElementRef } 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 () {
var _this = this;
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(function () {
_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;
};
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"
},] },
];
/** @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aW9uTWVudUJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL0FjdGlvbk1lbnVCYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVEzRCxxQkFBTSxTQUFTLEdBQVcscUJBQXFCLENBQUM7O0lBbUM5Qyx1QkFBWSxVQUFzQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUU1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFekIscUJBQUksWUFBWSxHQUFhLGNBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEQscUJBQUksY0FBYyxHQUFhLGNBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Ozs7UUFLdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUN4SDs7OztJQUVNLGdDQUFROzs7O1FBQ2IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOzs7OztJQUdULG1DQUFXOzs7O1FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUks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QWlCO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDOzs7OztJQUduQiwyQ0FBbUI7Ozs7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Ozs7OztJQUduQiwyQ0FBbUI7Ozs7Y0FBQyxXQUE4QjtRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7Ozs7O0lBRzFCLG1DQUFXOzs7O2NBQUMsUUFBZ0I7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOzs7OztJQUdULG9DQUFZOzs7O1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDOzs7OztJQUdqQiw2Q0FBcUI7Ozs7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzs7OEJBbE9VLFNBQVM7O2dCQWZyRCxTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNuQixRQUFRLEVBQUUsU0FBUztvQkFDbkIsUUFBUSxFQUFFLDRaQVFYO2lCQUNBOzs7O2dCQXhCa0MsVUFBVTs7O2dDQTZCMUMsS0FBSzsyQkFFTCxLQUFLOzZCQUVMLEtBQUs7O3dCQWpDUjs7U0F5QmEsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsJztcbmltcG9ydCB7IEFjdGlvbk1vZGVsTWVudSB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsTWVudSc7XG5pbXBvcnQgeyBNZW51TW9kZWwgfSBmcm9tICcuLi9tb2RlbC9NZW51TW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICcuLi9Db250ZXh0TWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUNvbnRleHQgfSBmcm9tICcuLi9JQ29udGV4dCc7XG5pbXBvcnQgeyBJTWVudU1vZGVsRmFjdG9yeSB9IGZyb20gJy4uL0lNZW51TW9kZWxGYWN0b3J5JztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWFjdGlvbi1tZW51LWJhclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LWFjdGlvbi1tZW51LWJhclwiIFtjbGFzcy5yZW5kZXJpbmddPVwiX2lzUmVuZGVyaW5nKClcIj5cblx0PGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGdldEFjdGl2ZUFjdGlvbk1vZGVscygpXCIgY2xhc3M9XCJhY3Rpb25cIj5cblx0XHQ8cGh4LWFjdGlvbi1idG4gW21vZGVsXT1cImFjdGlvblwiICpuZ0lmPVwiaXNTaG93KGFjdGlvbilcIj48L3BoeC1hY3Rpb24tYnRuPlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIm1vcmVcIj5cblx0XHQ8cGh4LWFjdGlvbi1idG4gW21vZGVsXT1cImdldE1vcmVNb2RlbCgpXCIgKm5nSWY9XCJpc1Nob3dNb3JlKClcIiAoY2xpY2spPVwib25Nb3JlQnRuQ2xpY2tlZCgkZXZlbnQpXCI+PC9waHgtYWN0aW9uLWJ0bj5cblx0PC9kaXY+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uTWVudUJhciBpbXBsZW1lbnRzIE9uSW5pdCwgSUNvbnRleHQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIG1lbnVGYWN0b3J5OiBJTWVudU1vZGVsRmFjdG9yeTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBtb2RlbHM6IEFjdGlvbk1vZGVsW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbWF4V2lkdGg6IG51bWJlcjsgLy8gYXMgcGl4ZWxcbiAgcHJpdmF0ZSBhY3RpdmVBY3Rpb25Nb2RlbHM6IEFjdGlvbk1vZGVsW107XG4gIHByaXZhdGUgbW9yZUFjdGlvbk1vZGVsczogQWN0aW9uTW9kZWxbXTtcbiAgcHJpdmF0ZSBjb250ZXh0TWVudTogQ29udGV4dE1lbnU7XG4gIHByaXZhdGUgbWVudU1vZGVsOiBNZW51TW9kZWw7XG4gIHByaXZhdGUgbW9yZU1vZGVsOiBBY3Rpb25Nb2RlbDtcbiAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGRlbGF5VGltZXI6IGFueTtcbiAgcHJpdmF0ZSBpc1JlbmRlcmluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBpc1Nob3dNb3JlTWVudTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLmlzU2hvd01vcmVNZW51ID0gZmFsc2U7XG5cbiAgICB0aGlzLm1vcmVBY3Rpb25Nb2RlbHMgPSBbXTtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgIHRoaXMuaXNSZW5kZXJpbmcgPSBmYWxzZTtcblxuICAgIGxldCBzaG93RnVuY3Rpb246IEZ1bmN0aW9uID0gKCkgPT4geyByZXR1cm4gdHJ1ZTsgfTtcbiAgICBsZXQgZW5hYmxlRnVuY3Rpb246IEZ1bmN0aW9uID0gKCkgPT4geyByZXR1cm4gdHJ1ZTsgfTtcbiAgICAvLyAgICAgICAgbGV0IGFjdGlvblBlcmZvcm1lZEhhbmRsZXI6IEZ1bmN0aW9uID0gKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgY29uc29sZS5sb2coXCJNT1JFXCIpO1xuICAgIC8vICAgICAgICB9O1xuXG4gICAgdGhpcy5tb3JlTW9kZWwgPSBuZXcgQWN0aW9uTW9kZWxNZW51KG51bGwsIFwiTW9yZVwiLCBcIm90aGVyXCIsIHNob3dGdW5jdGlvbiwgZW5hYmxlRnVuY3Rpb24sIG51bGwsIHRoaXMubW9yZUFjdGlvbk1vZGVscyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0TWVudSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbnRleHRNZW51ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5jb250ZXh0TWVudS5zZXRDb250ZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRleHRNZW51ICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuY29udGV4dE1lbnUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmNvbnRleHRNZW51LnNldENvbnRleHQodGhpcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1lbnVGYWN0b3J5ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1lbnVGYWN0b3J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5tZW51TW9kZWwgPSB0aGlzLm1lbnVGYWN0b3J5LmNyZWF0ZU1lbnVNb2RlbCh0aGlzKTtcbiAgICB9XG4gICAgLypcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgIGlmICh0aGlzLm1vZGVscyAhPSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVscyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZm9yKGxldCBpdGVtIG9mIHRoaXMubW9kZWxzKXtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uTW9kZWxzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKi9cbiAgfVxuXG4gIHByaXZhdGUgcmVSZW5kZXJBY3Rpb25NZW51QmFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1heFdpZHRoICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1heFdpZHRoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHRlbXBNYXA6IGFueSA9IHt9O1xuICAgICAgbGV0IGFsbFdpZHRoOiBudW1iZXIgPSAwO1xuXG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLnBoeC1hY3Rpb24tbWVudS1iYXIgPi5hY3Rpb25cIikuZWFjaCgoaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBsZXQgd2lkdGg6IG51bWJlciA9ICQodmFsdWUpLndpZHRoKCk7XG5cbiAgICAgICAgYWxsV2lkdGggKz0gd2lkdGg7XG5cbiAgICAgICAgbGV0IGluZGV4U3RyaW5nOiBzdHJpbmcgPSBpbmRleCArIFwiXCI7XG4gICAgICAgIHRlbXBNYXBbaW5kZXhTdHJpbmddID0ge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgICB9O1xuXG4gICAgICB9KTtcblxuICAgICAgLy8gcmVtb3ZlIGZyb20gYWN0aW9uc1xuICAgICAgdGhpcy5tb3JlQWN0aW9uTW9kZWxzID0gW107XG4gICAgICBpZiAoYWxsV2lkdGggPiB0aGlzLm1heFdpZHRoKSB7XG4gICAgICAgIGxldCB0ZW1wQXJyYXk6IGFueVtdID0gW107XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGg6IG51bWJlciA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsZXQgaW5kZXhTdHJpbmc6IHN0cmluZyA9IGkgKyBcIlwiO1xuICAgICAgICAgIGxldCBtb2RlbDogYW55ID0gdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHNbaV07XG4gICAgICAgICAgbGV0IHdpZHRoOiBudW1iZXIgPSAwO1xuICAgICAgICAgIGlmICh0ZW1wTWFwW2luZGV4U3RyaW5nXSAhPT0gbnVsbCAmJiB0eXBlb2YgdGVtcE1hcFtpbmRleFN0cmluZ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aWR0aCA9IHRlbXBNYXBbaW5kZXhTdHJpbmddLndpZHRoXG5cbiAgICAgICAgICAgIGN1cnJlbnRXaWR0aCArPSB3aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IHRoaXMubWF4V2lkdGgpIHtcbiAgICAgICAgICAgIHRlbXBBcnJheS5wdXNoKG1vZGVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRlbXBBcnJheSkge1xuICAgICAgICAgIGxldCByZW1vdmVJZHggPSB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAgIGlmIChyZW1vdmVJZHggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMuc3BsaWNlKHJlbW92ZUlkeCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tb3JlQWN0aW9uTW9kZWxzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubW9yZU1vZGVsIGluc3RhbmNlb2YgQWN0aW9uTW9kZWxNZW51KSB7XG4gICAgICAgIHRoaXMubW9yZU1vZGVsLml0ZW1zID0gdGhpcy5tb3JlQWN0aW9uTW9kZWxzO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsZWFyIG1vcmVJdGVtXG4gICAgICB0aGlzLm1vcmVBY3Rpb25Nb2RlbHMgPSBbXTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMubW9yZU1vZGVsIGluc3RhbmNlb2YgQWN0aW9uTW9kZWxNZW51KSB7XG4gICAgICAgIHRoaXMubW9yZU1vZGVsLml0ZW1zID0gdGhpcy5tb3JlQWN0aW9uTW9kZWxzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9wTW9yZU1lbnUoKTogbnVtYmVyIHtcbiAgICBsZXQgaGVpZ2h0ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5hY3Rpb24tbWVudS1iYXJcIikuaGVpZ2h0KCk7XG5cbiAgICByZXR1cm4gaGVpZ2h0IC0gMTA7XG4gIH1cblxuICBwcml2YXRlIGdldExlZnRNb3JlTWVudSgpOiBudW1iZXIge1xuICAgIGxldCBwb3NpdGlvbiA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuYWN0aW9uLW1lbnUtYmFyID4ubW9yZVwiKS5wb3NpdGlvbigpO1xuICAgIGxldCBsZWZ0ID0gMDtcbiAgICBpZiAodHlwZW9mIHBvc2l0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGVmdCA9IHBvc2l0aW9uLmxlZnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlZnQ7XG4gIH1cblxuICBwcml2YXRlIHNob3dNb3JlTWVudShzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1Nob3dNb3JlTWVudSA9IHNob3c7XG4gIH1cblxuICBwdWJsaWMgX2lzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUmVuZGVyaW5nO1xuICB9XG5cbiAgcHVibGljIG9uTW9yZUJ0bkNsaWNrZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2hvd01vcmVNZW51KSB7XG4gICAgICB0aGlzLnNob3dNb3JlTWVudShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd01vcmVNZW51KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3cobW9kZWw6IEFjdGlvbk1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKG1vZGVsLmlzU2hvdyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1vZGVsLmlzU2hvdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtb2RlbC5pc1Nob3codGhpcyk7XG4gIH1cblxuICBwdWJsaWMgaXNFbmFibGVkKG1vZGVsOiBBY3Rpb25Nb2RlbCk6IGJvb2xlYW4ge1xuICAgIGlmIChtb2RlbC5pc0VuYWJsZWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtb2RlbC5pc0VuYWJsZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWwuaXNFbmFibGVkKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGlzU2hvd01vcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9yZUFjdGlvbk1vZGVscy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgIGlmICh0aGlzLm1vZGVscyAhPSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVscyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZWxheVRpbWVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmRlbGF5VGltZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxheVRpbWVyKTtcbiAgICAgIHRoaXMuZGVsYXlUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5pc1JlbmRlcmluZyA9IHRydWU7XG4gICAgdGhpcy5kZWxheVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlUmVuZGVyQWN0aW9uTWVudUJhcigpO1xuICAgICAgdGhpcy5pc1JlbmRlcmluZyA9IGZhbHNlO1xuICAgIH0sIDEpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRleHRNZW51KCk6IENvbnRleHRNZW51IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0TWVudTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250ZXh0TWVudShtZW51OiBDb250ZXh0TWVudSk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dE1lbnUgPSBtZW51O1xuICB9XG5cbiAgcHVibGljIGdldE1lbnVNb2RlbEZhY3RvcnkoKTogSU1lbnVNb2RlbEZhY3Rvcnkge1xuICAgIHJldHVybiB0aGlzLm1lbnVGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIHNldE1lbnVNb2RlbEZhY3RvcnkobWVudUZhY3Rvcnk6IElNZW51TW9kZWxGYWN0b3J5KTogdm9pZCB7XG4gICAgdGhpcy5tZW51RmFjdG9yeSA9IG1lbnVGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIHNldE1heFdpZHRoKG1heFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHVibGljIGdldE1vcmVNb2RlbCgpOiBBY3Rpb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9yZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZUFjdGlvbk1vZGVscygpOiBBY3Rpb25Nb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHM7XG4gIH1cbn1cbiJdfQ==