@simpleangularcontrols/sac-common 10.0.0-rc.11 → 10.0.0-rc.13
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/bundles/simpleangularcontrols-sac-common.umd.js +1425 -1088
- package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
- package/common/basedatetimecontrol.d.ts +99 -13
- package/common/basemodelcontrol.d.ts +33 -29
- package/controls/checkbox/radiobutton.d.ts +61 -26
- package/controls/contextmenu/contextmenu.d.ts +26 -19
- package/controls/contextmenu/contextmenu.interface.d.ts +3 -0
- package/controls/contextmenu/contextmenuitem.d.ts +5 -0
- package/controls/contextmenu/contextmenuitembutton.d.ts +21 -20
- package/controls/datetime/date.d.ts +28 -27
- package/controls/datetime/datetime.d.ts +27 -27
- package/controls/datetime/time.d.ts +26 -26
- package/controls/dialog/dialog.d.ts +31 -43
- package/controls/layout/formlayout.d.ts +4 -0
- package/controls/list/buildvaluestring.d.ts +6 -0
- package/controls/list/dropdown.d.ts +9 -51
- package/controls/list/dropdownoptions.d.ts +38 -0
- package/controls/list/dropdownoptions.ngfactory.d.ts +1 -0
- package/controls/static/formcontainer.d.ts +11 -3
- package/controls/tooltip/tooltip.d.ts +33 -51
- package/controls/treeview/treeview.d.ts +87 -121
- package/esm2015/common/basedatetimecontrol.js +178 -30
- package/esm2015/common/basemodelcontrol.js +71 -56
- package/esm2015/controls/checkbox/radiobutton.js +94 -45
- package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -0
- package/esm2015/controls/contextmenu/contextmenu.interface.ngfactory.js +7 -0
- package/esm2015/controls/contextmenu/contextmenu.js +22 -23
- package/esm2015/controls/contextmenu/contextmenuitem.js +13 -2
- package/esm2015/controls/contextmenu/contextmenuitembutton.js +34 -25
- package/esm2015/controls/datetime/date.js +43 -41
- package/esm2015/controls/datetime/datetime.js +42 -41
- package/esm2015/controls/datetime/time.js +42 -41
- package/esm2015/controls/dialog/dialog.js +41 -83
- package/esm2015/controls/layout/formlayout.js +7 -6
- package/esm2015/controls/list/buildvaluestring.js +18 -0
- package/esm2015/controls/{treeview/ngtreeitemaction.ngfactory.js → list/buildvaluestring.ngfactory.js} +1 -1
- package/esm2015/controls/list/dropdown.js +16 -114
- package/esm2015/controls/list/dropdownoptions.js +72 -0
- package/esm2015/controls/{treeview/treeviewchild.ngfactory.js → list/dropdownoptions.ngfactory.js} +1 -1
- package/esm2015/controls/static/formcontainer.js +16 -6
- package/esm2015/controls/tooltip/tooltip.js +60 -250
- package/esm2015/controls/treeview/treeview.js +232 -247
- package/esm2015/interfaces/ISacConfigurationService.js +1 -1
- package/esm2015/interfaces/ISacIconService.js +1 -1
- package/esm2015/interfaces/treeviewaction.interface.js +1 -0
- package/esm2015/interfaces/treeviewaction.interface.ngfactory.js +7 -0
- package/esm2015/public_api.js +6 -6
- package/esm2015/services/sac-configuration.service.js +7 -5
- package/esm2015/services/sac-icon.service.js +25 -1
- package/esm2015/utilities/enums.js +5 -1
- package/esm2015/utilities/popuphelper.js +343 -0
- package/esm2015/utilities/popuphelper.ngfactory.js +7 -0
- package/esm2015/validation/equals.validator.js +14 -0
- package/esm2015/validation/equals.validator.ngfactory.js +7 -0
- package/esm2015/validation/notequals.validator.js +14 -0
- package/esm2015/validation/notequals.validator.ngfactory.js +7 -0
- package/esm2015/validation/validation.class.js +30 -6
- package/fesm2015/simpleangularcontrols-sac-common.js +1398 -1075
- package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
- package/interfaces/ISacConfigurationService.d.ts +4 -0
- package/interfaces/ISacIconService.d.ts +16 -0
- package/interfaces/treeviewaction.interface.d.ts +4 -0
- package/interfaces/treeviewaction.interface.ngfactory.d.ts +1 -0
- package/package.json +1 -1
- package/public_api.d.ts +5 -5
- package/services/sac-configuration.service.d.ts +8 -0
- package/services/sac-icon.service.d.ts +33 -1
- package/simpleangularcontrols-sac-common-10.0.0-rc.13.tgz +0 -0
- package/simpleangularcontrols-sac-common.metadata.json +1 -1
- package/utilities/enums.d.ts +3 -1
- package/utilities/popuphelper.d.ts +83 -0
- package/utilities/popuphelper.ngfactory.d.ts +1 -0
- package/validation/equals.validator.d.ts +2 -0
- package/validation/equals.validator.ngfactory.d.ts +1 -0
- package/validation/notequals.validator.d.ts +2 -0
- package/validation/notequals.validator.ngfactory.d.ts +1 -0
- package/validation/validation.class.d.ts +19 -0
- package/controls/treeview/ngtreeitemaction.d.ts +0 -40
- package/controls/treeview/treeviewchild.d.ts +0 -12
- package/esm2015/controls/treeview/ngtreeitemaction.js +0 -60
- package/esm2015/controls/treeview/treeviewchild.js +0 -18
- package/simpleangularcontrols-sac-common-10.0.0-rc.11.tgz +0 -0
- /package/controls/{treeview/ngtreeitemaction.ngfactory.d.ts → contextmenu/contextmenu.interface.ngfactory.d.ts} +0 -0
- /package/controls/{treeview/treeviewchild.ngfactory.d.ts → list/buildvaluestring.ngfactory.d.ts} +0 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { TooltipPosition } from './enums';
|
|
2
|
+
export class PopUpHelper {
|
|
3
|
+
// #region Public Methods
|
|
4
|
+
getContainerHeight(referenceContainer, referenceIsContainer) {
|
|
5
|
+
if (referenceContainer) {
|
|
6
|
+
return referenceIsContainer
|
|
7
|
+
? referenceContainer.nativeElement.firstElementChild.clientHeight
|
|
8
|
+
: referenceContainer.nativeElement.offsetHeight;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
getContainerWidth(referenceContainer, referenceIsContainer) {
|
|
15
|
+
if (referenceContainer) {
|
|
16
|
+
return referenceIsContainer
|
|
17
|
+
? referenceContainer.nativeElement.firstElementChild.clientWidth
|
|
18
|
+
: referenceContainer.nativeElement.offsetWidth;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get Position who the popup would be positioned
|
|
26
|
+
*
|
|
27
|
+
* @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
|
|
28
|
+
* @param popupcontentcontainer Element Reference to container of popup
|
|
29
|
+
* @param popupOffset Offset for popup positioning
|
|
30
|
+
* @param allowedPositions Allowed Positions for the popup
|
|
31
|
+
* @returns Returns the position where the popup should be displayed
|
|
32
|
+
*/
|
|
33
|
+
getDisplayPosition(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, allowedPositions, referenceIsContainer) {
|
|
34
|
+
const validPositions = this.validatePositions(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, referenceIsContainer);
|
|
35
|
+
// tslint:disable-next-line:no-bitwise
|
|
36
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.right) && validPositions & TooltipPosition.right) {
|
|
37
|
+
return TooltipPosition.right;
|
|
38
|
+
}
|
|
39
|
+
// tslint:disable-next-line:no-bitwise
|
|
40
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.top) && validPositions & TooltipPosition.top) {
|
|
41
|
+
return TooltipPosition.top;
|
|
42
|
+
}
|
|
43
|
+
// tslint:disable-next-line:no-bitwise
|
|
44
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.left) && validPositions & TooltipPosition.left) {
|
|
45
|
+
return TooltipPosition.left;
|
|
46
|
+
}
|
|
47
|
+
// tslint:disable-next-line:no-bitwise
|
|
48
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.bottom) && validPositions & TooltipPosition.bottom) {
|
|
49
|
+
return TooltipPosition.bottom;
|
|
50
|
+
}
|
|
51
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.topend) && validPositions & TooltipPosition.topend) {
|
|
52
|
+
return TooltipPosition.topend;
|
|
53
|
+
}
|
|
54
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.bottomend) &&
|
|
55
|
+
validPositions & TooltipPosition.bottomend) {
|
|
56
|
+
return TooltipPosition.bottomend;
|
|
57
|
+
}
|
|
58
|
+
// Get Auto Position or Default
|
|
59
|
+
if (this.isAutoPosition(allowedPositions)) {
|
|
60
|
+
// tslint:disable-next-line:no-bitwise
|
|
61
|
+
if (validPositions & TooltipPosition.right) {
|
|
62
|
+
return TooltipPosition.right;
|
|
63
|
+
}
|
|
64
|
+
// tslint:disable-next-line:no-bitwise
|
|
65
|
+
if (validPositions & TooltipPosition.top) {
|
|
66
|
+
return TooltipPosition.top;
|
|
67
|
+
}
|
|
68
|
+
// tslint:disable-next-line:no-bitwise
|
|
69
|
+
if (validPositions & TooltipPosition.left) {
|
|
70
|
+
return TooltipPosition.left;
|
|
71
|
+
}
|
|
72
|
+
// tslint:disable-next-line:no-bitwise
|
|
73
|
+
if (validPositions & TooltipPosition.bottom) {
|
|
74
|
+
return TooltipPosition.bottom;
|
|
75
|
+
}
|
|
76
|
+
return TooltipPosition.right;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return this.getPosition(allowedPositions);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Calculates the height of the popup
|
|
84
|
+
*
|
|
85
|
+
* @param container Element Reference to container of popup
|
|
86
|
+
*/
|
|
87
|
+
getPopupHeight(container) {
|
|
88
|
+
var _a;
|
|
89
|
+
if (container) {
|
|
90
|
+
return (_a = container.nativeElement.firstElementChild.clientHeight) !== null && _a !== void 0 ? _a : 0;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Calculates the width of the popup
|
|
98
|
+
*
|
|
99
|
+
* @param container Element Reference to container of popup
|
|
100
|
+
*/
|
|
101
|
+
getPopupWidth(container) {
|
|
102
|
+
if (container) {
|
|
103
|
+
return container.nativeElement.firstElementChild.clientWidth;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return 0;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Returns the defined position for the tooltip
|
|
111
|
+
*
|
|
112
|
+
* @param allowedPositions Allowed positions defined in markup for popup
|
|
113
|
+
*/
|
|
114
|
+
getPosition(allowedPositions) {
|
|
115
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.left)) {
|
|
116
|
+
return TooltipPosition.left;
|
|
117
|
+
}
|
|
118
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.top)) {
|
|
119
|
+
return TooltipPosition.top;
|
|
120
|
+
}
|
|
121
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.right)) {
|
|
122
|
+
return TooltipPosition.right;
|
|
123
|
+
}
|
|
124
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.bottom)) {
|
|
125
|
+
return TooltipPosition.bottom;
|
|
126
|
+
}
|
|
127
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.topend)) {
|
|
128
|
+
return TooltipPosition.topend;
|
|
129
|
+
}
|
|
130
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.bottomend)) {
|
|
131
|
+
return TooltipPosition.bottomend;
|
|
132
|
+
}
|
|
133
|
+
// Default Position if empty
|
|
134
|
+
return TooltipPosition.right;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Calculates the position of the tooltip from links
|
|
138
|
+
*
|
|
139
|
+
* @param controlReference Element Reference to angular component
|
|
140
|
+
* @param popupContainer Element Reference to container of popup
|
|
141
|
+
* @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
|
|
142
|
+
* @param popupOffset Offset for popup positioning
|
|
143
|
+
* @param requestedPosition Requested Position by Control
|
|
144
|
+
*/
|
|
145
|
+
getPositionLeft(referenceContainer, popupContainer, controlReference, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer) {
|
|
146
|
+
if (referenceContainer !== null && referenceContainer !== undefined) {
|
|
147
|
+
const item = referenceContainer.nativeElement;
|
|
148
|
+
if (item.children.length >= 1) {
|
|
149
|
+
const childItem = referenceIsContainer ? item.firstElementChild : item;
|
|
150
|
+
const contentPosition = childItem.getBoundingClientRect();
|
|
151
|
+
switch (this.getDisplayPosition(referenceContainer, popupContainer, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer)) {
|
|
152
|
+
case TooltipPosition.top:
|
|
153
|
+
case TooltipPosition.bottom:
|
|
154
|
+
return (contentPosition.left + contentPosition.width / 2 - this.getPopupWidth(popupContainer) / 2);
|
|
155
|
+
case TooltipPosition.topend:
|
|
156
|
+
case TooltipPosition.bottomend:
|
|
157
|
+
return contentPosition.left + contentPosition.width - this.getPopupWidth(popupContainer);
|
|
158
|
+
case TooltipPosition.right:
|
|
159
|
+
return contentPosition.left + contentPosition.width + arrowWidth / 2;
|
|
160
|
+
case TooltipPosition.left:
|
|
161
|
+
return contentPosition.left - this.getPopupWidth(popupContainer) + (arrowWidth / 2) * -1;
|
|
162
|
+
}
|
|
163
|
+
return referenceContainer.nativeElement.offsetTop;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
return referenceContainer.nativeElement.offsetTop;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
return controlReference.nativeElement.offsetLeft;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Calculates the position of the tooltip from the top
|
|
175
|
+
*
|
|
176
|
+
* @param controlReference Element Reference to angular component
|
|
177
|
+
* @param popupContainer Element Reference to container of popup
|
|
178
|
+
* @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
|
|
179
|
+
* @param popupOffset Offset for popup positioning
|
|
180
|
+
* @param requestedPosition Requested Position by Control
|
|
181
|
+
*/
|
|
182
|
+
getPositionTop(referenceContainer, popupContainer, controlReference, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer) {
|
|
183
|
+
if (referenceContainer !== null && referenceContainer !== undefined) {
|
|
184
|
+
const item = referenceContainer.nativeElement;
|
|
185
|
+
if (item.children.length >= 1) {
|
|
186
|
+
const childItem = referenceIsContainer ? item.firstElementChild : item;
|
|
187
|
+
const contentPosition = childItem.getBoundingClientRect();
|
|
188
|
+
// Get Position with Scroll (Scrollbars inside page should be substracted)
|
|
189
|
+
const contentPositionTop = childItem.offsetTop +
|
|
190
|
+
this.getOffsetTopParent(childItem.offsetParent) +
|
|
191
|
+
this.getScrollTopParent(childItem.parentElement);
|
|
192
|
+
switch (this.getDisplayPosition(referenceContainer, popupContainer, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer)) {
|
|
193
|
+
case TooltipPosition.top:
|
|
194
|
+
case TooltipPosition.topend:
|
|
195
|
+
return contentPositionTop - this.getPopupHeight(popupContainer) + (arrowHeight / 2) * -1;
|
|
196
|
+
case TooltipPosition.right:
|
|
197
|
+
case TooltipPosition.left:
|
|
198
|
+
return (contentPositionTop + contentPosition.height / 2 - this.getPopupHeight(popupContainer) / 2);
|
|
199
|
+
case TooltipPosition.bottom:
|
|
200
|
+
case TooltipPosition.bottomend:
|
|
201
|
+
return contentPositionTop + contentPosition.height + arrowHeight / 2;
|
|
202
|
+
}
|
|
203
|
+
return (childItem.clientTop +
|
|
204
|
+
childItem.offsetTop -
|
|
205
|
+
(this.getPopupHeight(popupContainer) / 2 - childItem.offsetHeight / 2));
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
return referenceContainer.nativeElement.offsetTop;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
return controlReference.nativeElement.offsetTop;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Returns whether the position has been configured
|
|
217
|
+
*
|
|
218
|
+
* @param allowedPositions Positions that allowed by control
|
|
219
|
+
* @param requestedPosition Position to be checked
|
|
220
|
+
*/
|
|
221
|
+
hasPosition(allowedPositions, requestedPosition) {
|
|
222
|
+
const positions = allowedPositions.split('|');
|
|
223
|
+
if (requestedPosition === TooltipPosition.right && positions.indexOf('right') >= 0) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
if (requestedPosition === TooltipPosition.top && positions.indexOf('top') >= 0) {
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
if (requestedPosition === TooltipPosition.left && positions.indexOf('left') >= 0) {
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
if (requestedPosition === TooltipPosition.bottom && positions.indexOf('bottom') >= 0) {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
if (requestedPosition === TooltipPosition.topend && positions.indexOf('topend') >= 0) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
if (requestedPosition === TooltipPosition.bottomend && positions.indexOf('bottomend') >= 0) {
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Defines whether AutoPosition is active
|
|
245
|
+
* @param positionProperty List of allowed positions
|
|
246
|
+
*/
|
|
247
|
+
isAutoPosition(positionProperty) {
|
|
248
|
+
const positions = positionProperty.split('|');
|
|
249
|
+
return positions.indexOf('auto') >= 0;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Checks whether the position is valid or whether the tooltip on the position has space
|
|
253
|
+
*/
|
|
254
|
+
validatePositions(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, referenceIsContainer) {
|
|
255
|
+
// Check if Container is false
|
|
256
|
+
if (popupcontentcontainer === undefined) {
|
|
257
|
+
return TooltipPosition.right;
|
|
258
|
+
}
|
|
259
|
+
let allowedPositions = TooltipPosition.none;
|
|
260
|
+
const basePosition = referenceIsContainer
|
|
261
|
+
? referenceContainer.nativeElement.firstElementChild.getBoundingClientRect()
|
|
262
|
+
: referenceContainer.nativeElement.getBoundingClientRect();
|
|
263
|
+
const tooltipRect = popupcontentcontainer.nativeElement.firstElementChild.getBoundingClientRect();
|
|
264
|
+
const leftPosOk = basePosition.left - tooltipRect.width + arrowWidth * -1 > 0;
|
|
265
|
+
const rightPosOk = basePosition.right + tooltipRect.width + arrowWidth < window.innerWidth;
|
|
266
|
+
const topPosOk = basePosition.top - tooltipRect.height + arrowHeight > 0;
|
|
267
|
+
const bottomPosOk = basePosition.bottom + tooltipRect.height + arrowHeight < window.innerHeight;
|
|
268
|
+
const leftHalfPosOk = basePosition.left - tooltipRect.width / 2 > 0;
|
|
269
|
+
const rightHalfPosOk = basePosition.right + tooltipRect.width / 2 < window.innerWidth;
|
|
270
|
+
const topHalfPosOk = basePosition.top - tooltipRect.height / 2 > 0;
|
|
271
|
+
const bottomHalfPosOk = basePosition.bottom + tooltipRect.height / 2 < window.innerHeight;
|
|
272
|
+
if (leftPosOk && topPosOk) {
|
|
273
|
+
// tslint:disable-next-line:no-bitwise
|
|
274
|
+
allowedPositions = allowedPositions | TooltipPosition.topend;
|
|
275
|
+
}
|
|
276
|
+
if (leftPosOk && bottomPosOk) {
|
|
277
|
+
// tslint:disable-next-line:no-bitwise
|
|
278
|
+
allowedPositions = allowedPositions | TooltipPosition.bottomend;
|
|
279
|
+
}
|
|
280
|
+
if (leftPosOk && topHalfPosOk && bottomHalfPosOk) {
|
|
281
|
+
// tslint:disable-next-line:no-bitwise
|
|
282
|
+
allowedPositions = allowedPositions | TooltipPosition.left;
|
|
283
|
+
}
|
|
284
|
+
if (rightPosOk && topHalfPosOk && bottomHalfPosOk) {
|
|
285
|
+
// tslint:disable-next-line:no-bitwise
|
|
286
|
+
allowedPositions = allowedPositions | TooltipPosition.right;
|
|
287
|
+
}
|
|
288
|
+
if (topPosOk && leftHalfPosOk && rightHalfPosOk) {
|
|
289
|
+
// tslint:disable-next-line:no-bitwise
|
|
290
|
+
allowedPositions = allowedPositions | TooltipPosition.top;
|
|
291
|
+
}
|
|
292
|
+
if (bottomPosOk && leftHalfPosOk && rightHalfPosOk) {
|
|
293
|
+
// tslint:disable-next-line:no-bitwise
|
|
294
|
+
allowedPositions = allowedPositions | TooltipPosition.bottom;
|
|
295
|
+
}
|
|
296
|
+
return allowedPositions;
|
|
297
|
+
}
|
|
298
|
+
// #endregion Public Methods
|
|
299
|
+
// #region Private Methods
|
|
300
|
+
/**
|
|
301
|
+
* Calculates the top of the page inside all elements
|
|
302
|
+
* @param element HTML Element
|
|
303
|
+
* @returns summarized top value for absolute position
|
|
304
|
+
*/
|
|
305
|
+
getOffsetTopParent(element) {
|
|
306
|
+
if (element === null) {
|
|
307
|
+
return 0;
|
|
308
|
+
}
|
|
309
|
+
if (!element.offsetParent) {
|
|
310
|
+
return element.offsetTop;
|
|
311
|
+
}
|
|
312
|
+
const parentValue = this.getOffsetTopParent(element.offsetParent);
|
|
313
|
+
let offset = element.offsetTop;
|
|
314
|
+
return parentValue + offset;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Caclulate Scrollbars inside tree
|
|
318
|
+
* @param element HTML Element
|
|
319
|
+
* @param [isFixed=false] Invert Scroll Position value when style is fixed to preserve negative values
|
|
320
|
+
* @returns Scroll top value of element with all childs
|
|
321
|
+
*/
|
|
322
|
+
getScrollTopParent(element, isFixed = false) {
|
|
323
|
+
if (element === null) {
|
|
324
|
+
return 0;
|
|
325
|
+
}
|
|
326
|
+
// Body Scroll should not be calculated
|
|
327
|
+
if (!element.parentElement) {
|
|
328
|
+
return isFixed ? element.scrollTop : 0;
|
|
329
|
+
}
|
|
330
|
+
let isCurrentFixed = false;
|
|
331
|
+
if (window.getComputedStyle(element).getPropertyValue('position') === 'fixed') {
|
|
332
|
+
isCurrentFixed = true;
|
|
333
|
+
}
|
|
334
|
+
const parentValue = this.getScrollTopParent(element.parentElement, isFixed || isCurrentFixed);
|
|
335
|
+
if (isFixed) {
|
|
336
|
+
return parentValue + element.scrollTop;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
return parentValue + element.scrollTop * -1;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXBoZWxwZXIuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsidXRpbGl0aWVzL3BvcHVwaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHMUMsTUFBTSxPQUFPLFdBQVc7SUFDcEIseUJBQXlCO0lBRWxCLGtCQUFrQixDQUFDLGtCQUEyQyxFQUFFLG9CQUE2QjtRQUNoRyxJQUFJLGtCQUFrQixFQUFFO1lBQ3BCLE9BQU8sb0JBQW9CO2dCQUN2QixDQUFDLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ2pFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1NBQ3ZEO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVNLGlCQUFpQixDQUFDLGtCQUEyQyxFQUFFLG9CQUE2QjtRQUMvRixJQUFJLGtCQUFrQixFQUFFO1lBQ3BCLE9BQU8sb0JBQW9CO2dCQUN2QixDQUFDLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7Z0JBQ2hFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1NBQ3REO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksa0JBQWtCLENBQ3JCLGtCQUEyQyxFQUMzQyxxQkFBOEMsRUFDOUMsVUFBa0IsRUFDbEIsV0FBbUIsRUFDbkIsZ0JBQXdCLEVBQ3hCLG9CQUE2QjtRQUU3QixNQUFNLGNBQWMsR0FBb0IsSUFBSSxDQUFDLGlCQUFpQixDQUMxRCxrQkFBa0IsRUFDbEIscUJB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QUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxZQUEyQixDQUFDLENBQUM7UUFDakYsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUMvQixPQUFPLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssa0JBQWtCLENBQUMsT0FBb0IsRUFBRSxPQUFPLEdBQUcsS0FBSztRQUM1RCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDbEIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUVELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUN4QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO1FBRUQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtZQUMzRSxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxJQUFJLGNBQWMsQ0FBQyxDQUFDO1FBRTlGLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUMxQzthQUFNO1lBQ0gsT0FBTyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wVXBIZWxwZXIge1xyXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAgIHB1YmxpYyBnZXRDb250YWluZXJIZWlnaHQocmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChyZWZlcmVuY2VDb250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUlzQ29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICA/IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb250YWluZXJXaWR0aChyZWZlcmVuY2VDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlSXNDb250YWluZXJcclxuICAgICAgICAgICAgICAgID8gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuY2xpZW50V2lkdGhcclxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFBvc2l0aW9uIHdobyB0aGUgcG9wdXAgd291bGQgYmUgcG9zaXRpb25lZFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gSFRNTCBFbGVtZW50IHdoaWNoIGlzIHRoZSByZWZlcmVuY2UgdG8gcG9zaXRpb25pbmcgdGhlIHBvcHVwXHJcbiAgICAgKiBAcGFyYW0gcG9wdXBjb250ZW50Y29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxyXG4gICAgICogQHBhcmFtIHBvcHVwT2Zmc2V0IE9mZnNldCBmb3IgcG9wdXAgcG9zaXRpb25pbmdcclxuICAgICAqIEBwYXJhbSBhbGxvd2VkUG9zaXRpb25zIEFsbG93ZWQgUG9zaXRpb25zIGZvciB0aGUgcG9wdXBcclxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBwb3B1cCBzaG91bGQgYmUgZGlzcGxheWVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXREaXNwbGF5UG9zaXRpb24oXHJcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICBwb3B1cGNvbnRlbnRjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgICAgIGFycm93V2lkdGg6IG51bWJlcixcclxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxyXG4gICAgICAgIGFsbG93ZWRQb3NpdGlvbnM6IHN0cmluZyxcclxuICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhblxyXG4gICAgKTogVG9vbHRpcFBvc2l0aW9uIHtcclxuICAgICAgICBjb25zdCB2YWxpZFBvc2l0aW9uczogVG9vbHRpcFBvc2l0aW9uID0gdGhpcy52YWxpZGF0ZVBvc2l0aW9ucyhcclxuICAgICAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyLFxyXG4gICAgICAgICAgICBwb3B1cGNvbnRlbnRjb250YWluZXIsXHJcbiAgICAgICAgICAgIGFycm93V2lkdGgsXHJcbiAgICAgICAgICAgIGFycm93SGVpZ2h0LFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0KSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcclxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi50b3A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkgJiYgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24uYm90dG9tKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZCkgJiYgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24udG9wZW5kKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wZW5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQpICYmXHJcbiAgICAgICAgICAgIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEdldCBBdXRvIFBvc2l0aW9uIG9yIERlZmF1bHRcclxuICAgICAgICBpZiAodGhpcy5pc0F1dG9Qb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zKSkge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgICAgICBpZiAodmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24ucmlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgICAgICBpZiAodmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24ubGVmdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5sZWZ0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgICAgICBpZiAodmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24uYm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLmJvdHRvbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHBvcHVwXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBjb250YWluZXIgb2YgcG9wdXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFBvcHVwSGVpZ2h0KGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodCA/PyAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHdpZHRoIG9mIHRoZSBwb3B1cFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQb3B1cFdpZHRoKGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudFdpZHRoO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGRlZmluZWQgcG9zaXRpb24gZm9yIHRoZSB0b29sdGlwXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgQWxsb3dlZCBwb3NpdGlvbnMgZGVmaW5lZCBpbiBtYXJrdXAgZm9yIHBvcHVwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcpOiBUb29sdGlwUG9zaXRpb24ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLmxlZnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlZmF1bHQgUG9zaXRpb24gaWYgZW1wdHlcclxuICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSBsaW5rc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250cm9sUmVmZXJlbmNlIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGFuZ3VsYXIgY29tcG9uZW50XHJcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXHJcbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlQ29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIEhUTUwgRWxlbWVudCB3aGljaCBpcyB0aGUgcmVmZXJlbmNlIHRvIHBvc2l0aW9uaW5nIHRoZSBwb3B1cFxyXG4gICAgICogQHBhcmFtIHBvcHVwT2Zmc2V0IE9mZnNldCBmb3IgcG9wdXAgcG9zaXRpb25pbmdcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UG9zaXRpb25MZWZ0KFxyXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICAgICAgcG9wdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgICAgIGNvbnRyb2xSZWZlcmVuY2U6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxyXG4gICAgICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXHJcbiAgICAgICAgcmVxdWVzdGVkUG9zaXRpb246IHN0cmluZyxcclxuICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhblxyXG4gICAgKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAocmVmZXJlbmNlQ29udGFpbmVyICE9PSBudWxsICYmIHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb246IERPTVJlY3QgPSBjaGlsZEl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3BsYXlQb3NpdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b206XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UG9zaXRpb24ubGVmdCArIGNvbnRlbnRQb3NpdGlvbi53aWR0aCAvIDIgLSB0aGlzLmdldFBvcHVwV2lkdGgocG9wdXBDb250YWluZXIpIC8gMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24ubGVmdCArIGNvbnRlbnRQb3NpdGlvbi53aWR0aCAtIHRoaXMuZ2V0UG9wdXBXaWR0aChwb3B1cENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24ubGVmdCArIGNvbnRlbnRQb3NpdGlvbi53aWR0aCArIGFycm93V2lkdGggLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmxlZnQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24ubGVmdCAtIHRoaXMuZ2V0UG9wdXBXaWR0aChwb3B1cENvbnRhaW5lcikgKyAoYXJyb3dXaWR0aCAvIDIpICogLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udHJvbFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSB0aGUgdG9wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gYW5ndWxhciBjb21wb25lbnRcclxuICAgICAqIEBwYXJhbSBwb3B1cENvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBjb250YWluZXIgb2YgcG9wdXBcclxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gSFRNTCBFbGVtZW50IHdoaWNoIGlzIHRoZSByZWZlcmVuY2UgdG8gcG9zaXRpb25pbmcgdGhlIHBvcHVwXHJcbiAgICAgKiBAcGFyYW0gcG9wdXBPZmZzZXQgT2Zmc2V0IGZvciBwb3B1cCBwb3NpdGlvbmluZ1xyXG4gICAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIFJlcXVlc3RlZCBQb3NpdGlvbiBieSBDb250cm9sXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQb3NpdGlvblRvcChcclxuICAgICAgICByZWZlcmVuY2VDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgICAgIHBvcHVwQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICBjb250cm9sUmVmZXJlbmNlOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIGFycm93V2lkdGg6IG51bWJlcixcclxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxyXG4gICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uOiBzdHJpbmcsXHJcbiAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW5cclxuICAgICk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gbnVsbCAmJiByZWZlcmVuY2VDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb246IERPTVJlY3QgPSBjaGlsZEl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gR2V0IFBvc2l0aW9uIHdpdGggU2Nyb2xsIChTY3JvbGxiYXJzIGluc2lkZSBwYWdlIHNob3VsZCBiZSBzdWJzdHJhY3RlZClcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRQb3NpdGlvblRvcCA9XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRJdGVtLm9mZnNldFRvcCArXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPZmZzZXRUb3BQYXJlbnQoY2hpbGRJdGVtLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCkgK1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Nyb2xsVG9wUGFyZW50KGNoaWxkSXRlbS5wYXJlbnRFbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGlzcGxheVBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJvd1dpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJvd0hlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvblRvcCAtIHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpICsgKGFycm93SGVpZ2h0IC8gMikgKiAtMTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5yaWdodDpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5sZWZ0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uVG9wICsgY29udGVudFBvc2l0aW9uLmhlaWdodCAvIDIgLSB0aGlzLmdldFBvcHVwSGVpZ2h0KHBvcHVwQ29udGFpbmVyKSAvIDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b206XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uVG9wICsgY29udGVudFBvc2l0aW9uLmhlaWdodCArIGFycm93SGVpZ2h0IC8gMjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkSXRlbS5jbGllbnRUb3AgK1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkSXRlbS5vZmZzZXRUb3AgLVxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmdldFBvcHVwSGVpZ2h0KHBvcHVwQ29udGFpbmVyKSAvIDIgLSBjaGlsZEl0ZW0ub2Zmc2V0SGVpZ2h0IC8gMilcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwb3NpdGlvbiBoYXMgYmVlbiBjb25maWd1cmVkXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgUG9zaXRpb25zIHRoYXQgYWxsb3dlZCBieSBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdGVkUG9zaXRpb24gUG9zaXRpb24gdG8gYmUgY2hlY2tlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9uczogc3RyaW5nLCByZXF1ZXN0ZWRQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gYWxsb3dlZFBvc2l0aW9ucy5zcGxpdCgnfCcpO1xyXG5cclxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5yaWdodCAmJiBwb3NpdGlvbnMuaW5kZXhPZigncmlnaHQnKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24udG9wICYmIHBvc2l0aW9ucy5pbmRleE9mKCd0b3AnKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24ubGVmdCAmJiBwb3NpdGlvbnMuaW5kZXhPZignbGVmdCcpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5ib3R0b20gJiYgcG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi50b3BlbmQgJiYgcG9zaXRpb25zLmluZGV4T2YoJ3RvcGVuZCcpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRQb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZCAmJiBwb3NpdGlvbnMuaW5kZXhPZignYm90dG9tZW5kJykgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgd2hldGhlciBBdXRvUG9zaXRpb24gaXMgYWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25Qcm9wZXJ0eSBMaXN0IG9mIGFsbG93ZWQgcG9zaXRpb25zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0F1dG9Qb3NpdGlvbihwb3NpdGlvblByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBwb3NpdGlvblByb3BlcnR5LnNwbGl0KCd8Jyk7XHJcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9ucy5pbmRleE9mKCdhdXRvJykgPj0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBwb3NpdGlvbiBpcyB2YWxpZCBvciB3aGV0aGVyIHRoZSB0b29sdGlwIG9uIHRoZSBwb3NpdGlvbiBoYXMgc3BhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRlUG9zaXRpb25zKFxyXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICAgICAgcG9wdXBjb250ZW50Y29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICBhcnJvd1dpZHRoOiBudW1iZXIsXHJcbiAgICAgICAgYXJyb3dIZWlnaHQ6IG51bWJlcixcclxuICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhblxyXG4gICAgKTogVG9vbHRpcFBvc2l0aW9uIHtcclxuICAgICAgICAvLyBDaGVjayBpZiBDb250YWluZXIgaXMgZmFsc2VcclxuICAgICAgICBpZiAocG9wdXBjb250ZW50Y29udGFpbmVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhbGxvd2VkUG9zaXRpb25zOiBUb29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24ubm9uZTtcclxuICAgICAgICBjb25zdCBiYXNlUG9zaXRpb246IERPTVJlY3QgPSByZWZlcmVuY2VJc0NvbnRhaW5lclxyXG4gICAgICAgICAgICA/IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcbiAgICAgICAgICAgIDogcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcFJlY3Q6IERPTVJlY3QgPSBwb3B1cGNvbnRlbnRjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGVmdFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLmxlZnQgLSB0b29sdGlwUmVjdC53aWR0aCArIGFycm93V2lkdGggKiAtMSA+IDA7XHJcbiAgICAgICAgY29uc3QgcmlnaHRQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5yaWdodCArIHRvb2x0aXBSZWN0LndpZHRoICsgYXJyb3dXaWR0aCA8IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGNvbnN0IHRvcFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnRvcCAtIHRvb2x0aXBSZWN0LmhlaWdodCArIGFycm93SGVpZ2h0ID4gMDtcclxuICAgICAgICBjb25zdCBib3R0b21Qb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCA8IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgICAgY29uc3QgbGVmdEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5sZWZ0IC0gdG9vbHRpcFJlY3Qud2lkdGggLyAyID4gMDtcclxuICAgICAgICBjb25zdCByaWdodEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5yaWdodCArIHRvb2x0aXBSZWN0LndpZHRoIC8gMiA8IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGNvbnN0IHRvcEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi50b3AgLSB0b29sdGlwUmVjdC5oZWlnaHQgLyAyID4gMDtcclxuICAgICAgICBjb25zdCBib3R0b21IYWxmUG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24uYm90dG9tICsgdG9vbHRpcFJlY3QuaGVpZ2h0IC8gMiA8IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKGxlZnRQb3NPayAmJiB0b3BQb3NPaykge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgICAgICBhbGxvd2VkUG9zaXRpb25zID0gYWxsb3dlZFBvc2l0aW9ucyB8IFRvb2x0aXBQb3NpdGlvbi50b3BlbmQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobGVmdFBvc09rICYmIGJvdHRvbVBvc09rKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsZWZ0UG9zT2sgJiYgdG9wSGFsZlBvc09rICYmIGJvdHRvbUhhbGZQb3NPaykge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgICAgICBhbGxvd2VkUG9zaXRpb25zID0gYWxsb3dlZFBvc2l0aW9ucyB8IFRvb2x0aXBQb3NpdGlvbi5sZWZ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJpZ2h0UG9zT2sgJiYgdG9wSGFsZlBvc09rICYmIGJvdHRvbUhhbGZQb3NPaykge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgICAgICBhbGxvd2VkUG9zaXRpb25zID0gYWxsb3dlZFBvc2l0aW9ucyB8IFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0b3BQb3NPayAmJiBsZWZ0SGFsZlBvc09rICYmIHJpZ2h0SGFsZlBvc09rKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChib3R0b21Qb3NPayAmJiBsZWZ0SGFsZlBvc09rICYmIHJpZ2h0SGFsZlBvc09rKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhbGxvd2VkUG9zaXRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdG9wIG9mIHRoZSBwYWdlIGluc2lkZSBhbGwgZWxlbWVudHNcclxuICAgICAqIEBwYXJhbSBlbGVtZW50IEhUTUwgRWxlbWVudFxyXG4gICAgICogQHJldHVybnMgc3VtbWFyaXplZCB0b3AgdmFsdWUgZm9yIGFic29sdXRlIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0T2Zmc2V0VG9wUGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudC5vZmZzZXRQYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLmdldE9mZnNldFRvcFBhcmVudChlbGVtZW50Lm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIG9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhY2x1bGF0ZSBTY3JvbGxiYXJzIGluc2lkZSB0cmVlXHJcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBIVE1MIEVsZW1lbnRcclxuICAgICAqIEBwYXJhbSBbaXNGaXhlZD1mYWxzZV0gSW52ZXJ0IFNjcm9sbCBQb3NpdGlvbiB2YWx1ZSB3aGVuIHN0eWxlIGlzIGZpeGVkIHRvIHByZXNlcnZlIG5lZ2F0aXZlIHZhbHVlc1xyXG4gICAgICogQHJldHVybnMgU2Nyb2xsIHRvcCB2YWx1ZSBvZiBlbGVtZW50IHdpdGggYWxsIGNoaWxkc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgaXNGaXhlZCA9IGZhbHNlKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJvZHkgU2Nyb2xsIHNob3VsZCBub3QgYmUgY2FsY3VsYXRlZFxyXG4gICAgICAgIGlmICghZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0ZpeGVkID8gZWxlbWVudC5zY3JvbGxUb3AgOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGlzQ3VycmVudEZpeGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcclxuICAgICAgICAgICAgaXNDdXJyZW50Rml4ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQsIGlzRml4ZWQgfHwgaXNDdXJyZW50Rml4ZWQpO1xyXG5cclxuICAgICAgICBpZiAoaXNGaXhlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsdWUgKyBlbGVtZW50LnNjcm9sbFRvcDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsdWUgKyBlbGVtZW50LnNjcm9sbFRvcCAqIC0xO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
|
|
3
|
+
*
|
|
4
|
+
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
|
|
5
|
+
* tslint:disable
|
|
6
|
+
*/
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXBoZWxwZXIubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2pla3RlL3NpbXBsZWFuZ3VsYXJjb250cm9scy1uZzEwL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy9wb3B1cGhlbHBlci5uZ2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGkwIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaTAuQ29tcG9uZW50RmFjdG9yeTtcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CreateValidationError } from './validationerrorcreator';
|
|
2
|
+
export function equalsValueValidator(requiredvalue, validationMessage, validationMessageSummary) {
|
|
3
|
+
return (control) => {
|
|
4
|
+
if (control.value !== requiredvalue) {
|
|
5
|
+
const parameters = new Map();
|
|
6
|
+
parameters.set('EQUALSVALUE', requiredvalue);
|
|
7
|
+
return CreateValidationError('equals', validationMessage, validationMessageSummary, parameters);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWxzLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ2YWxpZGF0aW9uL2VxdWFscy52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakUsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxhQUFrQixFQUNsQixpQkFBeUIsRUFDekIsd0JBQWdDO0lBRWhDLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1FBQzNELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxhQUFhLEVBQUU7WUFDbkMsTUFBTSxVQUFVLEdBQXFCLElBQUksR0FBRyxFQUFlLENBQUM7WUFDNUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFFN0MsT0FBTyxxQkFBcUIsQ0FDMUIsUUFBUSxFQUNSLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsVUFBVSxDQUNYLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDcmVhdGVWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL3ZhbGlkYXRpb25lcnJvcmNyZWF0b3InO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsc1ZhbHVlVmFsaWRhdG9yKFxyXG4gIHJlcXVpcmVkdmFsdWU6IGFueSxcclxuICB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nLFxyXG4gIHZhbGlkYXRpb25NZXNzYWdlU3VtbWFyeTogc3RyaW5nXHJcbik6IFZhbGlkYXRvckZuIHtcclxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgIGlmIChjb250cm9sLnZhbHVlICE9PSByZXF1aXJlZHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG4gICAgICBwYXJhbWV0ZXJzLnNldCgnRVFVQUxTVkFMVUUnLCByZXF1aXJlZHZhbHVlKTtcclxuXHJcbiAgICAgIHJldHVybiBDcmVhdGVWYWxpZGF0aW9uRXJyb3IoXHJcbiAgICAgICAgJ2VxdWFscycsXHJcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UsXHJcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VTdW1tYXJ5LFxyXG4gICAgICAgIHBhcmFtZXRlcnNcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
|
|
3
|
+
*
|
|
4
|
+
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
|
|
5
|
+
* tslint:disable
|
|
6
|
+
*/
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWxzLnZhbGlkYXRvci5uZ2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi9lcXVhbHMudmFsaWRhdG9yLm5nZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pMC5Db21wb25lbnRGYWN0b3J5O1xuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CreateValidationError } from './validationerrorcreator';
|
|
2
|
+
export function notEqualsValueValidator(invalidValue, validationMessage, validationMessageSummary) {
|
|
3
|
+
return (control) => {
|
|
4
|
+
if (control.value === invalidValue) {
|
|
5
|
+
const parameters = new Map();
|
|
6
|
+
parameters.set('EQUALSVALUE', invalidValue);
|
|
7
|
+
return CreateValidationError('notequals', validationMessage, validationMessageSummary, parameters);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZXF1YWxzLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ2YWxpZGF0aW9uL25vdGVxdWFscy52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakUsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxZQUFpQixFQUNqQixpQkFBeUIsRUFDekIsd0JBQWdDO0lBRWhDLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1FBQzNELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxZQUFZLEVBQUU7WUFDbEMsTUFBTSxVQUFVLEdBQXFCLElBQUksR0FBRyxFQUFlLENBQUM7WUFDNUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFNUMsT0FBTyxxQkFBcUIsQ0FDMUIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsVUFBVSxDQUNYLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDcmVhdGVWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL3ZhbGlkYXRpb25lcnJvcmNyZWF0b3InO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5vdEVxdWFsc1ZhbHVlVmFsaWRhdG9yKFxyXG4gIGludmFsaWRWYWx1ZTogYW55LFxyXG4gIHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcsXHJcbiAgdmFsaWRhdGlvbk1lc3NhZ2VTdW1tYXJ5OiBzdHJpbmdcclxuKTogVmFsaWRhdG9yRm4ge1xyXG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IGludmFsaWRWYWx1ZSkge1xyXG4gICAgICBjb25zdCBwYXJhbWV0ZXJzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICAgICAgcGFyYW1ldGVycy5zZXQoJ0VRVUFMU1ZBTFVFJywgaW52YWxpZFZhbHVlKTtcclxuXHJcbiAgICAgIHJldHVybiBDcmVhdGVWYWxpZGF0aW9uRXJyb3IoXHJcbiAgICAgICAgJ25vdGVxdWFscycsXHJcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UsXHJcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VTdW1tYXJ5LFxyXG4gICAgICAgIHBhcmFtZXRlcnNcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
|
|
3
|
+
*
|
|
4
|
+
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
|
|
5
|
+
* tslint:disable
|
|
6
|
+
*/
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZXF1YWxzLnZhbGlkYXRvci5uZ2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi9ub3RlcXVhbHMudmFsaWRhdG9yLm5nZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pMC5Db21wb25lbnRGYWN0b3J5O1xuIl19
|