@magic-xpa/angular 4.801.0-dev481.243 → 4.801.0-dev481.249
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.
- package/esm2020/index.mjs +57 -0
- package/{esm2015/magic-xpa-angular.js → esm2020/magic-xpa-angular.mjs} +0 -0
- package/{esm2015/src/controls.metadata.model.js → esm2020/src/controls.metadata.model.mjs} +0 -0
- package/{esm2015/src/interfaces/sub-form-definition.iterface.js → esm2020/src/interfaces/sub-form-definition.iterface.mjs} +1 -0
- package/esm2020/src/magic.core.module.mjs +157 -0
- package/{esm2015/src/services/ISubformMagicService.js → esm2020/src/services/ISubformMagicService.mjs} +1 -0
- package/esm2020/src/services/OverlayWindowService.mjs +208 -0
- package/{esm2015/src/services/StylesMapManager.js → esm2020/src/services/StylesMapManager.mjs} +0 -0
- package/{esm2015/src/services/accessor.magic.service.js → esm2020/src/services/accessor.magic.service.mjs} +2 -2
- package/{esm2015/src/services/commands-collector.magic.service.js → esm2020/src/services/commands-collector.magic.service.mjs} +7 -4
- package/esm2020/src/services/component-list.magic.service.mjs +46 -0
- package/{esm2015/src/services/confirmation.components.magic.provider.js → esm2020/src/services/confirmation.components.magic.provider.mjs} +2 -2
- package/esm2020/src/services/engine.magic.service.mjs +82 -0
- package/{esm2015/src/services/exit.magic.service.js → esm2020/src/services/exit.magic.service.mjs} +2 -2
- package/esm2020/src/services/magic.lazy.loader.service.mjs +16 -0
- package/{esm2015/src/services/magic.providers.js → esm2020/src/services/magic.providers.mjs} +0 -0
- package/{esm2015/src/services/magic.services.js → esm2020/src/services/magic.services.mjs} +2 -2
- package/{esm2015/src/services/mg-date-adapter.js → esm2020/src/services/mg-date-adapter.mjs} +2 -2
- package/{esm2015/src/services/overlay.conainer.magic.provider.js → esm2020/src/services/overlay.conainer.magic.provider.mjs} +2 -2
- package/esm2020/src/services/router-commands.magic.service.mjs +28 -0
- package/{esm2015/src/services/subform.magic.service.js → esm2020/src/services/subform.magic.service.mjs} +14 -10
- package/{esm2015/src/services/table.magic.service.js → esm2020/src/services/table.magic.service.mjs} +2 -2
- package/{esm2015/src/services/task.magics.service.js → esm2020/src/services/task.magics.service.mjs} +2 -2
- package/{esm2015/src/services/title.magic.service.js → esm2020/src/services/title.magic.service.mjs} +2 -2
- package/{esm2015/src/ui/GuiInteractiveExecutor.js → esm2020/src/ui/GuiInteractiveExecutor.mjs} +0 -0
- package/{esm2015/src/ui/components/base-magic-alert.component.js → esm2020/src/ui/components/base-magic-alert.component.mjs} +2 -2
- package/{esm2015/src/ui/components/base-magic-confirm.component.js → esm2020/src/ui/components/base-magic-confirm.component.mjs} +2 -2
- package/esm2020/src/ui/components/magic-alert.component.mjs +71 -0
- package/esm2020/src/ui/components/magic-confirmation-box.component.mjs +82 -0
- package/{esm2015/src/ui/directives/NonMagicControlDirective.js → esm2020/src/ui/directives/NonMagicControlDirective.mjs} +2 -2
- package/{esm2015/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.js → esm2020/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.mjs} +2 -2
- package/{esm2015/src/ui/directives/magic/checkbox.magic.directive.js → esm2020/src/ui/directives/magic/checkbox.magic.directive.mjs} +2 -2
- package/{esm2015/src/ui/directives/magic/combobox.magic.directive.js → esm2020/src/ui/directives/magic/combobox.magic.directive.mjs} +2 -2
- package/{esm2015/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.js → esm2020/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.mjs} +3 -4
- package/{esm2015/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.js → esm2020/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.mjs} +2 -2
- package/{esm2015/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.js → esm2020/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.mjs} +3 -4
- package/{esm2015/src/ui/directives/magic/input.noformcontrol.magic.directive.js → esm2020/src/ui/directives/magic/input.noformcontrol.magic.directive.mjs} +2 -2
- package/{esm2015/src/ui/directives/magic/nocontrol.magic.directive.js → esm2020/src/ui/directives/magic/nocontrol.magic.directive.mjs} +2 -2
- package/{esm2015/src/ui/directives/magic/row.magic.directive.js → esm2020/src/ui/directives/magic/row.magic.directive.mjs} +2 -2
- package/{esm2015/src/ui/directives/magic-focus.directive.js → esm2020/src/ui/directives/magic-focus.directive.mjs} +2 -2
- package/esm2020/src/ui/directives/magic.directive.mjs +207 -0
- package/{esm2015/src/ui/directives/magicViewContainerRef.directive.js → esm2020/src/ui/directives/magicViewContainerRef.directive.mjs} +3 -3
- package/{esm2015/src/ui/directives/mgformat.magic.directive.js → esm2020/src/ui/directives/mgformat.magic.directive.mjs} +2 -2
- package/{esm2015/src/ui/directives/range-validator.magic.directive.js → esm2020/src/ui/directives/range-validator.magic.directive.mjs} +2 -2
- package/{esm2015/src/ui/magic-confirmationBox.js → esm2020/src/ui/magic-confirmationBox.mjs} +0 -0
- package/{esm2015/src/ui/magic-modal/base-magic-overlay-container.js → esm2020/src/ui/magic-modal/base-magic-overlay-container.mjs} +0 -0
- package/{esm2015/src/ui/magic-modal/magic-modal-form.js → esm2020/src/ui/magic-modal/magic-modal-form.mjs} +0 -0
- package/{esm2015/src/ui/magic-modal/magic-modal-interface.js → esm2020/src/ui/magic-modal/magic-modal-interface.mjs} +1 -0
- package/esm2020/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +135 -0
- package/esm2020/src/ui/magic-modal/magic-overlay-container.mjs +165 -0
- package/esm2020/src/ui/magic-root.component.mjs +237 -0
- package/esm2020/src/ui/mgerror.magic.component.mjs +120 -0
- package/{esm2015/src/ui/pipes/date.magic.pipe.js → esm2020/src/ui/pipes/date.magic.pipe.mjs} +3 -3
- package/{esm2015/src/ui/pipes/time.magic.pipe.js → esm2020/src/ui/pipes/time.magic.pipe.mjs} +3 -3
- package/{esm2015/src/ui/router-container.magic.component.js → esm2020/src/ui/router-container.magic.component.mjs} +2 -2
- package/{esm2015/src/ui/subform.magic.component.js → esm2020/src/ui/subform.magic.component.mjs} +3 -3
- package/{esm2015/src/ui/task-base.magic.component.js → esm2020/src/ui/task-base.magic.component.mjs} +2 -2
- package/{esm2015/src/ui/utils.js → esm2020/src/ui/utils.mjs} +0 -0
- package/fesm2015/magic-xpa-angular.mjs +4578 -0
- package/fesm2015/magic-xpa-angular.mjs.map +1 -0
- package/{fesm2015/magic-xpa-angular.js → fesm2020/magic-xpa-angular.mjs} +433 -412
- package/fesm2020/magic-xpa-angular.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/package.json +28 -15
- package/src/magic.core.module.d.ts +3 -8
- package/src/services/OverlayWindowService.d.ts +2 -2
- package/src/services/accessor.magic.service.d.ts +2 -2
- package/src/services/commands-collector.magic.service.d.ts +2 -2
- package/src/services/component-list.magic.service.d.ts +3 -0
- package/src/services/confirmation.components.magic.provider.d.ts +2 -2
- package/src/services/engine.magic.service.d.ts +2 -2
- package/src/services/exit.magic.service.d.ts +2 -2
- package/src/services/magic.lazy.loader.service.d.ts +6 -0
- package/src/services/magic.services.d.ts +2 -2
- package/src/services/mg-date-adapter.d.ts +2 -2
- package/src/services/overlay.conainer.magic.provider.d.ts +2 -2
- package/src/services/router-commands.magic.service.d.ts +2 -2
- package/src/services/subform.magic.service.d.ts +6 -4
- package/src/services/table.magic.service.d.ts +2 -2
- package/src/services/task.magics.service.d.ts +2 -2
- package/src/services/title.magic.service.d.ts +2 -2
- package/src/ui/components/base-magic-alert.component.d.ts +2 -2
- package/src/ui/components/base-magic-confirm.component.d.ts +2 -2
- package/src/ui/components/magic-alert.component.d.ts +2 -2
- package/src/ui/components/magic-confirmation-box.component.d.ts +2 -2
- package/src/ui/directives/NonMagicControlDirective.d.ts +2 -2
- package/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.d.ts +2 -2
- package/src/ui/directives/magic/checkbox.magic.directive.d.ts +2 -2
- package/src/ui/directives/magic/combobox.magic.directive.d.ts +2 -2
- package/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.d.ts +2 -2
- package/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.d.ts +2 -2
- package/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.d.ts +2 -2
- package/src/ui/directives/magic/input.noformcontrol.magic.directive.d.ts +2 -2
- package/src/ui/directives/magic/nocontrol.magic.directive.d.ts +2 -2
- package/src/ui/directives/magic/row.magic.directive.d.ts +2 -2
- package/src/ui/directives/magic-focus.directive.d.ts +2 -2
- package/src/ui/directives/magic.directive.d.ts +2 -2
- package/src/ui/directives/magicViewContainerRef.directive.d.ts +2 -2
- package/src/ui/directives/mgformat.magic.directive.d.ts +2 -2
- package/src/ui/directives/range-validator.magic.directive.d.ts +2 -2
- package/src/ui/magic-modal/magic-overlay-container-wrapper.d.ts +7 -5
- package/src/ui/magic-modal/magic-overlay-container.d.ts +2 -2
- package/src/ui/magic-root.component.d.ts +2 -2
- package/src/ui/mgerror.magic.component.d.ts +2 -2
- package/src/ui/pipes/date.magic.pipe.d.ts +2 -2
- package/src/ui/pipes/time.magic.pipe.d.ts +2 -2
- package/src/ui/router-container.magic.component.d.ts +2 -2
- package/src/ui/subform.magic.component.d.ts +2 -2
- package/src/ui/task-base.magic.component.d.ts +2 -2
- package/bundles/magic-xpa-angular.umd.js +0 -5028
- package/bundles/magic-xpa-angular.umd.js.map +0 -1
- package/bundles/magic-xpa-angular.umd.min.js +0 -16
- package/bundles/magic-xpa-angular.umd.min.js.map +0 -1
- package/esm2015/index.js +0 -56
- package/esm2015/src/magic.core.module.js +0 -173
- package/esm2015/src/services/OverlayWindowService.js +0 -205
- package/esm2015/src/services/component-list.magic.service.js +0 -36
- package/esm2015/src/services/engine.magic.service.js +0 -82
- package/esm2015/src/services/router-commands.magic.service.js +0 -25
- package/esm2015/src/ui/components/magic-alert.component.js +0 -72
- package/esm2015/src/ui/components/magic-confirmation-box.component.js +0 -83
- package/esm2015/src/ui/directives/magic.directive.js +0 -207
- package/esm2015/src/ui/magic-modal/magic-overlay-container-wrapper.js +0 -131
- package/esm2015/src/ui/magic-modal/magic-overlay-container.js +0 -169
- package/esm2015/src/ui/magic-root.component.js +0 -237
- package/esm2015/src/ui/mgerror.magic.component.js +0 -120
- package/fesm2015/magic-xpa-angular.js.map +0 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ViewChild, ComponentFactoryResolver, ElementRef, Injector, ChangeDetectorRef, Compiler } from '@angular/core';
|
|
2
|
+
import { BaseMagicOverlayContainer } from "./base-magic-overlay-container";
|
|
3
|
+
import { BaseMagicConfirmComponent } from "../components/base-magic-confirm.component";
|
|
4
|
+
import { BaseMagicAlertComponent } from "../components/base-magic-alert.component";
|
|
5
|
+
import { OverlayType } from "@magic-xpa/gui";
|
|
6
|
+
import { ComponentListMagicService } from "../../services/component-list.magic.service";
|
|
7
|
+
import { isNullOrUndefined } from '@magic-xpa/mscorelib';
|
|
8
|
+
import { MagicLazyLoaderService } from '../../services/magic.lazy.loader.service';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../../services/component-list.magic.service";
|
|
11
|
+
import * as i2 from "../../services/magic.lazy.loader.service";
|
|
12
|
+
import * as i3 from "../directives/magic-focus.directive";
|
|
13
|
+
import * as i4 from "../directives/magicViewContainerRef.directive";
|
|
14
|
+
const _c0 = ["overlayContainerWrapper"];
|
|
15
|
+
export class MagicOverlayContainerWrapper {
|
|
16
|
+
constructor(componentListMagicService, magicLazyModuleLoader, injector, componentFactoryResolver, changeDetectorRef, compiler) {
|
|
17
|
+
this.componentListMagicService = componentListMagicService;
|
|
18
|
+
this.magicLazyModuleLoader = magicLazyModuleLoader;
|
|
19
|
+
this.injector = injector;
|
|
20
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
21
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
22
|
+
this.compiler = compiler;
|
|
23
|
+
this.Component = null;
|
|
24
|
+
this.Parameters = {};
|
|
25
|
+
this.onClose = new EventEmitter();
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
let moduleRef = this.componentListMagicService.getModuleRef(this.Parameters.MagicFormName);
|
|
29
|
+
if (moduleRef == null) {
|
|
30
|
+
let lazyLoadModule = this.componentListMagicService.getLazyLoadModuleData(this.Parameters.MagicFormName);
|
|
31
|
+
if (lazyLoadModule != null) {
|
|
32
|
+
let moduleName = lazyLoadModule.moduleName.replace("Magic", "");
|
|
33
|
+
moduleName = moduleName.replace("Module", "");
|
|
34
|
+
this.magicLazyModuleLoader.Load(moduleName).then(m => {
|
|
35
|
+
const compiled = this.compiler.compileModuleAndAllComponentsSync(m[lazyLoadModule.moduleName]);
|
|
36
|
+
moduleRef = compiled.ngModuleFactory.create(this.injector);
|
|
37
|
+
this.loadComponent(moduleRef);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.loadComponent(null);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else
|
|
45
|
+
this.loadComponent(moduleRef);
|
|
46
|
+
}
|
|
47
|
+
loadComponent(moduleRef) {
|
|
48
|
+
this.Parameters.ModalComp = this.componentListMagicService.getComponent(this.Parameters.MagicFormName, !isNullOrUndefined(this.Parameters.MagicFormName));
|
|
49
|
+
let factory;
|
|
50
|
+
if (moduleRef != null)
|
|
51
|
+
factory = moduleRef.componentFactoryResolver.resolveComponentFactory(this.Component);
|
|
52
|
+
else
|
|
53
|
+
factory = this.componentFactoryResolver.resolveComponentFactory(this.Component);
|
|
54
|
+
let componentRef = this.overlayContentViewContainerRef.createComponent(factory);
|
|
55
|
+
let allowedBaseComp = MagicOverlayContainerWrapper.allowedBaseComps.get(this.OverlayTypeParam);
|
|
56
|
+
if (componentRef.instance instanceof allowedBaseComp.comp) {
|
|
57
|
+
Object.assign(componentRef.instance, this.Parameters);
|
|
58
|
+
componentRef.instance.onClose.subscribe((res) => {
|
|
59
|
+
this.onClose.emit(res);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
let msg = "Provided window container should subclass of : " + allowedBaseComp.error + "window will not work properly.";
|
|
64
|
+
alert(msg);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
setViewContainerRef(vcRef) {
|
|
68
|
+
this.overlayContentViewContainerRef = vcRef;
|
|
69
|
+
}
|
|
70
|
+
GetRootElement() {
|
|
71
|
+
return this.overlayContainerWrapperElementRef.nativeElement;
|
|
72
|
+
}
|
|
73
|
+
DetectChanges() {
|
|
74
|
+
this.changeDetectorRef.detectChanges();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
MagicOverlayContainerWrapper.allowedBaseComps = new Map([
|
|
78
|
+
[OverlayType.Overlay, { comp: BaseMagicOverlayContainer, error: 'BaseMagicOverlayContainer . Overlay ' }],
|
|
79
|
+
[OverlayType.Alert, { comp: BaseMagicAlertComponent, error: 'BaseMagicAlertComponent. Alert ' }],
|
|
80
|
+
[OverlayType.ConfirmationBox, { comp: BaseMagicConfirmComponent, error: 'BaseMagicConfirmComponent. Confirmation ' }]
|
|
81
|
+
]);
|
|
82
|
+
MagicOverlayContainerWrapper.ɵfac = function MagicOverlayContainerWrapper_Factory(t) { return new (t || MagicOverlayContainerWrapper)(i0.ɵɵdirectiveInject(i1.ComponentListMagicService), i0.ɵɵdirectiveInject(i2.MagicLazyLoaderService), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.Compiler)); };
|
|
83
|
+
MagicOverlayContainerWrapper.ɵcmp = i0.ɵɵdefineComponent({ type: MagicOverlayContainerWrapper, selectors: [["app-magic-overlay-container-wrapper"]], viewQuery: function MagicOverlayContainerWrapper_Query(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵviewQuery(_c0, 7);
|
|
85
|
+
} if (rf & 2) {
|
|
86
|
+
let _t;
|
|
87
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overlayContainerWrapperElementRef = _t.first);
|
|
88
|
+
} }, inputs: { Component: "Component", Parameters: "Parameters", OverlayTypeParam: "OverlayTypeParam" }, outputs: { onClose: "onClose" }, decls: 7, vars: 0, consts: [["tabIndex", "0", "magicFocus", "", 1, "overlay-container-wrapper-background", 2, "width", "0px", "height", "0px"], [1, "overlay-container-wrapper-background"], ["overlayContainerWrapper", ""], ["magicViewContainerRef", ""], ["overlayContent", ""], ["tabIndex", "0", 1, "overlay-container-wrapper-background", 2, "width", "0px", "height", "0px"]], template: function MagicOverlayContainerWrapper_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
i0.ɵɵelementStart(0, "div");
|
|
90
|
+
i0.ɵɵelement(1, "div", 0);
|
|
91
|
+
i0.ɵɵelementStart(2, "div", 1, 2);
|
|
92
|
+
i0.ɵɵelement(4, "div", 3, 4);
|
|
93
|
+
i0.ɵɵelementEnd();
|
|
94
|
+
i0.ɵɵelement(6, "div", 5);
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
} }, directives: [i3.MagicFocusDirective, i4.MagicViewContainerRef], styles: [".overlay-container-wrapper-background[_ngcontent-%COMP%]{position:fixed;top:0;z-index:999;right:0;bottom:0;left:0}"] });
|
|
97
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicOverlayContainerWrapper, [{
|
|
98
|
+
type: Component,
|
|
99
|
+
args: [{
|
|
100
|
+
selector: 'app-magic-overlay-container-wrapper',
|
|
101
|
+
template: `
|
|
102
|
+
<div>
|
|
103
|
+
<div class="overlay-container-wrapper-background" tabIndex="0" style="width: 0px; height: 0px;" magicFocus></div>
|
|
104
|
+
<div class="overlay-container-wrapper-background" #overlayContainerWrapper>
|
|
105
|
+
<div #overlayContent magicViewContainerRef>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
<div class="overlay-container-wrapper-background" tabIndex="0" style="width: 0px; height: 0px;" ></div>
|
|
109
|
+
</div>
|
|
110
|
+
`,
|
|
111
|
+
styles: [`
|
|
112
|
+
.overlay-container-wrapper-background {
|
|
113
|
+
/* modal background fixed across whole screen */
|
|
114
|
+
position: fixed;
|
|
115
|
+
top: 0;
|
|
116
|
+
z-index: 999;
|
|
117
|
+
right: 0;
|
|
118
|
+
bottom: 0;
|
|
119
|
+
left: 0;
|
|
120
|
+
}
|
|
121
|
+
`]
|
|
122
|
+
}]
|
|
123
|
+
}], function () { return [{ type: i1.ComponentListMagicService }, { type: i2.MagicLazyLoaderService }, { type: i0.Injector }, { type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i0.Compiler }]; }, { Component: [{
|
|
124
|
+
type: Input
|
|
125
|
+
}], Parameters: [{
|
|
126
|
+
type: Input
|
|
127
|
+
}], OverlayTypeParam: [{
|
|
128
|
+
type: Input
|
|
129
|
+
}], onClose: [{
|
|
130
|
+
type: Output
|
|
131
|
+
}], overlayContainerWrapperElementRef: [{
|
|
132
|
+
type: ViewChild,
|
|
133
|
+
args: ['overlayContainerWrapper', { static: true }]
|
|
134
|
+
}] }); })();
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMtb3ZlcmxheS1jb250YWluZXItd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3VpL21hZ2ljLW1vZGFsL21hZ2ljLW92ZXJsYXktY29udGFpbmVyLXdyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUN0QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFjLE1BQU0sNkNBQTZDLENBQUM7QUFFcEcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7QUEyQmxGLE1BQU0sT0FBTyw0QkFBNEI7SUFrQ3ZDLFlBQW9CLHlCQUFvRCxFQUNwRCxxQkFBNkMsRUFDN0MsUUFBa0IsRUFDNUIsd0JBQWtELEVBQ3hDLGlCQUFtQyxFQUNuQyxRQUFrQjtRQUxsQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBd0I7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUM1Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ3hDLHNCQUFpQixH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TUFBTTtZQU9pRCxpQ0FBaUM7a0JBQXhGLFNBQVM7bUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZiwgTmdNb2R1bGVSZWYsXHJcbiAgSW5qZWN0b3IsIENoYW5nZURldGVjdG9yUmVmLCBDb21waWxlclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXNlTWFnaWNPdmVybGF5Q29udGFpbmVyIH0gZnJvbSBcIi4vYmFzZS1tYWdpYy1vdmVybGF5LWNvbnRhaW5lclwiO1xyXG5pbXBvcnQgeyBCYXNlTWFnaWNDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvYmFzZS1tYWdpYy1jb25maXJtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBCYXNlTWFnaWNBbGVydENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL2Jhc2UtbWFnaWMtYWxlcnQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE92ZXJsYXlUeXBlIH0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudExpc3RNYWdpY1NlcnZpY2UsIE1vZHVsZURhdGEgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY29tcG9uZW50LWxpc3QubWFnaWMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJTWFnaWNWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIi4uLy4uLy4uXCI7XHJcbmltcG9ydCB7aXNOdWxsT3JVbmRlZmluZWR9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgTWFnaWNMYXp5TG9hZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hZ2ljLmxhenkubG9hZGVyLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLW1hZ2ljLW92ZXJsYXktY29udGFpbmVyLXdyYXBwZXInLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1jb250YWluZXItd3JhcHBlci1iYWNrZ3JvdW5kXCIgdGFiSW5kZXg9XCIwXCIgc3R5bGU9XCJ3aWR0aDogMHB4OyBoZWlnaHQ6IDBweDtcIiBtYWdpY0ZvY3VzPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1jb250YWluZXItd3JhcHBlci1iYWNrZ3JvdW5kXCIgI292ZXJsYXlDb250YWluZXJXcmFwcGVyPlxyXG4gICAgICAgIDxkaXYgI292ZXJsYXlDb250ZW50IG1hZ2ljVmlld0NvbnRhaW5lclJlZj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LWNvbnRhaW5lci13cmFwcGVyLWJhY2tncm91bmRcIiB0YWJJbmRleD1cIjBcIiBzdHlsZT1cIndpZHRoOiAwcHg7IGhlaWdodDogMHB4O1wiID48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgLm92ZXJsYXktY29udGFpbmVyLXdyYXBwZXItYmFja2dyb3VuZCB7XHJcbiAgICAgIC8qIG1vZGFsIGJhY2tncm91bmQgZml4ZWQgYWNyb3NzIHdob2xlIHNjcmVlbiAqL1xyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgei1pbmRleDogOTk5O1xyXG4gICAgICByaWdodDogMDtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYWdpY092ZXJsYXlDb250YWluZXJXcmFwcGVyICBpbXBsZW1lbnRzIElNYWdpY1ZpZXdDb250YWluZXJSZWYge1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIENvbXBvbmVudCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgUGFyYW1ldGVyczogYW55ID0ge307XHJcblxyXG4gIEBJbnB1dCgpIHByaXZhdGUgT3ZlcmxheVR5cGVQYXJhbTogT3ZlcmxheVR5cGU7XHJcblxyXG4gIEBPdXRwdXQoKSBwcml2YXRlIG9uQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhUTUwgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBtb2RhbCB3aW5kb3dcclxuICAgKi9cclxuICBvdmVybGF5Q29udGVudFZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ292ZXJsYXlDb250YWluZXJXcmFwcGVyJywgeyBzdGF0aWM6IHRydWUgfSkgb3ZlcmxheUNvbnRhaW5lcldyYXBwZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICogY29udGFpcyBkYXRhIG9mIGFsbG93ZWQgYmFzZSBjb21wb25lbnRzIHRvIHVzZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBhbGxvd2VkQmFzZUNvbXBzID0gbmV3IE1hcDxudW1iZXIsIHtjb21wOiBhbnksIGVycm9yOiBzdHJpbmd9PihbXHJcbiAgICBbT3ZlcmxheVR5cGUuT3ZlcmxheSwge2NvbXA6IEJhc2VNYWdpY092ZXJsYXlDb250YWluZXIsIGVycm9yOidCYXNlTWFnaWNPdmVybGF5Q29udGFpbmVyIC4gT3ZlcmxheSAnfV0sXHJcbiAgICBbT3ZlcmxheVR5cGUuQWxlcnQsIHtjb21wOiBCYXNlTWFnaWNBbGVydENvbXBvbmVudCwgZXJyb3I6J0Jhc2VNYWdpY0FsZXJ0Q29tcG9uZW50LiBBbGVydCAnfV0sXHJcbiAgICBbT3ZlcmxheVR5cGUuQ29uZmlybWF0aW9uQm94LCAge2NvbXA6IEJhc2VNYWdpY0NvbmZpcm1Db21wb25lbnQsIGVycm9yIDonQmFzZU1hZ2ljQ29uZmlybUNvbXBvbmVudC4gQ29uZmlybWF0aW9uICd9XVxyXG4gIF0pO1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50TGlzdE1hZ2ljU2VydmljZTogQ29tcG9uZW50TGlzdE1hZ2ljU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG1hZ2ljTGF6eU1vZHVsZUxvYWRlcjogTWFnaWNMYXp5TG9hZGVyU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjpDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIGNvbXBpbGVyOiBDb21waWxlcikge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGxldCBtb2R1bGVSZWY6IE5nTW9kdWxlUmVmPGFueT4gPSB0aGlzLmNvbXBvbmVudExpc3RNYWdpY1NlcnZpY2UuZ2V0TW9kdWxlUmVmKHRoaXMuUGFyYW1ldGVycy5NYWdpY0Zvcm1OYW1lKTtcclxuXHJcbiAgICBpZiAobW9kdWxlUmVmID09IG51bGwpIHtcclxuICAgICAgbGV0IGxhenlMb2FkTW9kdWxlOiBNb2R1bGVEYXRhID0gdGhpcy5jb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLmdldExhenlMb2FkTW9kdWxlRGF0YSh0aGlzLlBhcmFtZXRlcnMuTWFnaWNGb3JtTmFtZSk7XHJcblxyXG4gICAgICBpZiAobGF6eUxvYWRNb2R1bGUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBtb2R1bGVOYW1lID0gbGF6eUxvYWRNb2R1bGUubW9kdWxlTmFtZS5yZXBsYWNlKFwiTWFnaWNcIiwgXCJcIik7XHJcbiAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZShcIk1vZHVsZVwiLCBcIlwiKTtcclxuICAgICAgICB0aGlzLm1hZ2ljTGF6eU1vZHVsZUxvYWRlci5Mb2FkKG1vZHVsZU5hbWUpLnRoZW4obSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb21waWxlZCA9IHRoaXMuY29tcGlsZXIuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNTeW5jKDxhbnk+bVtsYXp5TG9hZE1vZHVsZS5tb2R1bGVOYW1lXSk7XHJcbiAgICAgICAgICBtb2R1bGVSZWYgPSBjb21waWxlZC5uZ01vZHVsZUZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KG1vZHVsZVJlZik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2VcclxuICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KG1vZHVsZVJlZik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRDb21wb25lbnQobW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLlBhcmFtZXRlcnMuTW9kYWxDb21wID0gdGhpcy5jb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLmdldENvbXBvbmVudCh0aGlzLlBhcmFtZXRlcnMuTWFnaWNGb3JtTmFtZSwgIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuUGFyYW1ldGVycy5NYWdpY0Zvcm1OYW1lKSk7XHJcblxyXG4gICAgbGV0IGZhY3Rvcnk7XHJcbiAgICBpZiAobW9kdWxlUmVmICE9IG51bGwpXHJcbiAgICAgIGZhY3RvcnkgPSBtb2R1bGVSZWYuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuQ29tcG9uZW50KTtcclxuICAgIGVsc2VcclxuICAgICAgZmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuQ29tcG9uZW50KTtcclxuXHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gdGhpcy5vdmVybGF5Q29udGVudFZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xyXG4gICAgbGV0IGFsbG93ZWRCYXNlQ29tcCA9IE1hZ2ljT3ZlcmxheUNvbnRhaW5lcldyYXBwZXIuYWxsb3dlZEJhc2VDb21wcy5nZXQodGhpcy5PdmVybGF5VHlwZVBhcmFtKTtcclxuXHJcblxyXG4gICAgaWYgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBpbnN0YW5jZW9mIGFsbG93ZWRCYXNlQ29tcC5jb21wKSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlLCB0aGlzLlBhcmFtZXRlcnMpO1xyXG4gICAgICAoPGFueT5jb21wb25lbnRSZWYuaW5zdGFuY2UpLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdChyZXMpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBtc2cgPSBcIlByb3ZpZGVkICB3aW5kb3cgY29udGFpbmVyIHNob3VsZCBzdWJjbGFzcyBvZiA6IFwiICsgYWxsb3dlZEJhc2VDb21wLmVycm9yICsgXCJ3aW5kb3cgd2lsbCBub3Qgd29yayBwcm9wZXJseS5cIjtcclxuICAgICAgYWxlcnQobXNnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFZpZXdDb250YWluZXJSZWYodmNSZWY6IFZpZXdDb250YWluZXJSZWYpe1xyXG4gICAgdGhpcy5vdmVybGF5Q29udGVudFZpZXdDb250YWluZXJSZWYgPSB2Y1JlZjtcclxuICB9XHJcblxyXG4gIEdldFJvb3RFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcclxuICAgIHJldHVybiB0aGlzLm92ZXJsYXlDb250YWluZXJXcmFwcGVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgRGV0ZWN0Q2hhbmdlcygpXHJcbiAge1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Component, ComponentFactoryResolver, ElementRef, EventEmitter, Injector, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { isNullOrUndefined } from '@magic-xpa/mscorelib';
|
|
3
|
+
import { BaseMagicOverlayContainer } from './base-magic-overlay-container';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "../directives/magicViewContainerRef.directive";
|
|
7
|
+
const _c0 = ["modalheader"];
|
|
8
|
+
const _c1 = ["modalForeground"];
|
|
9
|
+
function MagicOverlayContainer_button_2_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
11
|
+
i0.ɵɵelementStart(0, "button", 8);
|
|
12
|
+
i0.ɵɵlistener("click", function MagicOverlayContainer_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.OnClose(); });
|
|
13
|
+
i0.ɵɵtext(1, "X");
|
|
14
|
+
i0.ɵɵelementEnd();
|
|
15
|
+
} }
|
|
16
|
+
function MagicOverlayContainer_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
18
|
+
i0.ɵɵelementStart(0, "div", 9, 10);
|
|
19
|
+
i0.ɵɵtext(2);
|
|
20
|
+
i0.ɵɵelementStart(3, "button", 11);
|
|
21
|
+
i0.ɵɵlistener("click", function MagicOverlayContainer_div_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.OnClose(); });
|
|
22
|
+
i0.ɵɵtext(4, "X");
|
|
23
|
+
i0.ɵɵelementEnd();
|
|
24
|
+
i0.ɵɵelementEnd();
|
|
25
|
+
} if (rf & 2) {
|
|
26
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
27
|
+
i0.ɵɵadvance(2);
|
|
28
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r2.getText(), " ");
|
|
29
|
+
} }
|
|
30
|
+
export class MagicOverlayContainer extends BaseMagicOverlayContainer {
|
|
31
|
+
constructor(injector, componentFactoryResolver) {
|
|
32
|
+
super();
|
|
33
|
+
this.injector = injector;
|
|
34
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
35
|
+
this.ModalComp = null;
|
|
36
|
+
this.ModalCompParameters = {};
|
|
37
|
+
this.onClose = new EventEmitter();
|
|
38
|
+
this.componentRef = null;
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
const factory = this.componentFactoryResolver.resolveComponentFactory(this.ModalComp);
|
|
42
|
+
this.componentRef = this.modalbodyViewContainerRef.createComponent(factory);
|
|
43
|
+
Object.assign(this.componentRef.instance, this.ModalCompParameters);
|
|
44
|
+
}
|
|
45
|
+
setViewContainerRef(vcRef) {
|
|
46
|
+
this.modalbodyViewContainerRef = vcRef;
|
|
47
|
+
}
|
|
48
|
+
getText() {
|
|
49
|
+
if (this.componentRef !== null) {
|
|
50
|
+
let comp = this.componentRef.instance;
|
|
51
|
+
return comp.FormName();
|
|
52
|
+
}
|
|
53
|
+
else
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
getStyle() {
|
|
57
|
+
let styles = {};
|
|
58
|
+
if (this.componentRef != undefined) {
|
|
59
|
+
let comp = this.componentRef.instance;
|
|
60
|
+
styles['width'] = comp.Width();
|
|
61
|
+
styles['height'] = comp.Height();
|
|
62
|
+
if (comp.IsCenteredToWindow()) {
|
|
63
|
+
styles['margin'] = "auto";
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
styles['margin-left'] = comp.X() + "px";
|
|
67
|
+
styles['margin-top'] = comp.Y() + "px";
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return styles;
|
|
71
|
+
}
|
|
72
|
+
getClientAreaStyles() {
|
|
73
|
+
let styles = {};
|
|
74
|
+
if (this.componentRef != undefined) {
|
|
75
|
+
let comp = this.componentRef.instance;
|
|
76
|
+
const headerHeight = this.getShowTitleBar() && !isNullOrUndefined(this.headerElementRef) ? (this.headerElementRef.nativeElement.offsetHeight + 1) : 0;
|
|
77
|
+
if (!isNullOrUndefined(this.foregroundElementRef)) {
|
|
78
|
+
const foregroundHeight = this.foregroundElementRef.nativeElement.offsetHeight;
|
|
79
|
+
styles['height'] = (foregroundHeight - headerHeight) + "px";
|
|
80
|
+
const foregroundWidth = this.foregroundElementRef.nativeElement.offsetWidth;
|
|
81
|
+
styles['width'] = (foregroundWidth) + "px";
|
|
82
|
+
}
|
|
83
|
+
styles['overflow'] = "auto";
|
|
84
|
+
}
|
|
85
|
+
return styles;
|
|
86
|
+
}
|
|
87
|
+
getShowTitleBar() {
|
|
88
|
+
if (this.componentRef != undefined) {
|
|
89
|
+
let comp = this.componentRef.instance;
|
|
90
|
+
return comp.ShowTitleBar();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
OnClose() {
|
|
94
|
+
this.onClose.emit();
|
|
95
|
+
}
|
|
96
|
+
OnBackgroundClick() {
|
|
97
|
+
let comp = this.componentRef.instance;
|
|
98
|
+
if (comp.ShouldCloseOnBackgroundClick())
|
|
99
|
+
this.OnClose();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
MagicOverlayContainer.ɵfac = function MagicOverlayContainer_Factory(t) { return new (t || MagicOverlayContainer)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver)); };
|
|
103
|
+
MagicOverlayContainer.ɵcmp = i0.ɵɵdefineComponent({ type: MagicOverlayContainer, selectors: [["app-magic-overlay-container"]], viewQuery: function MagicOverlayContainer_Query(rf, ctx) { if (rf & 1) {
|
|
104
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
105
|
+
i0.ɵɵviewQuery(_c1, 5);
|
|
106
|
+
} if (rf & 2) {
|
|
107
|
+
let _t;
|
|
108
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerElementRef = _t.first);
|
|
109
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.foregroundElementRef = _t.first);
|
|
110
|
+
} }, inputs: { ModalComp: "ModalComp", ModalCompParameters: "ModalCompParameters" }, outputs: { onClose: "onClose" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 9, vars: 4, consts: [[1, "modal-background", 3, "click"], ["tabindex", "-1", "style", "float:right; border: none; background-color: transparent; outline: none; color: white", 3, "click", 4, "ngIf"], [1, "modal-foreground", 3, "ngStyle"], ["modalForeground", ""], ["class", "modal-header", 4, "ngIf"], [3, "ngStyle"], ["magicViewContainerRef", ""], ["modalbody", ""], ["tabindex", "-1", 2, "float", "right", "border", "none", "background-color", "transparent", "outline", "none", "color", "white", 3, "click"], [1, "modal-header"], ["modalheader", ""], ["tabindex", "-1", 2, "float", "right", 3, "click"]], template: function MagicOverlayContainer_Template(rf, ctx) { if (rf & 1) {
|
|
111
|
+
i0.ɵɵelementStart(0, "div");
|
|
112
|
+
i0.ɵɵelementStart(1, "div", 0);
|
|
113
|
+
i0.ɵɵlistener("click", function MagicOverlayContainer_Template_div_click_1_listener() { return ctx.OnBackgroundClick(); });
|
|
114
|
+
i0.ɵɵtemplate(2, MagicOverlayContainer_button_2_Template, 2, 0, "button", 1);
|
|
115
|
+
i0.ɵɵelementEnd();
|
|
116
|
+
i0.ɵɵelementStart(3, "div", 2, 3);
|
|
117
|
+
i0.ɵɵtemplate(5, MagicOverlayContainer_div_5_Template, 5, 1, "div", 4);
|
|
118
|
+
i0.ɵɵelementStart(6, "div", 5);
|
|
119
|
+
i0.ɵɵelement(7, "div", 6, 7);
|
|
120
|
+
i0.ɵɵelementEnd();
|
|
121
|
+
i0.ɵɵelementEnd();
|
|
122
|
+
i0.ɵɵelementEnd();
|
|
123
|
+
} if (rf & 2) {
|
|
124
|
+
i0.ɵɵadvance(2);
|
|
125
|
+
i0.ɵɵproperty("ngIf", !ctx.getShowTitleBar());
|
|
126
|
+
i0.ɵɵadvance(1);
|
|
127
|
+
i0.ɵɵproperty("ngStyle", ctx.getStyle());
|
|
128
|
+
i0.ɵɵadvance(2);
|
|
129
|
+
i0.ɵɵproperty("ngIf", ctx.getShowTitleBar());
|
|
130
|
+
i0.ɵɵadvance(1);
|
|
131
|
+
i0.ɵɵproperty("ngStyle", ctx.getClientAreaStyles());
|
|
132
|
+
} }, directives: [i1.NgIf, i1.NgStyle, i2.MagicViewContainerRef], styles: [".modal-foreground[_ngcontent-%COMP%]{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#fff}.modal-background[_ngcontent-%COMP%]{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000;opacity:.75}.modal-header[_ngcontent-%COMP%]{background-color:beige;border-bottom:2px solid red}"] });
|
|
133
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicOverlayContainer, [{
|
|
134
|
+
type: Component,
|
|
135
|
+
args: [{ selector: 'app-magic-overlay-container', template: `
|
|
136
|
+
<div>
|
|
137
|
+
<div class="modal-background" (click)="OnBackgroundClick()">
|
|
138
|
+
<button (click)="OnClose()" tabindex="-1" style="float:right; border: none; background-color: transparent; outline: none; color: white" *ngIf="!getShowTitleBar()">X</button>
|
|
139
|
+
</div>
|
|
140
|
+
<div #modalForeground class="modal-foreground" [ngStyle]="getStyle()">
|
|
141
|
+
<div #modalheader class="modal-header" *ngIf="getShowTitleBar()">
|
|
142
|
+
{{getText()}}
|
|
143
|
+
<button (click)="OnClose()" style="float:right" tabindex="-1">X</button>
|
|
144
|
+
</div>
|
|
145
|
+
<div [ngStyle]="getClientAreaStyles()">
|
|
146
|
+
<div #modalbody magicViewContainerRef>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
`, styles: [".modal-foreground{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#fff}.modal-background{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000;opacity:.75}.modal-header{background-color:beige;border-bottom:2px solid red}\n"] }]
|
|
152
|
+
}], function () { return [{ type: i0.Injector }, { type: i0.ComponentFactoryResolver }]; }, { headerElementRef: [{
|
|
153
|
+
type: ViewChild,
|
|
154
|
+
args: ['modalheader', { static: false }]
|
|
155
|
+
}], foregroundElementRef: [{
|
|
156
|
+
type: ViewChild,
|
|
157
|
+
args: ['modalForeground', { static: false }]
|
|
158
|
+
}], ModalComp: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], ModalCompParameters: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], onClose: [{
|
|
163
|
+
type: Output
|
|
164
|
+
}] }); })();
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMtb3ZlcmxheS1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91aS9tYWdpYy1tb2RhbC9tYWdpYy1vdmVybGF5LWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7SUFXbkUsaUNBQW1LO0lBQTNKLHFLQUFTLGdCQUFTLElBQUM7SUFBd0ksaUJBQUM7SUFBQSxpQkFBUzs7OztJQUc3SyxrQ0FBaUU7SUFDL0QsWUFDQTtJQUFBLGtDQUE4RDtJQUF0RCxrS0FBUyxnQkFBUyxJQUFDO0lBQW1DLGlCQUFDO0lBQUEsaUJBQVM7SUFDMUUsaUJBQU07OztJQUZKLGVBQ0E7SUFEQSxpREFDQTs7QUFXVixNQUFNLE9BQU8scUJBQXNCLFNBQVEseUJBQXlCO0lBb0NsRSxZQUNVLFFBQWtCLEVBQ2xCLHdCQUFrRDtRQUMxRCxLQUFLLEVBQUUsQ0FBQztRQUZBLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQXBCbkQsY0FBUyxHQUFHLElBQUksQ0FBQztRQUlqQix3QkFBbUIsR0FBUSxFQUFFLENBQUM7UUFFN0IsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLckMsaUJBQVksR0FBRyxJQUFJLENBQUM7SUFXNUIsQ0FBQztJQUtELFFBQVE7UUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMs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TyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBS0QsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUtELGlCQUFpQjtRQUNmLElBQUksSUFBSSxHQUF3QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQStCLENBQUM7UUFFbEYsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDckMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7OzBGQTdJVSxxQkFBcUI7MERBQXJCLHFCQUFxQjs7Ozs7Ozs7UUFsQjlCLDJCQUFLO1FBQ0gsOEJBQTREO1FBQTlCLCtGQUFTLHVCQUFtQixJQUFDO1FBQ3pELDRFQUE2SztRQUMvSyxpQkFBTTtRQUNOLGlDQUFzRTtRQUNwRSxzRUFHTTtRQUNOLDhCQUF1QztRQUNyQyw0QkFDTTtRQUNSLGlCQUFNO1FBQ1IsaUJBQU07UUFDUixpQkFBTTs7UUFadUksZUFBd0I7UUFBeEIsNkNBQXdCO1FBRXBILGVBQXNCO1FBQXRCLHdDQUFzQjtRQUMzQixlQUF1QjtRQUF2Qiw0Q0FBdUI7UUFJMUQsZUFBaUM7UUFBakMsbURBQWlDOzt1RkFTakMscUJBQXFCO2NBckJqQyxTQUFTOzJCQUNFLDZCQUE2QixZQUM3Qjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCVDtrR0FZNEMsZ0JBQWdCO2tCQUE1RCxTQUFTO21CQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFJTSxvQkFBb0I7a0JBQXBFLFNBQVM7bUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBS3RDLFNBQVM7a0JBQWpCLEtBQUs7WUFJRyxtQkFBbUI7a0JBQTNCLEtBQUs7WUFFSSxPQUFPO2tCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWFnaWNNb2RhbEludGVyZmFjZSB9IGZyb20gJy4vbWFnaWMtbW9kYWwtaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IEJhc2VNYWdpY092ZXJsYXlDb250YWluZXIgfSBmcm9tICcuL2Jhc2UtbWFnaWMtb3ZlcmxheS1jb250YWluZXInO1xyXG5pbXBvcnQgeyBJTWFnaWNWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnLi4vLi4vLi4nO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtb2RhbCB3aW5kb3cgZm9yIE1hZ2ljIG1vZGFsIHdpbmRvdyBjb21wb25lbnRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1tYWdpYy1vdmVybGF5LWNvbnRhaW5lcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1iYWNrZ3JvdW5kXCIgKGNsaWNrKT1cIk9uQmFja2dyb3VuZENsaWNrKClcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJPbkNsb3NlKClcIiB0YWJpbmRleD1cIi0xXCIgc3R5bGU9XCJmbG9hdDpyaWdodDsgYm9yZGVyOiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgb3V0bGluZTogbm9uZTsgY29sb3I6IHdoaXRlXCIgKm5nSWY9XCIhZ2V0U2hvd1RpdGxlQmFyKClcIj5YPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICNtb2RhbEZvcmVncm91bmQgY2xhc3M9XCJtb2RhbC1mb3JlZ3JvdW5kXCIgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiPlxyXG4gICAgICAgIDxkaXYgI21vZGFsaGVhZGVyIGNsYXNzPVwibW9kYWwtaGVhZGVyXCIgKm5nSWY9XCJnZXRTaG93VGl0bGVCYXIoKVwiPlxyXG4gICAgICAgICAge3tnZXRUZXh0KCl9fVxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiT25DbG9zZSgpXCIgc3R5bGU9XCJmbG9hdDpyaWdodFwiIHRhYmluZGV4PVwiLTFcIj5YPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJnZXRDbGllbnRBcmVhU3R5bGVzKClcIj5cclxuICAgICAgICAgIDxkaXYgI21vZGFsYm9keSBtYWdpY1ZpZXdDb250YWluZXJSZWY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogWycuL21hZ2ljLW92ZXJsYXktY29udGFpbmVyLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYWdpY092ZXJsYXlDb250YWluZXIgZXh0ZW5kcyBCYXNlTWFnaWNPdmVybGF5Q29udGFpbmVyIGltcGxlbWVudHMgT25Jbml0ICwgSU1hZ2ljVmlld0NvbnRhaW5lclJlZntcclxuICAvKipcclxuICAgKiBIVE1MIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbW9kYWwgd2luZG93XHJcbiAgICovXHJcbiAgbW9kYWxib2R5Vmlld0NvbnRhaW5lclJlZiA6IFZpZXdDb250YWluZXJSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhlYWRlciBvZiB0aGUgbW9kYWwgd2luZG93XHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnbW9kYWxoZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgaGVhZGVyRWxlbWVudFJlZjogRWxlbWVudFJlZjtcclxuICAvKipcclxuICAgKiBGb3JlZ3JvdW5kIG9mIHRoZSBtb2RhbCB3aW5kb3dcclxuICAgKi9cclxuICBAVmlld0NoaWxkKCdtb2RhbEZvcmVncm91bmQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZm9yZWdyb3VuZEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICovXHJcbiAgQElucHV0KCkgTW9kYWxDb21wID0gbnVsbDtcclxuICAvKipcclxuICAgKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIE1vZGFsQ29tcFBhcmFtZXRlcnM6IGFueSA9IHt9O1xyXG5cclxuICBAT3V0cHV0KCkgb25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICBwcml2YXRlIGNvbXBvbmVudFJlZiA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGluamVjdG9yXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLk1vZGFsQ29tcCk7XHJcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMubW9kYWxib2R5Vmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLCB0aGlzLk1vZGFsQ29tcFBhcmFtZXRlcnMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHNldFZpZXdDb250YWluZXJSZWYodmNSZWY6IFZpZXdDb250YWluZXJSZWYpe1xyXG4gICAgdGhpcy5tb2RhbGJvZHlWaWV3Q29udGFpbmVyUmVmID0gdmNSZWY7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZm9ybSBuYW1lXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXRUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBjb21wOiBNYWdpY01vZGFsSW50ZXJmYWNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgTWFnaWNNb2RhbEludGVyZmFjZTtcclxuICAgICAgcmV0dXJuIGNvbXAuRm9ybU5hbWUoKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIENTUyBzdHlsZXMgZm9yIHRoZSB3aW5kb3dcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldFN0eWxlKCkge1xyXG4gICAgbGV0IHN0eWxlcyA9IHt9O1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgY29tcDogTWFnaWNNb2RhbEludGVyZmFjZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIE1hZ2ljTW9kYWxJbnRlcmZhY2U7XHJcblxyXG4gICAgICBzdHlsZXNbJ3dpZHRoJ10gPSBjb21wLldpZHRoKCk7XHJcbiAgICAgIHN0eWxlc1snaGVpZ2h0J10gPSBjb21wLkhlaWdodCgpO1xyXG5cclxuICAgICAgaWYgKGNvbXAuSXNDZW50ZXJlZFRvV2luZG93KCkpIHtcclxuICAgICAgICBzdHlsZXNbJ21hcmdpbiddID0gXCJhdXRvXCI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3R5bGVzWydtYXJnaW4tbGVmdCddID0gY29tcC5YKCkgKyBcInB4XCI7XHJcbiAgICAgICAgc3R5bGVzWydtYXJnaW4tdG9wJ10gPSBjb21wLlkoKSArIFwicHhcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIENTUyBzdHlsZXMgZm9yIHRoZSBjbGllbnQgYXJlYVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0Q2xpZW50QXJlYVN0eWxlcygpIHtcclxuICAgIGxldCBzdHlsZXMgPSB7fTtcclxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IGNvbXA6IE1hZ2ljTW9kYWxJbnRlcmZhY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBNYWdpY01vZGFsSW50ZXJmYWNlO1xyXG5cclxuICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGhpcy5nZXRTaG93VGl0bGVCYXIoKSAmJiAhaXNOdWxsT3JVbmRlZmluZWQodGhpcy5oZWFkZXJFbGVtZW50UmVmKSA/ICh0aGlzLmhlYWRlckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAxKSA6IDA7XHJcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodGhpcy5mb3JlZ3JvdW5kRWxlbWVudFJlZikpIHtcclxuICAgICAgICBjb25zdCBmb3JlZ3JvdW5kSGVpZ2h0ID0gdGhpcy5mb3JlZ3JvdW5kRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBzdHlsZXNbJ2hlaWdodCddID0gKGZvcmVncm91bmRIZWlnaHQgLSBoZWFkZXJIZWlnaHQpICsgXCJweFwiO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JlZ3JvdW5kV2lkdGggPSB0aGlzLmZvcmVncm91bmRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgc3R5bGVzWyd3aWR0aCddID0gKGZvcmVncm91bmRXaWR0aCkgKyBcInB4XCI7XHJcbiAgICAgIH1cclxuICAgICAgc3R5bGVzWydvdmVyZmxvdyddID0gXCJhdXRvXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdWxkIHRoZSB0aXRsZSBiYXIgYmUgZGlzcGxheWVkXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXRTaG93VGl0bGVCYXIoKSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBjb21wOiBNYWdpY01vZGFsSW50ZXJmYWNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgTWFnaWNNb2RhbEludGVyZmFjZTtcclxuICAgICAgcmV0dXJuIGNvbXAuU2hvd1RpdGxlQmFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqL1xyXG4gIE9uQ2xvc2UoKSB7XHJcbiAgICB0aGlzLm9uQ2xvc2UuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBjbGljayBpbiB0aGUgYmFja2dyb3VuZCB3aW5kb3dcclxuICAgKi9cclxuICBPbkJhY2tncm91bmRDbGljaygpIHtcclxuICAgIGxldCBjb21wOiBNYWdpY01vZGFsSW50ZXJmYWNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgTWFnaWNNb2RhbEludGVyZmFjZTtcclxuXHJcbiAgICBpZiAoY29tcC5TaG91bGRDbG9zZU9uQmFja2dyb3VuZENsaWNrKCkpXHJcbiAgICAgIHRoaXMuT25DbG9zZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Component, ElementRef, HostListener, Input, Optional, TemplateRef, ViewChild } from '@angular/core';
|
|
2
|
+
import { CommandType } from '@magic-xpa/gui';
|
|
3
|
+
import { Title } from '@angular/platform-browser';
|
|
4
|
+
import { EngineMagicService } from '../services/engine.magic.service';
|
|
5
|
+
import { ComponentListMagicService } from '../services/component-list.magic.service';
|
|
6
|
+
import { GuiInteractiveExecutor } from './GuiInteractiveExecutor';
|
|
7
|
+
import { filter } from 'rxjs/operators';
|
|
8
|
+
import { ExitMagicService } from '../services/exit.magic.service';
|
|
9
|
+
import { OverlayWindowService } from '../services/OverlayWindowService';
|
|
10
|
+
import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
|
|
11
|
+
import { HttpClient } from '@angular/common/http';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "../services/engine.magic.service";
|
|
14
|
+
import * as i2 from "../services/component-list.magic.service";
|
|
15
|
+
import * as i3 from "@angular/platform-browser";
|
|
16
|
+
import * as i4 from "../services/OverlayWindowService";
|
|
17
|
+
import * as i5 from "@angular/common/http";
|
|
18
|
+
import * as i6 from "../services/commands-collector.magic.service";
|
|
19
|
+
import * as i7 from "../services/exit.magic.service";
|
|
20
|
+
import * as i8 from "@angular/common";
|
|
21
|
+
import * as i9 from "ng-dynamic-component";
|
|
22
|
+
import * as i10 from "./directives/magicViewContainerRef.directive";
|
|
23
|
+
const _c0 = ["magicRoot"];
|
|
24
|
+
function MagicShellComponent_ndc_dynamic_2_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelement(0, "ndc-dynamic", 6);
|
|
26
|
+
} if (rf & 2) {
|
|
27
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
28
|
+
i0.ɵɵproperty("ndcDynamicComponent", ctx_r1.RootComponent)("ndcDynamicInputs", ctx_r1.RootComponentParameters);
|
|
29
|
+
} }
|
|
30
|
+
function MagicShellComponent_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelementStart(0, "div", 7);
|
|
32
|
+
i0.ɵɵelementContainer(1, 8);
|
|
33
|
+
i0.ɵɵelementEnd();
|
|
34
|
+
} if (rf & 2) {
|
|
35
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
36
|
+
const _r4 = i0.ɵɵreference(7);
|
|
37
|
+
i0.ɵɵadvance(1);
|
|
38
|
+
i0.ɵɵproperty("ngTemplateOutlet", ctx_r3.SpinnerTemplate ? ctx_r3.SpinnerTemplate : _r4);
|
|
39
|
+
} }
|
|
40
|
+
function MagicShellComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
i0.ɵɵelement(0, "div", 9);
|
|
42
|
+
} }
|
|
43
|
+
export class MagicShellComponent {
|
|
44
|
+
constructor(engineMagicService, componentList, changeDetectorRef, titleService, overlayWindowService, httpClient, pendingCommandsCollector, exitMagicService) {
|
|
45
|
+
this.engineMagicService = engineMagicService;
|
|
46
|
+
this.componentList = componentList;
|
|
47
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
48
|
+
this.titleService = titleService;
|
|
49
|
+
this.overlayWindowService = overlayWindowService;
|
|
50
|
+
this.httpClient = httpClient;
|
|
51
|
+
this.pendingCommandsCollector = pendingCommandsCollector;
|
|
52
|
+
this.exitMagicService = exitMagicService;
|
|
53
|
+
this.RootComponent = null;
|
|
54
|
+
this.magicEngineTerminated = false;
|
|
55
|
+
this.initialize();
|
|
56
|
+
this.setTitle();
|
|
57
|
+
}
|
|
58
|
+
onBeforeUnload(event) {
|
|
59
|
+
if (this.engineMagicService.TransCacheExists()) {
|
|
60
|
+
event.returnValue = 'Are you sure?';
|
|
61
|
+
return 'Are you sure?';
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
this.engineMagicService.TerminateContextUsingFetchAPI();
|
|
65
|
+
this.magicEngineTerminated = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
onUnload(event) {
|
|
69
|
+
if (!this.magicEngineTerminated)
|
|
70
|
+
this.engineMagicService.TerminateContextUsingFetchAPI();
|
|
71
|
+
}
|
|
72
|
+
ngAfterViewInit() {
|
|
73
|
+
this.overlayWindowService.init(this.overlayWindowsContainerViewRef, this.rootMagicElementRef.nativeElement);
|
|
74
|
+
this.engineMagicService.startMagicEngine(this.httpClient);
|
|
75
|
+
}
|
|
76
|
+
setViewContainerRef(vcRef) {
|
|
77
|
+
this.overlayWindowsContainerViewRef = vcRef;
|
|
78
|
+
}
|
|
79
|
+
initialize() {
|
|
80
|
+
this.registerUICommands();
|
|
81
|
+
}
|
|
82
|
+
setTitle() {
|
|
83
|
+
const newTitle = this.componentList.title;
|
|
84
|
+
this.titleService.setTitle(newTitle);
|
|
85
|
+
}
|
|
86
|
+
setComponent(formName, taskId, taskDescription, isModal) {
|
|
87
|
+
this.pendingCommandsCollector.startCollecting();
|
|
88
|
+
if (isModal) {
|
|
89
|
+
this.overlayWindowService.open(formName, taskId, taskDescription);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.RootComponent = this.componentList.getComponent(formName);
|
|
93
|
+
this.RootComponentParameters = { taskIdParam: taskId, taskDescription: taskDescription };
|
|
94
|
+
}
|
|
95
|
+
this.changeDetectorRef.detectChanges();
|
|
96
|
+
}
|
|
97
|
+
registerUICommands() {
|
|
98
|
+
this.engineMagicService.refreshDom.pipe(filter(command => command.TaskTag === '0'))
|
|
99
|
+
.subscribe(command => {
|
|
100
|
+
this.executeCommand(command);
|
|
101
|
+
});
|
|
102
|
+
this.engineMagicService
|
|
103
|
+
.interactiveCommands.pipe(filter(command => command.TaskTag === '0'))
|
|
104
|
+
.subscribe(command => {
|
|
105
|
+
GuiInteractiveExecutor.executeInteractiveCommand(null, command, this.overlayWindowService);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
executeCommand(command) {
|
|
109
|
+
switch (command.CommandType) {
|
|
110
|
+
case CommandType.OPEN_FORM:
|
|
111
|
+
this.setComponent(command.str, command.stringList[0], command.stringList[1], command.Bool1);
|
|
112
|
+
break;
|
|
113
|
+
case CommandType.SET_IS_LOGGED_IN:
|
|
114
|
+
this.engineMagicService.setIsLoggedIn(command.Bool1);
|
|
115
|
+
break;
|
|
116
|
+
case CommandType.CLOSE_FORM:
|
|
117
|
+
if (this.RootComponent != null && command.str === this.RootComponentParameters.taskIdParam) {
|
|
118
|
+
this.RootComponent = null;
|
|
119
|
+
this.RootComponentParameters = {};
|
|
120
|
+
this.changeDetectorRef.detectChanges();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.overlayWindowService.close(command.str);
|
|
124
|
+
this.changeDetectorRef.detectChanges();
|
|
125
|
+
}
|
|
126
|
+
break;
|
|
127
|
+
case CommandType.RELOAD_PAGE:
|
|
128
|
+
window.location.reload();
|
|
129
|
+
break;
|
|
130
|
+
case CommandType.SHOW_SPINNER:
|
|
131
|
+
if (this.showSpinner != command.Bool1) {
|
|
132
|
+
this.showSpinner = command.Bool1;
|
|
133
|
+
this.changeDetectorRef.detectChanges();
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
case CommandType.EXIT_MAGIC:
|
|
137
|
+
if (this.exitMagicService)
|
|
138
|
+
this.exitMagicService.exitMagic();
|
|
139
|
+
break;
|
|
140
|
+
case CommandType.SHOW_HTML_ERROR:
|
|
141
|
+
window.document.write(command.str);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
MagicShellComponent.ɵfac = function MagicShellComponent_Factory(t) { return new (t || MagicShellComponent)(i0.ɵɵdirectiveInject(i1.EngineMagicService), i0.ɵɵdirectiveInject(i2.ComponentListMagicService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.Title), i0.ɵɵdirectiveInject(i4.OverlayWindowService), i0.ɵɵdirectiveInject(i5.HttpClient), i0.ɵɵdirectiveInject(i6.CommandsCollectorMagicService), i0.ɵɵdirectiveInject(i7.ExitMagicService, 8)); };
|
|
147
|
+
MagicShellComponent.ɵcmp = i0.ɵɵdefineComponent({ type: MagicShellComponent, selectors: [["magic-root"]], viewQuery: function MagicShellComponent_Query(rf, ctx) { if (rf & 1) {
|
|
148
|
+
i0.ɵɵviewQuery(_c0, 7);
|
|
149
|
+
} if (rf & 2) {
|
|
150
|
+
let _t;
|
|
151
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.rootMagicElementRef = _t.first);
|
|
152
|
+
} }, hostBindings: function MagicShellComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
153
|
+
i0.ɵɵlistener("beforeunload", function MagicShellComponent_beforeunload_HostBindingHandler($event) { return ctx.onBeforeUnload($event); }, false, i0.ɵɵresolveWindow)("unload", function MagicShellComponent_unload_HostBindingHandler($event) { return ctx.onUnload($event); }, false, i0.ɵɵresolveWindow);
|
|
154
|
+
} }, inputs: { SpinnerTemplate: "SpinnerTemplate" }, features: [i0.ɵɵProvidersFeature([])], decls: 8, vars: 2, consts: [["magicRoot", ""], [3, "ndcDynamicComponent", "ndcDynamicInputs", 4, "ngIf"], ["magicViewContainerRef", ""], ["overlayWindowsContainer", ""], ["class", "spinner-background", 4, "ngIf"], ["defaultSpinner", ""], [3, "ndcDynamicComponent", "ndcDynamicInputs"], [1, "spinner-background"], [3, "ngTemplateOutlet"], [1, "mgSpinnerClass"]], template: function MagicShellComponent_Template(rf, ctx) { if (rf & 1) {
|
|
155
|
+
i0.ɵɵelementStart(0, "div", null, 0);
|
|
156
|
+
i0.ɵɵtemplate(2, MagicShellComponent_ndc_dynamic_2_Template, 1, 2, "ndc-dynamic", 1);
|
|
157
|
+
i0.ɵɵelement(3, "div", 2, 3);
|
|
158
|
+
i0.ɵɵelementEnd();
|
|
159
|
+
i0.ɵɵtemplate(5, MagicShellComponent_div_5_Template, 2, 1, "div", 4);
|
|
160
|
+
i0.ɵɵtemplate(6, MagicShellComponent_ng_template_6_Template, 1, 0, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
|
|
161
|
+
} if (rf & 2) {
|
|
162
|
+
i0.ɵɵadvance(2);
|
|
163
|
+
i0.ɵɵproperty("ngIf", ctx.RootComponent !== null);
|
|
164
|
+
i0.ɵɵadvance(3);
|
|
165
|
+
i0.ɵɵproperty("ngIf", ctx.showSpinner);
|
|
166
|
+
} }, directives: [i8.NgIf, i9.DynamicComponent, i9.DynamicIoDirective, i10.MagicViewContainerRef, i8.NgTemplateOutlet], styles: [".mgSpinnerClass[_ngcontent-%COMP%]{border:10px solid #cccccc;border-top:10px solid black;border-radius:50%;position:fixed;margin:auto;top:0;right:0;bottom:0;left:0;width:100px;height:100px;animation:spin 2s linear infinite}.spinner-background[_ngcontent-%COMP%]{position:fixed;top:0;right:0;bottom:0;z-index:1000;left:0;opacity:.5}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"] });
|
|
167
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicShellComponent, [{
|
|
168
|
+
type: Component,
|
|
169
|
+
args: [{
|
|
170
|
+
selector: 'magic-root',
|
|
171
|
+
providers: [],
|
|
172
|
+
template: `
|
|
173
|
+
<div #magicRoot>
|
|
174
|
+
<ndc-dynamic
|
|
175
|
+
*ngIf = "RootComponent !== null"
|
|
176
|
+
[ndcDynamicComponent]="RootComponent"
|
|
177
|
+
[ndcDynamicInputs] ="RootComponentParameters">
|
|
178
|
+
</ndc-dynamic>
|
|
179
|
+
|
|
180
|
+
<div #overlayWindowsContainer magicViewContainerRef>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<div class="spinner-background" *ngIf="showSpinner">
|
|
185
|
+
<ng-container [ngTemplateOutlet]="SpinnerTemplate ? SpinnerTemplate:defaultSpinner"></ng-container>
|
|
186
|
+
</div>
|
|
187
|
+
|
|
188
|
+
<ng-template #defaultSpinner>
|
|
189
|
+
<div class="mgSpinnerClass"></div>
|
|
190
|
+
</ng-template>
|
|
191
|
+
`,
|
|
192
|
+
styles: [`
|
|
193
|
+
.mgSpinnerClass {
|
|
194
|
+
border: 10px solid #cccccc; /* Light grey */
|
|
195
|
+
border-top: 10px solid black; /* Blue */
|
|
196
|
+
border-radius: 50%;
|
|
197
|
+
position: fixed;
|
|
198
|
+
margin: auto;
|
|
199
|
+
top: 0;
|
|
200
|
+
right: 0;
|
|
201
|
+
bottom: 0;
|
|
202
|
+
left: 0;
|
|
203
|
+
width: 100px;
|
|
204
|
+
height: 100px;
|
|
205
|
+
animation: spin 2s linear infinite;
|
|
206
|
+
}
|
|
207
|
+
.spinner-background {
|
|
208
|
+
/* background fixed across whole screen */
|
|
209
|
+
position: fixed;
|
|
210
|
+
top: 0;
|
|
211
|
+
right: 0;
|
|
212
|
+
bottom: 0;
|
|
213
|
+
z-index: 1000;
|
|
214
|
+
left: 0;
|
|
215
|
+
opacity: 0.5;
|
|
216
|
+
}
|
|
217
|
+
@keyframes spin {
|
|
218
|
+
0% { transform: rotate(0deg); }
|
|
219
|
+
100% { transform: rotate(360deg); }
|
|
220
|
+
}
|
|
221
|
+
`]
|
|
222
|
+
}]
|
|
223
|
+
}], function () { return [{ type: i1.EngineMagicService }, { type: i2.ComponentListMagicService }, { type: i0.ChangeDetectorRef }, { type: i3.Title }, { type: i4.OverlayWindowService }, { type: i5.HttpClient }, { type: i6.CommandsCollectorMagicService }, { type: i7.ExitMagicService, decorators: [{
|
|
224
|
+
type: Optional
|
|
225
|
+
}] }]; }, { rootMagicElementRef: [{
|
|
226
|
+
type: ViewChild,
|
|
227
|
+
args: ['magicRoot', { static: true }]
|
|
228
|
+
}], SpinnerTemplate: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], onBeforeUnload: [{
|
|
231
|
+
type: HostListener,
|
|
232
|
+
args: ['window:beforeunload', ['$event']]
|
|
233
|
+
}], onUnload: [{
|
|
234
|
+
type: HostListener,
|
|
235
|
+
args: ['window:unload', ['$event']]
|
|
236
|
+
}] }); })();
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91aS9tYWdpYy1yb290LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lBWTVDLGlDQUljOzs7SUFGWiwwREFBcUMsb0RBQUE7OztJQVF6Qyw4QkFBb0Q7SUFDbEQsMkJBQW1HO0lBQ3JHLGlCQUFNOzs7O0lBRFUsZUFBcUU7SUFBckUsd0ZBQXFFOzs7SUFJbkYseUJBQWtDOztBQWtDeEMsTUFBTSxPQUFPLG1CQUFtQjtJQTRCOUIsWUFBc0Isa0JBQXNDLEVBQ3RDLGFBQXVDLEVBQ3ZDLGlCQUFvQyxFQUN0QyxZQUFtQixFQUNuQixvQkFBMEMsRUFDMUMsVUFBc0IsRUFDdEIsd0JBQXVELEVBQzNDLGdCQUFrQztRQVA1Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUN2QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFPO1FBQ25CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQStCO1FBQzNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQmxFLGtCQUFhLEdBQWUsSUFBSSxDQUFDO1FBYWpDLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQW9CckMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBT0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsRUFDN0M7WUFFRSxLQUFLLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQztZQUNwQyxPQUFPLGVBQWUsQ0FBQztTQUN4QjthQUVEO1lBRUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztTQUNuQztJQUNILENBQUM7SUFHRCxRQUFRLENBQUMsS0FBSztRQUVaLElBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQXVCO1FBQ3pDLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUtELFVBQVU7UUFDUixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBS00sUUFBUTtRQUNiLE1BQU0sUUFBUSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFFLFFBQVEsQ0FBRSxDQUFDO0lBQ3pDLENBQUM7SUFTTyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsZUFBdUIsRUFBRSxPQUFnQjtRQUM5RixJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFaEQsSUFBRyxPQUFPLEVBQUU7WUFDVixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDbkU7YUFDSTtZQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLENBQUM7U0FDMUY7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUtELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQzthQUMxQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxrQkFBa0I7YUFDcEIsbUJBQW1CLENBQUMsSUFBSSxDQUN6QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2FBQzFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQixzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQU1ELGNBQWMsQ0FBQyxPQUFtQjtRQUNoQyxRQUFRLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDM0IsS0FBSyxXQUFXLENBQUMsU0FBUztnQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVGLE1BQU07WUFFVixLQUFLLFdBQVcsQ0FBQyxnQkFBZ0I7Z0JBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyRCxNQUFNO1lBRVIsS0FBSyxXQUFXLENBQUMsVUFBVTtnQkFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUU7b0JBQzFGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUMxQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO29CQUVsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3hDO3FCQUNJO29CQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3hDO2dCQUNELE1BQU07WUFFUixLQUFLLFdBQVcsQ0FBQyxXQUFXO2dCQUMxQixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixNQUFNO1lBRVIsS0FBSyxXQUFXLENBQUMsWUFBWTtnQkFDM0IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUN4QztnQkFDRCxNQUFNO1lBRVIsS0FBSyxXQUFXLENBQUMsVUFBVTtnQkFDekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO29CQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU07WUFFUixLQUFLLFdBQVcsQ0FBQyxlQUFlO2dCQUM5QixNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLE1BQU07U0FDVDtJQUNILENBQUM7O3NGQWhMVSxtQkFBbUI7d0RBQW5CLG1CQUFtQjs7Ozs7O29IQUFuQiwwQkFBc0Isa0hBQXRCLG9CQUFnQjswRkF0RGhCLEVBRVY7UUFFQyxvQ0FBZ0I7UUFDZCxvRkFJYztRQUVkLDRCQUNNO1FBQ1IsaUJBQU07UUFFTixvRUFFTTtRQUVOLHFIQUVjOztRQWZULGVBQThCO1FBQTlCLGlEQUE4QjtRQVNGLGVBQWlCO1FBQWpCLHNDQUFpQjs7dUZBdUN6QyxtQkFBbUI7Y0F4RC9CLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsU0FBUyxFQUFFLEVBRVY7Z0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJUO2dCQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCUixDQUFDO2FBQ0g7O3NCQW9DYyxRQUFRO3dCQXZCcUIsbUJBQW1CO2tCQUE1RCxTQUFTO21CQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFFL0IsZUFBZTtrQkFBdkIsS0FBSztZQWdDTixjQUFjO2tCQURiLFlBQVk7bUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFpQi9DLFFBQVE7a0JBRFAsWUFBWTttQkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBHdWlDb21tYW5kIH0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBFbmdpbmVNYWdpY1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbmdpbmUubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudExpc3RNYWdpY1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb25lbnQtbGlzdC5tYWdpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3VpSW50ZXJhY3RpdmVFeGVjdXRvciB9IGZyb20gJy4vR3VpSW50ZXJhY3RpdmVFeGVjdXRvcic7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRXhpdE1hZ2ljU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2V4aXQubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvT3ZlcmxheVdpbmRvd1NlcnZpY2UnO1xyXG5pbXBvcnQgeyBJTWFnaWNWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgeyBDb21tYW5kc0NvbGxlY3Rvck1hZ2ljU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbW1hbmRzLWNvbGxlY3Rvci5tYWdpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbi8qKlxyXG4gKiBSb290IE1hZ2ljIGNvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtYWdpYy1yb290JyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgLy8gRXhpdE1hZ2ljU2VydmljZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgI21hZ2ljUm9vdD5cclxuICAgICAgPG5kYy1keW5hbWljXHJcbiAgICAgICAgKm5nSWYgPSBcIlJvb3RDb21wb25lbnQgIT09IG51bGxcIlxyXG4gICAgICAgIFtuZGNEeW5hbWljQ29tcG9uZW50XT1cIlJvb3RDb21wb25lbnRcIlxyXG4gICAgICAgIFtuZGNEeW5hbWljSW5wdXRzXSAgID1cIlJvb3RDb21wb25lbnRQYXJhbWV0ZXJzXCI+XHJcbiAgICAgIDwvbmRjLWR5bmFtaWM+XHJcblxyXG4gICAgICA8ZGl2ICNvdmVybGF5V2luZG93c0NvbnRhaW5lciBtYWdpY1ZpZXdDb250YWluZXJSZWY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYmFja2dyb3VuZFwiICpuZ0lmPVwic2hvd1NwaW5uZXJcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJTcGlubmVyVGVtcGxhdGUgPyBTcGlubmVyVGVtcGxhdGU6ZGVmYXVsdFNwaW5uZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNwaW5uZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZ1NwaW5uZXJDbGFzc1wiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuICAgIC5tZ1NwaW5uZXJDbGFzcyB7XHJcbiAgICAgIGJvcmRlcjogMTBweCBzb2xpZCAjY2NjY2NjOyAvKiBMaWdodCBncmV5ICovXHJcbiAgICAgIGJvcmRlci10b3A6IDEwcHggc29saWQgYmxhY2s7IC8qIEJsdWUgKi9cclxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgIG1hcmdpbjogYXV0bztcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICByaWdodDogMDtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICB3aWR0aDogMTAwcHg7XHJcbiAgICAgIGhlaWdodDogMTAwcHg7XHJcbiAgICAgIGFuaW1hdGlvbjogc3BpbiAycyBsaW5lYXIgaW5maW5pdGU7XHJcbiAgICB9XHJcbiAgICAuc3Bpbm5lci1iYWNrZ3JvdW5kIHtcclxuICAgICAgLyogYmFja2dyb3VuZCBmaXhlZCBhY3Jvc3Mgd2hvbGUgc2NyZWVuICovXHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICByaWdodDogMDtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICB6LWluZGV4OiAxMDAwO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICB9XHJcbiAgICBAa2V5ZnJhbWVzIHNwaW4ge1xyXG4gICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XHJcbiAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XHJcbiAgICB9XHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1hZ2ljU2hlbGxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBJTWFnaWNWaWV3Q29udGFpbmVyUmVmIHtcclxuICAvKipcclxuICAgKiBSb290IGNvbXBvbmVudCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHdpbmRvd1xyXG4gICAqL1xyXG4gIFJvb3RDb21wb25lbnQgOiBDb21wb25lbnQgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIHBhcmFtZXRlcnMgZm9yIHRoZSBSb290IENvbXBvbmVudFxyXG4gICAqL1xyXG4gIFJvb3RDb21wb25lbnRQYXJhbWV0ZXJzIDogYW55O1xyXG5cclxuICBvdmVybGF5V2luZG93c0NvbnRhaW5lclZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21hZ2ljUm9vdCcsIHsgc3RhdGljOiB0cnVlIH0pIHJvb3RNYWdpY0VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIFNwaW5uZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgc2hvd1NwaW5uZXI6IGJvb2xlYW47XHJcbiAgbWFnaWNFbmdpbmVUZXJtaW5hdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIG1hZ2ljIE1hZ2ljJ3Mgc2VydmljZVxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRMaXN0IE1hZ2ljIGNvbXBvbmVudCBsaXN0XHJcbiAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIENoYW5nZXMgZGV0ZWN0b3JcclxuICAgKiBAcGFyYW0gdGl0bGVTZXJ2aWNlIFRpdGxlIHNldHRpbmcgc2VydmljZVxyXG4gICAqIEBwYXJhbSBodHRwQ2xpZW50IFRoZSBuYXRpdmUgaHR0cENsaWVudCBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSBleGl0TWFnaWNTZXJ2aWNlIE1hZ2ljIGV4aXQgc2VydmljZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbmdpbmVNYWdpY1NlcnZpY2U6IEVuZ2luZU1hZ2ljU2VydmljZSxcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgY29tcG9uZW50TGlzdDpDb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFRpdGxlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgb3ZlcmxheVdpbmRvd1NlcnZpY2U6IE92ZXJsYXlXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICBwcml2YXRlIHBlbmRpbmdDb21tYW5kc0NvbGxlY3RvcjogQ29tbWFuZHNDb2xsZWN0b3JNYWdpY1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgIHB1YmxpYyBleGl0TWFnaWNTZXJ2aWNlOiBFeGl0TWFnaWNTZXJ2aWNlKSB7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB0aGlzLnNldFRpdGxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCZWZvcmUtdW5sb2FkIGV2ZW50IGxpc3RlbmVyXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXHJcbiAgb25CZWZvcmVVbmxvYWQoZXZlbnQpIHtcclxuICAgIGlmKHRoaXMuZW5naW5lTWFnaWNTZXJ2aWNlLlRyYW5zQ2FjaGVFeGlzdHMoKSlcclxuICAgIHtcclxuICAgICAgLy8gU2hvdyB0aGUgY29uZmlybWF0aW9uIGJveCBiZWZvcmUgdW5sb2FkaW5nIHRoZSBicm93c2VyXHJcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gJ0FyZSB5b3Ugc3VyZT8nO1xyXG4gICAgICByZXR1cm4gJ0FyZSB5b3Ugc3VyZT8nO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAvLyB0ZXJtaW5hdGUgdGhlIG1hZ2ljIHNlcnZlciBjb250ZXh0IHVzaW5nIGZldGNoIEFQSSB3aXRoIGtlZXAtYWxpdmVcclxuICAgICAgdGhpcy5lbmdpbmVNYWdpY1NlcnZpY2UuVGVybWluYXRlQ29udGV4dFVzaW5nRmV0Y2hBUEkoKTtcclxuICAgICAgdGhpcy5tYWdpY0VuZ2luZVRlcm1pbmF0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnVubG9hZCcsIFsnJGV2ZW50J10pXHJcbiAgb25VbmxvYWQoZXZlbnQpIHtcclxuICAgIC8vIENocm9tZSBwcm92aWRlcyBhbiBvcHBvcnR1bml0eSB0byB0ZXJtaW5hdGUgdGhlIGNvbnRleHQgYWZ0ZXIgdXNlciBhcHByb3ZlcyB0aGUgYnJvd3NlciB1bmxvYWQgYWxlcnRcclxuICAgIGlmKCF0aGlzLm1hZ2ljRW5naW5lVGVybWluYXRlZClcclxuICAgICAgdGhpcy5lbmdpbmVNYWdpY1NlcnZpY2UuVGVybWluYXRlQ29udGV4dFVzaW5nRmV0Y2hBUEkoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMub3ZlcmxheVdpbmRvd1NlcnZpY2UuaW5pdCh0aGlzLm92ZXJsYXlXaW5kb3dzQ29udGFpbmVyVmlld1JlZiwgdGhpcy5yb290TWFnaWNFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5lbmdpbmVNYWdpY1NlcnZpY2Uuc3RhcnRNYWdpY0VuZ2luZSh0aGlzLmh0dHBDbGllbnQpO1xyXG4gIH1cclxuXHJcbiAgc2V0Vmlld0NvbnRhaW5lclJlZih2Y1JlZjogVmlld0NvbnRhaW5lclJlZil7XHJcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3dzQ29udGFpbmVyVmlld1JlZiA9IHZjUmVmO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6YXRpb24gb2YgTWFnaWMgbWVjaGFuaXNtc1xyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLnJlZ2lzdGVyVUlDb21tYW5kcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSB0aXRsZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRUaXRsZSggKSB7XHJcbiAgICBjb25zdCBuZXdUaXRsZTogc3RyaW5nID0gdGhpcy5jb21wb25lbnRMaXN0LnRpdGxlO1xyXG4gICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUoIG5ld1RpdGxlICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGNvbXBvbmVudCBhY2NvcmRpbmcgdG8gcmVxdWVzdGVkIGZvcm1cclxuICAgKiBAcGFyYW0gZm9ybU5hbWUgTmFtZSBvZiB0aGUgZm9ybSB0byBvcGVuXHJcbiAgICogQHBhcmFtIHRhc2tJZCBJZCBvZiBvcGVuaW5nIHRhc2tcclxuICAgKiBAcGFyYW0gdGFza0Rlc2NyaXB0aW9uIFRPRE9cclxuICAgKiBAcGFyYW0gaXNNb2RhbCB3aGV0aGVyIG1vZGFsIHdpbmRvdyBpcyBiZWluZyBvcGVuZWRcclxuICAgKi9cclxuICBwcml2YXRlIHNldENvbXBvbmVudChmb3JtTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZywgdGFza0Rlc2NyaXB0aW9uOiBzdHJpbmcsIGlzTW9kYWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucGVuZGluZ0NvbW1hbmRzQ29sbGVjdG9yLnN0YXJ0Q29sbGVjdGluZygpO1xyXG5cclxuICAgIGlmKGlzTW9kYWwpIHtcclxuICAgICAgdGhpcy5vdmVybGF5V2luZG93U2VydmljZS5vcGVuKGZvcm1OYW1lLCB0YXNrSWQsIHRhc2tEZXNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5Sb290Q29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRMaXN0LmdldENvbXBvbmVudChmb3JtTmFtZSk7XHJcbiAgICAgIHRoaXMuUm9vdENvbXBvbmVudFBhcmFtZXRlcnMgPSB7IHRhc2tJZFBhcmFtOiB0YXNrSWQsIHRhc2tEZXNjcmlwdGlvbjogdGFza0Rlc2NyaXB0aW9uIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICByZWdpc3RlclVJQ29tbWFuZHMoKSB7XHJcbiAgICB0aGlzLmVuZ2luZU1hZ2ljU2VydmljZS5yZWZyZXNoRG9tLnBpcGUoXHJcbiAgICAgIGZpbHRlcihjb21tYW5kID0+IGNvbW1hbmQuVGFza1RhZyA9PT0gJzAnKSlcclxuICAgICAgLnN1YnNjcmliZShjb21tYW5kID0+IHtcclxuICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZW5naW5lTWFnaWNTZXJ2aWNlXHJcbiAgICAgIC5pbnRlcmFjdGl2ZUNvbW1hbmRzLnBpcGUoXHJcbiAgICAgIGZpbHRlcihjb21tYW5kID0+IGNvbW1hbmQuVGFza1RhZyA9PT0gJzAnKSlcclxuICAgICAgLnN1YnNjcmliZShjb21tYW5kID0+IHtcclxuICAgICAgICBHdWlJbnRlcmFjdGl2ZUV4ZWN1dG9yLmV4ZWN1dGVJbnRlcmFjdGl2ZUNvbW1hbmQobnVsbCwgY29tbWFuZCwgdGhpcy5vdmVybGF5V2luZG93U2VydmljZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSBjb21tYW5kcyByZWNlaXZlZCBmcm9tIHRoZSBNYWdpYyBXZWJDbGllbnQgZW5naW5lXHJcbiAgICogQHBhcmFtIGNvbW1hbmRcclxuICAgKi9cclxuICBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBHdWlDb21tYW5kKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGNvbW1hbmQuQ29tbWFuZFR5cGUpIHtcclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5PUEVOX0ZPUk06XHJcbiAgICAgICAgICB0aGlzLnNldENvbXBvbmVudChjb21tYW5kLnN0ciwgY29tbWFuZC5zdHJpbmdMaXN0WzBdLCBjb21tYW5kLnN0cmluZ0xpc3RbMV0sIGNvbW1hbmQuQm9vbDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9JU19MT0dHRURfSU46XHJcbiAgICAgICAgdGhpcy5lbmdpbmVNYWdpY1NlcnZpY2Uuc2V0SXNMb2dnZWRJbihjb21tYW5kLkJvb2wxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuQ0xPU0VfRk9STTpcclxuICAgICAgICBpZiAodGhpcy5Sb290Q29tcG9uZW50ICE9IG51bGwgJiYgY29tbWFuZC5zdHIgPT09IHRoaXMuUm9vdENvbXBvbmVudFBhcmFtZXRlcnMudGFza0lkUGFyYW0pIHtcclxuICAgICAgICAgIHRoaXMuUm9vdENvbXBvbmVudCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLlJvb3RDb21wb25lbnRQYXJhbWV0ZXJzID0ge307XHJcblxyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBDbG9zZSBtb2RhbCB3aW5kb3dcclxuICAgICAgICAgIHRoaXMub3ZlcmxheVdpbmRvd1NlcnZpY2UuY2xvc2UoY29tbWFuZC5zdHIpO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5SRUxPQURfUEFHRTpcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNIT1dfU1BJTk5FUjpcclxuICAgICAgICBpZiAodGhpcy5zaG93U3Bpbm5lciAhPSBjb21tYW5kLkJvb2wxKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dTcGlubmVyID0gY29tbWFuZC5Cb29sMTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuRVhJVF9NQUdJQzpcclxuICAgICAgICBpZiAodGhpcy5leGl0TWFnaWNTZXJ2aWNlKVxyXG4gICAgICAgICAgdGhpcy5leGl0TWFnaWNTZXJ2aWNlLmV4aXRNYWdpYygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TSE9XX0hUTUxfRVJST1I6XHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LndyaXRlKGNvbW1hbmQuc3RyKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|