UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

284 lines (283 loc) 25 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'; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL21vZGVsL1RhYmxlTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSW5ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdoRCxNQUFNLGlCQUFrQixTQUFRLHNCQUFzQjs7OztnQkFtQmpDLGtCQUF1QjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7OztJQUluQyxVQUFVLENBQUMsT0FBWTs7UUFFNUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7UUFHMUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7O1FBRy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUViLEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNwRCxNQUFNLENBQUM7U0FDUjtRQUNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFT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Q0FBQzs7OztJQUV0QixNQUFNLENBQUMsVUFBVSxDQUFDO3NDQUNDLGFBQWE7OztJQUNoQyxNQUFNLENBQUMsWUFBWSxDQUFDOzs7O0lBR3BCLElBQUksQ0FBQyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0STE4TkFwcGxpY2FibGUgfSBmcm9tICcuLi9BYnN0cmFjdEkxOE5BcHBsaWNhYmxlJztcblxuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XG5cbi8vIGltcG9ydCB7IFR5cGVSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvVHlwZVJlc29sdmVTZXJ2aWNlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi9UYWJsZUNvbHVtbk1vZGVsJztcbmltcG9ydCB7IFRhYmxlUm93TW9kZWwgfSBmcm9tICcuL1RhYmxlUm93TW9kZWwnO1xuaW1wb3J0IHsgVGFibGVDZWxsTW9kZWwgfSBmcm9tICcuL1RhYmxlQ2VsbE1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIHtcblxuICBAT3B0aW9uKCdoZWFkZXInKVxuICBwcm90ZWN0ZWQgaGVhZGVyTW9kZWw6IFRhYmxlUm93TW9kZWw7XG4gIEBPcHRpb24oJ2JvZHkudHlwZScpXG4gIHByb3RlY3RlZCBib2R5Q29tcG9uZW50VHlwZU5hbWU6IHN0cmluZztcbiAgQE9wdGlvbignYm9keS5vcHRpb25zJylcbiAgcHJvdGVjdGVkIGJvZHlDb21wb25lbnRPcHRpb25zOiBhbnk7XG4gIEBPcHRpb24oJ2JvZHkucm93JylcbiAgcHJvdGVjdGVkIHJvd01vZGVsOiBUYWJsZVJvd01vZGVsO1xuICBAT3B0aW9uKCdib2R5LmNsYXNzJylcbiAgcHJvdGVjdGVkIGJvZHlDU1NDbGFzczogc3RyaW5nO1xuXG4gIEBJMThOKCdjb2x1bW5zJylcbiAgcHJvdGVjdGVkIGNvbHVtbk1vZGVsczogVGFibGVDb2x1bW5Nb2RlbFtdO1xuXG4gIHByb3RlY3RlZCB0eXBlUmVzb2x2ZVNlcnZpY2U6IGFueTtcbiAgcHJvdGVjdGVkIGJvZHlDb21wb25lbnRUeXBlOiBUeXBlPGFueT47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHR5cGVSZXNvbHZlU2VydmljZTogYW55KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMudHlwZVJlc29sdmVTZXJ2aWNlID0gdHlwZVJlc29sdmVTZXJ2aWNlO1xuICAgIHRoaXMuY29sdW1uTW9kZWxzID0gW107XG4gICAgdGhpcy5oZWFkZXJNb2RlbCA9IG5ldyBUYWJsZVJvd01vZGVsKHRoaXMpO1xuICAgIHRoaXMucm93TW9kZWwgPSBuZXcgVGFibGVSb3dNb2RlbCh0aGlzKTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIC8vIENhbGwgc3VwZXIuc2V0T3B0aW9ucygpIHRvIGF1dG8gcmVzb2x2ZSBAT3B0aW9uIGZpZWxkc1xuICAgIHN1cGVyLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBDYWxsIHNldCBjb21wb25lbnQgdHlwZSBuYW1lIHRvIGF1dG8gcmVzb2x2ZSBjb21wb2VudCB0eXBlXG4gICAgdGhpcy5zZXRCb2R5Q29tcG9uZW50VHlwZU5hbWUodGhpcy5nZXRCb2R5Q29tcG9uZW50VHlwZU5hbWUoKSk7XG5cbiAgICAvLyBDbGVhciAmIHJlYnVpbGQgY29sdW1uIG1vZGVsc1xuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0aW9uc1snY29sdW1ucyddID09PSBudWxsIHx8ICFBcnJheS5pc0FycmF5KG9wdGlvbnNbJ2NvbHVtbnMnXSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29sdW1uT3B0czogYW55W10gPSA8YW55W10+IG9wdGlvbnNbJ2NvbHVtbnMnXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uT3B0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRDb2x1bW4oY29sdW1uT3B0c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gQXV0byBhcHBseSBjdXJyZW50IGkxOG4gdmFsdWVcbiAgICB0aGlzLmFwcGx5STE4Tih0aGlzLmkxOG5WYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHlwZVJlc29sdmVTZXJ2aWNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZVJlc29sdmVTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmVUeXBlKHR5cGVOYW1lOiBzdHJpbmcpOiBUeXBlPGFueT4ge1xuICAgIGlmICh0aGlzLnR5cGVSZXNvbHZlU2VydmljZSA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy50eXBlUmVzb2x2ZVNlcnZpY2UgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB0aGlzLnR5cGVSZXNvbHZlU2VydmljZS5yZXNvbHZlVHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHlwZVJlc29sdmVTZXJ2aWNlLnJlc29sdmVUeXBlKHR5cGVOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb2R5Q29tcG9uZW50VHlwZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ib2R5Q29tcG9uZW50VHlwZU5hbWU7XG4gIH1cblxuICBwdWJsaWMgc2V0Qm9keUNvbXBvbmVudFR5cGVOYW1lKHR5cGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmJvZHlDb21wb25lbnRUeXBlTmFtZSA9IHR5cGVOYW1lO1xuICAgIHRoaXMuYm9keUNvbXBvbmVudFR5cGUgPSB0aGlzLnJlc29sdmVUeXBlKHR5cGVOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb2R5Q29tcG9uZW50T3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmJvZHlDb21wb25lbnRPcHRpb25zO1xuICB9XG5cbiAgcHVibGljIHNldEJvZHlDb21wb25lbnRPcHRpb25zKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYm9keUNvbXBvbmVudE9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgcHVibGljIGdldEJvZHlDb21wb25lbnRUeXBlKCk6IFR5cGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUNvbXBvbmVudFR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keUNTU0NsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUNTU0NsYXNzO1xuICB9XG5cbiAgcHVibGljIHNldEJvZHlDU1NDbGFzcyhjbGF6ejogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ib2R5Q1NTQ2xhc3MgPSBjbGF6ejtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtbk1vZGVscyA9IFtdO1xuICAgIHRoaXMuaGVhZGVyTW9kZWwuX2NsZWFyKCk7XG4gICAgdGhpcy5yb3dNb2RlbC5fY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIZWFkZXJNb2RlbCgpOiBUYWJsZVJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dNb2RlbCgpOiBUYWJsZVJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5yb3dNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Nb2RlbHMoKTogVGFibGVDb2x1bW5Nb2RlbFtdIHtcbiAgICByZXR1cm4gW10uY29uY2F0KHRoaXMuY29sdW1uTW9kZWxzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Nb2RlbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IFRhYmxlQ29sdW1uTW9kZWwge1xuICAgIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNvbHVtbk1vZGVscy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbHVtbk1vZGVsc1tpbmRleF07XG4gIH1cblxuICAvLyBvcHRpb25zID0geyBoZWFkZXI6IHt9LCBib2R5OiB7fSwgLi4uIGNvbHVtbiBtb2RlbCBvcHRpb24gZmllbGRzIC4uLiB9XG4gIHB1YmxpYyBhZGRDb2x1bW5BdEluZGV4KGluZGV4OiBudW1iZXIsIG9wdGlvbnM6IGFueSk6IFRhYmxlQ29sdW1uTW9kZWwge1xuICAgIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICBpbmRleCA9IHRoaXMuY29sdW1uTW9kZWxzLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuY29sdW1uTW9kZWxzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZ2l2ZW4gXCJpbmRleFwiIGlzIG91dCBvZiBib3VuZCBbbGVuPScgKyB0aGlzLmNvbHVtbk1vZGVscy5sZW5ndGggKyAnXScpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBsZXQgaGVhZGVyQ2VsbE1vZGVsOiBUYWJsZUNlbGxNb2RlbCA9IG51bGw7XG4gICAgbGV0IGJvZHlDZWxsTW9kZWw6IFRhYmxlQ2VsbE1vZGVsID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gYWRkIGhlYWRlciAvIGJvZHkgY2VsbCBmaXJzdFxuICAgICAgaGVhZGVyQ2VsbE1vZGVsID0gdGhpcy5oZWFkZXJNb2RlbC5fYWRkQ2VsbE1vZGVsQXRJbmRleChpbmRleCwgb3B0aW9uc1snaGVhZGVyJ10pO1xuICAgICAgYm9keUNlbGxNb2RlbCA9IHRoaXMucm93TW9kZWwuX2FkZENlbGxNb2RlbEF0SW5kZXgoaW5kZXgsIG9wdGlvbnNbJ2JvZHknXSk7XG5cbiAgICAgIC8vIFRoZW4sIGFkZCBhIG5ldyBjb2x1bW4gbW9kZWwgaW50byB0aGlzLmNvbHVtbk1vZGVscy5cbiAgICAgIGxldCBjb2x1bW5Nb2RlbDogVGFibGVDb2x1bW5Nb2RlbCA9IG5ldyBUYWJsZUNvbHVtbk1vZGVsKHRoaXMpO1xuXG4gICAgICBjb2x1bW5Nb2RlbC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAvLyBBdXRvIGFwcGx5IGkxOG5cbiAgICAgIGlmICh0aGlzLmkxOG5WYWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pMThuVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmICh0aGlzLmkxOG5WYWx1ZVsnY29sdW1ucyddICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkodGhpcy5pMThuVmFsdWVbJ2NvbHVtbnMnXSkpIHtcbiAgICAgICAgICBsZXQgaTE4bkFycmF5OiBhbnlbXSA9IDxhbnlbXT4gdGhpcy5pMThuVmFsdWVbJ2NvbHVtbnMnXTtcblxuICAgICAgICAgIGlmIChpMThuQXJyYXkubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgICAgICAgIGNvbHVtbk1vZGVsLmFwcGx5STE4TihpMThuQXJyYXlbaW5kZXhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSW5zZXJ0IGNvbHVtbk1vZGVsIGludG8gc3BlY2lmaWVkIFwiaW5kZXhcIi5cbiAgICAgIHRoaXMuY29sdW1uTW9kZWxzLnNwbGljZShpbmRleCwgMCwgY29sdW1uTW9kZWwpO1xuXG4gICAgICByZXR1cm4gY29sdW1uTW9kZWw7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgLy8gSWYgYW55IGVycm9yIG9jY3VycywgcmV2ZXJ0IGNoYW5nZXMuXG4gICAgICBpZiAoaGVhZGVyQ2VsbE1vZGVsICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyTW9kZWwuX3JlbW92ZUNlbGxNb2RlbChoZWFkZXJDZWxsTW9kZWwpO1xuICAgICAgfVxuICAgICAgaWYgKGJvZHlDZWxsTW9kZWwgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yb3dNb2RlbC5fcmVtb3ZlQ2VsbE1vZGVsKGJvZHlDZWxsTW9kZWwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkQ29sdW1uKG9wdGlvbnM6IGFueSk6IFRhYmxlQ29sdW1uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbkF0SW5kZXgodGhpcy5jb2x1bW5Nb2RlbHMubGVuZ3RoLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Nb2RlbEluZGV4KGNvbHVtbk1vZGVsOiBUYWJsZUNvbHVtbk1vZGVsKTogbnVtYmVyIHtcbiAgICBpZiAoY29sdW1uTW9kZWwgPT09IG51bGwgfHwgdHlwZW9mIGNvbHVtbk1vZGVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbHVtbk1vZGVscy5pbmRleE9mKGNvbHVtbk1vZGVsKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb2x1bW4oY29sdW1uTW9kZWw6IFRhYmxlQ29sdW1uTW9kZWwpOiBib29sZWFuIHtcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxJbmRleChjb2x1bW5Nb2RlbCk7XG5cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXJNb2RlbC5fcmVtb3ZlQ2VsbE1vZGVsQnlJbmRleChpbmRleCk7XG4gICAgdGhpcy5yb3dNb2RlbC5fcmVtb3ZlQ2VsbE1vZGVsQnlJbmRleChpbmRleCk7XG5cbiAgICB0aGlzLmNvbHVtbk1vZGVscy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ29sdW1uSW5kZXgoaW5kZXg6IG51bWJlcik6IFRhYmxlQ29sdW1uTW9kZWwge1xuICAgIGxldCBjb2x1bW5Nb2RlbDogVGFibGVDb2x1bW5Nb2RlbCA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGluZGV4KTtcblxuICAgIGlmIChjb2x1bW5Nb2RlbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXJNb2RlbC5fcmVtb3ZlQ2VsbE1vZGVsQnlJbmRleChpbmRleCk7XG4gICAgdGhpcy5yb3dNb2RlbC5fcmVtb3ZlQ2VsbE1vZGVsQnlJbmRleChpbmRleCk7XG5cbiAgICB0aGlzLmNvbHVtbk1vZGVscy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgcmV0dXJuIGNvbHVtbk1vZGVsO1xuICB9XG5cbn1cbiJdfQ==