@acorex/layout 3.0.65 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/acorex-layout.d.ts +1 -2
- package/esm2020/acorex-layout.mjs +5 -0
- package/esm2020/lib/widget-board/editors/widget-size-editor/widget-size.editor.mjs +46 -0
- package/esm2020/lib/widget-board/editors/widget-size-editor/widget-size.module.mjs +21 -0
- package/esm2020/lib/widget-board/widget-board.component.mjs +441 -0
- package/esm2020/lib/widget-board/widget-board.module.mjs +111 -0
- package/esm2020/lib/widget-board/widget-config.component.mjs +82 -0
- package/esm2020/lib/widget-board/widget-host.component.mjs +290 -0
- package/esm2020/lib/widget-board/widget-save.component.mjs +79 -0
- package/esm2020/lib/widget-board/widget.class.mjs +127 -0
- package/esm2020/public-api.mjs +7 -0
- package/fesm2015/acorex-layout.mjs +1166 -0
- package/fesm2015/acorex-layout.mjs.map +1 -0
- package/fesm2020/acorex-layout.mjs +1159 -0
- package/fesm2020/acorex-layout.mjs.map +1 -0
- package/lib/widget-board/editors/widget-size-editor/widget-size.editor.d.ts +3 -0
- package/lib/widget-board/editors/widget-size-editor/widget-size.module.d.ts +8 -0
- package/lib/widget-board/widget-board.component.d.ts +3 -0
- package/lib/widget-board/widget-board.module.d.ts +12 -0
- package/lib/widget-board/widget-config.component.d.ts +3 -0
- package/lib/widget-board/widget-host.component.d.ts +3 -0
- package/lib/widget-board/widget-save.component.d.ts +3 -0
- package/lib/widget-board/widget.class.d.ts +3 -0
- package/package.json +23 -13
- package/acorex-layout.metadata.json +0 -1
- package/bundles/acorex-layout.umd.js +0 -1487
- package/bundles/acorex-layout.umd.js.map +0 -1
- package/bundles/acorex-layout.umd.min.js +0 -16
- package/bundles/acorex-layout.umd.min.js.map +0 -1
- package/esm2015/acorex-layout.js +0 -7
- package/esm2015/lib/widget-board/editors/widget-size-editor/widget-size.editor.js +0 -49
- package/esm2015/lib/widget-board/editors/widget-size-editor/widget-size.module.js +0 -19
- package/esm2015/lib/widget-board/widget-board.component.js +0 -468
- package/esm2015/lib/widget-board/widget-board.module.js +0 -67
- package/esm2015/lib/widget-board/widget-config.component.js +0 -86
- package/esm2015/lib/widget-board/widget-host.component.js +0 -323
- package/esm2015/lib/widget-board/widget-save.component.js +0 -79
- package/esm2015/lib/widget-board/widget.class.js +0 -123
- package/esm2015/public-api.js +0 -7
- package/esm5/acorex-layout.js +0 -7
- package/esm5/lib/widget-board/editors/widget-size-editor/widget-size.editor.js +0 -52
- package/esm5/lib/widget-board/editors/widget-size-editor/widget-size.module.js +0 -22
- package/esm5/lib/widget-board/widget-board.component.js +0 -494
- package/esm5/lib/widget-board/widget-board.module.js +0 -68
- package/esm5/lib/widget-board/widget-config.component.js +0 -90
- package/esm5/lib/widget-board/widget-host.component.js +0 -359
- package/esm5/lib/widget-board/widget-save.component.js +0 -83
- package/esm5/lib/widget-board/widget.class.js +0 -134
- package/esm5/public-api.js +0 -7
- package/fesm2015/acorex-layout.js +0 -1177
- package/fesm2015/acorex-layout.js.map +0 -1
- package/fesm5/acorex-layout.js +0 -1264
- package/fesm5/acorex-layout.js.map +0 -1
@@ -1,494 +0,0 @@
|
|
1
|
-
import { __decorate, __metadata, __read, __spread } from "tslib";
|
2
|
-
import { Component, OnInit, Input, ViewEncapsulation, ElementRef, ViewChild, NgZone, ChangeDetectionStrategy, ChangeDetectorRef, Output, EventEmitter, ViewChildren, QueryList } from '@angular/core';
|
3
|
-
import { AXWidgetHostComponent } from './widget-host.component';
|
4
|
-
import { AXHtmlUtil, AXClientRec } from '@acorex/core';
|
5
|
-
import { Observable } from 'rxjs';
|
6
|
-
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
7
|
-
var AXWidgetBoardComponent = /** @class */ (function () {
|
8
|
-
function AXWidgetBoardComponent(ref, zone, cdr) {
|
9
|
-
this.ref = ref;
|
10
|
-
this.zone = zone;
|
11
|
-
this.cdr = cdr;
|
12
|
-
this.widgets = [];
|
13
|
-
this.galleryItems = [];
|
14
|
-
this.tileSize = 80;
|
15
|
-
this.gapSize = 5;
|
16
|
-
this.newWidget = null;
|
17
|
-
this._isInEditing = false;
|
18
|
-
this.isDragging = false;
|
19
|
-
this.DATA_COL = 'data-col';
|
20
|
-
this.DATA_ROW = 'data-row';
|
21
|
-
this.DATA_SIZE_X = 'data-size-x';
|
22
|
-
this.DATA_SIZE_Y = 'data-size-y';
|
23
|
-
this.DATA_OLD_COL = 'data-old-col';
|
24
|
-
this.DATA_OLD_ROW = 'data-old-row';
|
25
|
-
this.onConfigChanged = new EventEmitter();
|
26
|
-
this.onWidgetSave = new EventEmitter();
|
27
|
-
}
|
28
|
-
AXWidgetBoardComponent.prototype.isInEditing = function () {
|
29
|
-
return this._isInEditing;
|
30
|
-
};
|
31
|
-
AXWidgetBoardComponent.prototype.ngOnInit = function () {
|
32
|
-
if (this.rtl == null) {
|
33
|
-
this.rtl = window.getComputedStyle(this.ref.nativeElement, null).getPropertyValue('direction') === 'rtl';
|
34
|
-
}
|
35
|
-
};
|
36
|
-
AXWidgetBoardComponent.prototype.ngAfterViewInit = function () {
|
37
|
-
var _this = this;
|
38
|
-
this.zone.runOutsideAngular(function (c) {
|
39
|
-
var style = document.createElement('style');
|
40
|
-
style.type = 'text/css';
|
41
|
-
_this.ref.nativeElement.appendChild(style);
|
42
|
-
// add css data classes
|
43
|
-
for (var i = 1; i <= 50; i++) {
|
44
|
-
style.innerHTML += "[" + _this.DATA_COL + "=\"" + i + "\"] { " + (_this.rtl ? 'right' : 'left') + ": " + (i - 1) * (_this.tileSize + _this.gapSize) + "px; }";
|
45
|
-
style.innerHTML += "[" + _this.DATA_ROW + "=\"" + i + "\"] { top: " + (i - 1) * (_this.tileSize + _this.gapSize) + "px; }";
|
46
|
-
style.innerHTML += "[" + _this.DATA_SIZE_X + "=\"" + i + "\"] { width: " + ((i * _this.tileSize) + ((i - 1) * _this.gapSize)) + "px; }";
|
47
|
-
style.innerHTML += "[" + _this.DATA_SIZE_Y + "=\"" + i + "\"] { height: " + ((i * _this.tileSize) + ((i - 1) * _this.gapSize)) + "px; }";
|
48
|
-
}
|
49
|
-
});
|
50
|
-
};
|
51
|
-
AXWidgetBoardComponent.prototype.calcGridSize = function () {
|
52
|
-
var _this = this;
|
53
|
-
this.zone.runOutsideAngular(function () {
|
54
|
-
var width = (Math.max.apply(Math, __spread(_this.widgets.map(function (c) { return c.col + c.sizeX - 1; })))) * (_this.tileSize + _this.gapSize);
|
55
|
-
var height = (Math.max.apply(Math, __spread(_this.widgets.map(function (c) { return c.row + c.sizeY - 1; })))) * (_this.tileSize + _this.gapSize);
|
56
|
-
_this.container.nativeElement.style.width = width + 'px';
|
57
|
-
_this.container.nativeElement.style.height = height + 'px';
|
58
|
-
});
|
59
|
-
};
|
60
|
-
AXWidgetBoardComponent.prototype.toggleEdit = function () {
|
61
|
-
this._isInEditing ? this.finishEdit() : this.startEdit();
|
62
|
-
};
|
63
|
-
AXWidgetBoardComponent.prototype.dragStart = function (e) {
|
64
|
-
var _this = this;
|
65
|
-
e.preventDefault();
|
66
|
-
e.stopPropagation();
|
67
|
-
this.zone.runOutsideAngular(function () {
|
68
|
-
if (_this._isInEditing && e.which === 1) {
|
69
|
-
_this.dragItem = e.currentTarget;
|
70
|
-
_this.dragItem.setAttribute('data-x-offset', (_this.dragItem.offsetLeft - e.clientX).toString());
|
71
|
-
//
|
72
|
-
_this.dragItem.setAttribute('data-y-offset', (_this.dragItem.offsetTop - e.clientY).toString());
|
73
|
-
_this.dragItem.classList.add('widget-dragging');
|
74
|
-
_this.dragItem.classList.remove('animate__animated', 'animate__pulse');
|
75
|
-
}
|
76
|
-
});
|
77
|
-
return false;
|
78
|
-
};
|
79
|
-
AXWidgetBoardComponent.prototype.removePositionData = function () {
|
80
|
-
var _this = this;
|
81
|
-
this.zone.runOutsideAngular(function () {
|
82
|
-
if (_this.dragItem && _this._isInEditing && _this.dragItem.getAttribute(_this.DATA_OLD_COL) == null) {
|
83
|
-
_this.dragItem.setAttribute(_this.DATA_OLD_COL, _this.dragItem.getAttribute(_this.DATA_COL));
|
84
|
-
_this.dragItem.setAttribute(_this.DATA_OLD_ROW, _this.dragItem.getAttribute(_this.DATA_ROW));
|
85
|
-
_this.dragItem.removeAttribute(_this.DATA_COL);
|
86
|
-
_this.dragItem.removeAttribute(_this.DATA_ROW);
|
87
|
-
}
|
88
|
-
});
|
89
|
-
};
|
90
|
-
AXWidgetBoardComponent.prototype.resetPositionData = function () {
|
91
|
-
var _this = this;
|
92
|
-
this.zone.runOutsideAngular(function () {
|
93
|
-
if (_this.dragItem && _this._isInEditing) {
|
94
|
-
_this.setPosition(_this.dragItem, _this.dragItem.getAttribute(_this.DATA_OLD_COL), _this.dragItem.getAttribute(_this.DATA_OLD_ROW));
|
95
|
-
}
|
96
|
-
});
|
97
|
-
};
|
98
|
-
AXWidgetBoardComponent.prototype.setPosition = function (element, col, row) {
|
99
|
-
var _this = this;
|
100
|
-
this.zone.runOutsideAngular(function () {
|
101
|
-
element.setAttribute(_this.DATA_COL, col);
|
102
|
-
element.setAttribute(_this.DATA_ROW, row);
|
103
|
-
element.removeAttribute(_this.DATA_OLD_COL);
|
104
|
-
element.removeAttribute(_this.DATA_OLD_ROW);
|
105
|
-
element.style.removeProperty('top');
|
106
|
-
element.style.removeProperty('left');
|
107
|
-
var widget = _this.widgets.find(function (c) { return c['__meta__'].instance.element === element; });
|
108
|
-
widget.col = Number(col);
|
109
|
-
widget.row = Number(row);
|
110
|
-
});
|
111
|
-
};
|
112
|
-
AXWidgetBoardComponent.prototype.drag = function (e) {
|
113
|
-
var _this = this;
|
114
|
-
e.preventDefault();
|
115
|
-
e.stopPropagation();
|
116
|
-
this.zone.runOutsideAngular(function () {
|
117
|
-
if (_this.dragItem && _this._isInEditing) {
|
118
|
-
_this.isDragging = true;
|
119
|
-
_this.addPlaceholder();
|
120
|
-
var xOffset = Number(_this.dragItem.getAttribute('data-x-offset'));
|
121
|
-
var yOffset = Number(_this.dragItem.getAttribute('data-y-offset'));
|
122
|
-
_this.dragItem.style.left = e.clientX + xOffset + 'px';
|
123
|
-
_this.dragItem.style.top = e.clientY + yOffset + 'px';
|
124
|
-
//
|
125
|
-
_this.detectBestPlacement();
|
126
|
-
_this.removePositionData();
|
127
|
-
}
|
128
|
-
});
|
129
|
-
return false;
|
130
|
-
};
|
131
|
-
AXWidgetBoardComponent.prototype.dragEnd = function (e) {
|
132
|
-
var _this = this;
|
133
|
-
this.zone.runOutsideAngular(function () {
|
134
|
-
if (_this.dragItem && _this._isInEditing && _this.isDragging) {
|
135
|
-
_this.dragItem.classList.remove('widget-dragging');
|
136
|
-
_this.dragItem.classList.add('animate__animated', 'animate__pulse');
|
137
|
-
//
|
138
|
-
var p = _this.container.nativeElement.querySelector('.widget-blank-placeholder');
|
139
|
-
if (_this.newWidget) {
|
140
|
-
var w_1 = {
|
141
|
-
uniqueName: _this.newWidget.uniqueName,
|
142
|
-
component: _this.newWidget.component,
|
143
|
-
title: _this.newWidget.title,
|
144
|
-
options: _this.newWidget.options,
|
145
|
-
sizeX: _this.newWidget.sizeX,
|
146
|
-
sizeY: _this.newWidget.sizeY,
|
147
|
-
col: Number(p.getAttribute(_this.DATA_COL)),
|
148
|
-
row: Number(p.getAttribute(_this.DATA_ROW))
|
149
|
-
};
|
150
|
-
_this.widgets.push(w_1);
|
151
|
-
_this.newWidget = null;
|
152
|
-
_this.container.nativeElement.removeChild(_this.dragItem);
|
153
|
-
_this.zone.run(function () {
|
154
|
-
_this.cdr.detectChanges();
|
155
|
-
_this.calcGridSize();
|
156
|
-
setTimeout(function () {
|
157
|
-
w_1['__meta__'].instance.element.addEventListener('mousedown', _this.dragStart.bind(_this), false);
|
158
|
-
}, 1000);
|
159
|
-
});
|
160
|
-
}
|
161
|
-
else {
|
162
|
-
if (p) {
|
163
|
-
_this.setPosition(_this.dragItem, p.getAttribute(_this.DATA_COL), p.getAttribute(_this.DATA_ROW));
|
164
|
-
}
|
165
|
-
else {
|
166
|
-
_this.setPosition(_this.dragItem, _this.dragItem.getAttribute(_this.DATA_OLD_COL), _this.dragItem.getAttribute(_this.DATA_OLD_ROW));
|
167
|
-
}
|
168
|
-
}
|
169
|
-
//
|
170
|
-
_this.removePlaceholder();
|
171
|
-
_this.dragItem = null;
|
172
|
-
_this.calcGridSize();
|
173
|
-
_this.emitConfigChanged();
|
174
|
-
}
|
175
|
-
_this.isDragging = false;
|
176
|
-
});
|
177
|
-
};
|
178
|
-
AXWidgetBoardComponent.prototype.detectFirstEmptySlot = function (w) {
|
179
|
-
var xTile = Math.floor(this.ref.nativeElement.parentElement.offsetWidth / this.tileSize);
|
180
|
-
for (var j = 1; j <= 100; j++) {
|
181
|
-
var _loop_1 = function (i) {
|
182
|
-
var rec = new AXClientRec({
|
183
|
-
left: i,
|
184
|
-
top: j,
|
185
|
-
width: w.sizeX,
|
186
|
-
height: w.sizeY
|
187
|
-
});
|
188
|
-
var el = this_1.widgets.filter(function (c) { return c !== w; }).find(function (c) {
|
189
|
-
return rec.intersect({
|
190
|
-
left: c.col,
|
191
|
-
top: c.row,
|
192
|
-
width: c.sizeX,
|
193
|
-
height: c.sizeY
|
194
|
-
});
|
195
|
-
});
|
196
|
-
if (el == null) {
|
197
|
-
w.col = i;
|
198
|
-
w.row = j;
|
199
|
-
return { value: void 0 };
|
200
|
-
}
|
201
|
-
};
|
202
|
-
var this_1 = this;
|
203
|
-
for (var i = 1; i <= xTile - w.sizeX; i++) {
|
204
|
-
var state_1 = _loop_1(i);
|
205
|
-
if (typeof state_1 === "object")
|
206
|
-
return state_1.value;
|
207
|
-
}
|
208
|
-
}
|
209
|
-
};
|
210
|
-
AXWidgetBoardComponent.prototype.detectBestPlacement = function () {
|
211
|
-
var _this = this;
|
212
|
-
this.zone.runOutsideAngular(function () {
|
213
|
-
var p = _this.container.nativeElement.querySelector('.widget-blank-placeholder');
|
214
|
-
var col = Math.ceil(_this.dragItem.offsetLeft / _this.tileSize);
|
215
|
-
if (_this.rtl) {
|
216
|
-
col = Math.ceil((_this.container.nativeElement.clientWidth - (_this.dragItem.offsetLeft + _this.dragItem.clientWidth)) / _this.tileSize);
|
217
|
-
}
|
218
|
-
var row = Math.ceil(_this.dragItem.offsetTop / _this.tileSize);
|
219
|
-
if (col < 1) {
|
220
|
-
col = 1;
|
221
|
-
}
|
222
|
-
if (row < 1) {
|
223
|
-
row = 1;
|
224
|
-
}
|
225
|
-
var widgets = Array.from(_this.ref.nativeElement.querySelectorAll('.widget-host')).map(function (c) { return c; });
|
226
|
-
p.setAttribute(_this.DATA_COL, col.toString());
|
227
|
-
p.setAttribute(_this.DATA_ROW, row.toString());
|
228
|
-
var collision = widgets.filter(function (c) { return c !== _this.dragItem; }).some(function (c) { return AXHtmlUtil.collision(c, _this.dragItem); });
|
229
|
-
if (collision) {
|
230
|
-
_this.removePlaceholder();
|
231
|
-
}
|
232
|
-
});
|
233
|
-
};
|
234
|
-
AXWidgetBoardComponent.prototype.addPlaceholder = function () {
|
235
|
-
var _this = this;
|
236
|
-
this.zone.runOutsideAngular(function () {
|
237
|
-
_this.removePlaceholder();
|
238
|
-
if (_this.dragItem) {
|
239
|
-
var p = document.createElement('div');
|
240
|
-
p.classList.add('widget-blank-placeholder');
|
241
|
-
p.setAttribute(_this.DATA_COL, _this.dragItem.getAttribute(_this.DATA_COL));
|
242
|
-
p.setAttribute(_this.DATA_ROW, _this.dragItem.getAttribute(_this.DATA_ROW));
|
243
|
-
p.setAttribute(_this.DATA_SIZE_X, _this.dragItem.getAttribute(_this.DATA_SIZE_X));
|
244
|
-
p.setAttribute(_this.DATA_SIZE_Y, _this.dragItem.getAttribute(_this.DATA_SIZE_Y));
|
245
|
-
_this.container.nativeElement.appendChild(p);
|
246
|
-
}
|
247
|
-
});
|
248
|
-
};
|
249
|
-
AXWidgetBoardComponent.prototype.removePlaceholder = function () {
|
250
|
-
var _a;
|
251
|
-
var p = this.container.nativeElement.querySelector('.widget-blank-placeholder');
|
252
|
-
(_a = p) === null || _a === void 0 ? void 0 : _a.remove();
|
253
|
-
};
|
254
|
-
AXWidgetBoardComponent.prototype.startEdit = function () {
|
255
|
-
var _this = this;
|
256
|
-
this._isInEditing = true;
|
257
|
-
this.calcGridSize();
|
258
|
-
this.ref.nativeElement.classList.add('grid-background');
|
259
|
-
var bg = this.ref.nativeElement;
|
260
|
-
bg.style.setProperty('background-position', (this.rtl ? 'right' : 'left') + " top");
|
261
|
-
// tslint:disable-next-line: max-line-length
|
262
|
-
var pattern = "url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"" + (this.tileSize + this.gapSize) + "\" height=\"" + (this.tileSize + this.gapSize) + "\"> <rect style=\"fill: %23dadada\" x=\"" + (this.rtl ? this.gapSize : 0) + "\" width=\"" + this.tileSize + "\" height=\"" + this.tileSize + "\" y=\"0\"></rect></svg>')";
|
263
|
-
bg.style.setProperty('background-image', pattern);
|
264
|
-
//
|
265
|
-
var widgets = Array.from(this.ref.nativeElement.querySelectorAll('.widget-host'));
|
266
|
-
widgets.forEach(function (w) {
|
267
|
-
w.addEventListener('mousedown', _this.dragStart.bind(_this), false);
|
268
|
-
});
|
269
|
-
this.ref.nativeElement.addEventListener('mousemove', this.drag.bind(this), false);
|
270
|
-
this.ref.nativeElement.addEventListener('mouseup', this.dragEnd.bind(this), false);
|
271
|
-
};
|
272
|
-
AXWidgetBoardComponent.prototype.finishEdit = function () {
|
273
|
-
var _this = this;
|
274
|
-
this.ref.nativeElement.classList.remove('grid-background');
|
275
|
-
var bg = this.ref.nativeElement;
|
276
|
-
bg.style.removeProperty('background-image');
|
277
|
-
//
|
278
|
-
this._isInEditing = false;
|
279
|
-
var widgets = Array.from(this.ref.nativeElement.querySelectorAll('.widget-host'));
|
280
|
-
widgets.forEach(function (w) {
|
281
|
-
w.removeEventListener('mousedown', _this.dragStart.bind(_this), false);
|
282
|
-
});
|
283
|
-
this.ref.nativeElement.removeEventListener('mousemove', this.drag.bind(this), false);
|
284
|
-
this.ref.nativeElement.removeEventListener('mouseup', this.dragEnd.bind(this), false);
|
285
|
-
this.emitConfigChanged();
|
286
|
-
};
|
287
|
-
AXWidgetBoardComponent.prototype.addWidget = function (widget) {
|
288
|
-
var _this = this;
|
289
|
-
this.zone.runOutsideAngular(function () {
|
290
|
-
_this.newWidget = {
|
291
|
-
uniqueName: widget.uniqueName,
|
292
|
-
component: widget.component,
|
293
|
-
title: widget.title,
|
294
|
-
col: 1,
|
295
|
-
row: 1,
|
296
|
-
sizeX: widget.sizeX,
|
297
|
-
sizeY: widget.sizeY,
|
298
|
-
options: widget.options,
|
299
|
-
props: widget.props
|
300
|
-
};
|
301
|
-
_this.detectFirstEmptySlot(_this.newWidget);
|
302
|
-
var w = {
|
303
|
-
uniqueName: _this.newWidget.uniqueName,
|
304
|
-
component: _this.newWidget.component,
|
305
|
-
title: _this.newWidget.title,
|
306
|
-
options: _this.newWidget.options,
|
307
|
-
props: _this.newWidget.props,
|
308
|
-
sizeX: _this.newWidget.sizeX,
|
309
|
-
sizeY: _this.newWidget.sizeY,
|
310
|
-
col: _this.newWidget.col,
|
311
|
-
row: _this.newWidget.row
|
312
|
-
};
|
313
|
-
_this.widgets.push(w);
|
314
|
-
_this.newWidget = null;
|
315
|
-
_this.zone.run(function () {
|
316
|
-
_this.cdr.detectChanges();
|
317
|
-
_this.calcGridSize();
|
318
|
-
_this.emitConfigChanged();
|
319
|
-
setTimeout(function () {
|
320
|
-
w['__meta__'].instance.element.addEventListener('mousedown', _this.dragStart.bind(_this), false);
|
321
|
-
}, 1000);
|
322
|
-
});
|
323
|
-
});
|
324
|
-
};
|
325
|
-
AXWidgetBoardComponent.prototype.handleOnRemove = function (w) {
|
326
|
-
var _this = this;
|
327
|
-
w.element.classList.add('animate__animated', 'animate__zoomOut');
|
328
|
-
w.element.addEventListener('animationend', function () {
|
329
|
-
_this.widgets = _this.widgets.filter(function (c) { return c.__meta__.id !== w.config.__meta__.id; });
|
330
|
-
_this.cdr.detectChanges();
|
331
|
-
_this.calcGridSize();
|
332
|
-
_this.emitConfigChanged();
|
333
|
-
});
|
334
|
-
};
|
335
|
-
AXWidgetBoardComponent.prototype.handleOnSave = function (e) {
|
336
|
-
this.onWidgetSave.emit(e);
|
337
|
-
};
|
338
|
-
AXWidgetBoardComponent.prototype.trackByFn = function (index, item) {
|
339
|
-
var _a, _b;
|
340
|
-
if (!((_a = item['__meta__']) === null || _a === void 0 ? void 0 : _a.id)) {
|
341
|
-
item['__meta__'] = {};
|
342
|
-
item['__meta__'].id = AXHtmlUtil.getUID();
|
343
|
-
}
|
344
|
-
return (_b = item['__meta__']) === null || _b === void 0 ? void 0 : _b.id;
|
345
|
-
};
|
346
|
-
AXWidgetBoardComponent.prototype.load = function (widgets) {
|
347
|
-
var _this = this;
|
348
|
-
this.clear();
|
349
|
-
return new Promise(function (resolve, reject) {
|
350
|
-
if (widgets) {
|
351
|
-
var loadedWidgets_1 = [];
|
352
|
-
if (typeof widgets === 'string') {
|
353
|
-
try {
|
354
|
-
loadedWidgets_1.push.apply(loadedWidgets_1, __spread(JSON.parse(widgets)));
|
355
|
-
}
|
356
|
-
catch (error) {
|
357
|
-
reject('Invalid widget json data!');
|
358
|
-
}
|
359
|
-
}
|
360
|
-
else {
|
361
|
-
loadedWidgets_1.push.apply(loadedWidgets_1, __spread(widgets));
|
362
|
-
}
|
363
|
-
var intervalId_1 = -1;
|
364
|
-
var loadFunc = function () {
|
365
|
-
var _a;
|
366
|
-
if (_this.galleryItems && _this.galleryItems.length > 0) {
|
367
|
-
loadedWidgets_1.forEach(function (w) {
|
368
|
-
var gitem = _this.galleryItems.find(function (c) { return c.uniqueName === w.uniqueName; });
|
369
|
-
if (gitem) {
|
370
|
-
w.component = gitem.component;
|
371
|
-
if (gitem.props) {
|
372
|
-
w.props = JSON.parse(JSON.stringify(gitem.props));
|
373
|
-
}
|
374
|
-
}
|
375
|
-
});
|
376
|
-
(_a = _this.widgets).push.apply(_a, __spread(loadedWidgets_1));
|
377
|
-
window.clearInterval(intervalId_1);
|
378
|
-
_this.cdr.detectChanges();
|
379
|
-
resolve();
|
380
|
-
}
|
381
|
-
};
|
382
|
-
intervalId_1 = window.setInterval(loadFunc, 200);
|
383
|
-
}
|
384
|
-
else {
|
385
|
-
resolve();
|
386
|
-
}
|
387
|
-
});
|
388
|
-
};
|
389
|
-
AXWidgetBoardComponent.prototype.clear = function () {
|
390
|
-
if (this.widgets.length) {
|
391
|
-
this.widgets = [];
|
392
|
-
this.cdr.detectChanges();
|
393
|
-
this.emitConfigChanged();
|
394
|
-
}
|
395
|
-
};
|
396
|
-
AXWidgetBoardComponent.prototype.save = function () {
|
397
|
-
var obj = this.widgets.map(function (c) { return ({
|
398
|
-
uniqueName: c.uniqueName,
|
399
|
-
component: c.component,
|
400
|
-
title: c.title,
|
401
|
-
sizeX: c.sizeX,
|
402
|
-
sizeY: c.sizeY,
|
403
|
-
col: c.col,
|
404
|
-
row: c.row,
|
405
|
-
options: c.options,
|
406
|
-
props: c.props
|
407
|
-
}); });
|
408
|
-
return Promise.resolve(JSON.stringify(obj));
|
409
|
-
};
|
410
|
-
AXWidgetBoardComponent.prototype.refresh = function () {
|
411
|
-
this.widgetHosts.forEach(function (host) {
|
412
|
-
host.widget.refresh();
|
413
|
-
});
|
414
|
-
};
|
415
|
-
AXWidgetBoardComponent.prototype.handleOnConfigChanged = function (e) {
|
416
|
-
this.cdr.detectChanges();
|
417
|
-
this.emitConfigChanged();
|
418
|
-
};
|
419
|
-
AXWidgetBoardComponent.prototype.handleOnResizedChanged = function (e) {
|
420
|
-
this.detectFirstEmptySlot(e.config);
|
421
|
-
this.cdr.detectChanges();
|
422
|
-
this.emitConfigChanged();
|
423
|
-
};
|
424
|
-
AXWidgetBoardComponent.prototype.emitConfigChanged = function () {
|
425
|
-
var _this = this;
|
426
|
-
if (!this.resizeChangeObserver) {
|
427
|
-
this.resizeChangeObserver = new Observable();
|
428
|
-
Observable.create(function (observer) {
|
429
|
-
_this.resizeChangeObserver = observer;
|
430
|
-
})
|
431
|
-
.pipe(debounceTime(750))
|
432
|
-
.pipe(distinctUntilChanged())
|
433
|
-
.subscribe(function (c) {
|
434
|
-
_this.onConfigChanged.emit({
|
435
|
-
component: _this
|
436
|
-
});
|
437
|
-
});
|
438
|
-
}
|
439
|
-
this.resizeChangeObserver.next(new Date());
|
440
|
-
};
|
441
|
-
AXWidgetBoardComponent.ctorParameters = function () { return [
|
442
|
-
{ type: ElementRef },
|
443
|
-
{ type: NgZone },
|
444
|
-
{ type: ChangeDetectorRef }
|
445
|
-
]; };
|
446
|
-
__decorate([
|
447
|
-
ViewChild('container'),
|
448
|
-
__metadata("design:type", ElementRef)
|
449
|
-
], AXWidgetBoardComponent.prototype, "container", void 0);
|
450
|
-
__decorate([
|
451
|
-
ViewChildren(AXWidgetHostComponent),
|
452
|
-
__metadata("design:type", QueryList)
|
453
|
-
], AXWidgetBoardComponent.prototype, "widgetHosts", void 0);
|
454
|
-
__decorate([
|
455
|
-
Input(),
|
456
|
-
__metadata("design:type", Array)
|
457
|
-
], AXWidgetBoardComponent.prototype, "galleryItems", void 0);
|
458
|
-
__decorate([
|
459
|
-
Input(),
|
460
|
-
__metadata("design:type", Number)
|
461
|
-
], AXWidgetBoardComponent.prototype, "tileSize", void 0);
|
462
|
-
__decorate([
|
463
|
-
Input(),
|
464
|
-
__metadata("design:type", Number)
|
465
|
-
], AXWidgetBoardComponent.prototype, "gapSize", void 0);
|
466
|
-
__decorate([
|
467
|
-
Input(),
|
468
|
-
__metadata("design:type", Function)
|
469
|
-
], AXWidgetBoardComponent.prototype, "provideValue", void 0);
|
470
|
-
__decorate([
|
471
|
-
Output(),
|
472
|
-
__metadata("design:type", EventEmitter)
|
473
|
-
], AXWidgetBoardComponent.prototype, "onConfigChanged", void 0);
|
474
|
-
__decorate([
|
475
|
-
Output(),
|
476
|
-
__metadata("design:type", EventEmitter)
|
477
|
-
], AXWidgetBoardComponent.prototype, "onWidgetSave", void 0);
|
478
|
-
AXWidgetBoardComponent = __decorate([
|
479
|
-
Component({
|
480
|
-
selector: 'ax-widget-board',
|
481
|
-
template: "<div class=\"widgets-container\" [class.rtl]=\"rtl\" #container>\r\n <ax-widget-host *ngFor=\"let w of widgets;trackBy: trackByFn\" [config]='w' [sizeX]=\"w.sizeX\"\r\n [sizeY]=\"w.sizeY\" [col]=\"w.col\" [row]=\"w.row\" (onRemove)=\"handleOnRemove($event)\" (onSave)=\"handleOnSave($event)\"\r\n (onConfigChanged)=\"handleOnConfigChanged($event)\" (onResized)=\"handleOnResizedChanged($event)\"\r\n [provideValue]=\"provideValue\">\r\n </ax-widget-host>\r\n</div>\r\n",
|
482
|
-
host: { class: 'ax widget-board' },
|
483
|
-
encapsulation: ViewEncapsulation.None,
|
484
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
485
|
-
styles: [".widget-board{display:inline-block;margin:15px 20px;min-width:calc(100% - 40px);min-height:calc(100% - 34px);--animate-duration:0.5s;background-repeat:no-repeat}.widget-board.grid-background{background-repeat:repeat!important}.widget-board.grid-background .widgets-container .widget-host{touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.widget-board.grid-background .widgets-container .widget-host .widget-edit-overlay{display:block;cursor:move}.widget-board.grid-background .widgets-container .widget-host.widget-dragging{z-index:1000}.widget-board.grid-background .widgets-container .widget-host:focus{outline-width:1px;outline-style:solid;outline-color:var(--ax-primary-color)}.widget-board.grid-background .widget-blank-placeholder{background:var(--ax-primary-trans-light-color);position:absolute}.widget-board .widgets-container{position:relative;touch-action:none}.widget-board .widgets-container.rtl .widget-host .widget-options-menu{right:unset!important;left:0!important}.widget-board .widgets-container .widget-host{position:absolute;background:#fff;box-shadow:2px 2px 3px #dadada}.widget-board .widgets-container .widget-host .widget-content{width:100%;height:100%;display:flex;flex-direction:column}.widget-board .widgets-container .widget-host .widget-content .widget-title{padding:var(--ax-size-md);text-align:start;font-size:1.5em;position:absolute}.widget-board .widgets-container .widget-host .widget-edit-loading{display:none;background:rgba(255,255,255,.85);position:absolute;width:100%;height:100%;top:0;left:0;z-index:2;display:flex}.widget-board .widgets-container .widget-host .widget-config-overlay{position:absolute;background:#fff;width:100%;height:100%;top:0;left:0;z-index:1;padding:var(--ax-size-md);cursor:pointer}.widget-board .widgets-container .widget-host .widget-config-overlay:hover .widget-title{text-decoration:underline}.widget-board .widgets-container .widget-host .widget-config-overlay .widget-title{text-align:start;font-size:1.5em}.widget-board .widgets-container .widget-host .widget-config-overlay .widget-config-box{align-self:center;text-align:center;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--ax-gray-dark-color)}.widget-board .widgets-container .widget-host .widget-config-overlay .widget-config-box .config-title{font-size:1.2em;margin-bottom:var(--ax-size-md)}.widget-board .widgets-container .widget-host .widget-edit-overlay{display:none;background:rgba(255,255,255,.5);position:absolute;width:100%;height:100%;top:0;left:0;z-index:10}.widget-board .widgets-container .widget-host .widget-edit-overlay .widget-edit-menu{margin:6px;text-align:end;float:inline-end;opacity:1;transition:opacity 1s}.widget-board .widgets-container .widget-host .widget-edit-overlay .widget-edit-menu .widget-edit-menu-button{display:inline-block;background-color:#f0f0f0;border-radius:1px;border:2px solid #fff;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;padding:0;height:32px;width:32px;cursor:pointer;color:#666}.widget-board .widgets-container .widget-host .widget-edit-overlay .widget-edit-menu .widget-edit-menu-button:hover{border-color:#a6a6a6;background-color:#c8c8c8}.widget-board .widgets-container .widget-host .widget-options-menu{display:none;position:absolute;top:0;right:0;z-index:2;cursor:pointer;padding:2px 5px}.widget-board .widgets-container .widget-host .widget-options-menu:hover{background-color:#f0f0f0}.widget-board .widgets-container .widget-host .widget-container{padding:1px;height:100%}.widget-board .widgets-container .widget-host .widget-container:hover .widget-options-menu{display:block}"]
|
486
|
-
}),
|
487
|
-
__metadata("design:paramtypes", [ElementRef,
|
488
|
-
NgZone,
|
489
|
-
ChangeDetectorRef])
|
490
|
-
], AXWidgetBoardComponent);
|
491
|
-
return AXWidgetBoardComponent;
|
492
|
-
}());
|
493
|
-
export { AXWidgetBoardComponent };
|
494
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhY29yZXgvbGF5b3V0LyIsInNvdXJjZXMiOlsibGliL3dpZGdldC1ib2FyZC93aWRnZXQtYm9hcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUN0QyxNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVwRTtJQStDRSxnQ0FDVSxHQUErQixFQUMvQixJQUFZLEVBQ1osR0FBc0I7UUFGdEIsUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBMUNoQyxZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUcvQixpQkFBWSxHQUFxQixFQUFFLENBQUM7UUFHcEMsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUd0QixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBRVosY0FBUyxHQUFtQixJQUFJLENBQUM7UUFJakMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFJOUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQU1uQixhQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxVQUFVLENBQUM7UUFDdEIsZ0JB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ZUFBZSxDQUFDLElBQUksQ0FBQztvQkFDeEIsU0FBUyxFQUFFLEtBQUk7aUJBQ2hCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDOztnQkE1YWMsVUFBVTtnQkFDVCxNQUFNO2dCQUNQLGlCQUFpQjs7SUEvQ2hDO1FBREMsU0FBUyxDQUFDLFdBQVcsQ0FBQztrQ0FDSixVQUFVOzZEQUFpQjtJQUc5QztRQURDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztrQ0FDZixTQUFTOytEQUF3QjtJQUt0RDtRQURDLEtBQUssRUFBRTs7Z0VBQzRCO0lBR3BDO1FBREMsS0FBSyxFQUFFOzs0REFDYztJQUd0QjtRQURDLEtBQUssRUFBRTs7MkRBQ1k7SUFjcEI7UUFEQyxLQUFLLEVBQUU7O2dFQUNzQjtJQVc5QjtRQURDLE1BQU0sRUFBRTtrQ0FDUSxZQUFZO21FQUE4RTtJQUczRztRQURDLE1BQU0sRUFBRTtrQ0FDSyxZQUFZO2dFQUEwRTtJQTdDekYsc0JBQXNCO1FBUmxDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsNGZBQTRDO1lBRTVDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRTtZQUNsQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtZQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7U0FDaEQsQ0FBQzt5Q0FpRGUsVUFBVTtZQUNULE1BQU07WUFDUCxpQkFBaUI7T0FsRHJCLHNCQUFzQixDQTZkbEM7SUFBRCw2QkFBQztDQUFBLEFBN2RELElBNmRDO1NBN2RZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBFbGVtZW50UmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBOZ1pvbmUsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBWFdpZGdldENvbmZpZyxcclxuICBBWFdpZGdldENvbmZpZ0NoYW5nZWQsXHJcbiAgQVhXaWRnZXRCb2FyZENvbmZpZ0NoYW5nZWQsXHJcbiAgQVhXaWRnZXRDb25maWdTYXZlZEV2ZW50XHJcbn0gZnJvbSAnLi93aWRnZXQuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWFdpZGdldEhvc3RDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYSHRtbFV0aWwsIEFYQ2xpZW50UmVjIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdheC13aWRnZXQtYm9hcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3dpZGdldC1ib2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICdheCB3aWRnZXQtYm9hcmQnIH0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhXaWRnZXRCb2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpXHJcbiAgcHJpdmF0ZSBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKEFYV2lkZ2V0SG9zdENvbXBvbmVudClcclxuICBwcml2YXRlIHdpZGdldEhvc3RzOiBRdWVyeUxpc3Q8QVhXaWRnZXRIb3N0Q29tcG9uZW50PjtcclxuXHJcbiAgd2lkZ2V0czogQVhXaWRnZXRDb25maWdbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdhbGxlcnlJdGVtczogQVhXaWRnZXRDb25maWdbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRpbGVTaXplOiBudW1iZXIgPSA4MDtcclxuXHJcbiAgQElucHV0KClcclxuICBnYXBTaXplOiBudW1iZXIgPSA1O1xyXG5cclxuICBwcml2YXRlIG5ld1dpZGdldDogQVhXaWRnZXRDb25maWcgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgcnRsOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIF9pc0luRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0luRWRpdGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0luRWRpdGluZztcclxuICB9XHJcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkcmFnSXRlbTogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJvdmlkZVZhbHVlOiAoZTogYW55KSA9PiBhbnk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgREFUQV9DT0wgPSAnZGF0YS1jb2wnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgREFUQV9ST1cgPSAnZGF0YS1yb3cnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgREFUQV9TSVpFX1ggPSAnZGF0YS1zaXplLXgnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgREFUQV9TSVpFX1kgPSAnZGF0YS1zaXplLXknO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgREFUQV9PTERfQ09MID0gJ2RhdGEtb2xkLWNvbCc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBEQVRBX09MRF9ST1cgPSAnZGF0YS1vbGQtcm93JztcclxuXHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ29uZmlnQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYV2lkZ2V0Qm9hcmRDb25maWdDaGFuZ2VkPiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhXaWRnZXRCb2FyZENvbmZpZ0NoYW5nZWQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uV2lkZ2V0U2F2ZTogRXZlbnRFbWl0dGVyPEFYV2lkZ2V0Q29uZmlnU2F2ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYV2lkZ2V0Q29uZmlnU2F2ZWRFdmVudD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkgeyB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnJ0bCA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucnRsID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKChjKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcclxuICAgICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XHJcbiAgICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG4gICAgICAvLyBhZGQgY3NzIGRhdGEgY2xhc3Nlc1xyXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA1MDsgaSsrKSB7XHJcbiAgICAgICAgc3R5bGUuaW5uZXJIVE1MICs9IGBbJHt0aGlzLkRBVEFfQ09MfT1cIiR7aX1cIl0geyAgJHt0aGlzLnJ0bCA/ICdyaWdodCcgOiAnbGVmdCd9OiAkeyhpIC0gMSkgKiAodGhpcy50aWxlU2l6ZSArIHRoaXMuZ2FwU2l6ZSl9cHg7IH1gO1xyXG4gICAgICAgIHN0eWxlLmlubmVySFRNTCArPSBgWyR7dGhpcy5EQVRBX1JPV309XCIke2l9XCJdIHsgIHRvcDogJHsoaSAtIDEpICogKHRoaXMudGlsZVNpemUgKyB0aGlzLmdhcFNpemUpfXB4OyB9YDtcclxuICAgICAgICBzdHlsZS5pbm5lckhUTUwgKz0gYFske3RoaXMuREFUQV9TSVpFX1h9PVwiJHtpfVwiXSB7ICB3aWR0aDogICR7KGkgKiB0aGlzLnRpbGVTaXplKSArICgoaSAtIDEpICogdGhpcy5nYXBTaXplKX1weDsgfWA7XHJcbiAgICAgICAgc3R5bGUuaW5uZXJIVE1MICs9IGBbJHt0aGlzLkRBVEFfU0laRV9ZfT1cIiR7aX1cIl0geyAgaGVpZ2h0OiAkeyhpICogdGhpcy50aWxlU2l6ZSkgKyAoKGkgLSAxKSAqIHRoaXMuZ2FwU2l6ZSl9cHg7IH1gO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY0dyaWRTaXplKCkge1xyXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgY29uc3Qgd2lkdGggPVxyXG4gICAgICAgIChNYXRoLm1heCguLi50aGlzLndpZGdldHMubWFwKChjKSA9PiBjLmNvbCArIGMuc2l6ZVggLSAxKSkpICogKHRoaXMudGlsZVNpemUgKyB0aGlzLmdhcFNpemUpO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPVxyXG4gICAgICAgIChNYXRoLm1heCguLi50aGlzLndpZGdldHMubWFwKChjKSA9PiBjLnJvdyArIGMuc2l6ZVkgLSAxKSkpICogKHRoaXMudGlsZVNpemUgKyB0aGlzLmdhcFNpemUpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXQoKSB7XHJcbiAgICB0aGlzLl9pc0luRWRpdGluZyA/IHRoaXMuZmluaXNoRWRpdCgpIDogdGhpcy5zdGFydEVkaXQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBkcmFnU3RhcnQoZTogTW91c2VFdmVudCkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9pc0luRWRpdGluZyAmJiBlLndoaWNoID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5kcmFnSXRlbSA9IGUuY3VycmVudFRhcmdldCBhcyBhbnk7XHJcbiAgICAgICAgdGhpcy5kcmFnSXRlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEteC1vZmZzZXQnLCAodGhpcy5kcmFnSXRlbS5vZmZzZXRMZWZ0IC0gZS5jbGllbnRYKS50b1N0cmluZygpKTtcclxuICAgICAgICAvL1xyXG4gICAgICAgIHRoaXMuZHJhZ0l0ZW0uc2V0QXR0cmlidXRlKCdkYXRhLXktb2Zmc2V0JywgKHRoaXMuZHJhZ0l0ZW0ub2Zmc2V0VG9wIC0gZS5jbGllbnRZKS50b1N0cmluZygpKTtcclxuICAgICAgICB0aGlzLmRyYWdJdGVtLmNsYXNzTGlzdC5hZGQoJ3dpZGdldC1kcmFnZ2luZycpO1xyXG4gICAgICAgIHRoaXMuZHJhZ0l0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYW5pbWF0ZV9fYW5pbWF0ZWQnLCAnYW5pbWF0ZV9fcHVsc2UnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZW1vdmVQb3NpdGlvbkRhdGEoKSB7XHJcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5kcmFnSXRlbSAmJiB0aGlzLl9pc0luRWRpdGluZyAmJiB0aGlzLmRyYWdJdGVtLmdldEF0dHJpYnV0ZSh0aGlzLkRBVEFfT0xEX0NPTCkgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZHJhZ0l0ZW0uc2V0QXR0cmlidXRlKHRoaXMuREFUQV9PTERfQ09MLCB0aGlzLmRyYWdJdGVtLmdldEF0dHJpYnV0ZSh0aGlzLkRBVEFfQ09MKSk7XHJcbiAgICAgICAgdGhpcy5kcmFnSXRlbS5zZXRBdHRyaWJ1dGUodGhpcy5EQVRBX09MRF9ST1csIHRoaXMuZHJhZ0l0ZW0uZ2V0QXR0cmlidXRlKHRoaXMuREFUQV9ST1cpKTtcclxuICAgICAgICB0aGlzLmRyYWdJdGVtLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLkRBVEFfQ09MKTtcclxuICAgICAgICB0aGlzLmRyYWdJdGVtLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLkRBVEFfUk9XKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNldFBvc2l0aW9uRGF0YSgpIHtcclxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmRyYWdJdGVtICYmIHRoaXMuX2lzSW5FZGl0aW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLmRyYWdJdGVtLCB0aGlzLmRyYWdJdGVtLmdldEF0dHJpYnV0ZSh0aGlzLkRBVEFfT0xEX0NPTCksIHRoaXMuZHJhZ0l0ZW0uZ2V0QXR0cmlidXRlKHRoaXMuREFUQV9PTERfUk9XKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCwgY29sOiBzdHJpbmcsIHJvdzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLkRBVEFfQ09MLCBjb2wpO1xyXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLkRBVEFfUk9XLCByb3cpO1xyXG4gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLkRBVEFfT0xEX0NPTCk7XHJcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMuREFUQV9PTERfUk9XKTtcclxuICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgndG9wJyk7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2xlZnQnKTtcclxuICAgICAgY29uc3Qgd2lkZ2V0ID0gdGhpcy53aWRnZXRzLmZpbmQoYyA9PiBjWydfX21ldGFfXyddLmluc3RhbmNlLmVsZW1lbnQgPT09IGVsZW1lbnQpO1xyXG4gICAgICB3aWRnZXQuY29sID0gTnVtYmVyKGNvbCk7XHJcbiAgICAgIHdpZGdldC5yb3cgPSBOdW1iZXIocm93KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkcmFnKGUpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5kcmFnSXRlbSAmJiB0aGlzLl9pc0luRWRpdGluZykge1xyXG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGRQbGFjZWhvbGRlcigpO1xyXG4gICAgICAgIGNvbnN0IHhPZmZzZXQgPSBOdW1iZXIodGhpcy5kcmFnSXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEteC1vZmZzZXQnKSk7XHJcbiAgICAgICAgY29uc3QgeU9mZnNldCA9IE51bWJlcih0aGlzLmRyYWdJdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS15LW9mZnNldCcpKTtcclxuICAgICAgICB0aGlzLmRyYWdJdGVtLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyB4T2Zmc2V0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLmRyYWdJdGVtLnN0eWxlLnRvcCA9IGUuY2xpZW50WSArIHlPZmZzZXQgKyAncHgnO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgdGhpcy5kZXRlY3RCZXN0UGxhY2VtZW50KCk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVQb3NpdGlvbkRhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRyYWdFbmQoZSkge1xyXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZHJhZ0l0ZW0gJiYgdGhpcy5faXNJbkVkaXRpbmcgJiYgdGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kcmFnSXRlbS5jbGFzc0xpc3QucmVtb3ZlKCd3aWRnZXQtZHJhZ2dpbmcnKTtcclxuICAgICAgICB0aGlzLmRyYWdJdGVtLmNsYXNzTGlzdC5hZGQoJ2FuaW1hdGVfX2FuaW1hdGVkJywgJ2FuaW1hdGVfX3B1bHNlJyk7XHJcbiAgICAgICAgLy9cclxuICAgICAgICBjb25zdCBwID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcud2lkZ2V0LWJsYW5rLXBsYWNlaG9sZGVyJyk7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3V2lkZ2V0KSB7XHJcbiAgICAgICAgICBjb25zdCB3ID0ge1xyXG4gICAgICAgICAgICB1bmlxdWVOYW1lOiB0aGlzLm5ld1dpZGdldC51bmlxdWVOYW1lLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMubmV3V2lkZ2V0LmNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMubmV3V2lkZ2V0LnRpdGxlLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLm5ld1dpZGdldC5vcHRpb25zLFxyXG4gICAgICAgICAgICBzaXplWDogdGhpcy5uZXdXaWRnZXQuc2l6ZVgsXHJcbiAgICAgICAgICAgIHNpemVZOiB0aGlzLm5ld1dpZGdldC5zaXplWSxcclxuICAgICAgICAgICAgY29sOiBOdW1iZXIocC5nZXRBdHRyaWJ1dGUodGhpcy5EQVRBX0NPTCkpLFxyXG4gICAgICAgICAgICByb3c6IE51bWJlcihwLmdldEF0dHJpYnV0ZSh0aGlzLkRBVEFfUk9XKSlcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy53aWRnZXRzLnB1c2godyk7XHJcbiAgICAgICAgICB0aGlzLm5ld1dpZGdldCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZHJhZ0l0ZW0pO1xyXG4gICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jYWxjR3JpZFNpemUoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgd1snX19tZXRhX18nXS5pbnN0YW5jZS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuZHJhZ1N0YXJ0LmJpbmQodGhpcyksIGZhbHNlKTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLmRyYWdJdGVtLCBwLmdldEF0dHJpYnV0ZSh0aGlzLkRBVEFfQ09MKSwgcC5nZXRBdHRyaWJ1dGUodGhpcy5EQVRBX1JPVykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy5kcmFnSXRlbSwgdGhpcy5kcmFnSXRlbS5nZXRBdHRyaWJ1dGUodGhpcy5EQVRBX09MRF9DT0wpLCB0aGlzLmRyYWdJdGVtLmdldEF0dHJpYnV0ZSh0aGlzLkRBVEFfT0xEX1JPVykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL1xyXG4gICAgICAgIHRoaXMucmVtb3ZlUGxhY2Vob2xkZXIoKTtcclxuICAgICAgICB0aGlzLmRyYWdJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhbGNHcmlkU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZWQoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZXRlY3RGaXJzdEVtcHR5U2xvdCh3OiBBWFdpZGdldENvbmZpZykge1xyXG4gICAgY29uc3QgeFRpbGUgPSBNYXRoLmZsb29yKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCAvIHRoaXMudGlsZVNpemUpO1xyXG4gICAgZm9yIChsZXQgaiA9IDE7IGogPD0gMTAwOyBqKyspIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0geFRpbGUgLSB3LnNpemVYOyBpKyspIHtcclxuICAgICAgICBjb25zdCByZWMgPSBuZXcgQVhDbGllbnRSZWMoe1xyXG4gICAgICAgICAgbGVmdDogaSxcclxuICAgICAgICAgIHRvcDogaixcclxuICAgICAgICAgIHdpZHRoOiB3LnNpemVYLFxyXG4gICAgICAgICAgaGVpZ2h0OiB3LnNpemVZXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLndpZGdldHMuZmlsdGVyKGMgPT4gYyAhPT0gdykuZmluZCgoYykgPT5cclxuICAgICAgICAgIHJlYy5pbnRlcnNlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjLmNvbCxcclxuICAgICAgICAgICAgdG9wOiBjLnJvdyxcclxuICAgICAgICAgICAgd2lkdGg6IGMuc2l6ZVgsXHJcbiAgICAgICAgICAgIGhlaWdodDogYy5zaXplWVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChlbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICB3LmNvbCA9IGk7XHJcbiAgICAgICAgICB3LnJvdyA9IGo7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRldGVjdEJlc3RQbGFjZW1lbnQoKSB7XHJcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCBwID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcud2lkZ2V0LWJsYW5rLXBsYWNlaG9sZGVyJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGxldCBjb2wgPSBNYXRoLmNlaWwodGhpcy5kcmFnSXRlbS5vZmZzZXRMZWZ0IC8gdGhpcy50aWxlU2l6ZSk7XHJcbiAgICAgIGlmICh0aGlzLnJ0bCkge1xyXG4gICAgICAgIGNvbCA9IE1hdGguY2VpbCgodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCAtICh0aGlzLmRyYWdJdGVtLm9mZnNldExlZnQgKyB0aGlzLmRyYWdJdGVtLmNsaWVudFdpZHRoKSkgLyB0aGlzLnRpbGVTaXplKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHJvdyA9IE1hdGguY2VpbCh0aGlzLmRyYWdJdGVtLm9mZnNldFRvcCAvIHRoaXMudGlsZVNpemUpO1xyXG4gICAgICBpZiAoY29sIDwgMSkge1xyXG4gICAgICAgIGNvbCA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJvdyA8IDEpIHtcclxuICAgICAgICByb3cgPSAxO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdpZGdldHMgPSBBcnJheS5mcm9tKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndpZGdldC1ob3N0JykpLm1hcCgoYykgPT4gYyBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgIHAuc2V0QXR0cmlidXRlKHRoaXMuREFUQV9DT0wsIGNvbC50b1N0cmluZygpKTtcclxuICAgICAgcC5zZXRBdHRyaWJ1dGUodGhpcy5EQVRBX1JPVywgcm93LnRvU3RyaW5nKCkpO1xyXG4gICAgICBjb25zdCBjb2xsaXNpb24gPSB3aWRnZXRzLmZpbHRlcihjID0+IGMgIT09IHRoaXMuZHJhZ0l0ZW0pLnNvbWUoYyA9PiBBWEh0bWxVdGlsLmNvbGxpc2lvbihjLCB0aGlzLmRyYWdJdGVtKSk7XHJcbiAgICAgIGlmIChjb2xsaXNpb24pIHtcclxuICAgICAgICB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhZGRQbGFjZWhvbGRlcigpIHtcclxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlUGxhY2Vob2xkZXIoKTtcclxuICAgICAgaWYgKHRoaXMuZHJhZ0l0ZW0pIHtcclxuICAgICAgICBjb25zdCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgcC5jbGFzc0xpc3QuYWRkKCd3aWRnZXQtYmxhbmstcGxhY2Vob2xkZXInKTtcclxuICAgICAgICBwLnNldEF0dHJpYnV0ZSh0aGlzLkRBVEFfQ09MLCB0aGlzLmRyYWdJdGVtLmdldEF0dHJpYnV0ZSh0aGlzLkRBVEFfQ09MKSk7XHJcbiAgICAgICAgcC5zZXRBdHRyaWJ1dGUodGhpcy5EQVRBX1JPVywgdGhpcy5kcmFnSXRlbS5nZXRBdHRyaWJ1dGUodGhpcy5EQVRBX1JPVykpO1xyXG4gICAgICAgIHAuc2V0QXR0cmlidXRlKHRoaXMuREFUQV9TSVpFX1gsIHRoaXMuZHJhZ0l0ZW0uZ2V0QXR0cmlidXRlKHRoaXMuREFUQV9TSVpFX1gpKTtcclxuICAgICAgICBwLnNldEF0dHJpYnV0ZSh0aGlzLkRBVEFfU0laRV9ZLCB0aGlzLmRyYWdJdGVtLmdldEF0dHJpYnV0ZSh0aGlzLkRBVEFfU0laRV9ZKSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgY29uc3QgcCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLndpZGdldC1ibGFuay1wbGFjZWhvbGRlcicpO1xyXG4gICAgcD8ucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRFZGl0KCkge1xyXG4gICAgdGhpcy5faXNJbkVkaXRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjR3JpZFNpemUoKTtcclxuICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZ3JpZC1iYWNrZ3JvdW5kJyk7XHJcbiAgICBjb25zdCBiZyA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBiZy5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1wb3NpdGlvbicsIGAke3RoaXMucnRsID8gJ3JpZ2h0JyA6ICdsZWZ0J30gdG9wYCk7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgY29uc3QgcGF0dGVybiA9IGB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHdpZHRoPVwiJHt0aGlzLnRpbGVTaXplICsgdGhpcy5nYXBTaXplfVwiIGhlaWdodD1cIiR7dGhpcy50aWxlU2l6ZSArIHRoaXMuZ2FwU2l6ZX1cIj4gPHJlY3Qgc3R5bGU9XCJmaWxsOiAlMjNkYWRhZGFcIiB4PVwiJHt0aGlzLnJ0bCA/IHRoaXMuZ2FwU2l6ZSA6IDB9XCIgd2lkdGg9XCIke3RoaXMudGlsZVNpemV9XCIgaGVpZ2h0PVwiJHt0aGlzLnRpbGVTaXplfVwiIHk9XCIwXCI+PC9yZWN0Pjwvc3ZnPicpYDtcclxuICAgIGJnLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWltYWdlJywgcGF0dGVybik7XHJcbiAgICAvL1xyXG4gICAgY29uc3Qgd2lkZ2V0cyA9IEFycmF5LmZyb20odGhpcy5yZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud2lkZ2V0LWhvc3QnKSk7XHJcbiAgICB3aWRnZXRzLmZvckVhY2goKHcpID0+IHtcclxuICAgICAgdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmRyYWdTdGFydC5iaW5kKHRoaXMpLCBmYWxzZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnLmJpbmQodGhpcyksIGZhbHNlKTtcclxuICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuZHJhZ0VuZC5iaW5kKHRoaXMpLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmluaXNoRWRpdCgpIHtcclxuICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZ3JpZC1iYWNrZ3JvdW5kJyk7XHJcbiAgICBjb25zdCBiZyA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBiZy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnYmFja2dyb3VuZC1pbWFnZScpO1xyXG4gICAgLy9cclxuICAgIHRoaXMuX2lzSW5FZGl0aW5nID0gZmFsc2U7XHJcbiAgICBjb25zdCB3aWRnZXRzID0gQXJyYXkuZnJvbSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy53aWRnZXQtaG9zdCcpKTtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgodykgPT4ge1xyXG4gICAgICB3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuZHJhZ1N0YXJ0LmJpbmQodGhpcyksIGZhbHNlKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWcuYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gICAgdGhpcy5yZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5kcmFnRW5kLmJpbmQodGhpcyksIGZhbHNlKTtcclxuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZWQoKTtcclxuICB9XHJcblxyXG5cclxuICBhZGRXaWRnZXQod2lkZ2V0OiBBWFdpZGdldENvbmZpZykge1xyXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5uZXdXaWRnZXQgPSB7XHJcbiAgICAgICAgdW5pcXVlTmFtZTogd2lkZ2V0LnVuaXF1ZU5hbWUsXHJcbiAgICAgICAgY29tcG9uZW50OiB3aWRnZXQuY29tcG9uZW50LFxyXG4gICAgICAgIHRpdGxlOiB3aWRnZXQudGl0bGUsXHJcbiAgICAgICAgY29sOiAxLFxyXG4gICAgICAgIHJvdzogMSxcclxuICAgICAgICBzaXplWDogd2lkZ2V0LnNpemVYLFxyXG4gICAgICAgIHNpemVZOiB3aWRnZXQuc2l6ZVksXHJcbiAgICAgICAgb3B0aW9uczogd2lkZ2V0Lm9wdGlvbnMsXHJcbiAgICAgICAgcHJvcHM6IHdpZGdldC5wcm9wc1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmRldGVjdEZpcnN0RW1wdHlTbG90KHRoaXMubmV3V2lkZ2V0KTtcclxuICAgICAgY29uc3QgdyA9IHtcclxuICAgICAgICB1bmlxdWVOYW1lOiB0aGlzLm5ld1dpZGdldC51bmlxdWVOYW1lLFxyXG4gICAgICAgIGNvbXBvbmVudDogdGhpcy5uZXdXaWRnZXQuY29tcG9uZW50LFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLm5ld1dpZGdldC50aXRsZSxcclxuICAgICAgICBvcHRpb25zOiB0aGlzLm5ld1dpZGdldC5vcHRpb25zLFxyXG4gICAgICAgIHByb3BzOiB0aGlzLm5ld1dpZGdldC5wcm9wcyxcclxuICAgICAgICBzaXplWDogdGhpcy5uZXdXaWRnZXQuc2l6ZVgsXHJcbiAgICAgICAgc2l6ZVk6IHRoaXMubmV3V2lkZ2V0LnNpemVZLFxyXG4gICAgICAgIGNvbDogdGhpcy5uZXdXaWRnZXQuY29sLFxyXG4gICAgICAgIHJvdzogdGhpcy5uZXdXaWRnZXQucm93XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMud2lkZ2V0cy5wdXNoKHcpO1xyXG4gICAgICB0aGlzLm5ld1dpZGdldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNhbGNHcmlkU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZWQoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHdbJ19fbWV0YV9fJ10uaW5zdGFuY2UuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmRyYWdTdGFydC5iaW5kKHRoaXMpLCBmYWxzZSk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlT25SZW1vdmUodzogQVhXaWRnZXRIb3N0Q29tcG9uZW50KSB7XHJcbiAgICB3LmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYW5pbWF0ZV9fYW5pbWF0ZWQnLCAnYW5pbWF0ZV9fem9vbU91dCcpO1xyXG4gICAgdy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsICgpID0+IHtcclxuICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigoYykgPT4gKGMgYXMgYW55KS5fX21ldGFfXy5pZCAhPT0gKHcuY29uZmlnIGFzIGFueSkuX19tZXRhX18uaWQpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY2FsY0dyaWRTaXplKCk7XHJcbiAgICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25TYXZlKGU6IEFYV2lkZ2V0Q29uZmlnU2F2ZWRFdmVudCkge1xyXG4gICAgdGhpcy5vbldpZGdldFNhdmUuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlGbihpbmRleCwgaXRlbSkge1xyXG4gICAgaWYgKCFpdGVtWydfX21ldGFfXyddPy5pZCkge1xyXG4gICAgICBpdGVtWydfX21ldGFfXyddID0ge307XHJcbiAgICAgIGl0ZW1bJ19fbWV0YV9fJ10uaWQgPSBBWEh0bWxVdGlsLmdldFVJRCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1bJ19fbWV0YV9fJ10/LmlkO1xyXG4gIH1cclxuXHJcblxyXG4gIGxvYWQod2lkZ2V0czogc3RyaW5nIHwgQVhXaWRnZXRDb25maWdbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKHdpZGdldHMpIHtcclxuICAgICAgICBjb25zdCBsb2FkZWRXaWRnZXRzOiBBWFdpZGdldENvbmZpZ1tdID0gW107XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aWRnZXRzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbG9hZGVkV2lkZ2V0cy5wdXNoKC4uLkpTT04ucGFyc2Uod2lkZ2V0cykpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVqZWN0KCdJbnZhbGlkIHdpZGdldCBqc29uIGRhdGEhJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbG9hZGVkV2lkZ2V0cy5wdXNoKC4uLndpZGdldHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaW50ZXJ2YWxJZDogbnVtYmVyID0gLTE7XHJcbiAgICAgICAgY29uc3QgbG9hZEZ1bmMgPSAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUl0ZW1zICYmIHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbG9hZGVkV2lkZ2V0cy5mb3JFYWNoKHcgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGdpdGVtID0gdGhpcy5nYWxsZXJ5SXRlbXMuZmluZChjID0+IGMudW5pcXVlTmFtZSA9PT0gdy51bmlxdWVOYW1lKTtcclxuICAgICAgICAgICAgICBpZiAoZ2l0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHcuY29tcG9uZW50ID0gZ2l0ZW0uY29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKGdpdGVtLnByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgIHcucHJvcHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdpdGVtLnByb3BzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRzLnB1c2goLi4ubG9hZGVkV2lkZ2V0cyk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwobG9hZEZ1bmMsIDIwMCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy53aWRnZXRzID0gW107XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3Qgb2JqID0gdGhpcy53aWRnZXRzLm1hcChjID0+ICh7XHJcbiAgICAgIHVuaXF1ZU5hbWU6IGMudW5pcXVlTmFtZSxcclxuICAgICAgY29tcG9uZW50OiBjLmNvbXBvbmVudCxcclxuICAgICAgdGl0bGU6IGMudGl0bGUsXHJcbiAgICAgIHNpemVYOiBjLnNpemVYLFxyXG4gICAgICBzaXplWTogYy5zaXplWSxcclxuICAgICAgY29sOiBjLmNvbCxcclxuICAgICAgcm93OiBjLnJvdyxcclxuICAgICAgb3B0aW9uczogYy5vcHRpb25zLFxyXG4gICAgICBwcm9wczogYy5wcm9wc1xyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLndpZGdldEhvc3RzLmZvckVhY2goaG9zdCA9PiB7XHJcbiAgICAgIGhvc3Qud2lkZ2V0LnJlZnJlc2goKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25Db25maWdDaGFuZ2VkKGU6IEFYV2lkZ2V0Q29uZmlnQ2hhbmdlZCkge1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25SZXNpemVkQ2hhbmdlZChlOiBBWFdpZGdldENvbmZpZ0NoYW5nZWQpIHtcclxuICAgIHRoaXMuZGV0ZWN0Rmlyc3RFbXB0eVNsb3QoZS5jb25maWcpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVDaGFuZ2VPYnNlcnZlcjogYW55O1xyXG4gIHByaXZhdGUgZW1pdENvbmZpZ0NoYW5nZWQoKSB7XHJcbiAgICBpZiAoIXRoaXMucmVzaXplQ2hhbmdlT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5yZXNpemVDaGFuZ2VPYnNlcnZlciA9IG5ldyBPYnNlcnZhYmxlKCk7XHJcbiAgICAgIE9ic2VydmFibGUuY3JlYXRlKG9ic2VydmVyID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUNoYW5nZU9ic2VydmVyID0gb2JzZXJ2ZXI7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgICAuc3Vic2NyaWJlKGMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vbkNvbmZpZ0NoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpc1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc2l6ZUNoYW5nZU9ic2VydmVyLm5leHQobmV3IERhdGUoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|