@schneideress/dashboardframework 17.0.46 → 20.0.0
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/fesm2022/schneideress-dashboardframework.mjs +52 -59
- package/fesm2022/schneideress-dashboardframework.mjs.map +1 -1
- package/index.d.ts +1255 -5
- package/package.json +11 -7
- package/esm2022/gridster/index.mjs +0 -12
- package/esm2022/gridster/lib/gridster.component.mjs +0 -627
- package/esm2022/gridster/lib/gridster.interface.mjs +0 -3
- package/esm2022/gridster/lib/gridster.module.mjs +0 -17
- package/esm2022/gridster/lib/gridsterCompact.service.mjs +0 -126
- package/esm2022/gridster/lib/gridsterConfig.constant.mjs +0 -118
- package/esm2022/gridster/lib/gridsterConfig.interface.mjs +0 -37
- package/esm2022/gridster/lib/gridsterConfigS.interface.mjs +0 -2
- package/esm2022/gridster/lib/gridsterDraggable.service.mjs +0 -405
- package/esm2022/gridster/lib/gridsterEmptyCell.service.mjs +0 -255
- package/esm2022/gridster/lib/gridsterItem.component.mjs +0 -231
- package/esm2022/gridster/lib/gridsterItem.interface.mjs +0 -3
- package/esm2022/gridster/lib/gridsterPreview.component.mjs +0 -36
- package/esm2022/gridster/lib/gridsterPush.service.mjs +0 -316
- package/esm2022/gridster/lib/gridsterPushResize.service.mjs +0 -225
- package/esm2022/gridster/lib/gridsterRenderer.interface.mjs +0 -2
- package/esm2022/gridster/lib/gridsterRenderer.service.mjs +0 -274
- package/esm2022/gridster/lib/gridsterResizable.service.mjs +0 -470
- package/esm2022/gridster/lib/gridsterResizeEventType.interface.mjs +0 -2
- package/esm2022/gridster/lib/gridsterScroll.service.mjs +0 -134
- package/esm2022/gridster/lib/gridsterSwap.service.mjs +0 -87
- package/esm2022/gridster/lib/gridsterUtils.service.mjs +0 -92
- package/esm2022/lib/custom.notifier.options.mjs +0 -41
- package/esm2022/lib/ra-dashboard-area/ra.dashboard.area.mjs +0 -639
- package/esm2022/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +0 -43
- package/esm2022/lib/ra-widget-container/ra.widget.container.component.mjs +0 -971
- package/esm2022/lib/ra.base.dashboard.filter.mjs +0 -46
- package/esm2022/lib/ra.base.dashboard.template.mjs +0 -45
- package/esm2022/lib/ra.dashbard.event.bus.mjs +0 -46
- package/esm2022/lib/ra.dashboard.module.mjs +0 -55
- package/esm2022/lib/ra.dashboard.responsive.service.mjs +0 -149
- package/esm2022/lib/ra.dashboard.service.mjs +0 -84
- package/esm2022/lib/ra.event.enum.mjs +0 -75
- package/esm2022/lib/ra.gridster.config.mjs +0 -56
- package/esm2022/public-api.mjs +0 -13
- package/esm2022/schneideress-dashboardframework.mjs +0 -5
- package/gridster/index.d.ts +0 -9
- package/gridster/lib/gridster.component.d.ts +0 -79
- package/gridster/lib/gridster.interface.d.ts +0 -49
- package/gridster/lib/gridster.module.d.ts +0 -8
- package/gridster/lib/gridsterCompact.service.d.ts +0 -11
- package/gridster/lib/gridsterConfig.constant.d.ts +0 -2
- package/gridster/lib/gridsterConfig.interface.d.ts +0 -155
- package/gridster/lib/gridsterConfigS.interface.d.ts +0 -107
- package/gridster/lib/gridsterDraggable.service.d.ts +0 -68
- package/gridster/lib/gridsterEmptyCell.service.d.ts +0 -31
- package/gridster/lib/gridsterItem.component.d.ts +0 -61
- package/gridster/lib/gridsterItem.interface.d.ts +0 -67
- package/gridster/lib/gridsterPreview.component.d.ts +0 -17
- package/gridster/lib/gridsterPush.service.d.ts +0 -34
- package/gridster/lib/gridsterPushResize.service.d.ts +0 -26
- package/gridster/lib/gridsterRenderer.interface.d.ts +0 -14
- package/gridster/lib/gridsterRenderer.service.d.ts +0 -37
- package/gridster/lib/gridsterResizable.service.d.ts +0 -86
- package/gridster/lib/gridsterResizeEventType.interface.d.ts +0 -6
- package/gridster/lib/gridsterScroll.service.d.ts +0 -7
- package/gridster/lib/gridsterSwap.service.d.ts +0 -13
- package/gridster/lib/gridsterUtils.service.d.ts +0 -16
- package/lib/custom.notifier.options.d.ts +0 -2
- package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +0 -132
- package/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.d.ts +0 -20
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +0 -154
- package/lib/ra.base.dashboard.filter.d.ts +0 -19
- package/lib/ra.base.dashboard.template.d.ts +0 -24
- package/lib/ra.dashbard.event.bus.d.ts +0 -23
- package/lib/ra.dashboard.module.d.ts +0 -16
- package/lib/ra.dashboard.responsive.service.d.ts +0 -24
- package/lib/ra.dashboard.service.d.ts +0 -26
- package/lib/ra.event.enum.d.ts +0 -72
- package/lib/ra.gridster.config.d.ts +0 -2
- package/public-api.d.ts +0 -9
|
@@ -1,405 +0,0 @@
|
|
|
1
|
-
import { DirTypes } from './gridsterConfig.interface';
|
|
2
|
-
import { GridsterPush } from './gridsterPush.service';
|
|
3
|
-
import { cancelScroll, scroll } from './gridsterScroll.service';
|
|
4
|
-
import { GridsterSwap } from './gridsterSwap.service';
|
|
5
|
-
import { GridsterUtils } from './gridsterUtils.service';
|
|
6
|
-
const GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS = 'gridster-item-resizable-handler';
|
|
7
|
-
var Direction;
|
|
8
|
-
(function (Direction) {
|
|
9
|
-
Direction["UP"] = "UP";
|
|
10
|
-
Direction["DOWN"] = "DOWN";
|
|
11
|
-
Direction["LEFT"] = "LEFT";
|
|
12
|
-
Direction["RIGHT"] = "RIGHT";
|
|
13
|
-
})(Direction || (Direction = {}));
|
|
14
|
-
export class GridsterDraggable {
|
|
15
|
-
constructor(gridsterItem, gridster, zone) {
|
|
16
|
-
this.zone = zone;
|
|
17
|
-
this.collision = false;
|
|
18
|
-
this.dragMove = (e) => {
|
|
19
|
-
e.stopPropagation();
|
|
20
|
-
e.preventDefault();
|
|
21
|
-
GridsterUtils.checkTouchEvent(e);
|
|
22
|
-
// get the directions of the mouse event
|
|
23
|
-
let directions = this.getDirections(e);
|
|
24
|
-
if (this.gridster.options.enableBoundaryControl) {
|
|
25
|
-
// prevent moving up at the top of gridster
|
|
26
|
-
if (directions.includes(Direction.UP) &&
|
|
27
|
-
this.gridsterItem.el.getBoundingClientRect().top <
|
|
28
|
-
this.gridster.el.getBoundingClientRect().top +
|
|
29
|
-
(this.outerMarginTop ?? this.margin)) {
|
|
30
|
-
directions = directions.filter(direction => direction != Direction.UP);
|
|
31
|
-
e = new MouseEvent(e.type, {
|
|
32
|
-
clientX: e.clientX,
|
|
33
|
-
clientY: this.lastMouse.clientY
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
// prevent moving left at the leftmost column of gridster
|
|
37
|
-
if (directions.includes(Direction.LEFT) &&
|
|
38
|
-
this.gridsterItem.el.getBoundingClientRect().left <
|
|
39
|
-
this.gridster.el.getBoundingClientRect().left +
|
|
40
|
-
(this.outerMarginLeft ?? this.margin)) {
|
|
41
|
-
directions = directions.filter(direction => direction != Direction.LEFT);
|
|
42
|
-
e = new MouseEvent(e.type, {
|
|
43
|
-
clientX: this.lastMouse.clientX,
|
|
44
|
-
clientY: e.clientY
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
// prevent moving right at the rightmost column of gridster
|
|
48
|
-
if (directions.includes(Direction.RIGHT) &&
|
|
49
|
-
this.gridsterItem.el.getBoundingClientRect().right >
|
|
50
|
-
this.gridster.el.getBoundingClientRect().right -
|
|
51
|
-
(this.outerMarginRight ?? this.margin)) {
|
|
52
|
-
directions = directions.filter(direction => direction != Direction.RIGHT);
|
|
53
|
-
e = new MouseEvent(e.type, {
|
|
54
|
-
clientX: this.lastMouse.clientX,
|
|
55
|
-
clientY: e.clientY
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
// prevent moving down at the bottom of gridster
|
|
59
|
-
if (directions.includes(Direction.DOWN) &&
|
|
60
|
-
this.gridsterItem.el.getBoundingClientRect().bottom >
|
|
61
|
-
this.gridster.el.getBoundingClientRect().bottom -
|
|
62
|
-
(this.outerMarginBottom ?? this.margin)) {
|
|
63
|
-
directions = directions.filter(direction => direction != Direction.DOWN);
|
|
64
|
-
e = new MouseEvent(e.type, {
|
|
65
|
-
clientX: e.clientX,
|
|
66
|
-
clientY: this.lastMouse.clientY
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// do not change item location when there is no direction to go
|
|
71
|
-
if (directions.length) {
|
|
72
|
-
this.offsetLeft =
|
|
73
|
-
this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
|
|
74
|
-
this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
|
|
75
|
-
scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.calculateItemPositionFromMousePosition);
|
|
76
|
-
this.calculateItemPositionFromMousePosition(e);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
this.calculateItemPositionFromMousePosition = (e) => {
|
|
80
|
-
if (this.gridster.options.scale) {
|
|
81
|
-
this.calculateItemPositionWithScale(e, this.gridster.options.scale);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
this.calculateItemPositionWithoutScale(e);
|
|
85
|
-
}
|
|
86
|
-
this.calculateItemPosition();
|
|
87
|
-
this.lastMouse.clientX = e.clientX;
|
|
88
|
-
this.lastMouse.clientY = e.clientY;
|
|
89
|
-
this.zone.run(() => {
|
|
90
|
-
this.gridster.updateGrid();
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
this.dragStop = (e) => {
|
|
94
|
-
e.stopPropagation();
|
|
95
|
-
e.preventDefault();
|
|
96
|
-
cancelScroll();
|
|
97
|
-
this.cancelOnBlur();
|
|
98
|
-
this.mousemove();
|
|
99
|
-
this.mouseup();
|
|
100
|
-
this.mouseleave();
|
|
101
|
-
this.touchmove();
|
|
102
|
-
this.touchend();
|
|
103
|
-
this.touchcancel();
|
|
104
|
-
this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-moving');
|
|
105
|
-
this.gridster.dragInProgress = false;
|
|
106
|
-
this.gridster.updateGrid();
|
|
107
|
-
this.path = [];
|
|
108
|
-
if (this.gridster.options.draggable &&
|
|
109
|
-
this.gridster.options.draggable.stop) {
|
|
110
|
-
Promise.resolve(this.gridster.options.draggable.stop(this.gridsterItem.item, this.gridsterItem, e)).then(this.makeDrag, this.cancelDrag);
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
this.makeDrag();
|
|
114
|
-
}
|
|
115
|
-
setTimeout(() => {
|
|
116
|
-
if (this.gridster) {
|
|
117
|
-
this.gridster.movingItem = null;
|
|
118
|
-
this.gridster.previewStyle(true);
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
this.cancelDrag = () => {
|
|
123
|
-
this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;
|
|
124
|
-
this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;
|
|
125
|
-
this.gridsterItem.setSize();
|
|
126
|
-
if (this.push) {
|
|
127
|
-
this.push.restoreItems();
|
|
128
|
-
}
|
|
129
|
-
if (this.swap) {
|
|
130
|
-
this.swap.restoreSwapItem();
|
|
131
|
-
}
|
|
132
|
-
if (this.push) {
|
|
133
|
-
this.push.destroy();
|
|
134
|
-
this.push = null;
|
|
135
|
-
}
|
|
136
|
-
if (this.swap) {
|
|
137
|
-
this.swap.destroy();
|
|
138
|
-
this.swap = null;
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
this.makeDrag = () => {
|
|
142
|
-
if (this.gridster.$options.draggable.dropOverItems &&
|
|
143
|
-
this.gridster.options.draggable &&
|
|
144
|
-
this.gridster.options.draggable.dropOverItemsCallback &&
|
|
145
|
-
this.collision &&
|
|
146
|
-
this.collision !== true &&
|
|
147
|
-
this.collision.$item) {
|
|
148
|
-
this.gridster.options.draggable.dropOverItemsCallback(this.gridsterItem.item, this.collision.item, this.gridster);
|
|
149
|
-
}
|
|
150
|
-
this.collision = false;
|
|
151
|
-
this.gridsterItem.setSize();
|
|
152
|
-
this.gridsterItem.checkItemChanges(this.gridsterItem.$item, this.gridsterItem.item);
|
|
153
|
-
if (this.push) {
|
|
154
|
-
this.push.setPushedItems();
|
|
155
|
-
}
|
|
156
|
-
if (this.swap) {
|
|
157
|
-
this.swap.setSwapItem();
|
|
158
|
-
}
|
|
159
|
-
if (this.push) {
|
|
160
|
-
this.push.destroy();
|
|
161
|
-
this.push = null;
|
|
162
|
-
}
|
|
163
|
-
if (this.swap) {
|
|
164
|
-
this.swap.destroy();
|
|
165
|
-
this.swap = null;
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
this.dragStartDelay = (e) => {
|
|
169
|
-
const target = e.target;
|
|
170
|
-
if (target.classList.contains(GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS)) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
if (GridsterUtils.checkContentClassForEvent(this.gridster, e)) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
GridsterUtils.checkTouchEvent(e);
|
|
177
|
-
if (!this.gridster.$options.draggable.delayStart) {
|
|
178
|
-
this.dragStart(e);
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
const timeout = setTimeout(() => {
|
|
182
|
-
this.dragStart(e);
|
|
183
|
-
cancelDrag();
|
|
184
|
-
}, this.gridster.$options.draggable.delayStart);
|
|
185
|
-
const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);
|
|
186
|
-
const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);
|
|
187
|
-
const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);
|
|
188
|
-
const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);
|
|
189
|
-
const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);
|
|
190
|
-
const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);
|
|
191
|
-
function cancelMove(eventMove) {
|
|
192
|
-
GridsterUtils.checkTouchEvent(eventMove);
|
|
193
|
-
if (Math.abs(eventMove.clientX - e.clientX) > 9 ||
|
|
194
|
-
Math.abs(eventMove.clientY - e.clientY) > 9) {
|
|
195
|
-
cancelDrag();
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
function cancelDrag() {
|
|
199
|
-
clearTimeout(timeout);
|
|
200
|
-
cancelOnBlur();
|
|
201
|
-
cancelMouse();
|
|
202
|
-
cancelMouseLeave();
|
|
203
|
-
cancelTouchMove();
|
|
204
|
-
cancelTouchEnd();
|
|
205
|
-
cancelTouchCancel();
|
|
206
|
-
}
|
|
207
|
-
};
|
|
208
|
-
this.gridsterItem = gridsterItem;
|
|
209
|
-
this.gridster = gridster;
|
|
210
|
-
this.lastMouse = {
|
|
211
|
-
clientX: 0,
|
|
212
|
-
clientY: 0
|
|
213
|
-
};
|
|
214
|
-
this.path = [];
|
|
215
|
-
}
|
|
216
|
-
destroy() {
|
|
217
|
-
if (this.gridster.previewStyle) {
|
|
218
|
-
this.gridster.previewStyle(true);
|
|
219
|
-
}
|
|
220
|
-
this.gridsterItem = this.gridster = this.collision = null;
|
|
221
|
-
if (this.mousedown) {
|
|
222
|
-
this.mousedown();
|
|
223
|
-
this.touchstart();
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
dragStart(e) {
|
|
227
|
-
if (e.which && e.which !== 1) {
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
if (this.gridster.options.draggable &&
|
|
231
|
-
this.gridster.options.draggable.start) {
|
|
232
|
-
this.gridster.options.draggable.start(this.gridsterItem.item, this.gridsterItem, e);
|
|
233
|
-
}
|
|
234
|
-
e.stopPropagation();
|
|
235
|
-
e.preventDefault();
|
|
236
|
-
this.zone.runOutsideAngular(() => {
|
|
237
|
-
this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragMove);
|
|
238
|
-
this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragMove);
|
|
239
|
-
});
|
|
240
|
-
this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStop);
|
|
241
|
-
this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStop);
|
|
242
|
-
this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStop);
|
|
243
|
-
this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStop);
|
|
244
|
-
this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStop);
|
|
245
|
-
this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-moving');
|
|
246
|
-
this.margin = this.gridster.$options.margin;
|
|
247
|
-
this.outerMarginTop = this.gridster.$options.outerMarginTop;
|
|
248
|
-
this.outerMarginRight = this.gridster.$options.outerMarginRight;
|
|
249
|
-
this.outerMarginBottom = this.gridster.$options.outerMarginBottom;
|
|
250
|
-
this.outerMarginLeft = this.gridster.$options.outerMarginLeft;
|
|
251
|
-
this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
|
|
252
|
-
this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
|
|
253
|
-
this.left = this.gridsterItem.left - this.margin;
|
|
254
|
-
this.top = this.gridsterItem.top - this.margin;
|
|
255
|
-
this.originalClientX = e.clientX;
|
|
256
|
-
this.originalClientY = e.clientY;
|
|
257
|
-
this.width = this.gridsterItem.width;
|
|
258
|
-
this.height = this.gridsterItem.height;
|
|
259
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
260
|
-
this.diffLeft =
|
|
261
|
-
e.clientX - this.gridster.el.scrollWidth + this.gridsterItem.left;
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
this.diffLeft = e.clientX + this.offsetLeft - this.margin - this.left;
|
|
265
|
-
}
|
|
266
|
-
this.diffTop = e.clientY + this.offsetTop - this.margin - this.top;
|
|
267
|
-
this.gridster.movingItem = this.gridsterItem.$item;
|
|
268
|
-
this.gridster.previewStyle(true);
|
|
269
|
-
this.push = new GridsterPush(this.gridsterItem);
|
|
270
|
-
this.swap = new GridsterSwap(this.gridsterItem);
|
|
271
|
-
this.gridster.dragInProgress = true;
|
|
272
|
-
this.gridster.updateGrid();
|
|
273
|
-
this.path.push({
|
|
274
|
-
x: this.gridsterItem.item.x || 0,
|
|
275
|
-
y: this.gridsterItem.item.y || 0
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
calculateItemPositionWithScale(e, scale) {
|
|
279
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
280
|
-
this.left =
|
|
281
|
-
this.gridster.el.scrollWidth -
|
|
282
|
-
this.originalClientX +
|
|
283
|
-
(e.clientX - this.originalClientX) / scale +
|
|
284
|
-
this.diffLeft;
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
this.left =
|
|
288
|
-
this.originalClientX +
|
|
289
|
-
(e.clientX - this.originalClientX) / scale +
|
|
290
|
-
this.offsetLeft -
|
|
291
|
-
this.diffLeft;
|
|
292
|
-
}
|
|
293
|
-
this.top =
|
|
294
|
-
this.originalClientY +
|
|
295
|
-
(e.clientY - this.originalClientY) / scale +
|
|
296
|
-
this.offsetTop -
|
|
297
|
-
this.diffTop;
|
|
298
|
-
}
|
|
299
|
-
calculateItemPositionWithoutScale(e) {
|
|
300
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
301
|
-
this.left = this.gridster.el.scrollWidth - e.clientX + this.diffLeft;
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
this.left = e.clientX + this.offsetLeft - this.diffLeft;
|
|
305
|
-
}
|
|
306
|
-
this.top = e.clientY + this.offsetTop - this.diffTop;
|
|
307
|
-
}
|
|
308
|
-
calculateItemPosition() {
|
|
309
|
-
this.gridster.movingItem = this.gridsterItem.$item;
|
|
310
|
-
this.positionX = this.gridster.pixelsToPositionX(this.left, Math.round);
|
|
311
|
-
this.positionY = this.gridster.pixelsToPositionY(this.top, Math.round);
|
|
312
|
-
this.positionXBackup = this.gridsterItem.$item.x;
|
|
313
|
-
this.positionYBackup = this.gridsterItem.$item.y;
|
|
314
|
-
this.gridsterItem.$item.x = this.positionX;
|
|
315
|
-
if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {
|
|
316
|
-
this.gridsterItem.$item.x = this.positionXBackup;
|
|
317
|
-
}
|
|
318
|
-
this.gridsterItem.$item.y = this.positionY;
|
|
319
|
-
if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {
|
|
320
|
-
this.gridsterItem.$item.y = this.positionYBackup;
|
|
321
|
-
}
|
|
322
|
-
this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, this.top);
|
|
323
|
-
if (this.positionXBackup !== this.gridsterItem.$item.x ||
|
|
324
|
-
this.positionYBackup !== this.gridsterItem.$item.y) {
|
|
325
|
-
const lastPosition = this.path[this.path.length - 1];
|
|
326
|
-
let direction = '';
|
|
327
|
-
if (lastPosition.x < this.gridsterItem.$item.x) {
|
|
328
|
-
direction = this.push.fromWest;
|
|
329
|
-
}
|
|
330
|
-
else if (lastPosition.x > this.gridsterItem.$item.x) {
|
|
331
|
-
direction = this.push.fromEast;
|
|
332
|
-
}
|
|
333
|
-
else if (lastPosition.y < this.gridsterItem.$item.y) {
|
|
334
|
-
direction = this.push.fromNorth;
|
|
335
|
-
}
|
|
336
|
-
else if (lastPosition.y > this.gridsterItem.$item.y) {
|
|
337
|
-
direction = this.push.fromSouth;
|
|
338
|
-
}
|
|
339
|
-
this.push.pushItems(direction, this.gridster.$options.disablePushOnDrag);
|
|
340
|
-
this.swap.swapItems();
|
|
341
|
-
this.collision = this.gridster.checkCollision(this.gridsterItem.$item);
|
|
342
|
-
if (this.collision) {
|
|
343
|
-
this.gridsterItem.$item.x = this.positionXBackup;
|
|
344
|
-
this.gridsterItem.$item.y = this.positionYBackup;
|
|
345
|
-
if (this.gridster.$options.draggable.dropOverItems &&
|
|
346
|
-
this.collision !== true &&
|
|
347
|
-
this.collision.$item) {
|
|
348
|
-
this.gridster.movingItem = null;
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
else {
|
|
352
|
-
this.path.push({
|
|
353
|
-
x: this.gridsterItem.$item.x,
|
|
354
|
-
y: this.gridsterItem.$item.y
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
this.push.checkPushBack();
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
360
|
-
// reset the collision when you drag and drop on an adjacent cell that is not empty
|
|
361
|
-
// and go back to the cell you were in from the beginning,
|
|
362
|
-
// this is to prevent `dropOverItemsCallback'
|
|
363
|
-
this.collision = false;
|
|
364
|
-
}
|
|
365
|
-
this.gridster.previewStyle(true);
|
|
366
|
-
}
|
|
367
|
-
toggle() {
|
|
368
|
-
const enableDrag = this.gridsterItem.canBeDragged();
|
|
369
|
-
if (!this.enabled && enableDrag) {
|
|
370
|
-
this.enabled = !this.enabled;
|
|
371
|
-
this.mousedown = this.gridsterItem.renderer.listen(this.gridsterItem.el, 'mousedown', this.dragStartDelay);
|
|
372
|
-
this.touchstart = this.gridsterItem.renderer.listen(this.gridsterItem.el, 'touchstart', this.dragStartDelay);
|
|
373
|
-
}
|
|
374
|
-
else if (this.enabled && !enableDrag) {
|
|
375
|
-
this.enabled = !this.enabled;
|
|
376
|
-
this.mousedown();
|
|
377
|
-
this.touchstart();
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Returns the list of directions for given mouse event
|
|
382
|
-
* @param e Mouse event
|
|
383
|
-
* */
|
|
384
|
-
getDirections(e) {
|
|
385
|
-
const directions = [];
|
|
386
|
-
if (this.lastMouse.clientX === 0 && this.lastMouse.clientY === 0) {
|
|
387
|
-
this.lastMouse.clientY = e.clientY;
|
|
388
|
-
this.lastMouse.clientX = e.clientX;
|
|
389
|
-
}
|
|
390
|
-
if (this.lastMouse.clientY > e.clientY) {
|
|
391
|
-
directions.push(Direction.UP);
|
|
392
|
-
}
|
|
393
|
-
if (this.lastMouse.clientY < e.clientY) {
|
|
394
|
-
directions.push(Direction.DOWN);
|
|
395
|
-
}
|
|
396
|
-
if (this.lastMouse.clientX < e.clientX) {
|
|
397
|
-
directions.push(Direction.RIGHT);
|
|
398
|
-
}
|
|
399
|
-
if (this.lastMouse.clientX > e.clientX) {
|
|
400
|
-
directions.push(Direction.LEFT);
|
|
401
|
-
}
|
|
402
|
-
return directions;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJEcmFnZ2FibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2dyaWRzdGVyL2xpYi9ncmlkc3RlckRyYWdnYWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhELE1BQU0scUNBQXFDLEdBQUcsaUNBQWlDLENBQUM7QUFFaEYsSUFBSyxTQUtKO0FBTEQsV0FBSyxTQUFTO0lBQ1osc0JBQVMsQ0FBQTtJQUNULDBCQUFhLENBQUE7SUFDYiwwQkFBYSxDQUFBO0lBQ2IsNEJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTEksU0FBUyxLQUFULFNBQVMsUUFLYjtBQUVELE1BQU0sT0FBTyxpQkFBaUI7SUF5QzVCLFlBQ0UsWUFBNEMsRUFDNUMsUUFBb0MsRUFDNUIsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7UUFMdEIsY0FBUyxHQUE2QyxLQUFLLENBQUM7UUF1SDVELGFBQVEsR0FBRyxDQUFDLENBQWEsRUFBUSxFQUFFO1lBQ2pDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqQyx3Q0FBd0M7WUFDeEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFD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U0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuL2dyaWRzdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IERpclR5cGVzIH0gZnJvbSAnLi9ncmlkc3RlckNvbmZpZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuL2dyaWRzdGVySXRlbS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBHcmlkc3RlclB1c2ggfSBmcm9tICcuL2dyaWRzdGVyUHVzaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY2FuY2VsU2Nyb2xsLCBzY3JvbGwgfSBmcm9tICcuL2dyaWRzdGVyU2Nyb2xsLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgR3JpZHN0ZXJTd2FwIH0gZnJvbSAnLi9ncmlkc3RlclN3YXAuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRzdGVyVXRpbHMgfSBmcm9tICcuL2dyaWRzdGVyVXRpbHMuc2VydmljZSc7XHJcblxyXG5jb25zdCBHUklEU1RFUl9JVEVNX1JFU0laQUJMRV9IQU5ETEVSX0NMQVNTID0gJ2dyaWRzdGVyLWl0ZW0tcmVzaXphYmxlLWhhbmRsZXInO1xyXG5cclxuZW51bSBEaXJlY3Rpb24ge1xyXG4gIFVQID0gJ1VQJyxcclxuICBET1dOID0gJ0RPV04nLFxyXG4gIExFRlQgPSAnTEVGVCcsXHJcbiAgUklHSFQgPSAnUklHSFQnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkc3RlckRyYWdnYWJsZSB7XHJcbiAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XHJcbiAgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlO1xyXG4gIGxhc3RNb3VzZToge1xyXG4gICAgY2xpZW50WDogbnVtYmVyO1xyXG4gICAgY2xpZW50WTogbnVtYmVyO1xyXG4gIH07XHJcbiAgb2Zmc2V0TGVmdCE6IG51bWJlcjtcclxuICBvZmZzZXRUb3AhOiBudW1iZXI7XHJcbiAgbWFyZ2luITogbnVtYmVyO1xyXG4gIG91dGVyTWFyZ2luVG9wITogbnVtYmVyIHwgbnVsbDtcclxuICBvdXRlck1hcmdpblJpZ2h0ITogbnVtYmVyIHwgbnVsbDtcclxuICBvdXRlck1hcmdpbkJvdHRvbSE6IG51bWJlciB8IG51bGw7XHJcbiAgb3V0ZXJNYXJnaW5MZWZ0ITogbnVtYmVyIHwgbnVsbDtcclxuICBkaWZmVG9wITogbnVtYmVyO1xyXG4gIGRpZmZMZWZ0ITogbnVtYmVyO1xyXG4gIG9yaWdpbmFsQ2xpZW50WCE6IG51bWJlcjtcclxuICBvcmlnaW5hbENsaWVudFkhOiBudW1iZXI7XHJcbiAgdG9wITogbnVtYmVyO1xyXG4gIGxlZnQhOiBudW1iZXI7XHJcbiAgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIHdpZHRoITogbnVtYmVyO1xyXG4gIHBvc2l0aW9uWCE6IG51bWJlcjtcclxuICBwb3NpdGlvblkhOiBudW1iZXI7XHJcbiAgcG9zaXRpb25YQmFja3VwITogbnVtYmVyO1xyXG4gIHBvc2l0aW9uWUJhY2t1cCE6IG51bWJlcjtcclxuICBlbmFibGVkITogYm9vbGVhbjtcclxuICBtb3VzZW1vdmUhOiAoKSA9PiB2b2lkO1xyXG4gIG1vdXNldXAhOiAoKSA9PiB2b2lkO1xyXG4gIG1vdXNlbGVhdmUhOiAoKSA9PiB2b2lkO1xyXG4gIGNhbmNlbE9uQmx1ciE6ICgpID0+IHZvaWQ7XHJcbiAgdG91Y2htb3ZlITogKCkgPT4gdm9pZDtcclxuICB0b3VjaGVuZCE6ICgpID0+IHZvaWQ7XHJcbiAgdG91Y2hjYW5jZWwhOiAoKSA9PiB2b2lkO1xyXG4gIG1vdXNlZG93biE6ICgpID0+IHZvaWQ7XHJcbiAgdG91Y2hzdGFydCE6ICgpID0+IHZvaWQ7XHJcbiAgcHVzaCE6IEdyaWRzdGVyUHVzaDtcclxuICBzd2FwITogR3JpZHN0ZXJTd2FwO1xyXG4gIHBhdGg6IEFycmF5PHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT47XHJcbiAgY29sbGlzaW9uOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UgfCBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXHJcbiAgICBncmlkc3RlcjogR3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxyXG4gICkge1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0gPSBncmlkc3Rlckl0ZW07XHJcbiAgICB0aGlzLmdyaWRzdGVyID0gZ3JpZHN0ZXI7XHJcbiAgICB0aGlzLmxhc3RNb3VzZSA9IHtcclxuICAgICAgY2xpZW50WDogMCxcclxuICAgICAgY2xpZW50WTogMFxyXG4gICAgfTtcclxuICAgIHRoaXMucGF0aCA9IFtdO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSh0cnVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtID0gdGhpcy5ncmlkc3RlciA9IHRoaXMuY29sbGlzaW9uID0gbnVsbCE7XHJcbiAgICBpZiAodGhpcy5tb3VzZWRvd24pIHtcclxuICAgICAgdGhpcy5tb3VzZWRvd24oKTtcclxuICAgICAgdGhpcy50b3VjaHN0YXJ0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnU3RhcnQoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKGUud2hpY2ggJiYgZS53aGljaCAhPT0gMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZHJhZ2dhYmxlICYmXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5kcmFnZ2FibGUuc3RhcnRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZHJhZ2dhYmxlLnN0YXJ0KFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0sXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0sXHJcbiAgICAgICAgZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICAgJ2RvY3VtZW50JyxcclxuICAgICAgICAnbW91c2Vtb3ZlJyxcclxuICAgICAgICB0aGlzLmRyYWdNb3ZlXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMudG91Y2htb3ZlID0gdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5lbCxcclxuICAgICAgICAndG91Y2htb3ZlJyxcclxuICAgICAgICB0aGlzLmRyYWdNb3ZlXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMubW91c2V1cCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgJ2RvY3VtZW50JyxcclxuICAgICAgJ21vdXNldXAnLFxyXG4gICAgICB0aGlzLmRyYWdTdG9wXHJcbiAgICApO1xyXG4gICAgdGhpcy5tb3VzZWxlYXZlID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAnbW91c2VsZWF2ZScsXHJcbiAgICAgIHRoaXMuZHJhZ1N0b3BcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbmNlbE9uQmx1ciA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgJ3dpbmRvdycsXHJcbiAgICAgICdibHVyJyxcclxuICAgICAgdGhpcy5kcmFnU3RvcFxyXG4gICAgKTtcclxuICAgIHRoaXMudG91Y2hlbmQgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICd0b3VjaGVuZCcsXHJcbiAgICAgIHRoaXMuZHJhZ1N0b3BcclxuICAgICk7XHJcbiAgICB0aGlzLnRvdWNoY2FuY2VsID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAndG91Y2hjYW5jZWwnLFxyXG4gICAgICB0aGlzLmRyYWdTdG9wXHJcbiAgICApO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuYWRkQ2xhc3MoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICAnZ3JpZHN0ZXItaXRlbS1tb3ZpbmcnXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbjtcclxuICAgIHRoaXMub3V0ZXJNYXJnaW5Ub3AgPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luVG9wO1xyXG4gICAgdGhpcy5vdXRlck1hcmdpblJpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpblJpZ2h0O1xyXG4gICAgdGhpcy5vdXRlck1hcmdpbkJvdHRvbSA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b207XHJcbiAgICB0aGlzLm91dGVyTWFyZ2luTGVmdCA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5MZWZ0O1xyXG4gICAgdGhpcy5vZmZzZXRMZWZ0ID0gdGhpcy5ncmlkc3Rlci5lbC5zY3JvbGxMZWZ0IC0gdGhpcy5ncmlkc3Rlci5lbC5vZmZzZXRMZWZ0O1xyXG4gICAgdGhpcy5vZmZzZXRUb3AgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbFRvcCAtIHRoaXMuZ3JpZHN0ZXIuZWwub2Zmc2V0VG9wO1xyXG4gICAgdGhpcy5sZWZ0ID0gdGhpcy5ncmlkc3Rlckl0ZW0ubGVmdCAtIHRoaXMubWFyZ2luO1xyXG4gICAgdGhpcy50b3AgPSB0aGlzLmdyaWRzdGVySXRlbS50b3AgLSB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMub3JpZ2luYWxDbGllbnRYID0gZS5jbGllbnRYO1xyXG4gICAgdGhpcy5vcmlnaW5hbENsaWVudFkgPSBlLmNsaWVudFk7XHJcbiAgICB0aGlzLndpZHRoID0gdGhpcy5ncmlkc3Rlckl0ZW0ud2lkdGg7XHJcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmhlaWdodDtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTCkge1xyXG4gICAgICB0aGlzLmRpZmZMZWZ0ID1cclxuICAgICAgICBlLmNsaWVudFggLSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbFdpZHRoICsgdGhpcy5ncmlkc3Rlckl0ZW0ubGVmdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlmZkxlZnQgPSBlLmNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLm1hcmdpbiAtIHRoaXMubGVmdDtcclxuICAgIH1cclxuICAgIHRoaXMuZGlmZlRvcCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy5tYXJnaW4gLSB0aGlzLnRvcDtcclxuICAgIHRoaXMuZ3JpZHN0ZXIubW92aW5nSXRlbSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtO1xyXG4gICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUodHJ1ZSk7XHJcbiAgICB0aGlzLnB1c2ggPSBuZXcgR3JpZHN0ZXJQdXNoKHRoaXMuZ3JpZHN0ZXJJdGVtKTtcclxuICAgIHRoaXMuc3dhcCA9IG5ldyBHcmlkc3RlclN3YXAodGhpcy5ncmlkc3Rlckl0ZW0pO1xyXG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLmdyaWRzdGVyLnVwZGF0ZUdyaWQoKTtcclxuICAgIHRoaXMucGF0aC5wdXNoKHtcclxuICAgICAgeDogdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbS54IHx8IDAsXHJcbiAgICAgIHk6IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ueSB8fCAwXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRyYWdNb3ZlID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBHcmlkc3RlclV0aWxzLmNoZWNrVG91Y2hFdmVudChlKTtcclxuXHJcbiAgICAvLyBnZXQgdGhlIGRpcmVjdGlvbnMgb2YgdGhlIG1vdXNlIGV2ZW50XHJcbiAgICBsZXQgZGlyZWN0aW9ucyA9IHRoaXMuZ2V0RGlyZWN0aW9ucyhlKTtcclxuXHJcbiAgICBpZiAodGhpcy5ncmlkc3Rlci5vcHRpb25zLmVuYWJsZUJvdW5kYXJ5Q29udHJvbCkge1xyXG4gICAgICAvLyBwcmV2ZW50IG1vdmluZyB1cCBhdCB0aGUgdG9wIG9mIGdyaWRzdGVyXHJcbiAgICAgIGlmIChcclxuICAgICAgICBkaXJlY3Rpb25zLmluY2x1ZGVzKERpcmVjdGlvbi5VUCkgJiZcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgPFxyXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xyXG4gICAgICAgICAgICAodGhpcy5vdXRlck1hcmdpblRvcCA/PyB0aGlzLm1hcmdpbilcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGlyZWN0aW9ucyA9IGRpcmVjdGlvbnMuZmlsdGVyKGRpcmVjdGlvbiA9PiBkaXJlY3Rpb24gIT0gRGlyZWN0aW9uLlVQKTtcclxuICAgICAgICBlID0gbmV3IE1vdXNlRXZlbnQoZS50eXBlLCB7XHJcbiAgICAgICAgICBjbGllbnRYOiBlLmNsaWVudFgsXHJcbiAgICAgICAgICBjbGllbnRZOiB0aGlzLmxhc3RNb3VzZS5jbGllbnRZXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gcHJldmVudCBtb3ZpbmcgbGVmdCBhdCB0aGUgbGVmdG1vc3QgY29sdW1uIG9mIGdyaWRzdGVyXHJcbiAgICAgIGlmIChcclxuICAgICAgICBkaXJlY3Rpb25zLmluY2x1ZGVzKERpcmVjdGlvbi5MRUZUKSAmJlxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgPFxyXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICtcclxuICAgICAgICAgICAgKHRoaXMub3V0ZXJNYXJnaW5MZWZ0ID8/IHRoaXMubWFyZ2luKVxyXG4gICAgICApIHtcclxuICAgICAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICBkaXJlY3Rpb24gPT4gZGlyZWN0aW9uICE9IERpcmVjdGlvbi5MRUZUXHJcbiAgICAgICAgKTtcclxuICAgICAgICBlID0gbmV3IE1vdXNlRXZlbnQoZS50eXBlLCB7XHJcbiAgICAgICAgICBjbGllbnRYOiB0aGlzLmxhc3RNb3VzZS5jbGllbnRYLFxyXG4gICAgICAgICAgY2xpZW50WTogZS5jbGllbnRZXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gcHJldmVudCBtb3ZpbmcgcmlnaHQgYXQgdGhlIHJpZ2h0bW9zdCBjb2x1bW4gb2YgZ3JpZHN0ZXJcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRpcmVjdGlvbnMuaW5jbHVkZXMoRGlyZWN0aW9uLlJJR0hUKSAmJlxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0ID5cclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgLVxyXG4gICAgICAgICAgICAodGhpcy5vdXRlck1hcmdpblJpZ2h0ID8/IHRoaXMubWFyZ2luKVxyXG4gICAgICApIHtcclxuICAgICAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICBkaXJlY3Rpb24gPT4gZGlyZWN0aW9uICE9IERpcmVjdGlvbi5SSUdIVFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZSA9IG5ldyBNb3VzZUV2ZW50KGUudHlwZSwge1xyXG4gICAgICAgICAgY2xpZW50WDogdGhpcy5sYXN0TW91c2UuY2xpZW50WCxcclxuICAgICAgICAgIGNsaWVudFk6IGUuY2xpZW50WVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHByZXZlbnQgbW92aW5nIGRvd24gYXQgdGhlIGJvdHRvbSBvZiBncmlkc3RlclxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZGlyZWN0aW9ucy5pbmNsdWRlcyhEaXJlY3Rpb24uRE9XTikgJiZcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gPlxyXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSBcclxuICAgICAgICAgICAgKHRoaXMub3V0ZXJNYXJnaW5Cb3R0b20gPz8gdGhpcy5tYXJnaW4pXHJcbiAgICAgICkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zLmZpbHRlcihcclxuICAgICAgICAgIGRpcmVjdGlvbiA9PiBkaXJlY3Rpb24gIT0gRGlyZWN0aW9uLkRPV05cclxuICAgICAgICApO1xyXG4gICAgICAgIGUgPSBuZXcgTW91c2VFdmVudChlLnR5cGUsIHtcclxuICAgICAgICAgIGNsaWVudFg6IGUuY2xpZW50WCxcclxuICAgICAgICAgIGNsaWVudFk6IHRoaXMubGFzdE1vdXNlLmNsaWVudFlcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvIG5vdCBjaGFuZ2UgaXRlbSBsb2NhdGlvbiB3aGVuIHRoZXJlIGlzIG5vIGRpcmVjdGlvbiB0byBnb1xyXG4gICAgaWYgKGRpcmVjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMub2Zmc2V0TGVmdCA9XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5lbC5zY3JvbGxMZWZ0IC0gdGhpcy5ncmlkc3Rlci5lbC5vZmZzZXRMZWZ0O1xyXG4gICAgICB0aGlzLm9mZnNldFRvcCA9IHRoaXMuZ3JpZHN0ZXIuZWwuc2Nyb2xsVG9wIC0gdGhpcy5ncmlkc3Rlci5lbC5vZmZzZXRUb3A7XHJcbiAgICAgIHNjcm9sbChcclxuICAgICAgICB0aGlzLmdyaWRzdGVyLFxyXG4gICAgICAgIHRoaXMubGVmdCxcclxuICAgICAgICB0aGlzLnRvcCxcclxuICAgICAgICB0aGlzLndpZHRoLFxyXG4gICAgICAgIHRoaXMuaGVpZ2h0LFxyXG4gICAgICAgIGUsXHJcbiAgICAgICAgdGhpcy5sYXN0TW91c2UsXHJcbiAgICAgICAgPGFueT50aGlzLmNhbGN1bGF0ZUl0ZW1Qb3NpdGlvbkZyb21Nb3VzZVBvc2l0aW9uXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNhbGN1bGF0ZUl0ZW1Qb3NpdGlvbkZyb21Nb3VzZVBvc2l0aW9uKGUpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNhbGN1bGF0ZUl0ZW1Qb3NpdGlvbkZyb21Nb3VzZVBvc2l0aW9uID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLm9wdGlvbnMuc2NhbGUpIHtcclxuICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtUG9zaXRpb25XaXRoU2NhbGUoZSwgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnNjYWxlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlSXRlbVBvc2l0aW9uV2l0aG91dFNjYWxlKGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYWxjdWxhdGVJdGVtUG9zaXRpb24oKTtcclxuICAgIHRoaXMubGFzdE1vdXNlLmNsaWVudFggPSBlLmNsaWVudFg7XHJcbiAgICB0aGlzLmxhc3RNb3VzZS5jbGllbnRZID0gZS5jbGllbnRZO1xyXG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIudXBkYXRlR3JpZCgpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY2FsY3VsYXRlSXRlbVBvc2l0aW9uV2l0aFNjYWxlKGU6IE1vdXNlRXZlbnQsIHNjYWxlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTCkge1xyXG4gICAgICB0aGlzLmxlZnQgPVxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuZWwuc2Nyb2xsV2lkdGggLVxyXG4gICAgICAgIHRoaXMub3JpZ2luYWxDbGllbnRYICtcclxuICAgICAgICAoZS5jbGllbnRYIC0gdGhpcy5vcmlnaW5hbENsaWVudFgpIC8gc2NhbGUgK1xyXG4gICAgICAgIHRoaXMuZGlmZkxlZnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxlZnQgPVxyXG4gICAgICAgIHRoaXMub3JpZ2luYWxDbGllbnRYICtcclxuICAgICAgICAoZS5jbGllbnRYIC0gdGhpcy5vcmlnaW5hbENsaWVudFgpIC8gc2NhbGUgK1xyXG4gICAgICAgIHRoaXMub2Zmc2V0TGVmdCAtXHJcbiAgICAgICAgdGhpcy5kaWZmTGVmdDtcclxuICAgIH1cclxuICAgIHRoaXMudG9wID1cclxuICAgICAgdGhpcy5vcmlnaW5hbENsaWVudFkgK1xyXG4gICAgICAoZS5jbGllbnRZIC0gdGhpcy5vcmlnaW5hbENsaWVudFkpIC8gc2NhbGUgK1xyXG4gICAgICB0aGlzLm9mZnNldFRvcCAtXHJcbiAgICAgIHRoaXMuZGlmZlRvcDtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZUl0ZW1Qb3NpdGlvbldpdGhvdXRTY2FsZShlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcclxuICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5ncmlkc3Rlci5lbC5zY3JvbGxXaWR0aCAtIGUuY2xpZW50WCArIHRoaXMuZGlmZkxlZnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxlZnQgPSBlLmNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLmRpZmZMZWZ0O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudG9wID0gZS5jbGllbnRZICsgdGhpcy5vZmZzZXRUb3AgLSB0aGlzLmRpZmZUb3A7XHJcbiAgfVxyXG5cclxuICBkcmFnU3RvcCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNhbmNlbFNjcm9sbCgpO1xyXG4gICAgdGhpcy5jYW5jZWxPbkJsdXIoKTtcclxuICAgIHRoaXMubW91c2Vtb3ZlKCk7XHJcbiAgICB0aGlzLm1vdXNldXAoKTtcclxuICAgIHRoaXMubW91c2VsZWF2ZSgpO1xyXG4gICAgdGhpcy50b3VjaG1vdmUoKTtcclxuICAgIHRoaXMudG91Y2hlbmQoKTtcclxuICAgIHRoaXMudG91Y2hjYW5jZWwoKTtcclxuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcclxuICAgICAgJ2dyaWRzdGVyLWl0ZW0tbW92aW5nJ1xyXG4gICAgKTtcclxuICAgIHRoaXMuZ3JpZHN0ZXIuZHJhZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIHRoaXMuZ3JpZHN0ZXIudXBkYXRlR3JpZCgpO1xyXG4gICAgdGhpcy5wYXRoID0gW107XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5kcmFnZ2FibGUgJiZcclxuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLmRyYWdnYWJsZS5zdG9wXHJcbiAgICApIHtcclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5kcmFnZ2FibGUuc3RvcChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0sXHJcbiAgICAgICAgICB0aGlzLmdyaWRzdGVySXRlbSxcclxuICAgICAgICAgIGVcclxuICAgICAgICApXHJcbiAgICAgICkudGhlbih0aGlzLm1ha2VEcmFnLCB0aGlzLmNhbmNlbERyYWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tYWtlRHJhZygpO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5tb3ZpbmdJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY2FuY2VsRHJhZyA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggPSB0aGlzLmdyaWRzdGVySXRlbS5pdGVtLnggfHwgMDtcclxuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgPSB0aGlzLmdyaWRzdGVySXRlbS5pdGVtLnkgfHwgMDtcclxuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLnNldFNpemUoKTtcclxuICAgIGlmICh0aGlzLnB1c2gpIHtcclxuICAgICAgdGhpcy5wdXNoLnJlc3RvcmVJdGVtcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3dhcCkge1xyXG4gICAgICB0aGlzLnN3YXAucmVzdG9yZVN3YXBJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wdXNoKSB7XHJcbiAgICAgIHRoaXMucHVzaC5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMucHVzaCA9IG51bGwhO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3dhcCkge1xyXG4gICAgICB0aGlzLnN3YXAuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLnN3YXAgPSBudWxsITtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBtYWtlRHJhZyA9ICgpOiB2b2lkID0+IHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kcmFnZ2FibGUuZHJvcE92ZXJJdGVtcyAmJlxyXG4gICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZHJhZ2dhYmxlICYmXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5kcmFnZ2FibGUuZHJvcE92ZXJJdGVtc0NhbGxiYWNrICYmXHJcbiAgICAgIHRoaXMuY29sbGlzaW9uICYmXHJcbiAgICAgIHRoaXMuY29sbGlzaW9uICE9PSB0cnVlICYmXHJcbiAgICAgIHRoaXMuY29sbGlzaW9uLiRpdGVtXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLmRyYWdnYWJsZS5kcm9wT3Zlckl0ZW1zQ2FsbGJhY2soXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbSxcclxuICAgICAgICB0aGlzLmNvbGxpc2lvbi5pdGVtLFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29sbGlzaW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5zZXRTaXplKCk7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5jaGVja0l0ZW1DaGFuZ2VzKFxyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSxcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbVxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLnB1c2gpIHtcclxuICAgICAgdGhpcy5wdXNoLnNldFB1c2hlZEl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zd2FwKSB7XHJcbiAgICAgIHRoaXMuc3dhcC5zZXRTd2FwSXRlbSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHVzaCkge1xyXG4gICAgICB0aGlzLnB1c2guZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLnB1c2ggPSBudWxsITtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnN3YXApIHtcclxuICAgICAgdGhpcy5zd2FwLmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5zd2FwID0gbnVsbCE7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY2FsY3VsYXRlSXRlbVBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkc3Rlci5tb3ZpbmdJdGVtID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW07XHJcbiAgICB0aGlzLnBvc2l0aW9uWCA9IHRoaXMuZ3JpZHN0ZXIucGl4ZWxzVG9Qb3NpdGlvblgodGhpcy5sZWZ0LCBNYXRoLnJvdW5kKTtcclxuICAgIHRoaXMucG9zaXRpb25ZID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWSh0aGlzLnRvcCwgTWF0aC5yb3VuZCk7XHJcbiAgICB0aGlzLnBvc2l0aW9uWEJhY2t1cCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLng7XHJcbiAgICB0aGlzLnBvc2l0aW9uWUJhY2t1cCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnk7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS54ID0gdGhpcy5wb3NpdGlvblg7XHJcbiAgICBpZiAodGhpcy5ncmlkc3Rlci5jaGVja0dyaWRDb2xsaXNpb24odGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0pKSB7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggPSB0aGlzLnBvc2l0aW9uWEJhY2t1cDtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgPSB0aGlzLnBvc2l0aW9uWTtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLmNoZWNrR3JpZENvbGxpc2lvbih0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSkpIHtcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSA9IHRoaXMucG9zaXRpb25ZQmFja3VwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncmlkc3Rlci5ncmlkUmVuZGVyZXIuc2V0Q2VsbFBvc2l0aW9uKFxyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlcixcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uZWwsXHJcbiAgICAgIHRoaXMubGVmdCxcclxuICAgICAgdGhpcy50b3BcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBvc2l0aW9uWEJhY2t1cCAhPT0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCB8fFxyXG4gICAgICB0aGlzLnBvc2l0aW9uWUJhY2t1cCAhPT0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGxhc3RQb3NpdGlvbiA9IHRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoIC0gMV07XHJcbiAgICAgIGxldCBkaXJlY3Rpb24gPSAnJztcclxuICAgICAgaWYgKGxhc3RQb3NpdGlvbi54IDwgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCkge1xyXG4gICAgICAgIGRpcmVjdGlvbiA9IHRoaXMucHVzaC5mcm9tV2VzdDtcclxuICAgICAgfSBlbHNlIGlmIChsYXN0UG9zaXRpb24ueCA+IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLngpIHtcclxuICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLnB1c2guZnJvbUVhc3Q7XHJcbiAgICAgIH0gZWxzZSBpZiAobGFzdFBvc2l0aW9uLnkgPCB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55KSB7XHJcbiAgICAgICAgZGlyZWN0aW9uID0gdGhpcy5wdXNoLmZyb21Ob3J0aDtcclxuICAgICAgfSBlbHNlIGlmIChsYXN0UG9zaXRpb24ueSA+IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkpIHtcclxuICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLnB1c2guZnJvbVNvdXRoO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHVzaC5wdXNoSXRlbXMoZGlyZWN0aW9uLCB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpc2FibGVQdXNoT25EcmFnKTtcclxuICAgICAgdGhpcy5zd2FwLnN3YXBJdGVtcygpO1xyXG4gICAgICB0aGlzLmNvbGxpc2lvbiA9IHRoaXMuZ3JpZHN0ZXIuY2hlY2tDb2xsaXNpb24odGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0pO1xyXG4gICAgICBpZiAodGhpcy5jb2xsaXNpb24pIHtcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS54ID0gdGhpcy5wb3NpdGlvblhCYWNrdXA7XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSA9IHRoaXMucG9zaXRpb25ZQmFja3VwO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZHJhZ2dhYmxlLmRyb3BPdmVySXRlbXMgJiZcclxuICAgICAgICAgIHRoaXMuY29sbGlzaW9uICE9PSB0cnVlICYmXHJcbiAgICAgICAgICB0aGlzLmNvbGxpc2lvbi4kaXRlbVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci5tb3ZpbmdJdGVtID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXRoLnB1c2goe1xyXG4gICAgICAgICAgeDogdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCxcclxuICAgICAgICAgIHk6IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnlcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnB1c2guY2hlY2tQdXNoQmFjaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gcmVzZXQgdGhlIGNvbGxpc2lvbiB3aGVuIHlvdSBkcmFnIGFuZCBkcm9wIG9uIGFuIGFkamFjZW50IGNlbGwgdGhhdCBpcyBub3QgZW1wdHlcclxuICAgICAgLy8gYW5kIGdvIGJhY2sgdG8gdGhlIGNlbGwgeW91IHdlcmUgaW4gZnJvbSB0aGUgYmVnaW5uaW5nLFxyXG4gICAgICAvLyB0aGlzIGlzIHRvIHByZXZlbnQgYGRyb3BPdmVySXRlbXNDYWxsYmFjaydcclxuICAgICAgdGhpcy5jb2xsaXNpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZW5hYmxlRHJhZyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmNhbkJlRHJhZ2dlZCgpO1xyXG4gICAgaWYgKCF0aGlzLmVuYWJsZWQgJiYgZW5hYmxlRHJhZykge1xyXG4gICAgICB0aGlzLmVuYWJsZWQgPSAhdGhpcy5lbmFibGVkO1xyXG4gICAgICB0aGlzLm1vdXNlZG93biA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcclxuICAgICAgICAnbW91c2Vkb3duJyxcclxuICAgICAgICB0aGlzLmRyYWdTdGFydERlbGF5XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMudG91Y2hzdGFydCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcclxuICAgICAgICAndG91Y2hzdGFydCcsXHJcbiAgICAgICAgdGhpcy5kcmFnU3RhcnREZWxheVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmVuYWJsZWQgJiYgIWVuYWJsZURyYWcpIHtcclxuICAgICAgdGhpcy5lbmFibGVkID0gIXRoaXMuZW5hYmxlZDtcclxuICAgICAgdGhpcy5tb3VzZWRvd24oKTtcclxuICAgICAgdGhpcy50b3VjaHN0YXJ0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnU3RhcnREZWxheSA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKEdSSURTVEVSX0lURU1fUkVTSVpBQkxFX0hBTkRMRVJfQ0xBU1MpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChHcmlkc3RlclV0aWxzLmNoZWNrQ29udGVudENsYXNzRm9yRXZlbnQodGhpcy5ncmlkc3RlciwgZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgR3JpZHN0ZXJVdGlscy5jaGVja1RvdWNoRXZlbnQoZSk7XHJcbiAgICBpZiAoIXRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZHJhZ2dhYmxlLmRlbGF5U3RhcnQpIHtcclxuICAgICAgdGhpcy5kcmFnU3RhcnQoZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5kcmFnU3RhcnQoZSk7XHJcbiAgICAgIGNhbmNlbERyYWcoKTtcclxuICAgIH0sIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZHJhZ2dhYmxlLmRlbGF5U3RhcnQpO1xyXG4gICAgY29uc3QgY2FuY2VsTW91c2UgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICdtb3VzZXVwJyxcclxuICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGNhbmNlbE1vdXNlTGVhdmUgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICdtb3VzZWxlYXZlJyxcclxuICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGNhbmNlbE9uQmx1ciA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgJ3dpbmRvdycsXHJcbiAgICAgICdibHVyJyxcclxuICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGNhbmNlbFRvdWNoTW92ZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgJ2RvY3VtZW50JyxcclxuICAgICAgJ3RvdWNobW92ZScsXHJcbiAgICAgIGNhbmNlbE1vdmVcclxuICAgICk7XHJcbiAgICBjb25zdCBjYW5jZWxUb3VjaEVuZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgJ2RvY3VtZW50JyxcclxuICAgICAgJ3RvdWNoZW5kJyxcclxuICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGNhbmNlbFRvdWNoQ2FuY2VsID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAndG91Y2hjYW5jZWwnLFxyXG4gICAgICBjYW5jZWxEcmFnXHJcbiAgICApO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNhbmNlbE1vdmUoZXZlbnRNb3ZlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAgIEdyaWRzdGVyVXRpbHMuY2hlY2tUb3VjaEV2ZW50KGV2ZW50TW92ZSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBNYXRoLmFicyhldmVudE1vdmUuY2xpZW50WCAtIGUuY2xpZW50WCkgPiA5IHx8XHJcbiAgICAgICAgTWF0aC5hYnMoZXZlbnRNb3ZlLmNsaWVudFkgLSBlLmNsaWVudFkpID4gOVxyXG4gICAgICApIHtcclxuICAgICAgICBjYW5jZWxEcmFnKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjYW5jZWxEcmFnKCk6IHZvaWQge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgIGNhbmNlbE9uQmx1cigpO1xyXG4gICAgICBjYW5jZWxNb3VzZSgpO1xyXG4gICAgICBjYW5jZWxNb3VzZUxlYXZlKCk7XHJcbiAgICAgIGNhbmNlbFRvdWNoTW92ZSgpO1xyXG4gICAgICBjYW5jZWxUb3VjaEVuZCgpO1xyXG4gICAgICBjYW5jZWxUb3VjaENhbmNlbCgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0aW9ucyBmb3IgZ2l2ZW4gbW91c2UgZXZlbnRcclxuICAgKiBAcGFyYW0gZSBNb3VzZSBldmVudFxyXG4gICAqICovXHJcbiAgcHJpdmF0ZSBnZXREaXJlY3Rpb25zKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGRpcmVjdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5sYXN0TW91c2UuY2xpZW50WCA9PT0gMCAmJiB0aGlzLmxhc3RNb3VzZS5jbGllbnRZID09PSAwKSB7XHJcbiAgICAgIHRoaXMubGFzdE1vdXNlLmNsaWVudFkgPSBlLmNsaWVudFk7XHJcbiAgICAgIHRoaXMubGFzdE1vdXNlLmNsaWVudFggPSBlLmNsaWVudFg7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sYXN0TW91c2UuY2xpZW50WSA+IGUuY2xpZW50WSkge1xyXG4gICAgICBkaXJlY3Rpb25zLnB1c2goRGlyZWN0aW9uLlVQKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxhc3RNb3VzZS5jbGllbnRZIDwgZS5jbGllbnRZKSB7XHJcbiAgICAgIGRpcmVjdGlvbnMucHVzaChEaXJlY3Rpb24uRE9XTik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sYXN0TW91c2UuY2xpZW50WCA8IGUuY2xpZW50WCkge1xyXG4gICAgICBkaXJlY3Rpb25zLnB1c2goRGlyZWN0aW9uLlJJR0hUKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxhc3RNb3VzZS5jbGllbnRYID4gZS5jbGllbnRYKSB7XHJcbiAgICAgIGRpcmVjdGlvbnMucHVzaChEaXJlY3Rpb24uTEVGVCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlyZWN0aW9ucztcclxuICB9XHJcbn1cclxuIl19
|