com.phloxui
Version:
PhloxUI Ng2+ Framework
331 lines (330 loc) • 27.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Component, Input, ElementRef, ChangeDetectionStrategy } 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;
}
/**
* @return {?}
*/
getModels() {
return this.models;
}
/**
* @param {?} models
* @return {?}
*/
setModels(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()">
<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>
`,
changeDetection: ChangeDetectionStrategy.Default
},] },
];
/** @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aW9uTWVudUJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL2VkaXRvci5pbnRlcm5hbC9BY3Rpb25NZW51QmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsVUFBVSxFQUFhLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVE5RCx1QkFBTSxTQUFTLEdBQVcscUJBQXFCLENBQUM7QUFnQmhELE1BQU07Ozs7SUFvQkosWUFBWSxVQUFzQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUU1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFekIscUJBQUksWUFBWSxHQUFhLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BELHFCQUFJLGNBQWMsR0FBYSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7OztRQUt0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3hIOzs7O0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7Ozs7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QyxJQUFJLENBQUMsU0FBUyxDQUFDOzs7OztJQUdqQixxQkFBcUI7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzs7Ozs7SUFHMUIsU0FBUztRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7SUFHZCxTQUFTLENBQUMsTUFBcUI7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOzs7MEJBNU8yQixTQUFTOztZQWhCckQsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDbkIsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLFFBQVEsRUFBRTs7Ozs7Ozs7Q0FRWDtnQkFDQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsT0FBTzthQUNqRDs7OztZQXpCa0MsVUFBVTs7OzRCQThCMUMsS0FBSzt1QkFFTCxLQUFLO3lCQUVMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvQWN0aW9uTW9kZWwnO1xuaW1wb3J0IHsgQWN0aW9uTW9kZWxNZW51IH0gZnJvbSAnLi4vLi4vbW9kZWwvQWN0aW9uTW9kZWxNZW51JztcbmltcG9ydCB7IE1lbnVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL01lbnVNb2RlbCc7XG5pbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJy4uLy4uL0NvbnRleHRNZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQ29udGV4dCB9IGZyb20gJy4uLy4uL0lDb250ZXh0JztcbmltcG9ydCB7IElNZW51TW9kZWxGYWN0b3J5IH0gZnJvbSAnLi4vLi4vSU1lbnVNb2RlbEZhY3RvcnknO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtYWN0aW9uLW1lbnUtYmFyXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtYWN0aW9uLW1lbnUtYmFyXCIgW2NsYXNzLnJlbmRlcmluZ109XCJfaXNSZW5kZXJpbmcoKVwiPlxuXHQ8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZ2V0QWN0aXZlQWN0aW9uTW9kZWxzKClcIiBjbGFzcz1cImFjdGlvblwiPlxuXHRcdDxwaHgtYWN0aW9uLWJ0biBbbW9kZWxdPVwiYWN0aW9uXCIgKm5nSWY9XCJpc1Nob3coYWN0aW9uKVwiPjwvcGh4LWFjdGlvbi1idG4+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwibW9yZVwiPlxuXHRcdDxwaHgtYWN0aW9uLWJ0biBbbW9kZWxdPVwiZ2V0TW9yZU1vZGVsKClcIiAqbmdJZj1cImlzU2hvd01vcmUoKVwiIChjbGljayk9XCJvbk1vcmVCdG5DbGlja2VkKCRldmVudClcIj48L3BoeC1hY3Rpb24tYnRuPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0XG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvbk1lbnVCYXIgaW1wbGVtZW50cyBPbkluaXQsIElDb250ZXh0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBtZW51RmFjdG9yeTogSU1lbnVNb2RlbEZhY3Rvcnk7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbW9kZWxzOiBBY3Rpb25Nb2RlbFtdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIG1heFdpZHRoOiBudW1iZXI7IC8vIGFzIHBpeGVsXG4gIHByaXZhdGUgYWN0aXZlQWN0aW9uTW9kZWxzOiBBY3Rpb25Nb2RlbFtdO1xuICBwcml2YXRlIG1vcmVBY3Rpb25Nb2RlbHM6IEFjdGlvbk1vZGVsW107XG4gIHByaXZhdGUgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xuICBwcml2YXRlIG1lbnVNb2RlbDogTWVudU1vZGVsO1xuICBwcml2YXRlIG1vcmVNb2RlbDogQWN0aW9uTW9kZWw7XG4gIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBkZWxheVRpbWVyOiBhbnk7XG4gIHByaXZhdGUgaXNSZW5kZXJpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgaXNTaG93TW9yZU1lbnU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy5pc1Nob3dNb3JlTWVudSA9IGZhbHNlO1xuXG4gICAgdGhpcy5tb3JlQWN0aW9uTW9kZWxzID0gW107XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMgPSBbXTtcbiAgICB0aGlzLmlzUmVuZGVyaW5nID0gZmFsc2U7XG5cbiAgICBsZXQgc2hvd0Z1bmN0aW9uOiBGdW5jdGlvbiA9ICgpID0+IHsgcmV0dXJuIHRydWU7IH07XG4gICAgbGV0IGVuYWJsZUZ1bmN0aW9uOiBGdW5jdGlvbiA9ICgpID0+IHsgcmV0dXJuIHRydWU7IH07XG4gICAgLy8gICAgICAgIGxldCBhY3Rpb25QZXJmb3JtZWRIYW5kbGVyOiBGdW5jdGlvbiA9ICgpID0+IHtcbiAgICAvLyAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTU9SRVwiKTtcbiAgICAvLyAgICAgICAgfTtcblxuICAgIHRoaXMubW9yZU1vZGVsID0gbmV3IEFjdGlvbk1vZGVsTWVudShudWxsLCBcIk1vcmVcIiwgXCJvdGhlclwiLCBzaG93RnVuY3Rpb24sIGVuYWJsZUZ1bmN0aW9uLCBudWxsLCB0aGlzLm1vcmVBY3Rpb25Nb2RlbHMpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnUgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb250ZXh0TWVudSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnUuc2V0Q29udGV4dChudWxsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250ZXh0TWVudSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbnRleHRNZW51ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5jb250ZXh0TWVudS5zZXRDb250ZXh0KHRoaXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZW51RmFjdG9yeSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tZW51RmFjdG9yeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubWVudU1vZGVsID0gdGhpcy5tZW51RmFjdG9yeS5jcmVhdGVNZW51TW9kZWwodGhpcyk7XG4gICAgfVxuICAgIC8qXG4gICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMgPSBbXTtcbiAgICBpZiAodGhpcy5tb2RlbHMgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGZvcihsZXQgaXRlbSBvZiB0aGlzLm1vZGVscyl7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgICovXG4gIH1cblxuICBwdWJsaWMgcmVSZW5kZXJBY3Rpb25NZW51QmFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1heFdpZHRoICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1heFdpZHRoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHRlbXBNYXA6IGFueSA9IHt9O1xuICAgICAgbGV0IGFsbFdpZHRoOiBudW1iZXIgPSAwO1xuXG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLnBoeC1hY3Rpb24tbWVudS1iYXIgPi5hY3Rpb25cIikuZWFjaCgoaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBsZXQgd2lkdGg6IG51bWJlciA9ICQodmFsdWUpLndpZHRoKCk7XG5cbiAgICAgICAgYWxsV2lkdGggKz0gd2lkdGg7XG5cbiAgICAgICAgbGV0IGluZGV4U3RyaW5nOiBzdHJpbmcgPSBpbmRleCArIFwiXCI7XG4gICAgICAgIHRlbXBNYXBbaW5kZXhTdHJpbmddID0ge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgICB9O1xuXG4gICAgICB9KTtcblxuICAgICAgLy8gcmVtb3ZlIGZyb20gYWN0aW9uc1xuICAgICAgdGhpcy5tb3JlQWN0aW9uTW9kZWxzID0gW107XG4gICAgICBpZiAoYWxsV2lkdGggPiB0aGlzLm1heFdpZHRoKSB7XG4gICAgICAgIGxldCB0ZW1wQXJyYXk6IGFueVtdID0gW107XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGg6IG51bWJlciA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsZXQgaW5kZXhTdHJpbmc6IHN0cmluZyA9IGkgKyBcIlwiO1xuICAgICAgICAgIGxldCBtb2RlbDogYW55ID0gdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHNbaV07XG4gICAgICAgICAgbGV0IHdpZHRoOiBudW1iZXIgPSAwO1xuICAgICAgICAgIGlmICh0ZW1wTWFwW2luZGV4U3RyaW5nXSAhPT0gbnVsbCAmJiB0eXBlb2YgdGVtcE1hcFtpbmRleFN0cmluZ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aWR0aCA9IHRlbXBNYXBbaW5kZXhTdHJpbmddLndpZHRoXG5cbiAgICAgICAgICAgIGN1cnJlbnRXaWR0aCArPSB3aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IHRoaXMubWF4V2lkdGgpIHtcbiAgICAgICAgICAgIHRlbXBBcnJheS5wdXNoKG1vZGVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRlbXBBcnJheSkge1xuICAgICAgICAgIGxldCByZW1vdmVJZHggPSB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAgIGlmIChyZW1vdmVJZHggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMuc3BsaWNlKHJlbW92ZUlkeCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tb3JlQWN0aW9uTW9kZWxzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubW9yZU1vZGVsIGluc3RhbmNlb2YgQWN0aW9uTW9kZWxNZW51KSB7XG4gICAgICAgIHRoaXMubW9yZU1vZGVsLml0ZW1zID0gdGhpcy5tb3JlQWN0aW9uTW9kZWxzO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsZWFyIG1vcmVJdGVtXG4gICAgICB0aGlzLm1vcmVBY3Rpb25Nb2RlbHMgPSBbXTtcblxuICAgICAgaWYgKHRoaXMubW9yZU1vZGVsIGluc3RhbmNlb2YgQWN0aW9uTW9kZWxNZW51KSB7XG4gICAgICAgIHRoaXMubW9yZU1vZGVsLml0ZW1zID0gdGhpcy5tb3JlQWN0aW9uTW9kZWxzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9wTW9yZU1lbnUoKTogbnVtYmVyIHtcbiAgICBsZXQgaGVpZ2h0ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5hY3Rpb24tbWVudS1iYXJcIikuaGVpZ2h0KCk7XG5cbiAgICByZXR1cm4gaGVpZ2h0IC0gMTA7XG4gIH1cblxuICBwcml2YXRlIGdldExlZnRNb3JlTWVudSgpOiBudW1iZXIge1xuICAgIGxldCBwb3NpdGlvbiA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuYWN0aW9uLW1lbnUtYmFyID4ubW9yZVwiKS5wb3NpdGlvbigpO1xuICAgIGxldCBsZWZ0ID0gMDtcbiAgICBpZiAodHlwZW9mIHBvc2l0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGVmdCA9IHBvc2l0aW9uLmxlZnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlZnQ7XG4gIH1cblxuICBwcml2YXRlIHNob3dNb3JlTWVudShzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1Nob3dNb3JlTWVudSA9IHNob3c7XG4gIH1cblxuICBwdWJsaWMgX2lzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUmVuZGVyaW5nO1xuICB9XG5cbiAgcHVibGljIG9uTW9yZUJ0bkNsaWNrZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2hvd01vcmVNZW51KSB7XG4gICAgICB0aGlzLnNob3dNb3JlTWVudShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd01vcmVNZW51KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3cobW9kZWw6IEFjdGlvbk1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKG1vZGVsLmlzU2hvdyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1vZGVsLmlzU2hvdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtb2RlbC5pc1Nob3codGhpcyk7XG4gIH1cblxuICBwdWJsaWMgaXNFbmFibGVkKG1vZGVsOiBBY3Rpb25Nb2RlbCk6IGJvb2xlYW4ge1xuICAgIGlmIChtb2RlbC5pc0VuYWJsZWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtb2RlbC5pc0VuYWJsZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWwuaXNFbmFibGVkKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGlzU2hvd01vcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9yZUFjdGlvbk1vZGVscy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbk1vZGVscyA9IFtdO1xuICAgIGlmICh0aGlzLm1vZGVscyAhPSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVscyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiAodGhpcy5kZWxheVRpbWVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmRlbGF5VGltZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gICBjbGVhclRpbWVvdXQodGhpcy5kZWxheVRpbWVyKTtcbiAgICAvLyAgIHRoaXMuZGVsYXlUaW1lciA9IG51bGw7XG4gICAgLy8gfVxuXG4gICAgdGhpcy5pc1JlbmRlcmluZyA9IHRydWU7XG4gICAgLy8gdGhpcy5kZWxheVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlUmVuZGVyQWN0aW9uTWVudUJhcigpO1xuICAgICAgdGhpcy5pc1JlbmRlcmluZyA9IGZhbHNlO1xuICAgIC8vIH0sIDEpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRleHRNZW51KCk6IENvbnRleHRNZW51IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0TWVudTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250ZXh0TWVudShtZW51OiBDb250ZXh0TWVudSk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dE1lbnUgPSBtZW51O1xuICB9XG5cbiAgcHVibGljIGdldE1lbnVNb2RlbEZhY3RvcnkoKTogSU1lbnVNb2RlbEZhY3Rvcnkge1xuICAgIHJldHVybiB0aGlzLm1lbnVGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIHNldE1lbnVNb2RlbEZhY3RvcnkobWVudUZhY3Rvcnk6IElNZW51TW9kZWxGYWN0b3J5KTogdm9pZCB7XG4gICAgdGhpcy5tZW51RmFjdG9yeSA9IG1lbnVGYWN0b3J5O1xuICB9XG5cbiAgcHVibGljIHNldE1heFdpZHRoKG1heFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHVibGljIGdldE1vcmVNb2RlbCgpOiBBY3Rpb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9yZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZUFjdGlvbk1vZGVscygpOiBBY3Rpb25Nb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVBY3Rpb25Nb2RlbHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kZWxzKCk6IEFjdGlvbk1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLm1vZGVscztcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RlbHMobW9kZWxzOiBBY3Rpb25Nb2RlbFtdKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHM7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG59XG4iXX0=