@huntsman-cancer-institute/dialog 12.11.9-SNAPSHOT → 12.11.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["ng://@huntsman-cancer-institute/dialog/model/dialog-type.model.ts","ng://@huntsman-cancer-institute/dialog/model/generic-dialog-action.model.ts","ng://@huntsman-cancer-institute/dialog/alert/alert-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/spinner/spinner-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/spinner/spinner-dialog.component.html","ng://@huntsman-cancer-institute/dialog/custom/custom-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/model/confirm-type.model.ts","ng://@huntsman-cancer-institute/dialog/generic/generic-container-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/generic/generic-container-dialog.component.html","ng://@huntsman-cancer-institute/dialog/model/base-generic-container-dialog.ts","ng://@huntsman-cancer-institute/dialog/confirm/confirm-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/service/dialog.service.ts","ng://@huntsman-cancer-institute/dialog/save-footer/save-footer.component.ts","ng://@huntsman-cancer-institute/dialog/dialog.module.ts"],"names":["DialogType","ActionType","AlertDialogComponent","dialogRef","data","changeDetector","this","type","message","title","icon","dialogType","defaultTitle","actionType","SECONDARY","originalXClick","originalYClick","positionX","positionY","movingDialog","Array","isArray","prototype","ngOnInit","i","length","replace","onClickOk","close","onClickYes","onClickNo","onMouseDownHeader","event","topmostLeftmost","nativeElement","offsetLeft","offsetTop","screenX","screenY","detach","onMouseMove","newDialogPosition","left","top","updatePosition","onMouseUp","reattach","deps","token","dialog","MatDialogRef","MAT_DIALOG_DATA","i0","ChangeDetectorRef","target","ɵɵFactoryTarget","Component","selector","host","listeners","window:mousemove","window:mouseup","viewQueries","propertyName","first","predicate","descendants","ngImport","template","isInline","styles","directives","MatDialogTitle","inputs","exportAs","common","NgIf","MatDialogContent","NgForOf","MatDialogActions","decorators","Inject","ViewChild","static","HostListener","SpinnerDialogComponent","strokeWidth","diameter","components","progressSpinner","MatSpinner","templateUrl","Input","CustomDialogComponent","actions","tempRef","templateRef","context","actionConfig","form","formSource","Object","defineProperty","invalid","vcr","createEmbeddedView","onClose","executeAction","action","externalAction","internalAction","read","ViewContainerRef","ConfirmType","GenericContainerDialogComponent","router","classList","dialogContentBluePrint","dialogContent","useSaveFooter","createdComponent","instance","internalActionReturnValue","ngOnDestroy","MatDialog","Router","properties","class","ngDynamicComponent","DynamicComponent","outputs","NgClass","DynamicIoDirective","HostBinding","BaseGenericContainerDialog","showSpinner","innerTitle","primaryDisable","secondaryDisable","dirty","inputData","ConfirmDialogComponent","_this","_super","call","prompt","message1","message2","confirmType","GENERIC","temp","values","includes","setupMessagesByType","__extends","DELETE","DELETE_W_MESSAGE","DELETE_W_PROMPT","DISCARD","CONFIRM_AND_CLOSE","ADD","ALERT","Error","onConfirmClick","value","usesInheritance","expansion","MatExpansionPanel","MatExpansionPanelHeader","MatExpansionPanelTitle","DialogService","_spinnerDialogIsOpen","spinnerWorkItemCount","checkingSpinnerWorkItems","spinnerDialogRefs","alert","config","openDialog","confirm","CONFIRM","confirmByType","MatDialogConfig","width","minWidth","disableClose","primary","PRIMARY","name","secondary","undefined","push","genericDialogContainer","error","ERROR","info","INFO","createCustomDialog","configuration","panelClass","hasBackdrop","open","startDefaultSpinnerDialog","startSpinnerDialog","afterClosed","subscribe","startNonModalSpinnerDialog","stopAllSpinnerDialogs","setTimeout","_b","__values","_c","next","done","addSpinnerWorkItem","checkSpinnerWorkItems","removeSpinnerWorkItem","maxWidth","maxHeight","autoFocus","Injectable","SaveFooterComponent","dialogService","disableSave","saveClicked","EventEmitter","_dirty","notifySave","emit","unsubscribe","button","MatButton","Output","DialogModule","forRoot","providers","ngModule","NgModule","declarations","imports","CommonModule","FormsModule","DynamicModule","MatButtonModule","MatDialogModule","MatExpansionModule","MatProgressSpinnerModule","entryComponents","exports"],"mappings":"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","sourcesContent":["\r\n\r\nexport enum DialogType {\r\n ERROR = 'Error',\r\n WARNING = 'Warning',\r\n ALERT = 'Alert',\r\n SUCCESS = 'Succeed',\r\n FAILED = 'Failed',\r\n CONFIRM = 'Confirm',\r\n INFO = 'Info',\r\n VALIDATION = 'Validation Error',\r\n}\r\n","import {MatDialogRef} from '@angular/material/dialog';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\nexport enum ActionType {\r\n PRIMARY = 'primary',\r\n SECONDARY = 'accent'\r\n}\r\nexport interface GDActionConfig {\r\n formSource?: FormGroup;\r\n actions: GDAction[];\r\n}\r\nexport interface GDAction {\r\n type: ActionType;\r\n internalAction?: string;\r\n internalActionReturnValue?: boolean | any;\r\n externalAction?: (dialogRef?: MatDialogRef<any>) => void | string;\r\n icon?: string;\r\n name: string;\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Inject, OnInit,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {DialogPosition, MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {DialogType} from '../model/dialog-type.model';\r\nimport {ActionType} from '../model/generic-dialog-action.model';\r\n\r\n@Component({\r\n selector: 'hci-alert-dialog',\r\n template: `\r\n <div class=\"full-height full-width d-flex flex-column\">\r\n <div class=\"full-width dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"force-flex-container-row align-center full-width padding {{ movingDialog ? 'grabbed' : 'grabbable' }}\">\r\n <div class=\"d-flex flex-row align-items-center padded\">\r\n <img *ngIf=\"icon\" class=\"icon\" [src]=\"this.icon\">\r\n <div *ngIf=\"!icon\">\r\n <i *ngIf=\"dialogType === type.ALERT\" class=\"fa fa-exclamation fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.SUCCESS\" class=\"fa fa-check-circle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.FAILED || dialogType === type.ERROR\" class=\"fa fa-exclamation-triangle fa-2x i-margin i-color-red\"></i>\r\n <i *ngIf=\"dialogType === type.WARNING || dialogType === type.VALIDATION\" class=\"fa fa-exclamation-triangle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.INFO\" class=\"fa fa-info-circle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.CONFIRM\" class=\"fa fa-check fa-2x i-margin i-color-blue\"></i>\r\n </div>\r\n <h1 *ngIf=\"dialogType !== type.ERROR\"\r\n style=\"margin:0;\">{{this.title ? this.title : defaultTitle}}</h1>\r\n <h1 *ngIf=\"dialogType === type.ERROR\"\r\n style=\"margin:0; color: Red\">{{this.title ? this.title : defaultTitle}}</h1>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-dialog-content class=\"flex-grow-1 no-margin no-padding\">\r\n <hr>\r\n <div class=\"flex-grow-1 full-width extra-padded message\">\r\n <div *ngFor=\"let line of message\" class=\"full-width\"\r\n [innerHTML]=\"line\" style=\"white-space: pre-line\">\r\n </div>\r\n </div>\r\n <br>\r\n </mat-dialog-content>\r\n <mat-dialog-actions class=\"d-flex justify-content-center no-margin no-padding\">\r\n <save-footer *ngIf=\"dialogType !== type.CONFIRM\" class=\"centered-text large-size\"\r\n (saveClicked)=\"onClickOk()\" name=\"Ok\"></save-footer>\r\n <save-footer *ngIf=\"dialogType === type.CONFIRM\" class=\"centered-text large-size\"\r\n (saveClicked)=\"onClickYes()\" name=\"Yes\"></save-footer>\r\n <save-footer *ngIf=\"dialogType === type.CONFIRM\" [actionType]=\"actionType\"\r\n class=\"centered-text large-size\" (saveClicked)=\"onClickNo()\"\r\n name=\"No\"></save-footer>\r\n </mat-dialog-actions>\r\n </div>\r\n `,\r\n styles: [`\r\n hr {\r\n width: 98%;\r\n }\r\n\r\n .i-margin {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n .i-color-blue {\r\n color: #0077B3FF;\r\n }\r\n .i-color-red {\r\n color: red;\r\n }\r\n\r\n .centered-text { text-align: center; }\r\n\r\n .no-padding{\r\n padding:0;\r\n\r\n }\r\n\r\n .no-margin{\r\n margin: 0;\r\n }\r\n\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed {\r\n cursor: move;\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n\r\n .force-flex-container-row{\r\n display:flex !important;\r\n }\r\n .extra-padded {\r\n padding: 0.6em 0.9em 0.6em 0.9em;\r\n }\r\n .large-size {\r\n font-size: large;\r\n }\r\n .primary-action {\r\n font-size: large;\r\n }\r\n .secondary-action {\r\n font-size: large;\r\n }\r\n .message {\r\n color: #0F244DFF;\r\n }\r\n `]\r\n}) export class AlertDialogComponent implements OnInit {\r\n public type: any = DialogType;\r\n\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n\r\n public message: string[] = null;\r\n public title = '';\r\n public icon = '';\r\n public dialogType = '';\r\n public defaultTitle = '';\r\n public actionType: any = ActionType.SECONDARY;\r\n\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n movingDialog = false;\r\n\r\n constructor(public dialogRef: MatDialogRef<AlertDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data,\r\n private changeDetector: ChangeDetectorRef) {\r\n if (data) {\r\n this.message = Array.isArray(data.message) ? data.message : [data.message];\r\n this.title = data.title;\r\n this.icon = data.icon;\r\n this.dialogType = data.dialogType;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.dialogType) {\r\n this.defaultTitle = this.dialogType;\r\n }\r\n for (let i = 0; i < this.message.length; i++) {\r\n this.message[i] = this.message[i].replace(/\\n/g, '<br>') + '<br>';\r\n }\r\n }\r\n\r\n onClickOk(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onClickYes(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onClickNo(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n}\r\n","import {Component, Inject, Input} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'hci-spinner-dialog',\r\n templateUrl: 'spinner-dialog.component.html',\r\n styles: [`\r\n .t { display: table; }\r\n .tr { display: table-row; }\r\n .td { display: table-cell; }\r\n\r\n .full-height { height: 100%; }\r\n .full-width { width: 100%; }\r\n\r\n .vertical-center { vertical-align: middle; }\r\n\r\n .padded {\r\n padding-top: 0.4em;\r\n padding-bottom: 0.4em;\r\n }\r\n\r\n .not-rendered {\r\n padding: 0;\r\n margin: 0;\r\n\r\n min-height: 0;\r\n max-height: 0;\r\n height: 0;\r\n }\r\n\r\n `]\r\n})\r\nexport class SpinnerDialogComponent {\r\n @Input() strokeWidth = 3;\r\n @Input() diameter = 30;\r\n\r\n @Input() message = 'Loading...';\r\n\r\n constructor(private dialogRef: MatDialogRef<SpinnerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data) {\r\n if (this.data) {\r\n if (!!this.data.message) {\r\n this.message = this.data.message;\r\n }\r\n if (!!this.data.diameter) {\r\n this.diameter = this.data.diameter;\r\n }\r\n if (!!this.data.strokeWidth) {\r\n this.strokeWidth = this.data.strokeWidth;\r\n }\r\n }\r\n }\r\n\r\n\r\n}\r\n","<div mat-dialog-title class=\"not-rendered\">\r\n<!--<div mat-dialog-title>-->\r\n</div>\r\n<div mat-dialog-content class=\"full-height padded\">\r\n <div class=\"full-width full-height t\">\r\n <div class=\"tr\">\r\n <div class=\"td vertical-center\" [style.height.px]=\"diameter + 5\">\r\n <mat-spinner [hidden]=\"false\" strokeWidth=\"{{strokeWidth}}\" [diameter]=\"diameter\"></mat-spinner>\r\n </div>\r\n <div class=\"td vertical-center\">\r\n {{message}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"not-rendered\">\r\n<!--<div mat-dialog-actions>-->\r\n</div>\r\n","import {DialogPosition, MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {\r\n ChangeDetectorRef,\r\n Component, ElementRef,\r\n HostListener,\r\n Inject, OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport {ActionType, GDAction, GDActionConfig} from '../model/generic-dialog-action.model';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'hci-custom-dialog',\r\n template: `\r\n <div class=\"d-flex full-height full-width flex-column\">\r\n <div *ngIf=\"this.title\" class=\"full-width generic-dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"force-flex-container-row align-items-center full-width p-2 {{ movingDialog ? 'grabbed' : 'grabbable' }}\">\r\n <div class=\"-flex flex-row align-items-center padded\">\r\n <img *ngIf=\"icon\" class=\"icon\" [src]=\"this.icon\">\r\n <div *ngIf=\"icon && icon.substr(0, 2) === '<i'\" class=\"i-class\" [innerHTML]=\"icon\" ></div>\r\n <h3 style=\"margin:0;\">{{this.title}}</h3>\r\n </div>\r\n <div class=\"flex-grow-1\"></div>\r\n <div class=\"padded\" (click)=\"onClose()\">\r\n <i class=\"exit fas fa-times\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-dialog-content class=\"flex-grow-1 full-width no-margin p-2\" style=\"min-height: 6em;\">\r\n <div #anchor></div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf=\"actions && actions.length > 0\"\r\n class=\"d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors\">\r\n <div *ngFor=\"let action of actions\">\r\n <save-footer *ngIf=\"action.type === actionType.PRIMARY;else secondary\"\r\n [actionType]=\"action.type\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"primaryDisable\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [name]=\"action.name\">\r\n </save-footer>\r\n <!-- to avoid issue with multiple spinner or dirty notes-->\r\n <ng-template #secondary>\r\n <save-footer [actionType]=\"action.type\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"secondaryDisable\"\r\n [name]=\"action.name\">\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n </div>\r\n `,\r\n styles: [`\r\n .centered-text { text-align: center; }\r\n\r\n .no-padding{\r\n padding:0;\r\n\r\n }\r\n\r\n .no-margin{\r\n margin: 0;\r\n }\r\n\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed:active {\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n\r\n .force-flex-container-row{\r\n display:flex !important;\r\n }\r\n\r\n .exit{\r\n max-width: 20px;\r\n cursor: pointer;\r\n }\r\n\r\n .i-class {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n mat-dialog-content {\r\n max-height: 100vh !important;\r\n max-width: 100vw !important ;\r\n }\r\n `]\r\n})\r\n\r\nexport class CustomDialogComponent implements OnInit {\r\n @ViewChild('anchor', { read: ViewContainerRef, static : true }) vcr: ViewContainerRef;\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n public title = '';\r\n public icon = '';\r\n\r\n public actionType: any = ActionType;\r\n\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n movingDialog = false;\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n context: any;\r\n\r\n private tempRef: TemplateRef<any>;\r\n public actions: GDAction[] = [];\r\n public form: FormGroup;\r\n public get primaryDisable(): boolean {\r\n return this.form && this.form.invalid;\r\n }\r\n // todo need make this customizable\r\n public get secondaryDisable(): boolean {\r\n return false;\r\n }\r\n\r\n constructor(public dialogRef: MatDialogRef<CustomDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private changeDetector: ChangeDetectorRef) {\r\n this.title = data.title;\r\n this.tempRef = data.templateRef;\r\n this.icon = data.icon;\r\n this.context = data.context;\r\n const actionConfig: GDActionConfig = data.actionConfig ? data.actionConfig as GDActionConfig : null;\r\n this.actions = actionConfig ? actionConfig.actions : [];\r\n this.form = actionConfig && actionConfig.formSource ? actionConfig.formSource : null;\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.context.dialog = this.dialogRef;\r\n this.vcr.createEmbeddedView<any>(this.tempRef, this.context);\r\n\r\n }\r\n\r\n onClose() {\r\n this.dialogRef.close();\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n\r\n executeAction(action: GDAction): void {\r\n if (action.externalAction) {\r\n action.externalAction(this.dialogRef);\r\n }\r\n if (action.internalAction && action.internalAction === 'onClose') {\r\n this.onClose();\r\n }\r\n }\r\n\r\n}\r\n","\r\nexport enum ConfirmType {\r\n DELETE = 'delete',\r\n DELETE_W_MESSAGE = 'deleteMessage',\r\n DELETE_W_PROMPT = 'deletePrompt',\r\n DISCARD = 'discard',\r\n CONFIRM_AND_CLOSE = 'confirmAndClose',\r\n ADD = 'add',\r\n ALERT = 'alert',\r\n GENERIC = 'generic',\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Inject,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild, ComponentRef, ChangeDetectorRef, HostBinding\r\n} from '@angular/core';\r\nimport {MatDialogRef, MatDialog, MAT_DIALOG_DATA, DialogPosition} from '@angular/material/dialog';\r\n\r\nimport {Router} from '@angular/router';\r\nimport {BaseGenericContainerDialog} from '../model/base-generic-container-dialog';\r\nimport {ActionType, GDAction} from '../model/generic-dialog-action.model';\r\n\r\n@Component({\r\n selector: 'hci-generic-container-dialog',\r\n templateUrl: './generic-container-dialog.component.html',\r\n styles: [`\r\n\r\n .no-padding{\r\n padding:0;\r\n }\r\n .no-margin{\r\n margin: 0;\r\n }\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed:active {\r\n cursor: move;\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n .exit{\r\n max-width: 20px;\r\n cursor: pointer;\r\n }\r\n .i-class {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n mat-dialog-content {\r\n max-height: 100% !important;\r\n }\r\n\r\n `]\r\n})\r\nexport class GenericContainerDialogComponent implements OnInit, OnDestroy {\r\n\r\n @HostBinding('class') classList = 'd-flex flex-column flex-grow-1 flex-shrink-1';\r\n\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n\r\n type = ActionType;\r\n title: string;\r\n icon: string;\r\n dialogContentBluePrint: any;\r\n actions: GDAction[] = [];\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n dialogContent: BaseGenericContainerDialog;\r\n\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n movingDialog = false;\r\n useSaveFooter: boolean;\r\n\r\n\r\n constructor(private dialog: MatDialog,\r\n private router: Router,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialogRef: MatDialogRef<GenericContainerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data) {\r\n if (data) {\r\n this.dialogContentBluePrint = data.dialogContent;\r\n this.icon = data.icon;\r\n this.title = data.title;\r\n this.useSaveFooter = data.actionConfig ? data.actionConfig.useSaveFooter : false;\r\n this.actions = data.actionConfig ? data.actionConfig.actions as GDAction[] : [];\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n createdComponent(event: ComponentRef<any>) {\r\n this.dialogContent = (event.instance as BaseGenericContainerDialog);\r\n }\r\n\r\n executeAction(action: GDAction): void {\r\n if (action.externalAction) {\r\n action.externalAction();\r\n }\r\n if (action.internalAction) {\r\n const internalAction: string = action.internalAction;\r\n if (action.internalAction === 'cancel' || action.internalAction === 'onClose') {\r\n if (this.dialogContent[internalAction]) {\r\n this.dialogContent[internalAction]();\r\n } else {\r\n this.onClose();\r\n }\r\n } else {\r\n if (typeof action.internalActionReturnValue !== 'undefined') {\r\n if (action.internalActionReturnValue){\r\n this.dialogContent[internalAction](action.internalActionReturnValue);\r\n }\r\n }else {\r\n this.dialogContent[internalAction]();\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n\r\n onClose() {\r\n this.dialogRef.close();\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n}\r\n","<div class=\"full-height full-width d-flex flex-column\" style=\"height: 100%;\">\r\n <div class=\"full-width generic-dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"d-flex align-items-center full-width\" [ngClass]=\"{'grabbed':movingDialog, 'grabbable': !movingDialog}\">\r\n <div class=\"d-flex flex-row align-items-center p-2\">\r\n <img class=\"icon\" *ngIf=\"icon && icon.substr(0, 2) !== '<i'\" [src]=\"icon\">\r\n <div *ngIf=\"icon && icon.substr(0, 2) === '<i'\" class=\"i-class\" [innerHTML]=\"icon\" ></div>\r\n <h3 style=\"margin:0;\">{{this.title ? this.title : this.dialogContent.innerTitle}}</h3>\r\n </div>\r\n <div class=\"flex-grow-1\"></div>\r\n <div class=\"padded\" (click)=\"onClose()\">\r\n <i class=\"exit fas fa-times\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-dialog-content class=\"flex-grow-1 no-margin no-padding\">\r\n <div class=\"flex-grow-1 full-height full-width padded\">\r\n <ndc-dynamic [ndcDynamicComponent]=\"this.dialogContentBluePrint\"\r\n [ndcDynamicInputs]=\"this.data\"\r\n (ndcDynamicCreated)=\"createdComponent($event)\">\r\n </ndc-dynamic>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf=\"actions && actions.length > 0\"\r\n class=\"d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors\">\r\n <div *ngFor=\"let action of actions\">\r\n <save-footer *ngIf=\"action.type === type.PRIMARY;else secondary\"\r\n [actionType]=\"action.type\"\r\n [icon]=\"action.icon\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [disableSave]=\"this.dialogContent.primaryDisable(action)\"\r\n [dirty]=\"this.dialogContent.dirty()\"\r\n [name]=\"action.name\"\r\n [showSpinner]=\"this.dialogContent.showSpinner\">\r\n </save-footer>\r\n <!-- to avoid issue with multiple spinner or dirty notes-->\r\n <ng-template #secondary>\r\n <save-footer [actionType]=\"action.type\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"this.dialogContent.secondaryDisable(action)\"\r\n [name]=\"action.name\">\r\n\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n</div>\r\n","import {Component, Input} from '@angular/core';\r\nimport {GDAction} from './generic-dialog-action.model';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseGenericContainerDialog {\r\n @Input() inputData: any;\r\n public showSpinner: boolean = false;\r\n public innerTitle: string = '';\r\n\r\n public primaryDisable: (action?: GDAction) => boolean = (action) => {\r\n return false;\r\n }\r\n\r\n public secondaryDisable: (action?: GDAction) => boolean = (action) => {\r\n return false;\r\n }\r\n\r\n public dirty: () => boolean = () => { return false; };\r\n\r\n protected constructor() {\r\n }\r\n}\r\n","import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {Component, Inject} from '@angular/core';\r\nimport {BaseGenericContainerDialog} from '../model/base-generic-container-dialog';\r\nimport {ConfirmType} from '../model/confirm-type.model';\r\n\r\n@Component({\r\n selector: 'hci-confirm-dialog',\r\n template: `\r\n <div class=\"ri-confirm-body\">\r\n\r\n <div *ngIf=\"confirmType !== ConfirmType.ALERT; else alertBlock\">\r\n {{prompt}}\r\n <div class=\"ri-confirm-text-delete\">{{ message1 }}</div>\r\n {{message2}}\r\n </div>\r\n\r\n\r\n <div #alertBlock>\r\n <p>We are working to correct it. Contact CODE support if the error persists.</p>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <strong>Show details</strong>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div>{{ message1 }}</div>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n </div>\r\n `,\r\n styles: [`\r\n\r\n `]\r\n})\r\nexport class ConfirmDialogComponent extends BaseGenericContainerDialog {\r\n\r\n public ConfirmType = ConfirmType; // make enum available in template\r\n\r\n prompt = '';\r\n message1 = '';\r\n message2 = '';\r\n\r\n confirmType: ConfirmType = ConfirmType.GENERIC;\r\n\r\n constructor(private dialogRef: MatDialogRef<ConfirmDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data: any) {\r\n super();\r\n\r\n const temp = data.confirmType ? data.confirmType : ConfirmType.GENERIC;\r\n if (Object.values(ConfirmType).includes(temp as ConfirmType)){\r\n this.confirmType = temp;\r\n }\r\n\r\n this.prompt = data.prompt ? data.prompt : '';\r\n this.message1 = data.message1 ? data.message1 : '';\r\n this.message2 = data.message2 ? data.message2 : '';\r\n\r\n this.setupMessagesByType();\r\n }\r\n\r\n setupMessagesByType(){\r\n\r\n // by enum type, setup the messages/prompt\r\n switch (this.confirmType) {\r\n case ConfirmType.DELETE:\r\n this.prompt = 'The following will be deleted:';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.DELETE_W_MESSAGE:\r\n this.prompt = 'The following will be deleted:';\r\n break;\r\n case ConfirmType.DELETE_W_PROMPT:\r\n // noop, take all of what was passed in\r\n break;\r\n case ConfirmType.DISCARD:\r\n this.prompt = '';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.CONFIRM_AND_CLOSE:\r\n this.prompt = '';\r\n this.message2 = '';\r\n break;\r\n case ConfirmType.ADD:\r\n this.prompt = 'The following will be added:';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.ALERT:\r\n // noop, will only use the message1 in a special template, and just ignore rest\r\n break;\r\n case ConfirmType.GENERIC:\r\n // TODO: either only use message 1 or just take all passed in...\r\n this.prompt = '';\r\n this.message2 = '';\r\n break;\r\n default:\r\n throw new Error('Confirm type doesn\\'t exist');\r\n }\r\n\r\n\r\n }\r\n\r\n onConfirmClick(value: boolean | any){\r\n this.dialogRef.close(value);\r\n }\r\n}\r\n","import {Injectable, TemplateRef} from '@angular/core';\r\nimport { MatDialogRef, MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AlertDialogComponent } from '../alert/alert-dialog.component';\r\nimport { SpinnerDialogComponent } from '../spinner/spinner-dialog.component';\r\nimport {CustomDialogComponent} from '../custom/custom-dialog.component';\r\nimport {GenericContainerDialogComponent} from '../generic/generic-container-dialog.component';\r\nimport {ActionType, GDActionConfig} from '../model/generic-dialog-action.model';\r\nimport {DialogType} from '../model/dialog-type.model';\r\nimport {ConfirmType} from '../model/confirm-type.model';\r\nimport {ConfirmDialogComponent} from '../confirm/confirm-dialog.component';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class DialogService {\r\n\r\n private _spinnerDialogIsOpen = false;\r\n private spinnerWorkItemCount = 0;\r\n private checkingSpinnerWorkItems = false;\r\n\r\n public spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[] = [];\r\n\r\n public get spinnerDialogIsOpen(): boolean {\r\n return this._spinnerDialogIsOpen;\r\n }\r\n\r\n constructor(private dialog: MatDialog) {\r\n }\r\n\r\n public alert(message: string | string[], title?: string,\r\n dialogType?: DialogType, icon?: string,\r\n config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, dialogType ? dialogType : DialogType.ALERT, icon, config);\r\n }\r\n\r\n public confirm(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.CONFIRM, icon, config);\r\n\r\n }\r\n\r\n /**\r\n * Creates a ConfirmDialogComponent with different display depending on\r\n * the ConfirmType.\r\n * @param title defaults to 'Confirm'\r\n * @param icon defaults to 'fa fa-info-circle'\r\n * @param config config.data can contain a prompt, message1 and/or\r\n * message2 according to the ConfirmType chosen\r\n * @param actionConfig sets up the dialog buttons and actions if you want\r\n * to override the defaults\r\n */\r\n public confirmByType(confirmType: ConfirmType, title?: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig): Observable<boolean> {\r\n if (!title){\r\n title = 'Confirm';\r\n }\r\n\r\n if (!icon){\r\n icon = 'fa fa-info-circle';\r\n }\r\n\r\n // set up a default if needed\r\n if (!config){\r\n config = new MatDialogConfig<any>();\r\n config.width = '33vw';\r\n config.minWidth = '300px';\r\n config.disableClose = true;\r\n }\r\n\r\n if (config.data){\r\n config.data.confirmType = confirmType;\r\n }else {\r\n config.data = {\r\n confirmType\r\n };\r\n }\r\n\r\n // if no actions passed in, set up the defaults\r\n if (!actionConfig){\r\n\r\n // default actions\r\n let primary = {type: ActionType.PRIMARY, name: 'YES',\r\n internalAction: 'onConfirmClick', internalActionReturnValue: true};\r\n let secondary = {type: ActionType.SECONDARY, name: 'GO BACK',\r\n internalAction: 'onClose'};\r\n\r\n // by enum type, setup the messages/prompt\r\n // only two need different defaults than generic defaults\r\n switch (confirmType) {\r\n case ConfirmType.CONFIRM_AND_CLOSE:\r\n primary = {type: ActionType.PRIMARY, name: 'CONFIRM AND CLOSE',\r\n internalAction: 'onConfirmClick', internalActionReturnValue: true};\r\n break;\r\n case ConfirmType.ALERT:\r\n primary = undefined;\r\n secondary = {type: ActionType.SECONDARY, name: 'CLOSE',\r\n internalAction: 'onClose'};\r\n break;\r\n // case ConfirmType.DELETE:\r\n // case ConfirmType.DELETE_W_MESSAGE:\r\n // case ConfirmType.DELETE_W_PROMPT:\r\n // case ConfirmType.DISCARD:\r\n // case ConfirmType.ADD:\r\n // case ConfirmType.GENERIC:\r\n default:\r\n throw new Error('Confirm type doesn\\'t exist');\r\n }\r\n\r\n const actions = [];\r\n if (primary){\r\n actions.push(primary);\r\n }\r\n if (secondary){\r\n actions.push(secondary);\r\n }\r\n\r\n actionConfig = {\r\n actions\r\n };\r\n }\r\n\r\n return this.genericDialogContainer(ConfirmDialogComponent,\r\n title, icon, config, actionConfig);\r\n }\r\n\r\n public error(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.ERROR, icon, config);\r\n }\r\n\r\n public info(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.INFO, icon, config);\r\n }\r\n\r\n public createCustomDialog(tempRef: TemplateRef<any>, context?: any, title?: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig) {\r\n let configuration: MatDialogConfig = null;\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.templateRef = tempRef;\r\n configuration.data.title = title ? title : '';\r\n configuration.data.icon = icon ? icon : '';\r\n configuration.data.context = context;\r\n if (actionConfig) {\r\n configuration.data.actionConfig = actionConfig;\r\n }\r\n\r\n configuration.minWidth = configuration.minWidth ? configuration.minWidth : '10em';\r\n configuration.width = configuration.width ? configuration.width : '30em';\r\n\r\n configuration.panelClass = ['mx-sized-dialog', 'no-padding'];\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = true;\r\n\r\n const dialogRef = this.dialog.open(CustomDialogComponent, configuration);\r\n\r\n return dialogRef;\r\n }\r\n\r\n public startDefaultSpinnerDialog(): MatDialogRef<SpinnerDialogComponent> {\r\n return this.startSpinnerDialog('Please wait...', 3, 30);\r\n }\r\n\r\n public startSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n const configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message,\r\n strokeWidth,\r\n diameter\r\n };\r\n configuration.width = '13em';\r\n configuration.disableClose = true;\r\n\r\n const dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n public startNonModalSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n const configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message,\r\n strokeWidth,\r\n diameter\r\n };\r\n configuration.width = '13em';\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = false;\r\n\r\n const dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n // Let there be an alternative, global way to stop all active spinner dialogs.\r\n public stopAllSpinnerDialogs(): void {\r\n this.spinnerWorkItemCount = 0;\r\n for (const dialogRef of this.spinnerDialogRefs) {\r\n setTimeout(() => {\r\n dialogRef.close();\r\n });\r\n }\r\n this.spinnerDialogRefs = [];\r\n }\r\n\r\n public addSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount++;\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n public removeSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount--;\r\n if (this.spinnerWorkItemCount < 0) {\r\n this.spinnerWorkItemCount = 0;\r\n }\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n private checkSpinnerWorkItems(): void {\r\n this.checkingSpinnerWorkItems = false;\r\n if (this.spinnerWorkItemCount) {\r\n if (!this._spinnerDialogIsOpen) {\r\n this.startDefaultSpinnerDialog();\r\n }\r\n } else if (this._spinnerDialogIsOpen) {\r\n this.stopAllSpinnerDialogs();\r\n }\r\n }\r\n\r\n public genericDialogContainer(dialogContent: any, title: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig): Observable<any> {\r\n let configuration: MatDialogConfig = null;\r\n\r\n\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.dialogContent = dialogContent;\r\n configuration.data.title = title;\r\n if (icon) {\r\n configuration.data.icon = icon;\r\n }\r\n if (actionConfig) {\r\n configuration.data.actionConfig = actionConfig;\r\n }\r\n configuration.panelClass = ['mx-sized-dialog', 'no-padding'];\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = true;\r\n const dialogRef = this.dialog.open(GenericContainerDialogComponent, configuration);\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n private openDialog(message: string | string[], title?: string,\r\n type?: DialogType, icon?: string, config?: MatDialogConfig): Observable<any> {\r\n let configuration: MatDialogConfig = null;\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.message = message;\r\n configuration.data.title = title ? title : '';\r\n configuration.data.icon = icon ? icon : '';\r\n configuration.data.dialogType = type ? type : '';\r\n\r\n configuration.maxWidth = configuration.maxWidth ? configuration.maxWidth : '80vw';\r\n configuration.maxHeight = configuration.maxHeight ? configuration.maxHeight : '80vh';\r\n configuration.minWidth = configuration.minWidth ? configuration.minWidth : '30em';\r\n\r\n configuration.panelClass = 'no-padding';\r\n configuration.disableClose = true;\r\n configuration.autoFocus = false;\r\n configuration.hasBackdrop = false;\r\n\r\n let dialogRef: MatDialogRef<AlertDialogComponent>;\r\n\r\n dialogRef = this.dialog.open(AlertDialogComponent, configuration);\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n\r\n}\r\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\r\nimport {DialogService} from '../service/dialog.service';\r\nimport {ActionType} from '../model/generic-dialog-action.model';\r\n\r\n\r\n@Component({\r\n selector: 'hci-save-footer',\r\n template: `\r\n <div class=\"full-height full-width\" style=\"margin-bottom: 8px;\">\r\n <div class=\"d-flex flex-row align-items-center right-align padded\">\r\n <div *ngIf=\"dirty\" class=\"warning-background padded\">\r\n {{ message }}\r\n </div>\r\n <div class=\"major-left-right-margin\">\r\n <button mat-raised-button [disabled]=\"disableSave\"\r\n [color]=\"actionType\" (click)=\"notifySave()\"\r\n [ngClass]=\"{'primary-action': actionType === type.PRIMARY,\r\n 'secondary-action': actionType === type.SECONDARY && !disableSave }\">\r\n <img *ngIf=\"icon\" [src]=\"icon\" alt=\"\">\r\n {{ name }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .primary-action{\r\n background-color: #0077B3FF;\r\n font-weight: bolder;\r\n color: white;\r\n }\r\n .secondary-action{\r\n background-color: #DEF4FFFF;\r\n font-weight: bolder;\r\n color: #0077B3FF;\r\n border: #0077B3FF solid 1px;\r\n }\r\n\r\n .major-left-right-margin {\r\n margin-left: 0.5em;\r\n margin-right: 0.5em;\r\n }\r\n\r\n .right-align {\r\n text-align: right;\r\n justify-content: flex-end;\r\n }\r\n\r\n\r\n .warning-background { background:#feec89; }\r\n\r\n `]\r\n})\r\nexport class SaveFooterComponent implements OnInit, OnDestroy {\r\n\r\n private _dirty: boolean;\r\n\r\n\r\n @Input() actionType: ActionType = ActionType.PRIMARY;\r\n @Input() icon: string;\r\n @Input() message = 'Your changes have not been saved';\r\n @Input() name = 'Save';\r\n @Input() set dirty(data: any){\r\n if (data){\r\n this._dirty = data;\r\n }else{\r\n this._dirty = false;\r\n }\r\n\r\n }\r\n get dirty(){\r\n return this._dirty;\r\n }\r\n\r\n\r\n @Input() set showSpinner(showSpinner: boolean) {\r\n setTimeout( () => {\r\n if (showSpinner) {\r\n this.dialogService.startDefaultSpinnerDialog();\r\n } else {\r\n this.dialogService.stopAllSpinnerDialogs();\r\n }\r\n });\r\n\r\n }\r\n\r\n @Input() disableSave = false;\r\n @Output() saveClicked = new EventEmitter<any>();\r\n type = ActionType;\r\n\r\n constructor(private dialogService: DialogService) { }\r\n\r\n ngOnInit(){\r\n // console.log(this.disableSave);\r\n }\r\n notifySave(): void{\r\n this.saveClicked.emit();\r\n }\r\n ngOnDestroy(){\r\n this.saveClicked.unsubscribe();\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {DialogService} from './service/dialog.service';\r\nimport {AlertDialogComponent} from './alert/alert-dialog.component';\r\nimport {CustomDialogComponent} from './custom/custom-dialog.component';\r\nimport {GenericContainerDialogComponent} from './generic/generic-container-dialog.component';\r\nimport {SaveFooterComponent} from './save-footer/save-footer.component';\r\nimport {SpinnerDialogComponent} from './spinner/spinner-dialog.component';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {DynamicModule} from 'ng-dynamic-component';\r\nimport {ConfirmDialogComponent} from './confirm/confirm-dialog.component';\r\nimport {MatExpansionModule} from '@angular/material/expansion';\r\n// import {RouterModule} from \"@angular/router\";\r\n// import {MatButtonToggleModule} from \"@angular/material/button-toggle\";\r\n// import {MatInputModule} from \"@angular/material/input\";\r\n// import {MatIconModule} from \"@angular/material/icon\";\r\n// import {TreeModule} from \"@circlon/angular-tree-component\";\r\n// import {MatDatepickerModule} from \"@angular/material/datepicker\";\r\n// import {MatSelectModule} from \"@angular/material/select\";\r\n// import {NgbModule, NgbNavModule} from \"@ng-bootstrap/ng-bootstrap\";\r\n// import {MiscModule} from \"@huntsman-cancer-institute/misc\";\r\n// import { MatNativeDateModule } from \"@angular/material/core\";\r\n// import { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n\r\n/**\r\n * The main @huntsman-cancer-institute/dialog module. The module exports all components that an implementation might use\r\n * and the forRoot() provides a global service for an implementing application.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n DynamicModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatExpansionModule,\r\n MatProgressSpinnerModule\r\n // RouterModule,\r\n // MiscModule,\r\n // NgbModule,\r\n // MatButtonToggleModule,\r\n // MatInputModule,\r\n // MatIconModule,\r\n // MatDatepickerModule,\r\n // MatNativeDateModule,\r\n // MatCheckboxModule,\r\n // MatRadioModule,\r\n // MatSelectModule,\r\n // TreeModule,\r\n // NgbNavModule\r\n ],\r\n providers: [\r\n // MatDatepickerModule,\r\n ],\r\n declarations: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ],\r\n entryComponents: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ],\r\n exports: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ]\r\n})\r\nexport class DialogModule {\r\n static forRoot(): ModuleWithProviders<DialogModule> {\r\n return {\r\n providers: [\r\n DialogService\r\n ],\r\n ngModule: DialogModule\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["ng://@huntsman-cancer-institute/dialog/model/dialog-type.model.ts","ng://@huntsman-cancer-institute/dialog/model/generic-dialog-action.model.ts","ng://@huntsman-cancer-institute/dialog/alert/alert-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/spinner/spinner-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/spinner/spinner-dialog.component.html","ng://@huntsman-cancer-institute/dialog/custom/custom-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/model/confirm-type.model.ts","ng://@huntsman-cancer-institute/dialog/generic/generic-container-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/generic/generic-container-dialog.component.html","ng://@huntsman-cancer-institute/dialog/model/base-generic-container-dialog.ts","ng://@huntsman-cancer-institute/dialog/confirm/confirm-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/service/dialog.service.ts","ng://@huntsman-cancer-institute/dialog/save-footer/save-footer.component.ts","ng://@huntsman-cancer-institute/dialog/dialog.module.ts"],"names":["DialogType","ActionType","AlertDialogComponent","dialogRef","data","changeDetector","this","type","message","title","icon","dialogType","defaultTitle","actionType","SECONDARY","originalXClick","originalYClick","positionX","positionY","movingDialog","Array","isArray","prototype","ngOnInit","i","length","replace","onClickOk","close","onClickYes","onClickNo","onMouseDownHeader","event","topmostLeftmost","nativeElement","offsetLeft","offsetTop","screenX","screenY","detach","onMouseMove","newDialogPosition","left","top","updatePosition","onMouseUp","reattach","deps","token","dialog","MatDialogRef","MAT_DIALOG_DATA","i0","ChangeDetectorRef","target","ɵɵFactoryTarget","Component","selector","host","listeners","window:mousemove","window:mouseup","viewQueries","propertyName","first","predicate","descendants","ngImport","template","isInline","styles","directives","MatDialogTitle","inputs","exportAs","common","NgIf","MatDialogContent","NgForOf","MatDialogActions","decorators","Inject","ViewChild","static","HostListener","SpinnerDialogComponent","strokeWidth","diameter","components","progressSpinner","MatSpinner","templateUrl","Input","CustomDialogComponent","actions","tempRef","templateRef","context","actionConfig","form","formSource","Object","defineProperty","invalid","vcr","createEmbeddedView","onClose","executeAction","action","externalAction","internalAction","read","ViewContainerRef","ConfirmType","GenericContainerDialogComponent","router","classList","dialogContentBluePrint","dialogContent","useSaveFooter","createdComponent","instance","internalActionReturnValue","ngOnDestroy","MatDialog","Router","properties","class","ngDynamicComponent","DynamicComponent","outputs","NgClass","DynamicIoDirective","HostBinding","BaseGenericContainerDialog","showSpinner","innerTitle","primaryDisable","secondaryDisable","dirty","inputData","ConfirmDialogComponent","_this","_super","call","prompt","message1","message2","confirmType","GENERIC","temp","values","includes","setupMessagesByType","__extends","DELETE","DELETE_W_MESSAGE","DELETE_W_PROMPT","DISCARD","CONFIRM_AND_CLOSE","ADD","ALERT","Error","onConfirmClick","value","usesInheritance","expansion","MatExpansionPanel","MatExpansionPanelHeader","MatExpansionPanelTitle","DialogService","_spinnerDialogIsOpen","spinnerWorkItemCount","checkingSpinnerWorkItems","spinnerDialogRefs","alert","config","openDialog","confirm","CONFIRM","confirmByType","MatDialogConfig","width","minWidth","disableClose","primary","PRIMARY","name","secondary","undefined","push","genericDialogContainer","error","ERROR","info","INFO","createCustomDialog","configuration","panelClass","hasBackdrop","open","startDefaultSpinnerDialog","startSpinnerDialog","afterClosed","subscribe","startNonModalSpinnerDialog","stopAllSpinnerDialogs","setTimeout","_b","__values","_c","next","done","addSpinnerWorkItem","checkSpinnerWorkItems","removeSpinnerWorkItem","maxWidth","maxHeight","autoFocus","Injectable","SaveFooterComponent","dialogService","disableSave","saveClicked","EventEmitter","_dirty","notifySave","emit","unsubscribe","button","MatButton","Output","DialogModule","forRoot","providers","ngModule","NgModule","declarations","imports","CommonModule","FormsModule","DynamicModule","MatButtonModule","MatDialogModule","MatExpansionModule","MatProgressSpinnerModule","entryComponents","exports"],"mappings":"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","sourcesContent":["\r\n\r\nexport enum DialogType {\r\n ERROR = 'Error',\r\n WARNING = 'Warning',\r\n ALERT = 'Alert',\r\n SUCCESS = 'Succeed',\r\n FAILED = 'Failed',\r\n CONFIRM = 'Confirm',\r\n INFO = 'Info',\r\n VALIDATION = 'Validation Error',\r\n}\r\n","import {MatDialogRef} from '@angular/material/dialog';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\nexport enum ActionType {\r\n PRIMARY = 'primary',\r\n SECONDARY = 'accent'\r\n}\r\nexport interface GDActionConfig {\r\n formSource?: FormGroup;\r\n actions: GDAction[];\r\n}\r\nexport interface GDAction {\r\n type: ActionType;\r\n internalAction?: string;\r\n internalActionReturnValue?: boolean | any;\r\n externalAction?: (dialogRef?: MatDialogRef<any>) => void | string;\r\n icon?: string;\r\n name: string;\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Inject, OnInit,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {DialogPosition, MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {DialogType} from '../model/dialog-type.model';\r\nimport {ActionType} from '../model/generic-dialog-action.model';\r\n\r\n@Component({\r\n selector: 'hci-alert-dialog',\r\n template: `\r\n <div class=\"full-height full-width d-flex flex-column\">\r\n <div class=\"full-width dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"force-flex-container-row align-center full-width padding {{ movingDialog ? 'grabbed' : 'grabbable' }}\">\r\n <div class=\"d-flex flex-row align-items-center padded\">\r\n <img *ngIf=\"icon\" class=\"icon\" [src]=\"this.icon\">\r\n <div *ngIf=\"!icon\">\r\n <i *ngIf=\"dialogType === type.ALERT\" class=\"fa fa-exclamation fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.SUCCESS\" class=\"fa fa-check-circle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.FAILED || dialogType === type.ERROR\" class=\"fa fa-exclamation-triangle fa-2x i-margin i-color-red\"></i>\r\n <i *ngIf=\"dialogType === type.WARNING || dialogType === type.VALIDATION\" class=\"fa fa-exclamation-triangle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.INFO\" class=\"fa fa-info-circle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.CONFIRM\" class=\"fa fa-check fa-2x i-margin i-color-blue\"></i>\r\n </div>\r\n <h1 *ngIf=\"dialogType !== type.ERROR\"\r\n style=\"margin:0;\">{{this.title ? this.title : defaultTitle}}</h1>\r\n <h1 *ngIf=\"dialogType === type.ERROR\"\r\n style=\"margin:0; color: Red\">{{this.title ? this.title : defaultTitle}}</h1>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-dialog-content class=\"flex-grow-1 no-margin no-padding\">\r\n <hr>\r\n <div class=\"flex-grow-1 full-width extra-padded message\">\r\n <div *ngFor=\"let line of message\" class=\"full-width\"\r\n [innerHTML]=\"line\" style=\"white-space: pre-line\">\r\n </div>\r\n </div>\r\n <br>\r\n </mat-dialog-content>\r\n <mat-dialog-actions class=\"d-flex justify-content-center no-margin no-padding\">\r\n <save-footer *ngIf=\"dialogType !== type.CONFIRM\" class=\"centered-text large-size\"\r\n (saveClicked)=\"onClickOk()\" name=\"Ok\"></save-footer>\r\n <save-footer *ngIf=\"dialogType === type.CONFIRM\" class=\"centered-text large-size\"\r\n (saveClicked)=\"onClickYes()\" name=\"Yes\"></save-footer>\r\n <save-footer *ngIf=\"dialogType === type.CONFIRM\" [actionType]=\"actionType\"\r\n class=\"centered-text large-size\" (saveClicked)=\"onClickNo()\"\r\n name=\"No\"></save-footer>\r\n </mat-dialog-actions>\r\n </div>\r\n `,\r\n styles: [`\r\n hr {\r\n width: 98%;\r\n }\r\n\r\n .i-margin {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n .i-color-blue {\r\n color: #0077B3FF;\r\n }\r\n .i-color-red {\r\n color: red;\r\n }\r\n\r\n .centered-text { text-align: center; }\r\n\r\n .no-padding{\r\n padding:0;\r\n\r\n }\r\n\r\n .no-margin{\r\n margin: 0;\r\n }\r\n\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed {\r\n cursor: move;\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n\r\n .force-flex-container-row{\r\n display:flex !important;\r\n }\r\n .extra-padded {\r\n padding: 0.6em 0.9em 0.6em 0.9em;\r\n }\r\n .large-size {\r\n font-size: large;\r\n }\r\n .primary-action {\r\n font-size: large;\r\n }\r\n .secondary-action {\r\n font-size: large;\r\n }\r\n .message {\r\n color: #0F244DFF;\r\n }\r\n `]\r\n}) export class AlertDialogComponent implements OnInit {\r\n public type: any = DialogType;\r\n\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n\r\n public message: string[] = null;\r\n public title = '';\r\n public icon = '';\r\n public dialogType = '';\r\n public defaultTitle = '';\r\n public actionType: any = ActionType.SECONDARY;\r\n\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n movingDialog = false;\r\n\r\n constructor(public dialogRef: MatDialogRef<AlertDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data,\r\n private changeDetector: ChangeDetectorRef) {\r\n if (data) {\r\n this.message = Array.isArray(data.message) ? data.message : [data.message];\r\n this.title = data.title;\r\n this.icon = data.icon;\r\n this.dialogType = data.dialogType;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.dialogType) {\r\n this.defaultTitle = this.dialogType;\r\n }\r\n for (let i = 0; i < this.message.length; i++) {\r\n this.message[i] = this.message[i].replace(/\\n/g, '<br>') + '<br>';\r\n }\r\n }\r\n\r\n onClickOk(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onClickYes(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onClickNo(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n}\r\n","import {Component, Inject, Input} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'hci-spinner-dialog',\r\n templateUrl: 'spinner-dialog.component.html',\r\n styles: [`\r\n .t { display: table; }\r\n .tr { display: table-row; }\r\n .td { display: table-cell; }\r\n\r\n .full-height { height: 100%; }\r\n .full-width { width: 100%; }\r\n\r\n .vertical-center { vertical-align: middle; }\r\n\r\n .padded {\r\n padding-top: 0.4em;\r\n padding-bottom: 0.4em;\r\n }\r\n\r\n .not-rendered {\r\n padding: 0;\r\n margin: 0;\r\n\r\n min-height: 0;\r\n max-height: 0;\r\n height: 0;\r\n }\r\n\r\n `]\r\n})\r\nexport class SpinnerDialogComponent {\r\n @Input() strokeWidth = 3;\r\n @Input() diameter = 30;\r\n\r\n @Input() message = 'Loading...';\r\n\r\n constructor(private dialogRef: MatDialogRef<SpinnerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data) {\r\n if (this.data) {\r\n if (!!this.data.message) {\r\n this.message = this.data.message;\r\n }\r\n if (!!this.data.diameter) {\r\n this.diameter = this.data.diameter;\r\n }\r\n if (!!this.data.strokeWidth) {\r\n this.strokeWidth = this.data.strokeWidth;\r\n }\r\n }\r\n }\r\n\r\n\r\n}\r\n","<div mat-dialog-title class=\"not-rendered\">\r\n<!--<div mat-dialog-title>-->\r\n</div>\r\n<div mat-dialog-content class=\"full-height padded\">\r\n <div class=\"full-width full-height t\">\r\n <div class=\"tr\">\r\n <div class=\"td vertical-center\" [style.height.px]=\"diameter + 5\">\r\n <mat-spinner [hidden]=\"false\" strokeWidth=\"{{strokeWidth}}\" [diameter]=\"diameter\"></mat-spinner>\r\n </div>\r\n <div class=\"td vertical-center\">\r\n {{message}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"not-rendered\">\r\n<!--<div mat-dialog-actions>-->\r\n</div>\r\n","import {DialogPosition, MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {\r\n ChangeDetectorRef,\r\n Component, ElementRef,\r\n HostListener,\r\n Inject, OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport {ActionType, GDAction, GDActionConfig} from '../model/generic-dialog-action.model';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'hci-custom-dialog',\r\n template: `\r\n <div class=\"d-flex full-height full-width flex-column\">\r\n <div *ngIf=\"this.title\" class=\"full-width generic-dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"force-flex-container-row align-items-center full-width p-2 {{ movingDialog ? 'grabbed' : 'grabbable' }}\">\r\n <div class=\"-flex flex-row align-items-center padded\">\r\n <img *ngIf=\"icon\" class=\"icon\" [src]=\"this.icon\">\r\n <div *ngIf=\"icon && icon.substr(0, 2) === '<i'\" class=\"i-class\" [innerHTML]=\"icon\" ></div>\r\n <h3 style=\"margin:0;\">{{this.title}}</h3>\r\n </div>\r\n <div class=\"flex-grow-1\"></div>\r\n <div class=\"padded\" (click)=\"onClose()\">\r\n <i class=\"exit fas fa-times\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-dialog-content class=\"flex-grow-1 full-width no-margin p-2\" style=\"min-height: 6em;\">\r\n <div #anchor></div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf=\"actions && actions.length > 0\"\r\n class=\"d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors\">\r\n <div *ngFor=\"let action of actions\">\r\n <save-footer *ngIf=\"action.type === actionType.PRIMARY;else secondary\"\r\n [actionType]=\"action.type\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"primaryDisable\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [name]=\"action.name\">\r\n </save-footer>\r\n <!-- to avoid issue with multiple spinner or dirty notes-->\r\n <ng-template #secondary>\r\n <save-footer [actionType]=\"action.type\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"secondaryDisable\"\r\n [name]=\"action.name\">\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n </div>\r\n `,\r\n styles: [`\r\n .centered-text { text-align: center; }\r\n\r\n .no-padding{\r\n padding:0;\r\n\r\n }\r\n\r\n .no-margin{\r\n margin: 0;\r\n }\r\n\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed:active {\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n\r\n .force-flex-container-row{\r\n display:flex !important;\r\n }\r\n\r\n .exit{\r\n max-width: 20px;\r\n cursor: pointer;\r\n }\r\n\r\n .i-class {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n mat-dialog-content {\r\n max-height: 100vh !important;\r\n max-width: 100vw !important ;\r\n }\r\n `]\r\n})\r\n\r\nexport class CustomDialogComponent implements OnInit {\r\n @ViewChild('anchor', { read: ViewContainerRef, static : true }) vcr: ViewContainerRef;\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n public title = '';\r\n public icon = '';\r\n\r\n public actionType: any = ActionType;\r\n\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n movingDialog = false;\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n context: any;\r\n\r\n private tempRef: TemplateRef<any>;\r\n public actions: GDAction[] = [];\r\n public form: FormGroup;\r\n public get primaryDisable(): boolean {\r\n return this.form && this.form.invalid;\r\n }\r\n // todo need make this customizable\r\n public get secondaryDisable(): boolean {\r\n return false;\r\n }\r\n\r\n constructor(public dialogRef: MatDialogRef<CustomDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private changeDetector: ChangeDetectorRef) {\r\n this.title = data.title;\r\n this.tempRef = data.templateRef;\r\n this.icon = data.icon;\r\n this.context = data.context;\r\n const actionConfig: GDActionConfig = data.actionConfig ? data.actionConfig as GDActionConfig : null;\r\n this.actions = actionConfig ? actionConfig.actions : [];\r\n this.form = actionConfig && actionConfig.formSource ? actionConfig.formSource : null;\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.context.dialog = this.dialogRef;\r\n this.vcr.createEmbeddedView<any>(this.tempRef, this.context);\r\n\r\n }\r\n\r\n onClose() {\r\n this.dialogRef.close();\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n\r\n executeAction(action: GDAction): void {\r\n if (action.externalAction) {\r\n action.externalAction(this.dialogRef);\r\n }\r\n if (action.internalAction && action.internalAction === 'onClose') {\r\n this.onClose();\r\n }\r\n }\r\n\r\n}\r\n","\r\nexport enum ConfirmType {\r\n DELETE = 'delete',\r\n DELETE_W_MESSAGE = 'deleteMessage',\r\n DELETE_W_PROMPT = 'deletePrompt',\r\n DISCARD = 'discard',\r\n CONFIRM_AND_CLOSE = 'confirmAndClose',\r\n ADD = 'add',\r\n ALERT = 'alert',\r\n GENERIC = 'generic',\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Inject,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild, ComponentRef, ChangeDetectorRef, HostBinding\r\n} from '@angular/core';\r\nimport {MatDialogRef, MatDialog, MAT_DIALOG_DATA, DialogPosition} from '@angular/material/dialog';\r\n\r\nimport {Router} from '@angular/router';\r\nimport {BaseGenericContainerDialog} from '../model/base-generic-container-dialog';\r\nimport {ActionType, GDAction} from '../model/generic-dialog-action.model';\r\n\r\n@Component({\r\n selector: 'hci-generic-container-dialog',\r\n templateUrl: './generic-container-dialog.component.html',\r\n styles: [`\r\n\r\n .no-padding{\r\n padding:0;\r\n }\r\n .no-margin{\r\n margin: 0;\r\n }\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed:active {\r\n cursor: move;\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n .exit{\r\n max-width: 20px;\r\n cursor: pointer;\r\n }\r\n .i-class {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n mat-dialog-content {\r\n max-height: 100% !important;\r\n }\r\n\r\n `]\r\n})\r\nexport class GenericContainerDialogComponent implements OnInit, OnDestroy {\r\n\r\n @HostBinding('class') classList = 'd-flex flex-column flex-grow-1 flex-shrink-1';\r\n\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n\r\n type = ActionType;\r\n title: string;\r\n icon: string;\r\n dialogContentBluePrint: any;\r\n actions: GDAction[] = [];\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n dialogContent: BaseGenericContainerDialog;\r\n\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n movingDialog = false;\r\n useSaveFooter: boolean;\r\n\r\n\r\n constructor(private dialog: MatDialog,\r\n private router: Router,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialogRef: MatDialogRef<GenericContainerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data) {\r\n if (data) {\r\n this.dialogContentBluePrint = data.dialogContent;\r\n this.icon = data.icon;\r\n this.title = data.title;\r\n this.useSaveFooter = data.actionConfig ? data.actionConfig.useSaveFooter : false;\r\n this.actions = data.actionConfig ? data.actionConfig.actions as GDAction[] : [];\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n createdComponent(event: ComponentRef<any>) {\r\n this.dialogContent = (event.instance as BaseGenericContainerDialog);\r\n }\r\n\r\n executeAction(action: GDAction): void {\r\n if (action.externalAction) {\r\n action.externalAction();\r\n }\r\n if (action.internalAction) {\r\n const internalAction: string = action.internalAction;\r\n if (action.internalAction === 'cancel' || action.internalAction === 'onClose') {\r\n if (this.dialogContent[internalAction]) {\r\n this.dialogContent[internalAction]();\r\n } else {\r\n this.onClose();\r\n }\r\n } else {\r\n if (typeof action.internalActionReturnValue !== 'undefined') {\r\n if (action.internalActionReturnValue){\r\n this.dialogContent[internalAction](action.internalActionReturnValue);\r\n }\r\n }else {\r\n this.dialogContent[internalAction]();\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n\r\n onClose() {\r\n this.dialogRef.close();\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n}\r\n","<div class=\"full-height full-width d-flex flex-column\" style=\"height: 100%;\">\r\n <div class=\"full-width generic-dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"d-flex align-items-center full-width\" [ngClass]=\"{'grabbed':movingDialog, 'grabbable': !movingDialog}\">\r\n <div class=\"d-flex flex-row align-items-center p-2\">\r\n <img class=\"icon\" *ngIf=\"icon && icon.substr(0, 2) !== '<i'\" [src]=\"icon\">\r\n <div *ngIf=\"icon && icon.substr(0, 2) === '<i'\" class=\"i-class\" [innerHTML]=\"icon\" ></div>\r\n <h3 style=\"margin:0;\">{{this.title ? this.title : this.dialogContent.innerTitle}}</h3>\r\n </div>\r\n <div class=\"flex-grow-1\"></div>\r\n <div class=\"padded\" (click)=\"onClose()\">\r\n <i class=\"exit fas fa-times\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-dialog-content class=\"flex-grow-1 no-margin no-padding\">\r\n <div class=\"flex-grow-1 full-height full-width padded\">\r\n <ndc-dynamic [ndcDynamicComponent]=\"this.dialogContentBluePrint\"\r\n [ndcDynamicInputs]=\"this.data\"\r\n (ndcDynamicCreated)=\"createdComponent($event)\">\r\n </ndc-dynamic>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf=\"actions && actions.length > 0\"\r\n class=\"d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors\">\r\n <div *ngFor=\"let action of actions\">\r\n <save-footer *ngIf=\"action.type === type.PRIMARY;else secondary\"\r\n [actionType]=\"action.type\"\r\n [icon]=\"action.icon\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [disableSave]=\"this.dialogContent.primaryDisable(action)\"\r\n [dirty]=\"this.dialogContent.dirty()\"\r\n [name]=\"action.name\"\r\n [showSpinner]=\"this.dialogContent.showSpinner\">\r\n </save-footer>\r\n <!-- to avoid issue with multiple spinner or dirty notes-->\r\n <ng-template #secondary>\r\n <save-footer [actionType]=\"action.type\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"this.dialogContent.secondaryDisable(action)\"\r\n [name]=\"action.name\">\r\n\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n</div>\r\n","import {Component, Input} from '@angular/core';\r\nimport {GDAction} from './generic-dialog-action.model';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseGenericContainerDialog {\r\n @Input() inputData: any;\r\n public showSpinner: boolean = false;\r\n public innerTitle: string = '';\r\n\r\n public primaryDisable: (action?: GDAction) => boolean = (action) => {\r\n return false;\r\n }\r\n\r\n public secondaryDisable: (action?: GDAction) => boolean = (action) => {\r\n return false;\r\n }\r\n\r\n public dirty: () => boolean = () => { return false; };\r\n\r\n protected constructor() {\r\n }\r\n}\r\n","import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {Component, Inject} from '@angular/core';\r\nimport {BaseGenericContainerDialog} from '../model/base-generic-container-dialog';\r\nimport {ConfirmType} from '../model/confirm-type.model';\r\n\r\n@Component({\r\n selector: 'hci-confirm-dialog',\r\n template: `\r\n <div class=\"ri-confirm-body\">\r\n\r\n <div *ngIf=\"confirmType !== ConfirmType.ALERT; else alertBlock\">\r\n {{prompt}}\r\n <div class=\"ri-confirm-text-delete\">{{ message1 }}</div>\r\n {{message2}}\r\n </div>\r\n\r\n\r\n <div #alertBlock>\r\n <p>We are working to correct it. Contact CODE support if the error persists.</p>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <strong>Show details</strong>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div>{{ message1 }}</div>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n </div>\r\n `,\r\n styles: [`\r\n\r\n `]\r\n})\r\nexport class ConfirmDialogComponent extends BaseGenericContainerDialog {\r\n\r\n public ConfirmType = ConfirmType; // make enum available in template\r\n\r\n prompt = '';\r\n message1 = '';\r\n message2 = '';\r\n\r\n confirmType: ConfirmType = ConfirmType.GENERIC;\r\n\r\n constructor(private dialogRef: MatDialogRef<ConfirmDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data: any) {\r\n super();\r\n\r\n const temp = data.confirmType ? data.confirmType : ConfirmType.GENERIC;\r\n if (Object.values(ConfirmType).includes(temp as ConfirmType)){\r\n this.confirmType = temp;\r\n }\r\n\r\n this.prompt = data.prompt ? data.prompt : '';\r\n this.message1 = data.message1 ? data.message1 : '';\r\n this.message2 = data.message2 ? data.message2 : '';\r\n\r\n this.setupMessagesByType();\r\n }\r\n\r\n setupMessagesByType(){\r\n\r\n // by enum type, setup the messages/prompt\r\n switch (this.confirmType) {\r\n case ConfirmType.DELETE:\r\n this.prompt = 'The following will be deleted:';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.DELETE_W_MESSAGE:\r\n this.prompt = 'The following will be deleted:';\r\n break;\r\n case ConfirmType.DELETE_W_PROMPT:\r\n // noop, take all of what was passed in\r\n break;\r\n case ConfirmType.DISCARD:\r\n this.prompt = '';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.CONFIRM_AND_CLOSE:\r\n this.prompt = '';\r\n this.message2 = '';\r\n break;\r\n case ConfirmType.ADD:\r\n this.prompt = 'The following will be added:';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.ALERT:\r\n // noop, will only use the message1 in a special template, and just ignore rest\r\n break;\r\n case ConfirmType.GENERIC:\r\n // TODO: either only use message 1 or just take all passed in...\r\n this.prompt = '';\r\n this.message2 = '';\r\n break;\r\n default:\r\n throw new Error('Confirm type doesn\\'t exist');\r\n }\r\n\r\n\r\n }\r\n\r\n onConfirmClick(value: boolean | any){\r\n this.dialogRef.close(value);\r\n }\r\n}\r\n","import {Injectable, TemplateRef} from '@angular/core';\r\nimport { MatDialogRef, MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AlertDialogComponent } from '../alert/alert-dialog.component';\r\nimport { SpinnerDialogComponent } from '../spinner/spinner-dialog.component';\r\nimport {CustomDialogComponent} from '../custom/custom-dialog.component';\r\nimport {GenericContainerDialogComponent} from '../generic/generic-container-dialog.component';\r\nimport {ActionType, GDActionConfig} from '../model/generic-dialog-action.model';\r\nimport {DialogType} from '../model/dialog-type.model';\r\nimport {ConfirmType} from '../model/confirm-type.model';\r\nimport {ConfirmDialogComponent} from '../confirm/confirm-dialog.component';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class DialogService {\r\n\r\n private _spinnerDialogIsOpen = false;\r\n private spinnerWorkItemCount = 0;\r\n private checkingSpinnerWorkItems = false;\r\n\r\n public spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[] = [];\r\n\r\n public get spinnerDialogIsOpen(): boolean {\r\n return this._spinnerDialogIsOpen;\r\n }\r\n\r\n constructor(private dialog: MatDialog) {\r\n }\r\n\r\n public alert(message: string | string[], title?: string,\r\n dialogType?: DialogType, icon?: string,\r\n config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, dialogType ? dialogType : DialogType.ALERT, icon, config);\r\n }\r\n\r\n public confirm(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.CONFIRM, icon, config);\r\n\r\n }\r\n\r\n /**\r\n * Creates a ConfirmDialogComponent with different display depending on\r\n * the ConfirmType.\r\n * @param title defaults to 'Confirm'\r\n * @param icon defaults to 'fa fa-info-circle'\r\n * @param config config.data can contain a prompt, message1 and/or\r\n * message2 according to the ConfirmType chosen\r\n * @param actionConfig sets up the dialog buttons and actions if you want\r\n * to override the defaults\r\n */\r\n public confirmByType(confirmType: ConfirmType, title?: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig): Observable<boolean> {\r\n if (!title){\r\n title = 'Confirm';\r\n }\r\n\r\n if (!icon){\r\n icon = 'fa fa-info-circle';\r\n }\r\n\r\n // set up a default if needed\r\n if (!config){\r\n config = new MatDialogConfig<any>();\r\n }\r\n\r\n // if the config doesn't have these values set, set defaults\r\n // but config can exist without them if want to pass message(s) without\r\n // overriding defaults\r\n if (!config.width) {\r\n config.width = '33vw';\r\n }\r\n if (!config.minWidth){\r\n config.minWidth = '300px';\r\n }\r\n if (!config.disableClose){\r\n config.disableClose = true;\r\n }\r\n\r\n if (config.data){\r\n config.data.confirmType = confirmType;\r\n }else {\r\n config.data = {\r\n confirmType\r\n };\r\n }\r\n\r\n // if no actions passed in, set up the defaults\r\n if (!actionConfig){\r\n\r\n // default actions\r\n let primary = {type: ActionType.PRIMARY, name: 'YES',\r\n internalAction: 'onConfirmClick', internalActionReturnValue: true};\r\n let secondary = {type: ActionType.SECONDARY, name: 'GO BACK',\r\n internalAction: 'onClose'};\r\n\r\n // by enum type, setup the messages/prompt\r\n // only two need different defaults than generic defaults\r\n switch (confirmType) {\r\n case ConfirmType.CONFIRM_AND_CLOSE:\r\n primary = {type: ActionType.PRIMARY, name: 'CONFIRM AND CLOSE',\r\n internalAction: 'onConfirmClick', internalActionReturnValue: true};\r\n break;\r\n case ConfirmType.ALERT:\r\n primary = undefined;\r\n secondary = {type: ActionType.SECONDARY, name: 'CLOSE',\r\n internalAction: 'onClose'};\r\n break;\r\n // case ConfirmType.DELETE:\r\n // case ConfirmType.DELETE_W_MESSAGE:\r\n // case ConfirmType.DELETE_W_PROMPT:\r\n // case ConfirmType.DISCARD:\r\n // case ConfirmType.ADD:\r\n // case ConfirmType.GENERIC:\r\n default:\r\n throw new Error('Confirm type doesn\\'t exist');\r\n }\r\n\r\n const actions = [];\r\n if (primary){\r\n actions.push(primary);\r\n }\r\n if (secondary){\r\n actions.push(secondary);\r\n }\r\n\r\n actionConfig = {\r\n actions\r\n };\r\n }\r\n\r\n return this.genericDialogContainer(ConfirmDialogComponent,\r\n title, icon, config, actionConfig);\r\n }\r\n\r\n public error(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.ERROR, icon, config);\r\n }\r\n\r\n public info(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.INFO, icon, config);\r\n }\r\n\r\n public createCustomDialog(tempRef: TemplateRef<any>, context?: any, title?: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig) {\r\n let configuration: MatDialogConfig = null;\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.templateRef = tempRef;\r\n configuration.data.title = title ? title : '';\r\n configuration.data.icon = icon ? icon : '';\r\n configuration.data.context = context;\r\n if (actionConfig) {\r\n configuration.data.actionConfig = actionConfig;\r\n }\r\n\r\n configuration.minWidth = configuration.minWidth ? configuration.minWidth : '10em';\r\n configuration.width = configuration.width ? configuration.width : '30em';\r\n\r\n configuration.panelClass = ['mx-sized-dialog', 'no-padding'];\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = true;\r\n\r\n const dialogRef = this.dialog.open(CustomDialogComponent, configuration);\r\n\r\n return dialogRef;\r\n }\r\n\r\n public startDefaultSpinnerDialog(): MatDialogRef<SpinnerDialogComponent> {\r\n return this.startSpinnerDialog('Please wait...', 3, 30);\r\n }\r\n\r\n public startSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n const configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message,\r\n strokeWidth,\r\n diameter\r\n };\r\n configuration.width = '13em';\r\n configuration.disableClose = true;\r\n\r\n const dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n public startNonModalSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n const configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message,\r\n strokeWidth,\r\n diameter\r\n };\r\n configuration.width = '13em';\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = false;\r\n\r\n const dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n // Let there be an alternative, global way to stop all active spinner dialogs.\r\n public stopAllSpinnerDialogs(): void {\r\n this.spinnerWorkItemCount = 0;\r\n for (const dialogRef of this.spinnerDialogRefs) {\r\n setTimeout(() => {\r\n dialogRef.close();\r\n });\r\n }\r\n this.spinnerDialogRefs = [];\r\n }\r\n\r\n public addSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount++;\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n public removeSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount--;\r\n if (this.spinnerWorkItemCount < 0) {\r\n this.spinnerWorkItemCount = 0;\r\n }\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n private checkSpinnerWorkItems(): void {\r\n this.checkingSpinnerWorkItems = false;\r\n if (this.spinnerWorkItemCount) {\r\n if (!this._spinnerDialogIsOpen) {\r\n this.startDefaultSpinnerDialog();\r\n }\r\n } else if (this._spinnerDialogIsOpen) {\r\n this.stopAllSpinnerDialogs();\r\n }\r\n }\r\n\r\n public genericDialogContainer(dialogContent: any, title: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig): Observable<any> {\r\n let configuration: MatDialogConfig = null;\r\n\r\n\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.dialogContent = dialogContent;\r\n configuration.data.title = title;\r\n if (icon) {\r\n configuration.data.icon = icon;\r\n }\r\n if (actionConfig) {\r\n configuration.data.actionConfig = actionConfig;\r\n }\r\n configuration.panelClass = ['mx-sized-dialog', 'no-padding'];\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = true;\r\n const dialogRef = this.dialog.open(GenericContainerDialogComponent, configuration);\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n private openDialog(message: string | string[], title?: string,\r\n type?: DialogType, icon?: string, config?: MatDialogConfig): Observable<any> {\r\n let configuration: MatDialogConfig = null;\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.message = message;\r\n configuration.data.title = title ? title : '';\r\n configuration.data.icon = icon ? icon : '';\r\n configuration.data.dialogType = type ? type : '';\r\n\r\n configuration.maxWidth = configuration.maxWidth ? configuration.maxWidth : '80vw';\r\n configuration.maxHeight = configuration.maxHeight ? configuration.maxHeight : '80vh';\r\n configuration.minWidth = configuration.minWidth ? configuration.minWidth : '30em';\r\n\r\n configuration.panelClass = 'no-padding';\r\n configuration.disableClose = true;\r\n configuration.autoFocus = false;\r\n configuration.hasBackdrop = false;\r\n\r\n let dialogRef: MatDialogRef<AlertDialogComponent>;\r\n\r\n dialogRef = this.dialog.open(AlertDialogComponent, configuration);\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n\r\n}\r\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\r\nimport {DialogService} from '../service/dialog.service';\r\nimport {ActionType} from '../model/generic-dialog-action.model';\r\n\r\n\r\n@Component({\r\n selector: 'hci-save-footer',\r\n template: `\r\n <div class=\"full-height full-width\" style=\"margin-bottom: 8px;\">\r\n <div class=\"d-flex flex-row align-items-center right-align padded\">\r\n <div *ngIf=\"dirty\" class=\"warning-background padded\">\r\n {{ message }}\r\n </div>\r\n <div class=\"major-left-right-margin\">\r\n <button mat-raised-button [disabled]=\"disableSave\"\r\n [color]=\"actionType\" (click)=\"notifySave()\"\r\n [ngClass]=\"{'primary-action': actionType === type.PRIMARY,\r\n 'secondary-action': actionType === type.SECONDARY && !disableSave }\">\r\n <img *ngIf=\"icon\" [src]=\"icon\" alt=\"\">\r\n {{ name }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .primary-action{\r\n background-color: #0077B3FF;\r\n font-weight: bolder;\r\n color: white;\r\n }\r\n .secondary-action{\r\n background-color: #DEF4FFFF;\r\n font-weight: bolder;\r\n color: #0077B3FF;\r\n border: #0077B3FF solid 1px;\r\n }\r\n\r\n .major-left-right-margin {\r\n margin-left: 0.5em;\r\n margin-right: 0.5em;\r\n }\r\n\r\n .right-align {\r\n text-align: right;\r\n justify-content: flex-end;\r\n }\r\n\r\n\r\n .warning-background { background:#feec89; }\r\n\r\n `]\r\n})\r\nexport class SaveFooterComponent implements OnInit, OnDestroy {\r\n\r\n private _dirty: boolean;\r\n\r\n\r\n @Input() actionType: ActionType = ActionType.PRIMARY;\r\n @Input() icon: string;\r\n @Input() message = 'Your changes have not been saved';\r\n @Input() name = 'Save';\r\n @Input() set dirty(data: any){\r\n if (data){\r\n this._dirty = data;\r\n }else{\r\n this._dirty = false;\r\n }\r\n\r\n }\r\n get dirty(){\r\n return this._dirty;\r\n }\r\n\r\n\r\n @Input() set showSpinner(showSpinner: boolean) {\r\n setTimeout( () => {\r\n if (showSpinner) {\r\n this.dialogService.startDefaultSpinnerDialog();\r\n } else {\r\n this.dialogService.stopAllSpinnerDialogs();\r\n }\r\n });\r\n\r\n }\r\n\r\n @Input() disableSave = false;\r\n @Output() saveClicked = new EventEmitter<any>();\r\n type = ActionType;\r\n\r\n constructor(private dialogService: DialogService) { }\r\n\r\n ngOnInit(){\r\n // console.log(this.disableSave);\r\n }\r\n notifySave(): void{\r\n this.saveClicked.emit();\r\n }\r\n ngOnDestroy(){\r\n this.saveClicked.unsubscribe();\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {DialogService} from './service/dialog.service';\r\nimport {AlertDialogComponent} from './alert/alert-dialog.component';\r\nimport {CustomDialogComponent} from './custom/custom-dialog.component';\r\nimport {GenericContainerDialogComponent} from './generic/generic-container-dialog.component';\r\nimport {SaveFooterComponent} from './save-footer/save-footer.component';\r\nimport {SpinnerDialogComponent} from './spinner/spinner-dialog.component';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {DynamicModule} from 'ng-dynamic-component';\r\nimport {ConfirmDialogComponent} from './confirm/confirm-dialog.component';\r\nimport {MatExpansionModule} from '@angular/material/expansion';\r\n// import {RouterModule} from \"@angular/router\";\r\n// import {MatButtonToggleModule} from \"@angular/material/button-toggle\";\r\n// import {MatInputModule} from \"@angular/material/input\";\r\n// import {MatIconModule} from \"@angular/material/icon\";\r\n// import {TreeModule} from \"@circlon/angular-tree-component\";\r\n// import {MatDatepickerModule} from \"@angular/material/datepicker\";\r\n// import {MatSelectModule} from \"@angular/material/select\";\r\n// import {NgbModule, NgbNavModule} from \"@ng-bootstrap/ng-bootstrap\";\r\n// import {MiscModule} from \"@huntsman-cancer-institute/misc\";\r\n// import { MatNativeDateModule } from \"@angular/material/core\";\r\n// import { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n\r\n/**\r\n * The main @huntsman-cancer-institute/dialog module. The module exports all components that an implementation might use\r\n * and the forRoot() provides a global service for an implementing application.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n DynamicModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatExpansionModule,\r\n MatProgressSpinnerModule\r\n // RouterModule,\r\n // MiscModule,\r\n // NgbModule,\r\n // MatButtonToggleModule,\r\n // MatInputModule,\r\n // MatIconModule,\r\n // MatDatepickerModule,\r\n // MatNativeDateModule,\r\n // MatCheckboxModule,\r\n // MatRadioModule,\r\n // MatSelectModule,\r\n // TreeModule,\r\n // NgbNavModule\r\n ],\r\n providers: [\r\n // MatDatepickerModule,\r\n ],\r\n declarations: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ],\r\n entryComponents: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ],\r\n exports: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ]\r\n})\r\nexport class DialogModule {\r\n static forRoot(): ModuleWithProviders<DialogModule> {\r\n return {\r\n providers: [\r\n DialogService\r\n ],\r\n ngModule: DialogModule\r\n };\r\n }\r\n}\r\n"]}
@@ -47,8 +47,17 @@ export class DialogService {
47
47
  // set up a default if needed
48
48
  if (!config) {
49
49
  config = new MatDialogConfig();
50
+ }
51
+ // if the config doesn't have these values set, set defaults
52
+ // but config can exist without them if want to pass message(s) without
53
+ // overriding defaults
54
+ if (!config.width) {
50
55
  config.width = '33vw';
56
+ }
57
+ if (!config.minWidth) {
51
58
  config.minWidth = '300px';
59
+ }
60
+ if (!config.disableClose) {
52
61
  config.disableClose = true;
53
62
  }
54
63
  if (config.data) {
@@ -269,4 +278,4 @@ DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", versio
269
278
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DialogService, decorators: [{
270
279
  type: Injectable
271
280
  }], ctorParameters: function () { return [{ type: i1.MatDialog }]; } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9kaWFsb2cvIiwic291cmNlcyI6WyJzZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFnQixTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJcEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDOUYsT0FBTyxFQUFDLFVBQVUsRUFBaUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUNoRixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7QUFLM0UsTUFBTSxPQUFPLGFBQWE7SUFZdEIsWUFBb0IsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQVY3Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IseUJBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUVsQyxzQkFBaUIsR0FBMkMsRUFBRSxDQUFDO0lBT3RFLENBQUM7SUFMRCxJQUFXLG1CQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNyQyxDQUFDO0lBS00sS0FBSyxDQUFDLE9BQTBCLEVBQUUsS0FBYyxFQUMxQyxVQUF1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QUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JGLGFBQWEsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRWxGLGFBQWEsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO1FBQ3hDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRWxDLElBQUksU0FBNkMsQ0FBQztRQUVsRCxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbEUsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7MkdBMVRRLGFBQWE7K0dBQWIsYUFBYTs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQWxlcnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hbGVydC9hbGVydC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3Bpbm5lckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NwaW5uZXIvc3Bpbm5lci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtDdXN0b21EaWFsb2dDb21wb25lbnR9IGZyb20gJy4uL2N1c3RvbS9jdXN0b20tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7R2VuZXJpY0NvbnRhaW5lckRpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vZ2VuZXJpYy9nZW5lcmljLWNvbnRhaW5lci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtBY3Rpb25UeXBlLCBHREFjdGlvbkNvbmZpZ30gZnJvbSAnLi4vbW9kZWwvZ2VuZXJpYy1kaWFsb2ctYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHtEaWFsb2dUeXBlfSBmcm9tICcuLi9tb2RlbC9kaWFsb2ctdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7Q29uZmlybVR5cGV9IGZyb20gJy4uL21vZGVsL2NvbmZpcm0tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7Q29uZmlybURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vY29uZmlybS9jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIF9zcGlubmVyRGlhbG9nSXNPcGVuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHNwaW5uZXJXb3JrSXRlbUNvdW50ID0gMDtcclxuICAgIHByaXZhdGUgY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHNwaW5uZXJEaWFsb2dSZWZzOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD5bXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc3Bpbm5lckRpYWxvZ0lzT3BlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3BlbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFsZXJ0KG1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdLCB0aXRsZT86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICBkaWFsb2dUeXBlPzogRGlhbG9nVHlwZSwgaWNvbj86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICBjb25maWc/OiBNYXREaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuRGlhbG9nKG1lc3NhZ2UsIHRpdGxlLCBkaWFsb2dUeXBlID8gZGlhbG9nVHlwZSA6IERpYWxvZ1R5cGUuQUxFUlQsIGljb24sIGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm0obWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10sIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgaWNvbj86IHN0cmluZywgY29uZmlnPzogTWF0RGlhbG9nQ29uZmlnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkRpYWxvZyhtZXNzYWdlLCB0aXRsZSwgRGlhbG9nVHlwZS5DT05GSVJNLCBpY29uLCBjb25maWcpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIENvbmZpcm1EaWFsb2dDb21wb25lbnQgd2l0aCBkaWZmZXJlbnQgZGlzcGxheSBkZXBlbmRpbmcgb25cclxuICAgKiB0aGUgQ29uZmlybVR5cGUuXHJcbiAgICogQHBhcmFtIHRpdGxlIGRlZmF1bHRzIHRvICdDb25maXJtJ1xyXG4gICAqIEBwYXJhbSBpY29uIGRlZmF1bHRzIHRvICdmYSBmYS1pbmZvLWNpcmNsZSdcclxuICAgKiBAcGFyYW0gY29uZmlnIGNvbmZpZy5kYXRhIGNhbiBjb250YWluIGEgcHJvbXB0LCBtZXNzYWdlMSBhbmQvb3JcclxuICAgKiBtZXNzYWdlMiBhY2NvcmRpbmcgdG8gdGhlIENvbmZpcm1UeXBlIGNob3NlblxyXG4gICAqIEBwYXJhbSBhY3Rpb25Db25maWcgc2V0cyB1cCB0aGUgZGlhbG9nIGJ1dHRvbnMgYW5kIGFjdGlvbnMgaWYgeW91IHdhbnRcclxuICAgKiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHNcclxuICAgKi9cclxuICBwdWJsaWMgY29uZmlybUJ5VHlwZShjb25maXJtVHlwZTogQ29uZmlybVR5cGUsIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGljb24/OiBzdHJpbmcsIGNvbmZpZz86IE1hdERpYWxvZ0NvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db25maWc/OiBHREFjdGlvbkNvbmZpZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCF0aXRsZSl7XHJcbiAgICAgIHRpdGxlID0gJ0NvbmZpcm0nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaWNvbil7XHJcbiAgICAgIGljb24gPSAnZmEgZmEtaW5mby1jaXJjbGUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCB1cCBhIGRlZmF1bHQgaWYgbmVlZGVkXHJcbiAgICBpZiAoIWNvbmZpZyl7XHJcbiAgICAgIGNvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWc8YW55PigpO1xyXG4gICAgICBjb25maWcud2lkdGggPSAnMzN2dyc7XHJcbiAgICAgIGNvbmZpZy5taW5XaWR0aCA9ICczMDBweCc7XHJcbiAgICAgIGNvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuZGF0YSl7XHJcbiAgICAgIGNvbmZpZy5kYXRhLmNvbmZpcm1UeXBlID0gY29uZmlybVR5cGU7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGNvbmZpZy5kYXRhID0ge1xyXG4gICAgICAgIGNvbmZpcm1UeXBlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgbm8gYWN0aW9ucyBwYXNzZWQgaW4sIHNldCB1cCB0aGUgZGVmYXVsdHNcclxuICAgIGlmICghYWN0aW9uQ29uZmlnKXtcclxuXHJcbiAgICAgIC8vIGRlZmF1bHQgYWN0aW9uc1xyXG4gICAgICBsZXQgcHJpbWFyeSA9IHt0eXBlOiBBY3Rpb25UeXBlLlBSSU1BUlksIG5hbWU6ICdZRVMnLFxyXG4gICAgICAgIGludGVybmFsQWN0aW9uOiAnb25Db25maXJtQ2xpY2snLCBpbnRlcm5hbEFjdGlvblJldHVyblZhbHVlOiB0cnVlfTtcclxuICAgICAgbGV0IHNlY29uZGFyeSA9IHt0eXBlOiBBY3Rpb25UeXBlLlNFQ09OREFSWSwgbmFtZTogJ0dPIEJBQ0snLFxyXG4gICAgICAgIGludGVybmFsQWN0aW9uOiAnb25DbG9zZSd9O1xyXG5cclxuICAgICAgLy8gYnkgZW51bSB0eXBlLCBzZXR1cCB0aGUgbWVzc2FnZXMvcHJvbXB0XHJcbiAgICAgIC8vIG9ubHkgdHdvIG5lZWQgZGlmZmVyZW50IGRlZmF1bHRzIHRoYW4gZ2VuZXJpYyBkZWZhdWx0c1xyXG4gICAgICBzd2l0Y2ggKGNvbmZpcm1UeXBlKSB7XHJcbiAgICAgICAgY2FzZSBDb25maXJtVHlwZS5DT05GSVJNX0FORF9DTE9TRTpcclxuICAgICAgICAgIHByaW1hcnkgPSB7dHlwZTogQWN0aW9uVHlwZS5QUklNQVJZLCBuYW1lOiAnQ09ORklSTSBBTkQgQ0xPU0UnLFxyXG4gICAgICAgICAgICBpbnRlcm5hbEFjdGlvbjogJ29uQ29uZmlybUNsaWNrJywgaW50ZXJuYWxBY3Rpb25SZXR1cm5WYWx1ZTogdHJ1ZX07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbmZpcm1UeXBlLkFMRVJUOlxyXG4gICAgICAgICAgcHJpbWFyeSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHNlY29uZGFyeSA9IHt0eXBlOiBBY3Rpb25UeXBlLlNFQ09OREFSWSwgbmFtZTogJ0NMT1NFJyxcclxuICAgICAgICAgICAgaW50ZXJuYWxBY3Rpb246ICdvbkNsb3NlJ307XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBjYXNlIENvbmZpcm1UeXBlLkRFTEVURTpcclxuICAgICAgICAvLyBjYXNlIENvbmZpcm1UeXBlLkRFTEVURV9XX01FU1NBR0U6XHJcbiAgICAgICAgLy8gY2FzZSBDb25maXJtVHlwZS5ERUxFVEVfV19QUk9NUFQ6XHJcbiAgICAgICAgLy8gY2FzZSBDb25maXJtVHlwZS5ESVNDQVJEOlxyXG4gICAgICAgIC8vIGNhc2UgQ29uZmlybVR5cGUuQUREOlxyXG4gICAgICAgIC8vIGNhc2UgQ29uZmlybVR5cGUuR0VORVJJQzpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25maXJtIHR5cGUgZG9lc25cXCd0IGV4aXN0Jyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBbXTtcclxuICAgICAgaWYgKHByaW1hcnkpe1xyXG4gICAgICAgIGFjdGlvbnMucHVzaChwcmltYXJ5KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2Vjb25kYXJ5KXtcclxuICAgICAgICBhY3Rpb25zLnB1c2goc2Vjb25kYXJ5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYWN0aW9uQ29uZmlnID0ge1xyXG4gICAgICAgIGFjdGlvbnNcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmljRGlhbG9nQ29udGFpbmVyKENvbmZpcm1EaWFsb2dDb21wb25lbnQsXHJcbiAgICAgIHRpdGxlLCBpY29uLCBjb25maWcsIGFjdGlvbkNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAgIHB1YmxpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgaWNvbj86IHN0cmluZywgY29uZmlnPzogTWF0RGlhbG9nQ29uZmlnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkRpYWxvZyhtZXNzYWdlLCB0aXRsZSwgRGlhbG9nVHlwZS5FUlJPUiwgaWNvbiwgY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICBpY29uPzogc3RyaW5nLCBjb25maWc/OiBNYXREaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuRGlhbG9nKG1lc3NhZ2UsIHRpdGxlLCBEaWFsb2dUeXBlLklORk8sIGljb24sIGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUN1c3RvbURpYWxvZyh0ZW1wUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCBjb250ZXh0PzogYW55LCB0aXRsZT86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj86IHN0cmluZywgY29uZmlnPzogTWF0RGlhbG9nQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db25maWc/OiBHREFjdGlvbkNvbmZpZykge1xyXG4gICAgICAgIGxldCBjb25maWd1cmF0aW9uOiBNYXREaWFsb2dDb25maWcgPSBudWxsO1xyXG4gICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvbmZpZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YSA9IGNvbmZpZ3VyYXRpb24uZGF0YSA/IGNvbmZpZ3VyYXRpb24uZGF0YSA6IHt9O1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS50ZW1wbGF0ZVJlZiA9IHRlbXBSZWY7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLnRpdGxlID0gdGl0bGUgPyB0aXRsZSA6ICcnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5pY29uID0gaWNvbiA/IGljb24gOiAnJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgaWYgKGFjdGlvbkNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEuYWN0aW9uQ29uZmlnID0gYWN0aW9uQ29uZmlnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5taW5XaWR0aCA9IGNvbmZpZ3VyYXRpb24ubWluV2lkdGggPyBjb25maWd1cmF0aW9uLm1pbldpZHRoIDogJzEwZW0nO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ud2lkdGggPSBjb25maWd1cmF0aW9uLndpZHRoID8gY29uZmlndXJhdGlvbi53aWR0aCA6ICczMGVtJztcclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5wYW5lbENsYXNzID0gWydteC1zaXplZC1kaWFsb2cnLCAnbm8tcGFkZGluZyddO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDdXN0b21EaWFsb2dDb21wb25lbnQsIGNvbmZpZ3VyYXRpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydERlZmF1bHRTcGlubmVyRGlhbG9nKCk6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTcGlubmVyRGlhbG9nKCdQbGVhc2Ugd2FpdC4uLicsIDMsIDMwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRTcGlubmVyRGlhbG9nKG1lc3NhZ2U6IHN0cmluZywgc3Ryb2tlV2lkdGg6IG51bWJlciwgZGlhbWV0ZXI6IG51bWJlcik6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbjogTWF0RGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YSA9IHtcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGgsXHJcbiAgICAgICAgICAgIGRpYW1ldGVyXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLndpZHRoID0gJzEzZW0nO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD4gPSB0aGlzLmRpYWxvZy5vcGVuKFNwaW5uZXJEaWFsb2dDb21wb25lbnQsIGNvbmZpZ3VyYXRpb24pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Bpbm5lckRpYWxvZ1JlZnMucHVzaChkaWFsb2dSZWYpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydE5vbk1vZGFsU3Bpbm5lckRpYWxvZyhtZXNzYWdlOiBzdHJpbmcsIHN0cm9rZVdpZHRoOiBudW1iZXIsIGRpYW1ldGVyOiBudW1iZXIpOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3BlbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IE1hdERpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEgPSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoLFxyXG4gICAgICAgICAgICBkaWFtZXRlclxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi53aWR0aCA9ICcxM2VtJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5oYXNCYWNrZHJvcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiA9IHRoaXMuZGlhbG9nLm9wZW4oU3Bpbm5lckRpYWxvZ0NvbXBvbmVudCwgY29uZmlndXJhdGlvbik7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGlubmVyRGlhbG9nUmVmcy5wdXNoKGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTGV0IHRoZXJlIGJlIGFuIGFsdGVybmF0aXZlLCBnbG9iYWwgd2F5IHRvIHN0b3AgYWxsIGFjdGl2ZSBzcGlubmVyIGRpYWxvZ3MuXHJcbiAgICBwdWJsaWMgc3RvcEFsbFNwaW5uZXJEaWFsb2dzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQgPSAwO1xyXG4gICAgICAgIGZvciAoY29uc3QgZGlhbG9nUmVmIG9mIHRoaXMuc3Bpbm5lckRpYWxvZ1JlZnMpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3Bpbm5lckRpYWxvZ1JlZnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkU3Bpbm5lcldvcmtJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQrKztcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU3Bpbm5lcldvcmtJdGVtcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVNwaW5uZXJXb3JrSXRlbSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJXb3JrSXRlbUNvdW50LS07XHJcbiAgICAgICAgaWYgKHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU3Bpbm5lcldvcmtJdGVtcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1NwaW5uZXJXb3JrSXRlbXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jaGVja2luZ1NwaW5uZXJXb3JrSXRlbXMgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zcGlubmVyV29ya0l0ZW1Db3VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREZWZhdWx0U3Bpbm5lckRpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcEFsbFNwaW5uZXJEaWFsb2dzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZW5lcmljRGlhbG9nQ29udGFpbmVyKGRpYWxvZ0NvbnRlbnQ6IGFueSwgdGl0bGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb24/OiBzdHJpbmcsIGNvbmZpZz86IE1hdERpYWxvZ0NvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvbmZpZz86IEdEQWN0aW9uQ29uZmlnKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBsZXQgY29uZmlndXJhdGlvbjogTWF0RGlhbG9nQ29uZmlnID0gbnVsbDtcclxuXHJcblxyXG4gICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvbmZpZztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhID0gY29uZmlndXJhdGlvbi5kYXRhID8gY29uZmlndXJhdGlvbi5kYXRhIDoge307XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLmRpYWxvZ0NvbnRlbnQgPSBkaWFsb2dDb250ZW50O1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIGlmIChpY29uKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5pY29uID0gaWNvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbkNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEuYWN0aW9uQ29uZmlnID0gYWN0aW9uQ29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25maWd1cmF0aW9uLnBhbmVsQ2xhc3MgPSBbJ214LXNpemVkLWRpYWxvZycsICduby1wYWRkaW5nJ107XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uaGFzQmFja2Ryb3AgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oR2VuZXJpY0NvbnRhaW5lckRpYWxvZ0NvbXBvbmVudCwgY29uZmlndXJhdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9wZW5EaWFsb2cobWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10sIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHR5cGU/OiBEaWFsb2dUeXBlLCBpY29uPzogc3RyaW5nLCBjb25maWc/OiBNYXREaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGxldCBjb25maWd1cmF0aW9uOiBNYXREaWFsb2dDb25maWcgPSBudWxsO1xyXG4gICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvbmZpZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YSA9IGNvbmZpZ3VyYXRpb24uZGF0YSA/IGNvbmZpZ3VyYXRpb24uZGF0YSA6IHt9O1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEudGl0bGUgPSB0aXRsZSA/IHRpdGxlIDogJyc7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLmljb24gPSBpY29uID8gaWNvbiA6ICcnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5kaWFsb2dUeXBlID0gdHlwZSA/IHR5cGUgOiAnJztcclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5tYXhXaWR0aCA9IGNvbmZpZ3VyYXRpb24ubWF4V2lkdGggPyBjb25maWd1cmF0aW9uLm1heFdpZHRoIDogJzgwdncnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ubWF4SGVpZ2h0ID0gY29uZmlndXJhdGlvbi5tYXhIZWlnaHQgPyBjb25maWd1cmF0aW9uLm1heEhlaWdodCA6ICc4MHZoJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLm1pbldpZHRoID0gY29uZmlndXJhdGlvbi5taW5XaWR0aCA/IGNvbmZpZ3VyYXRpb24ubWluV2lkdGggOiAnMzBlbSc7XHJcblxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ucGFuZWxDbGFzcyA9ICduby1wYWRkaW5nJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5hdXRvRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmhhc0JhY2tkcm9wID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBbGVydERpYWxvZ0NvbXBvbmVudD47XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWxlcnREaWFsb2dDb21wb25lbnQsIGNvbmZpZ3VyYXRpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCk7XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iXX0=
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9kaWFsb2cvIiwic291cmNlcyI6WyJzZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFnQixTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJcEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDOUYsT0FBTyxFQUFDLFVBQVUsRUFBaUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUNoRixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7QUFLM0UsTUFBTSxPQUFPLGFBQWE7SUFZdEIsWUFBb0IsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQVY3Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IseUJBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUVsQyxzQkFBaUIsR0FBMkMsRUFBRSxDQUFDO0lBT3RFLENBQUM7SUFMRCxJQUFXLG1CQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNyQyxDQUFDO0lBS00sS0FBSyxDQUFDLE9BQTBCLEVBQUUsS0FBYyxFQUMxQyxVQUF1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QUFDLENBQUMsRUFBRSxDQUFDO1FBRWpELGFBQWEsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2xGLGFBQWEsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JGLGFBQWEsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRWxGLGFBQWEsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO1FBQ3hDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRWxDLElBQUksU0FBNkMsQ0FBQztRQUVsRCxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbEUsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7MkdBcFVRLGFBQWE7K0dBQWIsYUFBYTs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQWxlcnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hbGVydC9hbGVydC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3Bpbm5lckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NwaW5uZXIvc3Bpbm5lci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtDdXN0b21EaWFsb2dDb21wb25lbnR9IGZyb20gJy4uL2N1c3RvbS9jdXN0b20tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7R2VuZXJpY0NvbnRhaW5lckRpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vZ2VuZXJpYy9nZW5lcmljLWNvbnRhaW5lci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtBY3Rpb25UeXBlLCBHREFjdGlvbkNvbmZpZ30gZnJvbSAnLi4vbW9kZWwvZ2VuZXJpYy1kaWFsb2ctYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHtEaWFsb2dUeXBlfSBmcm9tICcuLi9tb2RlbC9kaWFsb2ctdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7Q29uZmlybVR5cGV9IGZyb20gJy4uL21vZGVsL2NvbmZpcm0tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7Q29uZmlybURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vY29uZmlybS9jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIF9zcGlubmVyRGlhbG9nSXNPcGVuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHNwaW5uZXJXb3JrSXRlbUNvdW50ID0gMDtcclxuICAgIHByaXZhdGUgY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHNwaW5uZXJEaWFsb2dSZWZzOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD5bXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc3Bpbm5lckRpYWxvZ0lzT3BlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3BlbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFsZXJ0KG1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdLCB0aXRsZT86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICBkaWFsb2dUeXBlPzogRGlhbG9nVHlwZSwgaWNvbj86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICBjb25maWc/OiBNYXREaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuRGlhbG9nKG1lc3NhZ2UsIHRpdGxlLCBkaWFsb2dUeXBlID8gZGlhbG9nVHlwZSA6IERpYWxvZ1R5cGUuQUxFUlQsIGljb24sIGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm0obWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10sIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgaWNvbj86IHN0cmluZywgY29uZmlnPzogTWF0RGlhbG9nQ29uZmlnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkRpYWxvZyhtZXNzYWdlLCB0aXRsZSwgRGlhbG9nVHlwZS5DT05GSVJNLCBpY29uLCBjb25maWcpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIENvbmZpcm1EaWFsb2dDb21wb25lbnQgd2l0aCBkaWZmZXJlbnQgZGlzcGxheSBkZXBlbmRpbmcgb25cclxuICAgKiB0aGUgQ29uZmlybVR5cGUuXHJcbiAgICogQHBhcmFtIHRpdGxlIGRlZmF1bHRzIHRvICdDb25maXJtJ1xyXG4gICAqIEBwYXJhbSBpY29uIGRlZmF1bHRzIHRvICdmYSBmYS1pbmZvLWNpcmNsZSdcclxuICAgKiBAcGFyYW0gY29uZmlnIGNvbmZpZy5kYXRhIGNhbiBjb250YWluIGEgcHJvbXB0LCBtZXNzYWdlMSBhbmQvb3JcclxuICAgKiBtZXNzYWdlMiBhY2NvcmRpbmcgdG8gdGhlIENvbmZpcm1UeXBlIGNob3NlblxyXG4gICAqIEBwYXJhbSBhY3Rpb25Db25maWcgc2V0cyB1cCB0aGUgZGlhbG9nIGJ1dHRvbnMgYW5kIGFjdGlvbnMgaWYgeW91IHdhbnRcclxuICAgKiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHNcclxuICAgKi9cclxuICBwdWJsaWMgY29uZmlybUJ5VHlwZShjb25maXJtVHlwZTogQ29uZmlybVR5cGUsIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGljb24/OiBzdHJpbmcsIGNvbmZpZz86IE1hdERpYWxvZ0NvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db25maWc/OiBHREFjdGlvbkNvbmZpZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCF0aXRsZSl7XHJcbiAgICAgIHRpdGxlID0gJ0NvbmZpcm0nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaWNvbil7XHJcbiAgICAgIGljb24gPSAnZmEgZmEtaW5mby1jaXJjbGUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCB1cCBhIGRlZmF1bHQgaWYgbmVlZGVkXHJcbiAgICBpZiAoIWNvbmZpZyl7XHJcbiAgICAgIGNvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWc8YW55PigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHRoZSBjb25maWcgZG9lc24ndCBoYXZlIHRoZXNlIHZhbHVlcyBzZXQsIHNldCBkZWZhdWx0c1xyXG4gICAgLy8gYnV0IGNvbmZpZyBjYW4gZXhpc3Qgd2l0aG91dCB0aGVtIGlmIHdhbnQgdG8gcGFzcyBtZXNzYWdlKHMpIHdpdGhvdXRcclxuICAgIC8vIG92ZXJyaWRpbmcgZGVmYXVsdHNcclxuICAgIGlmICghY29uZmlnLndpZHRoKSB7XHJcbiAgICAgIGNvbmZpZy53aWR0aCA9ICczM3Z3JztcclxuICAgIH1cclxuICAgIGlmICghY29uZmlnLm1pbldpZHRoKXtcclxuICAgICAgY29uZmlnLm1pbldpZHRoID0gJzMwMHB4JztcclxuICAgIH1cclxuICAgIGlmICghY29uZmlnLmRpc2FibGVDbG9zZSl7XHJcbiAgICAgIGNvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuZGF0YSl7XHJcbiAgICAgIGNvbmZpZy5kYXRhLmNvbmZpcm1UeXBlID0gY29uZmlybVR5cGU7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGNvbmZpZy5kYXRhID0ge1xyXG4gICAgICAgIGNvbmZpcm1UeXBlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgbm8gYWN0aW9ucyBwYXNzZWQgaW4sIHNldCB1cCB0aGUgZGVmYXVsdHNcclxuICAgIGlmICghYWN0aW9uQ29uZmlnKXtcclxuXHJcbiAgICAgIC8vIGRlZmF1bHQgYWN0aW9uc1xyXG4gICAgICBsZXQgcHJpbWFyeSA9IHt0eXBlOiBBY3Rpb25UeXBlLlBSSU1BUlksIG5hbWU6ICdZRVMnLFxyXG4gICAgICAgIGludGVybmFsQWN0aW9uOiAnb25Db25maXJtQ2xpY2snLCBpbnRlcm5hbEFjdGlvblJldHVyblZhbHVlOiB0cnVlfTtcclxuICAgICAgbGV0IHNlY29uZGFyeSA9IHt0eXBlOiBBY3Rpb25UeXBlLlNFQ09OREFSWSwgbmFtZTogJ0dPIEJBQ0snLFxyXG4gICAgICAgIGludGVybmFsQWN0aW9uOiAnb25DbG9zZSd9O1xyXG5cclxuICAgICAgLy8gYnkgZW51bSB0eXBlLCBzZXR1cCB0aGUgbWVzc2FnZXMvcHJvbXB0XHJcbiAgICAgIC8vIG9ubHkgdHdvIG5lZWQgZGlmZmVyZW50IGRlZmF1bHRzIHRoYW4gZ2VuZXJpYyBkZWZhdWx0c1xyXG4gICAgICBzd2l0Y2ggKGNvbmZpcm1UeXBlKSB7XHJcbiAgICAgICAgY2FzZSBDb25maXJtVHlwZS5DT05GSVJNX0FORF9DTE9TRTpcclxuICAgICAgICAgIHByaW1hcnkgPSB7dHlwZTogQWN0aW9uVHlwZS5QUklNQVJZLCBuYW1lOiAnQ09ORklSTSBBTkQgQ0xPU0UnLFxyXG4gICAgICAgICAgICBpbnRlcm5hbEFjdGlvbjogJ29uQ29uZmlybUNsaWNrJywgaW50ZXJuYWxBY3Rpb25SZXR1cm5WYWx1ZTogdHJ1ZX07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbmZpcm1UeXBlLkFMRVJUOlxyXG4gICAgICAgICAgcHJpbWFyeSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHNlY29uZGFyeSA9IHt0eXBlOiBBY3Rpb25UeXBlLlNFQ09OREFSWSwgbmFtZTogJ0NMT1NFJyxcclxuICAgICAgICAgICAgaW50ZXJuYWxBY3Rpb246ICdvbkNsb3NlJ307XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBjYXNlIENvbmZpcm1UeXBlLkRFTEVURTpcclxuICAgICAgICAvLyBjYXNlIENvbmZpcm1UeXBlLkRFTEVURV9XX01FU1NBR0U6XHJcbiAgICAgICAgLy8gY2FzZSBDb25maXJtVHlwZS5ERUxFVEVfV19QUk9NUFQ6XHJcbiAgICAgICAgLy8gY2FzZSBDb25maXJtVHlwZS5ESVNDQVJEOlxyXG4gICAgICAgIC8vIGNhc2UgQ29uZmlybVR5cGUuQUREOlxyXG4gICAgICAgIC8vIGNhc2UgQ29uZmlybVR5cGUuR0VORVJJQzpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25maXJtIHR5cGUgZG9lc25cXCd0IGV4aXN0Jyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBbXTtcclxuICAgICAgaWYgKHByaW1hcnkpe1xyXG4gICAgICAgIGFjdGlvbnMucHVzaChwcmltYXJ5KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2Vjb25kYXJ5KXtcclxuICAgICAgICBhY3Rpb25zLnB1c2goc2Vjb25kYXJ5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYWN0aW9uQ29uZmlnID0ge1xyXG4gICAgICAgIGFjdGlvbnNcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmljRGlhbG9nQ29udGFpbmVyKENvbmZpcm1EaWFsb2dDb21wb25lbnQsXHJcbiAgICAgIHRpdGxlLCBpY29uLCBjb25maWcsIGFjdGlvbkNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAgIHB1YmxpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgaWNvbj86IHN0cmluZywgY29uZmlnPzogTWF0RGlhbG9nQ29uZmlnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkRpYWxvZyhtZXNzYWdlLCB0aXRsZSwgRGlhbG9nVHlwZS5FUlJPUiwgaWNvbiwgY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICBpY29uPzogc3RyaW5nLCBjb25maWc/OiBNYXREaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuRGlhbG9nKG1lc3NhZ2UsIHRpdGxlLCBEaWFsb2dUeXBlLklORk8sIGljb24sIGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUN1c3RvbURpYWxvZyh0ZW1wUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCBjb250ZXh0PzogYW55LCB0aXRsZT86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj86IHN0cmluZywgY29uZmlnPzogTWF0RGlhbG9nQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db25maWc/OiBHREFjdGlvbkNvbmZpZykge1xyXG4gICAgICAgIGxldCBjb25maWd1cmF0aW9uOiBNYXREaWFsb2dDb25maWcgPSBudWxsO1xyXG4gICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvbmZpZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YSA9IGNvbmZpZ3VyYXRpb24uZGF0YSA/IGNvbmZpZ3VyYXRpb24uZGF0YSA6IHt9O1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS50ZW1wbGF0ZVJlZiA9IHRlbXBSZWY7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLnRpdGxlID0gdGl0bGUgPyB0aXRsZSA6ICcnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5pY29uID0gaWNvbiA/IGljb24gOiAnJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgaWYgKGFjdGlvbkNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEuYWN0aW9uQ29uZmlnID0gYWN0aW9uQ29uZmlnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5taW5XaWR0aCA9IGNvbmZpZ3VyYXRpb24ubWluV2lkdGggPyBjb25maWd1cmF0aW9uLm1pbldpZHRoIDogJzEwZW0nO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ud2lkdGggPSBjb25maWd1cmF0aW9uLndpZHRoID8gY29uZmlndXJhdGlvbi53aWR0aCA6ICczMGVtJztcclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5wYW5lbENsYXNzID0gWydteC1zaXplZC1kaWFsb2cnLCAnbm8tcGFkZGluZyddO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDdXN0b21EaWFsb2dDb21wb25lbnQsIGNvbmZpZ3VyYXRpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydERlZmF1bHRTcGlubmVyRGlhbG9nKCk6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTcGlubmVyRGlhbG9nKCdQbGVhc2Ugd2FpdC4uLicsIDMsIDMwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRTcGlubmVyRGlhbG9nKG1lc3NhZ2U6IHN0cmluZywgc3Ryb2tlV2lkdGg6IG51bWJlciwgZGlhbWV0ZXI6IG51bWJlcik6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbjogTWF0RGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YSA9IHtcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGgsXHJcbiAgICAgICAgICAgIGRpYW1ldGVyXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLndpZHRoID0gJzEzZW0nO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD4gPSB0aGlzLmRpYWxvZy5vcGVuKFNwaW5uZXJEaWFsb2dDb21wb25lbnQsIGNvbmZpZ3VyYXRpb24pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Bpbm5lckRpYWxvZ1JlZnMucHVzaChkaWFsb2dSZWYpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydE5vbk1vZGFsU3Bpbm5lckRpYWxvZyhtZXNzYWdlOiBzdHJpbmcsIHN0cm9rZVdpZHRoOiBudW1iZXIsIGRpYW1ldGVyOiBudW1iZXIpOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3BlbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IE1hdERpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEgPSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoLFxyXG4gICAgICAgICAgICBkaWFtZXRlclxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi53aWR0aCA9ICcxM2VtJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5oYXNCYWNrZHJvcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiA9IHRoaXMuZGlhbG9nLm9wZW4oU3Bpbm5lckRpYWxvZ0NvbXBvbmVudCwgY29uZmlndXJhdGlvbik7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGlubmVyRGlhbG9nUmVmcy5wdXNoKGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTGV0IHRoZXJlIGJlIGFuIGFsdGVybmF0aXZlLCBnbG9iYWwgd2F5IHRvIHN0b3AgYWxsIGFjdGl2ZSBzcGlubmVyIGRpYWxvZ3MuXHJcbiAgICBwdWJsaWMgc3RvcEFsbFNwaW5uZXJEaWFsb2dzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQgPSAwO1xyXG4gICAgICAgIGZvciAoY29uc3QgZGlhbG9nUmVmIG9mIHRoaXMuc3Bpbm5lckRpYWxvZ1JlZnMpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3Bpbm5lckRpYWxvZ1JlZnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkU3Bpbm5lcldvcmtJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQrKztcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU3Bpbm5lcldvcmtJdGVtcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVNwaW5uZXJXb3JrSXRlbSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJXb3JrSXRlbUNvdW50LS07XHJcbiAgICAgICAgaWYgKHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tpbmdTcGlubmVyV29ya0l0ZW1zID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU3Bpbm5lcldvcmtJdGVtcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1NwaW5uZXJXb3JrSXRlbXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jaGVja2luZ1NwaW5uZXJXb3JrSXRlbXMgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zcGlubmVyV29ya0l0ZW1Db3VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREZWZhdWx0U3Bpbm5lckRpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcEFsbFNwaW5uZXJEaWFsb2dzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZW5lcmljRGlhbG9nQ29udGFpbmVyKGRpYWxvZ0NvbnRlbnQ6IGFueSwgdGl0bGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb24/OiBzdHJpbmcsIGNvbmZpZz86IE1hdERpYWxvZ0NvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvbmZpZz86IEdEQWN0aW9uQ29uZmlnKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBsZXQgY29uZmlndXJhdGlvbjogTWF0RGlhbG9nQ29uZmlnID0gbnVsbDtcclxuXHJcblxyXG4gICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvbmZpZztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhID0gY29uZmlndXJhdGlvbi5kYXRhID8gY29uZmlndXJhdGlvbi5kYXRhIDoge307XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLmRpYWxvZ0NvbnRlbnQgPSBkaWFsb2dDb250ZW50O1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIGlmIChpY29uKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5pY29uID0gaWNvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbkNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEuYWN0aW9uQ29uZmlnID0gYWN0aW9uQ29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25maWd1cmF0aW9uLnBhbmVsQ2xhc3MgPSBbJ214LXNpemVkLWRpYWxvZycsICduby1wYWRkaW5nJ107XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uaGFzQmFja2Ryb3AgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oR2VuZXJpY0NvbnRhaW5lckRpYWxvZ0NvbXBvbmVudCwgY29uZmlndXJhdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9wZW5EaWFsb2cobWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10sIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHR5cGU/OiBEaWFsb2dUeXBlLCBpY29uPzogc3RyaW5nLCBjb25maWc/OiBNYXREaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGxldCBjb25maWd1cmF0aW9uOiBNYXREaWFsb2dDb25maWcgPSBudWxsO1xyXG4gICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvbmZpZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YSA9IGNvbmZpZ3VyYXRpb24uZGF0YSA/IGNvbmZpZ3VyYXRpb24uZGF0YSA6IHt9O1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEudGl0bGUgPSB0aXRsZSA/IHRpdGxlIDogJyc7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLmljb24gPSBpY29uID8gaWNvbiA6ICcnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5kaWFsb2dUeXBlID0gdHlwZSA/IHR5cGUgOiAnJztcclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5tYXhXaWR0aCA9IGNvbmZpZ3VyYXRpb24ubWF4V2lkdGggPyBjb25maWd1cmF0aW9uLm1heFdpZHRoIDogJzgwdncnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ubWF4SGVpZ2h0ID0gY29uZmlndXJhdGlvbi5tYXhIZWlnaHQgPyBjb25maWd1cmF0aW9uLm1heEhlaWdodCA6ICc4MHZoJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLm1pbldpZHRoID0gY29uZmlndXJhdGlvbi5taW5XaWR0aCA/IGNvbmZpZ3VyYXRpb24ubWluV2lkdGggOiAnMzBlbSc7XHJcblxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ucGFuZWxDbGFzcyA9ICduby1wYWRkaW5nJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5hdXRvRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmhhc0JhY2tkcm9wID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBbGVydERpYWxvZ0NvbXBvbmVudD47XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWxlcnREaWFsb2dDb21wb25lbnQsIGNvbmZpZ3VyYXRpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCk7XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iXX0=