@magic-xpa/angular 4.801.0-dev481.242 → 4.801.0-dev481.248

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.
Files changed (136) hide show
  1. package/esm2020/index.mjs +57 -0
  2. package/{esm2015/magic-xpa-angular.js → esm2020/magic-xpa-angular.mjs} +0 -0
  3. package/esm2020/src/controls.metadata.model.mjs +180 -0
  4. package/{esm2015/src/interfaces/sub-form-definition.iterface.js → esm2020/src/interfaces/sub-form-definition.iterface.mjs} +1 -0
  5. package/esm2020/src/magic.core.module.mjs +157 -0
  6. package/{esm2015/src/services/ISubformMagicService.js → esm2020/src/services/ISubformMagicService.mjs} +1 -0
  7. package/esm2020/src/services/OverlayWindowService.mjs +208 -0
  8. package/esm2020/src/services/StylesMapManager.mjs +28 -0
  9. package/esm2020/src/services/accessor.magic.service.mjs +302 -0
  10. package/{esm2015/src/services/commands-collector.magic.service.js → esm2020/src/services/commands-collector.magic.service.mjs} +7 -4
  11. package/esm2020/src/services/component-list.magic.service.mjs +46 -0
  12. package/{esm2015/src/services/confirmation.components.magic.provider.js → esm2020/src/services/confirmation.components.magic.provider.mjs} +2 -2
  13. package/esm2020/src/services/engine.magic.service.mjs +82 -0
  14. package/{esm2015/src/services/exit.magic.service.js → esm2020/src/services/exit.magic.service.mjs} +2 -2
  15. package/esm2020/src/services/magic.lazy.loader.service.mjs +16 -0
  16. package/{esm2015/src/services/magic.providers.js → esm2020/src/services/magic.providers.mjs} +0 -0
  17. package/{esm2015/src/services/magic.services.js → esm2020/src/services/magic.services.mjs} +2 -2
  18. package/{esm2015/src/services/mg-date-adapter.js → esm2020/src/services/mg-date-adapter.mjs} +2 -2
  19. package/{esm2015/src/services/overlay.conainer.magic.provider.js → esm2020/src/services/overlay.conainer.magic.provider.mjs} +2 -2
  20. package/esm2020/src/services/router-commands.magic.service.mjs +28 -0
  21. package/esm2020/src/services/subform.magic.service.mjs +185 -0
  22. package/{esm2015/src/services/table.magic.service.js → esm2020/src/services/table.magic.service.mjs} +2 -2
  23. package/esm2020/src/services/task.magics.service.mjs +611 -0
  24. package/{esm2015/src/services/title.magic.service.js → esm2020/src/services/title.magic.service.mjs} +2 -2
  25. package/esm2020/src/ui/GuiInteractiveExecutor.mjs +98 -0
  26. package/{esm2015/src/ui/components/base-magic-alert.component.js → esm2020/src/ui/components/base-magic-alert.component.mjs} +2 -2
  27. package/{esm2015/src/ui/components/base-magic-confirm.component.js → esm2020/src/ui/components/base-magic-confirm.component.mjs} +2 -2
  28. package/esm2020/src/ui/components/magic-alert.component.mjs +71 -0
  29. package/esm2020/src/ui/components/magic-confirmation-box.component.mjs +82 -0
  30. package/{esm2015/src/ui/directives/NonMagicControlDirective.js → esm2020/src/ui/directives/NonMagicControlDirective.mjs} +2 -2
  31. package/{esm2015/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.js → esm2020/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.mjs} +2 -2
  32. package/{esm2015/src/ui/directives/magic/checkbox.magic.directive.js → esm2020/src/ui/directives/magic/checkbox.magic.directive.mjs} +2 -2
  33. package/{esm2015/src/ui/directives/magic/combobox.magic.directive.js → esm2020/src/ui/directives/magic/combobox.magic.directive.mjs} +2 -2
  34. 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
  35. 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
  36. 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
  37. package/{esm2015/src/ui/directives/magic/input.noformcontrol.magic.directive.js → esm2020/src/ui/directives/magic/input.noformcontrol.magic.directive.mjs} +2 -2
  38. package/{esm2015/src/ui/directives/magic/nocontrol.magic.directive.js → esm2020/src/ui/directives/magic/nocontrol.magic.directive.mjs} +2 -2
  39. package/{esm2015/src/ui/directives/magic/row.magic.directive.js → esm2020/src/ui/directives/magic/row.magic.directive.mjs} +2 -2
  40. package/{esm2015/src/ui/directives/magic-focus.directive.js → esm2020/src/ui/directives/magic-focus.directive.mjs} +2 -2
  41. package/esm2020/src/ui/directives/magic.directive.mjs +207 -0
  42. package/esm2020/src/ui/directives/magicViewContainerRef.directive.mjs +20 -0
  43. package/{esm2015/src/ui/directives/mgformat.magic.directive.js → esm2020/src/ui/directives/mgformat.magic.directive.mjs} +2 -2
  44. package/{esm2015/src/ui/directives/range-validator.magic.directive.js → esm2020/src/ui/directives/range-validator.magic.directive.mjs} +2 -2
  45. package/{esm2015/src/ui/magic-confirmationBox.js → esm2020/src/ui/magic-confirmationBox.mjs} +0 -0
  46. package/{esm2015/src/ui/magic-modal/base-magic-overlay-container.js → esm2020/src/ui/magic-modal/base-magic-overlay-container.mjs} +0 -0
  47. package/{esm2015/src/ui/magic-modal/magic-modal-form.js → esm2020/src/ui/magic-modal/magic-modal-form.mjs} +0 -0
  48. package/{esm2015/src/ui/magic-modal/magic-modal-interface.js → esm2020/src/ui/magic-modal/magic-modal-interface.mjs} +1 -0
  49. package/esm2020/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +135 -0
  50. package/esm2020/src/ui/magic-modal/magic-overlay-container.mjs +165 -0
  51. package/esm2020/src/ui/magic-root.component.mjs +237 -0
  52. package/esm2020/src/ui/mgerror.magic.component.mjs +120 -0
  53. package/esm2020/src/ui/pipes/date.magic.pipe.mjs +105 -0
  54. package/{esm2015/src/ui/pipes/time.magic.pipe.js → esm2020/src/ui/pipes/time.magic.pipe.mjs} +3 -3
  55. package/{esm2015/src/ui/router-container.magic.component.js → esm2020/src/ui/router-container.magic.component.mjs} +2 -2
  56. package/esm2020/src/ui/subform.magic.component.mjs +52 -0
  57. package/{esm2015/src/ui/task-base.magic.component.js → esm2020/src/ui/task-base.magic.component.mjs} +2 -2
  58. package/{esm2015/src/ui/utils.js → esm2020/src/ui/utils.mjs} +0 -0
  59. package/fesm2015/magic-xpa-angular.mjs +4578 -0
  60. package/fesm2015/magic-xpa-angular.mjs.map +1 -0
  61. package/{fesm2015/magic-xpa-angular.js → fesm2020/magic-xpa-angular.mjs} +434 -414
  62. package/fesm2020/magic-xpa-angular.mjs.map +1 -0
  63. package/index.d.ts +1 -0
  64. package/package.json +28 -15
  65. package/src/magic.core.module.d.ts +3 -8
  66. package/src/services/OverlayWindowService.d.ts +2 -2
  67. package/src/services/accessor.magic.service.d.ts +2 -2
  68. package/src/services/commands-collector.magic.service.d.ts +2 -2
  69. package/src/services/component-list.magic.service.d.ts +3 -0
  70. package/src/services/confirmation.components.magic.provider.d.ts +2 -2
  71. package/src/services/engine.magic.service.d.ts +2 -2
  72. package/src/services/exit.magic.service.d.ts +2 -2
  73. package/src/services/magic.lazy.loader.service.d.ts +6 -0
  74. package/src/services/magic.services.d.ts +2 -2
  75. package/src/services/mg-date-adapter.d.ts +2 -2
  76. package/src/services/overlay.conainer.magic.provider.d.ts +2 -2
  77. package/src/services/router-commands.magic.service.d.ts +2 -2
  78. package/src/services/subform.magic.service.d.ts +6 -4
  79. package/src/services/table.magic.service.d.ts +2 -2
  80. package/src/services/task.magics.service.d.ts +2 -2
  81. package/src/services/title.magic.service.d.ts +2 -2
  82. package/src/ui/components/base-magic-alert.component.d.ts +2 -2
  83. package/src/ui/components/base-magic-confirm.component.d.ts +2 -2
  84. package/src/ui/components/magic-alert.component.d.ts +2 -2
  85. package/src/ui/components/magic-confirmation-box.component.d.ts +2 -2
  86. package/src/ui/directives/NonMagicControlDirective.d.ts +2 -2
  87. package/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.d.ts +2 -2
  88. package/src/ui/directives/magic/checkbox.magic.directive.d.ts +2 -2
  89. package/src/ui/directives/magic/combobox.magic.directive.d.ts +2 -2
  90. package/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.d.ts +2 -2
  91. package/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.d.ts +2 -2
  92. package/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.d.ts +2 -2
  93. package/src/ui/directives/magic/input.noformcontrol.magic.directive.d.ts +2 -2
  94. package/src/ui/directives/magic/nocontrol.magic.directive.d.ts +2 -2
  95. package/src/ui/directives/magic/row.magic.directive.d.ts +2 -2
  96. package/src/ui/directives/magic-focus.directive.d.ts +2 -2
  97. package/src/ui/directives/magic.directive.d.ts +2 -2
  98. package/src/ui/directives/magicViewContainerRef.directive.d.ts +2 -2
  99. package/src/ui/directives/mgformat.magic.directive.d.ts +2 -2
  100. package/src/ui/directives/range-validator.magic.directive.d.ts +2 -2
  101. package/src/ui/magic-modal/magic-overlay-container-wrapper.d.ts +7 -5
  102. package/src/ui/magic-modal/magic-overlay-container.d.ts +2 -2
  103. package/src/ui/magic-root.component.d.ts +2 -2
  104. package/src/ui/mgerror.magic.component.d.ts +2 -2
  105. package/src/ui/pipes/date.magic.pipe.d.ts +2 -2
  106. package/src/ui/pipes/time.magic.pipe.d.ts +2 -2
  107. package/src/ui/router-container.magic.component.d.ts +2 -2
  108. package/src/ui/subform.magic.component.d.ts +2 -2
  109. package/src/ui/task-base.magic.component.d.ts +2 -2
  110. package/bundles/magic-xpa-angular.umd.js +0 -5028
  111. package/bundles/magic-xpa-angular.umd.js.map +0 -1
  112. package/bundles/magic-xpa-angular.umd.min.js +0 -16
  113. package/bundles/magic-xpa-angular.umd.min.js.map +0 -1
  114. package/esm2015/index.js +0 -56
  115. package/esm2015/src/controls.metadata.model.js +0 -180
  116. package/esm2015/src/magic.core.module.js +0 -173
  117. package/esm2015/src/services/OverlayWindowService.js +0 -205
  118. package/esm2015/src/services/StylesMapManager.js +0 -29
  119. package/esm2015/src/services/accessor.magic.service.js +0 -302
  120. package/esm2015/src/services/component-list.magic.service.js +0 -36
  121. package/esm2015/src/services/engine.magic.service.js +0 -82
  122. package/esm2015/src/services/router-commands.magic.service.js +0 -25
  123. package/esm2015/src/services/subform.magic.service.js +0 -182
  124. package/esm2015/src/services/task.magics.service.js +0 -611
  125. package/esm2015/src/ui/GuiInteractiveExecutor.js +0 -98
  126. package/esm2015/src/ui/components/magic-alert.component.js +0 -72
  127. package/esm2015/src/ui/components/magic-confirmation-box.component.js +0 -83
  128. package/esm2015/src/ui/directives/magic.directive.js +0 -207
  129. package/esm2015/src/ui/directives/magicViewContainerRef.directive.js +0 -20
  130. package/esm2015/src/ui/magic-modal/magic-overlay-container-wrapper.js +0 -131
  131. package/esm2015/src/ui/magic-modal/magic-overlay-container.js +0 -169
  132. package/esm2015/src/ui/magic-root.component.js +0 -237
  133. package/esm2015/src/ui/mgerror.magic.component.js +0 -120
  134. package/esm2015/src/ui/pipes/date.magic.pipe.js +0 -106
  135. package/esm2015/src/ui/subform.magic.component.js +0 -52
  136. package/fesm2015/magic-xpa-angular.js.map +0 -1
