UNPKG

ontimize-web-ngx

Version:
132 lines 24.9 kB
import { Component, Inject, Injector, Input, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core'; import { MatSidenav } from '@angular/material/sidenav'; import { DialogService } from '../../../services/dialog.service'; import { Util } from '../../../util/util'; import { OFormLayoutManagerContentDirective } from '../directives/o-form-layout-manager-content.directive'; import { OFormLayoutManagerBase } from '../o-form-layout-manager-base.class'; import { OFormLayoutManagerService } from '../../../services/o-form-layout-manager.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/flex-layout/flex"; import * as i2 from "@angular/material/icon"; import * as i3 from "@angular/material/sidenav"; import * as i4 from "../directives/o-form-layout-manager-content.directive"; import * as i5 from "../o-form-layout-manager-base.class"; export class OFormLayoutSidenavComponent { constructor(injector, formLayoutManager) { this.injector = injector; this.formLayoutManager = formLayoutManager; this.position = 'end'; this.width = '60%'; this.dialogService = injector.get(DialogService); } ngAfterViewInit() { if (this.contentDirective && this.component) { const viewContainerRef = this.contentDirective.viewContainerRef; viewContainerRef.clear(); viewContainerRef.createComponent(this.component); } } openDetail(detail) { this.data = detail; this.component = detail.component; this.params = detail.params; this.queryParams = detail.queryParams; this.urlSegments = detail.urlSegments; this.sidenav.open(); if (this.contentDirective && this.component) { const viewContainerRef = this.contentDirective.viewContainerRef; viewContainerRef.clear(); viewContainerRef.createComponent(this.component); } this.updateNavigation(this.data); detail.rendered = true; detail.rendererSubject.next(true); } closeDetail(options) { if (Util.isDefined(options) && Util.isDefined(options?.exitWithoutConfirmation) && options.exitWithoutConfirmation) { this.sidenav.close(); return; } if (this.formLayoutManager.hasToConfirmExit(this.data)) { this.dialogService .confirm('CONFIRM', 'MESSAGES.FORM_CHANGES_WILL_BE_LOST') .then(res => { if (res) { this.sidenav.close(); } }); } else { this.sidenav.close(); } } updateNavigation(data) { const service = this.injector.get(OFormLayoutManagerService); const context = service.context; this.label = context?.label || this.formLayoutManager.getLabelFromData(data); } updateActiveData(data) { this.data = Object.assign(this.data, data); } getRouteOfActiveItem() { const parentRoute = this.formLayoutManager.parentFormLayoutManager?.getRouteOfActiveItem() || []; const segments = this.urlSegments || []; const route = []; segments.forEach((segment, index) => { if (parentRoute[index] !== segment.path) { route.push(segment.path); } }); return route; } getParams() { return this.params; } getFormCacheData() { return this.data; } isMainComponent(comp) { return !comp.oFormLayoutDialog; } getDataToStore() { return { opened: this.sidenav?.opened }; } setModifiedState(formAttr, modified, confirmExit) { this.data.innerFormsInfo[formAttr] = { modified, confirmOnExit: confirmExit }; } canAddDetailComponent() { return !this.sidenav?.opened; } getIdOfActiveItem() { return 'sidenav'; } } OFormLayoutSidenavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutSidenavComponent, deps: [{ token: i0.Injector }, { token: forwardRef(() => OFormLayoutManagerBase) }], target: i0.ɵɵFactoryTarget.Component }); OFormLayoutSidenavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OFormLayoutSidenavComponent, selector: "o-form-layout-sidenav", inputs: { position: "position", width: "width" }, host: { properties: { "class.o-form-layout-sidenav": "true", "style.--sidenav-width": "width" } }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true }, { propertyName: "contentDirective", first: true, predicate: OFormLayoutManagerContentDirective, descendants: true }], ngImport: i0, template: "<mat-sidenav-container class=\"o-form-layout-sidenav-container\">\n\n <mat-sidenav #sidenav mode=\"over\" [position]=\"position\" class=\"o-form-layout-matsidenav\" [class.position-end]=\"position === 'end'\"\n [class.position-start]=\"position === 'start'\">\n\n <!-- Header -->\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"sidenav-title-container\">\n\n <span fxFlex fxLayoutAlign=\"start center\">\n {{ label }}\n </span>\n\n <mat-icon (click)=\"closeDetail()\" svgIcon=\"ontimize:close\" (keydown)=\"closeDetail()\"></mat-icon>\n\n </div>\n\n <div class=\"form-layout-sidenav-content\">\n <ng-template o-form-layout-manager-content></ng-template>\n </div>\n\n </mat-sidenav>\n\n <mat-sidenav-content class=\"sidenav-content\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n\n</mat-sidenav-container>\n", styles: [".o-form-layout-sidenav{display:block;height:100%}.o-form-layout-sidenav .o-form-layout-sidenav-container{height:100%}.o-form-layout-sidenav .o-form-layout-sidenav-container .mat-drawer.o-form-layout-matsidenav{width:var(--sidenav-width);min-width:var(--sidenav-width);max-width:var(--sidenav-width);flex:0 0 var(--sidenav-width);box-sizing:border-box;display:flex;flex-direction:column}.o-form-layout-sidenav .o-form-layout-matsidenav{padding:24px 32px}.o-form-layout-sidenav .title-container{flex:0 0 auto;padding:0 0 8px;margin-bottom:10px}.o-form-layout-sidenav .form-layout-sidenav-content{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;max-height:calc(100% - 44px)}.o-form-layout-sidenav .sidenav-content{height:100%;overflow:auto}\n"], dependencies: [{ kind: "directive", type: i1.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: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i3.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "directive", type: i4.OFormLayoutManagerContentDirective, selector: "[o-form-layout-manager-content]", inputs: ["index"] }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutSidenavComponent, decorators: [{ type: Component, args: [{ selector: 'o-form-layout-sidenav', encapsulation: ViewEncapsulation.None, host: { '[class.o-form-layout-sidenav]': 'true', '[style.--sidenav-width]': 'width' }, template: "<mat-sidenav-container class=\"o-form-layout-sidenav-container\">\n\n <mat-sidenav #sidenav mode=\"over\" [position]=\"position\" class=\"o-form-layout-matsidenav\" [class.position-end]=\"position === 'end'\"\n [class.position-start]=\"position === 'start'\">\n\n <!-- Header -->\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"sidenav-title-container\">\n\n <span fxFlex fxLayoutAlign=\"start center\">\n {{ label }}\n </span>\n\n <mat-icon (click)=\"closeDetail()\" svgIcon=\"ontimize:close\" (keydown)=\"closeDetail()\"></mat-icon>\n\n </div>\n\n <div class=\"form-layout-sidenav-content\">\n <ng-template o-form-layout-manager-content></ng-template>\n </div>\n\n </mat-sidenav>\n\n <mat-sidenav-content class=\"sidenav-content\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n\n</mat-sidenav-container>\n", styles: [".o-form-layout-sidenav{display:block;height:100%}.o-form-layout-sidenav .o-form-layout-sidenav-container{height:100%}.o-form-layout-sidenav .o-form-layout-sidenav-container .mat-drawer.o-form-layout-matsidenav{width:var(--sidenav-width);min-width:var(--sidenav-width);max-width:var(--sidenav-width);flex:0 0 var(--sidenav-width);box-sizing:border-box;display:flex;flex-direction:column}.o-form-layout-sidenav .o-form-layout-matsidenav{padding:24px 32px}.o-form-layout-sidenav .title-container{flex:0 0 auto;padding:0 0 8px;margin-bottom:10px}.o-form-layout-sidenav .form-layout-sidenav-content{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;max-height:calc(100% - 44px)}.o-form-layout-sidenav .sidenav-content{height:100%;overflow:auto}\n"] }] }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i5.OFormLayoutManagerBase, decorators: [{ type: Inject, args: [forwardRef(() => OFormLayoutManagerBase)] }] }]; }, propDecorators: { position: [{ type: Input }], width: [{ type: Input }], sidenav: [{ type: ViewChild, args: [MatSidenav] }], contentDirective: [{ type: ViewChild, args: [OFormLayoutManagerContentDirective] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC1zaWRlbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L3NpZGVuYXYvby1mb3JtLWxheW91dC1zaWRlbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L3NpZGVuYXYvby1mb3JtLWxheW91dC1zaWRlbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7QUFjNUYsTUFBTSxPQUFPLDJCQUEyQjtJQTBCdEMsWUFDWSxRQUFrQixFQUVyQixpQkFBeUM7UUFGdEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUVyQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXdCO1FBdEJ6QyxhQUFRLEdBQW9CLEtBQUssQ0FBQztRQUNsQyxVQUFLLEdBQVcsS0FBSyxDQUFDO1FBdUI3QixJQUFJLENBQUMs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NEI1QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7NkdBNUJ2QywyQkFBMkIsMlBBVzNCLFVBQVUsbUZBR1Ysa0NBQWtDLGdEQzlDL0MsNjNCQTJCQTs0RkRLYSwyQkFBMkI7a0JBWHZDLFNBQVM7K0JBQ0UsdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLCtCQUErQixFQUFFLE1BQU07d0JBQ3ZDLHlCQUF5QixFQUFFLE9BQU87cUJBRW5DOzswQkE4QkUsTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7NENBckJ6QyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFJTixPQUFPO3NCQUROLFNBQVM7dUJBQUMsVUFBVTtnQkFJckIsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNpZGVuYXYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcblxuaW1wb3J0IHsgSUxheW91dE1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2xheW91dC1tYW5hZ2VyLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLW1vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL28tZm9ybS1sYXlvdXQtbWFuYWdlci1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJCYXNlIH0gZnJvbSAnLi4vby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL28tZm9ybS1sYXlvdXQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMsIEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWZvcm0tbGF5b3V0LXNpZGVuYXYnLFxuICB0ZW1wbGF0ZVVybDogJy4vby1mb3JtLWxheW91dC1zaWRlbmF2LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1mb3JtLWxheW91dC1zaWRlbmF2LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZm9ybS1sYXlvdXQtc2lkZW5hdl0nOiAndHJ1ZScsXG4gICAgJ1tzdHlsZS4tLXNpZGVuYXYtd2lkdGhdJzogJ3dpZHRoJ1xuXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgT0Zvcm1MYXlvdXRTaWRlbmF2Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICBJbnB1dHMgKG9wdGlvbnMgZGlyZWN0aXZlKVxuICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgQElucHV0KCkgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJyA9ICdlbmQnO1xuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJzYwJSc7XG5cblxuICBAVmlld0NoaWxkKE1hdFNpZGVuYXYpXG4gIHNpZGVuYXY6IE1hdFNpZGVuYXY7XG5cbiAgQFZpZXdDaGlsZChPRm9ybUxheW91dE1hbmFnZXJDb250ZW50RGlyZWN0aXZlKVxuICBjb250ZW50RGlyZWN0aXZlOiBPRm9ybUxheW91dE1hbmFnZXJDb250ZW50RGlyZWN0aXZlO1xuXG4gIGNvbXBvbmVudDogYW55O1xuICBkYXRhOiBhbnk7XG4gIHBhcmFtczogb2JqZWN0O1xuICBxdWVyeVBhcmFtczogYW55O1xuICB1cmxTZWdtZW50czogYW55W107XG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSkpXG4gICAgcHVibGljIGZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlXG4gICkge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IGluamVjdG9yLmdldChEaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRlbnREaXJlY3RpdmUgJiYgdGhpcy5jb21wb25lbnQpIHtcbiAgICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmNvbnRlbnREaXJlY3RpdmUudmlld0NvbnRhaW5lclJlZjtcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgIE9Gb3JtTGF5b3V0TWFuYWdlck1vZGUgQVBJXG4gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICBvcGVuRGV0YWlsKGRldGFpbDogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEgPSBkZXRhaWw7XG4gICAgdGhpcy5jb21wb25lbnQgPSBkZXRhaWwuY29tcG9uZW50O1xuICAgIHRoaXMucGFyYW1zID0gZGV0YWlsLnBhcmFtcztcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gZGV0YWlsLnF1ZXJ5UGFyYW1zO1xuICAgIHRoaXMudXJsU2VnbWVudHMgPSBkZXRhaWwudXJsU2VnbWVudHM7XG5cbiAgICB0aGlzLnNpZGVuYXYub3BlbigpO1xuXG4gICAgaWYgKHRoaXMuY29udGVudERpcmVjdGl2ZSAmJiB0aGlzLmNvbXBvbmVudCkge1xuICAgICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuY29udGVudERpcmVjdGl2ZS52aWV3Q29udGFpbmVyUmVmO1xuICAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5jb21wb25lbnQpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbih0aGlzLmRhdGEpO1xuXG4gICAgZGV0YWlsLnJlbmRlcmVkID0gdHJ1ZTtcbiAgICBkZXRhaWwucmVuZGVyZXJTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gIH1cblxuXG4gIGNsb3NlRGV0YWlsKG9wdGlvbnM/OiBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zKTogdm9pZCB7XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQob3B0aW9ucykgJiYgVXRpbC5pc0RlZmluZWQob3B0aW9ucz8uZXhpdFdpdGhvdXRDb25maXJtYXRpb24pICYmIG9wdGlvbnMuZXhpdFdpdGhvdXRDb25maXJtYXRpb24pIHtcbiAgICAgIHRoaXMuc2lkZW5hdi5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmhhc1RvQ29uZmlybUV4aXQodGhpcy5kYXRhKSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgIC5jb25maXJtKCdDT05GSVJNJywgJ01FU1NBR0VTLkZPUk1fQ0hBTkdFU19XSUxMX0JFX0xPU1QnKVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2lkZW5hdi5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2lkZW5hdi5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU5hdmlnYXRpb24oZGF0YTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UpO1xuICAgIGNvbnN0IGNvbnRleHQgPSBzZXJ2aWNlLmNvbnRleHQ7XG5cbiAgICB0aGlzLmxhYmVsID0gY29udGV4dD8ubGFiZWxcbiAgICAgIHx8IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0TGFiZWxGcm9tRGF0YShkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUFjdGl2ZURhdGEoZGF0YTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIGRhdGEpO1xuICB9XG5cbiAgZ2V0Um91dGVPZkFjdGl2ZUl0ZW0oKTogYW55W10ge1xuICAgIGNvbnN0IHBhcmVudFJvdXRlID1cbiAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIucGFyZW50Rm9ybUxheW91dE1hbmFnZXI/LmdldFJvdXRlT2ZBY3RpdmVJdGVtKCkgfHwgW107XG5cbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMudXJsU2VnbWVudHMgfHwgW107XG4gICAgY29uc3Qgcm91dGUgPSBbXTtcblxuICAgIHNlZ21lbnRzLmZvckVhY2goKHNlZ21lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAocGFyZW50Um91dGVbaW5kZXhdICE9PSBzZWdtZW50LnBhdGgpIHtcbiAgICAgICAgcm91dGUucHVzaChzZWdtZW50LnBhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgZ2V0UGFyYW1zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgZ2V0Rm9ybUNhY2hlRGF0YSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBpc01haW5Db21wb25lbnQoY29tcDogSUxheW91dE1hbmFnZXJDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWNvbXAub0Zvcm1MYXlvdXREaWFsb2c7XG4gIH1cblxuICBnZXREYXRhVG9TdG9yZSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMuc2lkZW5hdj8ub3BlbmVkXG4gICAgfTtcbiAgfVxuXG4gIHNldE1vZGlmaWVkU3RhdGUoZm9ybUF0dHI6IHN0cmluZywgbW9kaWZpZWQ6IGJvb2xlYW4sIGNvbmZpcm1FeGl0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLmlubmVyRm9ybXNJbmZvW2Zvcm1BdHRyXSA9IHtcbiAgICAgIG1vZGlmaWVkLFxuICAgICAgY29uZmlybU9uRXhpdDogY29uZmlybUV4aXRcbiAgICB9O1xuICB9XG5cbiAgY2FuQWRkRGV0YWlsQ29tcG9uZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zaWRlbmF2Py5vcGVuZWQ7XG4gIH1cblxuICBnZXRJZE9mQWN0aXZlSXRlbSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnc2lkZW5hdic7XG4gIH1cbn1cblxuIiwiPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBjbGFzcz1cIm8tZm9ybS1sYXlvdXQtc2lkZW5hdi1jb250YWluZXJcIj5cblxuICA8bWF0LXNpZGVuYXYgI3NpZGVuYXYgbW9kZT1cIm92ZXJcIiBbcG9zaXRpb25dPVwicG9zaXRpb25cIiBjbGFzcz1cIm8tZm9ybS1sYXlvdXQtbWF0c2lkZW5hdlwiIFtjbGFzcy5wb3NpdGlvbi1lbmRdPVwicG9zaXRpb24gPT09ICdlbmQnXCJcbiAgICBbY2xhc3MucG9zaXRpb24tc3RhcnRdPVwicG9zaXRpb24gPT09ICdzdGFydCdcIj5cblxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBjbGFzcz1cInNpZGVuYXYtdGl0bGUtY29udGFpbmVyXCI+XG5cbiAgICAgIDxzcGFuIGZ4RmxleCBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEZXRhaWwoKVwiIHN2Z0ljb249XCJvbnRpbWl6ZTpjbG9zZVwiIChrZXlkb3duKT1cImNsb3NlRGV0YWlsKClcIj48L21hdC1pY29uPlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1sYXlvdXQtc2lkZW5hdi1jb250ZW50XCI+XG4gICAgICA8bmctdGVtcGxhdGUgby1mb3JtLWxheW91dC1tYW5hZ2VyLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICA8L21hdC1zaWRlbmF2PlxuXG4gIDxtYXQtc2lkZW5hdi1jb250ZW50IGNsYXNzPVwic2lkZW5hdi1jb250ZW50XCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L21hdC1zaWRlbmF2LWNvbnRlbnQ+XG5cbjwvbWF0LXNpZGVuYXYtY29udGFpbmVyPlxuIl19