@schneideress/dashboardframework 0.0.1
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 -0
- package/bundles/schneideress-dashboardframework.umd.js +5666 -0
- package/bundles/schneideress-dashboardframework.umd.js.map +1 -0
- package/bundles/schneideress-dashboardframework.umd.min.js +2 -0
- package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -0
- package/esm2015/gridster/index.js +18 -0
- package/esm2015/gridster/lib/gridster.component.js +695 -0
- package/esm2015/gridster/lib/gridster.interface.js +84 -0
- package/esm2015/gridster/lib/gridster.module.js +27 -0
- package/esm2015/gridster/lib/gridsterCompact.service.js +223 -0
- package/esm2015/gridster/lib/gridsterConfig.constant.js +179 -0
- package/esm2015/gridster/lib/gridsterConfig.interface.js +219 -0
- package/esm2015/gridster/lib/gridsterConfigS.interface.js +161 -0
- package/esm2015/gridster/lib/gridsterDraggable.service.js +510 -0
- package/esm2015/gridster/lib/gridsterEmptyCell.service.js +317 -0
- package/esm2015/gridster/lib/gridsterItem.component.js +213 -0
- package/esm2015/gridster/lib/gridsterItem.interface.js +46 -0
- package/esm2015/gridster/lib/gridsterItemComponent.interface.js +48 -0
- package/esm2015/gridster/lib/gridsterPreview.component.js +66 -0
- package/esm2015/gridster/lib/gridsterPush.service.js +467 -0
- package/esm2015/gridster/lib/gridsterPushResize.service.js +358 -0
- package/esm2015/gridster/lib/gridsterRenderer.service.js +277 -0
- package/esm2015/gridster/lib/gridsterResizable.service.js +552 -0
- package/esm2015/gridster/lib/gridsterResizeEventType.interface.js +19 -0
- package/esm2015/gridster/lib/gridsterScroll.service.js +195 -0
- package/esm2015/gridster/lib/gridsterSwap.service.js +134 -0
- package/esm2015/gridster/lib/gridsterUtils.service.js +137 -0
- package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +258 -0
- package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +216 -0
- package/esm2015/lib/ra.base.dashboard.filter.js +35 -0
- package/esm2015/lib/ra.base.dashboard.template.js +63 -0
- package/esm2015/lib/ra.dashbard.event.bus.js +85 -0
- package/esm2015/lib/ra.dashboard.module.js +31 -0
- package/esm2015/lib/ra.dashboard.service.js +213 -0
- package/esm2015/lib/ra.event.enum.js +33 -0
- package/esm2015/lib/ra.gridster.config.js +63 -0
- package/esm2015/public-api.js +16 -0
- package/esm2015/schneideress-dashboardframework.js +13 -0
- package/esm5/gridster/index.js +18 -0
- package/esm5/gridster/lib/gridster.component.js +798 -0
- package/esm5/gridster/lib/gridster.interface.js +94 -0
- package/esm5/gridster/lib/gridster.module.js +31 -0
- package/esm5/gridster/lib/gridsterCompact.service.js +253 -0
- package/esm5/gridster/lib/gridsterConfig.constant.js +179 -0
- package/esm5/gridster/lib/gridsterConfig.interface.js +219 -0
- package/esm5/gridster/lib/gridsterConfigS.interface.js +161 -0
- package/esm5/gridster/lib/gridsterDraggable.service.js +549 -0
- package/esm5/gridster/lib/gridsterEmptyCell.service.js +358 -0
- package/esm5/gridster/lib/gridsterItem.component.js +238 -0
- package/esm5/gridster/lib/gridsterItem.interface.js +46 -0
- package/esm5/gridster/lib/gridsterItemComponent.interface.js +58 -0
- package/esm5/gridster/lib/gridsterPreview.component.js +70 -0
- package/esm5/gridster/lib/gridsterPush.service.js +547 -0
- package/esm5/gridster/lib/gridsterPushResize.service.js +423 -0
- package/esm5/gridster/lib/gridsterRenderer.service.js +323 -0
- package/esm5/gridster/lib/gridsterResizable.service.js +629 -0
- package/esm5/gridster/lib/gridsterResizeEventType.interface.js +19 -0
- package/esm5/gridster/lib/gridsterScroll.service.js +195 -0
- package/esm5/gridster/lib/gridsterSwap.service.js +152 -0
- package/esm5/gridster/lib/gridsterUtils.service.js +177 -0
- package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +307 -0
- package/esm5/lib/ra-widget-container/ra.widget.container.component.js +277 -0
- package/esm5/lib/ra.base.dashboard.filter.js +38 -0
- package/esm5/lib/ra.base.dashboard.template.js +63 -0
- package/esm5/lib/ra.dashbard.event.bus.js +125 -0
- package/esm5/lib/ra.dashboard.module.js +35 -0
- package/esm5/lib/ra.dashboard.service.js +295 -0
- package/esm5/lib/ra.event.enum.js +33 -0
- package/esm5/lib/ra.gridster.config.js +63 -0
- package/esm5/public-api.js +16 -0
- package/esm5/schneideress-dashboardframework.js +13 -0
- package/fesm2015/schneideress-dashboardframework.js +4811 -0
- package/fesm2015/schneideress-dashboardframework.js.map +1 -0
- package/fesm5/schneideress-dashboardframework.js +5613 -0
- package/fesm5/schneideress-dashboardframework.js.map +1 -0
- package/gridster/index.d.ts +11 -0
- package/gridster/lib/gridster.component.d.ts +67 -0
- package/gridster/lib/gridster.interface.d.ts +46 -0
- package/gridster/lib/gridster.module.d.ts +2 -0
- package/gridster/lib/gridsterCompact.service.d.ts +15 -0
- package/gridster/lib/gridsterConfig.constant.d.ts +2 -0
- package/gridster/lib/gridsterConfig.interface.d.ts +133 -0
- package/gridster/lib/gridsterConfigS.interface.d.ts +93 -0
- package/gridster/lib/gridsterDraggable.service.d.ts +59 -0
- package/gridster/lib/gridsterEmptyCell.service.d.ts +29 -0
- package/gridster/lib/gridsterItem.component.d.ts +32 -0
- package/gridster/lib/gridsterItem.interface.d.ts +21 -0
- package/gridster/lib/gridsterItemComponent.interface.d.ts +25 -0
- package/gridster/lib/gridsterPreview.component.d.ts +10 -0
- package/gridster/lib/gridsterPush.service.d.ts +33 -0
- package/gridster/lib/gridsterPushResize.service.d.ts +26 -0
- package/gridster/lib/gridsterRenderer.service.d.ts +38 -0
- package/gridster/lib/gridsterResizable.service.d.ts +67 -0
- package/gridster/lib/gridsterResizeEventType.interface.d.ts +6 -0
- package/gridster/lib/gridsterScroll.service.d.ts +4 -0
- package/gridster/lib/gridsterSwap.service.d.ts +13 -0
- package/gridster/lib/gridsterUtils.service.d.ts +16 -0
- package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +37 -0
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +37 -0
- package/lib/ra.base.dashboard.filter.d.ts +4 -0
- package/lib/ra.base.dashboard.template.d.ts +14 -0
- package/lib/ra.dashbard.event.bus.d.ts +20 -0
- package/lib/ra.dashboard.module.d.ts +2 -0
- package/lib/ra.dashboard.service.d.ts +73 -0
- package/lib/ra.event.enum.d.ts +24 -0
- package/lib/ra.gridster.config.d.ts +2 -0
- package/package.json +25 -0
- package/public-api.d.ts +8 -0
- package/schneideress-dashboardframework.d.ts +8 -0
- package/schneideress-dashboardframework.metadata.json +1 -0
|
@@ -0,0 +1,798 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import { ChangeDetectorRef, Component, ElementRef, Input, NgZone, Renderer2, ViewEncapsulation } from '@angular/core';
|
|
6
|
+
import { GridsterConfigService } from './gridsterConfig.constant';
|
|
7
|
+
import { GridsterUtils } from './gridsterUtils.service';
|
|
8
|
+
import { GridsterEmptyCell } from './gridsterEmptyCell.service';
|
|
9
|
+
import { GridsterCompact } from './gridsterCompact.service';
|
|
10
|
+
import { GridsterRenderer } from './gridsterRenderer.service';
|
|
11
|
+
var GridsterComponent = /** @class */ (function () {
|
|
12
|
+
function GridsterComponent(el, renderer, cdRef, zone) {
|
|
13
|
+
this.renderer = renderer;
|
|
14
|
+
this.cdRef = cdRef;
|
|
15
|
+
this.zone = zone;
|
|
16
|
+
this.gridColumns = [];
|
|
17
|
+
this.gridRows = [];
|
|
18
|
+
this.el = el.nativeElement;
|
|
19
|
+
this.$options = JSON.parse(JSON.stringify(GridsterConfigService));
|
|
20
|
+
this.calculateLayoutDebounce = GridsterUtils.debounce(this.calculateLayout.bind(this), 0);
|
|
21
|
+
this.mobile = false;
|
|
22
|
+
this.curWidth = 0;
|
|
23
|
+
this.curHeight = 0;
|
|
24
|
+
this.grid = [];
|
|
25
|
+
this.curColWidth = 0;
|
|
26
|
+
this.curRowHeight = 0;
|
|
27
|
+
this.dragInProgress = false;
|
|
28
|
+
this.emptyCell = new GridsterEmptyCell(this);
|
|
29
|
+
this.compact = new GridsterCompact(this);
|
|
30
|
+
this.gridRenderer = new GridsterRenderer(this);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @param {?} item
|
|
34
|
+
* @param {?} item2
|
|
35
|
+
* @return {?}
|
|
36
|
+
*/
|
|
37
|
+
GridsterComponent.checkCollisionTwoItems = /**
|
|
38
|
+
* @param {?} item
|
|
39
|
+
* @param {?} item2
|
|
40
|
+
* @return {?}
|
|
41
|
+
*/
|
|
42
|
+
function (item, item2) {
|
|
43
|
+
return item.x < item2.x + item2.cols
|
|
44
|
+
&& item.x + item.cols > item2.x
|
|
45
|
+
&& item.y < item2.y + item2.rows
|
|
46
|
+
&& item.y + item.rows > item2.y;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* @return {?}
|
|
50
|
+
*/
|
|
51
|
+
GridsterComponent.prototype.ngOnInit = /**
|
|
52
|
+
* @return {?}
|
|
53
|
+
*/
|
|
54
|
+
function () {
|
|
55
|
+
if (this.options.initCallback) {
|
|
56
|
+
this.options.initCallback(this);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* @param {?} changes
|
|
61
|
+
* @return {?}
|
|
62
|
+
*/
|
|
63
|
+
GridsterComponent.prototype.ngOnChanges = /**
|
|
64
|
+
* @param {?} changes
|
|
65
|
+
* @return {?}
|
|
66
|
+
*/
|
|
67
|
+
function (changes) {
|
|
68
|
+
if (changes.options) {
|
|
69
|
+
this.setOptions();
|
|
70
|
+
this.options.api = {
|
|
71
|
+
optionsChanged: this.optionsChanged.bind(this),
|
|
72
|
+
resize: this.onResize.bind(this),
|
|
73
|
+
getNextPossiblePosition: this.getNextPossiblePosition.bind(this),
|
|
74
|
+
getFirstPossiblePosition: this.getFirstPossiblePosition.bind(this),
|
|
75
|
+
getLastPossiblePosition: this.getLastPossiblePosition.bind(this),
|
|
76
|
+
getCurrentRowHeight: this.getCurrentRowHeight.bind(this)
|
|
77
|
+
};
|
|
78
|
+
this.columns = this.$options.minCols;
|
|
79
|
+
this.rows = this.$options.minRows;
|
|
80
|
+
this.setGridSize();
|
|
81
|
+
this.calculateLayout();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* @return {?}
|
|
86
|
+
*/
|
|
87
|
+
GridsterComponent.prototype.getCurrentRowHeight = /**
|
|
88
|
+
* @return {?}
|
|
89
|
+
*/
|
|
90
|
+
function () {
|
|
91
|
+
return this.curRowHeight;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* @return {?}
|
|
95
|
+
*/
|
|
96
|
+
GridsterComponent.prototype.resize = /**
|
|
97
|
+
* @return {?}
|
|
98
|
+
*/
|
|
99
|
+
function () {
|
|
100
|
+
/** @type {?} */
|
|
101
|
+
var height;
|
|
102
|
+
/** @type {?} */
|
|
103
|
+
var width;
|
|
104
|
+
if (this.$options.gridType === 'fit' && !this.mobile) {
|
|
105
|
+
width = this.el.offsetWidth;
|
|
106
|
+
height = this.el.offsetHeight;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
width = this.el.clientWidth;
|
|
110
|
+
height = this.el.clientHeight;
|
|
111
|
+
}
|
|
112
|
+
if ((width !== this.curWidth || height !== this.curHeight) && this.checkIfToResize()) {
|
|
113
|
+
this.onResize();
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* @return {?}
|
|
118
|
+
*/
|
|
119
|
+
GridsterComponent.prototype.setOptions = /**
|
|
120
|
+
* @return {?}
|
|
121
|
+
*/
|
|
122
|
+
function () {
|
|
123
|
+
this.$options = GridsterUtils.merge(this.$options, this.options, this.$options);
|
|
124
|
+
if (!this.$options.disableWindowResize && !this.windowResize) {
|
|
125
|
+
this.windowResize = this.renderer.listen('window', 'resize', this.onResize.bind(this));
|
|
126
|
+
}
|
|
127
|
+
else if (this.$options.disableWindowResize && this.windowResize) {
|
|
128
|
+
this.windowResize();
|
|
129
|
+
this.windowResize = null;
|
|
130
|
+
}
|
|
131
|
+
this.emptyCell.updateOptions();
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* @return {?}
|
|
135
|
+
*/
|
|
136
|
+
GridsterComponent.prototype.optionsChanged = /**
|
|
137
|
+
* @return {?}
|
|
138
|
+
*/
|
|
139
|
+
function () {
|
|
140
|
+
this.setOptions();
|
|
141
|
+
/** @type {?} */
|
|
142
|
+
var widgetsIndex = this.grid.length - 1;
|
|
143
|
+
/** @type {?} */
|
|
144
|
+
var widget;
|
|
145
|
+
for (; widgetsIndex >= 0; widgetsIndex--) {
|
|
146
|
+
widget = this.grid[widgetsIndex];
|
|
147
|
+
widget.updateOptions();
|
|
148
|
+
}
|
|
149
|
+
this.calculateLayout();
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* @return {?}
|
|
153
|
+
*/
|
|
154
|
+
GridsterComponent.prototype.ngOnDestroy = /**
|
|
155
|
+
* @return {?}
|
|
156
|
+
*/
|
|
157
|
+
function () {
|
|
158
|
+
if (this.windowResize) {
|
|
159
|
+
this.windowResize();
|
|
160
|
+
}
|
|
161
|
+
if (this.options.destroyCallback) {
|
|
162
|
+
this.options.destroyCallback(this);
|
|
163
|
+
}
|
|
164
|
+
if (this.options.api) {
|
|
165
|
+
this.options.api.resize = undefined;
|
|
166
|
+
this.options.api.optionsChanged = undefined;
|
|
167
|
+
this.options.api.getNextPossiblePosition = undefined;
|
|
168
|
+
this.options.api = undefined;
|
|
169
|
+
}
|
|
170
|
+
this.emptyCell.destroy();
|
|
171
|
+
delete this.emptyCell;
|
|
172
|
+
this.compact.destroy();
|
|
173
|
+
delete this.compact;
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* @return {?}
|
|
177
|
+
*/
|
|
178
|
+
GridsterComponent.prototype.onResize = /**
|
|
179
|
+
* @return {?}
|
|
180
|
+
*/
|
|
181
|
+
function () {
|
|
182
|
+
this.setGridSize();
|
|
183
|
+
this.calculateLayout();
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* @return {?}
|
|
187
|
+
*/
|
|
188
|
+
GridsterComponent.prototype.checkIfToResize = /**
|
|
189
|
+
* @return {?}
|
|
190
|
+
*/
|
|
191
|
+
function () {
|
|
192
|
+
/** @type {?} */
|
|
193
|
+
var clientWidth = this.el.clientWidth;
|
|
194
|
+
/** @type {?} */
|
|
195
|
+
var offsetWidth = this.el.offsetWidth;
|
|
196
|
+
/** @type {?} */
|
|
197
|
+
var scrollWidth = this.el.scrollWidth;
|
|
198
|
+
/** @type {?} */
|
|
199
|
+
var clientHeight = this.el.clientHeight;
|
|
200
|
+
/** @type {?} */
|
|
201
|
+
var offsetHeight = this.el.offsetHeight;
|
|
202
|
+
/** @type {?} */
|
|
203
|
+
var scrollHeight = this.el.scrollHeight;
|
|
204
|
+
/** @type {?} */
|
|
205
|
+
var verticalScrollPresent = clientWidth < offsetWidth && scrollHeight > offsetHeight
|
|
206
|
+
&& scrollHeight - offsetHeight < offsetWidth - clientWidth;
|
|
207
|
+
/** @type {?} */
|
|
208
|
+
var horizontalScrollPresent = clientHeight < offsetHeight
|
|
209
|
+
&& scrollWidth > offsetWidth && scrollWidth - offsetWidth < offsetHeight - clientHeight;
|
|
210
|
+
if (verticalScrollPresent) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
return !horizontalScrollPresent;
|
|
214
|
+
};
|
|
215
|
+
/**
|
|
216
|
+
* @return {?}
|
|
217
|
+
*/
|
|
218
|
+
GridsterComponent.prototype.setGridSize = /**
|
|
219
|
+
* @return {?}
|
|
220
|
+
*/
|
|
221
|
+
function () {
|
|
222
|
+
/** @type {?} */
|
|
223
|
+
var el = this.el;
|
|
224
|
+
/** @type {?} */
|
|
225
|
+
var width = el.clientWidth;
|
|
226
|
+
/** @type {?} */
|
|
227
|
+
var height = el.clientHeight;
|
|
228
|
+
if (this.$options.setGridSize || this.$options.gridType === 'fit' && !this.mobile) {
|
|
229
|
+
width = el.offsetWidth;
|
|
230
|
+
height = el.offsetHeight;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
width = el.clientWidth;
|
|
234
|
+
height = el.clientHeight;
|
|
235
|
+
}
|
|
236
|
+
this.curWidth = width;
|
|
237
|
+
this.curHeight = height;
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* @return {?}
|
|
241
|
+
*/
|
|
242
|
+
GridsterComponent.prototype.setGridDimensions = /**
|
|
243
|
+
* @return {?}
|
|
244
|
+
*/
|
|
245
|
+
function () {
|
|
246
|
+
this.setGridSize();
|
|
247
|
+
if (!this.mobile && this.$options.mobileBreakpoint > this.curWidth) {
|
|
248
|
+
this.mobile = !this.mobile;
|
|
249
|
+
this.renderer.addClass(this.el, 'mobile');
|
|
250
|
+
}
|
|
251
|
+
else if (this.mobile && this.$options.mobileBreakpoint < this.curWidth) {
|
|
252
|
+
this.mobile = !this.mobile;
|
|
253
|
+
this.renderer.removeClass(this.el, 'mobile');
|
|
254
|
+
}
|
|
255
|
+
/** @type {?} */
|
|
256
|
+
var rows = this.$options.minRows;
|
|
257
|
+
/** @type {?} */
|
|
258
|
+
var columns = this.$options.minCols;
|
|
259
|
+
/** @type {?} */
|
|
260
|
+
var widgetsIndex = this.grid.length - 1;
|
|
261
|
+
/** @type {?} */
|
|
262
|
+
var widget;
|
|
263
|
+
for (; widgetsIndex >= 0; widgetsIndex--) {
|
|
264
|
+
widget = this.grid[widgetsIndex];
|
|
265
|
+
if (!widget.notPlaced) {
|
|
266
|
+
rows = Math.max(rows, widget.$item.y + widget.$item.rows);
|
|
267
|
+
columns = Math.max(columns, widget.$item.x + widget.$item.cols);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (this.columns !== columns || this.rows !== rows) {
|
|
271
|
+
this.columns = columns;
|
|
272
|
+
this.rows = rows;
|
|
273
|
+
if (this.options.gridSizeChangedCallback) {
|
|
274
|
+
this.options.gridSizeChangedCallback(this);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* @return {?}
|
|
280
|
+
*/
|
|
281
|
+
GridsterComponent.prototype.calculateLayout = /**
|
|
282
|
+
* @return {?}
|
|
283
|
+
*/
|
|
284
|
+
function () {
|
|
285
|
+
if (this.compact) {
|
|
286
|
+
this.compact.checkCompact();
|
|
287
|
+
}
|
|
288
|
+
this.setGridDimensions();
|
|
289
|
+
if (this.$options.outerMargin) {
|
|
290
|
+
/** @type {?} */
|
|
291
|
+
var marginWidth = -this.$options.margin;
|
|
292
|
+
if (this.$options.outerMarginLeft !== null) {
|
|
293
|
+
marginWidth += this.$options.outerMarginLeft;
|
|
294
|
+
this.renderer.setStyle(this.el, 'padding-left', this.$options.outerMarginLeft + 'px');
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
marginWidth += this.$options.margin;
|
|
298
|
+
this.renderer.setStyle(this.el, 'padding-left', this.$options.margin + 'px');
|
|
299
|
+
}
|
|
300
|
+
if (this.$options.outerMarginRight !== null) {
|
|
301
|
+
marginWidth += this.$options.outerMarginRight;
|
|
302
|
+
this.renderer.setStyle(this.el, 'padding-right', this.$options.outerMarginRight + 'px');
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
marginWidth += this.$options.margin;
|
|
306
|
+
this.renderer.setStyle(this.el, 'padding-right', this.$options.margin + 'px');
|
|
307
|
+
}
|
|
308
|
+
this.curColWidth = (this.curWidth - marginWidth) / this.columns;
|
|
309
|
+
/** @type {?} */
|
|
310
|
+
var marginHeight = -this.$options.margin;
|
|
311
|
+
if (this.$options.outerMarginTop !== null) {
|
|
312
|
+
marginHeight += this.$options.outerMarginTop;
|
|
313
|
+
this.renderer.setStyle(this.el, 'padding-top', this.$options.outerMarginTop + 'px');
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
marginHeight += this.$options.margin;
|
|
317
|
+
this.renderer.setStyle(this.el, 'padding-top', this.$options.margin + 'px');
|
|
318
|
+
}
|
|
319
|
+
if (this.$options.outerMarginBottom !== null) {
|
|
320
|
+
marginHeight += this.$options.outerMarginBottom;
|
|
321
|
+
this.renderer.setStyle(this.el, 'padding-bottom', this.$options.outerMarginBottom + 'px');
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
marginHeight += this.$options.margin;
|
|
325
|
+
this.renderer.setStyle(this.el, 'padding-bottom', this.$options.margin + 'px');
|
|
326
|
+
}
|
|
327
|
+
this.curRowHeight = (this.curHeight - marginHeight) / this.rows;
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
this.curColWidth = (this.curWidth + this.$options.margin) / this.columns;
|
|
331
|
+
this.curRowHeight = (this.curHeight + this.$options.margin) / this.rows;
|
|
332
|
+
this.renderer.setStyle(this.el, 'padding-left', 0 + 'px');
|
|
333
|
+
this.renderer.setStyle(this.el, 'padding-right', 0 + 'px');
|
|
334
|
+
this.renderer.setStyle(this.el, 'padding-top', 0 + 'px');
|
|
335
|
+
this.renderer.setStyle(this.el, 'padding-bottom', 0 + 'px');
|
|
336
|
+
}
|
|
337
|
+
this.gridRenderer.updateGridster();
|
|
338
|
+
this.updateGrid();
|
|
339
|
+
if (this.$options.setGridSize) {
|
|
340
|
+
this.renderer.setStyle(this.el, 'width', (this.columns * this.curColWidth + this.$options.margin) + 'px');
|
|
341
|
+
this.renderer.setStyle(this.el, 'height', (this.rows * this.curRowHeight + this.$options.margin) + 'px');
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
this.renderer.setStyle(this.el, 'width', '');
|
|
345
|
+
this.renderer.setStyle(this.el, 'height', '');
|
|
346
|
+
}
|
|
347
|
+
/** @type {?} */
|
|
348
|
+
var widgetsIndex = this.grid.length - 1;
|
|
349
|
+
/** @type {?} */
|
|
350
|
+
var widget;
|
|
351
|
+
for (; widgetsIndex >= 0; widgetsIndex--) {
|
|
352
|
+
widget = this.grid[widgetsIndex];
|
|
353
|
+
widget.setSize();
|
|
354
|
+
widget.drag.toggle();
|
|
355
|
+
widget.resize.toggle();
|
|
356
|
+
}
|
|
357
|
+
setTimeout(this.resize.bind(this), 100);
|
|
358
|
+
};
|
|
359
|
+
/**
|
|
360
|
+
* @return {?}
|
|
361
|
+
*/
|
|
362
|
+
GridsterComponent.prototype.updateGrid = /**
|
|
363
|
+
* @return {?}
|
|
364
|
+
*/
|
|
365
|
+
function () {
|
|
366
|
+
if (this.$options.displayGrid === 'always' && !this.mobile) {
|
|
367
|
+
this.renderer.addClass(this.el, 'display-grid');
|
|
368
|
+
}
|
|
369
|
+
else if (this.$options.displayGrid === 'onDrag&Resize' && this.dragInProgress) {
|
|
370
|
+
this.renderer.addClass(this.el, 'display-grid');
|
|
371
|
+
}
|
|
372
|
+
else if (this.$options.displayGrid === 'none' || !this.dragInProgress || this.mobile) {
|
|
373
|
+
this.renderer.removeClass(this.el, 'display-grid');
|
|
374
|
+
}
|
|
375
|
+
this.setGridDimensions();
|
|
376
|
+
this.gridColumns.length = Math.max(this.columns, Math.floor(this.curWidth / this.curColWidth)) || 0;
|
|
377
|
+
this.gridRows.length = Math.max(this.rows, Math.floor(this.curHeight / this.curRowHeight)) || 0;
|
|
378
|
+
this.cdRef.markForCheck();
|
|
379
|
+
};
|
|
380
|
+
/**
|
|
381
|
+
* @param {?} itemComponent
|
|
382
|
+
* @return {?}
|
|
383
|
+
*/
|
|
384
|
+
GridsterComponent.prototype.addItem = /**
|
|
385
|
+
* @param {?} itemComponent
|
|
386
|
+
* @return {?}
|
|
387
|
+
*/
|
|
388
|
+
function (itemComponent) {
|
|
389
|
+
if (itemComponent.$item.cols === undefined) {
|
|
390
|
+
itemComponent.$item.cols = this.$options.defaultItemCols;
|
|
391
|
+
itemComponent.item.cols = itemComponent.$item.cols;
|
|
392
|
+
itemComponent.itemChanged();
|
|
393
|
+
}
|
|
394
|
+
if (itemComponent.$item.rows === undefined) {
|
|
395
|
+
itemComponent.$item.rows = this.$options.defaultItemRows;
|
|
396
|
+
itemComponent.item.rows = itemComponent.$item.rows;
|
|
397
|
+
itemComponent.itemChanged();
|
|
398
|
+
}
|
|
399
|
+
if (itemComponent.$item.x === -1 || itemComponent.$item.y === -1) {
|
|
400
|
+
this.autoPositionItem(itemComponent);
|
|
401
|
+
}
|
|
402
|
+
else if (this.checkCollision(itemComponent.$item)) {
|
|
403
|
+
if (!this.$options.disableWarnings) {
|
|
404
|
+
itemComponent.notPlaced = true;
|
|
405
|
+
console.warn('Can\'t be placed in the bounds of the dashboard, trying to auto position!/n' +
|
|
406
|
+
JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y']));
|
|
407
|
+
}
|
|
408
|
+
if (!this.$options.disableAutoPositionOnConflict) {
|
|
409
|
+
this.autoPositionItem(itemComponent);
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
itemComponent.notPlaced = true;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
this.grid.push(itemComponent);
|
|
416
|
+
this.calculateLayoutDebounce();
|
|
417
|
+
};
|
|
418
|
+
/**
|
|
419
|
+
* @param {?} itemComponent
|
|
420
|
+
* @return {?}
|
|
421
|
+
*/
|
|
422
|
+
GridsterComponent.prototype.removeItem = /**
|
|
423
|
+
* @param {?} itemComponent
|
|
424
|
+
* @return {?}
|
|
425
|
+
*/
|
|
426
|
+
function (itemComponent) {
|
|
427
|
+
this.grid.splice(this.grid.indexOf(itemComponent), 1);
|
|
428
|
+
this.calculateLayoutDebounce();
|
|
429
|
+
if (this.options.itemRemovedCallback) {
|
|
430
|
+
this.options.itemRemovedCallback(itemComponent.item, itemComponent);
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
/**
|
|
434
|
+
* @param {?} item
|
|
435
|
+
* @return {?}
|
|
436
|
+
*/
|
|
437
|
+
GridsterComponent.prototype.checkCollision = /**
|
|
438
|
+
* @param {?} item
|
|
439
|
+
* @return {?}
|
|
440
|
+
*/
|
|
441
|
+
function (item) {
|
|
442
|
+
/** @type {?} */
|
|
443
|
+
var collision = false;
|
|
444
|
+
if (this.options.itemValidateCallback) {
|
|
445
|
+
collision = !this.options.itemValidateCallback(item);
|
|
446
|
+
}
|
|
447
|
+
if (!collision && this.checkGridCollision(item)) {
|
|
448
|
+
collision = true;
|
|
449
|
+
}
|
|
450
|
+
if (!collision) {
|
|
451
|
+
/** @type {?} */
|
|
452
|
+
var c = this.findItemWithItem(item);
|
|
453
|
+
if (c) {
|
|
454
|
+
collision = c;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return collision;
|
|
458
|
+
};
|
|
459
|
+
/**
|
|
460
|
+
* @param {?} item
|
|
461
|
+
* @return {?}
|
|
462
|
+
*/
|
|
463
|
+
GridsterComponent.prototype.checkGridCollision = /**
|
|
464
|
+
* @param {?} item
|
|
465
|
+
* @return {?}
|
|
466
|
+
*/
|
|
467
|
+
function (item) {
|
|
468
|
+
/** @type {?} */
|
|
469
|
+
var noNegativePosition = item.y > -1 && item.x > -1;
|
|
470
|
+
/** @type {?} */
|
|
471
|
+
var maxGridCols = item.cols + item.x <= this.$options.maxCols;
|
|
472
|
+
/** @type {?} */
|
|
473
|
+
var maxGridRows = item.rows + item.y <= this.$options.maxRows;
|
|
474
|
+
/** @type {?} */
|
|
475
|
+
var maxItemCols = item.maxItemCols === undefined ? this.$options.maxItemCols : item.maxItemCols;
|
|
476
|
+
/** @type {?} */
|
|
477
|
+
var minItemCols = item.minItemCols === undefined ? this.$options.minItemCols : item.minItemCols;
|
|
478
|
+
/** @type {?} */
|
|
479
|
+
var maxItemRows = item.maxItemRows === undefined ? this.$options.maxItemRows : item.maxItemRows;
|
|
480
|
+
/** @type {?} */
|
|
481
|
+
var minItemRows = item.minItemRows === undefined ? this.$options.minItemRows : item.minItemRows;
|
|
482
|
+
/** @type {?} */
|
|
483
|
+
var inColsLimits = item.cols <= maxItemCols && item.cols >= minItemCols;
|
|
484
|
+
/** @type {?} */
|
|
485
|
+
var inRowsLimits = item.rows <= maxItemRows && item.rows >= minItemRows;
|
|
486
|
+
/** @type {?} */
|
|
487
|
+
var minAreaLimit = item.minItemArea === undefined ? this.$options.minItemArea : item.minItemArea;
|
|
488
|
+
/** @type {?} */
|
|
489
|
+
var maxAreaLimit = item.maxItemArea === undefined ? this.$options.maxItemArea : item.maxItemArea;
|
|
490
|
+
/** @type {?} */
|
|
491
|
+
var area = item.cols * item.rows;
|
|
492
|
+
/** @type {?} */
|
|
493
|
+
var inMinArea = minAreaLimit <= area;
|
|
494
|
+
/** @type {?} */
|
|
495
|
+
var inMaxArea = maxAreaLimit >= area;
|
|
496
|
+
return !(noNegativePosition && maxGridCols && maxGridRows && inColsLimits && inRowsLimits && inMinArea && inMaxArea);
|
|
497
|
+
};
|
|
498
|
+
/**
|
|
499
|
+
* @param {?} item
|
|
500
|
+
* @return {?}
|
|
501
|
+
*/
|
|
502
|
+
GridsterComponent.prototype.findItemWithItem = /**
|
|
503
|
+
* @param {?} item
|
|
504
|
+
* @return {?}
|
|
505
|
+
*/
|
|
506
|
+
function (item) {
|
|
507
|
+
/** @type {?} */
|
|
508
|
+
var widgetsIndex = this.grid.length - 1;
|
|
509
|
+
/** @type {?} */
|
|
510
|
+
var widget;
|
|
511
|
+
for (; widgetsIndex > -1; widgetsIndex--) {
|
|
512
|
+
widget = this.grid[widgetsIndex];
|
|
513
|
+
if (widget.$item !== item && GridsterComponent.checkCollisionTwoItems(widget.$item, item)) {
|
|
514
|
+
return widget;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
return false;
|
|
518
|
+
};
|
|
519
|
+
/**
|
|
520
|
+
* @param {?} item
|
|
521
|
+
* @return {?}
|
|
522
|
+
*/
|
|
523
|
+
GridsterComponent.prototype.findItemsWithItem = /**
|
|
524
|
+
* @param {?} item
|
|
525
|
+
* @return {?}
|
|
526
|
+
*/
|
|
527
|
+
function (item) {
|
|
528
|
+
/** @type {?} */
|
|
529
|
+
var a = [];
|
|
530
|
+
/** @type {?} */
|
|
531
|
+
var widgetsIndex = this.grid.length - 1;
|
|
532
|
+
/** @type {?} */
|
|
533
|
+
var widget;
|
|
534
|
+
for (; widgetsIndex > -1; widgetsIndex--) {
|
|
535
|
+
widget = this.grid[widgetsIndex];
|
|
536
|
+
if (widget.$item !== item && GridsterComponent.checkCollisionTwoItems(widget.$item, item)) {
|
|
537
|
+
a.push(widget);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
return a;
|
|
541
|
+
};
|
|
542
|
+
/**
|
|
543
|
+
* @param {?} itemComponent
|
|
544
|
+
* @return {?}
|
|
545
|
+
*/
|
|
546
|
+
GridsterComponent.prototype.autoPositionItem = /**
|
|
547
|
+
* @param {?} itemComponent
|
|
548
|
+
* @return {?}
|
|
549
|
+
*/
|
|
550
|
+
function (itemComponent) {
|
|
551
|
+
if (this.getNextPossiblePosition(itemComponent.$item)) {
|
|
552
|
+
itemComponent.notPlaced = false;
|
|
553
|
+
itemComponent.item.x = itemComponent.$item.x;
|
|
554
|
+
itemComponent.item.y = itemComponent.$item.y;
|
|
555
|
+
itemComponent.itemChanged();
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
itemComponent.notPlaced = true;
|
|
559
|
+
if (!this.$options.disableWarnings) {
|
|
560
|
+
console.warn('Can\'t be placed in the bounds of the dashboard!/n' +
|
|
561
|
+
JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y']));
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
/**
|
|
566
|
+
* @param {?} newItem
|
|
567
|
+
* @param {?=} startingFrom
|
|
568
|
+
* @return {?}
|
|
569
|
+
*/
|
|
570
|
+
GridsterComponent.prototype.getNextPossiblePosition = /**
|
|
571
|
+
* @param {?} newItem
|
|
572
|
+
* @param {?=} startingFrom
|
|
573
|
+
* @return {?}
|
|
574
|
+
*/
|
|
575
|
+
function (newItem, startingFrom) {
|
|
576
|
+
if (startingFrom === void 0) { startingFrom = {}; }
|
|
577
|
+
if (newItem.cols === -1) {
|
|
578
|
+
newItem.cols = this.$options.defaultItemCols;
|
|
579
|
+
}
|
|
580
|
+
if (newItem.rows === -1) {
|
|
581
|
+
newItem.rows = this.$options.defaultItemRows;
|
|
582
|
+
}
|
|
583
|
+
this.setGridDimensions();
|
|
584
|
+
/** @type {?} */
|
|
585
|
+
var rowsIndex = startingFrom.y || 0;
|
|
586
|
+
/** @type {?} */
|
|
587
|
+
var colsIndex;
|
|
588
|
+
for (; rowsIndex < this.rows; rowsIndex++) {
|
|
589
|
+
newItem.y = rowsIndex;
|
|
590
|
+
colsIndex = startingFrom.x || 0;
|
|
591
|
+
for (; colsIndex < this.columns; colsIndex++) {
|
|
592
|
+
newItem.x = colsIndex;
|
|
593
|
+
if (!this.checkCollision(newItem)) {
|
|
594
|
+
return true;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
/** @type {?} */
|
|
599
|
+
var canAddToRows = this.$options.maxRows >= this.rows + newItem.rows;
|
|
600
|
+
/** @type {?} */
|
|
601
|
+
var canAddToColumns = this.$options.maxCols >= this.columns + newItem.cols;
|
|
602
|
+
/** @type {?} */
|
|
603
|
+
var addToRows = this.rows <= this.columns && canAddToRows;
|
|
604
|
+
if (!addToRows && canAddToColumns) {
|
|
605
|
+
newItem.x = this.columns;
|
|
606
|
+
newItem.y = 0;
|
|
607
|
+
return true;
|
|
608
|
+
}
|
|
609
|
+
else if (canAddToRows) {
|
|
610
|
+
newItem.y = this.rows;
|
|
611
|
+
newItem.x = 0;
|
|
612
|
+
return true;
|
|
613
|
+
}
|
|
614
|
+
return false;
|
|
615
|
+
};
|
|
616
|
+
/**
|
|
617
|
+
* @param {?} item
|
|
618
|
+
* @return {?}
|
|
619
|
+
*/
|
|
620
|
+
GridsterComponent.prototype.getFirstPossiblePosition = /**
|
|
621
|
+
* @param {?} item
|
|
622
|
+
* @return {?}
|
|
623
|
+
*/
|
|
624
|
+
function (item) {
|
|
625
|
+
/** @type {?} */
|
|
626
|
+
var tmpItem = Object.assign({}, item);
|
|
627
|
+
this.getNextPossiblePosition(tmpItem);
|
|
628
|
+
return tmpItem;
|
|
629
|
+
};
|
|
630
|
+
/**
|
|
631
|
+
* @param {?} item
|
|
632
|
+
* @return {?}
|
|
633
|
+
*/
|
|
634
|
+
GridsterComponent.prototype.getLastPossiblePosition = /**
|
|
635
|
+
* @param {?} item
|
|
636
|
+
* @return {?}
|
|
637
|
+
*/
|
|
638
|
+
function (item) {
|
|
639
|
+
/** @type {?} */
|
|
640
|
+
var farthestItem = { y: 0, x: 0 };
|
|
641
|
+
farthestItem = this.grid.reduce((/**
|
|
642
|
+
* @param {?} prev
|
|
643
|
+
* @param {?} curr
|
|
644
|
+
* @return {?}
|
|
645
|
+
*/
|
|
646
|
+
function (prev, curr) {
|
|
647
|
+
/** @type {?} */
|
|
648
|
+
var currCoords = { y: curr.$item.y + curr.$item.rows - 1, x: curr.$item.x + curr.$item.cols - 1 };
|
|
649
|
+
if (GridsterUtils.compareItems(prev, currCoords) === 1) {
|
|
650
|
+
return currCoords;
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
653
|
+
return prev;
|
|
654
|
+
}
|
|
655
|
+
}), farthestItem);
|
|
656
|
+
/** @type {?} */
|
|
657
|
+
var tmpItem = Object.assign({}, item);
|
|
658
|
+
this.getNextPossiblePosition(tmpItem, farthestItem);
|
|
659
|
+
return tmpItem;
|
|
660
|
+
};
|
|
661
|
+
/**
|
|
662
|
+
* @param {?} x
|
|
663
|
+
* @param {?} roundingMethod
|
|
664
|
+
* @param {?=} noLimit
|
|
665
|
+
* @return {?}
|
|
666
|
+
*/
|
|
667
|
+
GridsterComponent.prototype.pixelsToPositionX = /**
|
|
668
|
+
* @param {?} x
|
|
669
|
+
* @param {?} roundingMethod
|
|
670
|
+
* @param {?=} noLimit
|
|
671
|
+
* @return {?}
|
|
672
|
+
*/
|
|
673
|
+
function (x, roundingMethod, noLimit) {
|
|
674
|
+
/** @type {?} */
|
|
675
|
+
var position = roundingMethod(x / this.curColWidth);
|
|
676
|
+
if (noLimit) {
|
|
677
|
+
return position;
|
|
678
|
+
}
|
|
679
|
+
else {
|
|
680
|
+
return Math.max(position, 0);
|
|
681
|
+
}
|
|
682
|
+
};
|
|
683
|
+
/**
|
|
684
|
+
* @param {?} y
|
|
685
|
+
* @param {?} roundingMethod
|
|
686
|
+
* @param {?=} noLimit
|
|
687
|
+
* @return {?}
|
|
688
|
+
*/
|
|
689
|
+
GridsterComponent.prototype.pixelsToPositionY = /**
|
|
690
|
+
* @param {?} y
|
|
691
|
+
* @param {?} roundingMethod
|
|
692
|
+
* @param {?=} noLimit
|
|
693
|
+
* @return {?}
|
|
694
|
+
*/
|
|
695
|
+
function (y, roundingMethod, noLimit) {
|
|
696
|
+
/** @type {?} */
|
|
697
|
+
var position = roundingMethod(y / this.curRowHeight);
|
|
698
|
+
if (noLimit) {
|
|
699
|
+
return position;
|
|
700
|
+
}
|
|
701
|
+
else {
|
|
702
|
+
return Math.max(position, 0);
|
|
703
|
+
}
|
|
704
|
+
};
|
|
705
|
+
/**
|
|
706
|
+
* @param {?} x
|
|
707
|
+
* @return {?}
|
|
708
|
+
*/
|
|
709
|
+
GridsterComponent.prototype.positionXToPixels = /**
|
|
710
|
+
* @param {?} x
|
|
711
|
+
* @return {?}
|
|
712
|
+
*/
|
|
713
|
+
function (x) {
|
|
714
|
+
return x * this.curColWidth;
|
|
715
|
+
};
|
|
716
|
+
/**
|
|
717
|
+
* @param {?} y
|
|
718
|
+
* @return {?}
|
|
719
|
+
*/
|
|
720
|
+
GridsterComponent.prototype.positionYToPixels = /**
|
|
721
|
+
* @param {?} y
|
|
722
|
+
* @return {?}
|
|
723
|
+
*/
|
|
724
|
+
function (y) {
|
|
725
|
+
return y * this.curRowHeight;
|
|
726
|
+
};
|
|
727
|
+
GridsterComponent.decorators = [
|
|
728
|
+
{ type: Component, args: [{
|
|
729
|
+
selector: 'gridster',
|
|
730
|
+
template: "<div class=\"gridster-column\" *ngFor=\"let column of gridColumns; let i = index;\"\r\n [ngStyle]=\"gridRenderer.getGridColumnStyle(i)\"></div>\r\n<div class=\"gridster-row\" *ngFor=\"let row of gridRows; let i = index;\"\r\n [ngStyle]=\"gridRenderer.getGridRowStyle(i)\"></div>\r\n<ng-content></ng-content>\r\n<gridster-preview class=\"gridster-preview\"></gridster-preview>\r\n",
|
|
731
|
+
encapsulation: ViewEncapsulation.None,
|
|
732
|
+
styles: ["gridster{clear:both;position:relative;box-sizing:border-box;background:grey;width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block;overflow:auto}gridster.fit{overflow-x:hidden;overflow-y:hidden}gridster.scrollVertical{overflow-x:hidden;overflow-y:auto}gridster.scrollHorizontal{overflow-x:auto;overflow-y:hidden}gridster.fixed{overflow:auto}gridster.mobile{overflow-x:hidden;overflow-y:auto}gridster.mobile gridster-item{position:relative}gridster .gridster-column,gridster .gridster-row{position:absolute;display:none;transition:.3s;box-sizing:border-box}gridster.display-grid .gridster-column,gridster.display-grid .gridster-row{display:block}gridster .gridster-column{border-left:1px solid #ccc;border-right:1px solid #ccc}gridster .gridster-row{border-top:1px solid #ccc;border-bottom:1px solid #ccc}"]
|
|
733
|
+
}] }
|
|
734
|
+
];
|
|
735
|
+
/** @nocollapse */
|
|
736
|
+
GridsterComponent.ctorParameters = function () { return [
|
|
737
|
+
{ type: ElementRef },
|
|
738
|
+
{ type: Renderer2 },
|
|
739
|
+
{ type: ChangeDetectorRef },
|
|
740
|
+
{ type: NgZone }
|
|
741
|
+
]; };
|
|
742
|
+
GridsterComponent.propDecorators = {
|
|
743
|
+
options: [{ type: Input }]
|
|
744
|
+
};
|
|
745
|
+
return GridsterComponent;
|
|
746
|
+
}());
|
|
747
|
+
export { GridsterComponent };
|
|
748
|
+
if (false) {
|
|
749
|
+
/** @type {?} */
|
|
750
|
+
GridsterComponent.prototype.options;
|
|
751
|
+
/** @type {?} */
|
|
752
|
+
GridsterComponent.prototype.calculateLayoutDebounce;
|
|
753
|
+
/** @type {?} */
|
|
754
|
+
GridsterComponent.prototype.movingItem;
|
|
755
|
+
/** @type {?} */
|
|
756
|
+
GridsterComponent.prototype.previewStyle;
|
|
757
|
+
/** @type {?} */
|
|
758
|
+
GridsterComponent.prototype.el;
|
|
759
|
+
/** @type {?} */
|
|
760
|
+
GridsterComponent.prototype.$options;
|
|
761
|
+
/** @type {?} */
|
|
762
|
+
GridsterComponent.prototype.mobile;
|
|
763
|
+
/** @type {?} */
|
|
764
|
+
GridsterComponent.prototype.curWidth;
|
|
765
|
+
/** @type {?} */
|
|
766
|
+
GridsterComponent.prototype.curHeight;
|
|
767
|
+
/** @type {?} */
|
|
768
|
+
GridsterComponent.prototype.grid;
|
|
769
|
+
/** @type {?} */
|
|
770
|
+
GridsterComponent.prototype.columns;
|
|
771
|
+
/** @type {?} */
|
|
772
|
+
GridsterComponent.prototype.rows;
|
|
773
|
+
/** @type {?} */
|
|
774
|
+
GridsterComponent.prototype.curColWidth;
|
|
775
|
+
/** @type {?} */
|
|
776
|
+
GridsterComponent.prototype.curRowHeight;
|
|
777
|
+
/** @type {?} */
|
|
778
|
+
GridsterComponent.prototype.gridColumns;
|
|
779
|
+
/** @type {?} */
|
|
780
|
+
GridsterComponent.prototype.gridRows;
|
|
781
|
+
/** @type {?} */
|
|
782
|
+
GridsterComponent.prototype.windowResize;
|
|
783
|
+
/** @type {?} */
|
|
784
|
+
GridsterComponent.prototype.dragInProgress;
|
|
785
|
+
/** @type {?} */
|
|
786
|
+
GridsterComponent.prototype.emptyCell;
|
|
787
|
+
/** @type {?} */
|
|
788
|
+
GridsterComponent.prototype.compact;
|
|
789
|
+
/** @type {?} */
|
|
790
|
+
GridsterComponent.prototype.gridRenderer;
|
|
791
|
+
/** @type {?} */
|
|
792
|
+
GridsterComponent.prototype.renderer;
|
|
793
|
+
/** @type {?} */
|
|
794
|
+
GridsterComponent.prototype.cdRef;
|
|
795
|
+
/** @type {?} */
|
|
796
|
+
GridsterComponent.prototype.zone;
|
|
797
|
+
}
|
|
798
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNjaG5laWRlcmVzcy9kYXNoYm9hcmRmcmFtZXdvcmsvIiwic291cmNlcyI6WyJncmlkc3Rlci9saWIvZ3JpZHN0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFJTixTQUFTLEVBRVQsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHNUQ7SUE2QkUsMkJBQVksRUFBYyxFQUFTLFFBQW1CLEVBQVMsS0FBd0IsRUFBUyxJQUFZO1FBQXpFLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUFTLFNBQUksR0FBSixJQUFJLENBQVE7UUFSNUcsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQVFaLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFB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QUNkLHlDQUFrQzs7SUFDbEMsMkNBQXdCOztJQUN4QixzQ0FBNkI7O0lBQzdCLG9DQUF5Qjs7SUFDekIseUNBQStCOztJQUVILHFDQUEwQjs7SUFBRSxrQ0FBK0I7O0lBQUUsaUNBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7R3JpZHN0ZXJDb25maWdTZXJ2aWNlfSBmcm9tICcuL2dyaWRzdGVyQ29uZmlnLmNvbnN0YW50JztcclxuaW1wb3J0IHtHcmlkc3RlckNvbmZpZ30gZnJvbSAnLi9ncmlkc3RlckNvbmZpZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0dyaWRzdGVyVXRpbHN9IGZyb20gJy4vZ3JpZHN0ZXJVdGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtHcmlkc3RlckVtcHR5Q2VsbH0gZnJvbSAnLi9ncmlkc3RlckVtcHR5Q2VsbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtHcmlkc3RlckNvbXBhY3R9IGZyb20gJy4vZ3JpZHN0ZXJDb21wYWN0LnNlcnZpY2UnO1xyXG5pbXBvcnQge0dyaWRzdGVyQ29uZmlnU30gZnJvbSAnLi9ncmlkc3RlckNvbmZpZ1MuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZX0gZnJvbSAnLi9ncmlkc3Rlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0dyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZX0gZnJvbSAnLi9ncmlkc3Rlckl0ZW1Db21wb25lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtHcmlkc3RlclJlbmRlcmVyfSBmcm9tICcuL2dyaWRzdGVyUmVuZGVyZXIuc2VydmljZSc7XHJcbmltcG9ydCB7R3JpZHN0ZXJJdGVtfSBmcm9tICcuL2dyaWRzdGVySXRlbS5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdncmlkc3RlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWRzdGVyLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dyaWRzdGVyLmNzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRzdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgR3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2Uge1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IEdyaWRzdGVyQ29uZmlnO1xyXG4gIGNhbGN1bGF0ZUxheW91dERlYm91bmNlOiAoKSA9PiB2b2lkO1xyXG4gIG1vdmluZ0l0ZW06IEdyaWRzdGVySXRlbSB8IG51bGw7XHJcbiAgcHJldmlld1N0eWxlOiAoKSA9PiB2b2lkO1xyXG4gIGVsOiBhbnk7XHJcbiAgJG9wdGlvbnM6IEdyaWRzdGVyQ29uZmlnUztcclxuICBtb2JpbGU6IGJvb2xlYW47XHJcbiAgY3VyV2lkdGg6IG51bWJlcjtcclxuICBjdXJIZWlnaHQ6IG51bWJlcjtcclxuICBncmlkOiBBcnJheTxHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U+O1xyXG4gIGNvbHVtbnM6IG51bWJlcjtcclxuICByb3dzOiBudW1iZXI7XHJcbiAgY3VyQ29sV2lkdGg6IG51bWJlcjtcclxuICBjdXJSb3dIZWlnaHQ6IG51bWJlcjtcclxuICBncmlkQ29sdW1ucyA9IFtdO1xyXG4gIGdyaWRSb3dzID0gW107XHJcbiAgd2luZG93UmVzaXplOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xyXG4gIGRyYWdJblByb2dyZXNzOiBib29sZWFuO1xyXG4gIGVtcHR5Q2VsbDogR3JpZHN0ZXJFbXB0eUNlbGw7XHJcbiAgY29tcGFjdDogR3JpZHN0ZXJDb21wYWN0O1xyXG4gIGdyaWRSZW5kZXJlcjogR3JpZHN0ZXJSZW5kZXJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoZWw6IEVsZW1lbnRSZWYsIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLCBwdWJsaWMgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgem9uZTogTmdab25lKSB7XHJcbiAgICB0aGlzLmVsID0gZWwubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuJG9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEdyaWRzdGVyQ29uZmlnU2VydmljZSkpO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVMYXlvdXREZWJvdW5jZSA9IEdyaWRzdGVyVXRpbHMuZGVib3VuY2UodGhpcy5jYWxjdWxhdGVMYXlvdXQuYmluZCh0aGlzKSwgMCk7XHJcbiAgICB0aGlzLm1vYmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXJXaWR0aCA9IDA7XHJcbiAgICB0aGlzLmN1ckhlaWdodCA9IDA7XHJcbiAgICB0aGlzLmdyaWQgPSBbXTtcclxuICAgIHRoaXMuY3VyQ29sV2lkdGggPSAwO1xyXG4gICAgdGhpcy5jdXJSb3dIZWlnaHQgPSAwO1xyXG4gICAgdGhpcy5kcmFnSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5lbXB0eUNlbGwgPSBuZXcgR3JpZHN0ZXJFbXB0eUNlbGwodGhpcyk7XHJcbiAgICB0aGlzLmNvbXBhY3QgPSBuZXcgR3JpZHN0ZXJDb21wYWN0KHRoaXMpO1xyXG4gICAgdGhpcy5ncmlkUmVuZGVyZXIgPSBuZXcgR3JpZHN0ZXJSZW5kZXJlcih0aGlzKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjaGVja0NvbGxpc2lvblR3b0l0ZW1zKGl0ZW06IEdyaWRzdGVySXRlbSwgaXRlbTI6IEdyaWRzdGVySXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGl0ZW0ueCA8IGl0ZW0yLnggKyBpdGVtMi5jb2xzXHJcbiAgICAgICYmIGl0ZW0ueCArIGl0ZW0uY29scyA+IGl0ZW0yLnhcclxuICAgICAgJiYgaXRlbS55IDwgaXRlbTIueSArIGl0ZW0yLnJvd3NcclxuICAgICAgJiYgaXRlbS55ICsgaXRlbS5yb3dzID4gaXRlbTIueTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyAgIFxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbml0Q2FsbGJhY2spIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmluaXRDYWxsYmFjayh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZXRPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcGkgPSB7XHJcbiAgICAgICAgb3B0aW9uc0NoYW5nZWQ6IHRoaXMub3B0aW9uc0NoYW5nZWQuYmluZCh0aGlzKSxcclxuICAgICAgICByZXNpemU6IHRoaXMub25SZXNpemUuYmluZCh0aGlzKSxcclxuICAgICAgICBnZXROZXh0UG9zc2libGVQb3NpdGlvbjogdGhpcy5nZXROZXh0UG9zc2libGVQb3NpdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAgIGdldEZpcnN0UG9zc2libGVQb3NpdGlvbjogdGhpcy5nZXRGaXJzdFBvc3NpYmxlUG9zaXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgICBnZXRMYXN0UG9zc2libGVQb3NpdGlvbjogdGhpcy5nZXRMYXN0UG9zc2libGVQb3NpdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAgIGdldEN1cnJlbnRSb3dIZWlnaHQ6dGhpcy5nZXRDdXJyZW50Um93SGVpZ2h0LmJpbmQodGhpcylcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy4kb3B0aW9ucy5taW5Db2xzO1xyXG4gICAgICB0aGlzLnJvd3MgPSB0aGlzLiRvcHRpb25zLm1pblJvd3M7XHJcbiAgICAgIHRoaXMuc2V0R3JpZFNpemUoKTtcclxuICAgICAgdGhpcy5jYWxjdWxhdGVMYXlvdXQoKTtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICBnZXRDdXJyZW50Um93SGVpZ2h0KCk6bnVtYmVye1xyXG4gICAgcmV0dXJuIHRoaXMuY3VyUm93SGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgcmVzaXplKCk6IHZvaWQgeyAgICAgXHJcbiAgICBsZXQgaGVpZ2h0O1xyXG4gICAgbGV0IHdpZHRoO1xyXG4gICAgaWYgKHRoaXMuJG9wdGlvbnMuZ3JpZFR5cGUgPT09ICdmaXQnICYmICF0aGlzLm1vYmlsZSkge1xyXG4gICAgICB3aWR0aCA9IHRoaXMuZWwub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGhlaWdodCA9IHRoaXMuZWwub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2lkdGggPSB0aGlzLmVsLmNsaWVudFdpZHRoO1xyXG4gICAgICBoZWlnaHQgPSB0aGlzLmVsLmNsaWVudEhlaWdodDtcclxuICAgIH1cclxuICAgIGlmICgod2lkdGggIT09IHRoaXMuY3VyV2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLmN1ckhlaWdodCkgJiYgdGhpcy5jaGVja0lmVG9SZXNpemUoKSkge1xyXG4gICAgICB0aGlzLm9uUmVzaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy4kb3B0aW9ucyA9IEdyaWRzdGVyVXRpbHMubWVyZ2UodGhpcy4kb3B0aW9ucywgdGhpcy5vcHRpb25zLCB0aGlzLiRvcHRpb25zKTtcclxuICAgIGlmICghdGhpcy4kb3B0aW9ucy5kaXNhYmxlV2luZG93UmVzaXplICYmICF0aGlzLndpbmRvd1Jlc2l6ZSkge1xyXG4gICAgICB0aGlzLndpbmRvd1Jlc2l6ZSA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgdGhpcy5vblJlc2l6ZS5iaW5kKHRoaXMpKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy4kb3B0aW9ucy5kaXNhYmxlV2luZG93UmVzaXplICYmIHRoaXMud2luZG93UmVzaXplKSB7XHJcbiAgICAgIHRoaXMud2luZG93UmVzaXplKCk7XHJcbiAgICAgIHRoaXMud2luZG93UmVzaXplID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuZW1wdHlDZWxsLnVwZGF0ZU9wdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIG9wdGlvbnNDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRPcHRpb25zKCk7XHJcbiAgICBsZXQgd2lkZ2V0c0luZGV4OiBudW1iZXIgPSB0aGlzLmdyaWQubGVuZ3RoIC0gMSwgd2lkZ2V0OiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XHJcbiAgICBmb3IgKDsgd2lkZ2V0c0luZGV4ID49IDA7IHdpZGdldHNJbmRleC0tKSB7XHJcbiAgICAgIHdpZGdldCA9IHRoaXMuZ3JpZFt3aWRnZXRzSW5kZXhdO1xyXG4gICAgICB3aWRnZXQudXBkYXRlT3B0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYWxjdWxhdGVMYXlvdXQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2luZG93UmVzaXplKSB7XHJcbiAgICAgIHRoaXMud2luZG93UmVzaXplKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlc3Ryb3lDYWxsYmFjaykge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuZGVzdHJveUNhbGxiYWNrKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmFwaS5yZXNpemUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcGkub3B0aW9uc0NoYW5nZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcGkuZ2V0TmV4dFBvc3NpYmxlUG9zaXRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcGkgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVtcHR5Q2VsbC5kZXN0cm95KCk7XHJcbiAgICBkZWxldGUgdGhpcy5lbXB0eUNlbGw7XHJcbiAgICB0aGlzLmNvbXBhY3QuZGVzdHJveSgpO1xyXG4gICAgZGVsZXRlIHRoaXMuY29tcGFjdDtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRHcmlkU2l6ZSgpO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVMYXlvdXQoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZUb1Jlc2l6ZSgpOiBib29sZWFuIHsgICBcclxuICAgIGNvbnN0IGNsaWVudFdpZHRoID0gdGhpcy5lbC5jbGllbnRXaWR0aDtcclxuICAgIGNvbnN0IG9mZnNldFdpZHRoID0gdGhpcy5lbC5vZmZzZXRXaWR0aDtcclxuICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gdGhpcy5lbC5zY3JvbGxXaWR0aDtcclxuICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IHRoaXMuZWwuY2xpZW50SGVpZ2h0O1xyXG4gICAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5vZmZzZXRIZWlnaHQ7XHJcbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0aGlzLmVsLnNjcm9sbEhlaWdodDtcclxuICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsUHJlc2VudCA9IGNsaWVudFdpZHRoIDwgb2Zmc2V0V2lkdGggJiYgc2Nyb2xsSGVpZ2h0ID4gb2Zmc2V0SGVpZ2h0XHJcbiAgICAgICYmIHNjcm9sbEhlaWdodCAtIG9mZnNldEhlaWdodCA8IG9mZnNldFdpZHRoIC0gY2xpZW50V2lkdGg7XHJcbiAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsUHJlc2VudCA9IGNsaWVudEhlaWdodCA8IG9mZnNldEhlaWdodFxyXG4gICAgICAmJiBzY3JvbGxXaWR0aCA+IG9mZnNldFdpZHRoICYmIHNjcm9sbFdpZHRoIC0gb2Zmc2V0V2lkdGggPCBvZmZzZXRIZWlnaHQgLSBjbGllbnRIZWlnaHQ7XHJcbiAgICBpZiAodmVydGljYWxTY3JvbGxQcmVzZW50KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiAhaG9yaXpvbnRhbFNjcm9sbFByZXNlbnQ7XHJcbiAgfVxyXG5cclxuICBzZXRHcmlkU2l6ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5lbDtcclxuICAgIGxldCB3aWR0aCA9IGVsLmNsaWVudFdpZHRoO1xyXG4gICAgbGV0IGhlaWdodCA9IGVsLmNsaWVudEhlaWdodDtcclxuICAgIGlmICh0aGlzLiRvcHRpb25zLnNldEdyaWRTaXplIHx8IHRoaXMuJG9wdGlvbnMuZ3JpZFR5cGUgPT09ICdmaXQnICYmICF0aGlzLm1vYmlsZSkge1xyXG4gICAgICB3aWR0aCA9IGVsLm9mZnNldFdpZHRoO1xyXG4gICAgICBoZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoO1xyXG4gICAgICBoZWlnaHQgPSBlbC5jbGllbnRIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cldpZHRoID0gd2lkdGg7ICAgIFxyXG4gICAgdGhpcy5jdXJIZWlnaHQgPSBoZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBzZXRHcmlkRGltZW5zaW9ucygpOiB2b2lkIHsgICBcclxuICAgIHRoaXMuc2V0R3JpZFNpemUoKTtcclxuICAgIGlmICghdGhpcy5tb2JpbGUgJiYgdGhpcy4kb3B0aW9ucy5tb2JpbGVCcmVha3BvaW50ID4gdGhpcy5jdXJXaWR0aCkge1xyXG4gICAgICB0aGlzLm1vYmlsZSA9ICF0aGlzLm1vYmlsZTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLCAnbW9iaWxlJyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9iaWxlICYmIHRoaXMuJG9wdGlvbnMubW9iaWxlQnJlYWtwb2ludCA8IHRoaXMuY3VyV2lkdGgpIHtcclxuICAgICAgdGhpcy5tb2JpbGUgPSAhdGhpcy5tb2JpbGU7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbCwgJ21vYmlsZScpO1xyXG4gICAgfVxyXG4gICAgbGV0IHJvd3MgPSB0aGlzLiRvcHRpb25zLm1pblJvd3MsIGNvbHVtbnMgPSB0aGlzLiRvcHRpb25zLm1pbkNvbHM7XHJcblxyXG4gICAgbGV0IHdpZGdldHNJbmRleCA9IHRoaXMuZ3JpZC5sZW5ndGggLSAxLCB3aWRnZXQ7XHJcbiAgICBmb3IgKDsgd2lkZ2V0c0luZGV4ID49IDA7IHdpZGdldHNJbmRleC0tKSB7XHJcbiAgICAgIHdpZGdldCA9IHRoaXMuZ3JpZFt3aWRnZXRzSW5kZXhdO1xyXG4gICAgICBpZiAoIXdpZGdldC5ub3RQbGFjZWQpIHtcclxuICAgICAgICByb3dzID0gTWF0aC5tYXgocm93cywgd2lkZ2V0LiRpdGVtLnkgKyB3aWRnZXQuJGl0ZW0ucm93cyk7XHJcbiAgICAgICAgY29sdW1ucyA9IE1hdGgubWF4KGNvbHVtbnMsIHdpZGdldC4kaXRlbS54ICsgd2lkZ2V0LiRpdGVtLmNvbHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29sdW1ucyAhPT0gY29sdW1ucyB8fCB0aGlzLnJvd3MgIT09IHJvd3MpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgICAgdGhpcy5yb3dzID0gcm93cztcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ncmlkU2l6ZUNoYW5nZWRDYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5ncmlkU2l6ZUNoYW5nZWRDYWxsYmFjayh0aGlzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlTGF5b3V0KCk6IHZvaWQgeyAgIFxyXG4gICAgaWYgKHRoaXMuY29tcGFjdCkge1xyXG4gICAgICB0aGlzLmNvbXBhY3QuY2hlY2tDb21wYWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRHcmlkRGltZW5zaW9ucygpO1xyXG4gICAgaWYgKHRoaXMuJG9wdGlvbnMub3V0ZXJNYXJnaW4pIHtcclxuICAgICAgbGV0IG1hcmdpbldpZHRoID0gLXRoaXMuJG9wdGlvbnMubWFyZ2luO1xyXG4gICAgICBpZiAodGhpcy4kb3B0aW9ucy5vdXRlck1hcmdpbkxlZnQgIT09IG51bGwpIHtcclxuICAgICAgICBtYXJnaW5XaWR0aCArPSB0aGlzLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdDtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwsICdwYWRkaW5nLWxlZnQnLCB0aGlzLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdCArICdweCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1hcmdpbldpZHRoICs9IHRoaXMuJG9wdGlvbnMubWFyZ2luO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbCwgJ3BhZGRpbmctbGVmdCcsIHRoaXMuJG9wdGlvbnMubWFyZ2luICsgJ3B4Jyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMub3V0ZXJNYXJnaW5SaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgIG1hcmdpbldpZHRoICs9IHRoaXMuJG9wdGlvbnMub3V0ZXJNYXJnaW5SaWdodDtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwsICdwYWRkaW5nLXJpZ2h0JywgdGhpcy4kb3B0aW9ucy5vdXRlck1hcmdpblJpZ2h0ICsgJ3B4Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWFyZ2luV2lkdGggKz0gdGhpcy4kb3B0aW9ucy5tYXJnaW47XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLCAncGFkZGluZy1yaWdodCcsIHRoaXMuJG9wdGlvbnMubWFyZ2luICsgJ3B4Jyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jdXJDb2xXaWR0aCA9ICh0aGlzLmN1cldpZHRoIC0gbWFyZ2luV2lkdGgpIC8gdGhpcy5jb2x1bW5zO1xyXG4gICAgICBsZXQgbWFyZ2luSGVpZ2h0ID0gLXRoaXMuJG9wdGlvbnMubWFyZ2luO1xyXG4gICAgICBpZiAodGhpcy4kb3B0aW9ucy5vdXRlck1hcmdpblRvcCAhPT0gbnVsbCkge1xyXG4gICAgICAgIG1hcmdpbkhlaWdodCArPSB0aGlzLiRvcHRpb25zLm91dGVyTWFyZ2luVG9wO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbCwgJ3BhZGRpbmctdG9wJywgdGhpcy4kb3B0aW9ucy5vdXRlck1hcmdpblRvcCArICdweCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1hcmdpbkhlaWdodCArPSB0aGlzLiRvcHRpb25zLm1hcmdpbjtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwsICdwYWRkaW5nLXRvcCcsIHRoaXMuJG9wdGlvbnMubWFyZ2luICsgJ3B4Jyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b20gIT09IG51bGwpIHtcclxuICAgICAgICBtYXJnaW5IZWlnaHQgKz0gdGhpcy4kb3B0aW9ucy5vdXRlck1hcmdpbkJvdHRvbTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwsICdwYWRkaW5nLWJvdHRvbScsIHRoaXMuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b20gKyAncHgnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXJnaW5IZWlnaHQgKz0gdGhpcy4kb3B0aW9ucy5tYXJnaW47XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLCAncGFkZGluZy1ib3R0b20nLCB0aGlzLiRvcHRpb25zLm1hcmdpbiArICdweCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VyUm93SGVpZ2h0ID0gKHRoaXMuY3VySGVpZ2h0IC0gbWFyZ2luSGVpZ2h0KSAvIHRoaXMucm93cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VyQ29sV2lkdGggPSAodGhpcy5jdXJXaWR0aCArIHRoaXMuJG9wdGlvbnMubWFyZ2luKSAvIHRoaXMuY29sdW1ucztcclxuICAgICAgdGhpcy5jdXJSb3dIZWlnaHQgPSAodGhpcy5jdXJIZWlnaHQgKyB0aGlzLiRvcHRpb25zLm1hcmdpbikgLyB0aGlzLnJvd3M7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbCwgJ3BhZGRpbmctbGVmdCcsIDAgKyAncHgnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLCAncGFkZGluZy1yaWdodCcsIDAgKyAncHgnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLCAncGFkZGluZy10b3AnLCAwICsgJ3B4Jyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbCwgJ3BhZGRpbmctYm90dG9tJywgMCArICdweCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncmlkUmVuZGVyZXIudXBkYXRlR3JpZHN0ZXIoKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy4kb3B0aW9ucy5zZXRHcmlkU2l6ZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwsICd3aWR0aCcsICh0aGlzLmNvbHVtbnMgKiB0aGlzLmN1ckNvbFdpZHRoICsgdGhpcy4kb3B0aW9ucy5tYXJnaW4pICsgJ3B4Jyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbCwgJ2hlaWdodCcsICh0aGlzLnJvd3MgKiB0aGlzLmN1clJvd0hlaWdodCArIHRoaXMuJG9wdGlvbnMubWFyZ2luKSArICdweCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLCAnd2lkdGgnLCAnJyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbCwgJ2hlaWdodCcsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgd2lkZ2V0c0luZGV4OiBudW1iZXIgPSB0aGlzLmdyaWQubGVuZ3RoIC0gMSwgd2lkZ2V0OiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XHJcbiAgICBmb3IgKDsgd2lkZ2V0c0luZGV4ID49IDA7IHdpZGdldHNJbmRleC0tKSB7XHJcbiAgICAgIHdpZGdldCA9IHRoaXMuZ3JpZFt3aWRnZXRzSW5kZXhdO1xyXG4gICAgICB3aWRnZXQuc2V0U2l6ZSgpO1xyXG4gICAgICB3aWRnZXQuZHJhZy50b2dnbGUoKTtcclxuICAgICAgd2lkZ2V0LnJlc2l6ZS50b2dnbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KHRoaXMucmVzaXplLmJpbmQodGhpcyksIDEwMCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVHcmlkKCk6IHZvaWQgeyAgXHJcbiAgICBpZiAodGhpcy4kb3B0aW9ucy5kaXNwbGF5R3JpZCA9PT0gJ2Fsd2F5cycgJiYgIXRoaXMubW9iaWxlKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbCwgJ2Rpc3BsYXktZ3JpZCcpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLiRvcHRpb25zLmRpc3BsYXlHcmlkID09PSAnb25EcmFnJlJlc2l6ZScgJiYgdGhpcy5kcmFnSW5Qcm9ncmVzcykge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwsICdkaXNwbGF5LWdyaWQnKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy4kb3B0aW9ucy5kaXNwbGF5R3JpZCA9PT0gJ25vbmUnIHx8ICF0aGlzLmRyYWdJblByb2dyZXNzIHx8IHRoaXMubW9iaWxlKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbCwgJ2Rpc3BsYXktZ3JpZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRHcmlkRGltZW5zaW9ucygpO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1ucy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmNvbHVtbnMsIE1hdGguZmxvb3IodGhpcy5jdXJXaWR0aCAvIHRoaXMuY3VyQ29sV2lkdGgpKSB8fCAwO1xyXG4gICAgdGhpcy5ncmlkUm93cy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLnJvd3MsIE1hdGguZmxvb3IodGhpcy5jdXJIZWlnaHQgLyB0aGlzLmN1clJvd0hlaWdodCkpIHx8IDA7XHJcbiAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbShpdGVtQ29tcG9uZW50OiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UpOiB2b2lkIHsgICBcclxuICAgIGlmIChpdGVtQ29tcG9uZW50LiRpdGVtLmNvbHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpdGVtQ29tcG9uZW50LiRpdGVtLmNvbHMgPSB0aGlzLiRvcHRpb25zLmRlZmF1bHRJdGVtQ29scztcclxuICAgICAgaXRlbUNvbXBvbmVudC5pdGVtLmNvbHMgPSBpdGVtQ29tcG9uZW50LiRpdGVtLmNvbHM7XHJcbiAgICAgIGl0ZW1Db21wb25lbnQuaXRlbUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtQ29tcG9uZW50LiRpdGVtLnJvd3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpdGVtQ29tcG9uZW50LiRpdGVtLnJvd3MgPSB0aGlzLiRvcHRpb25zLmRlZmF1bHRJdGVtUm93cztcclxuICAgICAgaXRlbUNvbXBvbmVudC5pdGVtLnJvd3MgPSBpdGVtQ29tcG9uZW50LiRpdGVtLnJvd3M7XHJcbiAgICAgIGl0ZW1Db21wb25lbnQuaXRlbUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtQ29tcG9uZW50LiRpdGVtLnggPT09IC0xIHx8IGl0ZW1Db21wb25lbnQuJGl0ZW0ueSA9PT0gLTEpIHtcclxuICAgICAgdGhpcy5hdXRvUG9zaXRpb25JdGVtKGl0ZW1Db21wb25lbnQpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrQ29sbGlzaW9uKGl0ZW1Db21wb25lbnQuJGl0ZW0pKSB7XHJcbiAgICAgIGlmICghdGhpcy4kb3B0aW9ucy5kaXNhYmxlV2FybmluZ3MpIHtcclxuICAgICAgICBpdGVtQ29tcG9uZW50Lm5vdFBsYWNlZCA9IHRydWU7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGJlIHBsYWNlZCBpbiB0aGUgYm91bmRzIG9mIHRoZSBkYXNoYm9hcmQsIHRyeWluZyB0byBhdXRvIHBvc2l0aW9uIS9uJyArXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShpdGVtQ29tcG9uZW50Lml0ZW0sIFsnY29scycsICdyb3dzJywgJ3gnLCAneSddKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLiRvcHRpb25zLmRpc2FibGVBdXRvUG9zaXRpb25PbkNvbmZsaWN0KSB7XHJcbiAgICAgICAgdGhpcy5hdXRvUG9zaXRpb25JdGVtKGl0ZW1Db21wb25lbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGl0ZW1Db21wb25lbnQubm90UGxhY2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5ncmlkLnB1c2goaXRlbUNvbXBvbmVudCk7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZUxheW91dERlYm91bmNlKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGl0ZW1Db21wb25lbnQ6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkLnNwbGljZSh0aGlzLmdyaWQuaW5kZXhPZihpdGVtQ29tcG9uZW50KSwgMSk7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZUxheW91dERlYm91bmNlKCk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLml0ZW1SZW1vdmVkQ2FsbGJhY2spIHtcclxuICAgICAgdGhpcy5vcHRpb25zLml0ZW1SZW1vdmVkQ2FsbGJhY2soaXRlbUNvbXBvbmVudC5pdGVtLCBpdGVtQ29tcG9uZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrQ29sbGlzaW9uKGl0ZW06IEdyaWRzdGVySXRlbSk6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSB8IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvbGxpc2lvbjogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlIHwgYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pdGVtVmFsaWRhdGVDYWxsYmFjaykge1xyXG4gICAgICBjb2xsaXNpb24gPSAhdGhpcy5vcHRpb25zLml0ZW1WYWxpZGF0ZUNhbGxiYWNrKGl0ZW0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjb2xsaXNpb24gJiYgdGhpcy5jaGVja0dyaWRDb2xsaXNpb24oaXRlbSkpIHtcclxuICAgICAgY29sbGlzaW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICghY29sbGlzaW9uKSB7XHJcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmZpbmRJdGVtV2l0aEl0ZW0oaXRlbSk7XHJcbiAgICAgIGlmIChjKSB7XHJcbiAgICAgICAgY29sbGlzaW9uID0gYztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbGxpc2lvbjtcclxuICB9XHJcblxyXG4gIGNoZWNrR3JpZENvbGxpc2lvbihpdGVtOiBHcmlkc3Rlckl0ZW0pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG5vTmVnYXRpdmVQb3NpdGlvbiA9IGl0ZW0ueSA+IC0xICYmIGl0ZW0ueCA+IC0xO1xyXG4gICAgY29uc3QgbWF4R3JpZENvbHMgPSBpdGVtLmNvbHMgKyBpdGVtLnggPD0gdGhpcy4kb3B0aW9ucy5tYXhDb2xzO1xyXG4gICAgY29uc3QgbWF4R3JpZFJvd3MgPSBpdGVtLnJvd3MgKyBpdGVtLnkgPD0gdGhpcy4kb3B0aW9ucy5tYXhSb3dzO1xyXG4gICAgY29uc3QgbWF4SXRlbUNvbHMgPSBpdGVtLm1heEl0ZW1Db2xzID09PSB1bmRlZmluZWQgPyB0aGlzLiRvcHRpb25zLm1heEl0ZW1Db2xzIDogaXRlbS5tYXhJdGVtQ29scztcclxuICAgIGNvbnN0IG1pbkl0ZW1Db2xzID0gaXRlbS5taW5JdGVtQ29scyA9PT0gdW5kZWZpbmVkID8gdGhpcy4kb3B0aW9ucy5taW5JdGVtQ29scyA6IGl0ZW0ubWluSXRlbUNvbHM7XHJcbiAgICBjb25zdCBtYXhJdGVtUm93cyA9IGl0ZW0ubWF4SXRlbVJvd3MgPT09IHVuZGVmaW5lZCA/IHRoaXMuJG9wdGlvbnMubWF4SXRlbVJvd3MgOiBpdGVtLm1heEl0ZW1Sb3dzO1xyXG4gICAgY29uc3QgbWluSXRlbVJvd3MgPSBpdGVtLm1pbkl0ZW1Sb3dzID09PSB1bmRlZmluZWQgPyB0aGlzLiRvcHRpb25zLm1pbkl0ZW1Sb3dzIDogaXRlbS5taW5JdGVtUm93cztcclxuICAgIGNvbnN0IGluQ29sc0xpbWl0cyA9IGl0ZW0uY29scyA8PSBtYXhJdGVtQ29scyAmJiBpdGVtLmNvbHMgPj0gbWluSXRlbUNvbHM7XHJcbiAgICBjb25zdCBpblJvd3NMaW1pdHMgPSBpdGVtLnJvd3MgPD0gbWF4SXRlbVJvd3MgJiYgaXRlbS5yb3dzID49IG1pbkl0ZW1Sb3dzO1xyXG4gICAgY29uc3QgbWluQXJlYUxpbWl0ID0gaXRlbS5taW5JdGVtQXJlYSA9PT0gdW5kZWZpbmVkID8gdGhpcy4kb3B0aW9ucy5taW5JdGVtQXJlYSA6IGl0ZW0ubWluSXRlbUFyZWE7XHJcbiAgICBjb25zdCBtYXhBcmVhTGltaXQgPSBpdGVtLm1heEl0ZW1BcmVhID09PSB1bmRlZmluZWQgPyB0aGlzLiRvcHRpb25zLm1heEl0ZW1BcmVhIDogaXRlbS5tYXhJdGVtQXJlYTtcclxuICAgIGNvbnN0IGFyZWEgPSBpdGVtLmNvbHMgKiBpdGVtLnJvd3M7XHJcbiAgICBjb25zdCBpbk1pbkFyZWEgPSBtaW5BcmVhTGltaXQgPD0gYXJlYTtcclxuICAgIGNvbnN0IGluTWF4QXJlYSA9IG1heEFyZWFMaW1pdCA+PSBhcmVhO1xyXG4gICAgcmV0dXJuICEobm9OZWdhdGl2ZVBvc2l0aW9uICYmIG1heEdyaWRDb2xzICYmIG1heEdyaWRSb3dzICYmIGluQ29sc0xpbWl0cyAmJiBpblJvd3NMaW1pdHMgJiYgaW5NaW5BcmVhICYmIGluTWF4QXJlYSk7XHJcbiAgfVxyXG5cclxuICBmaW5kSXRlbVdpdGhJdGVtKGl0ZW06IEdyaWRzdGVySXRlbSk6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSB8IGJvb2xlYW4ge1xyXG4gICAgbGV0IHdpZGdldHNJbmRleDogbnVtYmVyID0gdGhpcy5ncmlkLmxlbmd0aCAtIDEsIHdpZGdldDogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlO1xyXG4gICAgZm9yICg7IHdpZGdldHNJbmRleCA+IC0xOyB3aWRnZXRzSW5kZXgtLSkge1xyXG4gICAgICB3aWRnZXQgPSB0aGlzLmdyaWRbd2lkZ2V0c0luZGV4XTtcclxuICAgICAgaWYgKHdpZGdldC4kaXRlbSAhPT0gaXRlbSAmJiBHcmlkc3RlckNvbXBvbmVudC5jaGVja0NvbGxpc2lvblR3b0l0ZW1zKHdpZGdldC4kaXRlbSwgaXRlbSkpIHtcclxuICAgICAgICByZXR1cm4gd2lkZ2V0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBmaW5kSXRlbXNXaXRoSXRlbShpdGVtOiBHcmlkc3Rlckl0ZW0pOiBBcnJheTxHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U+IHtcclxuICAgIGNvbnN0IGE6IEFycmF5PEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZT4gPSBbXTtcclxuICAgIGxldCB3aWRnZXRzSW5kZXg6IG51bWJlciA9IHRoaXMuZ3JpZC5sZW5ndGggLSAxLCB3aWRnZXQ6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZTtcclxuICAgIGZvciAoOyB3aWRnZXRzSW5kZXggPiAtMTsgd2lkZ2V0c0luZGV4LS0pIHtcclxuICAgICAgd2lkZ2V0ID0gdGhpcy5ncmlkW3dpZGdldHNJbmRleF07XHJcbiAgICAgIGlmICh3aWRnZXQuJGl0ZW0gIT09IGl0ZW0gJiYgR3JpZHN0ZXJDb21wb25lbnQuY2hlY2tDb2xsaXNpb25Ud29JdGVtcyh3aWRnZXQuJGl0ZW0sIGl0ZW0pKSB7XHJcbiAgICAgICAgYS5wdXNoKHdpZGdldCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG4gIH1cclxuXHJcbiAgYXV0b1Bvc2l0aW9uSXRlbShpdGVtQ29tcG9uZW50OiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdldE5leHRQb3NzaWJsZVBvc2l0aW9uKGl0ZW1Db21wb25lbnQuJGl0ZW0pKSB7XHJcbiAgICAgIGl0ZW1Db21wb25lbnQubm90UGxhY2VkID0gZmFsc2U7XHJcbiAgICAgIGl0ZW1Db21wb25lbnQuaXRlbS54ID0gaXRlbUNvbXBvbmVudC4kaXRlbS54O1xyXG4gICAgICBpdGVtQ29tcG9uZW50Lml0ZW0ueSA9IGl0ZW1Db21wb25lbnQuJGl0ZW0ueTtcclxuICAgICAgaXRlbUNvbXBvbmVudC5pdGVtQ2hhbmdlZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbUNvbXBvbmVudC5ub3RQbGFjZWQgPSB0cnVlO1xyXG4gICAgICBpZiAoIXRoaXMuJG9wdGlvbnMuZGlzYWJsZVdhcm5pbmdzKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGJlIHBsYWNlZCBpbiB0aGUgYm91bmRzIG9mIHRoZSBkYXNoYm9hcmQhL24nICtcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGl0ZW1Db21wb25lbnQuaXRlbSwgWydjb2xzJywgJ3Jvd3MnLCAneCcsICd5J10pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dFBvc3NpYmxlUG9zaXRpb24obmV3SXRlbTogR3JpZHN0ZXJJdGVtLCBzdGFydGluZ0Zyb206IHsgeT86IG51bWJlciwgeD86IG51bWJlciB9ID0ge30pOiBib29sZWFuIHtcclxuICAgIGlmIChuZXdJdGVtLmNvbHMgPT09IC0xKSB7XHJcbiAgICAgIG5ld0l0ZW0uY29scyA9IHRoaXMuJG9wdGlvbnMuZGVmYXVsdEl0ZW1Db2xzO1xyXG4gICAgfVxyXG4gICAgaWYgKG5ld0l0ZW0ucm93cyA9PT0gLTEpIHtcclxuICAgICAgbmV3SXRlbS5yb3dzID0gdGhpcy4kb3B0aW9ucy5kZWZhdWx0SXRlbVJvd3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEdyaWREaW1lbnNpb25zKCk7XHJcbiAgICBsZXQgcm93c0luZGV4ID0gc3RhcnRpbmdGcm9tLnkgfHwgMCwgY29sc0luZGV4O1xyXG4gICAgZm9yICg7IHJvd3NJbmRleCA8IHRoaXMucm93czsgcm93c0luZGV4KyspIHtcclxuICAgICAgbmV3SXRlbS55ID0gcm93c0luZGV4O1xyXG4gICAgICBjb2xzSW5kZXggPSBzdGFydGluZ0Zyb20ueCB8fCAwO1xyXG4gICAgICBmb3IgKDsgY29sc0luZGV4IDwgdGhpcy5jb2x1bW5zOyBjb2xzSW5kZXgrKykge1xyXG4gICAgICAgIG5ld0l0ZW0ueCA9IGNvbHNJbmRleDtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tDb2xsaXNpb24obmV3SXRlbSkpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgY2FuQWRkVG9Sb3dzID0gdGhpcy4kb3B0aW9ucy5tYXhSb3dzID49IHRoaXMucm93cyArIG5ld0l0ZW0ucm93cztcclxuICAgIGNvbnN0IGNhbkFkZFRvQ29sdW1ucyA9IHRoaXMuJG9wdGlvbnMubWF4Q29scyA+PSB0aGlzLmNvbHVtbnMgKyBuZXdJdGVtLmNvbHM7XHJcbiAgICBjb25zdCBhZGRUb1Jvd3MgPSB0aGlzLnJvd3MgPD0gdGhpcy5jb2x1bW5zICYmIGNhbkFkZFRvUm93cztcclxuICAgIGlmICghYWRkVG9Sb3dzICYmIGNhbkFkZFRvQ29sdW1ucykge1xyXG4gICAgICBuZXdJdGVtLnggPSB0aGlzLmNvbHVtbnM7XHJcbiAgICAgIG5ld0l0ZW0ueSA9IDA7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChjYW5BZGRUb1Jvd3MpIHtcclxuICAgICAgbmV3SXRlbS55ID0gdGhpcy5yb3dzO1xyXG4gICAgICBuZXdJdGVtLnggPSAwO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEZpcnN0UG9zc2libGVQb3NpdGlvbihpdGVtOiBHcmlkc3Rlckl0ZW0pOiBHcmlkc3Rlckl0ZW0ge1xyXG4gICAgY29uc3QgdG1wSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xyXG4gICAgdGhpcy5nZXROZXh0UG9zc2libGVQb3NpdGlvbih0bXBJdGVtKTtcclxuICAgIHJldHVybiB0bXBJdGVtO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdFBvc3NpYmxlUG9zaXRpb24oaXRlbTogR3JpZHN0ZXJJdGVtKTogR3JpZHN0ZXJJdGVtIHtcclxuICAgIGxldCBmYXJ0aGVzdEl0ZW06IHsgeTogbnVtYmVyLCB4OiBudW1iZXIgfSA9IHt5OiAwLCB4OiAwfTtcclxuICAgIGZhcnRoZXN0SXRlbSA9IHRoaXMuZ3JpZC5yZWR1Y2UoKHByZXY6IGFueSwgY3VycjogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJDb29yZHMgPSB7eTogY3Vyci4kaXRlbS55ICsgY3Vyci4kaXRlbS5yb3dzIC0gMSwgeDogY3Vyci4kaXRlbS54ICsgY3Vyci4kaXRlbS5jb2xzIC0gMX07XHJcbiAgICAgIGlmIChHcmlkc3RlclV0aWxzLmNvbXBhcmVJdGVtcyhwcmV2LCBjdXJyQ29vcmRzKSA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiBjdXJyQ29vcmRzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwcmV2O1xyXG4gICAgICB9XHJcbiAgICB9LCBmYXJ0aGVzdEl0ZW0pO1xyXG5cclxuICAgIGNvbnN0IHRtcEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtKTtcclxuICAgIHRoaXMuZ2V0TmV4dFBvc3NpYmxlUG9zaXRpb24odG1wSXRlbSwgZmFydGhlc3RJdGVtKTtcclxuICAgIHJldHVybiB0bXBJdGVtO1xyXG4gIH1cclxuXHJcbiAgcGl4ZWxzVG9Qb3NpdGlvblgoeDogbnVtYmVyLCByb3VuZGluZ01ldGhvZDogRnVuY3Rpb24sIG5vTGltaXQ/OiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gcm91bmRpbmdNZXRob2QoeCAvIHRoaXMuY3VyQ29sV2lkdGgpO1xyXG4gICAgaWYgKG5vTGltaXQpIHtcclxuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIE1hdGgubWF4KHBvc2l0aW9uLCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBpeGVsc1RvUG9zaXRpb25ZKHk6IG51bWJlciwgcm91bmRpbmdNZXRob2Q6IEZ1bmN0aW9uLCBub0xpbWl0PzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IHJvdW5kaW5nTWV0aG9kKHkgLyB0aGlzLmN1clJvd0hlaWdodCk7XHJcbiAgICBpZiAobm9MaW1pdCkge1xyXG4gICAgICByZXR1cm4gcG9zaXRpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gTWF0aC5tYXgocG9zaXRpb24sIDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zaXRpb25YVG9QaXhlbHMoeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB4ICogdGhpcy5jdXJDb2xXaWR0aDtcclxuICB9XHJcblxyXG4gIHBvc2l0aW9uWVRvUGl4ZWxzKHk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4geSAqIHRoaXMuY3VyUm93SGVpZ2h0O1xyXG4gIH1cclxufVxyXG4iXX0=
|