UNPKG

ontimize-web-ngx

Version:
131 lines 23.4 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, Component, forwardRef, Inject, Injector, ViewEncapsulation } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { BooleanInputConverter } from '../../../../../decorators/input-converter'; import { PermissionsUtils } from '../../../../../util/permissions'; import { OTableBase } from '../../../o-table-base.class'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/flex-layout/flex"; import * as i3 from "../table-button/o-table-button.component"; import * as i4 from "../../../o-table-base.class"; export const DEFAULT_INPUTS_O_TABLE_BUTTONS = [ 'insertButton: insert-button', 'refreshButton: refresh-button', 'deleteButton: delete-button' ]; export const DEFAULT_OUTPUTS_O_TABLE_BUTTONS = []; export class OTableButtonsComponent { constructor(injector, table) { this.injector = injector; this.table = table; this.insertButton = true; this.refreshButton = true; this.deleteButton = true; this.enabledInsertButton = new BehaviorSubject(true); this.enabledRefreshButton = new BehaviorSubject(true); this.enabledDeleteButton = new BehaviorSubject(false); this.mutationObservers = []; this.permissions = this.table.getActionsPermissions(); } ngOnInit() { const insertPerm = this.getPermissionByAttr('insert'); const refreshPerm = this.getPermissionByAttr('refresh'); const deletePerm = this.getPermissionByAttr('delete'); if (this.insertButton && (insertPerm && insertPerm.enabled === false)) { this.enabledInsertButton.next(false); } if (this.refreshButton && (refreshPerm && refreshPerm.enabled === false)) { this.enabledRefreshButton.next(false); } this.subscription = this.table.selection.changed.subscribe(() => deletePerm ? this.enabledDeleteButton.next(deletePerm.enabled && !this.table.selection.isEmpty()) : this.enabledDeleteButton.next(!this.table.selection.isEmpty())); this.table.registerOTableButtons(this); } ngOnDestroy() { if (this.mutationObservers) { this.mutationObservers.forEach((m) => { m.disconnect(); }); } if (this.subscription) { this.subscription.unsubscribe(); } } add() { this.table.add(); } reloadData() { this.table.reloadData(false); } remove() { this.table.remove(); } getPermissionByAttr(attr) { return this.permissions.find((perm) => perm.attr === attr); } registerButtons(oTableButtons) { const fixedButtons = ['insert', 'refresh', 'delete']; const userItems = this.permissions.filter((perm) => fixedButtons.indexOf(perm.attr) === -1); const self = this; userItems.forEach((perm) => { const button = oTableButtons.find((oTableButton) => oTableButton.oattr === perm.attr); self.setPermissionsToOTableButton(perm, button); }); } get showInsertOButton() { if (!this.insertButton) { return false; } const perm = this.getPermissionByAttr('insert'); return !(perm && perm.visible === false); } get showRefreshOButton() { if (!this.refreshButton) { return false; } const perm = this.getPermissionByAttr('refresh'); return !(perm && perm.visible === false); } get showDeleteOButton() { if (!this.deleteButton) { return false; } const perm = this.getPermissionByAttr('delete'); return !(perm && perm.visible === false); } setPermissionsToOTableButton(perm, button) { if (perm.visible === false && button) { button.elRef.nativeElement.remove(); } else if (perm.enabled === false && button) { button.enabled = false; const buttonEL = button.elRef.nativeElement.querySelector('button'); const obs = PermissionsUtils.registerDisabledChangesInDom(buttonEL); this.mutationObservers.push(obs); } } } OTableButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableButtonsComponent, deps: [{ token: i0.Injector }, { token: forwardRef(() => OTableBase) }], target: i0.ɵɵFactoryTarget.Component }); OTableButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableButtonsComponent, selector: "o-table-buttons", inputs: { insertButton: ["insert-button", "insertButton"], refreshButton: ["refresh-button", "refreshButton"], deleteButton: ["delete-button", "deleteButton"] }, host: { properties: { "class.o-table-buttons": "true" } }, ngImport: i0, template: "<div class=\"buttons\" fxLayout>\n <o-table-button attr=\"add\" *ngIf=\"showInsertOButton\" [enabled]=\"enabledInsertButton | async\" label=\"TABLE.BUTTONS.ADD\"\n svg-icon=\"ontimize:add\" (onClick)=\"add()\" class=\"o-table-button-add\"></o-table-button>\n <o-table-button attr=\"refresh\" *ngIf=\"showRefreshOButton\" [enabled]=\"enabledRefreshButton | async\" label=\"TABLE.BUTTONS.REFRESH\"\n svg-icon=\"ontimize:autorenew\" (onClick)=\"reloadData()\" class=\"o-table-button-refresh\">\n </o-table-button>\n <o-table-button attr=\"delete\" *ngIf=\"showDeleteOButton\" [enabled]=\"enabledDeleteButton | async\" label=\"TABLE.BUTTONS.DELETE\"\n svg-icon=\"ontimize:delete\" (onClick)=\"remove()\" class=\"o-table-button-delete\"></o-table-button>\n <ng-content></ng-content>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "component", type: i3.OTableButtonComponent, selector: "o-table-button", inputs: ["attr", "enabled", "icon", "svg-icon", "icon-position", "label"], outputs: ["onClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableButtonsComponent.prototype, "insertButton", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableButtonsComponent.prototype, "refreshButton", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableButtonsComponent.prototype, "deleteButton", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableButtonsComponent, decorators: [{ type: Component, args: [{ selector: 'o-table-buttons', inputs: DEFAULT_INPUTS_O_TABLE_BUTTONS, outputs: DEFAULT_OUTPUTS_O_TABLE_BUTTONS, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class.o-table-buttons]': 'true', }, template: "<div class=\"buttons\" fxLayout>\n <o-table-button attr=\"add\" *ngIf=\"showInsertOButton\" [enabled]=\"enabledInsertButton | async\" label=\"TABLE.BUTTONS.ADD\"\n svg-icon=\"ontimize:add\" (onClick)=\"add()\" class=\"o-table-button-add\"></o-table-button>\n <o-table-button attr=\"refresh\" *ngIf=\"showRefreshOButton\" [enabled]=\"enabledRefreshButton | async\" label=\"TABLE.BUTTONS.REFRESH\"\n svg-icon=\"ontimize:autorenew\" (onClick)=\"reloadData()\" class=\"o-table-button-refresh\">\n </o-table-button>\n <o-table-button attr=\"delete\" *ngIf=\"showDeleteOButton\" [enabled]=\"enabledDeleteButton | async\" label=\"TABLE.BUTTONS.DELETE\"\n svg-icon=\"ontimize:delete\" (onClick)=\"remove()\" class=\"o-table-button-delete\"></o-table-button>\n <ng-content></ng-content>\n</div>\n" }] }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i4.OTableBase, decorators: [{ type: Inject, args: [forwardRef(() => OTableBase)] }] }]; }, propDecorators: { insertButton: [], refreshButton: [], deleteButton: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1idXR0b25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWJ1dHRvbnMvby10YWJsZS1idXR0b25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWJ1dHRvbnMvby10YWJsZS1idXR0b25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUdsRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7OztBQUd6RCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRztJQUU1Qyw2QkFBNkI7SUFFN0IsK0JBQStCO0lBRS9CLDZCQUE2QjtDQUM5QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsRUFBRSxDQUFDO0FBY2xELE1BQU0sT0FBTyxzQkFBc0I7SUFtQmpDLFlBQ1ksUUFBa0IsRUFDb0IsS0FBaUI7UUFEdkQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNvQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBakI1RCxpQkFBWSxH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QyxNQUFNLFFBQ3pDO3dCQUNKLHlCQUF5QixFQUFFLE1BQU07cUJBQ2xDOzswQkF1QkUsTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDOzRDQWpCL0IsWUFBWSxNQUVaLGFBQWEsTUFFYixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBPVGFibGVCdXR0b25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9QZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzL28tcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vby10YWJsZS1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLWJ1dHRvbi9vLXRhYmxlLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9CVVRUT05TID0gW1xuICAvLyBpbnNlcnQtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGluc2VydCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2luc2VydEJ1dHRvbjogaW5zZXJ0LWJ1dHRvbicsXG4gIC8vIHJlZnJlc2gtYnV0dG9uIFtub3x5ZXNdOiBzaG93IHJlZnJlc2ggYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gICdyZWZyZXNoQnV0dG9uOiByZWZyZXNoLWJ1dHRvbicsXG4gIC8vIGRlbGV0ZS1idXR0b24gW25vfHllc106IHNob3cgZGVsZXRlIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZGVsZXRlQnV0dG9uOiBkZWxldGUtYnV0dG9uJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX1RBQkxFX0JVVFRPTlMgPSBbXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby10YWJsZS1idXR0b25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUtYnV0dG9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tdGFibGUtYnV0dG9ucy5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fVEFCTEVfQlVUVE9OUyxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfQlVUVE9OUyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tdGFibGUtYnV0dG9uc10nOiAndHJ1ZScsXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlQnV0dG9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9UYWJsZUJ1dHRvbnMsIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBpbnNlcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHJlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGRlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIC8qIEVuZCBvZiBpbnB1dHMgKi9cblxuICBwdWJsaWMgZW5hYmxlZEluc2VydEJ1dHRvbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIGVuYWJsZWRSZWZyZXNoQnV0dG9uOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgZW5hYmxlZERlbGV0ZUJ1dHRvbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnNbXTtcbiAgcHJvdGVjdGVkIG11dGF0aW9uT2JzZXJ2ZXJzOiBNdXRhdGlvbk9ic2VydmVyW10gPSBbXTtcbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUJhc2UpKSBwcm90ZWN0ZWQgdGFibGU6IE9UYWJsZUJhc2VcbiAgKSB7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMudGFibGUuZ2V0QWN0aW9uc1Blcm1pc3Npb25zKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5zZXJ0UGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdpbnNlcnQnKTtcbiAgICBjb25zdCByZWZyZXNoUGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdyZWZyZXNoJyk7XG4gICAgY29uc3QgZGVsZXRlUGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdkZWxldGUnKTtcblxuICAgIGlmICh0aGlzLmluc2VydEJ1dHRvbiAmJiAoaW5zZXJ0UGVybSAmJiBpbnNlcnRQZXJtLmVuYWJsZWQgPT09IGZhbHNlKSkge1xuICAgICAgdGhpcy5lbmFibGVkSW5zZXJ0QnV0dG9uLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWZyZXNoQnV0dG9uICYmIChyZWZyZXNoUGVybSAmJiByZWZyZXNoUGVybS5lbmFibGVkID09PSBmYWxzZSkpIHtcbiAgICAgIHRoaXMuZW5hYmxlZFJlZnJlc2hCdXR0b24ubmV4dChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZS5zZWxlY3Rpb24uY2hhbmdlZC5zdWJzY3JpYmUoKCkgPT5cbiAgICAgIGRlbGV0ZVBlcm0gPyB0aGlzLmVuYWJsZWREZWxldGVCdXR0b24ubmV4dChkZWxldGVQZXJtLmVuYWJsZWQgJiYgIXRoaXMudGFibGUuc2VsZWN0aW9uLmlzRW1wdHkoKSkgOiB0aGlzLmVuYWJsZWREZWxldGVCdXR0b24ubmV4dCghdGhpcy50YWJsZS5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICk7XG4gICAgdGhpcy50YWJsZS5yZWdpc3Rlck9UYWJsZUJ1dHRvbnModGhpcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlcnMpIHtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcnMuZm9yRWFjaCgobTogTXV0YXRpb25PYnNlcnZlcikgPT4ge1xuICAgICAgICBtLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLmFkZCgpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5yZWxvYWREYXRhKGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmUoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQZXJtaXNzaW9uQnlBdHRyKGF0dHI6IHN0cmluZyk6IE9QZXJtaXNzaW9ucyB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMuZmluZCgocGVybTogT1Blcm1pc3Npb25zKSA9PiBwZXJtLmF0dHIgPT09IGF0dHIpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyQnV0dG9ucyhvVGFibGVCdXR0b25zOiBPVGFibGVCdXR0b25Db21wb25lbnRbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZpeGVkQnV0dG9ucyA9IFsnaW5zZXJ0JywgJ3JlZnJlc2gnLCAnZGVsZXRlJ107XG4gICAgY29uc3QgdXNlckl0ZW1zOiBPUGVybWlzc2lvbnNbXSA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKChwZXJtOiBPUGVybWlzc2lvbnMpID0+IGZpeGVkQnV0dG9ucy5pbmRleE9mKHBlcm0uYXR0cikgPT09IC0xKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB1c2VySXRlbXMuZm9yRWFjaCgocGVybTogT1Blcm1pc3Npb25zKSA9PiB7XG4gICAgICBjb25zdCBidXR0b24gPSBvVGFibGVCdXR0b25zLmZpbmQoKG9UYWJsZUJ1dHRvbjogT1RhYmxlQnV0dG9uQ29tcG9uZW50KSA9PiBvVGFibGVCdXR0b24ub2F0dHIgPT09IHBlcm0uYXR0cik7XG4gICAgICBzZWxmLnNldFBlcm1pc3Npb25zVG9PVGFibGVCdXR0b24ocGVybSwgYnV0dG9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzaG93SW5zZXJ0T0J1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaW5zZXJ0QnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignaW5zZXJ0Jyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93UmVmcmVzaE9CdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnJlZnJlc2hCdXR0b24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdyZWZyZXNoJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93RGVsZXRlT0J1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGVsZXRlQnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignZGVsZXRlJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRQZXJtaXNzaW9uc1RvT1RhYmxlQnV0dG9uKHBlcm06IE9QZXJtaXNzaW9ucywgYnV0dG9uOiBPVGFibGVCdXR0b25Db21wb25lbnQpOiB2b2lkIHtcbiAgICBpZiAocGVybS52aXNpYmxlID09PSBmYWxzZSAmJiBidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAocGVybS5lbmFibGVkID09PSBmYWxzZSAmJiBidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5lbmFibGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBidXR0b25FTCA9IGJ1dHRvbi5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuICAgICAgY29uc3Qgb2JzID0gUGVybWlzc2lvbnNVdGlscy5yZWdpc3RlckRpc2FibGVkQ2hhbmdlc0luRG9tKGJ1dHRvbkVMKTtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcnMucHVzaChvYnMpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiIGZ4TGF5b3V0PlxuICA8by10YWJsZS1idXR0b24gYXR0cj1cImFkZFwiICpuZ0lmPVwic2hvd0luc2VydE9CdXR0b25cIiBbZW5hYmxlZF09XCJlbmFibGVkSW5zZXJ0QnV0dG9uIHwgYXN5bmNcIiBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuQUREXCJcbiAgICBzdmctaWNvbj1cIm9udGltaXplOmFkZFwiIChvbkNsaWNrKT1cImFkZCgpXCIgY2xhc3M9XCJvLXRhYmxlLWJ1dHRvbi1hZGRcIj48L28tdGFibGUtYnV0dG9uPlxuICA8by10YWJsZS1idXR0b24gYXR0cj1cInJlZnJlc2hcIiAqbmdJZj1cInNob3dSZWZyZXNoT0J1dHRvblwiIFtlbmFibGVkXT1cImVuYWJsZWRSZWZyZXNoQnV0dG9uIHwgYXN5bmNcIiBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuUkVGUkVTSFwiXG4gICAgc3ZnLWljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIiAob25DbGljayk9XCJyZWxvYWREYXRhKClcIiBjbGFzcz1cIm8tdGFibGUtYnV0dG9uLXJlZnJlc2hcIj5cbiAgPC9vLXRhYmxlLWJ1dHRvbj5cbiAgPG8tdGFibGUtYnV0dG9uIGF0dHI9XCJkZWxldGVcIiAqbmdJZj1cInNob3dEZWxldGVPQnV0dG9uXCIgW2VuYWJsZWRdPVwiZW5hYmxlZERlbGV0ZUJ1dHRvbiB8IGFzeW5jXCIgbGFiZWw9XCJUQUJMRS5CVVRUT05TLkRFTEVURVwiXG4gICAgc3ZnLWljb249XCJvbnRpbWl6ZTpkZWxldGVcIiAob25DbGljayk9XCJyZW1vdmUoKVwiIGNsYXNzPVwiby10YWJsZS1idXR0b24tZGVsZXRlXCI+PC9vLXRhYmxlLWJ1dHRvbj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=