@schneideress/dashboardframework 0.0.68 → 0.0.70

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 +6989 -6933
  3. package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
  4. package/bundles/schneideress-dashboardframework.umd.min.js +2 -2
  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 +457 -400
  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 +563 -506
  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 +6101 -6044
  75. package/fesm2015/schneideress-dashboardframework.js.map +1 -1
  76. package/fesm5/schneideress-dashboardframework.js +6991 -6934
  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 -59
  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,506 +1,563 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import * as tslib_1 from "tslib";
6
- import { Component, Input, ViewChild, ElementRef, EventEmitter, Output, NgZone, Renderer2 } from '@angular/core';
7
- import { RaDashboardService } from './../ra.dashboard.service';
8
- import { RADashboardEventBus } from '../ra.dashbard.event.bus';
9
- import { RAEvent, RAEventKey } from '../ra.event.enum';
10
- import { NgxUiLoaderService } from 'ngx-ui-loader';
11
- import { NotifierService } from 'angular-notifier';
12
- import { RATranslateService } from '@schneideress/ra-common';
13
- var RAWidgetContainer = /** @class */ (function () {
14
- function RAWidgetContainer(dashboardService, ngxService, translateService, ngZone, notifier, renderer) {
15
- var _this = this;
16
- this.dashboardService = dashboardService;
17
- this.ngxService = ngxService;
18
- this.translateService = translateService;
19
- this.ngZone = ngZone;
20
- this.notifier = notifier;
21
- this.renderer = renderer;
22
- this.showPanel = false;
23
- this.isWidgetLoaded = false;
24
- this.isIEOrEdge = /msie\s|trident\/|edge\//i.test(window.navigator.userAgent);
25
- this.lockClass = "unlocked";
26
- this.lockStatus = "unlock";
27
- this.isDownloadIconVisible = false;
28
- this.dropDownShown = false;
29
- this.widgetDeleted = new EventEmitter();
30
- this.renderer.listen('window', 'click', (/**
31
- * @param {?} e
32
- * @return {?}
33
- */
34
- function (e) {
35
- if (e.target !== _this.widgetDropdown.nativeElement) {
36
- _this.dropDownShown = false;
37
- }
38
- }));
39
- }
40
- /**
41
- * @param {?} changes
42
- * @return {?}
43
- */
44
- RAWidgetContainer.prototype.ngOnChanges = /**
45
- * @param {?} changes
46
- * @return {?}
47
- */
48
- function (changes) {
49
- var _this = this;
50
- if (changes.raDashboardEventBus && changes.raDashboardEventBus.currentValue != changes.raDashboardEventBus.previousValue) {
51
- this.configChanged = this.raDashboardEventBus.subscribeWithKey(RAEvent.ConfigChanged, RAEventKey.WidgetInstanceId, this.data.widgetInfo.widgetInstanceId.toString()).subscribe((/**
52
- * @param {?} e
53
- * @return {?}
54
- */
55
- function (e) {
56
- _this.ngZone.run((/**
57
- * @return {?}
58
- */
59
- function () {
60
- _this.configChangeEventHandler(e);
61
- }));
62
- }));
63
- }
64
- if (this.widgetElement && changes.globalFilter && changes.globalFilter.currentValue != changes.globalFilter.previousValue) {
65
- this.refreshWidget(this.data.widgetInfo);
66
- }
67
- if (changes.width && changes.width.currentValue != changes.width.previousValue ||
68
- (changes.height && changes.height.currentValue != changes.height.previousValue)) {
69
- if (this.widgetElement) {
70
- /** @type {?} */
71
- var size = {};
72
- size.height = this.height;
73
- size.width = this.width;
74
- this.widgetElement.widgetResized(size);
75
- }
76
- }
77
- };
78
- /**
79
- * @return {?}
80
- */
81
- RAWidgetContainer.prototype.ngAfterViewInit = /**
82
- * @return {?}
83
- */
84
- function () {
85
- var _this = this;
86
- setTimeout((/**
87
- * @return {?}
88
- */
89
- function () {
90
- _this.loadWidget(_this.data.widgetInfo);
91
- }));
92
- };
93
- /**
94
- * @return {?}
95
- */
96
- RAWidgetContainer.prototype.ngOnDestroy = /**
97
- * @return {?}
98
- */
99
- function () {
100
- if (this.configChanged)
101
- this.configChanged.unsubscribe();
102
- };
103
- /** To Edit current widget configuration*/
104
- /**
105
- * To Edit current widget configuration
106
- * @return {?}
107
- */
108
- RAWidgetContainer.prototype.editWidget = /**
109
- * To Edit current widget configuration
110
- * @return {?}
111
- */
112
- function () {
113
- this.raDashboardEventBus.publish(RAEvent.WidgetEditClicked, this.data.widgetInfo);
114
- };
115
- /** To Delete current widget from DOM*/
116
- /**
117
- * To Delete current widget from DOM
118
- * @return {?}
119
- */
120
- RAWidgetContainer.prototype.deleteWidget = /**
121
- * To Delete current widget from DOM
122
- * @return {?}
123
- */
124
- function () {
125
- var _this = this;
126
- /** @type {?} */
127
- var widgetContainerContext = this;
128
- widgetContainerContext.ngxService.start();
129
- widgetContainerContext.dashboardService.deleteWidget(this.data.widgetInfo, this.appConfig).subscribe((/**
130
- * @param {?} status
131
- * @return {?}
132
- */
133
- function (status) {
134
- widgetContainerContext.ngxService.stop();
135
- if (status) {
136
- widgetContainerContext.widgetDeleted.emit(_this.data.widgetInfo.widgetInstanceId);
137
- }
138
- else {
139
- widgetContainerContext.notifier.notify('error', " " + _this.translateService.translate('FailedToRemoveWidget') + " (" + _this.data.widgetInfo.widgetTitle + ")!");
140
- }
141
- }));
142
- };
143
- /** To Move or change position if current widget container*/
144
- /**
145
- * To Move or change position if current widget container
146
- * @return {?}
147
- */
148
- RAWidgetContainer.prototype.moveWidget = /**
149
- * To Move or change position if current widget container
150
- * @return {?}
151
- */
152
- function () {
153
- this.raDashboardEventBus.publish(RAEvent.MoveWidget, this.data.widgetInfo);
154
- // this.dashboardService.moveWidget(widgetInfo);
155
- };
156
- /** To Copy Current widget with same configuration*/
157
- /**
158
- * To Copy Current widget with same configuration
159
- * @return {?}
160
- */
161
- RAWidgetContainer.prototype.copyWidget = /**
162
- * To Copy Current widget with same configuration
163
- * @return {?}
164
- */
165
- function () {
166
- this.raDashboardEventBus.publish(RAEvent.CopyWidget, this.data.widgetInfo);
167
- //this.dashboardService.copyWidget(widgetInfo);
168
- };
169
- /**
170
- * @param {?} widgetInfo
171
- * @return {?}
172
- */
173
- RAWidgetContainer.prototype.configChangeEventHandler = /**
174
- * @param {?} widgetInfo
175
- * @return {?}
176
- */
177
- function (widgetInfo) {
178
- this.data.widgetInfo = widgetInfo;
179
- this.refreshWidget(this.data.widgetInfo);
180
- // this.updateWidget(widgetInfo);
181
- };
182
- /** To load external custom element to the widget container*/
183
- /**
184
- * To load external custom element to the widget container
185
- * @param {?} widgetInfo
186
- * @return {?}
187
- */
188
- RAWidgetContainer.prototype.loadWidget = /**
189
- * To load external custom element to the widget container
190
- * @param {?} widgetInfo
191
- * @return {?}
192
- */
193
- function (widgetInfo) {
194
- return tslib_1.__awaiter(this, void 0, void 0, function () {
195
- var widgetConfigFilter, widgetContainer;
196
- var _this = this;
197
- return tslib_1.__generator(this, function (_a) {
198
- widgetConfigFilter = (/** @type {?} */ ({
199
- config: widgetInfo.widgetConfigInfo.config,
200
- globalFilter: this.globalFilter
201
- }));
202
- widgetContainer = this;
203
- this.dashboardService.loadExternalScript(widgetInfo.scriptUrl, (/**
204
- * @return {?}
205
- */
206
- function () {
207
- widgetContainer.widgetElement = document.createElement(widgetInfo.customTag);
208
- widgetContainer.widgetElement.setAttribute("widget-instance-id", widgetInfo.widgetInstanceId);
209
- document.body.addEventListener('widgetinitiated' + widgetInfo.widgetInstanceId, (/**
210
- * @return {?}
211
- */
212
- function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
213
- var _this = this;
214
- return tslib_1.__generator(this, function (_a) {
215
- setTimeout((/**
216
- * @return {?}
217
- */
218
- function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
219
- var _this = this;
220
- return tslib_1.__generator(this, function (_a) {
221
- switch (_a.label) {
222
- case 0:
223
- this.widgetElement.addEventListener('on-data-load', (/**
224
- * @param {?} e
225
- * @return {?}
226
- */
227
- function (e) {
228
- if (e.detail)
229
- _this.showPanel = true;
230
- else
231
- _this.showPanel = false;
232
- }));
233
- widgetContainer.isWidgetLoaded = true;
234
- widgetConfigFilter.appConfig = this.appConfig;
235
- widgetConfigFilter.widgetInfo = (/** @type {?} */ ({}));
236
- widgetConfigFilter.widgetInfo.widgetName = widgetInfo.widgetName;
237
- widgetContainer.widgetElement.loadContent(widgetConfigFilter);
238
- return [4 /*yield*/, widgetContainer.setLock(widgetConfigFilter.config)];
239
- case 1:
240
- _a.sent();
241
- return [4 /*yield*/, widgetContainer.setDownloadIcon()];
242
- case 2:
243
- _a.sent();
244
- return [2 /*return*/];
245
- }
246
- });
247
- }); }));
248
- return [2 /*return*/];
249
- });
250
- }); }));
251
- _this.ctlWidget.nativeElement.appendChild(_this.widgetElement);
252
- }));
253
- return [2 /*return*/];
254
- });
255
- });
256
- };
257
- /** To refresh widget on input config changes */
258
- /**
259
- * To refresh widget on input config changes
260
- * @param {?} widgetInfo
261
- * @return {?}
262
- */
263
- RAWidgetContainer.prototype.refreshWidget = /**
264
- * To refresh widget on input config changes
265
- * @param {?} widgetInfo
266
- * @return {?}
267
- */
268
- function (widgetInfo) {
269
- return tslib_1.__awaiter(this, void 0, void 0, function () {
270
- var widgetContainerContext, widgetConfigFilter;
271
- return tslib_1.__generator(this, function (_a) {
272
- switch (_a.label) {
273
- case 0:
274
- widgetContainerContext = this;
275
- widgetConfigFilter = (/** @type {?} */ ({
276
- config: widgetInfo.widgetConfigInfo.config,
277
- globalFilter: this.globalFilter,
278
- appConfig: this.appConfig,
279
- widgetInfo: widgetInfo
280
- }));
281
- if (!widgetContainerContext.isWidgetLoaded) return [3 /*break*/, 3];
282
- widgetContainerContext.widgetElement.loadContent(widgetConfigFilter);
283
- return [4 /*yield*/, this.setLock(widgetConfigFilter.config)];
284
- case 1:
285
- _a.sent();
286
- return [4 /*yield*/, this.setDownloadIcon()];
287
- case 2:
288
- _a.sent();
289
- _a.label = 3;
290
- case 3: return [2 /*return*/];
291
- }
292
- });
293
- });
294
- };
295
- /**
296
- * @private
297
- * @param {?} config
298
- * @return {?}
299
- */
300
- RAWidgetContainer.prototype.setLock = /**
301
- * @private
302
- * @param {?} config
303
- * @return {?}
304
- */
305
- function (config) {
306
- return tslib_1.__awaiter(this, void 0, void 0, function () {
307
- var _a;
308
- return tslib_1.__generator(this, function (_b) {
309
- switch (_b.label) {
310
- case 0:
311
- _a = this;
312
- return [4 /*yield*/, this.widgetElement.loadLockStatus(config)];
313
- case 1:
314
- _a.lockStatus = _b.sent();
315
- if (this.lockStatus) {
316
- switch (this.lockStatus) {
317
- case "lock": {
318
- this.lockClass = "fa fa-lock locked";
319
- break;
320
- }
321
- case "unlock": {
322
- this.lockClass = "unlocked";
323
- break;
324
- }
325
- case "partiallock": {
326
- this.lockClass = "fa fa-lock partiallocked";
327
- break;
328
- }
329
- default: {
330
- this.lockClass = "unlocked";
331
- break;
332
- }
333
- }
334
- }
335
- return [2 /*return*/];
336
- }
337
- });
338
- });
339
- };
340
- /**
341
- * @private
342
- * @return {?}
343
- */
344
- RAWidgetContainer.prototype.setDownloadIcon = /**
345
- * @private
346
- * @return {?}
347
- */
348
- function () {
349
- return tslib_1.__awaiter(this, void 0, void 0, function () {
350
- return tslib_1.__generator(this, function (_a) {
351
- // this.isDownloadIconVisible = await this.widgetElement.isDownloadVisible();
352
- this.isDownloadIconVisible = false; //temp. commented
353
- return [2 /*return*/];
354
- });
355
- });
356
- };
357
- /**
358
- * @return {?}
359
- */
360
- RAWidgetContainer.prototype.downloadClicked = /**
361
- * @return {?}
362
- */
363
- function () {
364
- //this.widgetElement.isDownloadVisible();
365
- };
366
- /**Show dropdown on gear icon click */
367
- /**
368
- * Show dropdown on gear icon click
369
- * @return {?}
370
- */
371
- RAWidgetContainer.prototype.showDropDown = /**
372
- * Show dropdown on gear icon click
373
- * @return {?}
374
- */
375
- function () {
376
- this.dropDownShown = !this.dropDownShown;
377
- };
378
- /**Hide dropdown on outside click */
379
- /**
380
- * Hide dropdown on outside click
381
- * @return {?}
382
- */
383
- RAWidgetContainer.prototype.hideDropDown = /**
384
- * Hide dropdown on outside click
385
- * @return {?}
386
- */
387
- function () {
388
- if (this.dropDownShown)
389
- this.dropDownShown = false;
390
- };
391
- RAWidgetContainer.decorators = [
392
- { type: Component, args: [{
393
- selector: 'ra-widget-container',
394
- template: "<div class=\"wc-wrapper\" (mouseleave) =\"hideDropDown()\">\n <div class=\"wcheader widget-move\">\n <div class=\"col-md-12 wc-mover\" style=\"padding-left: 0px;height:inherit;\">\n <div style=\"display:flex;margin-top:10px;\">\n <div class=\"col-md-11 float-left\" style=\"width:96%;padding-left: 0px\">{{data.widgetInfo.widgetTitle}}\n </div>\n <div class=\"col-md-1\" style=\"cursor:default;\">\n <div class=\"float-right\" style=\"display: flex;\">\n <div *ngIf=\"isDownloadIconVisible\"> <i class=\"far fa-download\" (click)=\"downloadClicked\"></i></div>\n <div class=\"pr-3\"><i [ngClass]=\"lockClass\"\n [attr.title]=\"lockStatus=='lock' ? 'Locked' : 'Partially Locked'\"></i></div>\n <div class=\"dropdown\">\n <div class=\"dropbtn gearIcon\"> <i #widgetDropdown class=\"fal fa-cog\" (click)=\"showDropDown()\"></i></div>\n <div class=\"dropdown-content widget-config-item\" [ngClass]=\"{'dropdown-click': dropDownShown}\">\n <a (click)=\"editWidget()\">\n <i class=\"fal fa-edit\"></i>\n <span>{{'Edit'|translate}}</span>\n </a>\n <a (click)=\"copyWidget()\">\n <i class=\"fal fa-copy\"></i>\n <span>{{'Copy'|translate}}</span>\n </a>\n <a (click)=\"moveWidget()\">\n <i class=\"fal fa-arrows-alt\"></i>\n <span>{{'Move'|translate}}</span>\n </a>\n <hr class=\"hr\">\n <a (click)=\"deleteWidget()\">\n <i class=\"fal fa-times\" style=\"padding-left: 3px;\"></i>\n <span>{{'Delete'|translate}}</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wcBody\">\n <div class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\n <div class=\"lds-roller\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </div>\n <perfect-scrollbar [scrollIndicators]=\"true\">\n <div #ctlWidget></div>\n </perfect-scrollbar>\n </div>\n</div>",
395
- styles: [".wcheader{width:100%;height:24px;background:#fff;color:#3dcd58;font-family:\"Arial Rounded MT\";font-size:16px;position:absolute;left:0;top:0}.wc-wrapper{height:100%;position:relative;margin:auto 15px}.wc-mover{cursor:all-scroll}.wcBody{width:100%;position:absolute;top:46px;left:0;bottom:0}.wcBodyBorder{border:1px dashed #e6e2e2}.sp_icon{float:left;margin:0 15% 0 0}.dropbtn{cursor:pointer;color:#42b4e6}.dropdown{visibility:hidden;opacity:0;-webkit-transition:visibility,opacity .5s linear;transition:visibility,opacity .5s linear;position:relative}.dropdown hr{margin:0!important}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:100px;box-shadow:0 8px 16px 8px rgba(0,0,0,.2);z-index:2;font-size:12px;font-weight:400}.dropdown-content a{color:#000;padding:5px 16px;text-decoration:none;display:block;cursor:pointer}.dropdown-content a:hover{background-color:#f1f1f1}.dropdown-click{display:block;-webkit-animation:.3s ease-out slide-down;animation:.3s ease-out slide-down}.dropdown:hover .dropdown-content{color:#fff}.wc-wrapper:hover .dropdown{visibility:visible;opacity:1}.gearIcon{color:#42b4e6}.hr{border:0;border-top:1px solid rgba(0,0,0,.1)}@keyframes slide-down{0%{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes slide-down{0%{opacity:0;-webkit-transform:translateY(-20%)}100%{opacity:1;-webkit-transform:translateY(0)}}.widget-config-item i{font-size:17px;color:#42b4e6}.widget-config-item span{font-size:12px;font:inherit;padding-left:12px;color:#42b4e6}.locked{color:#42b4e6}.partiallocked{color:#a0d9f2}.unlocked{display:none}"]
396
- }] }
397
- ];
398
- /** @nocollapse */
399
- RAWidgetContainer.ctorParameters = function () { return [
400
- { type: RaDashboardService },
401
- { type: NgxUiLoaderService },
402
- { type: RATranslateService },
403
- { type: NgZone },
404
- { type: NotifierService },
405
- { type: Renderer2 }
406
- ]; };
407
- RAWidgetContainer.propDecorators = {
408
- ctlWidget: [{ type: ViewChild, args: ['ctlWidget', { static: false },] }],
409
- widgetDropdown: [{ type: ViewChild, args: ['widgetDropdown', { static: false },] }],
410
- widgetInstanceId: [{ type: Input, args: ['widget-instance-id',] }],
411
- globalFilter: [{ type: Input, args: ['global-filter',] }],
412
- data: [{ type: Input, args: ['data',] }],
413
- raDashboardEventBus: [{ type: Input, args: ['event-bus',] }],
414
- appConfig: [{ type: Input, args: ['app-config',] }],
415
- width: [{ type: Input, args: ['widget-width',] }],
416
- height: [{ type: Input, args: ['widget-height',] }],
417
- widgetDeleted: [{ type: Output }]
418
- };
419
- return RAWidgetContainer;
420
- }());
421
- export { RAWidgetContainer };
422
- if (false) {
423
- /** @type {?} */
424
- RAWidgetContainer.prototype.showPanel;
425
- /**
426
- * @type {?}
427
- * @private
428
- */
429
- RAWidgetContainer.prototype.isWidgetLoaded;
430
- /**
431
- * @type {?}
432
- * @private
433
- */
434
- RAWidgetContainer.prototype.widgetElement;
435
- /**
436
- * @type {?}
437
- * @private
438
- */
439
- RAWidgetContainer.prototype.configChanged;
440
- /**
441
- * @type {?}
442
- * @private
443
- */
444
- RAWidgetContainer.prototype.isIEOrEdge;
445
- /** @type {?} */
446
- RAWidgetContainer.prototype.widgetHeight;
447
- /** @type {?} */
448
- RAWidgetContainer.prototype.lockClass;
449
- /** @type {?} */
450
- RAWidgetContainer.prototype.lockStatus;
451
- /** @type {?} */
452
- RAWidgetContainer.prototype.isDownloadIconVisible;
453
- /** @type {?} */
454
- RAWidgetContainer.prototype.dropDownShown;
455
- /** @type {?} */
456
- RAWidgetContainer.prototype.ctlWidget;
457
- /** @type {?} */
458
- RAWidgetContainer.prototype.widgetDropdown;
459
- /** @type {?} */
460
- RAWidgetContainer.prototype.widgetInstanceId;
461
- /** @type {?} */
462
- RAWidgetContainer.prototype.globalFilter;
463
- /** @type {?} */
464
- RAWidgetContainer.prototype.data;
465
- /** @type {?} */
466
- RAWidgetContainer.prototype.raDashboardEventBus;
467
- /** @type {?} */
468
- RAWidgetContainer.prototype.appConfig;
469
- /** @type {?} */
470
- RAWidgetContainer.prototype.width;
471
- /** @type {?} */
472
- RAWidgetContainer.prototype.height;
473
- /** @type {?} */
474
- RAWidgetContainer.prototype.widgetDeleted;
475
- /**
476
- * @type {?}
477
- * @private
478
- */
479
- RAWidgetContainer.prototype.dashboardService;
480
- /**
481
- * @type {?}
482
- * @private
483
- */
484
- RAWidgetContainer.prototype.ngxService;
485
- /**
486
- * @type {?}
487
- * @private
488
- */
489
- RAWidgetContainer.prototype.translateService;
490
- /**
491
- * @type {?}
492
- * @private
493
- */
494
- RAWidgetContainer.prototype.ngZone;
495
- /**
496
- * @type {?}
497
- * @private
498
- */
499
- RAWidgetContainer.prototype.notifier;
500
- /**
501
- * @type {?}
502
- * @private
503
- */
504
- RAWidgetContainer.prototype.renderer;
505
- }
506
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFvRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNMLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RDtJQWdDRSwyQkFBb0IsZ0JBQW9DLEVBQzlDLFVBQThCLEVBQzlCLGdCQUFvQyxFQUNwQyxNQUFjLEVBQ2QsUUFBeUIsRUFDekIsUUFBbUI7UUFMN0IsaUJBY0M7UUFkbUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUM5QyxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBOUJ0QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzFCLG1CQUFjLEdB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ekMsNkNBQTRDOzs7OztJQUN0RCx1Q0FBc0M7Ozs7O0lBQ3RDLDZDQUE0Qzs7Ozs7SUFDNUMsbUNBQXNCOzs7OztJQUN0QixxQ0FBaUM7Ozs7O0lBQ2pDLHFDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XG5pbXBvcnQgeyBSQUV2ZW50LCBSQUV2ZW50S2V5IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XG5pbXBvcnQgeyBJQXBwQ29uZmlnLCBJV2lkZ2V0Q29uZmlnRmlsdGVyLCBJV2lkZ2V0SW5mbyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XG5cbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyYS13aWRnZXQtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSQVdpZGdldENvbnRhaW5lciBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgc2hvd1BhbmVsOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSB3aWRnZXRFbGVtZW50OiBhbnk7XG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlZDogYW55O1xuICBwcml2YXRlIGlzSUVPckVkZ2UgPSAvbXNpZVxcc3x0cmlkZW50XFwvfGVkZ2VcXC8vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgcHVibGljIHdpZGdldEhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgbG9ja0NsYXNzOiBzdHJpbmcgPSBcInVubG9ja2VkXCI7XG4gIHB1YmxpYyBsb2NrU3RhdHVzOiBzdHJpbmcgPSBcInVubG9ja1wiO1xuICBwdWJsaWMgaXNEb3dubG9hZEljb25WaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkcm9wRG93blNob3duOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY3RsV2lkZ2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGN0bFdpZGdldDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnd2lkZ2V0RHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgd2lkZ2V0RHJvcGRvd246IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCd3aWRnZXQtaW5zdGFuY2UtaWQnKSB3aWRnZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlcjogYW55O1xuICBASW5wdXQoJ2RhdGEnKSBkYXRhOiBhbnk7XG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnOiBJQXBwQ29uZmlnO1xuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZHRoOiBudW1iZXI7XG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIGhlaWdodDogbnVtYmVyO1xuXG4gIEBPdXRwdXQoKSB3aWRnZXREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcblxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsKGU6RXZlbnQpPT57XG4gICAgICAgaWYoZS50YXJnZXQgIT09IHRoaXMud2lkZ2V0RHJvcGRvd24ubmF0aXZlRWxlbWVudCApe1xuICAgICAgICB0aGlzLmRyb3BEb3duU2hvd24gPSBmYWxzZTtcbiAgICAgICB9XG4gICB9KTtcblxuXG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZWQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlV2l0aEtleShSQUV2ZW50LkNvbmZpZ0NoYW5nZWQsIFJBRXZlbnRLZXkuV2lkZ2V0SW5zdGFuY2VJZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZC50b1N0cmluZygpKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcihlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmdsb2JhbEZpbHRlci5wcmV2aW91c1ZhbHVlKSB7XG5cbiAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMud2lkdGggJiYgY2hhbmdlcy53aWR0aC5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy53aWR0aC5wcmV2aW91c1ZhbHVlIHx8XG4gICAgICAoY2hhbmdlcy5oZWlnaHQgJiYgY2hhbmdlcy5oZWlnaHQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuaGVpZ2h0LnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XG4gICAgICAgIGxldCBzaXplOiBhbnkgPSB7fTtcbiAgICAgICAgc2l6ZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgc2l6ZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkKHNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZWQpXG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZWQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG5cbiAgLyoqIFRvIEVkaXQgY3VycmVudCB3aWRnZXQgY29uZmlndXJhdGlvbiovXG4gIHB1YmxpYyBlZGl0V2lkZ2V0KCkge1xuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcbiAgfVxuXG4gIC8qKiBUbyBEZWxldGUgY3VycmVudCB3aWRnZXQgZnJvbSBET00qL1xuICBwdWJsaWMgZGVsZXRlV2lkZ2V0KCkge1xuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RhcnQoKTtcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RvcCgpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldERlbGV0ZWQuZW1pdCh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5vdGlmaWVyLm5vdGlmeSgnZXJyb3InLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0ZhaWxlZFRvUmVtb3ZlV2lkZ2V0JykgKyBcIiAgKFwiICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUgKyBcIikhXCIpO1xuXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogVG8gTW92ZSBvciBjaGFuZ2UgcG9zaXRpb24gaWYgY3VycmVudCB3aWRnZXQgY29udGFpbmVyKi9cbiAgcHVibGljIG1vdmVXaWRnZXQoKSB7XG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Nb3ZlV2lkZ2V0LCB0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XG4gICAgLy8gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLm1vdmVXaWRnZXQod2lkZ2V0SW5mbyk7XG4gIH1cblxuICAvKiogVG8gQ29weSBDdXJyZW50IHdpZGdldCB3aXRoIHNhbWUgY29uZmlndXJhdGlvbiovXG4gIHB1YmxpYyBjb3B5V2lkZ2V0KCkge1xuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQ29weVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xuICAgIC8vdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNvcHlXaWRnZXQod2lkZ2V0SW5mbyk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKHdpZGdldEluZm8pIHtcbiAgICB0aGlzLmRhdGEud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XG4gICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcbiAgICAvLyB0aGlzLnVwZGF0ZVdpZGdldCh3aWRnZXRJbmZvKTtcbiAgfVxuXG5cbiAgLyoqICBUbyBsb2FkIGV4dGVybmFsIGN1c3RvbSBlbGVtZW50IHRvIHRoZSB3aWRnZXQgY29udGFpbmVyKi9cbiAgYXN5bmMgbG9hZFdpZGdldCh3aWRnZXRJbmZvOiBhbnkpIHtcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlclxuICAgIH1cblxuICAgIGxldCB3aWRnZXRDb250YWluZXIgPSB0aGlzO1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5sb2FkRXh0ZXJuYWxTY3JpcHQod2lkZ2V0SW5mby5zY3JpcHRVcmwsICgpID0+IHtcblxuICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHdpZGdldEluZm8uY3VzdG9tVGFnKTtcbiAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZGdldC1pbnN0YW5jZS1pZFwiLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ29uLWRhdGEtbG9hZCcsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmRldGFpbClcbiAgICAgICAgICAgICAgdGhpcy5zaG93UGFuZWwgPSB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0aGlzLnNob3dQYW5lbCA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLmlzV2lkZ2V0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuYXBwQ29uZmlnID0gdGhpcy5hcHBDb25maWc7XG4gICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e307XG4gICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8ud2lkZ2V0TmFtZSA9IHdpZGdldEluZm8ud2lkZ2V0TmFtZTtcbiAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xuICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xuICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXREb3dubG9hZEljb24oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmN0bFdpZGdldC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud2lkZ2V0RWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogVG8gcmVmcmVzaCB3aWRnZXQgb24gaW5wdXQgY29uZmlnIGNoYW5nZXMgKi9cbiAgYXN5bmMgcmVmcmVzaFdpZGdldCh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbykge1xuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXG4gICAgICB3aWRnZXRJbmZvOiB3aWRnZXRJbmZvXG4gICAgfVxuICAgIGlmICh3aWRnZXRDb250YWluZXJDb250ZXh0LmlzV2lkZ2V0TG9hZGVkKSB7XG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRMb2NrKGNvbmZpZzogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NrU3RhdHVzID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmxvYWRMb2NrU3RhdHVzKGNvbmZpZyk7XG4gICAgaWYgKHRoaXMubG9ja1N0YXR1cykge1xuICAgICAgc3dpdGNoICh0aGlzLmxvY2tTdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcImxvY2tcIjoge1xuICAgICAgICAgIHRoaXMubG9ja0NsYXNzID0gXCJmYSBmYS1sb2NrIGxvY2tlZFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ1bmxvY2tcIjoge1xuICAgICAgICAgIHRoaXMubG9ja0NsYXNzID0gXCJ1bmxvY2tlZFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJwYXJ0aWFsbG9ja1wiOiB7XG4gICAgICAgICAgdGhpcy5sb2NrQ2xhc3MgPSBcImZhIGZhLWxvY2sgcGFydGlhbGxvY2tlZFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aGlzLmxvY2tDbGFzcyA9IFwidW5sb2NrZWRcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0RG93bmxvYWRJY29uKCkge1xuICAgIC8vIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmlzRG93bmxvYWRWaXNpYmxlKCk7XG4gICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTsvL3RlbXAuIGNvbW1lbnRlZFxuXG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRDbGlja2VkKCkge1xuICAgIC8vdGhpcy53aWRnZXRFbGVtZW50LmlzRG93bmxvYWRWaXNpYmxlKCk7XG4gIH1cblxuICAvKipTaG93IGRyb3Bkb3duIG9uIGdlYXIgaWNvbiBjbGljayAgKi9cbiAgcHVibGljIHNob3dEcm9wRG93bigpIHtcbiAgICB0aGlzLmRyb3BEb3duU2hvd24gPSAhdGhpcy5kcm9wRG93blNob3duO1xuICB9XG5cbiAgLyoqSGlkZSBkcm9wZG93biBvbiBvdXRzaWRlIGNsaWNrICovXG4gIHB1YmxpYyBoaWRlRHJvcERvd24oKSB7XG4gICAgaWYodGhpcy5kcm9wRG93blNob3duKVxuICAgICAgdGhpcy5kcm9wRG93blNob3duID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { Component, Input, ViewChild, ElementRef, EventEmitter, Output, NgZone, Renderer2 } from '@angular/core';
7
+ import { RaDashboardService } from './../ra.dashboard.service';
8
+ import { RADashboardEventBus } from '../ra.dashbard.event.bus';
9
+ import { RAEvent, RAEventKey } from '../ra.event.enum';
10
+ import { RADownloadType, RADownloadOption } from '@schneideress/widgetframework';
11
+ import { NgxUiLoaderService } from 'ngx-ui-loader';
12
+ import { NotifierService } from 'angular-notifier';
13
+ import { RATranslateService } from '@schneideress/ra-common';
14
+ var RAWidgetContainer = /** @class */ (function () {
15
+ function RAWidgetContainer(dashboardService, ngxService, translateService, ngZone, notifier, renderer) {
16
+ var _this = this;
17
+ this.dashboardService = dashboardService;
18
+ this.ngxService = ngxService;
19
+ this.translateService = translateService;
20
+ this.ngZone = ngZone;
21
+ this.notifier = notifier;
22
+ this.renderer = renderer;
23
+ this.showPanel = false;
24
+ this.isWidgetLoaded = false;
25
+ this.isIEOrEdge = /msie\s|trident\/|edge\//i.test(window.navigator.userAgent);
26
+ this.lockClass = "unlocked";
27
+ this.lockStatus = "unlock";
28
+ this.isDownloadIconVisible = false;
29
+ this.dropDownShown = false;
30
+ this.isDownloadChartVisible = false;
31
+ this.widgetDeleted = new EventEmitter();
32
+ this.renderer.listen('window', 'click', (/**
33
+ * @param {?} e
34
+ * @return {?}
35
+ */
36
+ function (e) {
37
+ if (e.target !== _this.widgetDropdown.nativeElement) {
38
+ _this.dropDownShown = false;
39
+ }
40
+ }));
41
+ this.renderer.listen('window', 'click', (/**
42
+ * @param {?} e
43
+ * @return {?}
44
+ */
45
+ function (e) {
46
+ if (_this.widgetDownload && e.target !== _this.widgetDownload.nativeElement) {
47
+ _this.isDownloadChartVisible = false;
48
+ }
49
+ }));
50
+ }
51
+ /**
52
+ * @param {?} changes
53
+ * @return {?}
54
+ */
55
+ RAWidgetContainer.prototype.ngOnChanges = /**
56
+ * @param {?} changes
57
+ * @return {?}
58
+ */
59
+ function (changes) {
60
+ var _this = this;
61
+ if (changes.raDashboardEventBus && changes.raDashboardEventBus.currentValue != changes.raDashboardEventBus.previousValue) {
62
+ this.configChanged = this.raDashboardEventBus.subscribeWithKey(RAEvent.ConfigChanged, RAEventKey.WidgetInstanceId, this.data.widgetInfo.widgetInstanceId.toString()).subscribe((/**
63
+ * @param {?} e
64
+ * @return {?}
65
+ */
66
+ function (e) {
67
+ _this.ngZone.run((/**
68
+ * @return {?}
69
+ */
70
+ function () {
71
+ _this.configChangeEventHandler(e);
72
+ }));
73
+ }));
74
+ }
75
+ if (this.widgetElement && changes.globalFilter && changes.globalFilter.currentValue != changes.globalFilter.previousValue) {
76
+ this.refreshWidget(this.data.widgetInfo);
77
+ }
78
+ if (changes.width && changes.width.currentValue != changes.width.previousValue ||
79
+ (changes.height && changes.height.currentValue != changes.height.previousValue)) {
80
+ if (this.widgetElement) {
81
+ /** @type {?} */
82
+ var size = {};
83
+ size.height = this.height;
84
+ size.width = this.width;
85
+ this.widgetElement.widgetResized(size);
86
+ }
87
+ }
88
+ };
89
+ /**
90
+ * @return {?}
91
+ */
92
+ RAWidgetContainer.prototype.ngAfterViewInit = /**
93
+ * @return {?}
94
+ */
95
+ function () {
96
+ var _this = this;
97
+ setTimeout((/**
98
+ * @return {?}
99
+ */
100
+ function () {
101
+ _this.loadWidget(_this.data.widgetInfo);
102
+ }));
103
+ };
104
+ /**
105
+ * @return {?}
106
+ */
107
+ RAWidgetContainer.prototype.ngOnDestroy = /**
108
+ * @return {?}
109
+ */
110
+ function () {
111
+ if (this.configChanged)
112
+ this.configChanged.unsubscribe();
113
+ };
114
+ /** To Edit current widget configuration*/
115
+ /**
116
+ * To Edit current widget configuration
117
+ * @return {?}
118
+ */
119
+ RAWidgetContainer.prototype.editWidget = /**
120
+ * To Edit current widget configuration
121
+ * @return {?}
122
+ */
123
+ function () {
124
+ this.raDashboardEventBus.publish(RAEvent.WidgetEditClicked, this.data.widgetInfo);
125
+ };
126
+ /** To Delete current widget from DOM*/
127
+ /**
128
+ * To Delete current widget from DOM
129
+ * @return {?}
130
+ */
131
+ RAWidgetContainer.prototype.deleteWidget = /**
132
+ * To Delete current widget from DOM
133
+ * @return {?}
134
+ */
135
+ function () {
136
+ var _this = this;
137
+ /** @type {?} */
138
+ var widgetContainerContext = this;
139
+ widgetContainerContext.ngxService.start();
140
+ widgetContainerContext.dashboardService.deleteWidget(this.data.widgetInfo, this.appConfig).subscribe((/**
141
+ * @param {?} status
142
+ * @return {?}
143
+ */
144
+ function (status) {
145
+ widgetContainerContext.ngxService.stop();
146
+ if (status) {
147
+ widgetContainerContext.widgetDeleted.emit(_this.data.widgetInfo.widgetInstanceId);
148
+ }
149
+ else {
150
+ widgetContainerContext.notifier.notify('error', " " + _this.translateService.translate('FailedToRemoveWidget') + " (" + _this.data.widgetInfo.widgetTitle + ")!");
151
+ }
152
+ }));
153
+ };
154
+ /** To Move or change position if current widget container*/
155
+ /**
156
+ * To Move or change position if current widget container
157
+ * @return {?}
158
+ */
159
+ RAWidgetContainer.prototype.moveWidget = /**
160
+ * To Move or change position if current widget container
161
+ * @return {?}
162
+ */
163
+ function () {
164
+ this.raDashboardEventBus.publish(RAEvent.MoveWidget, this.data.widgetInfo);
165
+ // this.dashboardService.moveWidget(widgetInfo);
166
+ };
167
+ /** To Copy Current widget with same configuration*/
168
+ /**
169
+ * To Copy Current widget with same configuration
170
+ * @return {?}
171
+ */
172
+ RAWidgetContainer.prototype.copyWidget = /**
173
+ * To Copy Current widget with same configuration
174
+ * @return {?}
175
+ */
176
+ function () {
177
+ this.raDashboardEventBus.publish(RAEvent.CopyWidget, this.data.widgetInfo);
178
+ //this.dashboardService.copyWidget(widgetInfo);
179
+ };
180
+ /**
181
+ * @param {?} widgetInfo
182
+ * @return {?}
183
+ */
184
+ RAWidgetContainer.prototype.configChangeEventHandler = /**
185
+ * @param {?} widgetInfo
186
+ * @return {?}
187
+ */
188
+ function (widgetInfo) {
189
+ this.data.widgetInfo = widgetInfo;
190
+ this.refreshWidget(this.data.widgetInfo);
191
+ // this.updateWidget(widgetInfo);
192
+ };
193
+ /** To load external custom element to the widget container*/
194
+ /**
195
+ * To load external custom element to the widget container
196
+ * @param {?} widgetInfo
197
+ * @return {?}
198
+ */
199
+ RAWidgetContainer.prototype.loadWidget = /**
200
+ * To load external custom element to the widget container
201
+ * @param {?} widgetInfo
202
+ * @return {?}
203
+ */
204
+ function (widgetInfo) {
205
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
206
+ var widgetConfigFilter, widgetContainer;
207
+ var _this = this;
208
+ return tslib_1.__generator(this, function (_a) {
209
+ widgetConfigFilter = (/** @type {?} */ ({
210
+ config: widgetInfo.widgetConfigInfo.config,
211
+ globalFilter: this.globalFilter
212
+ }));
213
+ widgetContainer = this;
214
+ this.dashboardService.loadExternalScript(widgetInfo.scriptUrl, (/**
215
+ * @return {?}
216
+ */
217
+ function () {
218
+ widgetContainer.widgetElement = document.createElement(widgetInfo.customTag);
219
+ widgetContainer.widgetElement.setAttribute("widget-instance-id", widgetInfo.widgetInstanceId);
220
+ document.body.addEventListener('widgetinitiated' + widgetInfo.widgetInstanceId, (/**
221
+ * @return {?}
222
+ */
223
+ function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
224
+ var _this = this;
225
+ return tslib_1.__generator(this, function (_a) {
226
+ setTimeout((/**
227
+ * @return {?}
228
+ */
229
+ function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
230
+ var _this = this;
231
+ return tslib_1.__generator(this, function (_a) {
232
+ switch (_a.label) {
233
+ case 0:
234
+ this.widgetElement.addEventListener('on-data-load', (/**
235
+ * @param {?} e
236
+ * @return {?}
237
+ */
238
+ function (e) {
239
+ if (e.detail)
240
+ _this.showPanel = true;
241
+ else
242
+ _this.showPanel = false;
243
+ }));
244
+ widgetContainer.isWidgetLoaded = true;
245
+ widgetConfigFilter.appConfig = this.appConfig;
246
+ widgetConfigFilter.widgetInfo = widgetInfo;
247
+ // widgetConfigFilter.widgetInfo = <IWidgetInfo>{};
248
+ widgetConfigFilter.widgetInfo.widgetName = widgetInfo.widgetName;
249
+ widgetContainer.widgetElement.loadContent(widgetConfigFilter);
250
+ return [4 /*yield*/, widgetContainer.setLock(widgetConfigFilter.config)];
251
+ case 1:
252
+ _a.sent();
253
+ return [4 /*yield*/, widgetContainer.setDownloadIcon()];
254
+ case 2:
255
+ _a.sent();
256
+ return [2 /*return*/];
257
+ }
258
+ });
259
+ }); }));
260
+ return [2 /*return*/];
261
+ });
262
+ }); }));
263
+ _this.ctlWidget.nativeElement.appendChild(_this.widgetElement);
264
+ }));
265
+ return [2 /*return*/];
266
+ });
267
+ });
268
+ };
269
+ /** To refresh widget on input config changes */
270
+ /**
271
+ * To refresh widget on input config changes
272
+ * @param {?} widgetInfo
273
+ * @return {?}
274
+ */
275
+ RAWidgetContainer.prototype.refreshWidget = /**
276
+ * To refresh widget on input config changes
277
+ * @param {?} widgetInfo
278
+ * @return {?}
279
+ */
280
+ function (widgetInfo) {
281
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
282
+ var widgetContainerContext, widgetConfigFilter;
283
+ return tslib_1.__generator(this, function (_a) {
284
+ switch (_a.label) {
285
+ case 0:
286
+ widgetContainerContext = this;
287
+ widgetConfigFilter = (/** @type {?} */ ({
288
+ config: widgetInfo.widgetConfigInfo.config,
289
+ globalFilter: this.globalFilter,
290
+ appConfig: this.appConfig,
291
+ widgetInfo: widgetInfo
292
+ }));
293
+ if (!widgetContainerContext.isWidgetLoaded) return [3 /*break*/, 3];
294
+ widgetContainerContext.widgetElement.loadContent(widgetConfigFilter);
295
+ return [4 /*yield*/, this.setLock(widgetConfigFilter.config)];
296
+ case 1:
297
+ _a.sent();
298
+ return [4 /*yield*/, this.setDownloadIcon()];
299
+ case 2:
300
+ _a.sent();
301
+ _a.label = 3;
302
+ case 3: return [2 /*return*/];
303
+ }
304
+ });
305
+ });
306
+ };
307
+ /**
308
+ * @private
309
+ * @param {?} config
310
+ * @return {?}
311
+ */
312
+ RAWidgetContainer.prototype.setLock = /**
313
+ * @private
314
+ * @param {?} config
315
+ * @return {?}
316
+ */
317
+ function (config) {
318
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
319
+ var _a;
320
+ return tslib_1.__generator(this, function (_b) {
321
+ switch (_b.label) {
322
+ case 0:
323
+ _a = this;
324
+ return [4 /*yield*/, this.widgetElement.loadLockStatus(config)];
325
+ case 1:
326
+ _a.lockStatus = _b.sent();
327
+ if (this.lockStatus) {
328
+ switch (this.lockStatus) {
329
+ case "lock": {
330
+ this.lockClass = "fas fa-lock locked";
331
+ break;
332
+ }
333
+ case "unlock": {
334
+ this.lockClass = "unlocked";
335
+ break;
336
+ }
337
+ case "partiallock": {
338
+ this.lockClass = "fas fa-lock partiallocked";
339
+ break;
340
+ }
341
+ default: {
342
+ this.lockClass = "unlocked";
343
+ break;
344
+ }
345
+ }
346
+ }
347
+ return [2 /*return*/];
348
+ }
349
+ });
350
+ });
351
+ };
352
+ /**
353
+ * @private
354
+ * @return {?}
355
+ */
356
+ RAWidgetContainer.prototype.setDownloadIcon = /**
357
+ * @private
358
+ * @return {?}
359
+ */
360
+ function () {
361
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
362
+ var downloadType;
363
+ return tslib_1.__generator(this, function (_a) {
364
+ switch (_a.label) {
365
+ case 0: return [4 /*yield*/, this.widgetElement.getDownloadType()];
366
+ case 1:
367
+ downloadType = _a.sent();
368
+ this.downloadIconType = downloadType;
369
+ if (downloadType != RADownloadType.None) {
370
+ this.isDownloadIconVisible = true;
371
+ }
372
+ return [2 /*return*/];
373
+ }
374
+ });
375
+ });
376
+ };
377
+ /**
378
+ * @return {?}
379
+ */
380
+ RAWidgetContainer.prototype.downloadClicked = /**
381
+ * @return {?}
382
+ */
383
+ function () {
384
+ switch (this.downloadIconType) {
385
+ case RADownloadType.Grid:
386
+ this.downloadIconClicked('CSV');
387
+ break;
388
+ case RADownloadType.Chart:
389
+ this.isDownloadChartVisible = true;
390
+ break;
391
+ case RADownloadType.Custom:
392
+ break;
393
+ }
394
+ };
395
+ /**
396
+ * @param {?} type
397
+ * @return {?}
398
+ */
399
+ RAWidgetContainer.prototype.downloadIconClicked = /**
400
+ * @param {?} type
401
+ * @return {?}
402
+ */
403
+ function (type) {
404
+ switch (type) {
405
+ case "CSV":
406
+ this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.CSV);
407
+ break;
408
+ case "PNG":
409
+ this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.PNG);
410
+ break;
411
+ case "PDF":
412
+ this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.PDF);
413
+ break;
414
+ }
415
+ };
416
+ /**Show dropdown on gear icon click */
417
+ /**
418
+ * Show dropdown on gear icon click
419
+ * @return {?}
420
+ */
421
+ RAWidgetContainer.prototype.showDropDown = /**
422
+ * Show dropdown on gear icon click
423
+ * @return {?}
424
+ */
425
+ function () {
426
+ this.dropDownShown = !this.dropDownShown;
427
+ };
428
+ /**Hide dropdown on outside click */
429
+ /**
430
+ * Hide dropdown on outside click
431
+ * @return {?}
432
+ */
433
+ RAWidgetContainer.prototype.hideDropDown = /**
434
+ * Hide dropdown on outside click
435
+ * @return {?}
436
+ */
437
+ function () {
438
+ if (this.dropDownShown)
439
+ this.dropDownShown = false;
440
+ };
441
+ RAWidgetContainer.decorators = [
442
+ { type: Component, args: [{
443
+ selector: 'ra-widget-container',
444
+ template: "<div class=\"wc-wrapper\" (mouseleave)=\"hideDropDown()\">\r\n <div class=\"wcheader widget-move\">\r\n <div class=\"col-md-12 wc-mover\" style=\"padding-left: 0px;height:inherit;\">\r\n <div style=\"display:flex;margin-top:10px;\">\r\n <div class=\"col-md-11 float-left\" style=\"width:96%;padding-left: 0px\">{{data.widgetInfo.widgetTitle}}\r\n </div>\r\n <div class=\"col-md-1\" style=\"cursor:default;padding-right: 0px;\">\r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div class=\"title-bar-icon download\" *ngIf=\"isDownloadIconVisible\">\r\n <i class=\"fas fa-download\" #widgetDownload (click)=\"downloadClicked()\"></i>\r\n <div class=\"download-content\" [ngClass]=\"{'dropdown-click': isDownloadChartVisible}\">\r\n <a (click)=\"downloadIconClicked('PNG')\">\r\n <i class=\"fal fa-edit\"></i>\r\n <span>{{'PNG'|translate}}</span>\r\n </a>\r\n <a (click)=\"downloadIconClicked('PNG')\">\r\n <i class=\"fal fa-edit\"></i>\r\n <span>{{'JPEG'|translate}}</span>\r\n </a>\r\n <a (click)=\"downloadIconClicked('PNG')\">\r\n <i class=\"fal fa-edit\"></i>\r\n <span>{{'PDF'|translate}}</span>\r\n </a> \r\n <a (click)=\"downloadIconClicked('SVG')\">\r\n <i class=\"fal fa-edit\"></i>\r\n <span>{{'svg'|translate}}</span>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"dropdown\">\r\n <div class=\"dropbtn title-bar-icon\"> <i #widgetDropdown class=\"fas fa-cog\" (click)=\"showDropDown()\"></i>\r\n </div>\r\n <div class=\"dropdown-content widget-config-item\" [ngClass]=\"{'dropdown-click': dropDownShown}\">\r\n <a (click)=\"editWidget()\">\r\n <i class=\"fal fa-edit\"></i>\r\n <span>{{'Edit'|translate}}</span>\r\n </a>\r\n <a (click)=\"copyWidget()\">\r\n <i class=\"fal fa-copy\"></i>\r\n <span>{{'Copy'|translate}}</span>\r\n </a>\r\n <a (click)=\"moveWidget()\">\r\n <i class=\"fal fa-arrows-alt\"></i>\r\n <span>{{'Move'|translate}}</span>\r\n </a>\r\n <hr class=\"hr\">\r\n <a (click)=\"deleteWidget()\">\r\n <i class=\"fal fa-times\" style=\"padding-left: 3px;\"></i>\r\n <span>{{'Delete'|translate}}</span>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"title-bar-lock-icon\"><i [ngClass]=\"lockClass\"\r\n [attr.title]=\"lockStatus=='lock' ? 'Locked' : 'Partially Locked'\"></i></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\">\r\n <div class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <perfect-scrollbar [scrollIndicators]=\"true\">\r\n <div #ctlWidget></div>\r\n </perfect-scrollbar>\r\n </div>\r\n</div>\r\n",
445
+ styles: [".wcheader{width:100%;height:24px;background:#fff;color:#3dcd58;font-family:\"Arial Rounded MT\";font-size:16px;position:absolute;left:0;top:0}.wc-wrapper{height:100%;position:relative;margin:auto 15px}.wc-mover{cursor:all-scroll}.wcBody{width:100%;position:absolute;top:46px;left:0;bottom:15px}.wcBodyBorder{border:1px dashed #e6e2e2}.sp_icon{float:left;margin:0 15% 0 0}.dropbtn{cursor:pointer;color:#42b4e6}.dropdown{visibility:hidden;opacity:0;-webkit-transition:visibility,opacity .5s linear;transition:visibility,opacity .5s linear;position:relative}.dropdown hr{margin:0!important}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:100px;box-shadow:0 8px 16px 8px rgba(0,0,0,.2);z-index:2;font-size:12px;font-weight:400}.dropdown-content a{color:#000;padding:5px 16px;text-decoration:none;display:block;cursor:pointer}.dropdown-content a:hover{background-color:#f1f1f1}.dropdown-click{display:block;-webkit-animation:.3s ease-out slide-down;animation:.3s ease-out slide-down}.dropdown:hover .dropdown-content{color:#fff}.wc-wrapper:hover .dropdown{visibility:visible;opacity:1}.title-bar-icon{margin:0 3px;color:#42b4e6}.title-bar-lock-icon{margin:0 3px}.hr{border:0;border-top:1px solid rgba(0,0,0,.1)}@keyframes slide-down{0%{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes slide-down{0%{opacity:0;-webkit-transform:translateY(-20%)}100%{opacity:1;-webkit-transform:translateY(0)}}.widget-config-item i{font-size:17px;color:#42b4e6}.widget-config-item span{font-size:12px;font:inherit;padding-left:12px;color:#42b4e6}.locked{color:#42b4e6}.partiallocked{color:#a0d9f2}.unlocked{display:none}.download{visibility:hidden;opacity:0;-webkit-transition:visibility,opacity .5s linear;transition:visibility,opacity .5s linear;position:relative}.wc-wrapper:hover .download{visibility:visible;opacity:1}"]
446
+ }] }
447
+ ];
448
+ /** @nocollapse */
449
+ RAWidgetContainer.ctorParameters = function () { return [
450
+ { type: RaDashboardService },
451
+ { type: NgxUiLoaderService },
452
+ { type: RATranslateService },
453
+ { type: NgZone },
454
+ { type: NotifierService },
455
+ { type: Renderer2 }
456
+ ]; };
457
+ RAWidgetContainer.propDecorators = {
458
+ ctlWidget: [{ type: ViewChild, args: ['ctlWidget', { static: false },] }],
459
+ widgetDropdown: [{ type: ViewChild, args: ['widgetDropdown', { static: false },] }],
460
+ widgetDownload: [{ type: ViewChild, args: ['widgetDownload', { static: false },] }],
461
+ widgetInstanceId: [{ type: Input, args: ['widget-instance-id',] }],
462
+ globalFilter: [{ type: Input, args: ['global-filter',] }],
463
+ data: [{ type: Input, args: ['data',] }],
464
+ raDashboardEventBus: [{ type: Input, args: ['event-bus',] }],
465
+ appConfig: [{ type: Input, args: ['app-config',] }],
466
+ width: [{ type: Input, args: ['widget-width',] }],
467
+ height: [{ type: Input, args: ['widget-height',] }],
468
+ widgetDeleted: [{ type: Output }]
469
+ };
470
+ return RAWidgetContainer;
471
+ }());
472
+ export { RAWidgetContainer };
473
+ if (false) {
474
+ /** @type {?} */
475
+ RAWidgetContainer.prototype.showPanel;
476
+ /**
477
+ * @type {?}
478
+ * @private
479
+ */
480
+ RAWidgetContainer.prototype.isWidgetLoaded;
481
+ /**
482
+ * @type {?}
483
+ * @private
484
+ */
485
+ RAWidgetContainer.prototype.widgetElement;
486
+ /**
487
+ * @type {?}
488
+ * @private
489
+ */
490
+ RAWidgetContainer.prototype.configChanged;
491
+ /**
492
+ * @type {?}
493
+ * @private
494
+ */
495
+ RAWidgetContainer.prototype.isIEOrEdge;
496
+ /** @type {?} */
497
+ RAWidgetContainer.prototype.widgetHeight;
498
+ /** @type {?} */
499
+ RAWidgetContainer.prototype.lockClass;
500
+ /** @type {?} */
501
+ RAWidgetContainer.prototype.lockStatus;
502
+ /** @type {?} */
503
+ RAWidgetContainer.prototype.isDownloadIconVisible;
504
+ /** @type {?} */
505
+ RAWidgetContainer.prototype.dropDownShown;
506
+ /** @type {?} */
507
+ RAWidgetContainer.prototype.isDownloadChartVisible;
508
+ /** @type {?} */
509
+ RAWidgetContainer.prototype.downloadIconType;
510
+ /** @type {?} */
511
+ RAWidgetContainer.prototype.ctlWidget;
512
+ /** @type {?} */
513
+ RAWidgetContainer.prototype.widgetDropdown;
514
+ /** @type {?} */
515
+ RAWidgetContainer.prototype.widgetDownload;
516
+ /** @type {?} */
517
+ RAWidgetContainer.prototype.widgetInstanceId;
518
+ /** @type {?} */
519
+ RAWidgetContainer.prototype.globalFilter;
520
+ /** @type {?} */
521
+ RAWidgetContainer.prototype.data;
522
+ /** @type {?} */
523
+ RAWidgetContainer.prototype.raDashboardEventBus;
524
+ /** @type {?} */
525
+ RAWidgetContainer.prototype.appConfig;
526
+ /** @type {?} */
527
+ RAWidgetContainer.prototype.width;
528
+ /** @type {?} */
529
+ RAWidgetContainer.prototype.height;
530
+ /** @type {?} */
531
+ RAWidgetContainer.prototype.widgetDeleted;
532
+ /**
533
+ * @type {?}
534
+ * @private
535
+ */
536
+ RAWidgetContainer.prototype.dashboardService;
537
+ /**
538
+ * @type {?}
539
+ * @private
540
+ */
541
+ RAWidgetContainer.prototype.ngxService;
542
+ /**
543
+ * @type {?}
544
+ * @private
545
+ */
546
+ RAWidgetContainer.prototype.translateService;
547
+ /**
548
+ * @type {?}
549
+ * @private
550
+ */
551
+ RAWidgetContainer.prototype.ngZone;
552
+ /**
553
+ * @type {?}
554
+ * @private
555
+ */
556
+ RAWidgetContainer.prototype.notifier;
557
+ /**
558
+ * @type {?}
559
+ * @private
560
+ */
561
+ RAWidgetContainer.prototype.renderer;
562
+ }
563
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFvRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNMLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFnRCxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdEO0lBb0NFLDJCQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQjtRQUw3QixpQkFvQkM7UUFwQm1CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDOUMsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFB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QUFpRjs7SUFDakYseUNBQTRCOztJQUM1QixzQ0FBc0M7O0lBQ3RDLHVDQUFxQzs7SUFDckMsa0RBQThDOztJQUM5QywwQ0FBc0M7O0lBQ3RDLG1EQUErQzs7SUFDL0MsNkNBQXdDOztJQUV4QyxzQ0FBaUU7O0lBQ2pFLDJDQUEyRTs7SUFDM0UsMkNBQTJFOztJQUczRSw2Q0FBc0Q7O0lBQ3RELHlDQUEwQzs7SUFDMUMsaUNBQXlCOztJQUN6QixnREFBNkQ7O0lBQzdELHNDQUEyQzs7SUFDM0Msa0NBQXFDOztJQUNyQyxtQ0FBdUM7O0lBRXZDLDBDQUFxRDs7Ozs7SUFHekMsNkNBQTRDOzs7OztJQUN0RCx1Q0FBc0M7Ozs7O0lBQ3RDLDZDQUE0Qzs7Ozs7SUFDNUMsbUNBQXNCOzs7OztJQUN0QixxQ0FBaUM7Ozs7O0lBQ2pDLHFDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi8uLi9yYS5kYXNoYm9hcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJBRGFzaGJvYXJkRXZlbnRCdXMgfSBmcm9tICcuLi9yYS5kYXNoYmFyZC5ldmVudC5idXMnO1xyXG5pbXBvcnQgeyBSQUV2ZW50LCBSQUV2ZW50S2V5IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7IElBcHBDb25maWcsIElXaWRnZXRDb25maWdGaWx0ZXIsIElXaWRnZXRJbmZvLCBSQURvd25sb2FkVHlwZSwgUkFEb3dubG9hZE9wdGlvbiB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5cclxuaW1wb3J0IHsgUkFUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQHNjaG5laWRlcmVzcy9yYS1jb21tb24nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmEtd2lkZ2V0LWNvbnRhaW5lcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSQVdpZGdldENvbnRhaW5lciBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHNob3dQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHdpZGdldEVsZW1lbnQ6IGFueTtcclxuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWQ6IGFueTtcclxuICBwcml2YXRlIGlzSUVPckVkZ2UgPSAvbXNpZVxcc3x0cmlkZW50XFwvfGVkZ2VcXC8vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcclxuICBwdWJsaWMgd2lkZ2V0SGVpZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIGxvY2tDbGFzczogc3RyaW5nID0gXCJ1bmxvY2tlZFwiO1xyXG4gIHB1YmxpYyBsb2NrU3RhdHVzOiBzdHJpbmcgPSBcInVubG9ja1wiO1xyXG4gIHB1YmxpYyBpc0Rvd25sb2FkSWNvblZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZHJvcERvd25TaG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0Rvd25sb2FkQ2hhcnRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvd25sb2FkSWNvblR5cGU6IFJBRG93bmxvYWRUeXBlO1xyXG5cclxuICBAVmlld0NoaWxkKCdjdGxXaWRnZXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgY3RsV2lkZ2V0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3dpZGdldERyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdpZGdldERyb3Bkb3duOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3dpZGdldERvd25sb2FkJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdpZGdldERvd25sb2FkOiBFbGVtZW50UmVmO1xyXG4gIFxyXG5cclxuICBASW5wdXQoJ3dpZGdldC1pbnN0YW5jZS1pZCcpIHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2RhdGEnKSBkYXRhOiBhbnk7XHJcbiAgQElucHV0KCdldmVudC1idXMnKSByYURhc2hib2FyZEV2ZW50QnVzOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZzogSUFwcENvbmZpZztcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0JykgaGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gIEBPdXRwdXQoKSB3aWRnZXREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xyXG4gICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMud2lkZ2V0RHJvcGRvd24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuZHJvcERvd25TaG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IEV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldERvd25sb2FkICYmIGUudGFyZ2V0ICE9PSB0aGlzLndpZGdldERvd25sb2FkLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmlzRG93bmxvYWRDaGFydFZpc2libGU9ZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZVdpdGhLZXkoUkFFdmVudC5Db25maWdDaGFuZ2VkLCBSQUV2ZW50S2V5LldpZGdldEluc3RhbmNlSWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQudG9TdHJpbmcoKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmdsb2JhbEZpbHRlci5wcmV2aW91c1ZhbHVlKSB7XHJcblxyXG4gICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLndpZHRoICYmIGNoYW5nZXMud2lkdGguY3VycmVudFZhbHVlICE9IGNoYW5nZXMud2lkdGgucHJldmlvdXNWYWx1ZSB8fFxyXG4gICAgICAoY2hhbmdlcy5oZWlnaHQgJiYgY2hhbmdlcy5oZWlnaHQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuaGVpZ2h0LnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQpIHtcclxuICAgICAgICBsZXQgc2l6ZTogYW55ID0ge307XHJcbiAgICAgICAgc2l6ZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICBzaXplLndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQud2lkZ2V0UmVzaXplZChzaXplKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZWQpXHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBUbyBFZGl0IGN1cnJlbnQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24qL1xyXG4gIHB1YmxpYyBlZGl0V2lkZ2V0KCkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRFZGl0Q2xpY2tlZCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIERlbGV0ZSBjdXJyZW50IHdpZGdldCBmcm9tIERPTSovXHJcbiAgcHVibGljIGRlbGV0ZVdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXREZWxldGVkLmVtaXQodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5ub3RpZmllci5ub3RpZnkoJ2Vycm9yJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdGYWlsZWRUb1JlbW92ZVdpZGdldCcpICsgXCIgIChcIiArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlICsgXCIpIVwiKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIE1vdmUgb3IgY2hhbmdlIHBvc2l0aW9uIGlmIGN1cnJlbnQgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgcHVibGljIG1vdmVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lk1vdmVXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIC8vIHRoaXMuZGFzaGJvYXJkU2VydmljZS5tb3ZlV2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIENvcHkgQ3VycmVudCB3aWRnZXQgd2l0aCBzYW1lIGNvbmZpZ3VyYXRpb24qL1xyXG4gIHB1YmxpYyBjb3B5V2lkZ2V0KCkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Db3B5V2lkZ2V0LCB0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAvL3RoaXMuZGFzaGJvYXJkU2VydmljZS5jb3B5V2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcih3aWRnZXRJbmZvKSB7XHJcbiAgICB0aGlzLmRhdGEud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgLy8gdGhpcy51cGRhdGVXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBUbyBsb2FkIGV4dGVybmFsIGN1c3RvbSBlbGVtZW50IHRvIHRoZSB3aWRnZXQgY29udGFpbmVyKi9cclxuICBhc3luYyBsb2FkV2lkZ2V0KHdpZGdldEluZm86IGFueSkge1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lciA9IHRoaXM7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UubG9hZEV4dGVybmFsU2NyaXB0KHdpZGdldEluZm8uc2NyaXB0VXJsLCAoKSA9PiB7XHJcblxyXG4gICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQod2lkZ2V0SW5mby5jdXN0b21UYWcpO1xyXG4gICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWRnZXQtaW5zdGFuY2UtaWRcIiwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignd2lkZ2V0aW5pdGlhdGVkJyArIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ29uLWRhdGEtbG9hZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGUuZGV0YWlsKVxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd1BhbmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd1BhbmVsID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB3aWRnZXRDb250YWluZXIuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmFwcENvbmZpZyA9IHRoaXMuYXBwQ29uZmlnO1xyXG4gICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgLy8gd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e307XHJcbiAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIud2lkZ2V0SW5mby53aWRnZXROYW1lID0gd2lkZ2V0SW5mby53aWRnZXROYW1lO1xyXG4gICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICAgICAgYXdhaXQgd2lkZ2V0Q29udGFpbmVyLnNldERvd25sb2FkSWNvbigpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmN0bFdpZGdldC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud2lkZ2V0RWxlbWVudCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZWZyZXNoIHdpZGdldCBvbiBpbnB1dCBjb25maWcgY2hhbmdlcyAqL1xyXG4gIGFzeW5jIHJlZnJlc2hXaWRnZXQod2lkZ2V0SW5mbzogSVdpZGdldEluZm8pIHtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXIgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGNvbmZpZzogd2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgd2lkZ2V0SW5mbzogd2lkZ2V0SW5mb1xyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldENvbnRhaW5lckNvbnRleHQuaXNXaWRnZXRMb2FkZWQpIHtcclxuICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0TG9jayhjb25maWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5sb2NrU3RhdHVzID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmxvYWRMb2NrU3RhdHVzKGNvbmZpZyk7XHJcbiAgICBpZiAodGhpcy5sb2NrU3RhdHVzKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5sb2NrU3RhdHVzKSB7XHJcbiAgICAgICAgY2FzZSBcImxvY2tcIjoge1xyXG4gICAgICAgICAgdGhpcy5sb2NrQ2xhc3MgPSBcImZhcyBmYS1sb2NrIGxvY2tlZFwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgXCJ1bmxvY2tcIjoge1xyXG4gICAgICAgICAgdGhpcy5sb2NrQ2xhc3MgPSBcInVubG9ja2VkXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBcInBhcnRpYWxsb2NrXCI6IHtcclxuICAgICAgICAgIHRoaXMubG9ja0NsYXNzID0gXCJmYXMgZmEtbG9jayBwYXJ0aWFsbG9ja2VkXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgdGhpcy5sb2NrQ2xhc3MgPSBcInVubG9ja2VkXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0RG93bmxvYWRJY29uKCkge1xyXG4gICAgbGV0IGRvd25sb2FkVHlwZSA9IGF3YWl0IHRoaXMud2lkZ2V0RWxlbWVudC5nZXREb3dubG9hZFR5cGUoKTtcclxuICAgIHRoaXMuZG93bmxvYWRJY29uVHlwZSA9IGRvd25sb2FkVHlwZTtcclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlICE9IFJBRG93bmxvYWRUeXBlLk5vbmUpIHtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gc3dpdGNoIChkb3dubG9hZFR5cGUpIHtcclxuICAgIC8vICAgY2FzZSBSQURvd25sb2FkVHlwZS5HcmlkOlxyXG4gICAgLy8gICAgIGJyZWFrO1xyXG4gICAgLy8gICBjYXNlIFJBRG93bmxvYWRUeXBlLkNoYXJ0OlxyXG4gICAgLy8gICAgIGJyZWFrO1xyXG4gICAgLy8gICBjYXNlIFJBRG93bmxvYWRUeXBlLkN1c3RvbTpcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRDbGlja2VkKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmRvd25sb2FkSWNvblR5cGUpIHtcclxuICAgICAgY2FzZSBSQURvd25sb2FkVHlwZS5HcmlkOlxyXG4gICAgICAgIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCgnQ1NWJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUkFEb3dubG9hZFR5cGUuQ2hhcnQ6XHJcbiAgICAgICAgdGhpcy5pc0Rvd25sb2FkQ2hhcnRWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSQURvd25sb2FkVHlwZS5DdXN0b206XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRJY29uQ2xpY2tlZCh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwiQ1NWXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uQ1NWKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlBOR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlBORyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQREZcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QREYpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqU2hvdyBkcm9wZG93biBvbiBnZWFyIGljb24gY2xpY2sgICovXHJcbiAgcHVibGljIHNob3dEcm9wRG93bigpIHtcclxuICAgIHRoaXMuZHJvcERvd25TaG93biA9ICF0aGlzLmRyb3BEb3duU2hvd247XHJcbiAgfVxyXG5cclxuICAvKipIaWRlIGRyb3Bkb3duIG9uIG91dHNpZGUgY2xpY2sgKi9cclxuICBwdWJsaWMgaGlkZURyb3BEb3duKCkge1xyXG4gICAgaWYgKHRoaXMuZHJvcERvd25TaG93bilcclxuICAgICAgdGhpcy5kcm9wRG93blNob3duID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==