ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
131 lines • 23.4 kB
JavaScript
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();
}
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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ekM7d0JBQ0oseUJBQXlCLEVBQUUsTUFBTTtxQkFDbEM7OzBCQXVCRSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7NENBakIvQixZQUFZLE1BRVosYUFBYSxNQUViLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IE9UYWJsZUJ1dHRvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtYnV0dG9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvby1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IFBlcm1pc3Npb25zVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IE9UYWJsZUJhc2UgfSBmcm9tICcuLi8uLi8uLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtYnV0dG9uL28tdGFibGUtYnV0dG9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RBQkxFX0JVVFRPTlMgPSBbXG4gIC8vIGluc2VydC1idXR0b24gW25vfHllc106IHNob3cgaW5zZXJ0IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnaW5zZXJ0QnV0dG9uOiBpbnNlcnQtYnV0dG9uJyxcbiAgLy8gcmVmcmVzaC1idXR0b24gW25vfHllc106IHNob3cgcmVmcmVzaCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ3JlZnJlc2hCdXR0b246IHJlZnJlc2gtYnV0dG9uJyxcbiAgLy8gZGVsZXRlLWJ1dHRvbiBbbm98eWVzXTogc2hvdyBkZWxldGUgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gICdkZWxldGVCdXR0b246IGRlbGV0ZS1idXR0b24nXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfQlVUVE9OUyA9IFtdO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLWJ1dHRvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS1idXR0b25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby10YWJsZS1idXR0b25zLmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRV9CVVRUT05TLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19UQUJMRV9CVVRUT05TLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby10YWJsZS1idXR0b25zXSc6ICd0cnVlJyxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPVGFibGVCdXR0b25zQ29tcG9uZW50IGltcGxlbWVudHMgT1RhYmxlQnV0dG9ucywgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qIElucHV0cyAqL1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGluc2VydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgcmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgZGVsZXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgLyogRW5kIG9mIGlucHV0cyAqL1xuXG4gIHB1YmxpYyBlbmFibGVkSW5zZXJ0QnV0dG9uOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgZW5hYmxlZFJlZnJlc2hCdXR0b246IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyBlbmFibGVkRGVsZXRlQnV0dG9uOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9uc1tdO1xuICBwcm90ZWN0ZWQgbXV0YXRpb25PYnNlcnZlcnM6IE11dGF0aW9uT2JzZXJ2ZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT1RhYmxlQmFzZSkpIHByb3RlY3RlZCB0YWJsZTogT1RhYmxlQmFzZVxuICApIHtcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy50YWJsZS5nZXRBY3Rpb25zUGVybWlzc2lvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnNlcnRQZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ2luc2VydCcpO1xuICAgIGNvbnN0IHJlZnJlc2hQZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ3JlZnJlc2gnKTtcbiAgICBjb25zdCBkZWxldGVQZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ2RlbGV0ZScpO1xuXG4gICAgaWYgKHRoaXMuaW5zZXJ0QnV0dG9uICYmIChpbnNlcnRQZXJtICYmIGluc2VydFBlcm0uZW5hYmxlZCA9PT0gZmFsc2UpKSB7XG4gICAgICB0aGlzLmVuYWJsZWRJbnNlcnRCdXR0b24ubmV4dChmYWxzZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlZnJlc2hCdXR0b24gJiYgKHJlZnJlc2hQZXJtICYmIHJlZnJlc2hQZXJtLmVuYWJsZWQgPT09IGZhbHNlKSkge1xuICAgICAgdGhpcy5lbmFibGVkUmVmcmVzaEJ1dHRvbi5uZXh0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoKSA9PlxuICAgICAgZGVsZXRlUGVybSA/IHRoaXMuZW5hYmxlZERlbGV0ZUJ1dHRvbi5uZXh0KGRlbGV0ZVBlcm0uZW5hYmxlZCAmJiAhdGhpcy50YWJsZS5zZWxlY3Rpb24uaXNFbXB0eSgpKSA6IHRoaXMuZW5hYmxlZERlbGV0ZUJ1dHRvbi5uZXh0KCF0aGlzLnRhYmxlLnNlbGVjdGlvbi5pc0VtcHR5KCkpXG4gICAgKTtcbiAgICB0aGlzLnRhYmxlLnJlZ2lzdGVyT1RhYmxlQnV0dG9ucyh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdXRhdGlvbk9ic2VydmVycykge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVycy5mb3JFYWNoKChtOiBNdXRhdGlvbk9ic2VydmVyKSA9PiB7XG4gICAgICAgIG0uZGlzY29ubmVjdCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUuYWRkKCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmUoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQZXJtaXNzaW9uQnlBdHRyKGF0dHI6IHN0cmluZyk6IE9QZXJtaXNzaW9ucyB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMuZmluZCgocGVybTogT1Blcm1pc3Npb25zKSA9PiBwZXJtLmF0dHIgPT09IGF0dHIpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyQnV0dG9ucyhvVGFibGVCdXR0b25zOiBPVGFibGVCdXR0b25Db21wb25lbnRbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZpeGVkQnV0dG9ucyA9IFsnaW5zZXJ0JywgJ3JlZnJlc2gnLCAnZGVsZXRlJ107XG4gICAgY29uc3QgdXNlckl0ZW1zOiBPUGVybWlzc2lvbnNbXSA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKChwZXJtOiBPUGVybWlzc2lvbnMpID0+IGZpeGVkQnV0dG9ucy5pbmRleE9mKHBlcm0uYXR0cikgPT09IC0xKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB1c2VySXRlbXMuZm9yRWFjaCgocGVybTogT1Blcm1pc3Npb25zKSA9PiB7XG4gICAgICBjb25zdCBidXR0b24gPSBvVGFibGVCdXR0b25zLmZpbmQoKG9UYWJsZUJ1dHRvbjogT1RhYmxlQnV0dG9uQ29tcG9uZW50KSA9PiBvVGFibGVCdXR0b24ub2F0dHIgPT09IHBlcm0uYXR0cik7XG4gICAgICBzZWxmLnNldFBlcm1pc3Npb25zVG9PVGFibGVCdXR0b24ocGVybSwgYnV0dG9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzaG93SW5zZXJ0T0J1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaW5zZXJ0QnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignaW5zZXJ0Jyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93UmVmcmVzaE9CdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnJlZnJlc2hCdXR0b24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdyZWZyZXNoJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93RGVsZXRlT0J1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGVsZXRlQnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignZGVsZXRlJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRQZXJtaXNzaW9uc1RvT1RhYmxlQnV0dG9uKHBlcm06IE9QZXJtaXNzaW9ucywgYnV0dG9uOiBPVGFibGVCdXR0b25Db21wb25lbnQpOiB2b2lkIHtcbiAgICBpZiAocGVybS52aXNpYmxlID09PSBmYWxzZSAmJiBidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAocGVybS5lbmFibGVkID09PSBmYWxzZSAmJiBidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5lbmFibGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBidXR0b25FTCA9IGJ1dHRvbi5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuICAgICAgY29uc3Qgb2JzID0gUGVybWlzc2lvbnNVdGlscy5yZWdpc3RlckRpc2FibGVkQ2hhbmdlc0luRG9tKGJ1dHRvbkVMKTtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcnMucHVzaChvYnMpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiIGZ4TGF5b3V0PlxuICA8by10YWJsZS1idXR0b24gYXR0cj1cImFkZFwiICpuZ0lmPVwic2hvd0luc2VydE9CdXR0b25cIiBbZW5hYmxlZF09XCJlbmFibGVkSW5zZXJ0QnV0dG9uIHwgYXN5bmNcIiBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuQUREXCJcbiAgICBzdmctaWNvbj1cIm9udGltaXplOmFkZFwiIChvbkNsaWNrKT1cImFkZCgpXCIgY2xhc3M9XCJvLXRhYmxlLWJ1dHRvbi1hZGRcIj48L28tdGFibGUtYnV0dG9uPlxuICA8by10YWJsZS1idXR0b24gYXR0cj1cInJlZnJlc2hcIiAqbmdJZj1cInNob3dSZWZyZXNoT0J1dHRvblwiIFtlbmFibGVkXT1cImVuYWJsZWRSZWZyZXNoQnV0dG9uIHwgYXN5bmNcIiBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuUkVGUkVTSFwiXG4gICAgc3ZnLWljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIiAob25DbGljayk9XCJyZWxvYWREYXRhKClcIiBjbGFzcz1cIm8tdGFibGUtYnV0dG9uLXJlZnJlc2hcIj5cbiAgPC9vLXRhYmxlLWJ1dHRvbj5cbiAgPG8tdGFibGUtYnV0dG9uIGF0dHI9XCJkZWxldGVcIiAqbmdJZj1cInNob3dEZWxldGVPQnV0dG9uXCIgW2VuYWJsZWRdPVwiZW5hYmxlZERlbGV0ZUJ1dHRvbiB8IGFzeW5jXCIgbGFiZWw9XCJUQUJMRS5CVVRUT05TLkRFTEVURVwiXG4gICAgc3ZnLWljb249XCJvbnRpbWl6ZTpkZWxldGVcIiAob25DbGljayk9XCJyZW1vdmUoKVwiIGNsYXNzPVwiby10YWJsZS1idXR0b24tZGVsZXRlXCI+PC9vLXRhYmxlLWJ1dHRvbj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=