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