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 '../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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL21vZGVsL1RhYmxlTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSW5ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7SUFHaEIsc0NBQXNCO3dCQW1CakMsa0JBQXVCO29CQUN4QyxpQkFBTztRQUVQLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxLQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFJLENBQUMsV0FBVyxHQUFHLElBQUksYUFBYSxDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQzNDLEtBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsS0FBSSxDQUFDLENBQUM7Ozs7Ozs7SUFJbkMsK0JBQVU7Ozs7Y0FBQyxPQUFZOztRQUU1QixpQkFBTSxVQUFVLFlBQUMsT0FBTyxDQUFDLENBQUM7O1FBRzFCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDOztRQUcvRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDcEQsTUFBTSxDQUFDO1NBQ1I7UUFDRCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMs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QyxXQUFXLENBQUM7Ozs7UUFFbkIsTUFBTSxDQUFDLGNBQWMsQ0FBQzs7OztRQUV0QixNQUFNLENBQUMsVUFBVSxDQUFDOzBDQUNDLGFBQWE7OztRQUNoQyxNQUFNLENBQUMsWUFBWSxDQUFDOzs7O1FBR3BCLElBQUksQ0FBQyxTQUFTLENBQUM7OztxQkExQmxCO0VBYWdDLHNCQUFzQjtTQUF6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIH0gZnJvbSAnLi4vQWJzdHJhY3RJMThOQXBwbGljYWJsZSc7XG5cbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuLi9kZWNvcmF0b3IvSTE4Ti5kZWNvcmF0b3InO1xuXG4vLyBpbXBvcnQgeyBUeXBlUmVzb2x2ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL1R5cGVSZXNvbHZlU2VydmljZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4vVGFibGVDb2x1bW5Nb2RlbCc7XG5pbXBvcnQgeyBUYWJsZVJvd01vZGVsIH0gZnJvbSAnLi9UYWJsZVJvd01vZGVsJztcbmltcG9ydCB7IFRhYmxlQ2VsbE1vZGVsIH0gZnJvbSAnLi9UYWJsZUNlbGxNb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RJMThOQXBwbGljYWJsZSB7XG5cbiAgQE9wdGlvbignaGVhZGVyJylcbiAgcHJvdGVjdGVkIGhlYWRlck1vZGVsOiBUYWJsZVJvd01vZGVsO1xuICBAT3B0aW9uKCdib2R5LnR5cGUnKVxuICBwcm90ZWN0ZWQgYm9keUNvbXBvbmVudFR5cGVOYW1lOiBzdHJpbmc7XG4gIEBPcHRpb24oJ2JvZHkub3B0aW9ucycpXG4gIHByb3RlY3RlZCBib2R5Q29tcG9uZW50T3B0aW9uczogYW55O1xuICBAT3B0aW9uKCdib2R5LnJvdycpXG4gIHByb3RlY3RlZCByb3dNb2RlbDogVGFibGVSb3dNb2RlbDtcbiAgQE9wdGlvbignYm9keS5jbGFzcycpXG4gIHByb3RlY3RlZCBib2R5Q1NTQ2xhc3M6IHN0cmluZztcblxuICBASTE4TignY29sdW1ucycpXG4gIHByb3RlY3RlZCBjb2x1bW5Nb2RlbHM6IFRhYmxlQ29sdW1uTW9kZWxbXTtcblxuICBwcm90ZWN0ZWQgdHlwZVJlc29sdmVTZXJ2aWNlOiBhbnk7XG4gIHByb3RlY3RlZCBib2R5Q29tcG9uZW50VHlwZTogVHlwZTxhbnk+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0eXBlUmVzb2x2ZVNlcnZpY2U6IGFueSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnR5cGVSZXNvbHZlU2VydmljZSA9IHR5cGVSZXNvbHZlU2VydmljZTtcbiAgICB0aGlzLmNvbHVtbk1vZGVscyA9IFtdO1xuICAgIHRoaXMuaGVhZGVyTW9kZWwgPSBuZXcgVGFibGVSb3dNb2RlbCh0aGlzKTtcbiAgICB0aGlzLnJvd01vZGVsID0gbmV3IFRhYmxlUm93TW9kZWwodGhpcyk7XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBDYWxsIHN1cGVyLnNldE9wdGlvbnMoKSB0byBhdXRvIHJlc29sdmUgQE9wdGlvbiBmaWVsZHNcbiAgICBzdXBlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gQ2FsbCBzZXQgY29tcG9uZW50IHR5cGUgbmFtZSB0byBhdXRvIHJlc29sdmUgY29tcG9lbnQgdHlwZVxuICAgIHRoaXMuc2V0Qm9keUNvbXBvbmVudFR5cGVOYW1lKHRoaXMuZ2V0Qm9keUNvbXBvbmVudFR5cGVOYW1lKCkpO1xuXG4gICAgLy8gQ2xlYXIgJiByZWJ1aWxkIGNvbHVtbiBtb2RlbHNcbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnNbJ2NvbHVtbnMnXSA9PT0gbnVsbCB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zWydjb2x1bW5zJ10pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNvbHVtbk9wdHM6IGFueVtdID0gPGFueVtdPiBvcHRpb25zWydjb2x1bW5zJ107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbk9wdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkQ29sdW1uKGNvbHVtbk9wdHNbaV0pO1xuICAgIH1cblxuICAgIC8vIEF1dG8gYXBwbHkgY3VycmVudCBpMThuIHZhbHVlXG4gICAgdGhpcy5hcHBseUkxOE4odGhpcy5pMThuVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldFR5cGVSZXNvbHZlU2VydmljZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnR5cGVSZXNvbHZlU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlVHlwZSh0eXBlTmFtZTogc3RyaW5nKTogVHlwZTxhbnk+IHtcbiAgICBpZiAodGhpcy50eXBlUmVzb2x2ZVNlcnZpY2UgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMudHlwZVJlc29sdmVTZXJ2aWNlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdGhpcy50eXBlUmVzb2x2ZVNlcnZpY2UucmVzb2x2ZVR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnR5cGVSZXNvbHZlU2VydmljZS5yZXNvbHZlVHlwZSh0eXBlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keUNvbXBvbmVudFR5cGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUNvbXBvbmVudFR5cGVOYW1lO1xuICB9XG5cbiAgcHVibGljIHNldEJvZHlDb21wb25lbnRUeXBlTmFtZSh0eXBlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ib2R5Q29tcG9uZW50VHlwZU5hbWUgPSB0eXBlTmFtZTtcbiAgICB0aGlzLmJvZHlDb21wb25lbnRUeXBlID0gdGhpcy5yZXNvbHZlVHlwZSh0eXBlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keUNvbXBvbmVudE9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5ib2R5Q29tcG9uZW50T3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBzZXRCb2R5Q29tcG9uZW50T3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmJvZHlDb21wb25lbnRPcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb2R5Q29tcG9uZW50VHlwZSgpOiBUeXBlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJvZHlDb21wb25lbnRUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldEJvZHlDU1NDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJvZHlDU1NDbGFzcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRCb2R5Q1NTQ2xhc3MoY2xheno6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYm9keUNTU0NsYXNzID0gY2xheno7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5Nb2RlbHMgPSBbXTtcbiAgICB0aGlzLmhlYWRlck1vZGVsLl9jbGVhcigpO1xuICAgIHRoaXMucm93TW9kZWwuX2NsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVhZGVyTW9kZWwoKTogVGFibGVSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93TW9kZWwoKTogVGFibGVSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucm93TW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uTW9kZWxzKCk6IFRhYmxlQ29sdW1uTW9kZWxbXSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCh0aGlzLmNvbHVtbk1vZGVscyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJsZUNvbHVtbk1vZGVsIHtcbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jb2x1bW5Nb2RlbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5Nb2RlbHNbaW5kZXhdO1xuICB9XG5cbiAgLy8gb3B0aW9ucyA9IHsgaGVhZGVyOiB7fSwgYm9keToge30sIC4uLiBjb2x1bW4gbW9kZWwgb3B0aW9uIGZpZWxkcyAuLi4gfVxuICBwdWJsaWMgYWRkQ29sdW1uQXRJbmRleChpbmRleDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBUYWJsZUNvbHVtbk1vZGVsIHtcbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgaW5kZXggPSB0aGlzLmNvbHVtbk1vZGVscy5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLmNvbHVtbk1vZGVscy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIFwiaW5kZXhcIiBpcyBvdXQgb2YgYm91bmQgW2xlbj0nICsgdGhpcy5jb2x1bW5Nb2RlbHMubGVuZ3RoICsgJ10nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgbGV0IGhlYWRlckNlbGxNb2RlbDogVGFibGVDZWxsTW9kZWwgPSBudWxsO1xuICAgIGxldCBib2R5Q2VsbE1vZGVsOiBUYWJsZUNlbGxNb2RlbCA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIGFkZCBoZWFkZXIgLyBib2R5IGNlbGwgZmlyc3RcbiAgICAgIGhlYWRlckNlbGxNb2RlbCA9IHRoaXMuaGVhZGVyTW9kZWwuX2FkZENlbGxNb2RlbEF0SW5kZXgoaW5kZXgsIG9wdGlvbnNbJ2hlYWRlciddKTtcbiAgICAgIGJvZHlDZWxsTW9kZWwgPSB0aGlzLnJvd01vZGVsLl9hZGRDZWxsTW9kZWxBdEluZGV4KGluZGV4LCBvcHRpb25zWydib2R5J10pO1xuXG4gICAgICAvLyBUaGVuLCBhZGQgYSBuZXcgY29sdW1uIG1vZGVsIGludG8gdGhpcy5jb2x1bW5Nb2RlbHMuXG4gICAgICBsZXQgY29sdW1uTW9kZWw6IFRhYmxlQ29sdW1uTW9kZWwgPSBuZXcgVGFibGVDb2x1bW5Nb2RlbCh0aGlzKTtcblxuICAgICAgY29sdW1uTW9kZWwuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgLy8gQXV0byBhcHBseSBpMThuXG4gICAgICBpZiAodGhpcy5pMThuVmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaTE4blZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAodGhpcy5pMThuVmFsdWVbJ2NvbHVtbnMnXSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHRoaXMuaTE4blZhbHVlWydjb2x1bW5zJ10pKSB7XG4gICAgICAgICAgbGV0IGkxOG5BcnJheTogYW55W10gPSA8YW55W10+IHRoaXMuaTE4blZhbHVlWydjb2x1bW5zJ107XG5cbiAgICAgICAgICBpZiAoaTE4bkFycmF5Lmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICAgICAgICBjb2x1bW5Nb2RlbC5hcHBseUkxOE4oaTE4bkFycmF5W2luZGV4XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluc2VydCBjb2x1bW5Nb2RlbCBpbnRvIHNwZWNpZmllZCBcImluZGV4XCIuXG4gICAgICB0aGlzLmNvbHVtbk1vZGVscy5zcGxpY2UoaW5kZXgsIDAsIGNvbHVtbk1vZGVsKTtcblxuICAgICAgcmV0dXJuIGNvbHVtbk1vZGVsO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIC8vIElmIGFueSBlcnJvciBvY2N1cnMsIHJldmVydCBjaGFuZ2VzLlxuICAgICAgaWYgKGhlYWRlckNlbGxNb2RlbCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhlYWRlck1vZGVsLl9yZW1vdmVDZWxsTW9kZWwoaGVhZGVyQ2VsbE1vZGVsKTtcbiAgICAgIH1cbiAgICAgIGlmIChib2R5Q2VsbE1vZGVsICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucm93TW9kZWwuX3JlbW92ZUNlbGxNb2RlbChib2R5Q2VsbE1vZGVsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZENvbHVtbihvcHRpb25zOiBhbnkpOiBUYWJsZUNvbHVtbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW5BdEluZGV4KHRoaXMuY29sdW1uTW9kZWxzLmxlbmd0aCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uTW9kZWxJbmRleChjb2x1bW5Nb2RlbDogVGFibGVDb2x1bW5Nb2RlbCk6IG51bWJlciB7XG4gICAgaWYgKGNvbHVtbk1vZGVsID09PSBudWxsIHx8IHR5cGVvZiBjb2x1bW5Nb2RlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5Nb2RlbHMuaW5kZXhPZihjb2x1bW5Nb2RlbCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ29sdW1uKGNvbHVtbk1vZGVsOiBUYWJsZUNvbHVtbk1vZGVsKTogYm9vbGVhbiB7XG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLmdldENvbHVtbk1vZGVsSW5kZXgoY29sdW1uTW9kZWwpO1xuXG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyTW9kZWwuX3JlbW92ZUNlbGxNb2RlbEJ5SW5kZXgoaW5kZXgpO1xuICAgIHRoaXMucm93TW9kZWwuX3JlbW92ZUNlbGxNb2RlbEJ5SW5kZXgoaW5kZXgpO1xuXG4gICAgdGhpcy5jb2x1bW5Nb2RlbHMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUNvbHVtbkluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJsZUNvbHVtbk1vZGVsIHtcbiAgICBsZXQgY29sdW1uTW9kZWw6IFRhYmxlQ29sdW1uTW9kZWwgPSB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleCk7XG5cbiAgICBpZiAoY29sdW1uTW9kZWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyTW9kZWwuX3JlbW92ZUNlbGxNb2RlbEJ5SW5kZXgoaW5kZXgpO1xuICAgIHRoaXMucm93TW9kZWwuX3JlbW92ZUNlbGxNb2RlbEJ5SW5kZXgoaW5kZXgpO1xuXG4gICAgdGhpcy5jb2x1bW5Nb2RlbHMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHJldHVybiBjb2x1bW5Nb2RlbDtcbiAgfVxuXG59XG4iXX0=