@schneideress/dashboardframework 0.0.71 → 0.0.73

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 (113) hide show
  1. package/README.md +24 -24
  2. package/bundles/schneideress-dashboardframework.umd.js +6997 -6992
  3. package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
  4. package/bundles/schneideress-dashboardframework.umd.min.js +1 -1
  5. package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
  6. package/esm2015/gridster/index.js +18 -18
  7. package/esm2015/gridster/lib/gridster.component.js +700 -700
  8. package/esm2015/gridster/lib/gridster.interface.js +84 -84
  9. package/esm2015/gridster/lib/gridster.module.js +27 -27
  10. package/esm2015/gridster/lib/gridsterCompact.service.js +223 -223
  11. package/esm2015/gridster/lib/gridsterConfig.constant.js +179 -179
  12. package/esm2015/gridster/lib/gridsterConfig.interface.js +219 -219
  13. package/esm2015/gridster/lib/gridsterConfigS.interface.js +161 -161
  14. package/esm2015/gridster/lib/gridsterDraggable.service.js +510 -510
  15. package/esm2015/gridster/lib/gridsterEmptyCell.service.js +317 -317
  16. package/esm2015/gridster/lib/gridsterItem.component.js +213 -213
  17. package/esm2015/gridster/lib/gridsterItem.interface.js +46 -46
  18. package/esm2015/gridster/lib/gridsterItemComponent.interface.js +48 -48
  19. package/esm2015/gridster/lib/gridsterPreview.component.js +66 -66
  20. package/esm2015/gridster/lib/gridsterPush.service.js +467 -467
  21. package/esm2015/gridster/lib/gridsterPushResize.service.js +358 -358
  22. package/esm2015/gridster/lib/gridsterRenderer.service.js +277 -277
  23. package/esm2015/gridster/lib/gridsterResizable.service.js +552 -552
  24. package/esm2015/gridster/lib/gridsterResizeEventType.interface.js +19 -19
  25. package/esm2015/gridster/lib/gridsterScroll.service.js +195 -195
  26. package/esm2015/gridster/lib/gridsterSwap.service.js +134 -134
  27. package/esm2015/gridster/lib/gridsterUtils.service.js +137 -137
  28. package/esm2015/lib/custom.notifier.options.js +46 -46
  29. package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +494 -494
  30. package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +461 -456
  31. package/esm2015/lib/ra.base.dashboard.filter.js +75 -75
  32. package/esm2015/lib/ra.base.dashboard.template.js +71 -71
  33. package/esm2015/lib/ra.dashbard.event.bus.js +85 -85
  34. package/esm2015/lib/ra.dashboard.module.js +49 -49
  35. package/esm2015/lib/ra.dashboard.service.js +144 -144
  36. package/esm2015/lib/ra.event.enum.js +51 -51
  37. package/esm2015/lib/ra.gridster.config.js +67 -67
  38. package/esm2015/public-api.js +16 -16
  39. package/esm2015/schneideress-dashboardframework.js +13 -13
  40. package/esm5/gridster/index.js +18 -18
  41. package/esm5/gridster/lib/gridster.component.js +803 -803
  42. package/esm5/gridster/lib/gridster.interface.js +94 -94
  43. package/esm5/gridster/lib/gridster.module.js +31 -31
  44. package/esm5/gridster/lib/gridsterCompact.service.js +253 -253
  45. package/esm5/gridster/lib/gridsterConfig.constant.js +179 -179
  46. package/esm5/gridster/lib/gridsterConfig.interface.js +219 -219
  47. package/esm5/gridster/lib/gridsterConfigS.interface.js +161 -161
  48. package/esm5/gridster/lib/gridsterDraggable.service.js +549 -549
  49. package/esm5/gridster/lib/gridsterEmptyCell.service.js +358 -358
  50. package/esm5/gridster/lib/gridsterItem.component.js +238 -238
  51. package/esm5/gridster/lib/gridsterItem.interface.js +46 -46
  52. package/esm5/gridster/lib/gridsterItemComponent.interface.js +58 -58
  53. package/esm5/gridster/lib/gridsterPreview.component.js +70 -70
  54. package/esm5/gridster/lib/gridsterPush.service.js +547 -547
  55. package/esm5/gridster/lib/gridsterPushResize.service.js +423 -423
  56. package/esm5/gridster/lib/gridsterRenderer.service.js +323 -323
  57. package/esm5/gridster/lib/gridsterResizable.service.js +629 -629
  58. package/esm5/gridster/lib/gridsterResizeEventType.interface.js +19 -19
  59. package/esm5/gridster/lib/gridsterScroll.service.js +195 -195
  60. package/esm5/gridster/lib/gridsterSwap.service.js +152 -152
  61. package/esm5/gridster/lib/gridsterUtils.service.js +177 -177
  62. package/esm5/lib/custom.notifier.options.js +46 -46
  63. package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +586 -586
  64. package/esm5/lib/ra-widget-container/ra.widget.container.component.js +574 -569
  65. package/esm5/lib/ra.base.dashboard.filter.js +81 -81
  66. package/esm5/lib/ra.base.dashboard.template.js +74 -74
  67. package/esm5/lib/ra.dashbard.event.bus.js +125 -125
  68. package/esm5/lib/ra.dashboard.module.js +53 -53
  69. package/esm5/lib/ra.dashboard.service.js +221 -221
  70. package/esm5/lib/ra.event.enum.js +51 -51
  71. package/esm5/lib/ra.gridster.config.js +67 -67
  72. package/esm5/public-api.js +16 -16
  73. package/esm5/schneideress-dashboardframework.js +13 -13
  74. package/fesm2015/schneideress-dashboardframework.js +6104 -6099
  75. package/fesm2015/schneideress-dashboardframework.js.map +1 -1
  76. package/fesm5/schneideress-dashboardframework.js +7001 -6996
  77. package/fesm5/schneideress-dashboardframework.js.map +1 -1
  78. package/gridster/index.d.ts +11 -11
  79. package/gridster/lib/gridster.component.d.ts +67 -67
  80. package/gridster/lib/gridster.interface.d.ts +46 -46
  81. package/gridster/lib/gridster.module.d.ts +2 -2
  82. package/gridster/lib/gridsterCompact.service.d.ts +15 -15
  83. package/gridster/lib/gridsterConfig.constant.d.ts +2 -2
  84. package/gridster/lib/gridsterConfig.interface.d.ts +133 -133
  85. package/gridster/lib/gridsterConfigS.interface.d.ts +93 -93
  86. package/gridster/lib/gridsterDraggable.service.d.ts +59 -59
  87. package/gridster/lib/gridsterEmptyCell.service.d.ts +29 -29
  88. package/gridster/lib/gridsterItem.component.d.ts +32 -32
  89. package/gridster/lib/gridsterItem.interface.d.ts +21 -21
  90. package/gridster/lib/gridsterItemComponent.interface.d.ts +25 -25
  91. package/gridster/lib/gridsterPreview.component.d.ts +10 -10
  92. package/gridster/lib/gridsterPush.service.d.ts +33 -33
  93. package/gridster/lib/gridsterPushResize.service.d.ts +26 -26
  94. package/gridster/lib/gridsterRenderer.service.d.ts +38 -38
  95. package/gridster/lib/gridsterResizable.service.d.ts +67 -67
  96. package/gridster/lib/gridsterResizeEventType.interface.d.ts +6 -6
  97. package/gridster/lib/gridsterScroll.service.d.ts +4 -4
  98. package/gridster/lib/gridsterSwap.service.d.ts +13 -13
  99. package/gridster/lib/gridsterUtils.service.d.ts +16 -16
  100. package/lib/custom.notifier.options.d.ts +2 -2
  101. package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +64 -64
  102. package/lib/ra-widget-container/ra.widget.container.component.d.ts +63 -63
  103. package/lib/ra.base.dashboard.filter.d.ts +10 -10
  104. package/lib/ra.base.dashboard.template.d.ts +15 -15
  105. package/lib/ra.dashbard.event.bus.d.ts +20 -20
  106. package/lib/ra.dashboard.module.d.ts +2 -2
  107. package/lib/ra.dashboard.service.d.ts +22 -22
  108. package/lib/ra.event.enum.d.ts +42 -42
  109. package/lib/ra.gridster.config.d.ts +2 -2
  110. package/package.json +1 -1
  111. package/public-api.d.ts +8 -8
  112. package/schneideress-dashboardframework.d.ts +9 -9
  113. package/schneideress-dashboardframework.metadata.json +1 -1
