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 '../../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