UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

357 lines (356 loc) 27 kB
/** * @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=