UNPKG

ontimize-web-ngx

Version:
140 lines 21.2 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, Component, Injector, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core'; import { BooleanInputConverter } from '../../../../../decorators/input-converter'; import { Util } from '../../../../../util/util'; import { OBaseTableCellEditor } from '../o-base-table-cell-editor.class'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "@angular/material/checkbox"; export const DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_BOOLEAN = [ 'indeterminateOnNull: indeterminate-on-null', 'trueValue: true-value', 'falseValue: false-value', 'booleanType: boolean-type', 'autoCommit: auto-commit' ]; export class OTableCellEditorBooleanComponent extends OBaseTableCellEditor { constructor(injector) { super(injector); this.injector = injector; this.indeterminate = false; this.indeterminateOnNull = false; this._booleanType = 'boolean'; this.autoCommit = true; } initialize() { super.initialize(); this.parseInputs(); } get booleanType() { return this._booleanType; } set booleanType(arg) { arg = (arg || '').toLowerCase(); if (['number', 'boolean', 'string'].indexOf(arg) === -1) { arg = 'boolean'; } this._booleanType = arg; } parseInputs() { switch (this.booleanType) { case 'string': this.parseStringInputs(); break; case 'number': this.parseNumberInputs(); break; default: this.trueValue = true; this.falseValue = false; break; } } parseStringInputs() { if ((this.trueValue || '').length === 0) { this.trueValue = undefined; } if ((this.falseValue || '').length === 0) { this.falseValue = undefined; } } parseNumberInputs() { this.trueValue = parseInt(this.trueValue, 10); if (isNaN(this.trueValue)) { this.trueValue = 1; } this.falseValue = parseInt(this.falseValue, 10); if (isNaN(this.falseValue)) { this.falseValue = 0; } } startEdition(data) { super.startEdition(data); setTimeout(() => { const isCurrentValueTrue = (this.formControl.value === this.trueValue); if (this.autoCommit) { this.formControl.setValue(isCurrentValueTrue ? this.falseValue : this.trueValue, { emitEvent: false }); this.commitEdition(); } else { this.formControl.setValue(isCurrentValueTrue ? this.trueValue : this.falseValue, { emitEvent: false }); } }, 0); } getCellData() { let cellData = super.getCellData(); this.indeterminate = this.indeterminateOnNull && !Util.isDefined(cellData); if (!this.indeterminate) { cellData = this.parseValueByType(cellData); } return cellData; } hasCellDataTrueValue(cellData) { let result; if (Util.isDefined(cellData)) { result = (cellData === this.trueValue); if (this.booleanType === 'string' && !Util.isDefined(this.trueValue)) { result = Util.parseBoolean(cellData, false); } } return result; } parseValueByType(val) { let result = val; const cellIsTrue = this.hasCellDataTrueValue(val); const value = cellIsTrue ? this.trueValue : this.falseValue; switch (this.booleanType) { case 'string': result = this.translateService.get(value); break; case 'number': result = parseInt(value, 10); break; default: break; } return result; } onChange(arg) { this.formControl.setValue(arg.checked ? this.trueValue : this.falseValue, { emitEvent: false }); this.commitEdition(); } } OTableCellEditorBooleanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableCellEditorBooleanComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); OTableCellEditorBooleanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableCellEditorBooleanComponent, selector: "o-table-cell-editor-boolean", inputs: { indeterminateOnNull: ["indeterminate-on-null", "indeterminateOnNull"], trueValue: ["true-value", "trueValue"], falseValue: ["false-value", "falseValue"], booleanType: ["boolean-type", "booleanType"], autoCommit: ["auto-commit", "autoCommit"] }, viewQueries: [{ propertyName: "templateref", first: true, predicate: ["templateref"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #templateref let-cellvalue=\"cellvalue\" let-rowvalue=\"rowvalue\">\n <div class=\"o-table-cell-editor-boolean o-table-cell-editor\" [formGroup]=\"formGroup\">\n <mat-checkbox #checkbox (click)=\"$event.stopPropagation()\" (change)=\"onChange($event)\" [indeterminate]=\"indeterminate\"\n [formControl]=\"formControl\" [class.hidden-checkbox]=\"autoCommit\">\n </mat-checkbox>\n </div>\n</ng-template>", styles: [".o-table-cell-editor-boolean{height:100%;display:flex;align-items:center;justify-content:center}.o-table-cell-editor-boolean .mat-mdc-checkbox-ripple,.o-table-cell-editor-boolean .mat-mdc-checkbox.hidden-checkbox{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableCellEditorBooleanComponent.prototype, "indeterminateOnNull", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableCellEditorBooleanComponent.prototype, "autoCommit", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableCellEditorBooleanComponent, decorators: [{ type: Component, args: [{ selector: 'o-table-cell-editor-boolean', inputs: DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_BOOLEAN, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-template #templateref let-cellvalue=\"cellvalue\" let-rowvalue=\"rowvalue\">\n <div class=\"o-table-cell-editor-boolean o-table-cell-editor\" [formGroup]=\"formGroup\">\n <mat-checkbox #checkbox (click)=\"$event.stopPropagation()\" (change)=\"onChange($event)\" [indeterminate]=\"indeterminate\"\n [formControl]=\"formControl\" [class.hidden-checkbox]=\"autoCommit\">\n </mat-checkbox>\n </div>\n</ng-template>", styles: [".o-table-cell-editor-boolean{height:100%;display:flex;align-items:center;justify-content:center}.o-table-cell-editor-boolean .mat-mdc-checkbox-ripple,.o-table-cell-editor-boolean .mat-mdc-checkbox.hidden-checkbox{display:none}\n"] }] }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { templateref: [{ type: ViewChild, args: ['templateref', { read: TemplateRef, static: true }] }], indeterminateOnNull: [], autoCommit: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jZWxsLWVkaXRvci1ib29sZWFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2NvbHVtbi9jZWxsLWVkaXRvci9ib29sZWFuL28tdGFibGUtY2VsbC1lZGl0b3ItYm9vbGVhbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9jb2x1bW4vY2VsbC1lZGl0b3IvYm9vbGVhbi9vLXRhYmxlLWNlbGwtZWRpdG9yLWJvb2xlYW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEksT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7O0FBRXpFLE1BQU0sQ0FBQyxNQUFNLDBDQUEwQyxHQUFHO0lBQ3hELDRDQUE0QztJQUU1Qyx1QkFBdUI7SUFFdkIseUJBQXlCO0lBRXpCLDJCQUEyQjtJQUMzQix5QkFBeUI7Q0FDMUIsQ0FBQztBQVdGLE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSxvQkFBb0I7SUFnQnhFLFlBQXNCLFFBQWtCO1FBQ3RDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURJLGFBQVEsR0FBUixRQUFRLENBQVU7UUFaeEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFHL0Isd0JBQW1CLEdBQVks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QVUsQ0FBQztRQUM1RCxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEIsS0FBSyxRQUFRO2dCQUNYLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQyxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFzQjtRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OzhIQS9IVSxnQ0FBZ0M7a0hBQWhDLGdDQUFnQyx5WkFFVCxXQUFXLGtFQzdCL0MsNmFBTWM7QUQyQlo7SUFBQyxxQkFBcUIsRUFBRTs7NkVBQ2E7QUFNckM7SUFBQyxxQkFBcUIsRUFBRTs7b0VBQ0c7NEZBZGhCLGdDQUFnQztrQkFUNUMsU0FBUzsrQkFDRSw2QkFBNkIsVUFHL0IsMENBQTBDLG1CQUNqQyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOytGQUtpQyxXQUFXO3NCQUFoRixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLN0QsbUJBQW1CLE1BT25CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Jhc2VUYWJsZUNlbGxFZGl0b3IgfSBmcm9tICcuLi9vLWJhc2UtdGFibGUtY2VsbC1lZGl0b3IuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9DRUxMX0VESVRPUl9CT09MRUFOID0gW1xuICAnaW5kZXRlcm1pbmF0ZU9uTnVsbDogaW5kZXRlcm1pbmF0ZS1vbi1udWxsJyxcbiAgLy8gdHJ1ZS12YWx1ZTogdHJ1ZSB2YWx1ZS4gRGVmYXVsdDogdHJ1ZS5cbiAgJ3RydWVWYWx1ZTogdHJ1ZS12YWx1ZScsXG4gIC8vIGZhbHNlLXZhbHVlOiBmYWxzZSB2YWx1ZS4gRGVmYXVsdDogZmFsc2UuXG4gICdmYWxzZVZhbHVlOiBmYWxzZS12YWx1ZScsXG4gIC8vIGJvb2xlYW4tdHlwZSBbbnVtYmVyfGJvb2xlYW58c3RyaW5nXTogY2VsbERhdGEgdmFsdWUgdHlwZS4gRGVmYXVsdDogYm9vbGVhblxuICAnYm9vbGVhblR5cGU6IGJvb2xlYW4tdHlwZScsXG4gICdhdXRvQ29tbWl0OiBhdXRvLWNvbW1pdCdcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtY2VsbC1lZGl0b3ItYm9vbGVhbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLXRhYmxlLWNlbGwtZWRpdG9yLWJvb2xlYW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLWNlbGwtZWRpdG9yLWJvb2xlYW4uY29tcG9uZW50LnNjc3MnXSxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX1RBQkxFX0NFTExfRURJVE9SX0JPT0xFQU4sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuXG5leHBvcnQgY2xhc3MgT1RhYmxlQ2VsbEVkaXRvckJvb2xlYW5Db21wb25lbnQgZXh0ZW5kcyBPQmFzZVRhYmxlQ2VsbEVkaXRvciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVyZWYnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSkgcHVibGljIHRlbXBsYXRlcmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgaW5kZXRlcm1pbmF0ZU9uTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xuICB0cnVlVmFsdWU6IGFueTtcbiAgZmFsc2VWYWx1ZTogYW55O1xuXG4gIHByb3RlY3RlZCBfYm9vbGVhblR5cGU6IHN0cmluZyA9ICdib29sZWFuJztcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgYXV0b0NvbW1pdDogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMucGFyc2VJbnB1dHMoKTtcbiAgfVxuXG4gIGdldCBib29sZWFuVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9ib29sZWFuVHlwZTtcbiAgfVxuXG4gIHNldCBib29sZWFuVHlwZShhcmc6IHN0cmluZykge1xuICAgIGFyZyA9IChhcmcgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKFsnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5kZXhPZihhcmcpID09PSAtMSkge1xuICAgICAgYXJnID0gJ2Jvb2xlYW4nO1xuICAgIH1cbiAgICB0aGlzLl9ib29sZWFuVHlwZSA9IGFyZztcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUlucHV0cygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuYm9vbGVhblR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHRoaXMucGFyc2VTdHJpbmdJbnB1dHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICB0aGlzLnBhcnNlTnVtYmVySW5wdXRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy50cnVlVmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLmZhbHNlVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlU3RyaW5nSW5wdXRzKCkge1xuICAgIGlmICgodGhpcy50cnVlVmFsdWUgfHwgJycpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy50cnVlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICgodGhpcy5mYWxzZVZhbHVlIHx8ICcnKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZmFsc2VWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VOdW1iZXJJbnB1dHMoKSB7XG4gICAgdGhpcy50cnVlVmFsdWUgPSBwYXJzZUludCh0aGlzLnRydWVWYWx1ZSwgMTApO1xuICAgIGlmIChpc05hTih0aGlzLnRydWVWYWx1ZSkpIHtcbiAgICAgIHRoaXMudHJ1ZVZhbHVlID0gMTtcbiAgICB9XG4gICAgdGhpcy5mYWxzZVZhbHVlID0gcGFyc2VJbnQodGhpcy5mYWxzZVZhbHVlLCAxMCk7XG4gICAgaWYgKGlzTmFOKHRoaXMuZmFsc2VWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZmFsc2VWYWx1ZSA9IDA7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRFZGl0aW9uKGRhdGE6IGFueSkge1xuICAgIHN1cGVyLnN0YXJ0RWRpdGlvbihkYXRhKTtcbiAgICAvLyB1c2luZyBzZXRUaW1lb3V0IHRvIGZvcmNlIHRoaXMgY29kZSBleGVjdXRpb24gYWZ0ZXIgc3VwZXIuYWN0aXZhdGVDb2x1bW5FZGl0aW9uIGNvbHVtbi5lZGl0aW5nID0gdHJ1ZSBsaW5lXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0N1cnJlbnRWYWx1ZVRydWUgPSAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gdGhpcy50cnVlVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuYXV0b0NvbW1pdCkge1xuICAgICAgICAvLyBUb2dnbGluZyB2YWx1ZSAoYXV0b2NvbW1taXQgY2hhbmdlcyBjb21wb25lbnQgdmFsdWUgd2l0aG91dCBubyBmdXJ0aGVyIHVzZXIgaW50ZXJhY3Rpb24pXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXNDdXJyZW50VmFsdWVUcnVlID8gdGhpcy5mYWxzZVZhbHVlIDogdGhpcy50cnVlVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5jb21taXRFZGl0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGlzQ3VycmVudFZhbHVlVHJ1ZSA/IHRoaXMudHJ1ZVZhbHVlIDogdGhpcy5mYWxzZVZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBnZXRDZWxsRGF0YSgpIHtcbiAgICBsZXQgY2VsbERhdGEgPSBzdXBlci5nZXRDZWxsRGF0YSgpO1xuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IHRoaXMuaW5kZXRlcm1pbmF0ZU9uTnVsbCAmJiAhVXRpbC5pc0RlZmluZWQoY2VsbERhdGEpO1xuICAgIGlmICghdGhpcy5pbmRldGVybWluYXRlKSB7XG4gICAgICBjZWxsRGF0YSA9IHRoaXMucGFyc2VWYWx1ZUJ5VHlwZShjZWxsRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBjZWxsRGF0YTtcbiAgfVxuXG4gIGhhc0NlbGxEYXRhVHJ1ZVZhbHVlKGNlbGxEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjZWxsRGF0YSkpIHtcbiAgICAgIHJlc3VsdCA9IChjZWxsRGF0YSA9PT0gdGhpcy50cnVlVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuYm9vbGVhblR5cGUgPT09ICdzdHJpbmcnICYmICFVdGlsLmlzRGVmaW5lZCh0aGlzLnRydWVWYWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gVXRpbC5wYXJzZUJvb2xlYW4oY2VsbERhdGEsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVZhbHVlQnlUeXBlKHZhbDogYW55KTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB7XG4gICAgbGV0IHJlc3VsdCA9IHZhbDtcbiAgICBjb25zdCBjZWxsSXNUcnVlID0gdGhpcy5oYXNDZWxsRGF0YVRydWVWYWx1ZSh2YWwpO1xuICAgIGNvbnN0IHZhbHVlID0gY2VsbElzVHJ1ZSA/IHRoaXMudHJ1ZVZhbHVlIDogdGhpcy5mYWxzZVZhbHVlO1xuICAgIHN3aXRjaCAodGhpcy5ib29sZWFuVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmVzdWx0ID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9uQ2hhbmdlKGFyZzogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGFyZy5jaGVja2VkID8gdGhpcy50cnVlVmFsdWUgOiB0aGlzLmZhbHNlVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmNvbW1pdEVkaXRpb24oKTtcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZXJlZiBsZXQtY2VsbHZhbHVlPVwiY2VsbHZhbHVlXCIgbGV0LXJvd3ZhbHVlPVwicm93dmFsdWVcIj5cbiAgPGRpdiBjbGFzcz1cIm8tdGFibGUtY2VsbC1lZGl0b3ItYm9vbGVhbiBvLXRhYmxlLWNlbGwtZWRpdG9yXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICA8bWF0LWNoZWNrYm94ICNjaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbY2xhc3MuaGlkZGVuLWNoZWNrYm94XT1cImF1dG9Db21taXRcIj5cbiAgICA8L21hdC1jaGVja2JveD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==