UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

302 lines (301 loc) 19.4 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 { TableCellModel } from './TableCellModel'; export class TableRowModel extends AbstractI18NApplicable { /** * @param {?} tableModel */ constructor(tableModel) { super(); this.tableModel = tableModel; this.cellModels = []; // Set default values this.editable = false; this.resizable = false; this.selectable = false; this.draggable = false; } /** * @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.setComponentTypeName(this.getComponentTypeName()); } /** * @return {?} */ isEditable() { return this.editable; } /** * @param {?} editable * @return {?} */ setEditable(editable) { this.editable = editable; } /** * @return {?} */ isResizable() { return this.resizable; } /** * @param {?} resizable * @return {?} */ setResizable(resizable) { this.resizable = resizable; } /** * @return {?} */ isSelectable() { return this.selectable; } /** * @param {?} selectable * @return {?} */ setSelectable(selectable) { this.selectable = selectable; } /** * @return {?} */ isDraggable() { return this.draggable; } /** * @param {?} draggable * @return {?} */ setDraggable(draggable) { this.draggable = draggable; } /** * @return {?} */ getHeight() { return this.height; } /** * @param {?} height * @return {?} */ setHeight(height) { this.height = height; } /** * @return {?} */ getTableModel() { return this.tableModel; } /** * @param {?} typeName * @return {?} */ resolveType(typeName) { if (this.tableModel === null && typeof this.tableModel === 'undefined') { return null; } return this.tableModel.resolveType(typeName); } /** * @return {?} */ getComponentTypeName() { return this.componentTypeName; } /** * @param {?} typeName * @return {?} */ setComponentTypeName(typeName) { this.componentTypeName = typeName; this.componentType = this.resolveType(typeName); } /** * @return {?} */ getComponentOptions() { return this.componentOptions; } /** * @param {?} options * @return {?} */ setComponentOptions(options) { this.componentOptions = options; } /** * @return {?} */ getComponentType() { return this.componentType; } /** * @return {?} */ getCSSClass() { return this.cssClass; } /** * @param {?} clazz * @return {?} */ setCSSClass(clazz) { this.cssClass = clazz; } /** * @return {?} */ getCellModels() { return [].concat(this.cellModels); } /** * @param {?} index * @return {?} */ getCellModelByIndex(index) { if (typeof index !== 'number') { return null; } if (index < 0 || index >= this.cellModels.length) { return null; } return this.cellModels[index]; } /** * @param {?} cellModel * @return {?} */ getCellModelIndex(cellModel) { if (cellModel === null || typeof cellModel === 'undefined') { return -1; } return this.cellModels.indexOf(cellModel); } /** * @return {?} */ _clear() { this.cellModels = []; } /** * @param {?} index * @param {?} options * @return {?} */ _addCellModelAtIndex(index, options) { if (typeof index !== 'number') { index = this.cellModels.length; } if (index < 0 || index > this.cellModels.length) { throw new Error('The given "index" is out of bound [len=' + this.cellModels.length + ']'); } let /** @type {?} */ cellModel = new TableCellModel(this); cellModel.setOptions(options); // Insert cellModel into specified "index". this.cellModels.splice(index, 0, cellModel); return cellModel; } /** * @param {?} options * @return {?} */ _addCellModel(options) { return this._addCellModelAtIndex(this.cellModels.length, options); } /** * @param {?} cellModel * @return {?} */ _removeCellModel(cellModel) { let /** @type {?} */ index = this.getCellModelIndex(cellModel); if (index < 0) { return false; } this.cellModels.splice(index, 1); return true; } /** * @param {?} index * @return {?} */ _removeCellModelByIndex(index) { let /** @type {?} */ cellModel = this.getCellModelByIndex(index); if (cellModel === null) { return null; } this.cellModels.splice(index, 1); return cellModel; } } tslib_1.__decorate([ Option('type'), tslib_1.__metadata("design:type", String) ], TableRowModel.prototype, "componentTypeName", void 0); tslib_1.__decorate([ Option('options'), tslib_1.__metadata("design:type", Object) ], TableRowModel.prototype, "componentOptions", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], TableRowModel.prototype, "editable", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], TableRowModel.prototype, "resizable", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], TableRowModel.prototype, "selectable", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], TableRowModel.prototype, "draggable", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], TableRowModel.prototype, "height", void 0); tslib_1.__decorate([ Option('class'), tslib_1.__metadata("design:type", String) ], TableRowModel.prototype, "cssClass", void 0); function TableRowModel_tsickle_Closure_declarations() { /** @type {?} */ TableRowModel.prototype.componentTypeName; /** @type {?} */ TableRowModel.prototype.componentOptions; /** @type {?} */ TableRowModel.prototype.editable; /** @type {?} */ TableRowModel.prototype.resizable; /** @type {?} */ TableRowModel.prototype.selectable; /** @type {?} */ TableRowModel.prototype.draggable; /** @type {?} */ TableRowModel.prototype.height; /** @type {?} */ TableRowModel.prototype.cssClass; /** @type {?} */ TableRowModel.prototype.tableModel; /** @type {?} */ TableRowModel.prototype.componentType; /** @type {?} */ TableRowModel.prototype.cellModels; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVSb3dNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9tb2RlbC9UYWJsZVJvd01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBSTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxNQUFNLG9CQUFxQixTQUFRLHNCQUFzQjs7OztnQkF1QnBDLFVBQXNCO1FBQ3ZDLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7O1FBR3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDOzs7Ozs7SUFJbEIsVUFBVSxDQUFDLE9BQVk7O1FBRTVCLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBRzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDOzs7OztJQUdsRCxVQUFVO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7OztJQUdoQixXQUFXLENBQUMsUUFBaUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Ozs7O0lBR3BCLFdBQVc7UUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Ozs7OztJQUdqQixZQUFZLENBQUMsU0FBa0I7UUFDcEMsSUFBSSxDQUFD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LEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakMsTUFBTSxDQUFDLFNBQVMsQ0FBQzs7Q0FHcEI7O0lBck1FLE1BQU0sQ0FBQyxNQUFNLENBQUM7Ozs7SUFFZCxNQUFNLENBQUMsU0FBUyxDQUFDOzs7O0lBRWpCLE1BQU0sRUFBRTs7OztJQUVSLE1BQU0sRUFBRTs7OztJQUVSLE1BQU0sRUFBRTs7OztJQUVSLE1BQU0sRUFBRTs7OztJQUVSLE1BQU0sRUFBRTs7OztJQUVSLE1BQU0sQ0FBQyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0STE4TkFwcGxpY2FibGUgfSBmcm9tICcuLi8uLi9zaGFyZS9BYnN0cmFjdEkxOE5BcHBsaWNhYmxlJztcblxuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XG5cbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuL1RhYmxlTW9kZWwnO1xuaW1wb3J0IHsgVGFibGVDZWxsTW9kZWwgfSBmcm9tICcuL1RhYmxlQ2VsbE1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlUm93TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIHtcblxuICBAT3B0aW9uKCd0eXBlJylcbiAgcHJvdGVjdGVkIGNvbXBvbmVudFR5cGVOYW1lOiBzdHJpbmc7XG4gIEBPcHRpb24oJ29wdGlvbnMnKVxuICBwcm90ZWN0ZWQgY29tcG9uZW50T3B0aW9uczogYW55O1xuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGVkaXRhYmxlOiBib29sZWFuO1xuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHJlc2l6YWJsZTogYm9vbGVhbjtcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBzZWxlY3RhYmxlOiBib29sZWFuO1xuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRyYWdnYWJsZTogYm9vbGVhbjtcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcbiAgQE9wdGlvbignY2xhc3MnKVxuICBwcm90ZWN0ZWQgY3NzQ2xhc3M6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgdGFibGVNb2RlbDogVGFibGVNb2RlbDtcbiAgcHJvdGVjdGVkIGNvbXBvbmVudFR5cGU6IFR5cGU8YW55PjtcbiAgcHJvdGVjdGVkIGNlbGxNb2RlbHM6IFRhYmxlQ2VsbE1vZGVsW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRhYmxlTW9kZWw6IFRhYmxlTW9kZWwpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy50YWJsZU1vZGVsID0gdGFibGVNb2RlbDtcbiAgICB0aGlzLmNlbGxNb2RlbHMgPSBbXTtcblxuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlc1xuICAgIHRoaXMuZWRpdGFibGUgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2l6YWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZHJhZ2dhYmxlID0gZmFsc2U7XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBDYWxsIHN1cGVyLnNldE9wdGlvbnMoKSB0byBhdXRvIHJlc29sdmUgQE9wdGlvbiBmaWVsZHNcbiAgICBzdXBlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gQ2FsbCBzZXQgY29tcG9uZW50IHR5cGUgbmFtZSB0byBhdXRvIHJlc29sdmUgY29tcG9lbnQgdHlwZVxuICAgIHRoaXMuc2V0Q29tcG9uZW50VHlwZU5hbWUodGhpcy5nZXRDb21wb25lbnRUeXBlTmFtZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0VkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRhYmxlO1xuICB9XG5cbiAgcHVibGljIHNldEVkaXRhYmxlKGVkaXRhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0YWJsZSA9IGVkaXRhYmxlO1xuICB9XG5cbiAgcHVibGljIGlzUmVzaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlc2l6YWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRSZXNpemFibGUocmVzaXphYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemFibGUgPSByZXNpemFibGU7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGU7XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0YWJsZShzZWxlY3RhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gc2VsZWN0YWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0RyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGU7XG4gIH1cblxuICBwdWJsaWMgc2V0RHJhZ2dhYmxlKGRyYWdnYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dhYmxlID0gZHJhZ2dhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldEhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhlaWdodDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIZWlnaHQoaGVpZ2h0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUYWJsZU1vZGVsKCk6IFRhYmxlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnRhYmxlTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZVR5cGUodHlwZU5hbWU6IHN0cmluZyk6IFR5cGU8YW55PiB7XG4gICAgaWYgKHRoaXMudGFibGVNb2RlbCA9PT0gbnVsbCAmJiB0eXBlb2YgdGhpcy50YWJsZU1vZGVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGFibGVNb2RlbC5yZXNvbHZlVHlwZSh0eXBlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tcG9uZW50VHlwZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRUeXBlTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21wb25lbnRUeXBlTmFtZSh0eXBlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRUeXBlTmFtZSA9IHR5cGVOYW1lO1xuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IHRoaXMucmVzb2x2ZVR5cGUodHlwZU5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudE9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRPcHRpb25zO1xuICB9XG5cbiAgcHVibGljIHNldENvbXBvbmVudE9wdGlvbnMob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRPcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21wb25lbnRUeXBlKCk6IFR5cGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDU1NDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNzc0NsYXNzO1xuICB9XG5cbiAgcHVibGljIHNldENTU0NsYXNzKGNsYXp6OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNzc0NsYXNzID0gY2xheno7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbE1vZGVscygpOiBUYWJsZUNlbGxNb2RlbFtdIHtcbiAgICByZXR1cm4gW10uY29uY2F0KHRoaXMuY2VsbE1vZGVscyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbE1vZGVsQnlJbmRleChpbmRleDogbnVtYmVyKTogVGFibGVDZWxsTW9kZWwge1xuICAgIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNlbGxNb2RlbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jZWxsTW9kZWxzW2luZGV4XTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDZWxsTW9kZWxJbmRleChjZWxsTW9kZWw6IFRhYmxlQ2VsbE1vZGVsKTogbnVtYmVyIHtcbiAgICBpZiAoY2VsbE1vZGVsID09PSBudWxsIHx8IHR5cGVvZiBjZWxsTW9kZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2VsbE1vZGVscy5pbmRleE9mKGNlbGxNb2RlbCk7XG4gIH1cblxuICBwdWJsaWMgX2NsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbE1vZGVscyA9IFtdO1xuICB9XG5cbiAgcHVibGljIF9hZGRDZWxsTW9kZWxBdEluZGV4KGluZGV4OiBudW1iZXIsIG9wdGlvbnM6IGFueSk6IFRhYmxlQ2VsbE1vZGVsIHtcbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgaW5kZXggPSB0aGlzLmNlbGxNb2RlbHMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGhpcy5jZWxsTW9kZWxzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZ2l2ZW4gXCJpbmRleFwiIGlzIG91dCBvZiBib3VuZCBbbGVuPScgKyB0aGlzLmNlbGxNb2RlbHMubGVuZ3RoICsgJ10nKTtcbiAgICB9XG5cbiAgICBsZXQgY2VsbE1vZGVsOiBUYWJsZUNlbGxNb2RlbCA9IG5ldyBUYWJsZUNlbGxNb2RlbCh0aGlzKTtcblxuICAgIGNlbGxNb2RlbC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gSW5zZXJ0IGNlbGxNb2RlbCBpbnRvIHNwZWNpZmllZCBcImluZGV4XCIuXG4gICAgdGhpcy5jZWxsTW9kZWxzLnNwbGljZShpbmRleCwgMCwgY2VsbE1vZGVsKTtcblxuICAgIHJldHVybiBjZWxsTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgX2FkZENlbGxNb2RlbChvcHRpb25zOiBhbnkpOiBUYWJsZUNlbGxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZENlbGxNb2RlbEF0SW5kZXgodGhpcy5jZWxsTW9kZWxzLmxlbmd0aCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgX3JlbW92ZUNlbGxNb2RlbChjZWxsTW9kZWw6IFRhYmxlQ2VsbE1vZGVsKTogYm9vbGVhbiB7XG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLmdldENlbGxNb2RlbEluZGV4KGNlbGxNb2RlbCk7XG5cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jZWxsTW9kZWxzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBfcmVtb3ZlQ2VsbE1vZGVsQnlJbmRleChpbmRleDogbnVtYmVyKTogVGFibGVDZWxsTW9kZWwge1xuICAgIGxldCBjZWxsTW9kZWw6IFRhYmxlQ2VsbE1vZGVsID0gdGhpcy5nZXRDZWxsTW9kZWxCeUluZGV4KGluZGV4KTtcblxuICAgIGlmIChjZWxsTW9kZWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuY2VsbE1vZGVscy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgcmV0dXJuIGNlbGxNb2RlbDtcbiAgfVxuXG59XG4iXX0=