com.phloxui
Version:
PhloxUI Ng2+ Framework
357 lines (356 loc) • 27 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { AbstractI18NApplicable } from '../../share/AbstractI18NApplicable';
import { Option } from '../../decorator/Option.decorator';
import { I18N } from '../../decorator/I18N.decorator';
import { TableColumnModel } from './TableColumnModel';
import { TableRowModel } from './TableRowModel';
var TableModel = /** @class */ (function (_super) {
tslib_1.__extends(TableModel, _super);
function TableModel(typeResolveService) {
var _this = _super.call(this) || this;
_this.typeResolveService = typeResolveService;
_this.columnModels = [];
_this.headerModel = new TableRowModel(_this);
_this.rowModel = new TableRowModel(_this);
return _this;
}
/**
* @param {?} options
* @return {?}
*/
TableModel.prototype.setOptions = /**
* @param {?} options
* @return {?}
*/
function (options) {
// Call super.setOptions() to auto resolve @Option fields
_super.prototype.setOptions.call(this, options);
// Call set component type name to auto resolve compoent type
this.setBodyComponentTypeName(this.getBodyComponentTypeName());
// Clear & rebuild column models
this.clear();
if (options === null || typeof options !== 'object') {
return;
}
if (options['columns'] === null || !Array.isArray(options['columns'])) {
return;
}
var /** @type {?} */ columnOpts = /** @type {?} */ (options['columns']);
for (var /** @type {?} */ i = 0; i < columnOpts.length; i++) {
this.addColumn(columnOpts[i]);
}
// Auto apply current i18n value
this.applyI18N(this.i18nValue);
};
/**
* @return {?}
*/
TableModel.prototype.getTypeResolveService = /**
* @return {?}
*/
function () {
return this.typeResolveService;
};
/**
* @param {?} typeName
* @return {?}
*/
TableModel.prototype.resolveType = /**
* @param {?} typeName
* @return {?}
*/
function (typeName) {
if (this.typeResolveService === null || typeof this.typeResolveService === 'undefined' || typeof this.typeResolveService.resolveType !== 'function') {
return null;
}
return this.typeResolveService.resolveType(typeName);
};
/**
* @return {?}
*/
TableModel.prototype.getBodyComponentTypeName = /**
* @return {?}
*/
function () {
return this.bodyComponentTypeName;
};
/**
* @param {?} typeName
* @return {?}
*/
TableModel.prototype.setBodyComponentTypeName = /**
* @param {?} typeName
* @return {?}
*/
function (typeName) {
this.bodyComponentTypeName = typeName;
this.bodyComponentType = this.resolveType(typeName);
};
/**
* @return {?}
*/
TableModel.prototype.getBodyComponentOptions = /**
* @return {?}
*/
function () {
return this.bodyComponentOptions;
};
/**
* @param {?} options
* @return {?}
*/
TableModel.prototype.setBodyComponentOptions = /**
* @param {?} options
* @return {?}
*/
function (options) {
this.bodyComponentOptions = options;
};
/**
* @return {?}
*/
TableModel.prototype.getBodyComponentType = /**
* @return {?}
*/
function () {
return this.bodyComponentType;
};
/**
* @return {?}
*/
TableModel.prototype.getBodyCSSClass = /**
* @return {?}
*/
function () {
return this.bodyCSSClass;
};
/**
* @param {?} clazz
* @return {?}
*/
TableModel.prototype.setBodyCSSClass = /**
* @param {?} clazz
* @return {?}
*/
function (clazz) {
this.bodyCSSClass = clazz;
};
/**
* @return {?}
*/
TableModel.prototype.clear = /**
* @return {?}
*/
function () {
this.columnModels = [];
this.headerModel._clear();
this.rowModel._clear();
};
/**
* @return {?}
*/
TableModel.prototype.getHeaderModel = /**
* @return {?}
*/
function () {
return this.headerModel;
};
/**
* @return {?}
*/
TableModel.prototype.getRowModel = /**
* @return {?}
*/
function () {
return this.rowModel;
};
/**
* @return {?}
*/
TableModel.prototype.getColumnModels = /**
* @return {?}
*/
function () {
return [].concat(this.columnModels);
};
/**
* @param {?} index
* @return {?}
*/
TableModel.prototype.getColumnModelByIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
if (typeof index !== 'number') {
return null;
}
if (index < 0 || index >= this.columnModels.length) {
return null;
}
return this.columnModels[index];
};
/**
* @param {?} index
* @param {?} options
* @return {?}
*/
TableModel.prototype.addColumnAtIndex = /**
* @param {?} index
* @param {?} options
* @return {?}
*/
function (index, options) {
if (typeof index !== 'number') {
index = this.columnModels.length;
}
if (index < 0 || index > this.columnModels.length) {
throw new Error('The given "index" is out of bound [len=' + this.columnModels.length + ']');
}
if (options === null || typeof options !== 'object') {
options = {};
}
var /** @type {?} */ headerCellModel = null;
var /** @type {?} */ bodyCellModel = null;
try {
// Try to add header / body cell first
headerCellModel = this.headerModel._addCellModelAtIndex(index, options['header']);
bodyCellModel = this.rowModel._addCellModelAtIndex(index, options['body']);
// Then, add a new column model into this.columnModels.
var /** @type {?} */ columnModel = new TableColumnModel(this);
columnModel.setOptions(options);
// Auto apply i18n
if (this.i18nValue !== null && typeof this.i18nValue === 'object') {
if (this.i18nValue['columns'] !== null && Array.isArray(this.i18nValue['columns'])) {
var /** @type {?} */ i18nArray = /** @type {?} */ (this.i18nValue['columns']);
if (i18nArray.length > index) {
columnModel.applyI18N(i18nArray[index]);
}
}
}
// Insert columnModel into specified "index".
this.columnModels.splice(index, 0, columnModel);
return columnModel;
}
catch (/** @type {?} */ error) {
// If any error occurs, revert changes.
if (headerCellModel !== null) {
this.headerModel._removeCellModel(headerCellModel);
}
if (bodyCellModel !== null) {
this.rowModel._removeCellModel(bodyCellModel);
}
throw error;
}
};
/**
* @param {?} options
* @return {?}
*/
TableModel.prototype.addColumn = /**
* @param {?} options
* @return {?}
*/
function (options) {
return this.addColumnAtIndex(this.columnModels.length, options);
};
/**
* @param {?} columnModel
* @return {?}
*/
TableModel.prototype.getColumnModelIndex = /**
* @param {?} columnModel
* @return {?}
*/
function (columnModel) {
if (columnModel === null || typeof columnModel === 'undefined') {
return -1;
}
return this.columnModels.indexOf(columnModel);
};
/**
* @param {?} columnModel
* @return {?}
*/
TableModel.prototype.removeColumn = /**
* @param {?} columnModel
* @return {?}
*/
function (columnModel) {
var /** @type {?} */ index = this.getColumnModelIndex(columnModel);
if (index < 0) {
return false;
}
this.headerModel._removeCellModelByIndex(index);
this.rowModel._removeCellModelByIndex(index);
this.columnModels.splice(index, 1);
return true;
};
/**
* @param {?} index
* @return {?}
*/
TableModel.prototype.removeColumnIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
var /** @type {?} */ columnModel = this.getColumnModelByIndex(index);
if (columnModel === null) {
return null;
}
this.headerModel._removeCellModelByIndex(index);
this.rowModel._removeCellModelByIndex(index);
this.columnModels.splice(index, 1);
return columnModel;
};
tslib_1.__decorate([
Option('header'),
tslib_1.__metadata("design:type", TableRowModel)
], TableModel.prototype, "headerModel", void 0);
tslib_1.__decorate([
Option('body.type'),
tslib_1.__metadata("design:type", String)
], TableModel.prototype, "bodyComponentTypeName", void 0);
tslib_1.__decorate([
Option('body.options'),
tslib_1.__metadata("design:type", Object)
], TableModel.prototype, "bodyComponentOptions", void 0);
tslib_1.__decorate([
Option('body.row'),
tslib_1.__metadata("design:type", TableRowModel)
], TableModel.prototype, "rowModel", void 0);
tslib_1.__decorate([
Option('body.class'),
tslib_1.__metadata("design:type", String)
], TableModel.prototype, "bodyCSSClass", void 0);
tslib_1.__decorate([
I18N('columns'),
tslib_1.__metadata("design:type", Array)
], TableModel.prototype, "columnModels", void 0);
return TableModel;
}(AbstractI18NApplicable));
export { TableModel };
function TableModel_tsickle_Closure_declarations() {
/** @type {?} */
TableModel.prototype.headerModel;
/** @type {?} */
TableModel.prototype.bodyComponentTypeName;
/** @type {?} */
TableModel.prototype.bodyComponentOptions;
/** @type {?} */
TableModel.prototype.rowModel;
/** @type {?} */
TableModel.prototype.bodyCSSClass;
/** @type {?} */
TableModel.prototype.columnModels;
/** @type {?} */
TableModel.prototype.typeResolveService;
/** @type {?} */
TableModel.prototype.bodyComponentType;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9tb2RlbC9UYWJsZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUl0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0lBR2hCLHNDQUFzQjt3QkFtQmpDLGtCQUF1QjtvQkFDeEMsaUJBQU87UUFFUCxLQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsS0FBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUMzQyxLQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxDQUFDLEtBQUksQ0FBQyxDQUFDOzs7Ozs7O0lBSW5DLCtCQUFVOzs7O2NBQUMsT0FBWTs7UUFFNUIsaUJBQU0sVUFBVSxZQUFDLE9BQU8sQ0FBQyxDQUFDOztRQUcxQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQzs7UUFHL0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWIsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sQ0FBQztTQUNSO1FBQ0QsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUks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QyxNQUFNLENBQUMsV0FBVyxDQUFDOzs7O1FBRW5CLE1BQU0sQ0FBQyxjQUFjLENBQUM7Ozs7UUFFdEIsTUFBTSxDQUFDLFVBQVUsQ0FBQzswQ0FDQyxhQUFhOzs7UUFDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQzs7OztRQUdwQixJQUFJLENBQUMsU0FBUyxDQUFDOzs7cUJBMUJsQjtFQWFnQyxzQkFBc0I7U0FBekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RJMThOQXBwbGljYWJsZSB9IGZyb20gJy4uLy4uL3NoYXJlL0Fic3RyYWN0STE4TkFwcGxpY2FibGUnO1xuXG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcblxuLy8gaW1wb3J0IHsgVHlwZVJlc29sdmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9UeXBlUmVzb2x2ZVNlcnZpY2Uuc2VydmljZSc7XG5cbmltcG9ydCB7IFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuL1RhYmxlQ29sdW1uTW9kZWwnO1xuaW1wb3J0IHsgVGFibGVSb3dNb2RlbCB9IGZyb20gJy4vVGFibGVSb3dNb2RlbCc7XG5pbXBvcnQgeyBUYWJsZUNlbGxNb2RlbCB9IGZyb20gJy4vVGFibGVDZWxsTW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVNb2RlbCBleHRlbmRzIEFic3RyYWN0STE4TkFwcGxpY2FibGUge1xuXG4gIEBPcHRpb24oJ2hlYWRlcicpXG4gIHByb3RlY3RlZCBoZWFkZXJNb2RlbDogVGFibGVSb3dNb2RlbDtcbiAgQE9wdGlvbignYm9keS50eXBlJylcbiAgcHJvdGVjdGVkIGJvZHlDb21wb25lbnRUeXBlTmFtZTogc3RyaW5nO1xuICBAT3B0aW9uKCdib2R5Lm9wdGlvbnMnKVxuICBwcm90ZWN0ZWQgYm9keUNvbXBvbmVudE9wdGlvbnM6IGFueTtcbiAgQE9wdGlvbignYm9keS5yb3cnKVxuICBwcm90ZWN0ZWQgcm93TW9kZWw6IFRhYmxlUm93TW9kZWw7XG4gIEBPcHRpb24oJ2JvZHkuY2xhc3MnKVxuICBwcm90ZWN0ZWQgYm9keUNTU0NsYXNzOiBzdHJpbmc7XG5cbiAgQEkxOE4oJ2NvbHVtbnMnKVxuICBwcm90ZWN0ZWQgY29sdW1uTW9kZWxzOiBUYWJsZUNvbHVtbk1vZGVsW107XG5cbiAgcHJvdGVjdGVkIHR5cGVSZXNvbHZlU2VydmljZTogYW55O1xuICBwcm90ZWN0ZWQgYm9keUNvbXBvbmVudFR5cGU6IFR5cGU8YW55PjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZVJlc29sdmVTZXJ2aWNlOiBhbnkpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy50eXBlUmVzb2x2ZVNlcnZpY2UgPSB0eXBlUmVzb2x2ZVNlcnZpY2U7XG4gICAgdGhpcy5jb2x1bW5Nb2RlbHMgPSBbXTtcbiAgICB0aGlzLmhlYWRlck1vZGVsID0gbmV3IFRhYmxlUm93TW9kZWwodGhpcyk7XG4gICAgdGhpcy5yb3dNb2RlbCA9IG5ldyBUYWJsZVJvd01vZGVsKHRoaXMpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGVcbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgLy8gQ2FsbCBzdXBlci5zZXRPcHRpb25zKCkgdG8gYXV0byByZXNvbHZlIEBPcHRpb24gZmllbGRzXG4gICAgc3VwZXIuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIC8vIENhbGwgc2V0IGNvbXBvbmVudCB0eXBlIG5hbWUgdG8gYXV0byByZXNvbHZlIGNvbXBvZW50IHR5cGVcbiAgICB0aGlzLnNldEJvZHlDb21wb25lbnRUeXBlTmFtZSh0aGlzLmdldEJvZHlDb21wb25lbnRUeXBlTmFtZSgpKTtcblxuICAgIC8vIENsZWFyICYgcmVidWlsZCBjb2x1bW4gbW9kZWxzXG4gICAgdGhpcy5jbGVhcigpO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcHRpb25zWydjb2x1bW5zJ10gPT09IG51bGwgfHwgIUFycmF5LmlzQXJyYXkob3B0aW9uc1snY29sdW1ucyddKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb2x1bW5PcHRzOiBhbnlbXSA9IDxhbnlbXT4gb3B0aW9uc1snY29sdW1ucyddO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5PcHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFkZENvbHVtbihjb2x1bW5PcHRzW2ldKTtcbiAgICB9XG5cbiAgICAvLyBBdXRvIGFwcGx5IGN1cnJlbnQgaTE4biB2YWx1ZVxuICAgIHRoaXMuYXBwbHlJMThOKHRoaXMuaTE4blZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUeXBlUmVzb2x2ZVNlcnZpY2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50eXBlUmVzb2x2ZVNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZVR5cGUodHlwZU5hbWU6IHN0cmluZyk6IFR5cGU8YW55PiB7XG4gICAgaWYgKHRoaXMudHlwZVJlc29sdmVTZXJ2aWNlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLnR5cGVSZXNvbHZlU2VydmljZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHRoaXMudHlwZVJlc29sdmVTZXJ2aWNlLnJlc29sdmVUeXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50eXBlUmVzb2x2ZVNlcnZpY2UucmVzb2x2ZVR5cGUodHlwZU5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldEJvZHlDb21wb25lbnRUeXBlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJvZHlDb21wb25lbnRUeXBlTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCb2R5Q29tcG9uZW50VHlwZU5hbWUodHlwZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYm9keUNvbXBvbmVudFR5cGVOYW1lID0gdHlwZU5hbWU7XG4gICAgdGhpcy5ib2R5Q29tcG9uZW50VHlwZSA9IHRoaXMucmVzb2x2ZVR5cGUodHlwZU5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldEJvZHlDb21wb25lbnRPcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUNvbXBvbmVudE9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc2V0Qm9keUNvbXBvbmVudE9wdGlvbnMob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5ib2R5Q29tcG9uZW50T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keUNvbXBvbmVudFR5cGUoKTogVHlwZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5ib2R5Q29tcG9uZW50VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb2R5Q1NTQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ib2R5Q1NTQ2xhc3M7XG4gIH1cblxuICBwdWJsaWMgc2V0Qm9keUNTU0NsYXNzKGNsYXp6OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmJvZHlDU1NDbGFzcyA9IGNsYXp6O1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uTW9kZWxzID0gW107XG4gICAgdGhpcy5oZWFkZXJNb2RlbC5fY2xlYXIoKTtcbiAgICB0aGlzLnJvd01vZGVsLl9jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlck1vZGVsKCk6IFRhYmxlUm93TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmhlYWRlck1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldFJvd01vZGVsKCk6IFRhYmxlUm93TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnJvd01vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbk1vZGVscygpOiBUYWJsZUNvbHVtbk1vZGVsW10ge1xuICAgIHJldHVybiBbXS5jb25jYXQodGhpcy5jb2x1bW5Nb2RlbHMpO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleDogbnVtYmVyKTogVGFibGVDb2x1bW5Nb2RlbCB7XG4gICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY29sdW1uTW9kZWxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTW9kZWxzW2luZGV4XTtcbiAgfVxuXG4gIC8vIG9wdGlvbnMgPSB7IGhlYWRlcjoge30sIGJvZHk6IHt9LCAuLi4gY29sdW1uIG1vZGVsIG9wdGlvbiBmaWVsZHMgLi4uIH1cbiAgcHVibGljIGFkZENvbHVtbkF0SW5kZXgoaW5kZXg6IG51bWJlciwgb3B0aW9uczogYW55KTogVGFibGVDb2x1bW5Nb2RlbCB7XG4gICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGluZGV4ID0gdGhpcy5jb2x1bW5Nb2RlbHMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGhpcy5jb2x1bW5Nb2RlbHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBnaXZlbiBcImluZGV4XCIgaXMgb3V0IG9mIGJvdW5kIFtsZW49JyArIHRoaXMuY29sdW1uTW9kZWxzLmxlbmd0aCArICddJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGxldCBoZWFkZXJDZWxsTW9kZWw6IFRhYmxlQ2VsbE1vZGVsID0gbnVsbDtcbiAgICBsZXQgYm9keUNlbGxNb2RlbDogVGFibGVDZWxsTW9kZWwgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBhZGQgaGVhZGVyIC8gYm9keSBjZWxsIGZpcnN0XG4gICAgICBoZWFkZXJDZWxsTW9kZWwgPSB0aGlzLmhlYWRlck1vZGVsLl9hZGRDZWxsTW9kZWxBdEluZGV4KGluZGV4LCBvcHRpb25zWydoZWFkZXInXSk7XG4gICAgICBib2R5Q2VsbE1vZGVsID0gdGhpcy5yb3dNb2RlbC5fYWRkQ2VsbE1vZGVsQXRJbmRleChpbmRleCwgb3B0aW9uc1snYm9keSddKTtcblxuICAgICAgLy8gVGhlbiwgYWRkIGEgbmV3IGNvbHVtbiBtb2RlbCBpbnRvIHRoaXMuY29sdW1uTW9kZWxzLlxuICAgICAgbGV0IGNvbHVtbk1vZGVsOiBUYWJsZUNvbHVtbk1vZGVsID0gbmV3IFRhYmxlQ29sdW1uTW9kZWwodGhpcyk7XG5cbiAgICAgIGNvbHVtbk1vZGVsLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgIC8vIEF1dG8gYXBwbHkgaTE4blxuICAgICAgaWYgKHRoaXMuaTE4blZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmkxOG5WYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHRoaXMuaTE4blZhbHVlWydjb2x1bW5zJ10gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmkxOG5WYWx1ZVsnY29sdW1ucyddKSkge1xuICAgICAgICAgIGxldCBpMThuQXJyYXk6IGFueVtdID0gPGFueVtdPiB0aGlzLmkxOG5WYWx1ZVsnY29sdW1ucyddO1xuXG4gICAgICAgICAgaWYgKGkxOG5BcnJheS5sZW5ndGggPiBpbmRleCkge1xuICAgICAgICAgICAgY29sdW1uTW9kZWwuYXBwbHlJMThOKGkxOG5BcnJheVtpbmRleF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJbnNlcnQgY29sdW1uTW9kZWwgaW50byBzcGVjaWZpZWQgXCJpbmRleFwiLlxuICAgICAgdGhpcy5jb2x1bW5Nb2RlbHMuc3BsaWNlKGluZGV4LCAwLCBjb2x1bW5Nb2RlbCk7XG5cbiAgICAgIHJldHVybiBjb2x1bW5Nb2RlbDtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAvLyBJZiBhbnkgZXJyb3Igb2NjdXJzLCByZXZlcnQgY2hhbmdlcy5cbiAgICAgIGlmIChoZWFkZXJDZWxsTW9kZWwgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJNb2RlbC5fcmVtb3ZlQ2VsbE1vZGVsKGhlYWRlckNlbGxNb2RlbCk7XG4gICAgICB9XG4gICAgICBpZiAoYm9keUNlbGxNb2RlbCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJvd01vZGVsLl9yZW1vdmVDZWxsTW9kZWwoYm9keUNlbGxNb2RlbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRDb2x1bW4ob3B0aW9uczogYW55KTogVGFibGVDb2x1bW5Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uQXRJbmRleCh0aGlzLmNvbHVtbk1vZGVscy5sZW5ndGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbk1vZGVsSW5kZXgoY29sdW1uTW9kZWw6IFRhYmxlQ29sdW1uTW9kZWwpOiBudW1iZXIge1xuICAgIGlmIChjb2x1bW5Nb2RlbCA9PT0gbnVsbCB8fCB0eXBlb2YgY29sdW1uTW9kZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTW9kZWxzLmluZGV4T2YoY29sdW1uTW9kZWwpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUNvbHVtbihjb2x1bW5Nb2RlbDogVGFibGVDb2x1bW5Nb2RlbCk6IGJvb2xlYW4ge1xuICAgIGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5nZXRDb2x1bW5Nb2RlbEluZGV4KGNvbHVtbk1vZGVsKTtcblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlck1vZGVsLl9yZW1vdmVDZWxsTW9kZWxCeUluZGV4KGluZGV4KTtcbiAgICB0aGlzLnJvd01vZGVsLl9yZW1vdmVDZWxsTW9kZWxCeUluZGV4KGluZGV4KTtcblxuICAgIHRoaXMuY29sdW1uTW9kZWxzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb2x1bW5JbmRleChpbmRleDogbnVtYmVyKTogVGFibGVDb2x1bW5Nb2RlbCB7XG4gICAgbGV0IGNvbHVtbk1vZGVsOiBUYWJsZUNvbHVtbk1vZGVsID0gdGhpcy5nZXRDb2x1bW5Nb2RlbEJ5SW5kZXgoaW5kZXgpO1xuXG4gICAgaWYgKGNvbHVtbk1vZGVsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlck1vZGVsLl9yZW1vdmVDZWxsTW9kZWxCeUluZGV4KGluZGV4KTtcbiAgICB0aGlzLnJvd01vZGVsLl9yZW1vdmVDZWxsTW9kZWxCeUluZGV4KGluZGV4KTtcblxuICAgIHRoaXMuY29sdW1uTW9kZWxzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICByZXR1cm4gY29sdW1uTW9kZWw7XG4gIH1cblxufVxuIl19