@@ -1,586 +1,586 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { Input, Component, NgZone } from '@angular/core';
6
- import { RaDashboardService } from '../ra.dashboard.service';
7
- import { RADashboardEventBus } from '../ra.dashbard.event.bus';
8
- import { RAEvent } from '../ra.event.enum';
9
- import { GridsterConfigDefaultSettings } from '../ra.gridster.config';
10
- import { NgxUiLoaderService } from 'ngx-ui-loader';
11
- import { NotifierService } from 'angular-notifier';
12
- import { RATranslateService } from '@schneideress/ra-common';
13
- var RADashboardArea = /** @class */ (function () {
14
- function RADashboardArea(dashboardService, ngZone, ngxService, translateService, notifier) {
15
- this.dashboardService = dashboardService;
16
- this.ngZone = ngZone;
17
- this.ngxService = ngxService;
18
- this.translateService = translateService;
19
- this.notifier = notifier;
20
- this.widgetList = Array();
21
- this.gridheight = 300;
22
- this.isWidgetLoaded = false;
23
- this.widgetHeight = 3;
24
- this.widgetWidth = 5;
25
- }
26
- /**
27
- * @return {?}
28
- */
29
- RADashboardArea.prototype.ngOnInit = /**
30
- * @return {?}
31
- */
32
- function () {
33
- this.initiateGridsterConfig();
34
- };
35
- /**
36
- * @param {?} changes
37
- * @return {?}
38
- */
39
- RADashboardArea.prototype.ngOnChanges = /**
40
- * @param {?} changes
41
- * @return {?}
42
- */
43
- function (changes) {
44
- if (this.raDashboardEventBus && this.appConfig && !this.isWidgetLoaded) {
45
- this.isWidgetLoaded = true;
46
- this.loadWidgets(this.userDashboardId, this.areaKey);
47
- }
48
- if (changes.raDashboardEventBus && changes.raDashboardEventBus.currentValue != changes.raDashboardEventBus.previousValue) {
49
- this.inititateEventBusSubscritions();
50
- }
51
- };
52
- /**To set GridsterConfig */
53
- /**
54
- * To set GridsterConfig
55
- * @return {?}
56
- */
57
- RADashboardArea.prototype.initiateGridsterConfig = /**
58
- * To set GridsterConfig
59
- * @return {?}
60
- */
61
- function () {
62
- /** @type {?} */
63
- var areaContext = this;
64
- /**To override default configuration values to the gridster control */
65
- this.options = GridsterConfigDefaultSettings;
66
- this.options.itemChangeCallback = (/**
67
- * @param {?} item
68
- * @return {?}
69
- */
70
- function (item) {
71
- areaContext.setAreaHeight();
72
- areaContext.updateWidgets();
73
- });
74
- };
75
- /** To initiate eventbus subsctiptions */
76
- /**
77
- * To initiate eventbus subsctiptions
78
- * @return {?}
79
- */
80
- RADashboardArea.prototype.inititateEventBusSubscritions = /**
81
- * To initiate eventbus subsctiptions
82
- * @return {?}
83
- */
84
- function () {
85
- var _this = this;
86
- this.widgetDeleteEvent = this.raDashboardEventBus.subscribe(RAEvent.WidgetDelete).subscribe((/**
87
- * @param {?} instanceId
88
- * @return {?}
89
- */
90
- function (instanceId) {
91
- _this.ngZone.run((/**
92
- * @return {?}
93
- */
94
- function () {
95
- _this.deleteWidget(instanceId, true);
96
- }));
97
- }));
98
- this.widgetAddEvent = this.raDashboardEventBus.subscribe(RAEvent.AddWidget).subscribe((/**
99
- * @param {?} widgetInfo
100
- * @return {?}
101
- */
102
- function (widgetInfo) {
103
- _this.ngZone.run((/**
104
- * @return {?}
105
- */
106
- function () {
107
- _this.copyWidget(widgetInfo);
108
- }));
109
- }));
110
- this.conifgAddClick = this.raDashboardEventBus.subscribe(RAEvent.ConfigAddClick).subscribe((/**
111
- * @param {?} e
112
- * @return {?}
113
- */
114
- function (e) {
115
- _this.ngZone.run((/**
116
- * @return {?}
117
- */
118
- function () {
119
- _this.addWidget(e);
120
- }));
121
- }));
122
- this.widgetLibraryDoneClick = this.raDashboardEventBus.subscribe(RAEvent.widgetLibraryDoneClick).subscribe((/**
123
- * @param {?} widgetList
124
- * @return {?}
125
- */
126
- function (widgetList) {
127
- _this.ngZone.run((/**
128
- * @return {?}
129
- */
130
- function () {
131
- if (widgetList) {
132
- // widgetList.forEach(widgetInfo => {
133
- // this.addWidget(widgetInfo);
134
- // });
135
- _this.addWidgetListToGridster(widgetList, 0);
136
- }
137
- }));
138
- }));
139
- };
140
- /**
141
- * temp fix- recursive method to iterate over the list of items
142
- * and add them to gridster in the given order
143
- * @param widgetList -list of widgets
144
- * @param index -index of the current value to be added
145
- */
146
- /**
147
- * temp fix- recursive method to iterate over the list of items
148
- * and add them to gridster in the given order
149
- * @param {?} widgetList -list of widgets
150
- * @param {?} index -index of the current value to be added
151
- * @return {?}
152
- */
153
- RADashboardArea.prototype.addWidgetListToGridster = /**
154
- * temp fix- recursive method to iterate over the list of items
155
- * and add them to gridster in the given order
156
- * @param {?} widgetList -list of widgets
157
- * @param {?} index -index of the current value to be added
158
- * @return {?}
159
- */
160
- function (widgetList, index) {
161
- /** @type {?} */
162
- var areaContext = this;
163
- /** @type {?} */
164
- var indexVal = index + 1;
165
- if (index > widgetList.length - 1)
166
- return;
167
- else {
168
- if (index == 0) {
169
- areaContext.addWidget(widgetList[index]);
170
- areaContext.addWidgetListToGridster(widgetList, indexVal);
171
- }
172
- else {
173
- setTimeout((/**
174
- * @return {?}
175
- */
176
- function () {
177
- areaContext.addWidget(widgetList[index]);
178
- areaContext.addWidgetListToGridster(widgetList, indexVal);
179
- }), 1000);
180
- }
181
- }
182
- };
183
- /**
184
- * @return {?}
185
- */
186
- RADashboardArea.prototype.ngOnDestroy = /**
187
- * @return {?}
188
- */
189
- function () {
190
- if (this.conifgAddClick)
191
- this.conifgAddClick.unsubscribe();
192
- if (this.widgetAddEvent)
193
- this.widgetAddEvent.unsubscribe();
194
- if (this.widgetDeleteEvent)
195
- this.widgetDeleteEvent.unsubscribe();
196
- if (this.widgetLibraryDoneClick)
197
- this.widgetLibraryDoneClick.unsubscribe();
198
- };
199
- /**To update position/dimention of all widgets in the area */
200
- /**
201
- * To update position/dimention of all widgets in the area
202
- * @return {?}
203
- */
204
- RADashboardArea.prototype.updateWidgets = /**
205
- * To update position/dimention of all widgets in the area
206
- * @return {?}
207
- */
208
- function () {
209
- this.dashboardService.updateWidgets(this.mapGridsterListToObject(this.widgetList), this.appConfig).subscribe((/**
210
- * @param {?} widgets
211
- * @return {?}
212
- */
213
- function (widgets) {
214
- }));
215
- return true;
216
- };
217
- /** To retrieve widgets based on userDashboardid and area name */
218
- /**
219
- * To retrieve widgets based on userDashboardid and area name
220
- * @param {?} userDashboarId
221
- * @param {?} areaKey
222
- * @return {?}
223
- */
224
- RADashboardArea.prototype.loadWidgets = /**
225
- * To retrieve widgets based on userDashboardid and area name
226
- * @param {?} userDashboarId
227
- * @param {?} areaKey
228
- * @return {?}
229
- */
230
- function (userDashboarId, areaKey) {
231
- var _this = this;
232
- /** @type {?} */
233
- var areaContext = this;
234
- /** @type {?} */
235
- var widgetInfo = (/** @type {?} */ ({
236
- dashboardId: userDashboarId.toString(),
237
- dashboardAreaKey: areaKey
238
- }));
239
- areaContext.widgetList = [];
240
- this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe((/**
241
- * @param {?} widgets
242
- * @return {?}
243
- */
244
- function (widgets) {
245
- if (widgets && widgets.length > 0) {
246
- areaContext.widgetList = _this.mapObjectListToGridsterItemList(widgets);
247
- areaContext.setAreaHeight();
248
- }
249
- }));
250
- };
251
- /** To set Area(Gridster) height dynamically as widgets are added/removed */
252
- /**
253
- * To set Area(Gridster) height dynamically as widgets are added/removed
254
- * @return {?}
255
- */
256
- RADashboardArea.prototype.setAreaHeight = /**
257
- * To set Area(Gridster) height dynamically as widgets are added/removed
258
- * @return {?}
259
- */
260
- function () {
261
- var _this = this;
262
- /** @type {?} */
263
- var areaScrollHeight = 0;
264
- /** @type {?} */
265
- var areaHeight = 0;
266
- /** @type {?} */
267
- var curRowHeight = 0;
268
- if (this.options.api) {
269
- curRowHeight = this.options.api.getCurrentRowHeight();
270
- }
271
- this.widgetList.forEach((/**
272
- * @param {?} t
273
- * @return {?}
274
- */
275
- function (t) {
276
- /** @type {?} */
277
- var currentHeight = t.y + t.rows;
278
- if (currentHeight > areaScrollHeight) {
279
- areaScrollHeight = currentHeight;
280
- }
281
- if (curRowHeight == 0) {
282
- currentHeight = _this.widgetList[0].curRowHeight;
283
- }
284
- t.widgetInfo.rowHeight = curRowHeight;
285
- }));
286
- if (this.options.api) {
287
- areaHeight = areaScrollHeight * this.options.api.getCurrentRowHeight() + 150;
288
- }
289
- if (areaHeight < 600) {
290
- areaHeight = 600;
291
- }
292
- this.gridheight = areaHeight;
293
- };
294
- /** To remove a widget instance from dashboard and to save info in database */
295
- /**
296
- * To remove a widget instance from dashboard and to save info in database
297
- * @param {?} widgetInstanceId
298
- * @param {?=} isalertDisabled
299
- * @return {?}
300
- */
301
- RADashboardArea.prototype.deleteWidget = /**
302
- * To remove a widget instance from dashboard and to save info in database
303
- * @param {?} widgetInstanceId
304
- * @param {?=} isalertDisabled
305
- * @return {?}
306
- */
307
- function (widgetInstanceId, isalertDisabled) {
308
- if (isalertDisabled === void 0) { isalertDisabled = false; }
309
- /** @type {?} */
310
- var widget = this.widgetList.filter((/**
311
- * @param {?} item
312
- * @return {?}
313
- */
314
- function (item) {
315
- return item.widgetInfo.widgetInstanceId === widgetInstanceId;
316
- }));
317
- if (widget.length > 0) {
318
- this.widgetList.splice(this.widgetList.indexOf(widget[0]), 1);
319
- this.setAreaHeight();
320
- if (!isalertDisabled) {
321
- this.notifier.notify('success', " " + this.translateService.translate('Widget') + " " + widget[0].widgetInfo.widgetTitle + " " + this.translateService.translate('DeletedSuccesfully') + " ");
322
- }
323
- this.options.compactType = 'compactLeft&Up';
324
- this.options.api.optionsChanged();
325
- this.options.compactType = 'none';
326
- this.options.api.optionsChanged();
327
- }
328
- };
329
- /**To add widget instance to the database with the next available position and to make changes in
330
- * dashboard area.
331
- */
332
- /**
333
- * To add widget instance to the database with the next available position and to make changes in
334
- * dashboard area.
335
- * @param {?} data
336
- * @return {?}
337
- */
338
- RADashboardArea.prototype.addWidget = /**
339
- * To add widget instance to the database with the next available position and to make changes in
340
- * dashboard area.
341
- * @param {?} data
342
- * @return {?}
343
- */
344
- function (data) {
345
- var _this = this;
346
- /** @type {?} */
347
- var widgetid = data.widgetId;
348
- data.height = this.widgetHeight;
349
- data.width = this.widgetWidth;
350
- data.position_x = 0;
351
- data.position_y = 0;
352
- /** @type {?} */
353
- var gridsterItem = this.mapObjectsToGridsterItem(data);
354
- /** to find the available position in gridster, temp commenting the code-returning higher y value than normal */
355
- // if (this.options.api) {
356
- // gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
357
- // }
358
- // data.position_x = gridsterItem.x;
359
- // data.position_y = gridsterItem.y;
360
- data.dashboardAreaKey = this.areaKey;
361
- data.dashboardId = this.userDashboardId;
362
- this.ngxService.start();
363
- this.dashboardService.addWidget(data, this.appConfig).subscribe((/**
364
- * @param {?} widget
365
- * @return {?}
366
- */
367
- function (widget) {
368
- gridsterItem = _this.mapObjectsToGridsterItem(widget);
369
- _this.widgetList.push(gridsterItem);
370
- _this.setAreaHeight();
371
- /**To save added widget position in db */
372
- setTimeout((/**
373
- * @return {?}
374
- */
375
- function () {
376
- _this.updateWidgets();
377
- }), 1000);
378
- _this.raDashboardEventBus.publish(RAEvent.WidgetAdded, widget);
379
- }));
380
- };
381
- /** To add widget to current widget list ,invoked from copy widget window*/
382
- /**
383
- * To add widget to current widget list ,invoked from copy widget window
384
- * @param {?} data
385
- * @return {?}
386
- */
387
- RADashboardArea.prototype.copyWidget = /**
388
- * To add widget to current widget list ,invoked from copy widget window
389
- * @param {?} data
390
- * @return {?}
391
- */
392
- function (data) {
393
- /** @type {?} */
394
- var gridsterItem = this.mapObjectsToGridsterItem(data);
395
- if (this.options.api) {
396
- gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
397
- }
398
- data.position_x = gridsterItem.x;
399
- data.position_y = gridsterItem.y;
400
- gridsterItem = this.mapObjectsToGridsterItem(data);
401
- this.widgetList.push(gridsterItem);
402
- this.setAreaHeight();
403
- };
404
- /**To map IwidgetInfo object to gridsterItem */
405
- /**
406
- * To map IwidgetInfo object to gridsterItem
407
- * @param {?} widget
408
- * @return {?}
409
- */
410
- RADashboardArea.prototype.mapObjectsToGridsterItem = /**
411
- * To map IwidgetInfo object to gridsterItem
412
- * @param {?} widget
413
- * @return {?}
414
- */
415
- function (widget) {
416
- /** @type {?} */
417
- var gridsterItem = (/** @type {?} */ ({
418
- cols: widget.width,
419
- rows: widget.height,
420
- x: widget.position_x,
421
- y: widget.position_y,
422
- widgetInfo: widget
423
- }));
424
- return gridsterItem;
425
- };
426
- /**
427
- * @param {?} widgetList
428
- * @return {?}
429
- */
430
- RADashboardArea.prototype.mapObjectListToGridsterItemList = /**
431
- * @param {?} widgetList
432
- * @return {?}
433
- */
434
- function (widgetList) {
435
- var _this = this;
436
- /** @type {?} */
437
- var widgetArray = Array();
438
- widgetList.forEach((/**
439
- * @param {?} widget
440
- * @return {?}
441
- */
442
- function (widget) {
443
- widgetArray.push(_this.mapObjectsToGridsterItem(widget));
444
- }));
445
- return widgetArray;
446
- };
447
- /**
448
- * @param {?} widgetItem
449
- * @return {?}
450
- */
451
- RADashboardArea.prototype.mapGridsterItemToObject = /**
452
- * @param {?} widgetItem
453
- * @return {?}
454
- */
455
- function (widgetItem) {
456
- /** @type {?} */
457
- var widget;
458
- widget = widgetItem.widgetInfo;
459
- widget.height = widgetItem.rows;
460
- widget.width = widgetItem.cols;
461
- widget.position_x = widgetItem.x;
462
- widget.position_y = widgetItem.y;
463
- widget.rowHeight = widgetItem.curRowHeight;
464
- return widget;
465
- };
466
- /**
467
- * @param {?} widgetItemList
468
- * @return {?}
469
- */
470
- RADashboardArea.prototype.mapGridsterListToObject = /**
471
- * @param {?} widgetItemList
472
- * @return {?}
473
- */
474
- function (widgetItemList) {
475
- var _this = this;
476
- /** @type {?} */
477
- var widgetListArray = Array();
478
- widgetItemList.forEach((/**
479
- * @param {?} widget
480
- * @return {?}
481
- */
482
- function (widget) {
483
- widgetListArray.push(_this.mapGridsterItemToObject(widget));
484
- }));
485
- return widgetListArray;
486
- };
487
- RADashboardArea.decorators = [
488
- { type: Component, args: [{
489
- selector: 'ra-dashboard-area',
490
- template: "<div #gridWrapper class=\"wrap gridster\" >\r\n<!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [options]=\"options\" style=\"height:100%;\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container [app-config]=\"appConfig\" [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\r\n [global-filter]=\"globalFilter\" [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"></ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n <notifier-container></notifier-container>\r\n</div>\r\n\r\n",
491
- styles: ["gridster{width:inherit;resize:height;display:-webkit-box;display:flex;background-color:#ededed;overflow-y:hidden!important}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;-webkit-transition:.3s;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:0 1px 10px rgba(0,0,0,.05)}gridster-item:hover{box-shadow:0 1px 10px rgba(0,0,0,.15)}"]
492
- }] }
493
- ];
494
- /** @nocollapse */
495
- RADashboardArea.ctorParameters = function () { return [
496
- { type: RaDashboardService },
497
- { type: NgZone },
498
- { type: NgxUiLoaderService },
499
- { type: RATranslateService },
500
- { type: NotifierService }
501
- ]; };
502
- RADashboardArea.propDecorators = {
503
- userDashboardId: [{ type: Input, args: ['user-dashboard-id',] }],
504
- areaKey: [{ type: Input, args: ['area-key',] }],
505
- globalFilter: [{ type: Input, args: ['global-filter',] }],
506
- raDashboardEventBus: [{ type: Input, args: ['event-bus',] }],
507
- widgetHeight: [{ type: Input, args: ['widget-height',] }],
508
- widgetWidth: [{ type: Input, args: ['widget-width',] }],
509
- appConfig: [{ type: Input, args: ['app-config',] }]
510
- };
511
- return RADashboardArea;
512
- }());
513
- export { RADashboardArea };
514
- if (false) {
515
- /** @type {?} */
516
- RADashboardArea.prototype.widgetList;
517
- /** @type {?} */
518
- RADashboardArea.prototype.options;
519
- /** @type {?} */
520
- RADashboardArea.prototype.gridheight;
521
- /**
522
- * @type {?}
523
- * @private
524
- */
525
- RADashboardArea.prototype.conifgAddClick;
526
- /**
527
- * @type {?}
528
- * @private
529
- */
530
- RADashboardArea.prototype.widgetDeleteEvent;
531
- /**
532
- * @type {?}
533
- * @private
534
- */
535
- RADashboardArea.prototype.widgetAddEvent;
536
- /**
537
- * @type {?}
538
- * @private
539
- */
540
- RADashboardArea.prototype.widgetLibraryDoneClick;
541
- /**
542
- * @type {?}
543
- * @private
544
- */
545
- RADashboardArea.prototype.isWidgetLoaded;
546
- /** @type {?} */
547
- RADashboardArea.prototype.userDashboardId;
548
- /** @type {?} */
549
- RADashboardArea.prototype.areaKey;
550
- /** @type {?} */
551
- RADashboardArea.prototype.globalFilter;
552
- /** @type {?} */
553
- RADashboardArea.prototype.raDashboardEventBus;
554
- /** @type {?} */
555
- RADashboardArea.prototype.widgetHeight;
556
- /** @type {?} */
557
- RADashboardArea.prototype.widgetWidth;
558
- /** @type {?} */
559
- RADashboardArea.prototype.appConfig;
560
- /**
561
- * @type {?}
562
- * @private
563
- */
564
- RADashboardArea.prototype.dashboardService;
565
- /**
566
- * @type {?}
567
- * @private
568
- */
569
- RADashboardArea.prototype.ngZone;
570
- /**
571
- * @type {?}
572
- * @private
573
- */
574
- RADashboardArea.prototype.ngxService;
575
- /**
576
- * @type {?}
577
- * @private
578
- */
579
- RADashboardArea.prototype.translateService;
580
- /**
581
- * @type {?}
582
- * @private
583
- */
584
- RADashboardArea.prototype.notifier;
585
- }
586
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQTRCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RDtJQTBCRSx5QkFBb0IsZ0JBQW9DLEVBQzlDLE1BQWMsRUFDZCxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsUUFBeUI7UUFKZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBdEI1QixlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFNeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFNaEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDMUIsZ0JBQVcsR0FBVyxDQUFDLENBQUM7SUFRL0MsQ0FBQzs7OztJQUVELGtDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Ozs7O0lBRUQscUNBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCO1FBRWhDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEQ7UUFFRCxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUU7WUFDeEgsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBR0QsMkJBQTJCOzs7OztJQUNwQixnREFBc0I7Ozs7SUFBN0I7O1lBQ00sV0FBVyxHQUFHLElBQUk7UUFDdEIsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxPQUFPLEdBQUcsNkJBQTZCLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0I7Ozs7UUFBRyxVQUFVLElBQVM7WUFDbkQsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVCLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUEsQ0FBQTtJQUNILENBQUM7SUFFRCx5Q0FBeUM7Ozs7O0lBQ3pDLHVEQUE2Qjs7OztJQUE3QjtRQUFBLGlCQTZCQztRQTVCQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUzs7OztRQUFDLFVBQUMsVUFBVTtZQUNyRyxLQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7OztZQUFDO2dCQUNkLEtBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUMsRUFBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFDLFVBQVU7WUFDL0YsS0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHOzs7WUFBQztnQkFDZCxLQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLENBQUMsRUFBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFDLENBQUM7WUFDM0YsS0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHOzs7WUFBQztnQkFDZCxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsRUFBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQyxVQUFVO1lBQ3BILEtBQUksQ0FBQyxNQUFNLENBQUMsR0FBRzs7O1lBQUM7Z0JBQ2QsSUFBSSxVQUFVLEVBQUU7b0JBQ2QscUNBQXFDO29CQUNyQyxnQ0FBZ0M7b0JBQ2hDLE1BQU07b0JBQ04sS0FBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDN0M7WUFDSCxDQUFDLEVBQUMsQ0FBQztRQUNMLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHOzs7Ozs7OztJQUNILGlEQUF1Qjs7Ozs7OztJQUF2QixVQUF3QixVQUFlLEVBQUUsS0FBYTs7WUFDaEQsV0FBVyxHQUFHLElBQUk7O1lBQ2xCLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQztRQUN4QixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDL0IsT0FBTzthQUNKO1lBQ0gsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO2dCQUNkLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDM0Q7aUJBQ0k7Z0JBQ0gsVUFBVTs7O2dCQUFDO29CQUNULFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVELENBQUMsR0FBRSxJQUFJLENBQUMsQ0FBQzthQUNWO1NBQ0Y7SUFDSCxDQUFDOzs7O0lBRUQscUNBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsY0FBYztZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXBDLElBQUksSUFBSSxDQUFDLGNBQWM7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLHNCQUFzQjtZQUM3QixJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELDZEQUE2RDs7Ozs7SUFDN0QsdUNBQWE7Ozs7SUFBYjtRQUNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUzs7OztRQUFDLFVBQUEsT0FBTztRQUNwSCxDQUFDLEVBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlFQUFpRTs7Ozs7OztJQUNqRSxxQ0FBVzs7Ozs7O0lBQVgsVUFBWSxjQUFzQixFQUFFLE9BQWU7UUFBbkQsaUJBY0M7O1lBYkssV0FBVyxHQUFHLElBQUk7O1lBRWxCLFVBQVUsR0FBRyxtQkFBYTtZQUM1QixXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUN0QyxnQkFBZ0IsRUFBRSxPQUFPO1NBQzFCLEVBQUE7UUFDRCxXQUFXLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQSxPQUFPO1lBQzNGLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxXQUFXLENBQUMsVUFBVSxHQUFHLEtBQUksQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkUsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzdCO1FBQ0gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDO0lBSUQsNEVBQTRFOzs7OztJQUM1RSx1Q0FBYTs7OztJQUFiO1FBQUEsaUJBMEJDOztZQXpCSyxnQkFBZ0IsR0FBRyxDQUFDOztZQUNwQixVQUFVLEdBQUcsQ0FBQzs7WUFDZCxZQUFZLEdBQUcsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ3BCLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQyxDQUFDOztnQkFDcEIsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUk7WUFDaEMsSUFBSSxhQUFhLEdBQUcsZ0JBQWdCLEVBQUU7Z0JBQ3BDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQzthQUNsQztZQUNELElBQUksWUFBWSxJQUFJLENBQUMsRUFBRTtnQkFDckIsYUFBYSxHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2FBQ2pEO1lBQ0QsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO1FBQ3hDLENBQUMsRUFBQyxDQUFDO1FBR0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNwQixVQUFVLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxHQUFHLENBQUM7U0FDOUU7UUFDRCxJQUFJLFVBQVUsR0FBRyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxHQUFHLEdBQUcsQ0FBQztTQUNsQjtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFHRCw4RUFBOEU7Ozs7Ozs7SUFDOUUsc0NBQVk7Ozs7OztJQUFaLFVBQWEsZ0JBQXFCLEVBQUUsZUFBZ0M7UUFBaEMsZ0NBQUEsRUFBQSx1QkFBZ0M7O1lBQzlELE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07Ozs7UUFBQyxVQUFVLElBQUk7WUFDaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDO1FBQy9ELENBQUMsRUFBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUUvTDtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUNuQztJQUNILENBQUM7SUFJRDs7T0FFRzs7Ozs7OztJQUNILG1DQUFTOzs7Ozs7SUFBVCxVQUFVLElBQVM7UUFBbkIsaUJBMkJDOztZQTFCSyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzs7WUFDaEIsWUFBWSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7UUFFdEQsZ0hBQWdIO1FBQ2hILDBCQUEwQjtRQUMxQiw0RUFBNEU7UUFDNUUsSUFBSTtRQUNKLG9DQUFvQztRQUNwQyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLE1BQU07WUFDcEUsWUFBWSxHQUFHLEtBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRCxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuQyxLQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIseUNBQXlDO1lBQ3pDLFVBQVU7OztZQUFDO2dCQUNULEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixDQUFDLEdBQUUsSUFBSSxDQUFDLENBQUM7WUFDVCxLQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEUsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkVBQTJFOzs7Ozs7SUFDM0Usb0NBQVU7Ozs7O0lBQVYsVUFBVyxJQUFTOztZQUNkLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDcEIsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNqQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsK0NBQStDOzs7Ozs7SUFDL0Msa0RBQXdCOzs7OztJQUF4QixVQUF5QixNQUFtQjs7WUFDdEMsWUFBWSxHQUFHLG1CQUFjO1lBQy9CLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSztZQUNsQixJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDbkIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQ3BCLENBQUMsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUNwQixVQUFVLEVBQUUsTUFBTTtTQUNuQixFQUFBO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQzs7Ozs7SUFFRCx5REFBK0I7Ozs7SUFBL0IsVUFBZ0MsVUFBOEI7UUFBOUQsaUJBTUM7O1lBTEssV0FBVyxHQUFHLEtBQUssRUFBZ0I7UUFDdkMsVUFBVSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLE1BQU07WUFDdkIsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLEVBQUMsQ0FBQztRQUNILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7Ozs7O0lBRUQsaURBQXVCOzs7O0lBQXZCLFVBQXdCLFVBQXdCOztZQUMxQyxNQUFtQjtRQUN2QixNQUFNLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUMvQixNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQzNDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Ozs7O0lBRUQsaURBQXVCOzs7O0lBQXZCLFVBQXdCLGNBQW1DO1FBQTNELGlCQU1DOztZQUxLLGVBQWUsR0FBRyxLQUFLLEVBQWU7UUFDMUMsY0FBYyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLE1BQU07WUFDM0IsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLEVBQUMsQ0FBQztRQUNILE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7O2dCQXBTRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsaXFCQUF1Qzs7aUJBRXhDOzs7O2dCQWRRLGtCQUFrQjtnQkFIa0MsTUFBTTtnQkFRMUQsa0JBQWtCO2dCQUVsQixrQkFBa0I7Z0JBRGxCLGVBQWU7OztrQ0FzQnJCLEtBQUssU0FBQyxtQkFBbUI7MEJBQ3pCLEtBQUssU0FBQyxVQUFVOytCQUNoQixLQUFLLFNBQUMsZUFBZTtzQ0FDckIsS0FBSyxTQUFDLFdBQVc7K0JBQ2pCLEtBQUssU0FBQyxlQUFlOzhCQUNyQixLQUFLLFNBQUMsY0FBYzs0QkFDcEIsS0FBSyxTQUFDLFlBQVk7O0lBOFFyQixzQkFBQztDQUFBLEFBdFNELElBc1NDO1NBalNZLGVBQWU7OztJQUcxQixxQ0FBMEM7O0lBQzFDLGtDQUErQjs7SUFDL0IscUNBQWdDOzs7OztJQUVoQyx5Q0FBNEI7Ozs7O0lBQzVCLDRDQUErQjs7Ozs7SUFDL0IseUNBQTRCOzs7OztJQUM1QixpREFBb0M7Ozs7O0lBQ3BDLHlDQUF3Qzs7SUFFeEMsMENBQW9EOztJQUNwRCxrQ0FBbUM7O0lBQ25DLHVDQUEwQzs7SUFDMUMsOENBQTZEOztJQUM3RCx1Q0FBaUQ7O0lBQ2pELHNDQUErQzs7SUFDL0Msb0NBQTJDOzs7OztJQUUvQiwyQ0FBNEM7Ozs7O0lBQ3RELGlDQUFzQjs7Ozs7SUFDdEIscUNBQXNDOzs7OztJQUN0QywyQ0FBNEM7Ozs7O0lBQzVDLG1DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBPbkluaXQsIENvbXBvbmVudCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJy4uLy4uL2dyaWRzdGVyL2luZGV4JztcclxuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZ0RlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uL3JhLmdyaWRzdGVyLmNvbmZpZyc7XHJcbmltcG9ydCB7IElXaWRnZXRJbmZvLCBJQXBwQ29uZmlnIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLWRhc2hib2FyZC1hcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmEuZGFzaGJvYXJkLmFyZWEuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJBRGFzaGJvYXJkQXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuXHJcbiAgcHVibGljIHdpZGdldExpc3QgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XHJcbiAgcHVibGljIG9wdGlvbnM6IEdyaWRzdGVyQ29uZmlnO1xyXG4gIHB1YmxpYyBncmlkaGVpZ2h0OiBudW1iZXIgPSAzMDA7XHJcblxyXG4gIHByaXZhdGUgY29uaWZnQWRkQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIHdpZGdldERlbGV0ZUV2ZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXRBZGRFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0TGlicmFyeURvbmVDbGljazogYW55O1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCd1c2VyLWRhc2hib2FyZC1pZCcpIHVzZXJEYXNoYm9hcmRJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnYXJlYS1rZXknKSBhcmVhS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyOiBhbnk7XHJcbiAgQElucHV0KCdldmVudC1idXMnKSByYURhc2hib2FyZEV2ZW50QnVzOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIHdpZGdldEhlaWdodDogbnVtYmVyID0gMztcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZGdldFdpZHRoOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZzogSUFwcENvbmZpZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBuZ3hTZXJ2aWNlOiBOZ3hVaUxvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIHRoaXMuYXBwQ29uZmlnICYmICF0aGlzLmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmluaXRpdGF0ZUV2ZW50QnVzU3Vic2NyaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqVG8gc2V0IEdyaWRzdGVyQ29uZmlnICovXHJcbiAgcHVibGljIGluaXRpYXRlR3JpZHN0ZXJDb25maWcoKSB7XHJcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xyXG4gICAgLyoqVG8gb3ZlcnJpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcyB0byB0aGUgZ3JpZHN0ZXIgY29udHJvbCAqL1xyXG4gICAgdGhpcy5vcHRpb25zID0gR3JpZHN0ZXJDb25maWdEZWZhdWx0U2V0dGluZ3M7XHJcbiAgICB0aGlzLm9wdGlvbnMuaXRlbUNoYW5nZUNhbGxiYWNrID0gZnVuY3Rpb24gKGl0ZW06IGFueSkge1xyXG4gICAgICBhcmVhQ29udGV4dC5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIGFyZWFDb250ZXh0LnVwZGF0ZVdpZGdldHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBUbyBpbml0aWF0ZSBldmVudGJ1cyBzdWJzY3RpcHRpb25zICovXHJcbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XHJcbiAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LldpZGdldERlbGV0ZSkuc3Vic2NyaWJlKChpbnN0YW5jZUlkKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRBZGRFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5BZGRXaWRnZXQpLnN1YnNjcmliZSgod2lkZ2V0SW5mbykgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvbmlmZ0FkZENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkNvbmZpZ0FkZENsaWNrKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQud2lkZ2V0TGlicmFyeURvbmVDbGljaykuc3Vic2NyaWJlKCh3aWRnZXRMaXN0KSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7ICAgICAgIFxyXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7ICAgICAgICBcclxuICAgICAgICAgIC8vIHdpZGdldExpc3QuZm9yRWFjaCh3aWRnZXRJbmZvID0+IHtcclxuICAgICAgICAgIC8vICAgdGhpcy5hZGRXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIHRoaXMuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdGVtcCBmaXgtIHJlY3Vyc2l2ZSBtZXRob2QgdG8gaXRlcmF0ZSBvdmVyIHRoZSBsaXN0IG9mIGl0ZW1zXHJcbiAgICogYW5kIGFkZCB0aGVtIHRvIGdyaWRzdGVyIGluIHRoZSBnaXZlbiBvcmRlclxyXG4gICAqIEBwYXJhbSB3aWRnZXRMaXN0ICAtbGlzdCBvZiB3aWRnZXRzXHJcbiAgICogQHBhcmFtIGluZGV4IC1pbmRleCBvZiB0aGUgY3VycmVudCB2YWx1ZSB0byBiZSBhZGRlZFxyXG4gICAqL1xyXG4gIGFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IGFyZWFDb250ZXh0ID0gdGhpcztcclxuICAgIGxldCBpbmRleFZhbCA9IGluZGV4ICsgMTtcclxuICAgIGlmIChpbmRleCA+IHdpZGdldExpc3QubGVuZ3RoIC0gMSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChpbmRleCA9PSAwKSB7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcclxuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xyXG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgaW5kZXhWYWwpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmlmZ0FkZENsaWNrKVxyXG4gICAgICB0aGlzLmNvbmlmZ0FkZENsaWNrLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0QWRkRXZlbnQpXHJcbiAgICAgIHRoaXMud2lkZ2V0QWRkRXZlbnQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXREZWxldGVFdmVudClcclxuICAgICAgdGhpcy53aWRnZXREZWxldGVFdmVudC51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2spXHJcbiAgICAgIHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljay51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gdXBkYXRlIHBvc2l0aW9uL2RpbWVudGlvbiBvZiBhbGwgd2lkZ2V0cyBpbiB0aGUgYXJlYSAqL1xyXG4gIHVwZGF0ZVdpZGdldHMoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHRoaXMud2lkZ2V0TGlzdCksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJldHJpZXZlIHdpZGdldHMgYmFzZWQgb24gdXNlckRhc2hib2FyZGlkIGFuZCBhcmVhIG5hbWUgKi9cclxuICBsb2FkV2lkZ2V0cyh1c2VyRGFzaGJvYXJJZDogbnVtYmVyLCBhcmVhS2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XHJcblxyXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xyXG4gICAgICBkYXNoYm9hcmRJZDogdXNlckRhc2hib2FySWQudG9TdHJpbmcoKSxcclxuICAgICAgZGFzaGJvYXJkQXJlYUtleTogYXJlYUtleVxyXG4gICAgfVxyXG4gICAgYXJlYUNvbnRleHQud2lkZ2V0TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFdpZGdldHNCeURhc2hib2FyZEFyZWEod2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgYXJlYUNvbnRleHQud2lkZ2V0TGlzdCA9IHRoaXMubWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh3aWRnZXRzKTtcclxuICAgICAgICBhcmVhQ29udGV4dC5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKiogVG8gc2V0IEFyZWEoR3JpZHN0ZXIpIGhlaWdodCBkeW5hbWljYWxseSBhcyB3aWRnZXRzIGFyZSBhZGRlZC9yZW1vdmVkICovXHJcbiAgc2V0QXJlYUhlaWdodCgpIHtcclxuICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0ID0gMDtcclxuICAgIGxldCBhcmVhSGVpZ2h0ID0gMDtcclxuICAgIGxldCBjdXJSb3dIZWlnaHQgPSAwO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgY3VyUm93SGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLndpZGdldExpc3QuZm9yRWFjaCgodCkgPT4ge1xyXG4gICAgICBsZXQgY3VycmVudEhlaWdodCA9IHQueSArIHQucm93cztcclxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgPiBhcmVhU2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgYXJlYVNjcm9sbEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGN1clJvd0hlaWdodCA9PSAwKSB7XHJcbiAgICAgICAgY3VycmVudEhlaWdodCA9IHRoaXMud2lkZ2V0TGlzdFswXS5jdXJSb3dIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgdC53aWRnZXRJbmZvLnJvd0hlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodCAqIHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpICsgMTUwO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZWFIZWlnaHQgPCA2MDApIHtcclxuICAgICAgYXJlYUhlaWdodCA9IDYwMDtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZGhlaWdodCA9IGFyZWFIZWlnaHQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIHJlbW92ZSBhIHdpZGdldCBpbnN0YW5jZSBmcm9tIGRhc2hib2FyZCBhbmQgdG8gc2F2ZSBpbmZvIGluIGRhdGFiYXNlICovXHJcbiAgZGVsZXRlV2lkZ2V0KHdpZGdldEluc3RhbmNlSWQ6IGFueSwgaXNhbGVydERpc2FibGVkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCB3aWRnZXQgPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIHJldHVybiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKHdpZGdldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5zcGxpY2UodGhpcy53aWRnZXRMaXN0LmluZGV4T2Yod2lkZ2V0WzBdKSwgMSk7XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICBpZiAoIWlzYWxlcnREaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpZXIubm90aWZ5KCdzdWNjZXNzJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdXaWRnZXQnKSArIFwiIFwiICsgd2lkZ2V0WzBdLndpZGdldEluZm8ud2lkZ2V0VGl0bGUgKyBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0RlbGV0ZWRTdWNjZXNmdWxseScpICsgXCIgXCIpO1xyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGFjdFR5cGUgPSAnY29tcGFjdExlZnQmVXAnO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXBpLm9wdGlvbnNDaGFuZ2VkKCk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jb21wYWN0VHlwZSA9ICdub25lJztcclxuICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipUbyBhZGQgd2lkZ2V0IGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSBwb3NpdGlvbiBhbmQgdG8gbWFrZSBjaGFuZ2VzIGluXHJcbiAgICogZGFzaGJvYXJkIGFyZWEuXHJcbiAgICovXHJcbiAgYWRkV2lkZ2V0KGRhdGE6IGFueSkge1xyXG4gICAgbGV0IHdpZGdldGlkID0gZGF0YS53aWRnZXRJZDtcclxuICAgIGRhdGEuaGVpZ2h0ID0gdGhpcy53aWRnZXRIZWlnaHQ7XHJcbiAgICBkYXRhLndpZHRoID0gdGhpcy53aWRnZXRXaWR0aDtcclxuICAgIGRhdGEucG9zaXRpb25feCA9IDA7XHJcbiAgICBkYXRhLnBvc2l0aW9uX3kgPSAwO1xyXG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMubWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKGRhdGEpO1xyXG5cclxuICAgIC8qKiB0byBmaW5kIHRoZSBhdmFpbGFibGUgcG9zaXRpb24gaW4gZ3JpZHN0ZXIsIHRlbXAgY29tbWVudGluZyB0aGUgY29kZS1yZXR1cm5pbmcgaGlnaGVyIHkgdmFsdWUgdGhhbiBub3JtYWwgKi9cclxuICAgIC8vIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAvLyAgIGdyaWRzdGVySXRlbSA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Rmlyc3RQb3NzaWJsZVBvc2l0aW9uKGdyaWRzdGVySXRlbSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBkYXRhLnBvc2l0aW9uX3ggPSBncmlkc3Rlckl0ZW0ueDtcclxuICAgIC8vIGRhdGEucG9zaXRpb25feSA9IGdyaWRzdGVySXRlbS55O1xyXG4gICAgZGF0YS5kYXNoYm9hcmRBcmVhS2V5ID0gdGhpcy5hcmVhS2V5O1xyXG4gICAgZGF0YS5kYXNoYm9hcmRJZCA9IHRoaXMudXNlckRhc2hib2FyZElkO1xyXG4gICAgdGhpcy5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkV2lkZ2V0KGRhdGEsIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0ID0+IHtcclxuICAgICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0od2lkZ2V0KTtcclxuICAgICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIC8qKlRvIHNhdmUgYWRkZWQgd2lkZ2V0IHBvc2l0aW9uIGluIGRiICovXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlV2lkZ2V0cygpO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRBZGRlZCwgd2lkZ2V0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIGFkZCB3aWRnZXQgdG8gY3VycmVudCB3aWRnZXQgbGlzdCAsaW52b2tlZCBmcm9tIGNvcHkgd2lkZ2V0IHdpbmRvdyovXHJcbiAgY29weVdpZGdldChkYXRhOiBhbnkpIHtcclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbShkYXRhKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgIGdyaWRzdGVySXRlbSA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Rmlyc3RQb3NzaWJsZVBvc2l0aW9uKGdyaWRzdGVySXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gZ3JpZHN0ZXJJdGVtLng7XHJcbiAgICBkYXRhLnBvc2l0aW9uX3kgPSBncmlkc3Rlckl0ZW0ueTtcclxuICAgIGdyaWRzdGVySXRlbSA9IHRoaXMubWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKGRhdGEpO1xyXG4gICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcclxuICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gbWFwIEl3aWRnZXRJbmZvIG9iamVjdCB0byBncmlkc3Rlckl0ZW0gKi9cclxuICBtYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0od2lkZ2V0OiBJV2lkZ2V0SW5mbykge1xyXG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IDxHcmlkc3Rlckl0ZW0+e1xyXG4gICAgICBjb2xzOiB3aWRnZXQud2lkdGgsXHJcbiAgICAgIHJvd3M6IHdpZGdldC5oZWlnaHQsXHJcbiAgICAgIHg6IHdpZGdldC5wb3NpdGlvbl94LFxyXG4gICAgICB5OiB3aWRnZXQucG9zaXRpb25feSxcclxuICAgICAgd2lkZ2V0SW5mbzogd2lkZ2V0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JpZHN0ZXJJdGVtO1xyXG4gIH1cclxuXHJcbiAgbWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh3aWRnZXRMaXN0OiBBcnJheTxJV2lkZ2V0SW5mbz4pIHtcclxuICAgIGxldCB3aWRnZXRBcnJheSA9IEFycmF5PEdyaWRzdGVySXRlbT4oKTtcclxuICAgIHdpZGdldExpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xyXG4gICAgICB3aWRnZXRBcnJheS5wdXNoKHRoaXMubWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKHdpZGdldCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkZ2V0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBtYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXRJdGVtOiBHcmlkc3Rlckl0ZW0pIHtcclxuICAgIGxldCB3aWRnZXQ6IElXaWRnZXRJbmZvO1xyXG4gICAgd2lkZ2V0ID0gd2lkZ2V0SXRlbS53aWRnZXRJbmZvO1xyXG4gICAgd2lkZ2V0LmhlaWdodCA9IHdpZGdldEl0ZW0ucm93cztcclxuICAgIHdpZGdldC53aWR0aCA9IHdpZGdldEl0ZW0uY29scztcclxuICAgIHdpZGdldC5wb3NpdGlvbl94ID0gd2lkZ2V0SXRlbS54O1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnk7XHJcbiAgICB3aWRnZXQucm93SGVpZ2h0ID0gd2lkZ2V0SXRlbS5jdXJSb3dIZWlnaHQ7XHJcbiAgICByZXR1cm4gd2lkZ2V0O1xyXG4gIH1cclxuXHJcbiAgbWFwR3JpZHN0ZXJMaXN0VG9PYmplY3Qod2lkZ2V0SXRlbUxpc3Q6IEFycmF5PEdyaWRzdGVySXRlbT4pIHtcclxuICAgIGxldCB3aWRnZXRMaXN0QXJyYXkgPSBBcnJheTxJV2lkZ2V0SW5mbz4oKTtcclxuICAgIHdpZGdldEl0ZW1MaXN0LmZvckVhY2god2lkZ2V0ID0+IHtcclxuICAgICAgd2lkZ2V0TGlzdEFycmF5LnB1c2godGhpcy5tYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXQpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHdpZGdldExpc3RBcnJheTtcclxuICB9XHJcblxyXG59Il19
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { Input, Component, NgZone } from '@angular/core';
6
+ import { RaDashboardService } from '../ra.dashboard.service';
7
+ import { RADashboardEventBus } from '../ra.dashbard.event.bus';
8
+ import { RAEvent } from '../ra.event.enum';
9
+ import { GridsterConfigDefaultSettings } from '../ra.gridster.config';
10
+ import { NgxUiLoaderService } from 'ngx-ui-loader';
11
+ import { NotifierService } from 'angular-notifier';
12
+ import { RATranslateService } from '@schneideress/ra-common';
13
+ var RADashboardArea = /** @class */ (function () {
14
+ function RADashboardArea(dashboardService, ngZone, ngxService, translateService, notifier) {
15
+ this.dashboardService = dashboardService;
16
+ this.ngZone = ngZone;
17
+ this.ngxService = ngxService;
18
+ this.translateService = translateService;
19
+ this.notifier = notifier;
20
+ this.widgetList = Array();
21
+ this.gridheight = 300;
22
+ this.isWidgetLoaded = false;
23
+ this.widgetHeight = 3;
24
+ this.widgetWidth = 5;
25
+ }
26
+ /**
27
+ * @return {?}
28
+ */
29
+ RADashboardArea.prototype.ngOnInit = /**
30
+ * @return {?}
31
+ */
32
+ function () {
33
+ this.initiateGridsterConfig();
34
+ };
35
+ /**
36
+ * @param {?} changes
37
+ * @return {?}
38
+ */
39
+ RADashboardArea.prototype.ngOnChanges = /**
40
+ * @param {?} changes
41
+ * @return {?}
42
+ */
43
+ function (changes) {
44
+ if (this.raDashboardEventBus && this.appConfig && !this.isWidgetLoaded) {
45
+ this.isWidgetLoaded = true;
46
+ this.loadWidgets(this.userDashboardId, this.areaKey);
47
+ }
48
+ if (changes.raDashboardEventBus && changes.raDashboardEventBus.currentValue != changes.raDashboardEventBus.previousValue) {
49
+ this.inititateEventBusSubscritions();
50
+ }
51
+ };
52
+ /**To set GridsterConfig */
53
+ /**
54
+ * To set GridsterConfig
55
+ * @return {?}
56
+ */
57
+ RADashboardArea.prototype.initiateGridsterConfig = /**
58
+ * To set GridsterConfig
59
+ * @return {?}
60
+ */
61
+ function () {
62
+ /** @type {?} */
63
+ var areaContext = this;
64
+ /**To override default configuration values to the gridster control */
65
+ this.options = GridsterConfigDefaultSettings;
66
+ this.options.itemChangeCallback = (/**
67
+ * @param {?} item
68
+ * @return {?}
69
+ */
70
+ function (item) {
71
+ areaContext.setAreaHeight();
72
+ areaContext.updateWidgets();
73
+ });
74
+ };
75
+ /** To initiate eventbus subsctiptions */
76
+ /**
77
+ * To initiate eventbus subsctiptions
78
+ * @return {?}
79
+ */
80
+ RADashboardArea.prototype.inititateEventBusSubscritions = /**
81
+ * To initiate eventbus subsctiptions
82
+ * @return {?}
83
+ */
84
+ function () {
85
+ var _this = this;
86
+ this.widgetDeleteEvent = this.raDashboardEventBus.subscribe(RAEvent.WidgetDelete).subscribe((/**
87
+ * @param {?} instanceId
88
+ * @return {?}
89
+ */
90
+ function (instanceId) {
91
+ _this.ngZone.run((/**
92
+ * @return {?}
93
+ */
94
+ function () {
95
+ _this.deleteWidget(instanceId, true);
96
+ }));
97
+ }));
98
+ this.widgetAddEvent = this.raDashboardEventBus.subscribe(RAEvent.AddWidget).subscribe((/**
99
+ * @param {?} widgetInfo
100
+ * @return {?}
101
+ */
102
+ function (widgetInfo) {
103
+ _this.ngZone.run((/**
104
+ * @return {?}
105
+ */
106
+ function () {
107
+ _this.copyWidget(widgetInfo);
108
+ }));
109
+ }));
110
+ this.conifgAddClick = this.raDashboardEventBus.subscribe(RAEvent.ConfigAddClick).subscribe((/**
111
+ * @param {?} e
112
+ * @return {?}
113
+ */
114
+ function (e) {
115
+ _this.ngZone.run((/**
116
+ * @return {?}
117
+ */
118
+ function () {
119
+ _this.addWidget(e);
120
+ }));
121
+ }));
122
+ this.widgetLibraryDoneClick = this.raDashboardEventBus.subscribe(RAEvent.widgetLibraryDoneClick).subscribe((/**
123
+ * @param {?} widgetList
124
+ * @return {?}
125
+ */
126
+ function (widgetList) {
127
+ _this.ngZone.run((/**
128
+ * @return {?}
129
+ */
130
+ function () {
131
+ if (widgetList) {
132
+ // widgetList.forEach(widgetInfo => {
133
+ // this.addWidget(widgetInfo);
134
+ // });
135
+ _this.addWidgetListToGridster(widgetList, 0);
136
+ }
137
+ }));
138
+ }));
139
+ };
140
+ /**
141
+ * temp fix- recursive method to iterate over the list of items
142
+ * and add them to gridster in the given order
143
+ * @param widgetList -list of widgets
144
+ * @param index -index of the current value to be added
145
+ */
146
+ /**
147
+ * temp fix- recursive method to iterate over the list of items
148
+ * and add them to gridster in the given order
149
+ * @param {?} widgetList -list of widgets
150
+ * @param {?} index -index of the current value to be added
151
+ * @return {?}
152
+ */
153
+ RADashboardArea.prototype.addWidgetListToGridster = /**
154
+ * temp fix- recursive method to iterate over the list of items
155
+ * and add them to gridster in the given order
156
+ * @param {?} widgetList -list of widgets
157
+ * @param {?} index -index of the current value to be added
158
+ * @return {?}
159
+ */
160
+ function (widgetList, index) {
161
+ /** @type {?} */
162
+ var areaContext = this;
163
+ /** @type {?} */
164
+ var indexVal = index + 1;
165
+ if (index > widgetList.length - 1)
166
+ return;
167
+ else {
168
+ if (index == 0) {
169
+ areaContext.addWidget(widgetList[index]);
170
+ areaContext.addWidgetListToGridster(widgetList, indexVal);
171
+ }
172
+ else {
173
+ setTimeout((/**
174
+ * @return {?}
175
+ */
176
+ function () {
177
+ areaContext.addWidget(widgetList[index]);
178
+ areaContext.addWidgetListToGridster(widgetList, indexVal);
179
+ }), 1000);
180
+ }
181
+ }
182
+ };
183
+ /**
184
+ * @return {?}
185
+ */
186
+ RADashboardArea.prototype.ngOnDestroy = /**
187
+ * @return {?}
188
+ */
189
+ function () {
190
+ if (this.conifgAddClick)
191
+ this.conifgAddClick.unsubscribe();
192
+ if (this.widgetAddEvent)
193
+ this.widgetAddEvent.unsubscribe();
194
+ if (this.widgetDeleteEvent)
195
+ this.widgetDeleteEvent.unsubscribe();
196
+ if (this.widgetLibraryDoneClick)
197
+ this.widgetLibraryDoneClick.unsubscribe();
198
+ };
199
+ /**To update position/dimention of all widgets in the area */
200
+ /**
201
+ * To update position/dimention of all widgets in the area
202
+ * @return {?}
203
+ */
204
+ RADashboardArea.prototype.updateWidgets = /**
205
+ * To update position/dimention of all widgets in the area
206
+ * @return {?}
207
+ */
208
+ function () {
209
+ this.dashboardService.updateWidgets(this.mapGridsterListToObject(this.widgetList), this.appConfig).subscribe((/**
210
+ * @param {?} widgets
211
+ * @return {?}
212
+ */
213
+ function (widgets) {
214
+ }));
215
+ return true;
216
+ };
217
+ /** To retrieve widgets based on userDashboardid and area name */
218
+ /**
219
+ * To retrieve widgets based on userDashboardid and area name
220
+ * @param {?} userDashboarId
221
+ * @param {?} areaKey
222
+ * @return {?}
223
+ */
224
+ RADashboardArea.prototype.loadWidgets = /**
225
+ * To retrieve widgets based on userDashboardid and area name
226
+ * @param {?} userDashboarId
227
+ * @param {?} areaKey
228
+ * @return {?}
229
+ */
230
+ function (userDashboarId, areaKey) {
231
+ var _this = this;
232
+ /** @type {?} */
233
+ var areaContext = this;
234
+ /** @type {?} */
235
+ var widgetInfo = (/** @type {?} */ ({
236
+ dashboardId: userDashboarId.toString(),
237
+ dashboardAreaKey: areaKey
238
+ }));
239
+ areaContext.widgetList = [];
240
+ this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe((/**
241
+ * @param {?} widgets
242
+ * @return {?}
243
+ */
244
+ function (widgets) {
245
+ if (widgets && widgets.length > 0) {
246
+ areaContext.widgetList = _this.mapObjectListToGridsterItemList(widgets);
247
+ areaContext.setAreaHeight();
248
+ }
249
+ }));
250
+ };
251
+ /** To set Area(Gridster) height dynamically as widgets are added/removed */
252
+ /**
253
+ * To set Area(Gridster) height dynamically as widgets are added/removed
254
+ * @return {?}
255
+ */
256
+ RADashboardArea.prototype.setAreaHeight = /**
257
+ * To set Area(Gridster) height dynamically as widgets are added/removed
258
+ * @return {?}
259
+ */
260
+ function () {
261
+ var _this = this;
262
+ /** @type {?} */
263
+ var areaScrollHeight = 0;
264
+ /** @type {?} */
265
+ var areaHeight = 0;
266
+ /** @type {?} */
267
+ var curRowHeight = 0;
268
+ if (this.options.api) {
269
+ curRowHeight = this.options.api.getCurrentRowHeight();
270
+ }
271
+ this.widgetList.forEach((/**
272
+ * @param {?} t
273
+ * @return {?}
274
+ */
275
+ function (t) {
276
+ /** @type {?} */
277
+ var currentHeight = t.y + t.rows;
278
+ if (currentHeight > areaScrollHeight) {
279
+ areaScrollHeight = currentHeight;
280
+ }
281
+ if (curRowHeight == 0) {
282
+ currentHeight = _this.widgetList[0].curRowHeight;
283
+ }
284
+ t.widgetInfo.rowHeight = curRowHeight;
285
+ }));
286
+ if (this.options.api) {
287
+ areaHeight = areaScrollHeight * this.options.api.getCurrentRowHeight() + 150;
288
+ }
289
+ if (areaHeight < 600) {
290
+ areaHeight = 600;
291
+ }
292
+ this.gridheight = areaHeight;
293
+ };
294
+ /** To remove a widget instance from dashboard and to save info in database */
295
+ /**
296
+ * To remove a widget instance from dashboard and to save info in database
297
+ * @param {?} widgetInstanceId
298
+ * @param {?=} isalertDisabled
299
+ * @return {?}
300
+ */
301
+ RADashboardArea.prototype.deleteWidget = /**
302
+ * To remove a widget instance from dashboard and to save info in database
303
+ * @param {?} widgetInstanceId
304
+ * @param {?=} isalertDisabled
305
+ * @return {?}
306
+ */
307
+ function (widgetInstanceId, isalertDisabled) {
308
+ if (isalertDisabled === void 0) { isalertDisabled = false; }
309
+ /** @type {?} */
310
+ var widget = this.widgetList.filter((/**
311
+ * @param {?} item
312
+ * @return {?}
313
+ */
314
+ function (item) {
315
+ return item.widgetInfo.widgetInstanceId === widgetInstanceId;
316
+ }));
317
+ if (widget.length > 0) {
318
+ this.widgetList.splice(this.widgetList.indexOf(widget[0]), 1);
319
+ this.setAreaHeight();
320
+ if (!isalertDisabled) {
321
+ this.notifier.notify('success', " " + this.translateService.translate('Widget') + " " + widget[0].widgetInfo.widgetTitle + " " + this.translateService.translate('DeletedSuccesfully') + " ");
322
+ }
323
+ this.options.compactType = 'compactLeft&Up';
324
+ this.options.api.optionsChanged();
325
+ this.options.compactType = 'none';
326
+ this.options.api.optionsChanged();
327
+ }
328
+ };
329
+ /**To add widget instance to the database with the next available position and to make changes in
330
+ * dashboard area.
331
+ */
332
+ /**
333
+ * To add widget instance to the database with the next available position and to make changes in
334
+ * dashboard area.
335
+ * @param {?} data
336
+ * @return {?}
337
+ */
338
+ RADashboardArea.prototype.addWidget = /**
339
+ * To add widget instance to the database with the next available position and to make changes in
340
+ * dashboard area.
341
+ * @param {?} data
342
+ * @return {?}
343
+ */
344
+ function (data) {
345
+ var _this = this;
346
+ /** @type {?} */
347
+ var widgetid = data.widgetId;
348
+ data.height = this.widgetHeight;
349
+ data.width = this.widgetWidth;
350
+ data.position_x = 0;
351
+ data.position_y = 0;
352
+ /** @type {?} */
353
+ var gridsterItem = this.mapObjectsToGridsterItem(data);
354
+ /** to find the available position in gridster, temp commenting the code-returning higher y value than normal */
355
+ // if (this.options.api) {
356
+ // gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
357
+ // }
358
+ // data.position_x = gridsterItem.x;
359
+ // data.position_y = gridsterItem.y;
360
+ data.dashboardAreaKey = this.areaKey;
361
+ data.dashboardId = this.userDashboardId;
362
+ this.ngxService.start();
363
+ this.dashboardService.addWidget(data, this.appConfig).subscribe((/**
364
+ * @param {?} widget
365
+ * @return {?}
366
+ */
367
+ function (widget) {
368
+ gridsterItem = _this.mapObjectsToGridsterItem(widget);
369
+ _this.widgetList.push(gridsterItem);
370
+ _this.setAreaHeight();
371
+ /**To save added widget position in db */
372
+ setTimeout((/**
373
+ * @return {?}
374
+ */
375
+ function () {
376
+ _this.updateWidgets();
377
+ }), 1000);
378
+ _this.raDashboardEventBus.publish(RAEvent.WidgetAdded, widget);
379
+ }));
380
+ };
381
+ /** To add widget to current widget list ,invoked from copy widget window*/
382
+ /**
383
+ * To add widget to current widget list ,invoked from copy widget window
384
+ * @param {?} data
385
+ * @return {?}
386
+ */
387
+ RADashboardArea.prototype.copyWidget = /**
388
+ * To add widget to current widget list ,invoked from copy widget window
389
+ * @param {?} data
390
+ * @return {?}
391
+ */
392
+ function (data) {
393
+ /** @type {?} */
394
+ var gridsterItem = this.mapObjectsToGridsterItem(data);
395
+ if (this.options.api) {
396
+ gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
397
+ }
398
+ data.position_x = gridsterItem.x;
399
+ data.position_y = gridsterItem.y;
400
+ gridsterItem = this.mapObjectsToGridsterItem(data);
401
+ this.widgetList.push(gridsterItem);
402
+ this.setAreaHeight();
403
+ };
404
+ /**To map IwidgetInfo object to gridsterItem */
405
+ /**
406
+ * To map IwidgetInfo object to gridsterItem
407
+ * @param {?} widget
408
+ * @return {?}
409
+ */
410
+ RADashboardArea.prototype.mapObjectsToGridsterItem = /**
411
+ * To map IwidgetInfo object to gridsterItem
412
+ * @param {?} widget
413
+ * @return {?}
414
+ */
415
+ function (widget) {
416
+ /** @type {?} */
417
+ var gridsterItem = (/** @type {?} */ ({
418
+ cols: widget.width,
419
+ rows: widget.height,
420
+ x: widget.position_x,
421
+ y: widget.position_y,
422
+ widgetInfo: widget
423
+ }));
424
+ return gridsterItem;
425
+ };
426
+ /**
427
+ * @param {?} widgetList
428
+ * @return {?}
429
+ */
430
+ RADashboardArea.prototype.mapObjectListToGridsterItemList = /**
431
+ * @param {?} widgetList
432
+ * @return {?}
433
+ */
434
+ function (widgetList) {
435
+ var _this = this;
436
+ /** @type {?} */
437
+ var widgetArray = Array();
438
+ widgetList.forEach((/**
439
+ * @param {?} widget
440
+ * @return {?}
441
+ */
442
+ function (widget) {
443
+ widgetArray.push(_this.mapObjectsToGridsterItem(widget));
444
+ }));
445
+ return widgetArray;
446
+ };
447
+ /**
448
+ * @param {?} widgetItem
449
+ * @return {?}
450
+ */
451
+ RADashboardArea.prototype.mapGridsterItemToObject = /**
452
+ * @param {?} widgetItem
453
+ * @return {?}
454
+ */
455
+ function (widgetItem) {
456
+ /** @type {?} */
457
+ var widget;
458
+ widget = widgetItem.widgetInfo;
459
+ widget.height = widgetItem.rows;
460
+ widget.width = widgetItem.cols;
461
+ widget.position_x = widgetItem.x;
462
+ widget.position_y = widgetItem.y;
463
+ widget.rowHeight = widgetItem.curRowHeight;
464
+ return widget;
465
+ };
466
+ /**
467
+ * @param {?} widgetItemList
468
+ * @return {?}
469
+ */
470
+ RADashboardArea.prototype.mapGridsterListToObject = /**
471
+ * @param {?} widgetItemList
472
+ * @return {?}
473
+ */
474
+ function (widgetItemList) {
475
+ var _this = this;
476
+ /** @type {?} */
477
+ var widgetListArray = Array();
478
+ widgetItemList.forEach((/**
479
+ * @param {?} widget
480
+ * @return {?}
481
+ */
482
+ function (widget) {
483
+ widgetListArray.push(_this.mapGridsterItemToObject(widget));
484
+ }));
485
+ return widgetListArray;
486
+ };
487
+ RADashboardArea.decorators = [
488
+ { type: Component, args: [{
489
+ selector: 'ra-dashboard-area',
490
+ template: "<div #gridWrapper class=\"wrap gridster\" >\n<!-- <div #gridWrapper class=\"wrap gridster\"> -->\n <gridster [options]=\"options\" style=\"height:100%;\">\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\n <ra-widget-container [app-config]=\"appConfig\" [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\n [global-filter]=\"globalFilter\" [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"></ra-widget-container>\n </gridster-item>\n </gridster>\n <notifier-container></notifier-container>\n</div>\n\n",
491
+ styles: ["gridster{width:inherit;resize:height;display:-webkit-box;display:flex;background-color:#ededed;overflow-y:hidden!important}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;-webkit-transition:.3s;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:0 1px 10px rgba(0,0,0,.05)}gridster-item:hover{box-shadow:0 1px 10px rgba(0,0,0,.15)}"]
492
+ }] }
493
+ ];
494
+ /** @nocollapse */
495
+ RADashboardArea.ctorParameters = function () { return [
496
+ { type: RaDashboardService },
497
+ { type: NgZone },
498
+ { type: NgxUiLoaderService },
499
+ { type: RATranslateService },
500
+ { type: NotifierService }
501
+ ]; };
502
+ RADashboardArea.propDecorators = {
503
+ userDashboardId: [{ type: Input, args: ['user-dashboard-id',] }],
504
+ areaKey: [{ type: Input, args: ['area-key',] }],
505
+ globalFilter: [{ type: Input, args: ['global-filter',] }],
506
+ raDashboardEventBus: [{ type: Input, args: ['event-bus',] }],
507
+ widgetHeight: [{ type: Input, args: ['widget-height',] }],
508
+ widgetWidth: [{ type: Input, args: ['widget-width',] }],
509
+ appConfig: [{ type: Input, args: ['app-config',] }]
510
+ };
511
+ return RADashboardArea;
512
+ }());
513
+ export { RADashboardArea };
514
+ if (false) {
515
+ /** @type {?} */
516
+ RADashboardArea.prototype.widgetList;
517
+ /** @type {?} */
518
+ RADashboardArea.prototype.options;
519
+ /** @type {?} */
520
+ RADashboardArea.prototype.gridheight;
521
+ /**
522
+ * @type {?}
523
+ * @private
524
+ */
525
+ RADashboardArea.prototype.conifgAddClick;
526
+ /**
527
+ * @type {?}
528
+ * @private
529
+ */
530
+ RADashboardArea.prototype.widgetDeleteEvent;
531
+ /**
532
+ * @type {?}
533
+ * @private
534
+ */
535
+ RADashboardArea.prototype.widgetAddEvent;
536
+ /**
537
+ * @type {?}
538
+ * @private
539
+ */
540
+ RADashboardArea.prototype.widgetLibraryDoneClick;
541
+ /**
542
+ * @type {?}
543
+ * @private
544
+ */
545
+ RADashboardArea.prototype.isWidgetLoaded;
546
+ /** @type {?} */
547
+ RADashboardArea.prototype.userDashboardId;
548
+ /** @type {?} */
549
+ RADashboardArea.prototype.areaKey;
550
+ /** @type {?} */
551
+ RADashboardArea.prototype.globalFilter;
552
+ /** @type {?} */
553
+ RADashboardArea.prototype.raDashboardEventBus;
554
+ /** @type {?} */
555
+ RADashboardArea.prototype.widgetHeight;
556
+ /** @type {?} */
557
+ RADashboardArea.prototype.widgetWidth;
558
+ /** @type {?} */
559
+ RADashboardArea.prototype.appConfig;
560
+ /**
561
+ * @type {?}
562
+ * @private
563
+ */
564
+ RADashboardArea.prototype.dashboardService;
565
+ /**
566
+ * @type {?}
567
+ * @private
568
+ */
569
+ RADashboardArea.prototype.ngZone;
570
+ /**
571
+ * @type {?}
572
+ * @private
573
+ */
574
+ RADashboardArea.prototype.ngxService;
575
+ /**
576
+ * @type {?}
577
+ * @private
578
+ */
579
+ RADashboardArea.prototype.translateService;
580
+ /**
581
+ * @type {?}
582
+ * @private
583
+ */
584
+ RADashboardArea.prototype.notifier;
585
+ }
586
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQTRCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RDtJQTBCRSx5QkFBb0IsZ0JBQW9DLEVBQzlDLE1BQWMsRUFDZCxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsUUFBeUI7UUFKZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBdEI1QixlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFNeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFNaEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDMUIsZ0JBQVcsR0FBVyxDQUFD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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBPbkluaXQsIENvbXBvbmVudCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZywgR3JpZHN0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vZ3JpZHN0ZXIvaW5kZXgnO1xuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XG5pbXBvcnQgeyBSQUV2ZW50IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZ0RlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uL3JhLmdyaWRzdGVyLmNvbmZpZyc7XG5pbXBvcnQgeyBJV2lkZ2V0SW5mbywgSUFwcENvbmZpZyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmEtZGFzaGJvYXJkLWFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhLmRhc2hib2FyZC5hcmVhLmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJBRGFzaGJvYXJkQXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG5cbiAgcHVibGljIHdpZGdldExpc3QgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XG4gIHB1YmxpYyBvcHRpb25zOiBHcmlkc3RlckNvbmZpZztcbiAgcHVibGljIGdyaWRoZWlnaHQ6IG51bWJlciA9IDMwMDtcblxuICBwcml2YXRlIGNvbmlmZ0FkZENsaWNrOiBhbnk7XG4gIHByaXZhdGUgd2lkZ2V0RGVsZXRlRXZlbnQ6IGFueTtcbiAgcHJpdmF0ZSB3aWRnZXRBZGRFdmVudDogYW55O1xuICBwcml2YXRlIHdpZGdldExpYnJhcnlEb25lQ2xpY2s6IGFueTtcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgndXNlci1kYXNoYm9hcmQtaWQnKSB1c2VyRGFzaGJvYXJkSWQ6IG51bWJlcjtcbiAgQElucHV0KCdhcmVhLWtleScpIGFyZWFLZXk6IHN0cmluZztcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyOiBhbnk7XG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0Jykgd2lkZ2V0SGVpZ2h0OiBudW1iZXIgPSAzO1xuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZGdldFdpZHRoOiBudW1iZXIgPSA1O1xuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWc6IElBcHBDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXG4gICAgaWYgKHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiB0aGlzLmFwcENvbmZpZyAmJiAhdGhpcy5pc1dpZGdldExvYWRlZCkge1xuICAgICAgdGhpcy5pc1dpZGdldExvYWRlZCA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5pbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqVG8gc2V0IEdyaWRzdGVyQ29uZmlnICovXG4gIHB1YmxpYyBpbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCkge1xuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XG4gICAgLyoqVG8gb3ZlcnJpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcyB0byB0aGUgZ3JpZHN0ZXIgY29udHJvbCAqL1xuICAgIHRoaXMub3B0aW9ucyA9IEdyaWRzdGVyQ29uZmlnRGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMub3B0aW9ucy5pdGVtQ2hhbmdlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaXRlbTogYW55KSB7XG4gICAgICBhcmVhQ29udGV4dC5zZXRBcmVhSGVpZ2h0KCk7XG4gICAgICBhcmVhQ29udGV4dC51cGRhdGVXaWRnZXRzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRvIGluaXRpYXRlIGV2ZW50YnVzIHN1YnNjdGlwdGlvbnMgKi9cbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XG4gICAgdGhpcy53aWRnZXREZWxldGVFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5XaWRnZXREZWxldGUpLnN1YnNjcmliZSgoaW5zdGFuY2VJZCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMud2lkZ2V0QWRkRXZlbnQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQWRkV2lkZ2V0KS5zdWJzY3JpYmUoKHdpZGdldEluZm8pID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25pZmdBZGRDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5Db25maWdBZGRDbGljaykuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LndpZGdldExpYnJhcnlEb25lQ2xpY2spLnN1YnNjcmliZSgod2lkZ2V0TGlzdCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHsgICAgICAgXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7ICAgICAgICBcbiAgICAgICAgICAvLyB3aWRnZXRMaXN0LmZvckVhY2god2lkZ2V0SW5mbyA9PiB7XG4gICAgICAgICAgLy8gICB0aGlzLmFkZFdpZGdldCh3aWRnZXRJbmZvKTtcbiAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB0aGlzLmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0ZW1wIGZpeC0gcmVjdXJzaXZlIG1ldGhvZCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2YgaXRlbXNcbiAgICogYW5kIGFkZCB0aGVtIHRvIGdyaWRzdGVyIGluIHRoZSBnaXZlbiBvcmRlclxuICAgKiBAcGFyYW0gd2lkZ2V0TGlzdCAgLWxpc3Qgb2Ygd2lkZ2V0c1xuICAgKiBAcGFyYW0gaW5kZXggLWluZGV4IG9mIHRoZSBjdXJyZW50IHZhbHVlIHRvIGJlIGFkZGVkXG4gICAqL1xuICBhZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xuICAgIGxldCBpbmRleFZhbCA9IGluZGV4ICsgMTtcbiAgICBpZiAoaW5kZXggPiB3aWRnZXRMaXN0Lmxlbmd0aCAtIDEpXG4gICAgICByZXR1cm47XG4gICAgZWxzZSB7XG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmlmZ0FkZENsaWNrKVxuICAgICAgdGhpcy5jb25pZmdBZGRDbGljay51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMud2lkZ2V0QWRkRXZlbnQpXG4gICAgICB0aGlzLndpZGdldEFkZEV2ZW50LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy53aWRnZXREZWxldGVFdmVudClcbiAgICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQudW5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2spXG4gICAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlRvIHVwZGF0ZSBwb3NpdGlvbi9kaW1lbnRpb24gb2YgYWxsIHdpZGdldHMgaW4gdGhlIGFyZWEgKi9cbiAgdXBkYXRlV2lkZ2V0cygpIHtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHRoaXMud2lkZ2V0TGlzdCksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogVG8gcmV0cmlldmUgd2lkZ2V0cyBiYXNlZCBvbiB1c2VyRGFzaGJvYXJkaWQgYW5kIGFyZWEgbmFtZSAqL1xuICBsb2FkV2lkZ2V0cyh1c2VyRGFzaGJvYXJJZDogbnVtYmVyLCBhcmVhS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xuXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xuICAgICAgZGFzaGJvYXJkSWQ6IHVzZXJEYXNoYm9hcklkLnRvU3RyaW5nKCksXG4gICAgICBkYXNoYm9hcmRBcmVhS2V5OiBhcmVhS2V5XG4gICAgfVxuICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSBbXTtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0c0J5RGFzaGJvYXJkQXJlYSh3aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xuICAgICAgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0cyk7XG4gICAgICAgIGFyZWFDb250ZXh0LnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKiogVG8gc2V0IEFyZWEoR3JpZHN0ZXIpIGhlaWdodCBkeW5hbWljYWxseSBhcyB3aWRnZXRzIGFyZSBhZGRlZC9yZW1vdmVkICovXG4gIHNldEFyZWFIZWlnaHQoKSB7XG4gICAgbGV0IGFyZWFTY3JvbGxIZWlnaHQgPSAwO1xuICAgIGxldCBhcmVhSGVpZ2h0ID0gMDtcbiAgICBsZXQgY3VyUm93SGVpZ2h0ID0gMDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xuICAgICAgY3VyUm93SGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCk7XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0TGlzdC5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBsZXQgY3VycmVudEhlaWdodCA9IHQueSArIHQucm93cztcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gYXJlYVNjcm9sbEhlaWdodCkge1xuICAgICAgICBhcmVhU2Nyb2xsSGVpZ2h0ID0gY3VycmVudEhlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJSb3dIZWlnaHQgPT0gMCkge1xuICAgICAgICBjdXJyZW50SGVpZ2h0ID0gdGhpcy53aWRnZXRMaXN0WzBdLmN1clJvd0hlaWdodDtcbiAgICAgIH1cbiAgICAgIHQud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XG4gICAgfSk7XG5cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XG4gICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodCAqIHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpICsgMTUwO1xuICAgIH1cbiAgICBpZiAoYXJlYUhlaWdodCA8IDYwMCkge1xuICAgICAgYXJlYUhlaWdodCA9IDYwMDtcbiAgICB9XG4gICAgdGhpcy5ncmlkaGVpZ2h0ID0gYXJlYUhlaWdodDtcbiAgfVxuXG5cbiAgLyoqIFRvIHJlbW92ZSBhIHdpZGdldCBpbnN0YW5jZSBmcm9tIGRhc2hib2FyZCBhbmQgdG8gc2F2ZSBpbmZvIGluIGRhdGFiYXNlICovXG4gIGRlbGV0ZVdpZGdldCh3aWRnZXRJbnN0YW5jZUlkOiBhbnksIGlzYWxlcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgbGV0IHdpZGdldCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcbiAgICB9KTtcbiAgICBpZiAod2lkZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5zcGxpY2UodGhpcy53aWRnZXRMaXN0LmluZGV4T2Yod2lkZ2V0WzBdKSwgMSk7XG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIGlmICghaXNhbGVydERpc2FibGVkKSB7XG4gICAgICAgIHRoaXMubm90aWZpZXIubm90aWZ5KCdzdWNjZXNzJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdXaWRnZXQnKSArIFwiIFwiICsgd2lkZ2V0WzBdLndpZGdldEluZm8ud2lkZ2V0VGl0bGUgKyBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0RlbGV0ZWRTdWNjZXNmdWxseScpICsgXCIgXCIpO1xuXG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGFjdFR5cGUgPSAnY29tcGFjdExlZnQmVXAnO1xuICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xuICAgICAgdGhpcy5vcHRpb25zLmNvbXBhY3RUeXBlID0gJ25vbmUnO1xuICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG5cblxuICAvKipUbyBhZGQgd2lkZ2V0IGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSBwb3NpdGlvbiBhbmQgdG8gbWFrZSBjaGFuZ2VzIGluXG4gICAqIGRhc2hib2FyZCBhcmVhLlxuICAgKi9cbiAgYWRkV2lkZ2V0KGRhdGE6IGFueSkge1xuICAgIGxldCB3aWRnZXRpZCA9IGRhdGEud2lkZ2V0SWQ7XG4gICAgZGF0YS5oZWlnaHQgPSB0aGlzLndpZGdldEhlaWdodDtcbiAgICBkYXRhLndpZHRoID0gdGhpcy53aWRnZXRXaWR0aDtcbiAgICBkYXRhLnBvc2l0aW9uX3ggPSAwO1xuICAgIGRhdGEucG9zaXRpb25feSA9IDA7XG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMubWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKGRhdGEpO1xuXG4gICAgLyoqIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBwb3NpdGlvbiBpbiBncmlkc3RlciwgdGVtcCBjb21tZW50aW5nIHRoZSBjb2RlLXJldHVybmluZyBoaWdoZXIgeSB2YWx1ZSB0aGFuIG5vcm1hbCAqL1xuICAgIC8vIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XG4gICAgLy8gICBncmlkc3Rlckl0ZW0gPSB0aGlzLm9wdGlvbnMuYXBpLmdldEZpcnN0UG9zc2libGVQb3NpdGlvbihncmlkc3Rlckl0ZW0pO1xuICAgIC8vIH1cbiAgICAvLyBkYXRhLnBvc2l0aW9uX3ggPSBncmlkc3Rlckl0ZW0ueDtcbiAgICAvLyBkYXRhLnBvc2l0aW9uX3kgPSBncmlkc3Rlckl0ZW0ueTtcbiAgICBkYXRhLmRhc2hib2FyZEFyZWFLZXkgPSB0aGlzLmFyZWFLZXk7XG4gICAgZGF0YS5kYXNoYm9hcmRJZCA9IHRoaXMudXNlckRhc2hib2FyZElkO1xuICAgIHRoaXMubmd4U2VydmljZS5zdGFydCgpO1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXQoZGF0YSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXQgPT4ge1xuICAgICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0od2lkZ2V0KTtcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIC8qKlRvIHNhdmUgYWRkZWQgd2lkZ2V0IHBvc2l0aW9uIGluIGRiICovXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRzKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0QWRkZWQsIHdpZGdldCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogVG8gYWRkIHdpZGdldCB0byBjdXJyZW50IHdpZGdldCBsaXN0ICxpbnZva2VkIGZyb20gY29weSB3aWRnZXQgd2luZG93Ki9cbiAgY29weVdpZGdldChkYXRhOiBhbnkpIHtcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcbiAgICAgIGdyaWRzdGVySXRlbSA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Rmlyc3RQb3NzaWJsZVBvc2l0aW9uKGdyaWRzdGVySXRlbSk7XG4gICAgfVxuXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gZ3JpZHN0ZXJJdGVtLng7XG4gICAgZGF0YS5wb3NpdGlvbl95ID0gZ3JpZHN0ZXJJdGVtLnk7XG4gICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XG4gICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcbiAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgfVxuXG4gIC8qKlRvIG1hcCBJd2lkZ2V0SW5mbyBvYmplY3QgdG8gZ3JpZHN0ZXJJdGVtICovXG4gIG1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQ6IElXaWRnZXRJbmZvKSB7XG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IDxHcmlkc3Rlckl0ZW0+e1xuICAgICAgY29sczogd2lkZ2V0LndpZHRoLFxuICAgICAgcm93czogd2lkZ2V0LmhlaWdodCxcbiAgICAgIHg6IHdpZGdldC5wb3NpdGlvbl94LFxuICAgICAgeTogd2lkZ2V0LnBvc2l0aW9uX3ksXG4gICAgICB3aWRnZXRJbmZvOiB3aWRnZXRcbiAgICB9XG4gICAgcmV0dXJuIGdyaWRzdGVySXRlbTtcbiAgfVxuXG4gIG1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0TGlzdDogQXJyYXk8SVdpZGdldEluZm8+KSB7XG4gICAgbGV0IHdpZGdldEFycmF5ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xuICAgIHdpZGdldExpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgd2lkZ2V0QXJyYXkucHVzaCh0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gd2lkZ2V0QXJyYXk7XG4gIH1cblxuICBtYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXRJdGVtOiBHcmlkc3Rlckl0ZW0pIHtcbiAgICBsZXQgd2lkZ2V0OiBJV2lkZ2V0SW5mbztcbiAgICB3aWRnZXQgPSB3aWRnZXRJdGVtLndpZGdldEluZm87XG4gICAgd2lkZ2V0LmhlaWdodCA9IHdpZGdldEl0ZW0ucm93cztcbiAgICB3aWRnZXQud2lkdGggPSB3aWRnZXRJdGVtLmNvbHM7XG4gICAgd2lkZ2V0LnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLng7XG4gICAgd2lkZ2V0LnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnk7XG4gICAgd2lkZ2V0LnJvd0hlaWdodCA9IHdpZGdldEl0ZW0uY3VyUm93SGVpZ2h0O1xuICAgIHJldHVybiB3aWRnZXQ7XG4gIH1cblxuICBtYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRJdGVtTGlzdDogQXJyYXk8R3JpZHN0ZXJJdGVtPikge1xuICAgIGxldCB3aWRnZXRMaXN0QXJyYXkgPSBBcnJheTxJV2lkZ2V0SW5mbz4oKTtcbiAgICB3aWRnZXRJdGVtTGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICB3aWRnZXRMaXN0QXJyYXkucHVzaCh0aGlzLm1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldCkpO1xuICAgIH0pO1xuICAgIHJldHVybiB3aWRnZXRMaXN0QXJyYXk7XG4gIH1cblxufSJdfQ==