@schneideress/dashboardframework 0.0.77 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/bundles/schneideress-dashboardframework.umd.js +7128 -6078
- package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
- package/bundles/schneideress-dashboardframework.umd.min.js +15 -1
- package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
- package/esm2015/gridster/index.js +18 -18
- package/esm2015/gridster/lib/gridster.component.js +700 -700
- package/esm2015/gridster/lib/gridster.interface.js +84 -84
- package/esm2015/gridster/lib/gridster.module.js +27 -27
- package/esm2015/gridster/lib/gridsterCompact.service.js +223 -223
- package/esm2015/gridster/lib/gridsterConfig.constant.js +179 -179
- package/esm2015/gridster/lib/gridsterConfig.interface.js +219 -219
- package/esm2015/gridster/lib/gridsterConfigS.interface.js +161 -161
- package/esm2015/gridster/lib/gridsterDraggable.service.js +510 -510
- package/esm2015/gridster/lib/gridsterEmptyCell.service.js +317 -317
- package/esm2015/gridster/lib/gridsterItem.component.js +213 -213
- package/esm2015/gridster/lib/gridsterItem.interface.js +46 -46
- package/esm2015/gridster/lib/gridsterItemComponent.interface.js +48 -48
- package/esm2015/gridster/lib/gridsterPreview.component.js +66 -66
- package/esm2015/gridster/lib/gridsterPush.service.js +467 -467
- package/esm2015/gridster/lib/gridsterPushResize.service.js +358 -358
- package/esm2015/gridster/lib/gridsterRenderer.service.js +277 -277
- package/esm2015/gridster/lib/gridsterResizable.service.js +552 -552
- package/esm2015/gridster/lib/gridsterResizeEventType.interface.js +19 -19
- package/esm2015/gridster/lib/gridsterScroll.service.js +195 -195
- package/esm2015/gridster/lib/gridsterSwap.service.js +134 -134
- package/esm2015/gridster/lib/gridsterUtils.service.js +137 -137
- package/esm2015/lib/custom.notifier.options.js +46 -46
- package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +496 -496
- package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +471 -471
- package/esm2015/lib/ra.base.dashboard.filter.js +75 -75
- package/esm2015/lib/ra.base.dashboard.template.js +71 -71
- package/esm2015/lib/ra.dashbard.event.bus.js +85 -85
- package/esm2015/lib/ra.dashboard.module.js +51 -51
- package/esm2015/lib/ra.dashboard.service.js +144 -144
- package/esm2015/lib/ra.event.enum.js +51 -51
- package/esm2015/lib/ra.gridster.config.js +67 -67
- package/esm2015/public-api.js +16 -16
- package/esm2015/schneideress-dashboardframework.js +13 -13
- package/esm5/gridster/index.js +18 -18
- package/esm5/gridster/lib/gridster.component.js +803 -803
- package/esm5/gridster/lib/gridster.interface.js +94 -94
- package/esm5/gridster/lib/gridster.module.js +31 -31
- package/esm5/gridster/lib/gridsterCompact.service.js +253 -253
- package/esm5/gridster/lib/gridsterConfig.constant.js +179 -179
- package/esm5/gridster/lib/gridsterConfig.interface.js +219 -219
- package/esm5/gridster/lib/gridsterConfigS.interface.js +161 -161
- package/esm5/gridster/lib/gridsterDraggable.service.js +549 -549
- package/esm5/gridster/lib/gridsterEmptyCell.service.js +358 -358
- package/esm5/gridster/lib/gridsterItem.component.js +238 -238
- package/esm5/gridster/lib/gridsterItem.interface.js +46 -46
- package/esm5/gridster/lib/gridsterItemComponent.interface.js +58 -58
- package/esm5/gridster/lib/gridsterPreview.component.js +70 -70
- package/esm5/gridster/lib/gridsterPush.service.js +547 -547
- package/esm5/gridster/lib/gridsterPushResize.service.js +423 -423
- package/esm5/gridster/lib/gridsterRenderer.service.js +323 -323
- package/esm5/gridster/lib/gridsterResizable.service.js +629 -629
- package/esm5/gridster/lib/gridsterResizeEventType.interface.js +19 -19
- package/esm5/gridster/lib/gridsterScroll.service.js +195 -195
- package/esm5/gridster/lib/gridsterSwap.service.js +152 -152
- package/esm5/gridster/lib/gridsterUtils.service.js +177 -177
- package/esm5/lib/custom.notifier.options.js +46 -46
- package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +588 -588
- package/esm5/lib/ra-widget-container/ra.widget.container.component.js +584 -584
- package/esm5/lib/ra.base.dashboard.filter.js +81 -81
- package/esm5/lib/ra.base.dashboard.template.js +74 -74
- package/esm5/lib/ra.dashbard.event.bus.js +125 -125
- package/esm5/lib/ra.dashboard.module.js +55 -55
- package/esm5/lib/ra.dashboard.service.js +221 -221
- package/esm5/lib/ra.event.enum.js +51 -51
- package/esm5/lib/ra.gridster.config.js +67 -67
- package/esm5/public-api.js +16 -16
- package/esm5/schneideress-dashboardframework.js +13 -13
- package/fesm2015/schneideress-dashboardframework.js +6121 -5181
- package/fesm2015/schneideress-dashboardframework.js.map +1 -1
- package/fesm5/schneideress-dashboardframework.js +7019 -6079
- package/fesm5/schneideress-dashboardframework.js.map +1 -1
- package/gridster/index.d.ts +11 -11
- package/gridster/lib/gridster.component.d.ts +67 -67
- package/gridster/lib/gridster.interface.d.ts +46 -46
- package/gridster/lib/gridster.module.d.ts +2 -2
- package/gridster/lib/gridsterCompact.service.d.ts +15 -15
- package/gridster/lib/gridsterConfig.constant.d.ts +2 -2
- package/gridster/lib/gridsterConfig.interface.d.ts +133 -133
- package/gridster/lib/gridsterConfigS.interface.d.ts +93 -93
- package/gridster/lib/gridsterDraggable.service.d.ts +59 -59
- package/gridster/lib/gridsterEmptyCell.service.d.ts +29 -29
- package/gridster/lib/gridsterItem.component.d.ts +32 -32
- package/gridster/lib/gridsterItem.interface.d.ts +21 -21
- package/gridster/lib/gridsterItemComponent.interface.d.ts +25 -25
- package/gridster/lib/gridsterPreview.component.d.ts +10 -10
- package/gridster/lib/gridsterPush.service.d.ts +33 -33
- package/gridster/lib/gridsterPushResize.service.d.ts +26 -26
- package/gridster/lib/gridsterRenderer.service.d.ts +38 -38
- package/gridster/lib/gridsterResizable.service.d.ts +67 -67
- package/gridster/lib/gridsterResizeEventType.interface.d.ts +6 -6
- package/gridster/lib/gridsterScroll.service.d.ts +4 -4
- package/gridster/lib/gridsterSwap.service.d.ts +13 -13
- package/gridster/lib/gridsterUtils.service.d.ts +16 -16
- package/lib/custom.notifier.options.d.ts +2 -2
- package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +64 -64
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +64 -64
- package/lib/ra.base.dashboard.filter.d.ts +10 -10
- package/lib/ra.base.dashboard.template.d.ts +15 -15
- package/lib/ra.dashbard.event.bus.d.ts +20 -20
- package/lib/ra.dashboard.module.d.ts +2 -2
- package/lib/ra.dashboard.service.d.ts +22 -22
- package/lib/ra.event.enum.d.ts +42 -42
- package/lib/ra.gridster.config.d.ts +2 -2
- package/package.json +1 -1
- package/public-api.d.ts +8 -8
- package/schneideress-dashboardframework.d.ts +9 -9
- package/schneideress-dashboardframework.metadata.json +1 -1
|
@@ -1,588 +1,588 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,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() + 100;
|
|
288
|
-
}
|
|
289
|
-
if (areaHeight < 600) {
|
|
290
|
-
areaHeight = 600;
|
|
291
|
-
}
|
|
292
|
-
console.log('grid height value is');
|
|
293
|
-
console.log(areaHeight);
|
|
294
|
-
this.gridheight = areaHeight;
|
|
295
|
-
};
|
|
296
|
-
/** To remove a widget instance from dashboard and to save info in database */
|
|
297
|
-
/**
|
|
298
|
-
* To remove a widget instance from dashboard and to save info in database
|
|
299
|
-
* @param {?} widgetInstanceId
|
|
300
|
-
* @param {?=} isalertDisabled
|
|
301
|
-
* @return {?}
|
|
302
|
-
*/
|
|
303
|
-
RADashboardArea.prototype.deleteWidget = /**
|
|
304
|
-
* To remove a widget instance from dashboard and to save info in database
|
|
305
|
-
* @param {?} widgetInstanceId
|
|
306
|
-
* @param {?=} isalertDisabled
|
|
307
|
-
* @return {?}
|
|
308
|
-
*/
|
|
309
|
-
function (widgetInstanceId, isalertDisabled) {
|
|
310
|
-
if (isalertDisabled === void 0) { isalertDisabled = false; }
|
|
311
|
-
/** @type {?} */
|
|
312
|
-
var widget = this.widgetList.filter((/**
|
|
313
|
-
* @param {?} item
|
|
314
|
-
* @return {?}
|
|
315
|
-
*/
|
|
316
|
-
function (item) {
|
|
317
|
-
return item.widgetInfo.widgetInstanceId === widgetInstanceId;
|
|
318
|
-
}));
|
|
319
|
-
if (widget.length > 0) {
|
|
320
|
-
this.widgetList.splice(this.widgetList.indexOf(widget[0]), 1);
|
|
321
|
-
this.setAreaHeight();
|
|
322
|
-
if (!isalertDisabled) {
|
|
323
|
-
this.notifier.notify('success', " " + this.translateService.translate('Widget') + " " + widget[0].widgetInfo.widgetTitle + " " + this.translateService.translate('DeletedSuccesfully') + " ");
|
|
324
|
-
}
|
|
325
|
-
this.options.compactType = 'compactLeft&Up';
|
|
326
|
-
this.options.api.optionsChanged();
|
|
327
|
-
this.options.compactType = 'none';
|
|
328
|
-
this.options.api.optionsChanged();
|
|
329
|
-
}
|
|
330
|
-
};
|
|
331
|
-
/**To add widget instance to the database with the next available position and to make changes in
|
|
332
|
-
* dashboard area.
|
|
333
|
-
*/
|
|
334
|
-
/**
|
|
335
|
-
* To add widget instance to the database with the next available position and to make changes in
|
|
336
|
-
* dashboard area.
|
|
337
|
-
* @param {?} data
|
|
338
|
-
* @return {?}
|
|
339
|
-
*/
|
|
340
|
-
RADashboardArea.prototype.addWidget = /**
|
|
341
|
-
* To add widget instance to the database with the next available position and to make changes in
|
|
342
|
-
* dashboard area.
|
|
343
|
-
* @param {?} data
|
|
344
|
-
* @return {?}
|
|
345
|
-
*/
|
|
346
|
-
function (data) {
|
|
347
|
-
var _this = this;
|
|
348
|
-
/** @type {?} */
|
|
349
|
-
var widgetid = data.widgetId;
|
|
350
|
-
data.height = this.widgetHeight;
|
|
351
|
-
data.width = this.widgetWidth;
|
|
352
|
-
data.position_x = 0;
|
|
353
|
-
data.position_y = 0;
|
|
354
|
-
/** @type {?} */
|
|
355
|
-
var gridsterItem = this.mapObjectsToGridsterItem(data);
|
|
356
|
-
/** to find the available position in gridster, temp commenting the code-returning higher y value than normal */
|
|
357
|
-
// if (this.options.api) {
|
|
358
|
-
// gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
|
|
359
|
-
// }
|
|
360
|
-
// data.position_x = gridsterItem.x;
|
|
361
|
-
// data.position_y = gridsterItem.y;
|
|
362
|
-
data.dashboardAreaKey = this.areaKey;
|
|
363
|
-
data.dashboardId = this.userDashboardId;
|
|
364
|
-
this.ngxService.start();
|
|
365
|
-
this.dashboardService.addWidget(data, this.appConfig).subscribe((/**
|
|
366
|
-
* @param {?} widget
|
|
367
|
-
* @return {?}
|
|
368
|
-
*/
|
|
369
|
-
function (widget) {
|
|
370
|
-
gridsterItem = _this.mapObjectsToGridsterItem(widget);
|
|
371
|
-
_this.widgetList.push(gridsterItem);
|
|
372
|
-
_this.setAreaHeight();
|
|
373
|
-
/**To save added widget position in db */
|
|
374
|
-
setTimeout((/**
|
|
375
|
-
* @return {?}
|
|
376
|
-
*/
|
|
377
|
-
function () {
|
|
378
|
-
_this.updateWidgets();
|
|
379
|
-
}), 1000);
|
|
380
|
-
_this.raDashboardEventBus.publish(RAEvent.WidgetAdded, widget);
|
|
381
|
-
}));
|
|
382
|
-
};
|
|
383
|
-
/** To add widget to current widget list ,invoked from copy widget window*/
|
|
384
|
-
/**
|
|
385
|
-
* To add widget to current widget list ,invoked from copy widget window
|
|
386
|
-
* @param {?} data
|
|
387
|
-
* @return {?}
|
|
388
|
-
*/
|
|
389
|
-
RADashboardArea.prototype.copyWidget = /**
|
|
390
|
-
* To add widget to current widget list ,invoked from copy widget window
|
|
391
|
-
* @param {?} data
|
|
392
|
-
* @return {?}
|
|
393
|
-
*/
|
|
394
|
-
function (data) {
|
|
395
|
-
/** @type {?} */
|
|
396
|
-
var gridsterItem = this.mapObjectsToGridsterItem(data);
|
|
397
|
-
if (this.options.api) {
|
|
398
|
-
gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
|
|
399
|
-
}
|
|
400
|
-
data.position_x = gridsterItem.x;
|
|
401
|
-
data.position_y = gridsterItem.y;
|
|
402
|
-
gridsterItem = this.mapObjectsToGridsterItem(data);
|
|
403
|
-
this.widgetList.push(gridsterItem);
|
|
404
|
-
this.setAreaHeight();
|
|
405
|
-
};
|
|
406
|
-
/**To map IwidgetInfo object to gridsterItem */
|
|
407
|
-
/**
|
|
408
|
-
* To map IwidgetInfo object to gridsterItem
|
|
409
|
-
* @param {?} widget
|
|
410
|
-
* @return {?}
|
|
411
|
-
*/
|
|
412
|
-
RADashboardArea.prototype.mapObjectsToGridsterItem = /**
|
|
413
|
-
* To map IwidgetInfo object to gridsterItem
|
|
414
|
-
* @param {?} widget
|
|
415
|
-
* @return {?}
|
|
416
|
-
*/
|
|
417
|
-
function (widget) {
|
|
418
|
-
/** @type {?} */
|
|
419
|
-
var gridsterItem = (/** @type {?} */ ({
|
|
420
|
-
cols: widget.width,
|
|
421
|
-
rows: widget.height,
|
|
422
|
-
x: widget.position_x,
|
|
423
|
-
y: widget.position_y,
|
|
424
|
-
widgetInfo: widget
|
|
425
|
-
}));
|
|
426
|
-
return gridsterItem;
|
|
427
|
-
};
|
|
428
|
-
/**
|
|
429
|
-
* @param {?} widgetList
|
|
430
|
-
* @return {?}
|
|
431
|
-
*/
|
|
432
|
-
RADashboardArea.prototype.mapObjectListToGridsterItemList = /**
|
|
433
|
-
* @param {?} widgetList
|
|
434
|
-
* @return {?}
|
|
435
|
-
*/
|
|
436
|
-
function (widgetList) {
|
|
437
|
-
var _this = this;
|
|
438
|
-
/** @type {?} */
|
|
439
|
-
var widgetArray = Array();
|
|
440
|
-
widgetList.forEach((/**
|
|
441
|
-
* @param {?} widget
|
|
442
|
-
* @return {?}
|
|
443
|
-
*/
|
|
444
|
-
function (widget) {
|
|
445
|
-
widgetArray.push(_this.mapObjectsToGridsterItem(widget));
|
|
446
|
-
}));
|
|
447
|
-
return widgetArray;
|
|
448
|
-
};
|
|
449
|
-
/**
|
|
450
|
-
* @param {?} widgetItem
|
|
451
|
-
* @return {?}
|
|
452
|
-
*/
|
|
453
|
-
RADashboardArea.prototype.mapGridsterItemToObject = /**
|
|
454
|
-
* @param {?} widgetItem
|
|
455
|
-
* @return {?}
|
|
456
|
-
*/
|
|
457
|
-
function (widgetItem) {
|
|
458
|
-
/** @type {?} */
|
|
459
|
-
var widget;
|
|
460
|
-
widget = widgetItem.widgetInfo;
|
|
461
|
-
widget.height = widgetItem.rows;
|
|
462
|
-
widget.width = widgetItem.cols;
|
|
463
|
-
widget.position_x = widgetItem.x;
|
|
464
|
-
widget.position_y = widgetItem.y;
|
|
465
|
-
widget.rowHeight = widgetItem.curRowHeight;
|
|
466
|
-
return widget;
|
|
467
|
-
};
|
|
468
|
-
/**
|
|
469
|
-
* @param {?} widgetItemList
|
|
470
|
-
* @return {?}
|
|
471
|
-
*/
|
|
472
|
-
RADashboardArea.prototype.mapGridsterListToObject = /**
|
|
473
|
-
* @param {?} widgetItemList
|
|
474
|
-
* @return {?}
|
|
475
|
-
*/
|
|
476
|
-
function (widgetItemList) {
|
|
477
|
-
var _this = this;
|
|
478
|
-
/** @type {?} */
|
|
479
|
-
var widgetListArray = Array();
|
|
480
|
-
widgetItemList.forEach((/**
|
|
481
|
-
* @param {?} widget
|
|
482
|
-
* @return {?}
|
|
483
|
-
*/
|
|
484
|
-
function (widget) {
|
|
485
|
-
widgetListArray.push(_this.mapGridsterItemToObject(widget));
|
|
486
|
-
}));
|
|
487
|
-
return widgetListArray;
|
|
488
|
-
};
|
|
489
|
-
RADashboardArea.decorators = [
|
|
490
|
-
{ type: Component, args: [{
|
|
491
|
-
selector: 'ra-dashboard-area',
|
|
492
|
-
template: "<div #gridWrapper class=\"wrap gridster\" [style.height.px]=\"gridheight\" >\
|
|
493
|
-
styles: ["gridster{width:inherit;resize:height;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;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)}"]
|
|
494
|
-
}] }
|
|
495
|
-
];
|
|
496
|
-
/** @nocollapse */
|
|
497
|
-
RADashboardArea.ctorParameters = function () { return [
|
|
498
|
-
{ type: RaDashboardService },
|
|
499
|
-
{ type: NgZone },
|
|
500
|
-
{ type: NgxUiLoaderService },
|
|
501
|
-
{ type: RATranslateService },
|
|
502
|
-
{ type: NotifierService }
|
|
503
|
-
]; };
|
|
504
|
-
RADashboardArea.propDecorators = {
|
|
505
|
-
userDashboardId: [{ type: Input, args: ['user-dashboard-id',] }],
|
|
506
|
-
areaKey: [{ type: Input, args: ['area-key',] }],
|
|
507
|
-
globalFilter: [{ type: Input, args: ['global-filter',] }],
|
|
508
|
-
raDashboardEventBus: [{ type: Input, args: ['event-bus',] }],
|
|
509
|
-
widgetHeight: [{ type: Input, args: ['widget-height',] }],
|
|
510
|
-
widgetWidth: [{ type: Input, args: ['widget-width',] }],
|
|
511
|
-
appConfig: [{ type: Input, args: ['app-config',] }]
|
|
512
|
-
};
|
|
513
|
-
return RADashboardArea;
|
|
514
|
-
}());
|
|
515
|
-
export { RADashboardArea };
|
|
516
|
-
if (false) {
|
|
517
|
-
/** @type {?} */
|
|
518
|
-
RADashboardArea.prototype.widgetList;
|
|
519
|
-
/** @type {?} */
|
|
520
|
-
RADashboardArea.prototype.options;
|
|
521
|
-
/** @type {?} */
|
|
522
|
-
RADashboardArea.prototype.gridheight;
|
|
523
|
-
/**
|
|
524
|
-
* @type {?}
|
|
525
|
-
* @private
|
|
526
|
-
*/
|
|
527
|
-
RADashboardArea.prototype.conifgAddClick;
|
|
528
|
-
/**
|
|
529
|
-
* @type {?}
|
|
530
|
-
* @private
|
|
531
|
-
*/
|
|
532
|
-
RADashboardArea.prototype.widgetDeleteEvent;
|
|
533
|
-
/**
|
|
534
|
-
* @type {?}
|
|
535
|
-
* @private
|
|
536
|
-
*/
|
|
537
|
-
RADashboardArea.prototype.widgetAddEvent;
|
|
538
|
-
/**
|
|
539
|
-
* @type {?}
|
|
540
|
-
* @private
|
|
541
|
-
*/
|
|
542
|
-
RADashboardArea.prototype.widgetLibraryDoneClick;
|
|
543
|
-
/**
|
|
544
|
-
* @type {?}
|
|
545
|
-
* @private
|
|
546
|
-
*/
|
|
547
|
-
RADashboardArea.prototype.isWidgetLoaded;
|
|
548
|
-
/** @type {?} */
|
|
549
|
-
RADashboardArea.prototype.userDashboardId;
|
|
550
|
-
/** @type {?} */
|
|
551
|
-
RADashboardArea.prototype.areaKey;
|
|
552
|
-
/** @type {?} */
|
|
553
|
-
RADashboardArea.prototype.globalFilter;
|
|
554
|
-
/** @type {?} */
|
|
555
|
-
RADashboardArea.prototype.raDashboardEventBus;
|
|
556
|
-
/** @type {?} */
|
|
557
|
-
RADashboardArea.prototype.widgetHeight;
|
|
558
|
-
/** @type {?} */
|
|
559
|
-
RADashboardArea.prototype.widgetWidth;
|
|
560
|
-
/** @type {?} */
|
|
561
|
-
RADashboardArea.prototype.appConfig;
|
|
562
|
-
/**
|
|
563
|
-
* @type {?}
|
|
564
|
-
* @private
|
|
565
|
-
*/
|
|
566
|
-
RADashboardArea.prototype.dashboardService;
|
|
567
|
-
/**
|
|
568
|
-
* @type {?}
|
|
569
|
-
* @private
|
|
570
|
-
*/
|
|
571
|
-
RADashboardArea.prototype.ngZone;
|
|
572
|
-
/**
|
|
573
|
-
* @type {?}
|
|
574
|
-
* @private
|
|
575
|
-
*/
|
|
576
|
-
RADashboardArea.prototype.ngxService;
|
|
577
|
-
/**
|
|
578
|
-
* @type {?}
|
|
579
|
-
* @private
|
|
580
|
-
*/
|
|
581
|
-
RADashboardArea.prototype.translateService;
|
|
582
|
-
/**
|
|
583
|
-
* @type {?}
|
|
584
|
-
* @private
|
|
585
|
-
*/
|
|
586
|
-
RADashboardArea.prototype.notifier;
|
|
587
|
-
}
|
|
588
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQTRCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RDtJQTBCRSx5QkFBb0IsZ0JBQW9DLEVBQzlDLE1BQWMsRUFDZCxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsUUFBeUI7UUFKZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBdEI1QixlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFNeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFNaEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDMUIsZ0JBQVcsR0FBVyxDQUFD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QUUvQiwyQ0FBNEM7Ozs7O0lBQ3RELGlDQUFzQjs7Ozs7SUFDdEIscUNBQXNDOzs7OztJQUN0QywyQ0FBNEM7Ozs7O0lBQzVDLG1DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBPbkluaXQsIENvbXBvbmVudCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJy4uLy4uL2dyaWRzdGVyL2luZGV4JztcclxuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZ0RlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uL3JhLmdyaWRzdGVyLmNvbmZpZyc7XHJcbmltcG9ydCB7IElXaWRnZXRJbmZvLCBJQXBwQ29uZmlnIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLWRhc2hib2FyZC1hcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmEuZGFzaGJvYXJkLmFyZWEuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJBRGFzaGJvYXJkQXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuXHJcbiAgcHVibGljIHdpZGdldExpc3QgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XHJcbiAgcHVibGljIG9wdGlvbnM6IEdyaWRzdGVyQ29uZmlnO1xyXG4gIHB1YmxpYyBncmlkaGVpZ2h0OiBudW1iZXIgPSAzMDA7XHJcblxyXG4gIHByaXZhdGUgY29uaWZnQWRkQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIHdpZGdldERlbGV0ZUV2ZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXRBZGRFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0TGlicmFyeURvbmVDbGljazogYW55O1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCd1c2VyLWRhc2hib2FyZC1pZCcpIHVzZXJEYXNoYm9hcmRJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnYXJlYS1rZXknKSBhcmVhS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyOiBhbnk7XHJcbiAgQElucHV0KCdldmVudC1idXMnKSByYURhc2hib2FyZEV2ZW50QnVzOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIHdpZGdldEhlaWdodDogbnVtYmVyID0gMztcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZGdldFdpZHRoOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZzogSUFwcENvbmZpZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBuZ3hTZXJ2aWNlOiBOZ3hVaUxvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIHRoaXMuYXBwQ29uZmlnICYmICF0aGlzLmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmluaXRpdGF0ZUV2ZW50QnVzU3Vic2NyaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqVG8gc2V0IEdyaWRzdGVyQ29uZmlnICovXHJcbiAgcHVibGljIGluaXRpYXRlR3JpZHN0ZXJDb25maWcoKSB7XHJcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xyXG4gICAgLyoqVG8gb3ZlcnJpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcyB0byB0aGUgZ3JpZHN0ZXIgY29udHJvbCAqL1xyXG4gICAgdGhpcy5vcHRpb25zID0gR3JpZHN0ZXJDb25maWdEZWZhdWx0U2V0dGluZ3M7XHJcbiAgICB0aGlzLm9wdGlvbnMuaXRlbUNoYW5nZUNhbGxiYWNrID0gZnVuY3Rpb24gKGl0ZW06IGFueSkge1xyXG4gICAgICBhcmVhQ29udGV4dC5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIGFyZWFDb250ZXh0LnVwZGF0ZVdpZGdldHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBUbyBpbml0aWF0ZSBldmVudGJ1cyBzdWJzY3RpcHRpb25zICovXHJcbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XHJcbiAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LldpZGdldERlbGV0ZSkuc3Vic2NyaWJlKChpbnN0YW5jZUlkKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRBZGRFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5BZGRXaWRnZXQpLnN1YnNjcmliZSgod2lkZ2V0SW5mbykgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvbmlmZ0FkZENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkNvbmZpZ0FkZENsaWNrKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQud2lkZ2V0TGlicmFyeURvbmVDbGljaykuc3Vic2NyaWJlKCh3aWRnZXRMaXN0KSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7ICAgICAgIFxyXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7ICAgICAgICBcclxuICAgICAgICAgIC8vIHdpZGdldExpc3QuZm9yRWFjaCh3aWRnZXRJbmZvID0+IHtcclxuICAgICAgICAgIC8vICAgdGhpcy5hZGRXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIHRoaXMuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdGVtcCBmaXgtIHJlY3Vyc2l2ZSBtZXRob2QgdG8gaXRlcmF0ZSBvdmVyIHRoZSBsaXN0IG9mIGl0ZW1zXHJcbiAgICogYW5kIGFkZCB0aGVtIHRvIGdyaWRzdGVyIGluIHRoZSBnaXZlbiBvcmRlclxyXG4gICAqIEBwYXJhbSB3aWRnZXRMaXN0ICAtbGlzdCBvZiB3aWRnZXRzXHJcbiAgICogQHBhcmFtIGluZGV4IC1pbmRleCBvZiB0aGUgY3VycmVudCB2YWx1ZSB0byBiZSBhZGRlZFxyXG4gICAqL1xyXG4gIGFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IGFyZWFDb250ZXh0ID0gdGhpcztcclxuICAgIGxldCBpbmRleFZhbCA9IGluZGV4ICsgMTtcclxuICAgIGlmIChpbmRleCA+IHdpZGdldExpc3QubGVuZ3RoIC0gMSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChpbmRleCA9PSAwKSB7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcclxuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xyXG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgaW5kZXhWYWwpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmlmZ0FkZENsaWNrKVxyXG4gICAgICB0aGlzLmNvbmlmZ0FkZENsaWNrLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0QWRkRXZlbnQpXHJcbiAgICAgIHRoaXMud2lkZ2V0QWRkRXZlbnQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXREZWxldGVFdmVudClcclxuICAgICAgdGhpcy53aWRnZXREZWxldGVFdmVudC51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2spXHJcbiAgICAgIHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljay51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gdXBkYXRlIHBvc2l0aW9uL2RpbWVudGlvbiBvZiBhbGwgd2lkZ2V0cyBpbiB0aGUgYXJlYSAqL1xyXG4gIHVwZGF0ZVdpZGdldHMoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHRoaXMud2lkZ2V0TGlzdCksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJldHJpZXZlIHdpZGdldHMgYmFzZWQgb24gdXNlckRhc2hib2FyZGlkIGFuZCBhcmVhIG5hbWUgKi9cclxuICBsb2FkV2lkZ2V0cyh1c2VyRGFzaGJvYXJJZDogbnVtYmVyLCBhcmVhS2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XHJcblxyXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xyXG4gICAgICBkYXNoYm9hcmRJZDogdXNlckRhc2hib2FySWQudG9TdHJpbmcoKSxcclxuICAgICAgZGFzaGJvYXJkQXJlYUtleTogYXJlYUtleVxyXG4gICAgfVxyXG4gICAgYXJlYUNvbnRleHQud2lkZ2V0TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFdpZGdldHNCeURhc2hib2FyZEFyZWEod2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgYXJlYUNvbnRleHQud2lkZ2V0TGlzdCA9IHRoaXMubWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh3aWRnZXRzKTtcclxuICAgICAgICBhcmVhQ29udGV4dC5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKiogVG8gc2V0IEFyZWEoR3JpZHN0ZXIpIGhlaWdodCBkeW5hbWljYWxseSBhcyB3aWRnZXRzIGFyZSBhZGRlZC9yZW1vdmVkICovXHJcbiAgc2V0QXJlYUhlaWdodCgpIHtcclxuICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0ID0gMDtcclxuICAgIGxldCBhcmVhSGVpZ2h0ID0gMDtcclxuICAgIGxldCBjdXJSb3dIZWlnaHQgPSAwO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgY3VyUm93SGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLndpZGdldExpc3QuZm9yRWFjaCgodCkgPT4ge1xyXG4gICAgICBsZXQgY3VycmVudEhlaWdodCA9IHQueSArIHQucm93cztcclxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgPiBhcmVhU2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgYXJlYVNjcm9sbEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGN1clJvd0hlaWdodCA9PSAwKSB7XHJcbiAgICAgICAgY3VycmVudEhlaWdodCA9IHRoaXMud2lkZ2V0TGlzdFswXS5jdXJSb3dIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgdC53aWRnZXRJbmZvLnJvd0hlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodCAqIHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpICsgMTAwO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZWFIZWlnaHQgPCA2MDApIHtcclxuICAgICAgYXJlYUhlaWdodCA9IDYwMDtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdncmlkIGhlaWdodCB2YWx1ZSBpcycpO1xyXG4gICAgY29uc29sZS5sb2coYXJlYUhlaWdodCk7XHJcbiAgICB0aGlzLmdyaWRoZWlnaHQgPSBhcmVhSGVpZ2h0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBUbyByZW1vdmUgYSB3aWRnZXQgaW5zdGFuY2UgZnJvbSBkYXNoYm9hcmQgYW5kIHRvIHNhdmUgaW5mbyBpbiBkYXRhYmFzZSAqL1xyXG4gIGRlbGV0ZVdpZGdldCh3aWRnZXRJbnN0YW5jZUlkOiBhbnksIGlzYWxlcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgd2lkZ2V0ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICByZXR1cm4gaXRlbS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgPT09IHdpZGdldEluc3RhbmNlSWQ7XHJcbiAgICB9KTtcclxuICAgIGlmICh3aWRnZXQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndpZGdldExpc3Quc3BsaWNlKHRoaXMud2lkZ2V0TGlzdC5pbmRleE9mKHdpZGdldFswXSksIDEpO1xyXG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgaWYgKCFpc2FsZXJ0RGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWVyLm5vdGlmeSgnc3VjY2VzcycsIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnV2lkZ2V0JykgKyBcIiBcIiArIHdpZGdldFswXS53aWRnZXRJbmZvLndpZGdldFRpdGxlICsgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdEZWxldGVkU3VjY2VzZnVsbHknKSArIFwiIFwiKTtcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLmNvbXBhY3RUeXBlID0gJ2NvbXBhY3RMZWZ0JlVwJztcclxuICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGFjdFR5cGUgPSAnbm9uZSc7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcGkub3B0aW9uc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqVG8gYWRkIHdpZGdldCBpbnN0YW5jZSB0byB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUgcG9zaXRpb24gYW5kIHRvIG1ha2UgY2hhbmdlcyBpblxyXG4gICAqIGRhc2hib2FyZCBhcmVhLlxyXG4gICAqL1xyXG4gIGFkZFdpZGdldChkYXRhOiBhbnkpIHtcclxuICAgIGxldCB3aWRnZXRpZCA9IGRhdGEud2lkZ2V0SWQ7XHJcbiAgICBkYXRhLmhlaWdodCA9IHRoaXMud2lkZ2V0SGVpZ2h0O1xyXG4gICAgZGF0YS53aWR0aCA9IHRoaXMud2lkZ2V0V2lkdGg7XHJcbiAgICBkYXRhLnBvc2l0aW9uX3ggPSAwO1xyXG4gICAgZGF0YS5wb3NpdGlvbl95ID0gMDtcclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbShkYXRhKTtcclxuXHJcbiAgICAvKiogdG8gZmluZCB0aGUgYXZhaWxhYmxlIHBvc2l0aW9uIGluIGdyaWRzdGVyLCB0ZW1wIGNvbW1lbnRpbmcgdGhlIGNvZGUtcmV0dXJuaW5nIGhpZ2hlciB5IHZhbHVlIHRoYW4gbm9ybWFsICovXHJcbiAgICAvLyBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgLy8gICBncmlkc3Rlckl0ZW0gPSB0aGlzLm9wdGlvbnMuYXBpLmdldEZpcnN0UG9zc2libGVQb3NpdGlvbihncmlkc3Rlckl0ZW0pO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZGF0YS5wb3NpdGlvbl94ID0gZ3JpZHN0ZXJJdGVtLng7XHJcbiAgICAvLyBkYXRhLnBvc2l0aW9uX3kgPSBncmlkc3Rlckl0ZW0ueTtcclxuICAgIGRhdGEuZGFzaGJvYXJkQXJlYUtleSA9IHRoaXMuYXJlYUtleTtcclxuICAgIGRhdGEuZGFzaGJvYXJkSWQgPSB0aGlzLnVzZXJEYXNoYm9hcmRJZDtcclxuICAgIHRoaXMubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmFkZFdpZGdldChkYXRhLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldCA9PiB7XHJcbiAgICAgIGdyaWRzdGVySXRlbSA9IHRoaXMubWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKHdpZGdldCk7XHJcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICAvKipUbyBzYXZlIGFkZGVkIHdpZGdldCBwb3NpdGlvbiBpbiBkYiAqL1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldHMoKTtcclxuICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0QWRkZWQsIHdpZGdldCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBhZGQgd2lkZ2V0IHRvIGN1cnJlbnQgd2lkZ2V0IGxpc3QgLGludm9rZWQgZnJvbSBjb3B5IHdpZGdldCB3aW5kb3cqL1xyXG4gIGNvcHlXaWRnZXQoZGF0YTogYW55KSB7XHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICBncmlkc3Rlckl0ZW0gPSB0aGlzLm9wdGlvbnMuYXBpLmdldEZpcnN0UG9zc2libGVQb3NpdGlvbihncmlkc3Rlckl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRhdGEucG9zaXRpb25feCA9IGdyaWRzdGVySXRlbS54O1xyXG4gICAgZGF0YS5wb3NpdGlvbl95ID0gZ3JpZHN0ZXJJdGVtLnk7XHJcbiAgICBncmlkc3Rlckl0ZW0gPSB0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbShkYXRhKTtcclxuICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XHJcbiAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlRvIG1hcCBJd2lkZ2V0SW5mbyBvYmplY3QgdG8gZ3JpZHN0ZXJJdGVtICovXHJcbiAgbWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKHdpZGdldDogSVdpZGdldEluZm8pIHtcclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSA8R3JpZHN0ZXJJdGVtPntcclxuICAgICAgY29sczogd2lkZ2V0LndpZHRoLFxyXG4gICAgICByb3dzOiB3aWRnZXQuaGVpZ2h0LFxyXG4gICAgICB4OiB3aWRnZXQucG9zaXRpb25feCxcclxuICAgICAgeTogd2lkZ2V0LnBvc2l0aW9uX3ksXHJcbiAgICAgIHdpZGdldEluZm86IHdpZGdldFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyaWRzdGVySXRlbTtcclxuICB9XHJcblxyXG4gIG1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0TGlzdDogQXJyYXk8SVdpZGdldEluZm8+KSB7XHJcbiAgICBsZXQgd2lkZ2V0QXJyYXkgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XHJcbiAgICB3aWRnZXRMaXN0LmZvckVhY2god2lkZ2V0ID0+IHtcclxuICAgICAgd2lkZ2V0QXJyYXkucHVzaCh0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHdpZGdldEFycmF5O1xyXG4gIH1cclxuXHJcbiAgbWFwR3JpZHN0ZXJJdGVtVG9PYmplY3Qod2lkZ2V0SXRlbTogR3JpZHN0ZXJJdGVtKSB7XHJcbiAgICBsZXQgd2lkZ2V0OiBJV2lkZ2V0SW5mbztcclxuICAgIHdpZGdldCA9IHdpZGdldEl0ZW0ud2lkZ2V0SW5mbztcclxuICAgIHdpZGdldC5oZWlnaHQgPSB3aWRnZXRJdGVtLnJvd3M7XHJcbiAgICB3aWRnZXQud2lkdGggPSB3aWRnZXRJdGVtLmNvbHM7XHJcbiAgICB3aWRnZXQucG9zaXRpb25feCA9IHdpZGdldEl0ZW0ueDtcclxuICAgIHdpZGdldC5wb3NpdGlvbl95ID0gd2lkZ2V0SXRlbS55O1xyXG4gICAgd2lkZ2V0LnJvd0hlaWdodCA9IHdpZGdldEl0ZW0uY3VyUm93SGVpZ2h0O1xyXG4gICAgcmV0dXJuIHdpZGdldDtcclxuICB9XHJcblxyXG4gIG1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHdpZGdldEl0ZW1MaXN0OiBBcnJheTxHcmlkc3Rlckl0ZW0+KSB7XHJcbiAgICBsZXQgd2lkZ2V0TGlzdEFycmF5ID0gQXJyYXk8SVdpZGdldEluZm8+KCk7XHJcbiAgICB3aWRnZXRJdGVtTGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XHJcbiAgICAgIHdpZGdldExpc3RBcnJheS5wdXNoKHRoaXMubWFwR3JpZHN0ZXJJdGVtVG9PYmplY3Qod2lkZ2V0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3aWRnZXRMaXN0QXJyYXk7XHJcbiAgfVxyXG5cclxufSJdfQ==
|
|
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() + 100;
|
|
288
|
+
}
|
|
289
|
+
if (areaHeight < 600) {
|
|
290
|
+
areaHeight = 600;
|
|
291
|
+
}
|
|
292
|
+
console.log('grid height value is');
|
|
293
|
+
console.log(areaHeight);
|
|
294
|
+
this.gridheight = areaHeight;
|
|
295
|
+
};
|
|
296
|
+
/** To remove a widget instance from dashboard and to save info in database */
|
|
297
|
+
/**
|
|
298
|
+
* To remove a widget instance from dashboard and to save info in database
|
|
299
|
+
* @param {?} widgetInstanceId
|
|
300
|
+
* @param {?=} isalertDisabled
|
|
301
|
+
* @return {?}
|
|
302
|
+
*/
|
|
303
|
+
RADashboardArea.prototype.deleteWidget = /**
|
|
304
|
+
* To remove a widget instance from dashboard and to save info in database
|
|
305
|
+
* @param {?} widgetInstanceId
|
|
306
|
+
* @param {?=} isalertDisabled
|
|
307
|
+
* @return {?}
|
|
308
|
+
*/
|
|
309
|
+
function (widgetInstanceId, isalertDisabled) {
|
|
310
|
+
if (isalertDisabled === void 0) { isalertDisabled = false; }
|
|
311
|
+
/** @type {?} */
|
|
312
|
+
var widget = this.widgetList.filter((/**
|
|
313
|
+
* @param {?} item
|
|
314
|
+
* @return {?}
|
|
315
|
+
*/
|
|
316
|
+
function (item) {
|
|
317
|
+
return item.widgetInfo.widgetInstanceId === widgetInstanceId;
|
|
318
|
+
}));
|
|
319
|
+
if (widget.length > 0) {
|
|
320
|
+
this.widgetList.splice(this.widgetList.indexOf(widget[0]), 1);
|
|
321
|
+
this.setAreaHeight();
|
|
322
|
+
if (!isalertDisabled) {
|
|
323
|
+
this.notifier.notify('success', " " + this.translateService.translate('Widget') + " " + widget[0].widgetInfo.widgetTitle + " " + this.translateService.translate('DeletedSuccesfully') + " ");
|
|
324
|
+
}
|
|
325
|
+
this.options.compactType = 'compactLeft&Up';
|
|
326
|
+
this.options.api.optionsChanged();
|
|
327
|
+
this.options.compactType = 'none';
|
|
328
|
+
this.options.api.optionsChanged();
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
/**To add widget instance to the database with the next available position and to make changes in
|
|
332
|
+
* dashboard area.
|
|
333
|
+
*/
|
|
334
|
+
/**
|
|
335
|
+
* To add widget instance to the database with the next available position and to make changes in
|
|
336
|
+
* dashboard area.
|
|
337
|
+
* @param {?} data
|
|
338
|
+
* @return {?}
|
|
339
|
+
*/
|
|
340
|
+
RADashboardArea.prototype.addWidget = /**
|
|
341
|
+
* To add widget instance to the database with the next available position and to make changes in
|
|
342
|
+
* dashboard area.
|
|
343
|
+
* @param {?} data
|
|
344
|
+
* @return {?}
|
|
345
|
+
*/
|
|
346
|
+
function (data) {
|
|
347
|
+
var _this = this;
|
|
348
|
+
/** @type {?} */
|
|
349
|
+
var widgetid = data.widgetId;
|
|
350
|
+
data.height = this.widgetHeight;
|
|
351
|
+
data.width = this.widgetWidth;
|
|
352
|
+
data.position_x = 0;
|
|
353
|
+
data.position_y = 0;
|
|
354
|
+
/** @type {?} */
|
|
355
|
+
var gridsterItem = this.mapObjectsToGridsterItem(data);
|
|
356
|
+
/** to find the available position in gridster, temp commenting the code-returning higher y value than normal */
|
|
357
|
+
// if (this.options.api) {
|
|
358
|
+
// gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
|
|
359
|
+
// }
|
|
360
|
+
// data.position_x = gridsterItem.x;
|
|
361
|
+
// data.position_y = gridsterItem.y;
|
|
362
|
+
data.dashboardAreaKey = this.areaKey;
|
|
363
|
+
data.dashboardId = this.userDashboardId;
|
|
364
|
+
this.ngxService.start();
|
|
365
|
+
this.dashboardService.addWidget(data, this.appConfig).subscribe((/**
|
|
366
|
+
* @param {?} widget
|
|
367
|
+
* @return {?}
|
|
368
|
+
*/
|
|
369
|
+
function (widget) {
|
|
370
|
+
gridsterItem = _this.mapObjectsToGridsterItem(widget);
|
|
371
|
+
_this.widgetList.push(gridsterItem);
|
|
372
|
+
_this.setAreaHeight();
|
|
373
|
+
/**To save added widget position in db */
|
|
374
|
+
setTimeout((/**
|
|
375
|
+
* @return {?}
|
|
376
|
+
*/
|
|
377
|
+
function () {
|
|
378
|
+
_this.updateWidgets();
|
|
379
|
+
}), 1000);
|
|
380
|
+
_this.raDashboardEventBus.publish(RAEvent.WidgetAdded, widget);
|
|
381
|
+
}));
|
|
382
|
+
};
|
|
383
|
+
/** To add widget to current widget list ,invoked from copy widget window*/
|
|
384
|
+
/**
|
|
385
|
+
* To add widget to current widget list ,invoked from copy widget window
|
|
386
|
+
* @param {?} data
|
|
387
|
+
* @return {?}
|
|
388
|
+
*/
|
|
389
|
+
RADashboardArea.prototype.copyWidget = /**
|
|
390
|
+
* To add widget to current widget list ,invoked from copy widget window
|
|
391
|
+
* @param {?} data
|
|
392
|
+
* @return {?}
|
|
393
|
+
*/
|
|
394
|
+
function (data) {
|
|
395
|
+
/** @type {?} */
|
|
396
|
+
var gridsterItem = this.mapObjectsToGridsterItem(data);
|
|
397
|
+
if (this.options.api) {
|
|
398
|
+
gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
|
|
399
|
+
}
|
|
400
|
+
data.position_x = gridsterItem.x;
|
|
401
|
+
data.position_y = gridsterItem.y;
|
|
402
|
+
gridsterItem = this.mapObjectsToGridsterItem(data);
|
|
403
|
+
this.widgetList.push(gridsterItem);
|
|
404
|
+
this.setAreaHeight();
|
|
405
|
+
};
|
|
406
|
+
/**To map IwidgetInfo object to gridsterItem */
|
|
407
|
+
/**
|
|
408
|
+
* To map IwidgetInfo object to gridsterItem
|
|
409
|
+
* @param {?} widget
|
|
410
|
+
* @return {?}
|
|
411
|
+
*/
|
|
412
|
+
RADashboardArea.prototype.mapObjectsToGridsterItem = /**
|
|
413
|
+
* To map IwidgetInfo object to gridsterItem
|
|
414
|
+
* @param {?} widget
|
|
415
|
+
* @return {?}
|
|
416
|
+
*/
|
|
417
|
+
function (widget) {
|
|
418
|
+
/** @type {?} */
|
|
419
|
+
var gridsterItem = (/** @type {?} */ ({
|
|
420
|
+
cols: widget.width,
|
|
421
|
+
rows: widget.height,
|
|
422
|
+
x: widget.position_x,
|
|
423
|
+
y: widget.position_y,
|
|
424
|
+
widgetInfo: widget
|
|
425
|
+
}));
|
|
426
|
+
return gridsterItem;
|
|
427
|
+
};
|
|
428
|
+
/**
|
|
429
|
+
* @param {?} widgetList
|
|
430
|
+
* @return {?}
|
|
431
|
+
*/
|
|
432
|
+
RADashboardArea.prototype.mapObjectListToGridsterItemList = /**
|
|
433
|
+
* @param {?} widgetList
|
|
434
|
+
* @return {?}
|
|
435
|
+
*/
|
|
436
|
+
function (widgetList) {
|
|
437
|
+
var _this = this;
|
|
438
|
+
/** @type {?} */
|
|
439
|
+
var widgetArray = Array();
|
|
440
|
+
widgetList.forEach((/**
|
|
441
|
+
* @param {?} widget
|
|
442
|
+
* @return {?}
|
|
443
|
+
*/
|
|
444
|
+
function (widget) {
|
|
445
|
+
widgetArray.push(_this.mapObjectsToGridsterItem(widget));
|
|
446
|
+
}));
|
|
447
|
+
return widgetArray;
|
|
448
|
+
};
|
|
449
|
+
/**
|
|
450
|
+
* @param {?} widgetItem
|
|
451
|
+
* @return {?}
|
|
452
|
+
*/
|
|
453
|
+
RADashboardArea.prototype.mapGridsterItemToObject = /**
|
|
454
|
+
* @param {?} widgetItem
|
|
455
|
+
* @return {?}
|
|
456
|
+
*/
|
|
457
|
+
function (widgetItem) {
|
|
458
|
+
/** @type {?} */
|
|
459
|
+
var widget;
|
|
460
|
+
widget = widgetItem.widgetInfo;
|
|
461
|
+
widget.height = widgetItem.rows;
|
|
462
|
+
widget.width = widgetItem.cols;
|
|
463
|
+
widget.position_x = widgetItem.x;
|
|
464
|
+
widget.position_y = widgetItem.y;
|
|
465
|
+
widget.rowHeight = widgetItem.curRowHeight;
|
|
466
|
+
return widget;
|
|
467
|
+
};
|
|
468
|
+
/**
|
|
469
|
+
* @param {?} widgetItemList
|
|
470
|
+
* @return {?}
|
|
471
|
+
*/
|
|
472
|
+
RADashboardArea.prototype.mapGridsterListToObject = /**
|
|
473
|
+
* @param {?} widgetItemList
|
|
474
|
+
* @return {?}
|
|
475
|
+
*/
|
|
476
|
+
function (widgetItemList) {
|
|
477
|
+
var _this = this;
|
|
478
|
+
/** @type {?} */
|
|
479
|
+
var widgetListArray = Array();
|
|
480
|
+
widgetItemList.forEach((/**
|
|
481
|
+
* @param {?} widget
|
|
482
|
+
* @return {?}
|
|
483
|
+
*/
|
|
484
|
+
function (widget) {
|
|
485
|
+
widgetListArray.push(_this.mapGridsterItemToObject(widget));
|
|
486
|
+
}));
|
|
487
|
+
return widgetListArray;
|
|
488
|
+
};
|
|
489
|
+
RADashboardArea.decorators = [
|
|
490
|
+
{ type: Component, args: [{
|
|
491
|
+
selector: 'ra-dashboard-area',
|
|
492
|
+
template: "<div #gridWrapper class=\"wrap gridster\" [style.height.px]=\"gridheight\" >\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",
|
|
493
|
+
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)}"]
|
|
494
|
+
}] }
|
|
495
|
+
];
|
|
496
|
+
/** @nocollapse */
|
|
497
|
+
RADashboardArea.ctorParameters = function () { return [
|
|
498
|
+
{ type: RaDashboardService },
|
|
499
|
+
{ type: NgZone },
|
|
500
|
+
{ type: NgxUiLoaderService },
|
|
501
|
+
{ type: RATranslateService },
|
|
502
|
+
{ type: NotifierService }
|
|
503
|
+
]; };
|
|
504
|
+
RADashboardArea.propDecorators = {
|
|
505
|
+
userDashboardId: [{ type: Input, args: ['user-dashboard-id',] }],
|
|
506
|
+
areaKey: [{ type: Input, args: ['area-key',] }],
|
|
507
|
+
globalFilter: [{ type: Input, args: ['global-filter',] }],
|
|
508
|
+
raDashboardEventBus: [{ type: Input, args: ['event-bus',] }],
|
|
509
|
+
widgetHeight: [{ type: Input, args: ['widget-height',] }],
|
|
510
|
+
widgetWidth: [{ type: Input, args: ['widget-width',] }],
|
|
511
|
+
appConfig: [{ type: Input, args: ['app-config',] }]
|
|
512
|
+
};
|
|
513
|
+
return RADashboardArea;
|
|
514
|
+
}());
|
|
515
|
+
export { RADashboardArea };
|
|
516
|
+
if (false) {
|
|
517
|
+
/** @type {?} */
|
|
518
|
+
RADashboardArea.prototype.widgetList;
|
|
519
|
+
/** @type {?} */
|
|
520
|
+
RADashboardArea.prototype.options;
|
|
521
|
+
/** @type {?} */
|
|
522
|
+
RADashboardArea.prototype.gridheight;
|
|
523
|
+
/**
|
|
524
|
+
* @type {?}
|
|
525
|
+
* @private
|
|
526
|
+
*/
|
|
527
|
+
RADashboardArea.prototype.conifgAddClick;
|
|
528
|
+
/**
|
|
529
|
+
* @type {?}
|
|
530
|
+
* @private
|
|
531
|
+
*/
|
|
532
|
+
RADashboardArea.prototype.widgetDeleteEvent;
|
|
533
|
+
/**
|
|
534
|
+
* @type {?}
|
|
535
|
+
* @private
|
|
536
|
+
*/
|
|
537
|
+
RADashboardArea.prototype.widgetAddEvent;
|
|
538
|
+
/**
|
|
539
|
+
* @type {?}
|
|
540
|
+
* @private
|
|
541
|
+
*/
|
|
542
|
+
RADashboardArea.prototype.widgetLibraryDoneClick;
|
|
543
|
+
/**
|
|
544
|
+
* @type {?}
|
|
545
|
+
* @private
|
|
546
|
+
*/
|
|
547
|
+
RADashboardArea.prototype.isWidgetLoaded;
|
|
548
|
+
/** @type {?} */
|
|
549
|
+
RADashboardArea.prototype.userDashboardId;
|
|
550
|
+
/** @type {?} */
|
|
551
|
+
RADashboardArea.prototype.areaKey;
|
|
552
|
+
/** @type {?} */
|
|
553
|
+
RADashboardArea.prototype.globalFilter;
|
|
554
|
+
/** @type {?} */
|
|
555
|
+
RADashboardArea.prototype.raDashboardEventBus;
|
|
556
|
+
/** @type {?} */
|
|
557
|
+
RADashboardArea.prototype.widgetHeight;
|
|
558
|
+
/** @type {?} */
|
|
559
|
+
RADashboardArea.prototype.widgetWidth;
|
|
560
|
+
/** @type {?} */
|
|
561
|
+
RADashboardArea.prototype.appConfig;
|
|
562
|
+
/**
|
|
563
|
+
* @type {?}
|
|
564
|
+
* @private
|
|
565
|
+
*/
|
|
566
|
+
RADashboardArea.prototype.dashboardService;
|
|
567
|
+
/**
|
|
568
|
+
* @type {?}
|
|
569
|
+
* @private
|
|
570
|
+
*/
|
|
571
|
+
RADashboardArea.prototype.ngZone;
|
|
572
|
+
/**
|
|
573
|
+
* @type {?}
|
|
574
|
+
* @private
|
|
575
|
+
*/
|
|
576
|
+
RADashboardArea.prototype.ngxService;
|
|
577
|
+
/**
|
|
578
|
+
* @type {?}
|
|
579
|
+
* @private
|
|
580
|
+
*/
|
|
581
|
+
RADashboardArea.prototype.translateService;
|
|
582
|
+
/**
|
|
583
|
+
* @type {?}
|
|
584
|
+
* @private
|
|
585
|
+
*/
|
|
586
|
+
RADashboardArea.prototype.notifier;
|
|
587
|
+
}
|
|
588
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQTRCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RDtJQTBCRSx5QkFBb0IsZ0JBQW9DLEVBQzlDLE1BQWMsRUFDZCxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsUUFBeUI7UUFKZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBdEI1QixlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFNeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFNaEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDMUIsZ0JBQVcsR0FBVyxDQUFD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QUUvQiwyQ0FBNEM7Ozs7O0lBQ3RELGlDQUFzQjs7Ozs7SUFDdEIscUNBQXNDOzs7OztJQUN0QywyQ0FBNEM7Ozs7O0lBQzVDLG1DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBPbkluaXQsIENvbXBvbmVudCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZywgR3JpZHN0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vZ3JpZHN0ZXIvaW5kZXgnO1xuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XG5pbXBvcnQgeyBSQUV2ZW50IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZ0RlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uL3JhLmdyaWRzdGVyLmNvbmZpZyc7XG5pbXBvcnQgeyBJV2lkZ2V0SW5mbywgSUFwcENvbmZpZyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmEtZGFzaGJvYXJkLWFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhLmRhc2hib2FyZC5hcmVhLmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJBRGFzaGJvYXJkQXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG5cbiAgcHVibGljIHdpZGdldExpc3QgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XG4gIHB1YmxpYyBvcHRpb25zOiBHcmlkc3RlckNvbmZpZztcbiAgcHVibGljIGdyaWRoZWlnaHQ6IG51bWJlciA9IDMwMDtcblxuICBwcml2YXRlIGNvbmlmZ0FkZENsaWNrOiBhbnk7XG4gIHByaXZhdGUgd2lkZ2V0RGVsZXRlRXZlbnQ6IGFueTtcbiAgcHJpdmF0ZSB3aWRnZXRBZGRFdmVudDogYW55O1xuICBwcml2YXRlIHdpZGdldExpYnJhcnlEb25lQ2xpY2s6IGFueTtcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgndXNlci1kYXNoYm9hcmQtaWQnKSB1c2VyRGFzaGJvYXJkSWQ6IG51bWJlcjtcbiAgQElucHV0KCdhcmVhLWtleScpIGFyZWFLZXk6IHN0cmluZztcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyOiBhbnk7XG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0Jykgd2lkZ2V0SGVpZ2h0OiBudW1iZXIgPSAzO1xuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZGdldFdpZHRoOiBudW1iZXIgPSA1O1xuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWc6IElBcHBDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXG4gICAgaWYgKHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiB0aGlzLmFwcENvbmZpZyAmJiAhdGhpcy5pc1dpZGdldExvYWRlZCkge1xuICAgICAgdGhpcy5pc1dpZGdldExvYWRlZCA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5pbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqVG8gc2V0IEdyaWRzdGVyQ29uZmlnICovXG4gIHB1YmxpYyBpbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCkge1xuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XG4gICAgLyoqVG8gb3ZlcnJpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcyB0byB0aGUgZ3JpZHN0ZXIgY29udHJvbCAqL1xuICAgIHRoaXMub3B0aW9ucyA9IEdyaWRzdGVyQ29uZmlnRGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMub3B0aW9ucy5pdGVtQ2hhbmdlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaXRlbTogYW55KSB7XG4gICAgICBhcmVhQ29udGV4dC5zZXRBcmVhSGVpZ2h0KCk7XG4gICAgICBhcmVhQ29udGV4dC51cGRhdGVXaWRnZXRzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRvIGluaXRpYXRlIGV2ZW50YnVzIHN1YnNjdGlwdGlvbnMgKi9cbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XG4gICAgdGhpcy53aWRnZXREZWxldGVFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5XaWRnZXREZWxldGUpLnN1YnNjcmliZSgoaW5zdGFuY2VJZCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMud2lkZ2V0QWRkRXZlbnQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQWRkV2lkZ2V0KS5zdWJzY3JpYmUoKHdpZGdldEluZm8pID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25pZmdBZGRDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5Db25maWdBZGRDbGljaykuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LndpZGdldExpYnJhcnlEb25lQ2xpY2spLnN1YnNjcmliZSgod2lkZ2V0TGlzdCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHsgICAgICAgXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7ICAgICAgICBcbiAgICAgICAgICAvLyB3aWRnZXRMaXN0LmZvckVhY2god2lkZ2V0SW5mbyA9PiB7XG4gICAgICAgICAgLy8gICB0aGlzLmFkZFdpZGdldCh3aWRnZXRJbmZvKTtcbiAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB0aGlzLmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0ZW1wIGZpeC0gcmVjdXJzaXZlIG1ldGhvZCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2YgaXRlbXNcbiAgICogYW5kIGFkZCB0aGVtIHRvIGdyaWRzdGVyIGluIHRoZSBnaXZlbiBvcmRlclxuICAgKiBAcGFyYW0gd2lkZ2V0TGlzdCAgLWxpc3Qgb2Ygd2lkZ2V0c1xuICAgKiBAcGFyYW0gaW5kZXggLWluZGV4IG9mIHRoZSBjdXJyZW50IHZhbHVlIHRvIGJlIGFkZGVkXG4gICAqL1xuICBhZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xuICAgIGxldCBpbmRleFZhbCA9IGluZGV4ICsgMTtcbiAgICBpZiAoaW5kZXggPiB3aWRnZXRMaXN0Lmxlbmd0aCAtIDEpXG4gICAgICByZXR1cm47XG4gICAgZWxzZSB7XG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmlmZ0FkZENsaWNrKVxuICAgICAgdGhpcy5jb25pZmdBZGRDbGljay51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMud2lkZ2V0QWRkRXZlbnQpXG4gICAgICB0aGlzLndpZGdldEFkZEV2ZW50LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy53aWRnZXREZWxldGVFdmVudClcbiAgICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQudW5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2spXG4gICAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlRvIHVwZGF0ZSBwb3NpdGlvbi9kaW1lbnRpb24gb2YgYWxsIHdpZGdldHMgaW4gdGhlIGFyZWEgKi9cbiAgdXBkYXRlV2lkZ2V0cygpIHtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHRoaXMud2lkZ2V0TGlzdCksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogVG8gcmV0cmlldmUgd2lkZ2V0cyBiYXNlZCBvbiB1c2VyRGFzaGJvYXJkaWQgYW5kIGFyZWEgbmFtZSAqL1xuICBsb2FkV2lkZ2V0cyh1c2VyRGFzaGJvYXJJZDogbnVtYmVyLCBhcmVhS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xuXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xuICAgICAgZGFzaGJvYXJkSWQ6IHVzZXJEYXNoYm9hcklkLnRvU3RyaW5nKCksXG4gICAgICBkYXNoYm9hcmRBcmVhS2V5OiBhcmVhS2V5XG4gICAgfVxuICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSBbXTtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0c0J5RGFzaGJvYXJkQXJlYSh3aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xuICAgICAgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0cyk7XG4gICAgICAgIGFyZWFDb250ZXh0LnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKiogVG8gc2V0IEFyZWEoR3JpZHN0ZXIpIGhlaWdodCBkeW5hbWljYWxseSBhcyB3aWRnZXRzIGFyZSBhZGRlZC9yZW1vdmVkICovXG4gIHNldEFyZWFIZWlnaHQoKSB7XG4gICAgbGV0IGFyZWFTY3JvbGxIZWlnaHQgPSAwO1xuICAgIGxldCBhcmVhSGVpZ2h0ID0gMDtcbiAgICBsZXQgY3VyUm93SGVpZ2h0ID0gMDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xuICAgICAgY3VyUm93SGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCk7XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0TGlzdC5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBsZXQgY3VycmVudEhlaWdodCA9IHQueSArIHQucm93cztcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gYXJlYVNjcm9sbEhlaWdodCkge1xuICAgICAgICBhcmVhU2Nyb2xsSGVpZ2h0ID0gY3VycmVudEhlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJSb3dIZWlnaHQgPT0gMCkge1xuICAgICAgICBjdXJyZW50SGVpZ2h0ID0gdGhpcy53aWRnZXRMaXN0WzBdLmN1clJvd0hlaWdodDtcbiAgICAgIH1cbiAgICAgIHQud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XG4gICAgfSk7XG5cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XG4gICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodCAqIHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpICsgMTAwO1xuICAgIH1cbiAgICBpZiAoYXJlYUhlaWdodCA8IDYwMCkge1xuICAgICAgYXJlYUhlaWdodCA9IDYwMDtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ2dyaWQgaGVpZ2h0IHZhbHVlIGlzJyk7XG4gICAgY29uc29sZS5sb2coYXJlYUhlaWdodCk7XG4gICAgdGhpcy5ncmlkaGVpZ2h0ID0gYXJlYUhlaWdodDtcbiAgfVxuXG5cbiAgLyoqIFRvIHJlbW92ZSBhIHdpZGdldCBpbnN0YW5jZSBmcm9tIGRhc2hib2FyZCBhbmQgdG8gc2F2ZSBpbmZvIGluIGRhdGFiYXNlICovXG4gIGRlbGV0ZVdpZGdldCh3aWRnZXRJbnN0YW5jZUlkOiBhbnksIGlzYWxlcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgbGV0IHdpZGdldCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcbiAgICB9KTtcbiAgICBpZiAod2lkZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5zcGxpY2UodGhpcy53aWRnZXRMaXN0LmluZGV4T2Yod2lkZ2V0WzBdKSwgMSk7XG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIGlmICghaXNhbGVydERpc2FibGVkKSB7XG4gICAgICAgIHRoaXMubm90aWZpZXIubm90aWZ5KCdzdWNjZXNzJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdXaWRnZXQnKSArIFwiIFwiICsgd2lkZ2V0WzBdLndpZGdldEluZm8ud2lkZ2V0VGl0bGUgKyBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0RlbGV0ZWRTdWNjZXNmdWxseScpICsgXCIgXCIpO1xuXG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGFjdFR5cGUgPSAnY29tcGFjdExlZnQmVXAnO1xuICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xuICAgICAgdGhpcy5vcHRpb25zLmNvbXBhY3RUeXBlID0gJ25vbmUnO1xuICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG5cblxuICAvKipUbyBhZGQgd2lkZ2V0IGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSBwb3NpdGlvbiBhbmQgdG8gbWFrZSBjaGFuZ2VzIGluXG4gICAqIGRhc2hib2FyZCBhcmVhLlxuICAgKi9cbiAgYWRkV2lkZ2V0KGRhdGE6IGFueSkge1xuICAgIGxldCB3aWRnZXRpZCA9IGRhdGEud2lkZ2V0SWQ7XG4gICAgZGF0YS5oZWlnaHQgPSB0aGlzLndpZGdldEhlaWdodDtcbiAgICBkYXRhLndpZHRoID0gdGhpcy53aWRnZXRXaWR0aDtcbiAgICBkYXRhLnBvc2l0aW9uX3ggPSAwO1xuICAgIGRhdGEucG9zaXRpb25feSA9IDA7XG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMubWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKGRhdGEpO1xuXG4gICAgLyoqIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBwb3NpdGlvbiBpbiBncmlkc3RlciwgdGVtcCBjb21tZW50aW5nIHRoZSBjb2RlLXJldHVybmluZyBoaWdoZXIgeSB2YWx1ZSB0aGFuIG5vcm1hbCAqL1xuICAgIC8vIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XG4gICAgLy8gICBncmlkc3Rlckl0ZW0gPSB0aGlzLm9wdGlvbnMuYXBpLmdldEZpcnN0UG9zc2libGVQb3NpdGlvbihncmlkc3Rlckl0ZW0pO1xuICAgIC8vIH1cbiAgICAvLyBkYXRhLnBvc2l0aW9uX3ggPSBncmlkc3Rlckl0ZW0ueDtcbiAgICAvLyBkYXRhLnBvc2l0aW9uX3kgPSBncmlkc3Rlckl0ZW0ueTtcbiAgICBkYXRhLmRhc2hib2FyZEFyZWFLZXkgPSB0aGlzLmFyZWFLZXk7XG4gICAgZGF0YS5kYXNoYm9hcmRJZCA9IHRoaXMudXNlckRhc2hib2FyZElkO1xuICAgIHRoaXMubmd4U2VydmljZS5zdGFydCgpO1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXQoZGF0YSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXQgPT4ge1xuICAgICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0od2lkZ2V0KTtcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIC8qKlRvIHNhdmUgYWRkZWQgd2lkZ2V0IHBvc2l0aW9uIGluIGRiICovXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRzKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0QWRkZWQsIHdpZGdldCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogVG8gYWRkIHdpZGdldCB0byBjdXJyZW50IHdpZGdldCBsaXN0ICxpbnZva2VkIGZyb20gY29weSB3aWRnZXQgd2luZG93Ki9cbiAgY29weVdpZGdldChkYXRhOiBhbnkpIHtcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcbiAgICAgIGdyaWRzdGVySXRlbSA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Rmlyc3RQb3NzaWJsZVBvc2l0aW9uKGdyaWRzdGVySXRlbSk7XG4gICAgfVxuXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gZ3JpZHN0ZXJJdGVtLng7XG4gICAgZGF0YS5wb3NpdGlvbl95ID0gZ3JpZHN0ZXJJdGVtLnk7XG4gICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XG4gICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcbiAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgfVxuXG4gIC8qKlRvIG1hcCBJd2lkZ2V0SW5mbyBvYmplY3QgdG8gZ3JpZHN0ZXJJdGVtICovXG4gIG1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQ6IElXaWRnZXRJbmZvKSB7XG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IDxHcmlkc3Rlckl0ZW0+e1xuICAgICAgY29sczogd2lkZ2V0LndpZHRoLFxuICAgICAgcm93czogd2lkZ2V0LmhlaWdodCxcbiAgICAgIHg6IHdpZGdldC5wb3NpdGlvbl94LFxuICAgICAgeTogd2lkZ2V0LnBvc2l0aW9uX3ksXG4gICAgICB3aWRnZXRJbmZvOiB3aWRnZXRcbiAgICB9XG4gICAgcmV0dXJuIGdyaWRzdGVySXRlbTtcbiAgfVxuXG4gIG1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0TGlzdDogQXJyYXk8SVdpZGdldEluZm8+KSB7XG4gICAgbGV0IHdpZGdldEFycmF5ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xuICAgIHdpZGdldExpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgd2lkZ2V0QXJyYXkucHVzaCh0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gd2lkZ2V0QXJyYXk7XG4gIH1cblxuICBtYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXRJdGVtOiBHcmlkc3Rlckl0ZW0pIHtcbiAgICBsZXQgd2lkZ2V0OiBJV2lkZ2V0SW5mbztcbiAgICB3aWRnZXQgPSB3aWRnZXRJdGVtLndpZGdldEluZm87XG4gICAgd2lkZ2V0LmhlaWdodCA9IHdpZGdldEl0ZW0ucm93cztcbiAgICB3aWRnZXQud2lkdGggPSB3aWRnZXRJdGVtLmNvbHM7XG4gICAgd2lkZ2V0LnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLng7XG4gICAgd2lkZ2V0LnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnk7XG4gICAgd2lkZ2V0LnJvd0hlaWdodCA9IHdpZGdldEl0ZW0uY3VyUm93SGVpZ2h0O1xuICAgIHJldHVybiB3aWRnZXQ7XG4gIH1cblxuICBtYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRJdGVtTGlzdDogQXJyYXk8R3JpZHN0ZXJJdGVtPikge1xuICAgIGxldCB3aWRnZXRMaXN0QXJyYXkgPSBBcnJheTxJV2lkZ2V0SW5mbz4oKTtcbiAgICB3aWRnZXRJdGVtTGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICB3aWRnZXRMaXN0QXJyYXkucHVzaCh0aGlzLm1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldCkpO1xuICAgIH0pO1xuICAgIHJldHVybiB3aWRnZXRMaXN0QXJyYXk7XG4gIH1cblxufSJdfQ==
|