com.phloxui
Version:
PhloxUI Ng2+ Framework
422 lines (421 loc) • 28.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input } from '@angular/core';
import { TabModel } from './model/TabModel';
import { AbstractHasData } from './AbstractHasData';
import { AbstractDataView } from './dataview/AbstractDataView';
import { Option } from '../decorator/Option.decorator';
import { NeedFocusService } from '../service/NeedFocusService.service';
var /** @type {?} */ TYPE_NAME = "phx-tab";
var Tab = /** @class */ (function (_super) {
tslib_1.__extends(Tab, _super);
function Tab(elementRef, needFocusService) {
var _this = _super.call(this, elementRef) || this;
_this.showMoreMenu = false;
_this._autoFocus = false;
_this.needFocusService = needFocusService;
return _this;
}
/**
* @return {?}
*/
Tab.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (this.tabPane !== null && typeof this.tabPane !== 'undefined') {
this.tabPane.addTabHeader(this);
}
if (this.model !== null && typeof this.model !== 'undefined') {
if (this.model.data !== null && typeof this.model.data !== 'undefined') {
this.data = this.model.data;
}
}
};
/**
* @return {?}
*/
Tab.prototype.getTabLabel = /**
* @return {?}
*/
function () {
if (this.model !== null && typeof this.model !== 'undefined') {
var /** @type {?} */ defaultLabel = (this.model.label === null || typeof this.model.label === 'undefined') ? '' : this.model.label;
var /** @type {?} */ resolveLabel = null;
if (this.model.labelField !== null && typeof this.model.labelField !== 'undefined' && this.model.labelField !== '') {
resolveLabel = AbstractDataView.resolveMappedData(this.model.labelField, this.data);
}
if (resolveLabel !== null && typeof resolveLabel === 'string' && resolveLabel !== '') {
return resolveLabel;
}
else {
return defaultLabel;
}
}
return '';
};
/**
* @return {?}
*/
Tab.prototype.init = /**
* @return {?}
*/
function () {
if (this.contextMenu != null && typeof this.contextMenu !== 'undefined') {
this.contextMenu.setContext(this);
}
};
/**
* @param {?} $event
* @return {?}
*/
Tab.prototype.onMoreButtonClick = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
$event.stopPropagation();
if (this.contextMenu !== null && typeof this.contextMenu !== 'undefined') {
if (this.contextMenu.isShow()) {
if (this.needFocusService !== null && this.needFocusService !== undefined) {
this.needFocusService.resetFocusingComponent(this);
}
}
else {
var /** @type {?} */ top_1 = $(this.elementRef.nativeElement).offset().top + $(this.elementRef.nativeElement).height();
var /** @type {?} */ left = $(this.elementRef.nativeElement).offset().left - 1;
var /** @type {?} */ width = $(this.elementRef.nativeElement).width() + 2;
this.contextMenu.showAt(top_1, left, width);
if (this.needFocusService !== null && this.needFocusService !== undefined) {
this.needFocusService.setFocusingComponent(this);
}
}
}
};
/**
* @return {?}
*/
Tab.prototype.hideMenu = /**
* @return {?}
*/
function () {
if (this.contextMenu != null && typeof this.contextMenu !== 'undefined') {
this.contextMenu.hide();
}
};
/**
* @return {?}
*/
Tab.prototype.getIndex = /**
* @return {?}
*/
function () {
if (this.tabPane !== null && typeof this.tabPane !== 'undefined') {
return this.tabPane.getTabModelIndex(this.model);
}
return -1;
};
/**
* @param {?} selected
* @return {?}
*/
Tab.prototype.setSelected = /**
* @param {?} selected
* @return {?}
*/
function (selected) {
this.selected = selected;
};
/**
* @return {?}
*/
Tab.prototype.getContextMenu = /**
* @return {?}
*/
function () {
return this.contextMenu;
};
/**
* @param {?} menu
* @return {?}
*/
Tab.prototype.setContextMenu = /**
* @param {?} menu
* @return {?}
*/
function (menu) {
this.contextMenu = menu;
};
/**
* @return {?}
*/
Tab.prototype.getMenuModelFactory = /**
* @return {?}
*/
function () {
return this.menuFactory;
};
/**
* @param {?} menuFactory
* @return {?}
*/
Tab.prototype.setMenuModelFactory = /**
* @param {?} menuFactory
* @return {?}
*/
function (menuFactory) {
this.menuFactory = menuFactory;
};
/**
* @return {?}
*/
Tab.prototype.getModel = /**
* @return {?}
*/
function () {
return this.model;
};
/**
* @return {?}
*/
Tab.prototype.isSelfDataDirty = /**
* @return {?}
*/
function () {
return false;
};
/**
* @return {?}
*/
Tab.prototype.selfSaveData = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
Tab.prototype.selfResetData = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
Tab.prototype.getTabBody = /**
* @return {?}
*/
function () {
if (this.tabPane !== null && typeof this.tabPane !== 'undefined') {
var /** @type {?} */ index = this.tabPane.getTabHeaderIndex(this);
return this.tabPane.getTabBody(index);
}
return null;
};
/**
* @return {?}
*/
Tab.prototype.isShowMoreMenu = /**
* @return {?}
*/
function () {
return this.showMoreMenu;
};
/**
* @return {?}
*/
Tab.prototype.doPreload = /**
* @return {?}
*/
function () { return new Promise(function (resolve, reject) { resolve(null); }); };
/**
* @return {?}
*/
Tab.prototype.doLoaded = /**
* @return {?}
*/
function () {
};
/**
* @param {?} $event
* @return {?}
*/
Tab.prototype._doFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
// do something when focus
};
/**
* @param {?} $event
* @return {?}
*/
Tab.prototype._doLostFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (this.needFocusService !== null) {
this.needFocusService.resetFocusingComponent(this);
}
};
/**
* @param {?} event
* @return {?}
*/
Tab.prototype.onFocus = /**
* @param {?} event
* @return {?}
*/
function (event) {
$(this.elementRef.nativeElement).find(".fake").focus();
};
/**
* @param {?} event
* @return {?}
*/
Tab.prototype.onLostFocus = /**
* @param {?} event
* @return {?}
*/
function (event) {
$(this.elementRef.nativeElement).find(".fake").blur();
this.hideMenu();
};
Tab.TYPE_NAME = TYPE_NAME;
Tab.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phx-tab table-wrapper\">\n\t<div class=\"table-cell-wrapper middle\">\n\t\t<div *ngIf=\"getModel() != null\" class=\"phx-tab\" [class.dirty]=\"isDataDirty()\" [ngClass]=\"getModel().styleClass\">\n\t\t\t<div class=\"tab-name\">{{getTabLabel()}}</div> <div *ngIf=\"isShowMoreMenu()\" class=\"tab-vertical-ellipsis\" (click)=\"onMoreButtonClick($event)\"></div>\n\t\t\t<phx-context-menu [model]=\"getModel().menuModel\" [context]=\"this\" class=\"vertical\" [autoFocus]=\"_autoFocus\"></phx-context-menu>\n\t\t</div>\n\t</div>\n\t<button type=\"button\" class=\"fake\" (focusin)=\"_doFocus($event)\" (blur)=\"_doLostFocus($event)\"></button>\n</div>\n"
},] },
];
/** @nocollapse */
Tab.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: NeedFocusService, },
]; };
Tab.propDecorators = {
"model": [{ type: Input },],
"tabPane": [{ type: Input },],
"menuFactory": [{ type: Input },],
"showMoreMenu": [{ type: Input },],
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], Tab.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], Tab.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], Tab.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], Tab.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], Tab.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "disabled", void 0);
return Tab;
}(AbstractHasData));
export { Tab };
function Tab_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
Tab.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
Tab.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
Tab.propDecorators;
/** @type {?} */
Tab.TYPE_NAME;
/** @type {?} */
Tab.prototype.model;
/** @type {?} */
Tab.prototype.tabPane;
/** @type {?} */
Tab.prototype.contextMenu;
/** @type {?} */
Tab.prototype.menuFactory;
/** @type {?} */
Tab.prototype.selected;
/** @type {?} */
Tab.prototype.showMoreMenu;
/** @type {?} */
Tab.prototype.dataParent;
/** @type {?} */
Tab.prototype.ignoreParentData;
/** @type {?} */
Tab.prototype.data;
/** @type {?} */
Tab.prototype.ignoreParentDisabled;
/** @type {?} */
Tab.prototype.delegateHistory;
/** @type {?} */
Tab.prototype.onDisabled;
/** @type {?} */
Tab.prototype.onEnabled;
/** @type {?} */
Tab.prototype.loadingEnabled;
/** @type {?} */
Tab.prototype.i18nKey;
/** @type {?} */
Tab.prototype.bypass;
/** @type {?} */
Tab.prototype.options;
/** @type {?} */
Tab.prototype.disabled;
/** @type {?} */
Tab.prototype.needFocusService;
/** @type {?} */
Tab.prototype._autoFocus;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9UYWIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU01QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSXZFLHFCQUFNLFNBQVMsR0FBVyxTQUFTLENBQUM7O0lBZ0JYLCtCQUFlO0lBcUR0QyxhQUFZLFVBQXNCLEVBQUUsZ0JBQWtDO1FBQXRFLFlBQ0Usa0JBQU0sVUFBVSxDQUFDLFNBSWxCO1FBSEMsS0FBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsS0FBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsS0FBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDOztLQUMxQzs7OztJQUVNLHNCQUFROzs7O1FBQ2IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7UUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxD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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJNb2RlbCB9IGZyb20gJy4vbW9kZWwvVGFiTW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICcuL0NvbnRleHRNZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQ29udGV4dCB9IGZyb20gJy4vSUNvbnRleHQnO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuL0lIYXNEYXRhJztcbmltcG9ydCB7IElOZWVkRm9jdXMgfSBmcm9tICcuL0lOZWVkRm9jdXMnO1xuaW1wb3J0IHsgSU1lbnVNb2RlbEZhY3RvcnkgfSBmcm9tICcuL0lNZW51TW9kZWxGYWN0b3J5JztcbmltcG9ydCB7IEFic3RyYWN0SGFzRGF0YSB9IGZyb20gJy4vQWJzdHJhY3RIYXNEYXRhJztcbmltcG9ydCB7IEFic3RyYWN0RGF0YVZpZXcgfSBmcm9tICcuL2RhdGF2aWV3L0Fic3RyYWN0RGF0YVZpZXcnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LXRhYlwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LXRhYiB0YWJsZS13cmFwcGVyXCI+XG5cdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+XG5cdFx0PGRpdiAqbmdJZj1cImdldE1vZGVsKCkgIT0gbnVsbFwiIGNsYXNzPVwicGh4LXRhYlwiIFtjbGFzcy5kaXJ0eV09XCJpc0RhdGFEaXJ0eSgpXCIgW25nQ2xhc3NdPVwiZ2V0TW9kZWwoKS5zdHlsZUNsYXNzXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidGFiLW5hbWVcIj57e2dldFRhYkxhYmVsKCl9fTwvZGl2PiA8ZGl2ICpuZ0lmPVwiaXNTaG93TW9yZU1lbnUoKVwiIGNsYXNzPVwidGFiLXZlcnRpY2FsLWVsbGlwc2lzXCIgKGNsaWNrKT1cIm9uTW9yZUJ1dHRvbkNsaWNrKCRldmVudClcIj48L2Rpdj5cblx0XHRcdDxwaHgtY29udGV4dC1tZW51IFttb2RlbF09XCJnZXRNb2RlbCgpLm1lbnVNb2RlbFwiIFtjb250ZXh0XT1cInRoaXNcIiBjbGFzcz1cInZlcnRpY2FsXCIgW2F1dG9Gb2N1c109XCJfYXV0b0ZvY3VzXCI+PC9waHgtY29udGV4dC1tZW51PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJmYWtlXCIgKGZvY3VzaW4pPVwiX2RvRm9jdXMoJGV2ZW50KVwiIChibHVyKT1cIl9kb0xvc3RGb2N1cygkZXZlbnQpXCI+PC9idXR0b24+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgVGFiIGV4dGVuZHMgQWJzdHJhY3RIYXNEYXRhIGltcGxlbWVudHMgT25Jbml0LCBJQ29udGV4dCwgSU5lZWRGb2N1cyB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIG1vZGVsOiBUYWJNb2RlbDtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSB0YWJQYW5lOiBhbnk7XG4gIHByaXZhdGUgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xuICBASW5wdXQoKVxuICBwcml2YXRlIG1lbnVGYWN0b3J5OiBJTWVudU1vZGVsRmFjdG9yeTtcbiAgcHJpdmF0ZSBzZWxlY3RlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBzaG93TW9yZU1lbnU6IGJvb2xlYW47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlO1xuICBwdWJsaWMgX2F1dG9Gb2N1czogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZik7XG4gICAgdGhpcy5zaG93TW9yZU1lbnUgPSBmYWxzZTtcbiAgICB0aGlzLl9hdXRvRm9jdXMgPSBmYWxzZTtcbiAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2UgPSBuZWVkRm9jdXNTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhYlBhbmUgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMudGFiUGFuZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMudGFiUGFuZS5hZGRUYWJIZWFkZXIodGhpcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbC5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLm1vZGVsLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFRhYkxhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgZGVmYXVsdExhYmVsID0gKHRoaXMubW9kZWwubGFiZWwgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMubW9kZWwubGFiZWwgPT09ICd1bmRlZmluZWQnKSA/ICcnIDogdGhpcy5tb2RlbC5sYWJlbDtcbiAgICAgIGxldCByZXNvbHZlTGFiZWwgPSBudWxsO1xuICAgICAgaWYgKHRoaXMubW9kZWwubGFiZWxGaWVsZCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbC5sYWJlbEZpZWxkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1vZGVsLmxhYmVsRmllbGQgIT09ICcnKSB7XG4gICAgICAgIHJlc29sdmVMYWJlbCA9IEFic3RyYWN0RGF0YVZpZXcucmVzb2x2ZU1hcHBlZERhdGEodGhpcy5tb2RlbC5sYWJlbEZpZWxkLCB0aGlzLmRhdGEpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb2x2ZUxhYmVsICE9PSBudWxsICYmIHR5cGVvZiByZXNvbHZlTGFiZWwgPT09ICdzdHJpbmcnICYmIHJlc29sdmVMYWJlbCAhPT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVMYWJlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0TGFiZWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIGluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnUgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb250ZXh0TWVudSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnUuc2V0Q29udGV4dCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Nb3JlQnV0dG9uQ2xpY2soJGV2ZW50OiBFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmNvbnRleHRNZW51ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbnRleHRNZW51ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnUuaXNTaG93KCkpIHtcbiAgICAgICAgaWYodGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9PSBudWxsICYmIHRoaXMubmVlZEZvY3VzU2VydmljZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2UucmVzZXRGb2N1c2luZ0NvbXBvbmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHRvcCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLm9mZnNldCgpLnRvcCArICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmhlaWdodCgpO1xuICAgICAgICBsZXQgbGVmdCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLm9mZnNldCgpLmxlZnQgLSAxO1xuICAgICAgICBsZXQgd2lkdGggPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS53aWR0aCgpICsgMjtcblxuICAgICAgICB0aGlzLmNvbnRleHRNZW51LnNob3dBdCh0b3AsIGxlZnQsIHdpZHRoKTtcblxuICAgICAgICBpZih0aGlzLm5lZWRGb2N1c1NlcnZpY2UgIT09IG51bGwgJiYgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHRoaXMubmVlZEZvY3VzU2VydmljZS5zZXRGb2N1c2luZ0NvbXBvbmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoaWRlTWVudSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250ZXh0TWVudSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbnRleHRNZW51ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5jb250ZXh0TWVudS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEluZGV4KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMudGFiUGFuZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy50YWJQYW5lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMudGFiUGFuZS5nZXRUYWJNb2RlbEluZGV4KHRoaXMubW9kZWwpO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udGV4dE1lbnUoKTogQ29udGV4dE1lbnUge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHRNZW51O1xuICB9XG5cbiAgcHVibGljIHNldENvbnRleHRNZW51KG1lbnU6IENvbnRleHRNZW51KTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0TWVudSA9IG1lbnU7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWVudU1vZGVsRmFjdG9yeSgpOiBJTWVudU1vZGVsRmFjdG9yeSB7XG4gICAgcmV0dXJuIHRoaXMubWVudUZhY3Rvcnk7XG4gIH1cblxuICBwdWJsaWMgc2V0TWVudU1vZGVsRmFjdG9yeShtZW51RmFjdG9yeTogSU1lbnVNb2RlbEZhY3RvcnkpOiB2b2lkIHtcbiAgICB0aGlzLm1lbnVGYWN0b3J5ID0gbWVudUZhY3Rvcnk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kZWwoKTogVGFiTW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIGlzU2VsZkRhdGFEaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZlNhdmVEYXRhKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgc2VsZlJlc2V0RGF0YSgpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIGdldFRhYkJvZHkoKTogYW55IHtcbiAgICBpZiAodGhpcy50YWJQYW5lICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnRhYlBhbmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnRhYlBhbmUuZ2V0VGFiSGVhZGVySW5kZXgodGhpcyk7XG4gICAgICByZXR1cm4gdGhpcy50YWJQYW5lLmdldFRhYkJvZHkoaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3dNb3JlTWVudSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93TW9yZU1lbnU7XG4gIH1cblxuICBwdWJsaWMgZG9QcmVsb2FkKCk6IFByb21pc2U8YW55PiB7ICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyAgICAgICByZXNvbHZlKG51bGwpOyAgICAgfSk7ICAgfSAgcHVibGljIGRvTG9hZGVkKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgX2RvRm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIC8vIGRvIHNvbWV0aGluZyB3aGVuIGZvY3VzXG4gIH1cblxuICBwdWJsaWMgX2RvTG9zdEZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubmVlZEZvY3VzU2VydmljZS5yZXNldEZvY3VzaW5nQ29tcG9uZW50KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkZvY3VzKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmZha2VcIikuZm9jdXMoKVxuICB9XG5cbiAgcHVibGljIG9uTG9zdEZvY3VzKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmZha2VcIikuYmx1cigpO1xuICAgIHRoaXMuaGlkZU1lbnUoKTtcbiAgfVxufVxuIl19