ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
132 lines • 24.4 kB
JavaScript
import { Component, Inject, Injector, ViewChild, ViewEncapsulation } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { DialogService } from '../../../services/dialog.service';
import { Util } from '../../../util/util';
import { OFormLayoutManagerContentDirective } from '../directives/o-form-layout-manager-content.directive';
import { OFormLayoutManagerService } from '../../../services/o-form-layout-manager.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/dialog";
import * as i2 from "@angular/common";
import * as i3 from "@angular/flex-layout/flex";
import * as i4 from "@angular/material/icon";
import * as i5 from "../directives/o-form-layout-manager-content.directive";
import * as i6 from "../../../pipes/o-translate.pipe";
export class OFormLayoutDialogComponent {
constructor(dialogRef, injector, data) {
this.dialogRef = dialogRef;
this.injector = injector;
this.title = 'LAYOUT_MANANGER.DIALOG_TITLE';
this.fullscreen = false;
this.dialogService = injector.get(DialogService);
if (typeof data.title !== 'undefined') {
this.title = data.title;
}
if (data.data) {
this.data = data.data;
this.component = data.data.component;
;
this.params = data.data.params;
this.queryParams = data.data.queryParams;
this.urlSegments = data.data.urlSegments;
this.dialogTitleSeparator = data.dialogTitleSeparator;
this.showFullscreenButton = data.showFullscreenButton;
}
if (data.layoutManagerComponent) {
this.formLayoutManager = data.layoutManagerComponent;
}
}
ngAfterViewInit() {
if (this.contentDirective && this.component) {
const viewContainerRef = this.contentDirective.viewContainerRef;
viewContainerRef.clear();
viewContainerRef.createComponent(this.component);
}
}
setFullscreenDialog() {
if (this.fullscreen) {
this.dialogRef.updateSize(this.formLayoutManager.dialogOptions.width, this.formLayoutManager.dialogOptions.height);
}
else {
this.dialogRef.updateSize("100%", "100%");
}
this.fullscreen = !this.fullscreen;
}
updateNavigation(data) {
const formLayoutManagerService = this.injector.get(OFormLayoutManagerService);
const context = formLayoutManagerService.context;
this.label = context?.label || this.formLayoutManager.getLabelFromData(data);
}
updateActiveData(data) {
this.data = Object.assign(this.data, data);
}
closeDialog(options) {
if (Util.isDefined(options) && Util.isDefined(options.exitWithoutConfirmation) && options.exitWithoutConfirmation) {
this.dialogRef.close();
}
else {
if (this.formLayoutManager.hasToConfirmExit(this.data)) {
this.dialogService.confirm('CONFIRM', 'MESSAGES.FORM_CHANGES_WILL_BE_LOST').then(res => {
if (res) {
this.dialogRef.close();
}
});
}
else {
this.dialogRef.close();
}
}
}
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;
}
closeDetail(options) {
this.closeDialog(options);
}
getDataToStore() {
return null;
}
setModifiedState(formAttr, modified, confirmExit) {
this.data.innerFormsInfo[formAttr] = {
modified: modified,
confirmOnExit: confirmExit
};
}
canAddDetailComponent() {
return true;
}
getIdOfActiveItem() {
return 'dialog';
}
}
OFormLayoutDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i0.Injector }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
OFormLayoutDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OFormLayoutDialogComponent, selector: "o-form-layout-dialog", host: { properties: { "class.o-form-layout-dialog": "true" } }, viewQueries: [{ propertyName: "contentDirective", first: true, predicate: OFormLayoutManagerContentDirective, descendants: true }], ngImport: i0, template: "<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"title-container\" mat-dialog-title>\n <span fxFlex fxLayoutAlign=\"center center\"> {{ title | oTranslate }} <span *ngIf=\"title?.length>0\">{{dialogTitleSeparator}} </span>{{ label\n }}</span>\n <mat-icon *ngIf=\"showFullscreenButton\" aria-label=\"fullscreen dialog\" (click)=\"setFullscreenDialog()\" (keydown)=\"setFullscreenDialog()\">\n <ng-container *ngIf=\"fullscreen\">fullscreen_exit</ng-container>\n <ng-container *ngIf=\"!fullscreen\">fullscreen</ng-container>\n </mat-icon>\n <mat-icon (click)=\"closeDialog()\" svgIcon=\"ontimize:close\"></mat-icon>\n</div>\n\n<div mat-dialog-content class=\"form-layout-dialog-container\">\n <ng-template o-form-layout-manager-content></ng-template>\n</div>\n", styles: [".o-form-layout-dialog-overlay{width:65%;height:90%}.o-form-layout-dialog-overlay .title-container{cursor:default}.o-form-layout-dialog-overlay .title-container .mat-icon{cursor:pointer}.o-form-layout-dialog-overlay .mat-mdc-dialog-container{overflow:hidden}.o-form-layout-dialog-overlay .mat-mdc-dialog-container .mat-mdc-dialog-content.form-layout-dialog-container{display:block;padding-top:16px;margin:0;max-height:calc(100% - 78px);height:100%}.o-form-layout-dialog-overlay .mat-mdc-dialog-container .o-form-layout-dialog o-form-toolbar .mat-toolbar{padding:0}.o-form-layout-dialog-overlay .mat-mdc-dialog-container .o-form-layout-dialog .o-form form.inner-form{position:relative;margin-top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.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: i3.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: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.OFormLayoutManagerContentDirective, selector: "[o-form-layout-manager-content]", inputs: ["index"] }, { kind: "pipe", type: i6.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutDialogComponent, decorators: [{
type: Component,
args: [{ selector: 'o-form-layout-dialog', encapsulation: ViewEncapsulation.None, host: {
'[class.o-form-layout-dialog]': 'true'
}, template: "<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"title-container\" mat-dialog-title>\n <span fxFlex fxLayoutAlign=\"center center\"> {{ title | oTranslate }} <span *ngIf=\"title?.length>0\">{{dialogTitleSeparator}} </span>{{ label\n }}</span>\n <mat-icon *ngIf=\"showFullscreenButton\" aria-label=\"fullscreen dialog\" (click)=\"setFullscreenDialog()\" (keydown)=\"setFullscreenDialog()\">\n <ng-container *ngIf=\"fullscreen\">fullscreen_exit</ng-container>\n <ng-container *ngIf=\"!fullscreen\">fullscreen</ng-container>\n </mat-icon>\n <mat-icon (click)=\"closeDialog()\" svgIcon=\"ontimize:close\"></mat-icon>\n</div>\n\n<div mat-dialog-content class=\"form-layout-dialog-container\">\n <ng-template o-form-layout-manager-content></ng-template>\n</div>\n", styles: [".o-form-layout-dialog-overlay{width:65%;height:90%}.o-form-layout-dialog-overlay .title-container{cursor:default}.o-form-layout-dialog-overlay .title-container .mat-icon{cursor:pointer}.o-form-layout-dialog-overlay .mat-mdc-dialog-container{overflow:hidden}.o-form-layout-dialog-overlay .mat-mdc-dialog-container .mat-mdc-dialog-content.form-layout-dialog-container{display:block;padding-top:16px;margin:0;max-height:calc(100% - 78px);height:100%}.o-form-layout-dialog-overlay .mat-mdc-dialog-container .o-form-layout-dialog o-form-toolbar .mat-toolbar{padding:0}.o-form-layout-dialog-overlay .mat-mdc-dialog-container .o-form-layout-dialog .o-form form.inner-form{position:relative;margin-top:0}\n"] }]
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i0.Injector }, { type: undefined, decorators: [{
type: Inject,
args: [MAT_DIALOG_DATA]
}] }]; }, propDecorators: { contentDirective: [{
type: ViewChild,
args: [OFormLayoutManagerContentDirective]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2xheW91dHMvZm9ybS1sYXlvdXQvZGlhbG9nL28tZm9ybS1sYXlvdXQtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L2RpYWxvZy9vLWZvcm0tbGF5b3V0LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXpFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFFM0csT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7O0FBVzVGLE1BQU0sT0FBTywwQkFBMEI7SUFrQnJDLFlBQ1MsU0FBbUQsRUFDaEQsUUFBa0IsRUFDSCxJQUFTO1FBRjNCLGNBQVMsR0FBVCxTQUFTLENBQTBDO1FBQ2hELGFBQVEsR0FBUixRQUFRLENBQVU7UUFkOUIsVUFBSyxHQUFXLDhCQUE4QixDQUFDO1FBTXJDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFXcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELElBQUks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QUUsUUFBaUIsRUFBRSxXQUFvQjtRQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRztZQUNuQyxRQUFRLEVBQUUsUUFBUTtZQUNsQixhQUFhLEVBQUUsV0FBVztTQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzt3SEFySVUsMEJBQTBCLHNFQXFCM0IsZUFBZTs0R0FyQmQsMEJBQTBCLDhLQWdCMUIsa0NBQWtDLGdEQ3BDL0MsOHhCQWFBOzRGRE9hLDBCQUEwQjtrQkFUdEMsU0FBUzsrQkFDRSxzQkFBc0IsaUJBR2pCLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osOEJBQThCLEVBQUUsTUFBTTtxQkFDdkM7OzBCQXVCRSxNQUFNOzJCQUFDLGVBQWU7NENBTHNCLGdCQUFnQjtzQkFBOUQsU0FBUzt1QkFBQyxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgSUxheW91dE1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2xheW91dC1tYW5hZ2VyLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLW1vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL28tZm9ybS1sYXlvdXQtbWFuYWdlci1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJCYXNlIH0gZnJvbSAnLi4vby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL28tZm9ybS1sYXlvdXQtbWFuYWdlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1mb3JtLWxheW91dC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vby1mb3JtLWxheW91dC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWZvcm0tbGF5b3V0LWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLWZvcm0tbGF5b3V0LWRpYWxvZ10nOiAndHJ1ZSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9Gb3JtTGF5b3V0TWFuYWdlck1vZGUsIEFmdGVyVmlld0luaXQge1xuICBmb3JtTGF5b3V0TWFuYWdlcjogT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZTtcbiAgcXVlcnlQYXJhbXM6IGFueTtcbiAgcGFyYW1zOiBvYmplY3Q7XG4gIHVybFNlZ21lbnRzOiBhbnlbXTtcbiAgbGFiZWw6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZyA9ICdMQVlPVVRfTUFOQU5HRVIuRElBTE9HX1RJVExFJztcbiAgZGF0YTogYW55O1xuICBkaWFsb2dUaXRsZVNlcGFyYXRvcjogc3RyaW5nO1xuXG5cbiAgcHJvdGVjdGVkIGNvbXBvbmVudDtcbiAgcHJvdGVjdGVkIGZ1bGxzY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XG4gIHByb3RlY3RlZCBzaG93RnVsbHNjcmVlbkJ1dHRvbjtcblxuICBAVmlld0NoaWxkKE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRlbnREaXJlY3RpdmUpIGNvbnRlbnREaXJlY3RpdmU6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRlbnREaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50PixcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBkYXRhOiBhbnlcbiAgKSB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KERpYWxvZ1NlcnZpY2UpO1xuICAgIGlmICh0eXBlb2YgZGF0YS50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMudGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZGF0YS5kYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhLmRhdGE7XG4gICAgICB0aGlzLmNvbXBvbmVudCA9IGRhdGEuZGF0YS5jb21wb25lbnQ7O1xuICAgICAgdGhpcy5wYXJhbXMgPSBkYXRhLmRhdGEucGFyYW1zO1xuICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IGRhdGEuZGF0YS5xdWVyeVBhcmFtcztcbiAgICAgIHRoaXMudXJsU2VnbWVudHMgPSBkYXRhLmRhdGEudXJsU2VnbWVudHM7XG4gICAgICB0aGlzLmRpYWxvZ1RpdGxlU2VwYXJhdG9yID0gZGF0YS5kaWFsb2dUaXRsZVNlcGFyYXRvclxuICAgICAgdGhpcy5zaG93RnVsbHNjcmVlbkJ1dHRvbiA9IGRhdGEuc2hvd0Z1bGxzY3JlZW5CdXR0b247XG4gICAgfVxuICAgIGlmIChkYXRhLmxheW91dE1hbmFnZXJDb21wb25lbnQpIHtcbiAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIgPSBkYXRhLmxheW91dE1hbmFnZXJDb21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnREaXJlY3RpdmUgJiYgdGhpcy5jb21wb25lbnQpIHtcbiAgICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmNvbnRlbnREaXJlY3RpdmUudmlld0NvbnRhaW5lclJlZjtcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KTtcbiAgICB9XG4gIH1cbiAgc2V0RnVsbHNjcmVlbkRpYWxvZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mdWxsc2NyZWVuKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi51cGRhdGVTaXplKFxuICAgICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmRpYWxvZ09wdGlvbnMud2lkdGgsXG4gICAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZGlhbG9nT3B0aW9ucy5oZWlnaHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLnVwZGF0ZVNpemUoXCIxMDAlXCIsIFwiMTAwJVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmZ1bGxzY3JlZW4gPSAhdGhpcy5mdWxsc2NyZWVuO1xuICB9XG5cbiAgdXBkYXRlTmF2aWdhdGlvbihkYXRhOiBhbnkpIHtcbiAgICBjb25zdCBmb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlKTtcbiAgICBjb25zdCBjb250ZXh0ID0gZm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmNvbnRleHQ7XG5cbiAgICB0aGlzLmxhYmVsID0gY29udGV4dD8ubGFiZWwgfHwgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5nZXRMYWJlbEZyb21EYXRhKGRhdGEpO1xuICB9XG5cbiAgdXBkYXRlQWN0aXZlRGF0YShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLmRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgZGF0YSk7XG4gIH1cblxuICBjbG9zZURpYWxvZyhvcHRpb25zPzogYW55KSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9wdGlvbnMpICYmIFV0aWwuaXNEZWZpbmVkKG9wdGlvbnMuZXhpdFdpdGhvdXRDb25maXJtYXRpb24pICYmIG9wdGlvbnMuZXhpdFdpdGhvdXRDb25maXJtYXRpb24pIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmhhc1RvQ29uZmlybUV4aXQodGhpcy5kYXRhKSkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybSgnQ09ORklSTScsICdNRVNTQUdFUy5GT1JNX0NIQU5HRVNfV0lMTF9CRV9MT1NUJykudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Um91dGVPZkFjdGl2ZUl0ZW0oKTogYW55W10ge1xuICAgIGNvbnN0IHBhcmVudFJvdXRlID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5wYXJlbnRGb3JtTGF5b3V0TWFuYWdlci5nZXRSb3V0ZU9mQWN0aXZlSXRlbSgpO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gKHRoaXMudXJsU2VnbWVudHMgfHwgW10pO1xuICAgIGNvbnN0IHJvdXRlID0gW107XG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChwYXJlbnRSb3V0ZVtpbmRleF0gIT09IHNlZ21lbnQucGF0aCkge1xuICAgICAgICByb3V0ZS5wdXNoKHNlZ21lbnQucGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgZ2V0UGFyYW1zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgZ2V0Rm9ybUNhY2hlRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgaXNNYWluQ29tcG9uZW50KGNvbXA6IElMYXlvdXRNYW5hZ2VyQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFjb21wLm9Gb3JtTGF5b3V0RGlhbG9nO1xuICB9XG5cbiAgY2xvc2VEZXRhaWwob3B0aW9ucykge1xuICAgIHRoaXMuY2xvc2VEaWFsb2cob3B0aW9ucyk7XG4gIH1cblxuICBnZXREYXRhVG9TdG9yZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0TW9kaWZpZWRTdGF0ZShmb3JtQXR0cjogc3RyaW5nLCBtb2RpZmllZDogYm9vbGVhbiwgY29uZmlybUV4aXQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRhdGEuaW5uZXJGb3Jtc0luZm9bZm9ybUF0dHJdID0ge1xuICAgICAgbW9kaWZpZWQ6IG1vZGlmaWVkLFxuICAgICAgY29uZmlybU9uRXhpdDogY29uZmlybUV4aXRcbiAgICB9O1xuICB9XG5cbiAgY2FuQWRkRGV0YWlsQ29tcG9uZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0SWRPZkFjdGl2ZUl0ZW0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2RpYWxvZyc7XG4gIH1cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiIG1hdC1kaWFsb2ctdGl0bGU+XG4gIDxzcGFuIGZ4RmxleCBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPiB7eyB0aXRsZSB8IG9UcmFuc2xhdGUgfX0gPHNwYW4gKm5nSWY9XCJ0aXRsZT8ubGVuZ3RoPjBcIj57e2RpYWxvZ1RpdGxlU2VwYXJhdG9yfX0mbmJzcDs8L3NwYW4+e3sgbGFiZWxcbiAgICB9fTwvc3Bhbj5cbiAgPG1hdC1pY29uICpuZ0lmPVwic2hvd0Z1bGxzY3JlZW5CdXR0b25cIiBhcmlhLWxhYmVsPVwiZnVsbHNjcmVlbiBkaWFsb2dcIiAoY2xpY2spPVwic2V0RnVsbHNjcmVlbkRpYWxvZygpXCIgKGtleWRvd24pPVwic2V0RnVsbHNjcmVlbkRpYWxvZygpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZ1bGxzY3JlZW5cIj5mdWxsc2NyZWVuX2V4aXQ8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZ1bGxzY3JlZW5cIj5mdWxsc2NyZWVuPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWljb24+XG4gIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIHN2Z0ljb249XCJvbnRpbWl6ZTpjbG9zZVwiPjwvbWF0LWljb24+XG48L2Rpdj5cblxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJmb3JtLWxheW91dC1kaWFsb2ctY29udGFpbmVyXCI+XG4gIDxuZy10ZW1wbGF0ZSBvLWZvcm0tbGF5b3V0LW1hbmFnZXItY29udGVudD48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=