com.phloxui
Version:
PhloxUI Ng2+ Framework
284 lines (283 loc) • 25 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';
export class TableModel extends AbstractI18NApplicable {
/**
* @param {?} typeResolveService
*/
constructor(typeResolveService) {
super();
this.typeResolveService = typeResolveService;
this.columnModels = [];
this.headerModel = new TableRowModel(this);
this.rowModel = new TableRowModel(this);
}
/**
* @param {?} options
* @return {?}
*/
setOptions(options) {
// Call super.setOptions() to auto resolve @Option fields
super.setOptions(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;
}
let /** @type {?} */ columnOpts = /** @type {?} */ (options['columns']);
for (let /** @type {?} */ i = 0; i < columnOpts.length; i++) {
this.addColumn(columnOpts[i]);
}
// Auto apply current i18n value
this.applyI18N(this.i18nValue);
}
/**
* @return {?}
*/
getTypeResolveService() {
return this.typeResolveService;
}
/**
* @param {?} typeName
* @return {?}
*/
resolveType(typeName) {
if (this.typeResolveService === null || typeof this.typeResolveService === 'undefined' || typeof this.typeResolveService.resolveType !== 'function') {
return null;
}
return this.typeResolveService.resolveType(typeName);
}
/**
* @return {?}
*/
getBodyComponentTypeName() {
return this.bodyComponentTypeName;
}
/**
* @param {?} typeName
* @return {?}
*/
setBodyComponentTypeName(typeName) {
this.bodyComponentTypeName = typeName;
this.bodyComponentType = this.resolveType(typeName);
}
/**
* @return {?}
*/
getBodyComponentOptions() {
return this.bodyComponentOptions;
}
/**
* @param {?} options
* @return {?}
*/
setBodyComponentOptions(options) {
this.bodyComponentOptions = options;
}
/**
* @return {?}
*/
getBodyComponentType() {
return this.bodyComponentType;
}
/**
* @return {?}
*/
getBodyCSSClass() {
return this.bodyCSSClass;
}
/**
* @param {?} clazz
* @return {?}
*/
setBodyCSSClass(clazz) {
this.bodyCSSClass = clazz;
}
/**
* @return {?}
*/
clear() {
this.columnModels = [];
this.headerModel._clear();
this.rowModel._clear();
}
/**
* @return {?}
*/
getHeaderModel() {
return this.headerModel;
}
/**
* @return {?}
*/
getRowModel() {
return this.rowModel;
}
/**
* @return {?}
*/
getColumnModels() {
return [].concat(this.columnModels);
}
/**
* @param {?} index
* @return {?}
*/
getColumnModelByIndex(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 {?}
*/
addColumnAtIndex(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 = {};
}
let /** @type {?} */ headerCellModel = null;
let /** @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.
let /** @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'])) {
let /** @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 {?}
*/
addColumn(options) {
return this.addColumnAtIndex(this.columnModels.length, options);
}
/**
* @param {?} columnModel
* @return {?}
*/
getColumnModelIndex(columnModel) {
if (columnModel === null || typeof columnModel === 'undefined') {
return -1;
}
return this.columnModels.indexOf(columnModel);
}
/**
* @param {?} columnModel
* @return {?}
*/
removeColumn(columnModel) {
let /** @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 {?}
*/
removeColumnIndex(index) {
let /** @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);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9tb2RlbC9UYWJsZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUl0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEQsTUFBTSxpQkFBa0IsU0FBUSxzQkFBc0I7Ozs7Z0JBbUJqQyxrQkFBdUI7UUFDeEMsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7Ozs7SUFJbkMsVUFBVSxDQUFDLE9BQVk7O1FBRTVCLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBRzFCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDOztRQUcvRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDcEQsTUFBTSxDQUFDO1NBQ1I7UUFDRCxFQUFFLENBQUMsQ0FBQyxPQUFP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Q0FBQyxjQUFjLENBQUM7Ozs7SUFFdEIsTUFBTSxDQUFDLFVBQVUsQ0FBQztzQ0FDQyxhQUFhOzs7SUFDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQzs7OztJQUdwQixJQUFJLENBQUMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIH0gZnJvbSAnLi4vLi4vc2hhcmUvQWJzdHJhY3RJMThOQXBwbGljYWJsZSc7XG5cbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuLi8uLi9kZWNvcmF0b3IvSTE4Ti5kZWNvcmF0b3InO1xuXG4vLyBpbXBvcnQgeyBUeXBlUmVzb2x2ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL1R5cGVSZXNvbHZlU2VydmljZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4vVGFibGVDb2x1bW5Nb2RlbCc7XG5pbXBvcnQgeyBUYWJsZVJvd01vZGVsIH0gZnJvbSAnLi9UYWJsZVJvd01vZGVsJztcbmltcG9ydCB7IFRhYmxlQ2VsbE1vZGVsIH0gZnJvbSAnLi9UYWJsZUNlbGxNb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RJMThOQXBwbGljYWJsZSB7XG5cbiAgQE9wdGlvbignaGVhZGVyJylcbiAgcHJvdGVjdGVkIGhlYWRlck1vZGVsOiBUYWJsZVJvd01vZGVsO1xuICBAT3B0aW9uKCdib2R5LnR5cGUnKVxuICBwcm90ZWN0ZWQgYm9keUNvbXBvbmVudFR5cGVOYW1lOiBzdHJpbmc7XG4gIEBPcHRpb24oJ2JvZHkub3B0aW9ucycpXG4gIHByb3RlY3RlZCBib2R5Q29tcG9uZW50T3B0aW9uczogYW55O1xuICBAT3B0aW9uKCdib2R5LnJvdycpXG4gIHByb3RlY3RlZCByb3dNb2RlbDogVGFibGVSb3dNb2RlbDtcbiAgQE9wdGlvbignYm9keS5jbGFzcycpXG4gIHByb3RlY3RlZCBib2R5Q1NTQ2xhc3M6IHN0cmluZztcblxuICBASTE4TignY29sdW1ucycpXG4gIHByb3RlY3RlZCBjb2x1bW5Nb2RlbHM6IFRhYmxlQ29sdW1uTW9kZWxbXTtcblxuICBwcm90ZWN0ZWQgdHlwZVJlc29sdmVTZXJ2aWNlOiBhbnk7XG4gIHByb3RlY3RlZCBib2R5Q29tcG9uZW50VHlwZTogVHlwZTxhbnk+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0eXBlUmVzb2x2ZVNlcnZpY2U6IGFueSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnR5cGVSZXNvbHZlU2VydmljZSA9IHR5cGVSZXNvbHZlU2VydmljZTtcbiAgICB0aGlzLmNvbHVtbk1vZGVscyA9IFtdO1xuICAgIHRoaXMuaGVhZGVyTW9kZWwgPSBuZXcgVGFibGVSb3dNb2RlbCh0aGlzKTtcbiAgICB0aGlzLnJvd01vZGVsID0gbmV3IFRhYmxlUm93TW9kZWwodGhpcyk7XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBDYWxsIHN1cGVyLnNldE9wdGlvbnMoKSB0byBhdXRvIHJlc29sdmUgQE9wdGlvbiBmaWVsZHNcbiAgICBzdXBlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gQ2FsbCBzZXQgY29tcG9uZW50IHR5cGUgbmFtZSB0byBhdXRvIHJlc29sdmUgY29tcG9lbnQgdHlwZVxuICAgIHRoaXMuc2V0Qm9keUNvbXBvbmVudFR5cGVOYW1lKHRoaXMuZ2V0Qm9keUNvbXBvbmVudFR5cGVOYW1lKCkpO1xuXG4gICAgLy8gQ2xlYXIgJiByZWJ1aWxkIGNvbHVtbiBtb2RlbHNcbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnNbJ2NvbHVtbnMnXSA9PT0gbnVsbCB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zWydjb2x1bW5zJ10pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNvbHVtbk9wdHM6IGFueVtdID0gPGFueVtdPiBvcHRpb25zWydjb2x1bW5zJ107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbk9wdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkQ29sdW1uKGNvbHVtbk9wdHNbaV0pO1xuICAgIH1cblxuICAgIC8vIEF1dG8gYXBwbHkgY3VycmVudCBpMThuIHZhbHVlXG4gICAgdGhpcy5hcHBseUkxOE4odGhpcy5pMThuVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldFR5cGVSZXNvbHZlU2VydmljZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnR5cGVSZXNvbHZlU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlVHlwZSh0eXBlTmFtZTogc3RyaW5nKTogVHlwZTxhbnk+IHtcbiAgICBpZiAodGhpcy50eXBlUmVzb2x2ZVNlcnZpY2UgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMudHlwZVJlc29sdmVTZXJ2aWNlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdGhpcy50eXBlUmVzb2x2ZVNlcnZpY2UucmVzb2x2ZVR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnR5cGVSZXNvbHZlU2VydmljZS5yZXNvbHZlVHlwZSh0eXBlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keUNvbXBvbmVudFR5cGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUNvbXBvbmVudFR5cGVOYW1lO1xuICB9XG5cbiAgcHVibGljIHNldEJvZHlDb21wb25lbnRUeXBlTmFtZSh0eXBlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ib2R5Q29tcG9uZW50VHlwZU5hbWUgPSB0eXBlTmFtZTtcbiAgICB0aGlzLmJvZHlDb21wb25lbnRUeXBlID0gdGhpcy5yZXNvbHZlVHlwZSh0eXBlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keUNvbXBvbmVudE9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5ib2R5Q29tcG9uZW50T3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBzZXRCb2R5Q29tcG9uZW50T3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmJvZHlDb21wb25lbnRPcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb2R5Q29tcG9uZW50VHlwZSgpOiBUeXBlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJvZHlDb21wb25lbnRUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldEJvZHlDU1NDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJvZHlDU1NDbGFzcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRCb2R5Q1NTQ2xhc3MoY2xheno6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYm9keUNTU0NsYXNzID0gY2xheno7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5Nb2RlbHMgPSBbXTtcbiAgICB0aGlzLmhlYWRlck1vZGVsLl9jbGVhcigpO1xuICAgIHRoaXMucm93TW9kZWwuX2NsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVhZGVyTW9kZWwoKTogVGFibGVSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93TW9kZWwoKTogVGFibGVSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucm93TW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uTW9kZWxzKCk6IFRhYmxlQ29sdW1uTW9kZWxbXSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCh0aGlzLmNvbHVtbk1vZGVscyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJsZUNvbHVtbk1vZGVsIHtcbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jb2x1bW5Nb2RlbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5Nb2RlbHNbaW5kZXhdO1xuICB9XG5cbiAgLy8gb3B0aW9ucyA9IHsgaGVhZGVyOiB7fSwgYm9keToge30sIC4uLiBjb2x1bW4gbW9kZWwgb3B0aW9uIGZpZWxkcyAuLi4gfVxuICBwdWJsaWMgYWRkQ29sdW1uQXRJbmRleChpbmRleDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBUYWJsZUNvbHVtbk1vZGVsIHtcbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgaW5kZXggPSB0aGlzLmNvbHVtbk1vZGVscy5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLmNvbHVtbk1vZGVscy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIFwiaW5kZXhcIiBpcyBvdXQgb2YgYm91bmQgW2xlbj0nICsgdGhpcy5jb2x1bW5Nb2RlbHMubGVuZ3RoICsgJ10nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgbGV0IGhlYWRlckNlbGxNb2RlbDogVGFibGVDZWxsTW9kZWwgPSBudWxsO1xuICAgIGxldCBib2R5Q2VsbE1vZGVsOiBUYWJsZUNlbGxNb2RlbCA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIGFkZCBoZWFkZXIgLyBib2R5IGNlbGwgZmlyc3RcbiAgICAgIGhlYWRlckNlbGxNb2RlbCA9IHRoaXMuaGVhZGVyTW9kZWwuX2FkZENlbGxNb2RlbEF0SW5kZXgoaW5kZXgsIG9wdGlvbnNbJ2hlYWRlciddKTtcbiAgICAgIGJvZHlDZWxsTW9kZWwgPSB0aGlzLnJvd01vZGVsLl9hZGRDZWxsTW9kZWxBdEluZGV4KGluZGV4LCBvcHRpb25zWydib2R5J10pO1xuXG4gICAgICAvLyBUaGVuLCBhZGQgYSBuZXcgY29sdW1uIG1vZGVsIGludG8gdGhpcy5jb2x1bW5Nb2RlbHMuXG4gICAgICBsZXQgY29sdW1uTW9kZWw6IFRhYmxlQ29sdW1uTW9kZWwgPSBuZXcgVGFibGVDb2x1bW5Nb2RlbCh0aGlzKTtcblxuICAgICAgY29sdW1uTW9kZWwuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgLy8gQXV0byBhcHBseSBpMThuXG4gICAgICBpZiAodGhpcy5pMThuVmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaTE4blZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAodGhpcy5pMThuVmFsdWVbJ2NvbHVtbnMnXSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHRoaXMuaTE4blZhbHVlWydjb2x1bW5zJ10pKSB7XG4gICAgICAgICAgbGV0IGkxOG5BcnJheTogYW55W10gPSA8YW55W10+IHRoaXMuaTE4blZhbHVlWydjb2x1bW5zJ107XG5cbiAgICAgICAgICBpZiAoaTE4bkFycmF5Lmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICAgICAgICBjb2x1bW5Nb2RlbC5hcHBseUkxOE4oaTE4bkFycmF5W2luZGV4XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluc2VydCBjb2x1bW5Nb2RlbCBpbnRvIHNwZWNpZmllZCBcImluZGV4XCIuXG4gICAgICB0aGlzLmNvbHVtbk1vZGVscy5zcGxpY2UoaW5kZXgsIDAsIGNvbHVtbk1vZGVsKTtcblxuICAgICAgcmV0dXJuIGNvbHVtbk1vZGVsO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIC8vIElmIGFueSBlcnJvciBvY2N1cnMsIHJldmVydCBjaGFuZ2VzLlxuICAgICAgaWYgKGhlYWRlckNlbGxNb2RlbCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhlYWRlck1vZGVsLl9yZW1vdmVDZWxsTW9kZWwoaGVhZGVyQ2VsbE1vZGVsKTtcbiAgICAgIH1cbiAgICAgIGlmIChib2R5Q2VsbE1vZGVsICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucm93TW9kZWwuX3JlbW92ZUNlbGxNb2RlbChib2R5Q2VsbE1vZGVsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZENvbHVtbihvcHRpb25zOiBhbnkpOiBUYWJsZUNvbHVtbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW5BdEluZGV4KHRoaXMuY29sdW1uTW9kZWxzLmxlbmd0aCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uTW9kZWxJbmRleChjb2x1bW5Nb2RlbDogVGFibGVDb2x1bW5Nb2RlbCk6IG51bWJlciB7XG4gICAgaWYgKGNvbHVtbk1vZGVsID09PSBudWxsIHx8IHR5cGVvZiBjb2x1bW5Nb2RlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5Nb2RlbHMuaW5kZXhPZihjb2x1bW5Nb2RlbCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ29sdW1uKGNvbHVtbk1vZGVsOiBUYWJsZUNvbHVtbk1vZGVsKTogYm9vbGVhbiB7XG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLmdldENvbHVtbk1vZGVsSW5kZXgoY29sdW1uTW9kZWwpO1xuXG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyTW9kZWwuX3JlbW92ZUNlbGxNb2RlbEJ5SW5kZXgoaW5kZXgpO1xuICAgIHRoaXMucm93TW9kZWwuX3JlbW92ZUNlbGxNb2RlbEJ5SW5kZXgoaW5kZXgpO1xuXG4gICAgdGhpcy5jb2x1bW5Nb2RlbHMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUNvbHVtbkluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJsZUNvbHVtbk1vZGVsIHtcbiAgICBsZXQgY29sdW1uTW9kZWw6IFRhYmxlQ29sdW1uTW9kZWwgPSB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleCk7XG5cbiAgICBpZiAoY29sdW1uTW9kZWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyTW9kZWwuX3JlbW92ZUNlbGxNb2RlbEJ5SW5kZXgoaW5kZXgpO1xuICAgIHRoaXMucm93TW9kZWwuX3JlbW92ZUNlbGxNb2RlbEJ5SW5kZXgoaW5kZXgpO1xuXG4gICAgdGhpcy5jb2x1bW5Nb2RlbHMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHJldHVybiBjb2x1bW5Nb2RlbDtcbiAgfVxuXG59XG4iXX0=