@@ -0,0 +1,208 @@
1
+ import { ComponentFactoryResolver, Injectable } from "@angular/core";
2
+ import { ComponentListMagicService } from "./component-list.magic.service";
3
+ import { EngineMagicService } from "./engine.magic.service";
4
+ import { getGuiEventObj } from "@magic-xpa/engine";
5
+ import { OverlayContainerMagicProvider } from "./overlay.conainer.magic.provider";
6
+ import { MagicOverlayContainerWrapper } from "../ui/magic-modal/magic-overlay-container-wrapper";
7
+ import { ConfirmationComponentsMagicProvider } from "./confirmation.components.magic.provider";
8
+ import { OverlayType } from "@magic-xpa/gui";
9
+ import { confirmationBox } from "../ui/magic-confirmationBox";
10
+ import { isNullOrUndefined } from "@magic-xpa/mscorelib";
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "./component-list.magic.service";
13
+ import * as i2 from "./engine.magic.service";
14
+ import * as i3 from "./overlay.conainer.magic.provider";
15
+ import * as i4 from "./confirmation.components.magic.provider";
16
+ export class OverlayWindowService {
17
+ constructor(componentFactoryResolver, componentList, engineMagicService, overlayContainerMagicProvider, confirmationComponentsMagicProvider) {
18
+ this.componentFactoryResolver = componentFactoryResolver;
19
+ this.componentList = componentList;
20
+ this.engineMagicService = engineMagicService;
21
+ this.overlayContainerMagicProvider = overlayContainerMagicProvider;
22
+ this.confirmationComponentsMagicProvider = confirmationComponentsMagicProvider;
23
+ this.overlayWindowFocusManager = null;
24
+ }
25
+ init(overlayWindowsContainerViewRef, rootMagicElement) {
26
+ this.overlayWindowsContainerViewRef = overlayWindowsContainerViewRef;
27
+ this.overlayWindowFocusManager = new OverlayWindowFocusManager(rootMagicElement);
28
+ }
29
+ open(formName, taskId, taskDescription) {
30
+ let comp = this.componentList.lazyLoadModulesMap != null && this.componentList.lazyLoadModulesMap.hasOwnProperty(formName) ? null : this.componentList.getComponent(formName);
31
+ let parameters = { taskIdParam: taskId, taskDescription: taskDescription };
32
+ let componentRef = this.createModalComponent({ MagicFormName: formName, ModalComp: comp, ModalCompParameters: parameters }, this.overlayContainerMagicProvider.getComponent(), OverlayType.Overlay);
33
+ componentRef.instance.onClose.subscribe(() => {
34
+ let guiEvent = getGuiEventObj("close", null, 0);
35
+ guiEvent.TaskID = taskId;
36
+ this.engineMagicService.insertEvent(guiEvent);
37
+ });
38
+ }
39
+ close(commandStr) {
40
+ this.overlayWindowsContainerViewRef.remove();
41
+ this.overlayWindowFocusManager.popDialog();
42
+ let guiEvent1 = getGuiEventObj("dispose", null, 0);
43
+ guiEvent1.TaskID = commandStr;
44
+ this.engineMagicService.insertEvent(guiEvent1);
45
+ }
46
+ openConfirmationBox(title, msg, style) {
47
+ if (this.confirmationComponentsMagicProvider.showDefaultConfirmations()) {
48
+ let res = confirmationBox.showConfirmationBox(title, msg, style);
49
+ this.finishConfirmation(style, res);
50
+ }
51
+ else {
52
+ let comp = confirmationBox.isConfirmBox(style) ? this.confirmationComponentsMagicProvider.getConfirmtionComponent() : this.confirmationComponentsMagicProvider.getAlertComponent();
53
+ let overlayType = confirmationBox.isConfirmBox(style) ? OverlayType.ConfirmationBox : OverlayType.Alert;
54
+ let componentRef = this.createModalComponent({ title: title, message: msg }, comp, overlayType);
55
+ componentRef.instance.onClose.subscribe((res) => {
56
+ this.overlayWindowsContainerViewRef.remove();
57
+ this.overlayWindowFocusManager.popDialog();
58
+ this.finishConfirmation(style, res);
59
+ });
60
+ }
61
+ }
62
+ finishConfirmation(style, result) {
63
+ let guiEvent = getGuiEventObj("confirmationClosed", null, 0);
64
+ guiEvent.keyCode = confirmationBox.convertToExcpectedResultBox(style, result);
65
+ this.engineMagicService.insertEvent(guiEvent);
66
+ }
67
+ createModalComponent(parameters, component, overlayType) {
68
+ let componentRef;
69
+ let magicModalContainerParameters = {
70
+ Component: component,
71
+ Parameters: parameters,
72
+ OverlayTypeParam: overlayType
73
+ };
74
+ const factory = this.componentFactoryResolver.resolveComponentFactory(MagicOverlayContainerWrapper);
75
+ let viewCRef = this.overlayWindowsContainerViewRef;
76
+ componentRef = viewCRef.createComponent(factory);
77
+ Object.assign(componentRef.instance, magicModalContainerParameters);
78
+ this.overlayWindowFocusManager.pushDialog(componentRef.instance.GetRootElement());
79
+ componentRef.instance.DetectChanges();
80
+ return componentRef;
81
+ }
82
+ }
83
+ OverlayWindowService.ɵfac = function OverlayWindowService_Factory(t) { return new (t || OverlayWindowService)(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i1.ComponentListMagicService), i0.ɵɵinject(i2.EngineMagicService), i0.ɵɵinject(i3.OverlayContainerMagicProvider), i0.ɵɵinject(i4.ConfirmationComponentsMagicProvider)); };
84
+ OverlayWindowService.ɵprov = i0.ɵɵdefineInjectable({ token: OverlayWindowService, factory: OverlayWindowService.ɵfac, providedIn: 'root' });
85
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OverlayWindowService, [{
86
+ type: Injectable,
87
+ args: [{
88
+ providedIn: 'root'
89
+ }]
90
+ }], function () { return [{ type: i0.ComponentFactoryResolver }, { type: i1.ComponentListMagicService }, { type: i2.EngineMagicService }, { type: i3.OverlayContainerMagicProvider }, { type: i4.ConfirmationComponentsMagicProvider }]; }, null); })();
91
+ class OverlayWindowFocusManager {
92
+ constructor(rootMagicElement) {
93
+ this.rootMagicElement = null;
94
+ this.openDialogList = new Array(0);
95
+ this.ignoreUtilFocusChanges = false;
96
+ this.lastFocus = null;
97
+ this.focusListener = null;
98
+ this.rootMagicElement = rootMagicElement;
99
+ }
100
+ pushDialog(rootElement) {
101
+ if (this.openDialogList.length === 0) {
102
+ this.focusListener = this.trapFocus.bind(this);
103
+ document.addEventListener('focus', this.focusListener, true);
104
+ }
105
+ this.openDialogList.push(new DialogInfo(rootElement, (document.activeElement instanceof HTMLElement ? document.activeElement : null)));
106
+ }
107
+ popDialog() {
108
+ const dialogInfo = this.openDialogList.pop();
109
+ this.attemptFocus(dialogInfo.FocusElementOnClose);
110
+ if (this.openDialogList.length === 0) {
111
+ document.removeEventListener('focus', this.focusListener, true);
112
+ this.focusListener = null;
113
+ }
114
+ }
115
+ trapFocus(event) {
116
+ if (this.ignoreUtilFocusChanges) {
117
+ return;
118
+ }
119
+ if (this.openDialogList.length > 0) {
120
+ var currentDialog = this.openDialogList[this.openDialogList.length - 1].RootElement;
121
+ if (currentDialog.contains(event.target)) {
122
+ this.lastFocus = event.target;
123
+ }
124
+ else {
125
+ if (this.rootMagicElement.contains(event.target)) {
126
+ this.focusFirstDescendant(currentDialog);
127
+ if (this.lastFocus == document.activeElement) {
128
+ this.focusLastDescendant(currentDialog);
129
+ }
130
+ }
131
+ this.lastFocus = document.activeElement;
132
+ }
133
+ }
134
+ }
135
+ focusFirstDescendant(element) {
136
+ for (var i = 0; i < element.childNodes.length; i++) {
137
+ var child = element.childNodes[i];
138
+ if (this.attemptFocus(child) ||
139
+ this.focusFirstDescendant(child)) {
140
+ return true;
141
+ }
142
+ }
143
+ return false;
144
+ }
145
+ ;
146
+ focusLastDescendant(element) {
147
+ for (var i = element.childNodes.length - 1; i >= 0; i--) {
148
+ var child = element.childNodes[i];
149
+ if (this.attemptFocus(child) ||
150
+ this.focusLastDescendant(child)) {
151
+ return true;
152
+ }
153
+ }
154
+ return false;
155
+ }
156
+ ;
157
+ attemptFocus(element) {
158
+ if (!this.isFocusable(element)) {
159
+ return false;
160
+ }
161
+ this.ignoreUtilFocusChanges = true;
162
+ try {
163
+ element.focus();
164
+ }
165
+ catch (e) {
166
+ }
167
+ this.ignoreUtilFocusChanges = false;
168
+ return (document.activeElement === element);
169
+ }
170
+ ;
171
+ isFocusable(element) {
172
+ if (isNullOrUndefined(element))
173
+ return false;
174
+ if (element.tabIndex > 0 || (element.tabIndex === 0 && element.getAttribute('tabIndex') !== null)) {
175
+ return true;
176
+ }
177
+ else if (element.tabIndex < 0)
178
+ return false;
179
+ if (element.disabled) {
180
+ return false;
181
+ }
182
+ switch (element.nodeName) {
183
+ case 'A':
184
+ return !!element.href && element.rel != 'ignore';
185
+ case 'INPUT':
186
+ return element.type != 'hidden' && element.type != 'file';
187
+ case 'BUTTON':
188
+ case 'SELECT':
189
+ case 'TEXTAREA':
190
+ return true;
191
+ default:
192
+ return false;
193
+ }
194
+ }
195
+ }
196
+ class DialogInfo {
197
+ constructor(rootElement, focusElementOnClose) {
198
+ this.rootElement = rootElement;
199
+ this.focusElementOnClose = focusElementOnClose;
200
+ }
201
+ get RootElement() {
202
+ return this.rootElement;
203
+ }
204
+ get FocusElementOnClose() {
205
+ return this.focusElementOnClose;
206
+ }
207
+ }
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3ZlcmxheVdpbmRvd1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9zZXJ2aWNlcy9PdmVybGF5V2luZG93U2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsd0JBQXdCLEVBQWdCLFVBQVUsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFZLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQVUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQVd6RCxNQUFNLE9BQU8sb0JBQW9CO0lBRS9CLFlBQW9CLHdCQUFrRCxFQUNoRCxhQUF1QyxFQUN2QyxrQkFBc0MsRUFDeEMsNkJBQTRELEVBQzVELG1DQUF3RTtRQUp4RSw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2hELGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3hDLGtDQUE2QixHQUE3Qiw2QkFBNkIsQ0FBK0I7UUFDNUQsd0NBQW1DLEdBQW5DLG1DQUFtQyxDQUFxQztRQU1wRiw4QkFBeUIsR0FBOEIsSUFB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RUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgSW5qZWN0YWJsZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7Q29tcG9uZW50TGlzdE1hZ2ljU2VydmljZX0gZnJvbSBcIi4vY29tcG9uZW50LWxpc3QubWFnaWMuc2VydmljZVwiO1xyXG5pbXBvcnQge0VuZ2luZU1hZ2ljU2VydmljZX0gZnJvbSBcIi4vZW5naW5lLm1hZ2ljLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtJR3VpRXZlbnQsIGdldEd1aUV2ZW50T2JqfSBmcm9tIFwiQG1hZ2ljLXhwYS9lbmdpbmVcIjtcclxuaW1wb3J0IHsgT3ZlcmxheUNvbnRhaW5lck1hZ2ljUHJvdmlkZXIgfSBmcm9tIFwiLi9vdmVybGF5LmNvbmFpbmVyLm1hZ2ljLnByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IE1hZ2ljT3ZlcmxheUNvbnRhaW5lcldyYXBwZXIgfSBmcm9tIFwiLi4vdWkvbWFnaWMtbW9kYWwvbWFnaWMtb3ZlcmxheS1jb250YWluZXItd3JhcHBlclwiO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Db21wb25lbnRzTWFnaWNQcm92aWRlciB9IGZyb20gXCIuL2NvbmZpcm1hdGlvbi5jb21wb25lbnRzLm1hZ2ljLnByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IE92ZXJsYXlUeXBlLCBTdHlsZXMgfSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHsgY29uZmlybWF0aW9uQm94IH0gZnJvbSBcIi4uL3VpL21hZ2ljLWNvbmZpcm1hdGlvbkJveFwiO1xyXG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgbWFuYWdpbmcgb3ZlcmxheSB3aW5kb3dzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjoncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE92ZXJsYXlXaW5kb3dTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgY29tcG9uZW50TGlzdDpDb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBlbmdpbmVNYWdpY1NlcnZpY2U6IEVuZ2luZU1hZ2ljU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG92ZXJsYXlDb250YWluZXJNYWdpY1Byb3ZpZGVyOiBPdmVybGF5Q29udGFpbmVyTWFnaWNQcm92aWRlcixcclxuICAgICAgICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvbkNvbXBvbmVudHNNYWdpY1Byb3ZpZGVyOiBDb25maXJtYXRpb25Db21wb25lbnRzTWFnaWNQcm92aWRlcikge1xyXG4gIH1cclxuXHJcbiAgLy8gVGhlIHZpZXcgcmVmZXJlbmNlIG9mIGNvbnRhaW5lciBvZiBvdmVybGF5IHdpbmRvd1xyXG4gIHByaXZhdGUgb3ZlcmxheVdpbmRvd3NDb250YWluZXJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICBwcml2YXRlIG92ZXJsYXlXaW5kb3dGb2N1c01hbmFnZXI6IE92ZXJsYXlXaW5kb3dGb2N1c01hbmFnZXIgPSBudWxsO1xyXG5cclxuICBpbml0KG92ZXJsYXlXaW5kb3dzQ29udGFpbmVyVmlld1JlZjogVmlld0NvbnRhaW5lclJlZiwgcm9vdE1hZ2ljRWxlbWVudDogRWxlbWVudCkge1xyXG4gICAgdGhpcy5vdmVybGF5V2luZG93c0NvbnRhaW5lclZpZXdSZWYgPSBvdmVybGF5V2luZG93c0NvbnRhaW5lclZpZXdSZWY7XHJcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3dGb2N1c01hbmFnZXIgPSBuZXcgT3ZlcmxheVdpbmRvd0ZvY3VzTWFuYWdlcihyb290TWFnaWNFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9wZW4oZm9ybU5hbWU6IHN0cmluZywgdGFza0lkOiBzdHJpbmcsIHRhc2tEZXNjcmlwdGlvbjogc3RyaW5nKSB7XHJcblxyXG4gICAgLy8gZm9yIG92ZXJsYXkgd2hpY2ggYXJlIGxhenkgbG9hZGVkIGRvbid0IGZpbmQgZGF0YSBpbiBjb21wb25lbnQtbGlzdFxyXG4gICAgbGV0IGNvbXAgPSAgdGhpcy5jb21wb25lbnRMaXN0LmxhenlMb2FkTW9kdWxlc01hcCAhPSBudWxsICYmIHRoaXMuY29tcG9uZW50TGlzdC5sYXp5TG9hZE1vZHVsZXNNYXAuaGFzT3duUHJvcGVydHkoZm9ybU5hbWUpID8gbnVsbCA6dGhpcy5jb21wb25lbnRMaXN0LmdldENvbXBvbmVudChmb3JtTmFtZSk7XHJcbiAgICBsZXQgcGFyYW1ldGVycyA9IHsgdGFza0lkUGFyYW06IHRhc2tJZCwgdGFza0Rlc2NyaXB0aW9uOiB0YXNrRGVzY3JpcHRpb24gfTtcclxuXHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gdGhpcy5jcmVhdGVNb2RhbENvbXBvbmVudCh7IE1hZ2ljRm9ybU5hbWU6IGZvcm1OYW1lLCBNb2RhbENvbXA6IGNvbXAsIE1vZGFsQ29tcFBhcmFtZXRlcnM6IHBhcmFtZXRlcnN9LCA8Q29tcG9uZW50PnRoaXMub3ZlcmxheUNvbnRhaW5lck1hZ2ljUHJvdmlkZXIuZ2V0Q29tcG9uZW50KCksIE92ZXJsYXlUeXBlLk92ZXJsYXkpO1xyXG5cclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5vbkNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJjbG9zZVwiLCBudWxsLCAwKTtcclxuICAgICAgZ3VpRXZlbnQuVGFza0lEID0gdGFza0lkO1xyXG4gICAgICB0aGlzLmVuZ2luZU1hZ2ljU2VydmljZS5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlKGNvbW1hbmRTdHI6IHN0cmluZykge1xyXG4gICAgLy8gQ2xvc2UgdGhlIG92ZXJsYXkgYnkgcmVtb3ZpbmcgdGhlIG92ZXJsYXkgd2luZG93IGZyb20gaXRzIGNvbnRhaW5lclxyXG4gICAgdGhpcy5vdmVybGF5V2luZG93c0NvbnRhaW5lclZpZXdSZWYucmVtb3ZlKCk7XHJcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3dGb2N1c01hbmFnZXIucG9wRGlhbG9nKCk7XHJcblxyXG4gICAgbGV0IGd1aUV2ZW50MTogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJkaXNwb3NlXCIsIG51bGwsIDApO1xyXG4gICAgZ3VpRXZlbnQxLlRhc2tJRCA9IGNvbW1hbmRTdHI7XHJcbiAgICB0aGlzLmVuZ2luZU1hZ2ljU2VydmljZS5pbnNlcnRFdmVudChndWlFdmVudDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gQ29uZmlybWF0aW9uIGJveFxyXG4gICAqIEBwYXJhbSB0aXRsZSB0aXRsZSBvZiB0aGUgYm94XHJcbiAgICogQHBhcmFtIG1zZyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHN0eWxlIE1hZ2ljIHN0eWxlXHJcbiAgICovXHJcbiAgIG9wZW5Db25maXJtYXRpb25Cb3goIHRpdGxlOiBzdHJpbmcsIG1zZzogc3RyaW5nLCBzdHlsZTogU3R5bGVzKSB7XHJcblxyXG4gICAgIC8vc2hvdyBkZWZhdWx0IGNvbmZpcm1hdGlvbnNcclxuICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbkNvbXBvbmVudHNNYWdpY1Byb3ZpZGVyLnNob3dEZWZhdWx0Q29uZmlybWF0aW9ucygpKVxyXG4gICAge1xyXG4gICAgICBsZXQgcmVzID0gY29uZmlybWF0aW9uQm94LnNob3dDb25maXJtYXRpb25Cb3godGl0bGUsIG1zZywgc3R5bGUpO1xyXG4gICAgICB0aGlzLmZpbmlzaENvbmZpcm1hdGlvbiggc3R5bGUsIHJlcyk7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAvL3Nob3cgY3VzdG9tIGNvbmZpcm1hdGlvbnNcclxuICAgICAgbGV0IGNvbXAgPSBjb25maXJtYXRpb25Cb3guaXNDb25maXJtQm94KHN0eWxlKSA/IHRoaXMuY29uZmlybWF0aW9uQ29tcG9uZW50c01hZ2ljUHJvdmlkZXIuZ2V0Q29uZmlybXRpb25Db21wb25lbnQoKSA6dGhpcy5jb25maXJtYXRpb25Db21wb25lbnRzTWFnaWNQcm92aWRlci5nZXRBbGVydENvbXBvbmVudCgpICA7XHJcbiAgICAgIGxldCBvdmVybGF5VHlwZSA9IGNvbmZpcm1hdGlvbkJveC5pc0NvbmZpcm1Cb3goc3R5bGUpPyBPdmVybGF5VHlwZS5Db25maXJtYXRpb25Cb3ggOiBPdmVybGF5VHlwZS5BbGVydDtcclxuICAgICAgbGV0IGNvbXBvbmVudFJlZiA9IHRoaXMuY3JlYXRlTW9kYWxDb21wb25lbnQoeyB0aXRsZTogdGl0bGUsIG1lc3NhZ2U6IG1zZyB9LCBjb21wLCBvdmVybGF5VHlwZSk7XHJcblxyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uub25DbG9zZS5zdWJzY3JpYmUoKHJlcyA6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLm92ZXJsYXlXaW5kb3dzQ29udGFpbmVyVmlld1JlZi5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLm92ZXJsYXlXaW5kb3dGb2N1c01hbmFnZXIucG9wRGlhbG9nKCk7XHJcbiAgICAgICAgdGhpcy5maW5pc2hDb25maXJtYXRpb24oIHN0eWxlLCByZXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGNsb3NlIG9mIHRoZSBjb25maXJtYXRpb25cclxuICAgKiBAcGFyYW0gc3R5bGUgTWFnaWMgc3R5bGVcclxuICAgKiBAcGFyYW0gcmVzdWx0XHJcbiAgICovXHJcbiAgZmluaXNoQ29uZmlybWF0aW9uKHN0eWxlOiBTdHlsZXMsIHJlc3VsdDogYm9vbGVhbiApIHtcclxuICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJjb25maXJtYXRpb25DbG9zZWRcIiwgbnVsbCwgMCk7XHJcbiAgICBndWlFdmVudC5rZXlDb2RlID0gPG51bWJlcj5jb25maXJtYXRpb25Cb3guY29udmVydFRvRXhjcGVjdGVkUmVzdWx0Qm94KHN0eWxlLCByZXN1bHQpO1xyXG4gICAgdGhpcy5lbmdpbmVNYWdpY1NlcnZpY2UuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY3JlYXRlcyBhIG1vZGFsIGNvbXBvbmVudC4gQ2FuIGJlIHVzZWQgZm9yIG92ZXJsYXksIG1lc3NhZ2UgYm94IG9yIGNvbmZpcm1hdGlvbiBib3hcclxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBjb21wb25lbnQncyBwYXJhbWV0ZXJzXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudCBjb21wb25lbnRzIHRvIGNyZWF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlTW9kYWxDb21wb25lbnQocGFyYW1ldGVyczogYW55LCBjb21wb25lbnQ6IENvbXBvbmVudCwgb3ZlcmxheVR5cGU6IE92ZXJsYXlUeXBlKTogQ29tcG9uZW50UmVmPGFueT4ge1xyXG4gICAgbGV0IGNvbXBvbmVudFJlZjtcclxuICAgIGxldCBtYWdpY01vZGFsQ29udGFpbmVyUGFyYW1ldGVycyA9IHtcclxuICAgICAgQ29tcG9uZW50OiBjb21wb25lbnQsXHJcbiAgICAgIFBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXHJcbiAgICAgIE92ZXJsYXlUeXBlUGFyYW06IG92ZXJsYXlUeXBlXHJcblxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIFVJIGNvbXBvbmVudCBvZiBtb2RhbCB3aW5kb3dcclxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNYWdpY092ZXJsYXlDb250YWluZXJXcmFwcGVyKTtcclxuICAgIGxldCB2aWV3Q1JlZiA6IFZpZXdDb250YWluZXJSZWYgPSA8Vmlld0NvbnRhaW5lclJlZj50aGlzLm92ZXJsYXlXaW5kb3dzQ29udGFpbmVyVmlld1JlZjtcclxuICAgIGNvbXBvbmVudFJlZiA9IHZpZXdDUmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGRhdGEgdG8gbmV3bHkgY3JlYXRlZCBjb21wb25lbnRcclxuICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlLCBtYWdpY01vZGFsQ29udGFpbmVyUGFyYW1ldGVycyk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5V2luZG93Rm9jdXNNYW5hZ2VyLnB1c2hEaWFsb2coY29tcG9uZW50UmVmLmluc3RhbmNlLkdldFJvb3RFbGVtZW50KCkpO1xyXG5cclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5EZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIE92ZXJsYXlXaW5kb3dGb2N1c01hbmFnZXJcclxue1xyXG4gIHByaXZhdGUgcm9vdE1hZ2ljRWxlbWVudDogRWxlbWVudCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBvcGVuRGlhbG9nTGlzdDogQXJyYXk8RGlhbG9nSW5mbz4gPSBuZXcgQXJyYXkoMCk7XHJcbiAgcHJpdmF0ZSBpZ25vcmVVdGlsRm9jdXNDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBsYXN0Rm9jdXMgPSBudWxsO1xyXG4gIHByaXZhdGUgZm9jdXNMaXN0ZW5lciA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yIChyb290TWFnaWNFbGVtZW50OiBFbGVtZW50KSB7XHJcbiAgICB0aGlzLnJvb3RNYWdpY0VsZW1lbnQgPSByb290TWFnaWNFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHVzaERpYWxvZyhyb290RWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLm9wZW5EaWFsb2dMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmZvY3VzTGlzdGVuZXIgPSB0aGlzLnRyYXBGb2N1cy5iaW5kKHRoaXMpO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZm9jdXNMaXN0ZW5lciwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vcGVuRGlhbG9nTGlzdC5wdXNoKG5ldyBEaWFsb2dJbmZvKHJvb3RFbGVtZW50LCAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gPEhUTUxFbGVtZW50PmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgOiBudWxsKSkpO1xyXG4gIH1cclxuXHJcbiAgcG9wRGlhbG9nKCkge1xyXG4gICAgY29uc3QgZGlhbG9nSW5mbyA9IHRoaXMub3BlbkRpYWxvZ0xpc3QucG9wKCk7XHJcbiAgICB0aGlzLmF0dGVtcHRGb2N1cyhkaWFsb2dJbmZvLkZvY3VzRWxlbWVudE9uQ2xvc2UpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wZW5EaWFsb2dMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZm9jdXNMaXN0ZW5lciwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZm9jdXNMaXN0ZW5lciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFwRm9jdXMgKGV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pZ25vcmVVdGlsRm9jdXNDaGFuZ2VzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcGVuRGlhbG9nTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHZhciBjdXJyZW50RGlhbG9nID0gdGhpcy5vcGVuRGlhbG9nTGlzdFt0aGlzLm9wZW5EaWFsb2dMaXN0Lmxlbmd0aCAtIDFdLlJvb3RFbGVtZW50O1xyXG4gICAgICBpZiAoY3VycmVudERpYWxvZy5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0Rm9jdXMgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vdE1hZ2ljRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgICAgICB0aGlzLmZvY3VzRmlyc3REZXNjZW5kYW50KGN1cnJlbnREaWFsb2cpO1xyXG4gICAgICAgICAgaWYgKHRoaXMubGFzdEZvY3VzID09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0xhc3REZXNjZW5kYW50KGN1cnJlbnREaWFsb2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNGaXJzdERlc2NlbmRhbnQgKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBjaGlsZCA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcclxuICAgICAgaWYgKHRoaXMuYXR0ZW1wdEZvY3VzKGNoaWxkKSB8fFxyXG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdERlc2NlbmRhbnQoY2hpbGQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZvY3VzTGFzdERlc2NlbmRhbnQgKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgdmFyIGNoaWxkID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xyXG4gICAgICBpZiAodGhpcy5hdHRlbXB0Rm9jdXMoY2hpbGQpIHx8XHJcbiAgICAgICAgdGhpcy5mb2N1c0xhc3REZXNjZW5kYW50KGNoaWxkKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBhdHRlbXB0Rm9jdXMgKGVsZW1lbnQpIHtcclxuICAgIGlmICghdGhpcy5pc0ZvY3VzYWJsZShlbGVtZW50KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pZ25vcmVVdGlsRm9jdXNDaGFuZ2VzID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlnbm9yZVV0aWxGb2N1c0NoYW5nZXMgPSBmYWxzZTtcclxuICAgIHJldHVybiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWxlbWVudCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBpc0ZvY3VzYWJsZSAoZWxlbWVudCkge1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGVsZW1lbnQpKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQudGFiSW5kZXggPiAwIHx8IChlbGVtZW50LnRhYkluZGV4ID09PSAwICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJJbmRleCcpICE9PSBudWxsKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVsZW1lbnQudGFiSW5kZXggPCAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAoZWxlbWVudC5ub2RlTmFtZSkge1xyXG4gICAgICBjYXNlICdBJzpcclxuICAgICAgICByZXR1cm4gISFlbGVtZW50LmhyZWYgJiYgZWxlbWVudC5yZWwgIT0gJ2lnbm9yZSc7XHJcbiAgICAgIGNhc2UgJ0lOUFVUJzpcclxuICAgICAgICByZXR1cm4gZWxlbWVudC50eXBlICE9ICdoaWRkZW4nICYmIGVsZW1lbnQudHlwZSAhPSAnZmlsZSc7XHJcbiAgICAgIGNhc2UgJ0JVVFRPTic6XHJcbiAgICAgIGNhc2UgJ1NFTEVDVCc6XHJcbiAgICAgIGNhc2UgJ1RFWFRBUkVBJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBEaWFsb2dJbmZvXHJcbntcclxuICBwcml2YXRlIHJvb3RFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIGZvY3VzRWxlbWVudE9uQ2xvc2U6IEhUTUxFbGVtZW50O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihyb290RWxlbWVudDogSFRNTEVsZW1lbnQsIGZvY3VzRWxlbWVudE9uQ2xvc2U6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XHJcbiAgICB0aGlzLmZvY3VzRWxlbWVudE9uQ2xvc2UgPSBmb2N1c0VsZW1lbnRPbkNsb3NlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFJvb3RFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcclxuICAgIHJldHVybiB0aGlzLnJvb3RFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0IEZvY3VzRWxlbWVudE9uQ2xvc2UoKTogSFRNTEVsZW1lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNFbGVtZW50T25DbG9zZTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { MagicProperties } from "@magic-xpa/utils";
2
+ import { NString, isNullOrUndefined } from "@magic-xpa/mscorelib";
3
+ export class StylesMapManager {
4
+ static magicValueGetStyle(styleName, magicValue) {
5
+ let style = "";
6
+ if (!isNullOrUndefined(magicValue)) {
7
+ let value = StylesMapManager.StylesMap.get(styleName);
8
+ if (value.constructor === Map) {
9
+ style = value.get(magicValue);
10
+ }
11
+ else if (value.constructor === String) {
12
+ style = NString.Format(value.toString(), magicValue);
13
+ }
14
+ }
15
+ return style;
16
+ }
17
+ }
18
+ StylesMapManager.StylesMap = new Map([
19
+ [MagicProperties.LineDivider, new Map([[true, "solid"], [false, "hidden"]])],
20
+ [MagicProperties.ImageFile, "url('\{0}\')"],
21
+ [MagicProperties.Wallpaper, "url('\{0}\')"]
22
+ ]);
23
+ StylesMapManager.MagicPropertyToHtmlAttributeMap = new Map([
24
+ [MagicProperties.LineDivider, "border-bottom-style"],
25
+ [MagicProperties.ImageFile, "background-image"],
26
+ [MagicProperties.Wallpaper, "background-image"]
27
+ ]);
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3R5bGVzTWFwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3NlcnZpY2VzL1N0eWxlc01hcE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQTtBQUsvRCxNQUFNLE9BQU8sZ0JBQWdCO0lBaUIzQixNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBaUIsRUFBRSxVQUFlO1FBQzFELElBQUksS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssR0FBRyxFQUFFO2dCQUM3QixLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMvQjtpQkFDSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO2dCQUNyQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7QUE5Qk0sMEJBQVMsR0FBcUIsSUFBSSxHQUFHLENBQzFDO0lBQ0UsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7SUFDM0MsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQztDQUM1QyxDQUNGLENBQUM7QUFFSyxnREFBK0IsR0FBd0IsSUFBSSxHQUFHLENBQ25FO0lBQ0UsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLHFCQUFxQixDQUFDO0lBQ3BELENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQztJQUMvQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUM7Q0FDaEQsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYWdpY1Byb3BlcnRpZXN9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCJcclxuaW1wb3J0IHtOU3RyaW5nLCBpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCJcclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3R5bGVzTWFwTWFuYWdlciB7XHJcbiAgc3RhdGljIFN0eWxlc01hcDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KFxyXG4gICAgW1xyXG4gICAgICBbTWFnaWNQcm9wZXJ0aWVzLkxpbmVEaXZpZGVyLCBuZXcgTWFwPGFueSwgYW55PihbW3RydWUsIFwic29saWRcIl0sIFtmYWxzZSwgXCJoaWRkZW5cIl1dKV0sXHJcbiAgICAgIFtNYWdpY1Byb3BlcnRpZXMuSW1hZ2VGaWxlLCBcInVybCgnXFx7MH1cXCcpXCJdLFxyXG4gICAgICBbTWFnaWNQcm9wZXJ0aWVzLldhbGxwYXBlciwgXCJ1cmwoJ1xcezB9XFwnKVwiXVxyXG4gICAgXVxyXG4gICk7XHJcblxyXG4gIHN0YXRpYyBNYWdpY1Byb3BlcnR5VG9IdG1sQXR0cmlidXRlTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oXHJcbiAgICBbXHJcbiAgICAgIFtNYWdpY1Byb3BlcnRpZXMuTGluZURpdmlkZXIsIFwiYm9yZGVyLWJvdHRvbS1zdHlsZVwiXSxcclxuICAgICAgW01hZ2ljUHJvcGVydGllcy5JbWFnZUZpbGUsIFwiYmFja2dyb3VuZC1pbWFnZVwiXSxcclxuICAgICAgW01hZ2ljUHJvcGVydGllcy5XYWxscGFwZXIsIFwiYmFja2dyb3VuZC1pbWFnZVwiXVxyXG4gICAgXVxyXG4gICk7XHJcblxyXG4gIHN0YXRpYyBtYWdpY1ZhbHVlR2V0U3R5bGUoc3R5bGVOYW1lOiBzdHJpbmcsIG1hZ2ljVmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3R5bGU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChtYWdpY1ZhbHVlKSkge1xyXG4gICAgICBsZXQgdmFsdWUgPSBTdHlsZXNNYXBNYW5hZ2VyLlN0eWxlc01hcC5nZXQoc3R5bGVOYW1lKTtcclxuICAgICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yID09PSBNYXApIHtcclxuICAgICAgICBzdHlsZSA9IHZhbHVlLmdldChtYWdpY1ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XHJcbiAgICAgICAgc3R5bGUgPSBOU3RyaW5nLkZvcm1hdCh2YWx1ZS50b1N0cmluZygpLCBtYWdpY1ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHlsZTtcclxuICB9XHJcbn1cclxuIl19