@metadev/lux 0.18.0 → 0.19.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/esm2020/lib/autocomplete/autocomplete.component.mjs +479 -0
- package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +254 -0
- package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +75 -0
- package/esm2020/lib/checkbox/checkbox.component.mjs +154 -0
- package/{esm2015/lib/datasource.js → esm2020/lib/datasource.mjs} +0 -0
- package/esm2020/lib/datetime/datetime.component.mjs +306 -0
- package/esm2020/lib/filter/filter.component.mjs +152 -0
- package/esm2020/lib/geolocation/geolocation.component.mjs +407 -0
- package/{esm2015/lib/geolocation/geolocation.service.js → esm2020/lib/geolocation/geolocation.service.mjs} +7 -11
- package/esm2020/lib/geolocation/openlayer-loader.service.mjs +62 -0
- package/{esm2015/lib/helperFns.js → esm2020/lib/helperFns.mjs} +0 -0
- package/esm2020/lib/input/input.component.mjs +452 -0
- package/{esm2015/lib/input/regexp.service.js → esm2020/lib/input/regexp.service.mjs} +7 -6
- package/{esm2015/lib/lang.js → esm2020/lib/lang.mjs} +0 -0
- package/esm2020/lib/lux.module.mjs +130 -0
- package/{esm2015/lib/map/geopoint.js → esm2020/lib/map/geopoint.mjs} +0 -0
- package/esm2020/lib/map/map.component.mjs +265 -0
- package/esm2020/lib/modal/modal-backdrop.mjs +26 -0
- package/esm2020/lib/modal/modal-config.mjs +14 -0
- package/{esm2015/lib/modal/modal-dismiss-reasons.js → esm2020/lib/modal/modal-dismiss-reasons.mjs} +0 -0
- package/{esm2015/lib/modal/modal-ref.js → esm2020/lib/modal/modal-ref.mjs} +0 -0
- package/esm2020/lib/modal/modal-stack.mjs +179 -0
- package/esm2020/lib/modal/modal-window.mjs +119 -0
- package/esm2020/lib/modal/modal.service.mjs +26 -0
- package/{esm2015/lib/modal/util.js → esm2020/lib/modal/util.mjs} +0 -0
- package/esm2020/lib/pagination/pagination.component.mjs +137 -0
- package/{esm2015/lib/pagination/pagination.js → esm2020/lib/pagination/pagination.mjs} +0 -0
- package/esm2020/lib/radiogroup/radiogroup.component.mjs +130 -0
- package/esm2020/lib/select/select.component.mjs +149 -0
- package/{esm2015/lib/tooltip/placement.js → esm2020/lib/tooltip/placement.mjs} +0 -0
- package/{esm2015/lib/tooltip/tooltip-context.js → esm2020/lib/tooltip/tooltip-context.mjs} +0 -0
- package/esm2020/lib/tooltip/tooltip.component.mjs +23 -0
- package/esm2020/lib/tooltip/tooltip.directive.mjs +60 -0
- package/{esm2015/lib/tooltip/tooltip.service.js → esm2020/lib/tooltip/tooltip.service.mjs} +7 -9
- package/{esm2015/lib/tooltip/tooltop-content.js → esm2020/lib/tooltip/tooltop-content.mjs} +0 -0
- package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +73 -0
- package/{esm2015/lib/window/window.service.js → esm2020/lib/window/window.service.mjs} +0 -0
- package/esm2020/metadev-lux.mjs +5 -0
- package/esm2020/public-api.mjs +21 -0
- package/fesm2015/metadev-lux.mjs +4345 -0
- package/fesm2015/metadev-lux.mjs.map +1 -0
- package/fesm2020/metadev-lux.mjs +4343 -0
- package/fesm2020/metadev-lux.mjs.map +1 -0
- package/lib/autocomplete/autocomplete.component.d.ts +3 -0
- package/lib/autocomplete-list/autocomplete-list.component.d.ts +3 -0
- package/lib/breadcrumb/breadcrumb.component.d.ts +3 -0
- package/lib/checkbox/checkbox.component.d.ts +3 -0
- package/lib/datetime/datetime.component.d.ts +4 -0
- package/lib/filter/filter.component.d.ts +3 -0
- package/lib/geolocation/geolocation.component.d.ts +4 -0
- package/lib/geolocation/geolocation.service.d.ts +3 -0
- package/lib/geolocation/openlayer-loader.service.d.ts +3 -0
- package/lib/input/input.component.d.ts +3 -0
- package/lib/input/regexp.service.d.ts +3 -0
- package/lib/lux.module.d.ts +26 -0
- package/lib/map/map.component.d.ts +3 -0
- package/lib/modal/modal-backdrop.d.ts +3 -0
- package/lib/modal/modal-config.d.ts +3 -0
- package/lib/modal/modal-stack.d.ts +3 -0
- package/lib/modal/modal-window.d.ts +3 -0
- package/lib/modal/modal.service.d.ts +3 -0
- package/lib/pagination/pagination.component.d.ts +3 -0
- package/lib/radiogroup/radiogroup.component.d.ts +3 -0
- package/lib/select/select.component.d.ts +3 -0
- package/lib/tooltip/tooltip.component.d.ts +3 -0
- package/lib/tooltip/tooltip.directive.d.ts +3 -0
- package/lib/tooltip/tooltip.service.d.ts +3 -0
- package/lib/voice-recognition/voice-recognition.directive.d.ts +3 -0
- package/metadev-lux.d.ts +1 -16
- package/package.json +20 -8
- package/public-api.d.ts +12 -7
- package/bundles/metadev-lux.umd.js +0 -4715
- package/bundles/metadev-lux.umd.js.map +0 -1
- package/esm2015/lib/autocomplete/autocomplete.component.js +0 -455
- package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +0 -230
- package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -77
- package/esm2015/lib/checkbox/checkbox.component.js +0 -142
- package/esm2015/lib/datetime/datetime.component.js +0 -275
- package/esm2015/lib/filter/filter.component.js +0 -140
- package/esm2015/lib/geolocation/geolocation.component.js +0 -371
- package/esm2015/lib/geolocation/openlayer-loader.service.js +0 -63
- package/esm2015/lib/input/input.component.js +0 -419
- package/esm2015/lib/lux.module.js +0 -83
- package/esm2015/lib/map/map.component.js +0 -261
- package/esm2015/lib/modal/modal-backdrop.js +0 -19
- package/esm2015/lib/modal/modal-config.js +0 -12
- package/esm2015/lib/modal/modal-stack.js +0 -182
- package/esm2015/lib/modal/modal-window.js +0 -92
- package/esm2015/lib/modal/modal.service.js +0 -28
- package/esm2015/lib/pagination/pagination.component.js +0 -134
- package/esm2015/lib/radiogroup/radiogroup.component.js +0 -114
- package/esm2015/lib/select/select.component.js +0 -131
- package/esm2015/lib/tooltip/tooltip.component.js +0 -19
- package/esm2015/lib/tooltip/tooltip.directive.js +0 -52
- package/esm2015/lib/voice-recognition/voice-recognition.directive.js +0 -76
- package/esm2015/metadev-lux.js +0 -21
- package/esm2015/public-api.js +0 -16
- package/fesm2015/metadev-lux.js +0 -4089
- package/fesm2015/metadev-lux.js.map +0 -1
- package/metadev-lux.metadata.json +0 -1
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { OpenLayerLoaderService } from '../geolocation/openlayer-loader.service';
|
|
4
|
-
export class MapComponent {
|
|
5
|
-
constructor(olLoader) {
|
|
6
|
-
this.loaded$ = new BehaviorSubject(false);
|
|
7
|
-
this.valueChange = new EventEmitter();
|
|
8
|
-
olLoader.load().subscribe((_) => {
|
|
9
|
-
// Initialize
|
|
10
|
-
this._markerSource = new ol.source.Vector();
|
|
11
|
-
this._markerStyle = new ol.style.Style({
|
|
12
|
-
image: new ol.style.Icon({
|
|
13
|
-
anchor: [0.5, 1],
|
|
14
|
-
scale: 0.25,
|
|
15
|
-
src: '/assets/img/marker.png'
|
|
16
|
-
})
|
|
17
|
-
});
|
|
18
|
-
this.loaded$.next(true);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
set zoom(zoom) {
|
|
22
|
-
if (!isNaN(zoom)) {
|
|
23
|
-
this._zoom = zoom;
|
|
24
|
-
if (this._map) {
|
|
25
|
-
this._map.getView().setZoom(zoom);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
get zoom() {
|
|
30
|
-
return this._zoom;
|
|
31
|
-
}
|
|
32
|
-
set center(center) {
|
|
33
|
-
if (center && center.coordinates && center.coordinates.length === 2) {
|
|
34
|
-
this._center = center;
|
|
35
|
-
if (this._map) {
|
|
36
|
-
this._map.getView().setCenter(ol.proj.fromLonLat(center.coordinates));
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
get center() {
|
|
41
|
-
return this._center;
|
|
42
|
-
}
|
|
43
|
-
set readonly(readonly) {
|
|
44
|
-
if (!readonly) {
|
|
45
|
-
if (this._map) {
|
|
46
|
-
this._map.on('click', (args) => {
|
|
47
|
-
// args.coordinate is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)
|
|
48
|
-
const coordinates = ol.proj.toLonLat(args.coordinate);
|
|
49
|
-
// alternatively: const lonLat = ol.proj.transform(args.coordinate,'EPSG:3857','EPSG:4326');
|
|
50
|
-
this.addMarkerAtCoordinates(coordinates);
|
|
51
|
-
});
|
|
52
|
-
this._map.on('pointermove', (event) => {
|
|
53
|
-
const pixel = this._map.getEventPixel(event.originalEvent);
|
|
54
|
-
const hit = this._map.hasFeatureAtPixel(pixel);
|
|
55
|
-
this._map.getViewport().style.cursor = hit ? 'move' : 'grab';
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
if (this._map) {
|
|
61
|
-
this._map.on('click', (args) => { });
|
|
62
|
-
this._map.on('pointermove', (event) => { });
|
|
63
|
-
this._map.getViewport().style.cursor = 'grab';
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
this._readonly = readonly;
|
|
67
|
-
// reset marker coordinates so marker interactions can be created or recreated accordingly
|
|
68
|
-
// to the changes to readonly
|
|
69
|
-
this.markerCoordinates = this.markerCoordinates;
|
|
70
|
-
}
|
|
71
|
-
get readonly() {
|
|
72
|
-
return this._readonly;
|
|
73
|
-
}
|
|
74
|
-
set markerCoordinates(markerCoordinates) {
|
|
75
|
-
if (markerCoordinates && markerCoordinates.length === 2) {
|
|
76
|
-
this._markerCoordinates = markerCoordinates;
|
|
77
|
-
if (this._map) {
|
|
78
|
-
this.addMarkerAtCoordinates(markerCoordinates);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this._markerCoordinates = undefined;
|
|
83
|
-
if (this._map) {
|
|
84
|
-
this.removeMarker();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
get markerCoordinates() {
|
|
89
|
-
return this._markerCoordinates;
|
|
90
|
-
}
|
|
91
|
-
set markerPoint(markerPoint) {
|
|
92
|
-
if (!markerPoint ||
|
|
93
|
-
!(markerPoint.coordinates && markerPoint.coordinates.length === 2)) {
|
|
94
|
-
this.markerCoordinates = undefined;
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
this.markerCoordinates = [
|
|
98
|
-
+markerPoint.coordinates[0],
|
|
99
|
-
+markerPoint.coordinates[1]
|
|
100
|
-
];
|
|
101
|
-
}
|
|
102
|
-
this.valueChange.emit(markerPoint);
|
|
103
|
-
}
|
|
104
|
-
get markerPoint() {
|
|
105
|
-
return {
|
|
106
|
-
type: 'Point',
|
|
107
|
-
coordinates: this.markerCoordinates
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
ngOnInit() {
|
|
111
|
-
this.mapId = this.mapId ? this.mapId : 'map' + MapComponent.idCounter++;
|
|
112
|
-
}
|
|
113
|
-
ngAfterViewInit() {
|
|
114
|
-
this.loaded$.subscribe((loaded) => {
|
|
115
|
-
if (loaded) {
|
|
116
|
-
this.initMap();
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
initMap() {
|
|
121
|
-
this._map = new ol.Map({
|
|
122
|
-
target: this.mapId,
|
|
123
|
-
controls: ol.control.defaults({ attribution: false }),
|
|
124
|
-
layers: [
|
|
125
|
-
new ol.layer.Tile({
|
|
126
|
-
source: new ol.source.OSM()
|
|
127
|
-
}),
|
|
128
|
-
new ol.layer.Vector({
|
|
129
|
-
source: this._markerSource,
|
|
130
|
-
style: this._markerStyle
|
|
131
|
-
})
|
|
132
|
-
],
|
|
133
|
-
view: new ol.View({
|
|
134
|
-
center: ol.proj.fromLonLat(this.center !== undefined ? this.center.coordinates : [0, 0]),
|
|
135
|
-
zoom: this.zoom
|
|
136
|
-
})
|
|
137
|
-
});
|
|
138
|
-
if (this.center === undefined || this.center === null) {
|
|
139
|
-
// if the center is not set, we set its default value
|
|
140
|
-
if ('geolocation' in navigator) {
|
|
141
|
-
navigator.geolocation.getCurrentPosition((position) => {
|
|
142
|
-
this.center = {
|
|
143
|
-
type: 'Point',
|
|
144
|
-
coordinates: [position.coords.longitude, position.coords.latitude]
|
|
145
|
-
};
|
|
146
|
-
}, (error) => {
|
|
147
|
-
this.center = {
|
|
148
|
-
type: 'Point',
|
|
149
|
-
coordinates: [0, 0]
|
|
150
|
-
};
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
this.center = {
|
|
155
|
-
type: 'Point',
|
|
156
|
-
coordinates: [0, 0]
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
// the center needs the map to be properly set, so if it was set before the map was initialized,
|
|
162
|
-
// we set the center again to perform necessary adjustements
|
|
163
|
-
this.center = this.center;
|
|
164
|
-
}
|
|
165
|
-
if (this.zoom === undefined || this.zoom === null) {
|
|
166
|
-
// if the zoom is not set, we set its default value
|
|
167
|
-
this.zoom = 18;
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
// the zoom needs the map to be properly set, so if it was set before the map was initialized,
|
|
171
|
-
// we set the zoom again to perform necessary adjustements
|
|
172
|
-
this.zoom = this.zoom;
|
|
173
|
-
}
|
|
174
|
-
if (this.readonly === undefined || this.readonly === null) {
|
|
175
|
-
// if readonly is not set, we set its default value
|
|
176
|
-
this.readonly = false;
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
// readonly needs the map to be properly set, so if it was set before the map was initialized,
|
|
180
|
-
// we set readonly again to perform necessary adjustements
|
|
181
|
-
this.readonly = this.readonly;
|
|
182
|
-
}
|
|
183
|
-
if (this.markerCoordinates !== undefined &&
|
|
184
|
-
this.markerCoordinates !== null) {
|
|
185
|
-
// the marker coordinates need the map to be properly set, so if they were set before the map was initialized,
|
|
186
|
-
// we set the marker coordinates again to perform necessary adjustements
|
|
187
|
-
this.markerCoordinates = this.markerCoordinates;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
addMarkerAtCoordinates(coordinates) {
|
|
191
|
-
if (coordinates && coordinates.length === 2) {
|
|
192
|
-
if (this._marker !== undefined) {
|
|
193
|
-
this.removeMarker();
|
|
194
|
-
}
|
|
195
|
-
this._marker = new ol.Feature({
|
|
196
|
-
geometry: new ol.geom.Point(
|
|
197
|
-
// [lon, lat] is in EPSG:4326 (degrees), we transform it into EPSG:3857 (meters)
|
|
198
|
-
ol.proj.transform(coordinates, 'EPSG:4326', 'EPSG:3857'))
|
|
199
|
-
});
|
|
200
|
-
this._markerSource.addFeature(this._marker);
|
|
201
|
-
this._markerCoordinates = this.getMarkerCoordinates();
|
|
202
|
-
if (!this.readonly) {
|
|
203
|
-
const dragInteraction = new ol.interaction.Modify({
|
|
204
|
-
features: new ol.Collection([this._marker]),
|
|
205
|
-
style: this._markerStyle,
|
|
206
|
-
pixelTolerance: 50,
|
|
207
|
-
hitDetection: true
|
|
208
|
-
});
|
|
209
|
-
this._markerInteraction = dragInteraction;
|
|
210
|
-
this._map.addInteraction(dragInteraction);
|
|
211
|
-
}
|
|
212
|
-
this._marker.on('change', () => {
|
|
213
|
-
this._markerCoordinates = this.getMarkerCoordinates();
|
|
214
|
-
}, this._marker);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
removeMarker() {
|
|
218
|
-
if (this._marker !== undefined) {
|
|
219
|
-
this._markerSource.removeFeature(this._marker);
|
|
220
|
-
this._marker = undefined;
|
|
221
|
-
}
|
|
222
|
-
if (this._markerInteraction !== undefined) {
|
|
223
|
-
this._map.getInteractions().pop();
|
|
224
|
-
this._markerInteraction = undefined;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
getMarkerCoordinates() {
|
|
228
|
-
if (this._marker === undefined || this._marker == null) {
|
|
229
|
-
return this._marker;
|
|
230
|
-
}
|
|
231
|
-
const coordinates = this._marker.getGeometry().getCoordinates();
|
|
232
|
-
// coordinates is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)
|
|
233
|
-
return ol.proj.transform(coordinates, 'EPSG:3857', 'EPSG:4326');
|
|
234
|
-
}
|
|
235
|
-
onResize() {
|
|
236
|
-
if (this._map) {
|
|
237
|
-
this._map.updateSize();
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
MapComponent.idCounter = 0;
|
|
242
|
-
MapComponent.decorators = [
|
|
243
|
-
{ type: Component, args: [{
|
|
244
|
-
selector: 'lux-map',
|
|
245
|
-
template: "<div [id]=\"mapId\" class=\"map\" (resized)=\"onResize()\"></div>\n",
|
|
246
|
-
styles: [".map{min-height:100px;height:100%;min-width:160px;width:100%}\n"]
|
|
247
|
-
},] }
|
|
248
|
-
];
|
|
249
|
-
MapComponent.ctorParameters = () => [
|
|
250
|
-
{ type: OpenLayerLoaderService }
|
|
251
|
-
];
|
|
252
|
-
MapComponent.propDecorators = {
|
|
253
|
-
mapId: [{ type: Input }],
|
|
254
|
-
zoom: [{ type: Input }],
|
|
255
|
-
center: [{ type: Input }],
|
|
256
|
-
readonly: [{ type: Input }],
|
|
257
|
-
markerCoordinates: [{ type: Input }],
|
|
258
|
-
markerPoint: [{ type: Input }],
|
|
259
|
-
valueChange: [{ type: Output }]
|
|
260
|
-
};
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2x1eC9zcmMvbGliL21hcC9tYXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQVlqRixNQUFNLE9BQU8sWUFBWTtJQW9IdkIsWUFBWSxRQUFnQztRQWpIcEMsWUFBTyxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQTRHN0QsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBTW5ELFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM5QixhQUFhO1lBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNyQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsR0FBRyxFQUFFLHdCQUF3QjtpQkFDOUIsQ0FBQzthQUNILENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQXZIRCxJQUNJLElBQUksQ0FBQyxJQUFZ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LGNBQWMsRUFBRSxDQUFDO1FBQ2hFLGlGQUFpRjtRQUNqRixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQzs7QUF0Uk0sc0JBQVMsR0FBRyxDQUFDLENBQUM7O1lBTnRCLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsU0FBUztnQkFDbkIsK0VBQW1DOzthQUVwQzs7O1lBWFEsc0JBQXNCOzs7b0JBbUI1QixLQUFLO21CQUdMLEtBQUs7cUJBY0wsS0FBSzt1QkFjTCxLQUFLO2dDQW1DTCxLQUFLOzBCQWlCTCxLQUFLOzBCQXFCTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3BlbkxheWVyTG9hZGVyU2VydmljZSB9IGZyb20gJy4uL2dlb2xvY2F0aW9uL29wZW5sYXllci1sb2FkZXIuc2VydmljZSc7XG5cbmltcG9ydCB7IEdlb1BvaW50IH0gZnJvbSAnLi9nZW9wb2ludCc7XG5cbi8vIEBkeW5hbWljXG5kZWNsYXJlIGNvbnN0IG9sOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x1eC1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgc3RhdGljIGlkQ291bnRlciA9IDA7XG5cbiAgcHJpdmF0ZSBsb2FkZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBwcml2YXRlIF9tYXA6IGFueTtcblxuICBASW5wdXQoKSBtYXBJZDtcblxuICBfem9vbTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBzZXQgem9vbSh6b29tOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHpvb20pKSB7XG4gICAgICB0aGlzLl96b29tID0gem9vbTtcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLmdldFZpZXcoKS5zZXRab29tKHpvb20pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgem9vbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl96b29tO1xuICB9XG5cbiAgX2NlbnRlcjogR2VvUG9pbnQ7XG4gIEBJbnB1dCgpXG4gIHNldCBjZW50ZXIoY2VudGVyOiBHZW9Qb2ludCkge1xuICAgIGlmIChjZW50ZXIgJiYgY2VudGVyLmNvb3JkaW5hdGVzICYmIGNlbnRlci5jb29yZGluYXRlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuX2NlbnRlciA9IGNlbnRlcjtcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLmdldFZpZXcoKS5zZXRDZW50ZXIob2wucHJvai5mcm9tTG9uTGF0KGNlbnRlci5jb29yZGluYXRlcykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgY2VudGVyKCk6IEdlb1BvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2VudGVyO1xuICB9XG5cbiAgX3JlYWRvbmx5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBzZXQgcmVhZG9ubHkocmVhZG9ubHk6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXJlYWRvbmx5KSB7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vbignY2xpY2snLCAoYXJnczogYW55KSA9PiB7XG4gICAgICAgICAgLy8gYXJncy5jb29yZGluYXRlIGlzIGluIEVQU0c6Mzg1NyAobWV0ZXJzKSwgd2UgdHJhbnNmb3JtIGl0IGludG8gRVBTRzo0MzI2IChkZWdyZWVzKVxuICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb2wucHJvai50b0xvbkxhdChhcmdzLmNvb3JkaW5hdGUpO1xuICAgICAgICAgIC8vIGFsdGVybmF0aXZlbHk6IGNvbnN0IGxvbkxhdCA9IG9sLnByb2oudHJhbnNmb3JtKGFyZ3MuY29vcmRpbmF0ZSwnRVBTRzozODU3JywnRVBTRzo0MzI2Jyk7XG4gICAgICAgICAgdGhpcy5hZGRNYXJrZXJBdENvb3JkaW5hdGVzKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX21hcC5vbigncG9pbnRlcm1vdmUnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBpeGVsID0gdGhpcy5fbWFwLmdldEV2ZW50UGl4ZWwoZXZlbnQub3JpZ2luYWxFdmVudCk7XG4gICAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5fbWFwLmhhc0ZlYXR1cmVBdFBpeGVsKHBpeGVsKTtcbiAgICAgICAgICB0aGlzLl9tYXAuZ2V0Vmlld3BvcnQoKS5zdHlsZS5jdXJzb3IgPSBoaXQgPyAnbW92ZScgOiAnZ3JhYic7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vbignY2xpY2snLCAoYXJnczogYW55KSA9PiB7fSk7XG4gICAgICAgIHRoaXMuX21hcC5vbigncG9pbnRlcm1vdmUnLCAoZXZlbnQ6IGFueSkgPT4ge30pO1xuICAgICAgICB0aGlzLl9tYXAuZ2V0Vmlld3BvcnQoKS5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3JlYWRvbmx5ID0gcmVhZG9ubHk7XG4gICAgLy8gcmVzZXQgbWFya2VyIGNvb3JkaW5hdGVzIHNvIG1hcmtlciBpbnRlcmFjdGlvbnMgY2FuIGJlIGNyZWF0ZWQgb3IgcmVjcmVhdGVkIGFjY29yZGluZ2x5XG4gICAgLy8gdG8gdGhlIGNoYW5nZXMgdG8gcmVhZG9ubHlcbiAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzID0gdGhpcy5tYXJrZXJDb29yZGluYXRlcztcbiAgfVxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFya2VyOiBhbnk7XG4gIHByaXZhdGUgX21hcmtlckludGVyYWN0aW9uOiBhbnk7XG4gIHByaXZhdGUgX21hcmtlckNvb3JkaW5hdGVzOiBudW1iZXJbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBzZXQgbWFya2VyQ29vcmRpbmF0ZXMobWFya2VyQ29vcmRpbmF0ZXM6IG51bWJlcltdKSB7XG4gICAgaWYgKG1hcmtlckNvb3JkaW5hdGVzICYmIG1hcmtlckNvb3JkaW5hdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5fbWFya2VyQ29vcmRpbmF0ZXMgPSBtYXJrZXJDb29yZGluYXRlcztcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5hZGRNYXJrZXJBdENvb3JkaW5hdGVzKG1hcmtlckNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWFya2VyQ29vcmRpbmF0ZXMgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTWFya2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IG1hcmtlckNvb3JkaW5hdGVzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyQ29vcmRpbmF0ZXM7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1hcmtlclBvaW50KG1hcmtlclBvaW50OiBHZW9Qb2ludCkge1xuICAgIGlmIChcbiAgICAgICFtYXJrZXJQb2ludCB8fFxuICAgICAgIShtYXJrZXJQb2ludC5jb29yZGluYXRlcyAmJiBtYXJrZXJQb2ludC5jb29yZGluYXRlcy5sZW5ndGggPT09IDIpXG4gICAgKSB7XG4gICAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzID0gW1xuICAgICAgICArbWFya2VyUG9pbnQuY29vcmRpbmF0ZXNbMF0sXG4gICAgICAgICttYXJrZXJQb2ludC5jb29yZGluYXRlc1sxXVxuICAgICAgXTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG1hcmtlclBvaW50KTtcbiAgfVxuICBnZXQgbWFya2VyUG9pbnQoKTogR2VvUG9pbnQge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMubWFya2VyQ29vcmRpbmF0ZXNcbiAgICB9O1xuICB9XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2VvUG9pbnQ+KCk7XG5cbiAgcHJpdmF0ZSBfbWFya2VyU291cmNlOiBhbnk7XG4gIHByaXZhdGUgX21hcmtlclN0eWxlOiBhbnk7XG5cbiAgY29uc3RydWN0b3Iob2xMb2FkZXI6IE9wZW5MYXllckxvYWRlclNlcnZpY2UpIHtcbiAgICBvbExvYWRlci5sb2FkKCkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAvLyBJbml0aWFsaXplXG4gICAgICB0aGlzLl9tYXJrZXJTb3VyY2UgPSBuZXcgb2wuc291cmNlLlZlY3RvcigpO1xuICAgICAgdGhpcy5fbWFya2VyU3R5bGUgPSBuZXcgb2wuc3R5bGUuU3R5bGUoe1xuICAgICAgICBpbWFnZTogbmV3IG9sLnN0eWxlLkljb24oe1xuICAgICAgICAgIGFuY2hvcjogWzAuNSwgMV0sXG4gICAgICAgICAgc2NhbGU6IDAuMjUsXG4gICAgICAgICAgc3JjOiAnL2Fzc2V0cy9pbWcvbWFya2VyLnBuZydcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkZWQkLm5leHQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hcElkID0gdGhpcy5tYXBJZCA/IHRoaXMubWFwSWQgOiAnbWFwJyArIE1hcENvbXBvbmVudC5pZENvdW50ZXIrKztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlZCQuc3Vic2NyaWJlKChsb2FkZWQpID0+IHtcbiAgICAgIGlmIChsb2FkZWQpIHtcbiAgICAgICAgdGhpcy5pbml0TWFwKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBpbml0TWFwKCk6IHZvaWQge1xuICAgIHRoaXMuX21hcCA9IG5ldyBvbC5NYXAoe1xuICAgICAgdGFyZ2V0OiB0aGlzLm1hcElkLFxuICAgICAgY29udHJvbHM6IG9sLmNvbnRyb2wuZGVmYXVsdHMoeyBhdHRyaWJ1dGlvbjogZmFsc2UgfSksXG4gICAgICBsYXllcnM6IFtcbiAgICAgICAgbmV3IG9sLmxheWVyLlRpbGUoe1xuICAgICAgICAgIHNvdXJjZTogbmV3IG9sLnNvdXJjZS5PU00oKVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IG9sLmxheWVyLlZlY3Rvcih7XG4gICAgICAgICAgc291cmNlOiB0aGlzLl9tYXJrZXJTb3VyY2UsXG4gICAgICAgICAgc3R5bGU6IHRoaXMuX21hcmtlclN0eWxlXG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgdmlldzogbmV3IG9sLlZpZXcoe1xuICAgICAgICBjZW50ZXI6IG9sLnByb2ouZnJvbUxvbkxhdChcbiAgICAgICAgICB0aGlzLmNlbnRlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5jZW50ZXIuY29vcmRpbmF0ZXMgOiBbMCwgMF1cbiAgICAgICAgKSxcbiAgICAgICAgem9vbTogdGhpcy56b29tXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY2VudGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5jZW50ZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIGlmIHRoZSBjZW50ZXIgaXMgbm90IHNldCwgd2Ugc2V0IGl0cyBkZWZhdWx0IHZhbHVlXG4gICAgICBpZiAoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihcbiAgICAgICAgICAocG9zaXRpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgICAgICBjb29yZGluYXRlczogW3Bvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgICAgICBjb29yZGluYXRlczogWzAsIDBdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFswLCAwXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgY2VudGVyIG5lZWRzIHRoZSBtYXAgdG8gYmUgcHJvcGVybHkgc2V0LCBzbyBpZiBpdCB3YXMgc2V0IGJlZm9yZSB0aGUgbWFwIHdhcyBpbml0aWFsaXplZCxcbiAgICAgIC8vIHdlIHNldCB0aGUgY2VudGVyIGFnYWluIHRvIHBlcmZvcm0gbmVjZXNzYXJ5IGFkanVzdGVtZW50c1xuICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLmNlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy56b29tID09PSB1bmRlZmluZWQgfHwgdGhpcy56b29tID09PSBudWxsKSB7XG4gICAgICAvLyBpZiB0aGUgem9vbSBpcyBub3Qgc2V0LCB3ZSBzZXQgaXRzIGRlZmF1bHQgdmFsdWVcbiAgICAgIHRoaXMuem9vbSA9IDE4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgem9vbSBuZWVkcyB0aGUgbWFwIHRvIGJlIHByb3Blcmx5IHNldCwgc28gaWYgaXQgd2FzIHNldCBiZWZvcmUgdGhlIG1hcCB3YXMgaW5pdGlhbGl6ZWQsXG4gICAgICAvLyB3ZSBzZXQgdGhlIHpvb20gYWdhaW4gdG8gcGVyZm9ybSBuZWNlc3NhcnkgYWRqdXN0ZW1lbnRzXG4gICAgICB0aGlzLnpvb20gPSB0aGlzLnpvb207XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZG9ubHkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnJlYWRvbmx5ID09PSBudWxsKSB7XG4gICAgICAvLyBpZiByZWFkb25seSBpcyBub3Qgc2V0LCB3ZSBzZXQgaXRzIGRlZmF1bHQgdmFsdWVcbiAgICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVhZG9ubHkgbmVlZHMgdGhlIG1hcCB0byBiZSBwcm9wZXJseSBzZXQsIHNvIGlmIGl0IHdhcyBzZXQgYmVmb3JlIHRoZSBtYXAgd2FzIGluaXRpYWxpemVkLFxuICAgICAgLy8gd2Ugc2V0IHJlYWRvbmx5IGFnYWluIHRvIHBlcmZvcm0gbmVjZXNzYXJ5IGFkanVzdGVtZW50c1xuICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5tYXJrZXJDb29yZGluYXRlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzICE9PSBudWxsXG4gICAgKSB7XG4gICAgICAvLyB0aGUgbWFya2VyIGNvb3JkaW5hdGVzIG5lZWQgdGhlIG1hcCB0byBiZSBwcm9wZXJseSBzZXQsIHNvIGlmIHRoZXkgd2VyZSBzZXQgYmVmb3JlIHRoZSBtYXAgd2FzIGluaXRpYWxpemVkLFxuICAgICAgLy8gd2Ugc2V0IHRoZSBtYXJrZXIgY29vcmRpbmF0ZXMgYWdhaW4gdG8gcGVyZm9ybSBuZWNlc3NhcnkgYWRqdXN0ZW1lbnRzXG4gICAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzID0gdGhpcy5tYXJrZXJDb29yZGluYXRlcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZE1hcmtlckF0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgaWYgKGNvb3JkaW5hdGVzICYmIGNvb3JkaW5hdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgaWYgKHRoaXMuX21hcmtlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTWFya2VyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9tYXJrZXIgPSBuZXcgb2wuRmVhdHVyZSh7XG4gICAgICAgIGdlb21ldHJ5OiBuZXcgb2wuZ2VvbS5Qb2ludChcbiAgICAgICAgICAvLyBbbG9uLCBsYXRdIGlzIGluIEVQU0c6NDMyNiAoZGVncmVlcyksIHdlIHRyYW5zZm9ybSBpdCBpbnRvIEVQU0c6Mzg1NyAobWV0ZXJzKVxuICAgICAgICAgIG9sLnByb2oudHJhbnNmb3JtKGNvb3JkaW5hdGVzLCAnRVBTRzo0MzI2JywgJ0VQU0c6Mzg1NycpXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWFya2VyU291cmNlLmFkZEZlYXR1cmUodGhpcy5fbWFya2VyKTtcbiAgICAgIHRoaXMuX21hcmtlckNvb3JkaW5hdGVzID0gdGhpcy5nZXRNYXJrZXJDb29yZGluYXRlcygpO1xuXG4gICAgICBpZiAoIXRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgY29uc3QgZHJhZ0ludGVyYWN0aW9uID0gbmV3IG9sLmludGVyYWN0aW9uLk1vZGlmeSh7XG4gICAgICAgICAgZmVhdHVyZXM6IG5ldyBvbC5Db2xsZWN0aW9uKFt0aGlzLl9tYXJrZXJdKSxcbiAgICAgICAgICBzdHlsZTogdGhpcy5fbWFya2VyU3R5bGUsXG4gICAgICAgICAgcGl4ZWxUb2xlcmFuY2U6IDUwLFxuICAgICAgICAgIGhpdERldGVjdGlvbjogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fbWFya2VySW50ZXJhY3Rpb24gPSBkcmFnSW50ZXJhY3Rpb247XG4gICAgICAgIHRoaXMuX21hcC5hZGRJbnRlcmFjdGlvbihkcmFnSW50ZXJhY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9tYXJrZXIub24oXG4gICAgICAgICdjaGFuZ2UnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWFya2VyQ29vcmRpbmF0ZXMgPSB0aGlzLmdldE1hcmtlckNvb3JkaW5hdGVzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuX21hcmtlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1hcmtlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWFya2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX21hcmtlclNvdXJjZS5yZW1vdmVGZWF0dXJlKHRoaXMuX21hcmtlcik7XG4gICAgICB0aGlzLl9tYXJrZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXJrZXJJbnRlcmFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9tYXAuZ2V0SW50ZXJhY3Rpb25zKCkucG9wKCk7XG4gICAgICB0aGlzLl9tYXJrZXJJbnRlcmFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1hcmtlckNvb3JkaW5hdGVzKCk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuX21hcmtlciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX21hcmtlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWFya2VyO1xuICAgIH1cbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuX21hcmtlci5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCk7XG4gICAgLy8gY29vcmRpbmF0ZXMgaXMgaW4gRVBTRzozODU3IChtZXRlcnMpLCB3ZSB0cmFuc2Zvcm0gaXQgaW50byBFUFNHOjQzMjYgKGRlZ3JlZXMpXG4gICAgcmV0dXJuIG9sLnByb2oudHJhbnNmb3JtKGNvb3JkaW5hdGVzLCAnRVBTRzozODU3JywgJ0VQU0c6NDMyNicpO1xuICB9XG5cbiAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgdGhpcy5fbWFwLnVwZGF0ZVNpemUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Component, Input, HostBinding } from '@angular/core';
|
|
2
|
-
export class LuxModalBackdropComponent {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.class = 'modal-backdrop fade show';
|
|
5
|
-
this.style = 'z-index: 1050';
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
LuxModalBackdropComponent.decorators = [
|
|
9
|
-
{ type: Component, args: [{
|
|
10
|
-
selector: 'lux-modal-backdrop',
|
|
11
|
-
template: ''
|
|
12
|
-
},] }
|
|
13
|
-
];
|
|
14
|
-
LuxModalBackdropComponent.propDecorators = {
|
|
15
|
-
backdropClass: [{ type: Input }],
|
|
16
|
-
class: [{ type: HostBinding, args: ['class',] }],
|
|
17
|
-
style: [{ type: HostBinding, args: ['style',] }]
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYmFja2Ryb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sdXgvc3JjL2xpYi9tb2RhbC9tb2RhbC1iYWNrZHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNNUQsTUFBTSxPQUFPLHlCQUF5QjtJQUp0QztRQU93QixVQUFLLEdBQUcsMEJBQTBCLENBQUM7UUFDbkMsVUFBSyxHQUFHLGVBQWUsQ0FBQztJQUNoRCxDQUFDOzs7WUFUQSxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsUUFBUSxFQUFFLEVBQUU7YUFDYjs7OzRCQUVFLEtBQUs7b0JBRUwsV0FBVyxTQUFDLE9BQU87b0JBQ25CLFdBQVcsU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZ30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x1eC1tb2RhbC1iYWNrZHJvcCcsXG4gIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBMdXhNb2RhbEJhY2tkcm9wQ29tcG9uZW50IHtcbiAgQElucHV0KCkgYmFja2Ryb3BDbGFzczogc3RyaW5nO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzcyA9ICdtb2RhbC1iYWNrZHJvcCBmYWRlIHNob3cnO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlJykgc3R5bGUgPSAnei1pbmRleDogMTA1MCc7XG59XG4iXX0=
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class LuxModalConfig {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.backdrop = true;
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
LuxModalConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function LuxModalConfig_Factory() { return new LuxModalConfig(); }, token: LuxModalConfig, providedIn: "root" });
|
|
9
|
-
LuxModalConfig.decorators = [
|
|
10
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
11
|
-
];
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvbW9kYWwvbW9kYWwtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBWTNDLE1BQU0sT0FBTyxjQUFjO0lBRDNCO1FBRUUsYUFBUSxHQUFHLElBQUksQ0FBQztLQUNqQjs7OztZQUhBLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTHV4TW9kYWxPcHRpb25zIHtcbiAgYXJpYURlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICBhcmlhTGFiZWxsZWRCeT86IHN0cmluZztcbiAgYmFja2Ryb3A/OiBib29sZWFuO1xuICBrZXlib2FyZD86IGJvb2xlYW47XG4gIHdpbmRvd0NsYXNzPzogc3RyaW5nO1xuICBiYWNrZHJvcENsYXNzPzogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEx1eE1vZGFsQ29uZmlnIGltcGxlbWVudHMgTHV4TW9kYWxPcHRpb25zIHtcbiAgYmFja2Ryb3AgPSB0cnVlO1xufVxuIl19
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { Injectable, ApplicationRef, TemplateRef, Inject, Injector, RendererFactory2 } from '@angular/core';
|
|
2
|
-
import { DOCUMENT } from '@angular/common';
|
|
3
|
-
import { ActiveModal, ModalRef } from './modal-ref';
|
|
4
|
-
import { ContentRef, focusTrap, isDefined } from './util';
|
|
5
|
-
import { LuxModalWindowComponent } from './modal-window';
|
|
6
|
-
import { Subject } from 'rxjs';
|
|
7
|
-
import { LuxModalBackdropComponent } from './modal-backdrop';
|
|
8
|
-
import { LuxModalConfig } from './modal-config';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/common";
|
|
11
|
-
import * as i2 from "./modal-config";
|
|
12
|
-
export class ModalStack {
|
|
13
|
-
constructor(_applicationRef, _document, _injector, _rendererFactory, modalConfig) {
|
|
14
|
-
this._applicationRef = _applicationRef;
|
|
15
|
-
this._document = _document;
|
|
16
|
-
this._injector = _injector;
|
|
17
|
-
this._rendererFactory = _rendererFactory;
|
|
18
|
-
this.modalConfig = modalConfig;
|
|
19
|
-
this._activeWindowCmptHasChanged = new Subject();
|
|
20
|
-
this._modalRefs = [];
|
|
21
|
-
this._windowCmpts = [];
|
|
22
|
-
this._ariaHiddenValues = new Map();
|
|
23
|
-
this._backdropAttributes = ['backdropClass'];
|
|
24
|
-
this._windowAttributes = [
|
|
25
|
-
'ariaLabelledBy',
|
|
26
|
-
'backdrop',
|
|
27
|
-
'centered',
|
|
28
|
-
'keyboard',
|
|
29
|
-
'scrollable',
|
|
30
|
-
'size',
|
|
31
|
-
'windowClass'
|
|
32
|
-
];
|
|
33
|
-
this._activeWindowCmptHasChanged.subscribe(() => {
|
|
34
|
-
if (this._windowCmpts.length) {
|
|
35
|
-
const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];
|
|
36
|
-
focusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);
|
|
37
|
-
this._revertAriaHidden();
|
|
38
|
-
this._setAriaHidden(activeWindowCmpt.location.nativeElement);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
open(moduleCFR, content, options) {
|
|
43
|
-
const config = Object.assign({}, this.modalConfig, options);
|
|
44
|
-
const containerEl = this._document.body;
|
|
45
|
-
const renderer = this._rendererFactory.createRenderer(null, null);
|
|
46
|
-
const removeBodyClass = () => {
|
|
47
|
-
if (!this._modalRefs.length) {
|
|
48
|
-
renderer.removeClass(this._document.body, 'modal-open');
|
|
49
|
-
this._revertAriaHidden();
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
const activeModal = new ActiveModal();
|
|
53
|
-
const contentRef = this.getContentRef(moduleCFR, content, activeModal);
|
|
54
|
-
const backdropCmptRef = config.backdrop ? this._attachBackdrop(moduleCFR, containerEl) : null;
|
|
55
|
-
const windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);
|
|
56
|
-
const modalRef = new ModalRef(windowCmptRef, contentRef, backdropCmptRef);
|
|
57
|
-
this._registerModalRef(modalRef);
|
|
58
|
-
this._registerWindowCmpt(windowCmptRef);
|
|
59
|
-
modalRef.result.then(removeBodyClass, removeBodyClass);
|
|
60
|
-
activeModal.close = (result) => {
|
|
61
|
-
modalRef.close(result);
|
|
62
|
-
};
|
|
63
|
-
activeModal.dismiss = (reason) => {
|
|
64
|
-
modalRef.dismiss(reason);
|
|
65
|
-
};
|
|
66
|
-
this._applyWindowOptions(windowCmptRef.instance, config);
|
|
67
|
-
if (this._modalRefs.length === 1) {
|
|
68
|
-
renderer.addClass(this._document.body, 'modal-open');
|
|
69
|
-
}
|
|
70
|
-
if (backdropCmptRef && backdropCmptRef.instance) {
|
|
71
|
-
this._applyBackgroundOptions(backdropCmptRef.instance, config);
|
|
72
|
-
backdropCmptRef.changeDetectorRef.detectChanges();
|
|
73
|
-
}
|
|
74
|
-
windowCmptRef.changeDetectorRef.detectChanges();
|
|
75
|
-
return modalRef;
|
|
76
|
-
}
|
|
77
|
-
_applyWindowOptions(windowInstance, config) {
|
|
78
|
-
this._windowAttributes.forEach((optionName) => {
|
|
79
|
-
if (isDefined(config[optionName])) {
|
|
80
|
-
windowInstance[optionName] = config[optionName];
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
_applyBackgroundOptions(backgroudInstance, config) {
|
|
85
|
-
this._backdropAttributes.forEach((optionName) => {
|
|
86
|
-
if (isDefined(config[optionName])) {
|
|
87
|
-
backgroudInstance[optionName] = config[optionName];
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
_revertAriaHidden() {
|
|
92
|
-
this._ariaHiddenValues.forEach((value, element) => {
|
|
93
|
-
if (value) {
|
|
94
|
-
element.setAttribute('aria-hidden', value);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
element.removeAttribute('aria-hidden');
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
this._ariaHiddenValues.clear();
|
|
101
|
-
}
|
|
102
|
-
getContentRef(moduleCFR, content, activeModal) {
|
|
103
|
-
if (content instanceof TemplateRef) {
|
|
104
|
-
return this.createFromTemplateRef(content, activeModal);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
createFromTemplateRef(content, activeModal) {
|
|
108
|
-
const context = {
|
|
109
|
-
$implicit: activeModal,
|
|
110
|
-
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
|
|
111
|
-
close(result) {
|
|
112
|
-
activeModal.close(result);
|
|
113
|
-
},
|
|
114
|
-
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
|
|
115
|
-
dismiss(reason) {
|
|
116
|
-
activeModal.dismiss(reason);
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
const viewRef = content.createEmbeddedView(context);
|
|
120
|
-
this._applicationRef.attachView(viewRef);
|
|
121
|
-
return new ContentRef([viewRef.rootNodes], viewRef);
|
|
122
|
-
}
|
|
123
|
-
_attachBackdrop(moduleCFR, containerEl) {
|
|
124
|
-
const backdropFactory = moduleCFR.resolveComponentFactory(LuxModalBackdropComponent);
|
|
125
|
-
const backdropCmptRef = backdropFactory.create(this._injector);
|
|
126
|
-
this._applicationRef.attachView(backdropCmptRef.hostView);
|
|
127
|
-
containerEl.appendChild(backdropCmptRef.location.nativeElement);
|
|
128
|
-
return backdropCmptRef;
|
|
129
|
-
}
|
|
130
|
-
_attachWindowComponent(moduleCFR, containerEl, contentRef) {
|
|
131
|
-
const windowFactory = moduleCFR.resolveComponentFactory(LuxModalWindowComponent);
|
|
132
|
-
const windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);
|
|
133
|
-
this._applicationRef.attachView(windowCmptRef.hostView);
|
|
134
|
-
containerEl.appendChild(windowCmptRef.location.nativeElement);
|
|
135
|
-
return windowCmptRef;
|
|
136
|
-
}
|
|
137
|
-
_registerModalRef(modalRef) {
|
|
138
|
-
const unregisterModalRef = () => {
|
|
139
|
-
const index = this._modalRefs.indexOf(modalRef);
|
|
140
|
-
if (index > -1) {
|
|
141
|
-
this._modalRefs.splice(index, 1);
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
this._modalRefs.push(modalRef);
|
|
145
|
-
modalRef.result.then(unregisterModalRef, unregisterModalRef);
|
|
146
|
-
}
|
|
147
|
-
_registerWindowCmpt(windowCmpt) {
|
|
148
|
-
this._windowCmpts.push(windowCmpt);
|
|
149
|
-
this._activeWindowCmptHasChanged.next();
|
|
150
|
-
windowCmpt.onDestroy(() => {
|
|
151
|
-
const index = this._windowCmpts.indexOf(windowCmpt);
|
|
152
|
-
if (index > -1) {
|
|
153
|
-
this._windowCmpts.splice(index, 1);
|
|
154
|
-
this._activeWindowCmptHasChanged.next();
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
_setAriaHidden(element) {
|
|
159
|
-
const parent = element.parentElement;
|
|
160
|
-
if (parent && element !== this._document.body) {
|
|
161
|
-
Array.from(parent.children).forEach((sibling) => {
|
|
162
|
-
if (sibling !== element && sibling.nodeName !== 'SCRIPT') {
|
|
163
|
-
this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));
|
|
164
|
-
sibling.setAttribute('aria-hidden', 'true');
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
this._setAriaHidden(parent);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
ModalStack.ɵprov = i0.ɵɵdefineInjectable({ factory: function ModalStack_Factory() { return new ModalStack(i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i0.RendererFactory2), i0.ɵɵinject(i2.LuxModalConfig)); }, token: ModalStack, providedIn: "root" });
|
|
172
|
-
ModalStack.decorators = [
|
|
173
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
174
|
-
];
|
|
175
|
-
ModalStack.ctorParameters = () => [
|
|
176
|
-
{ type: ApplicationRef },
|
|
177
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
|
178
|
-
{ type: Injector },
|
|
179
|
-
{ type: RendererFactory2 },
|
|
180
|
-
{ type: LuxModalConfig }
|
|
181
|
-
];
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sdXgvc3JjL2xpYi9tb2RhbC9tb2RhbC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFFZCxXQUFXLEVBRVgsTUFBTSxFQUNOLFFBQVEsRUFDUixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHakUsTUFBTSxPQUFPLFVBQVU7SUFnQnJCLFlBQ1UsZUFBK0IsRUFDYixTQUFjLEVBQ2hDLFNBQW1CLEVBQ25CLGdCQUFrQyxFQUNsQyxXQUEyQjtRQUozQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDYixjQUFTLEdBQVQsU0FBUyxDQUFLO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFwQjdCLGdDQUEyQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUE0QyxFQUFFLENBQUM7UUFDM0Qsc0JB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LElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDOzs7O1lBM05GLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OztZQWpCaEMsY0FBYzs0Q0FvQ1gsTUFBTSxTQUFDLFFBQVE7WUEvQmxCLFFBQVE7WUFDUixnQkFBZ0I7WUFTUSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgQXBwbGljYXRpb25SZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgVGVtcGxhdGVSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgUmVuZGVyZXJGYWN0b3J5MlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgQWN0aXZlTW9kYWwsIE1vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xuaW1wb3J0IHsgQ29udGVudFJlZiwgZm9jdXNUcmFwLCBpc0RlZmluZWQgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgTHV4TW9kYWxXaW5kb3dDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLXdpbmRvdyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMdXhNb2RhbEJhY2tkcm9wQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC1iYWNrZHJvcCc7XG5pbXBvcnQgeyBMdXhNb2RhbE9wdGlvbnMsIEx1eE1vZGFsQ29uZmlnIH0gZnJvbSAnLi9tb2RhbC1jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1vZGFsU3RhY2sge1xuICBwcml2YXRlIF9hY3RpdmVXaW5kb3dDbXB0SGFzQ2hhbmdlZCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX21vZGFsUmVmczogTW9kYWxSZWZbXSA9IFtdO1xuICBwcml2YXRlIF93aW5kb3dDbXB0czogQ29tcG9uZW50UmVmPEx1eE1vZGFsV2luZG93Q29tcG9uZW50PltdID0gW107XG4gIHByaXZhdGUgX2FyaWFIaWRkZW5WYWx1ZXM6IE1hcDxFbGVtZW50LCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIF9iYWNrZHJvcEF0dHJpYnV0ZXMgPSBbJ2JhY2tkcm9wQ2xhc3MnXTtcbiAgcHJpdmF0ZSBfd2luZG93QXR0cmlidXRlcyA9IFtcbiAgICAnYXJpYUxhYmVsbGVkQnknLFxuICAgICdiYWNrZHJvcCcsXG4gICAgJ2NlbnRlcmVkJyxcbiAgICAna2V5Ym9hcmQnLFxuICAgICdzY3JvbGxhYmxlJyxcbiAgICAnc2l6ZScsXG4gICAgJ3dpbmRvd0NsYXNzJ1xuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIF9yZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgcHJpdmF0ZSBtb2RhbENvbmZpZzogTHV4TW9kYWxDb25maWdcbiAgKSB7XG4gICAgdGhpcy5fYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl93aW5kb3dDbXB0cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlV2luZG93Q21wdCA9XG4gICAgICAgICAgdGhpcy5fd2luZG93Q21wdHNbdGhpcy5fd2luZG93Q21wdHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGZvY3VzVHJhcChcbiAgICAgICAgICBhY3RpdmVXaW5kb3dDbXB0LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5fYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fcmV2ZXJ0QXJpYUhpZGRlbigpO1xuICAgICAgICB0aGlzLl9zZXRBcmlhSGlkZGVuKGFjdGl2ZVdpbmRvd0NtcHQubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcGVuKFxuICAgIG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIGNvbnRlbnQ6IGFueSxcbiAgICBvcHRpb25zOiBMdXhNb2RhbE9wdGlvbnNcbiAgKTogTW9kYWxSZWYge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMubW9kYWxDb25maWcsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fZG9jdW1lbnQuYm9keTtcbiAgICBjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcbiAgICBjb25zdCByZW1vdmVCb2R5Q2xhc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuX21vZGFsUmVmcy5sZW5ndGgpIHtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fZG9jdW1lbnQuYm9keSwgJ21vZGFsLW9wZW4nKTtcbiAgICAgICAgdGhpcy5fcmV2ZXJ0QXJpYUhpZGRlbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYWN0aXZlTW9kYWwgPSBuZXcgQWN0aXZlTW9kYWwoKTtcbiAgICBjb25zdCBjb250ZW50UmVmID0gdGhpcy5nZXRDb250ZW50UmVmKG1vZHVsZUNGUiwgY29udGVudCwgYWN0aXZlTW9kYWwpO1xuICAgIGNvbnN0IGJhY2tkcm9wQ21wdFJlZjogQ29tcG9uZW50UmVmPEx1eE1vZGFsQmFja2Ryb3BDb21wb25lbnQ+ID1cbiAgICAgIGNvbmZpZy5iYWNrZHJvcCA/IHRoaXMuX2F0dGFjaEJhY2tkcm9wKG1vZHVsZUNGUiwgY29udGFpbmVyRWwpIDogbnVsbDtcbiAgICBjb25zdCB3aW5kb3dDbXB0UmVmOiBDb21wb25lbnRSZWY8THV4TW9kYWxXaW5kb3dDb21wb25lbnQ+ID1cbiAgICAgIHRoaXMuX2F0dGFjaFdpbmRvd0NvbXBvbmVudChtb2R1bGVDRlIsIGNvbnRhaW5lckVsLCBjb250ZW50UmVmKTtcbiAgICBjb25zdCBtb2RhbFJlZjogTW9kYWxSZWYgPSBuZXcgTW9kYWxSZWYoXG4gICAgICB3aW5kb3dDbXB0UmVmLFxuICAgICAgY29udGVudFJlZixcbiAgICAgIGJhY2tkcm9wQ21wdFJlZlxuICAgICk7XG4gICAgdGhpcy5fcmVnaXN0ZXJNb2RhbFJlZihtb2RhbFJlZik7XG4gICAgdGhpcy5fcmVnaXN0ZXJXaW5kb3dDbXB0KHdpbmRvd0NtcHRSZWYpO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKHJlbW92ZUJvZHlDbGFzcywgcmVtb3ZlQm9keUNsYXNzKTtcbiAgICBhY3RpdmVNb2RhbC5jbG9zZSA9IChyZXN1bHQ6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgbW9kYWxSZWYuY2xvc2UocmVzdWx0KTtcbiAgICB9O1xuICAgIGFjdGl2ZU1vZGFsLmRpc21pc3MgPSAocmVhc29uOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIG1vZGFsUmVmLmRpc21pc3MocmVhc29uKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fYXBwbHlXaW5kb3dPcHRpb25zKHdpbmRvd0NtcHRSZWYuaW5zdGFuY2UsIGNvbmZpZyk7XG4gICAgaWYgKHRoaXMuX21vZGFsUmVmcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2RvY3VtZW50LmJvZHksICdtb2RhbC1vcGVuJyk7XG4gICAgfVxuICAgIGlmIChiYWNrZHJvcENtcHRSZWYgJiYgYmFja2Ryb3BDbXB0UmVmLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLl9hcHBseUJhY2tncm91bmRPcHRpb25zKGJhY2tkcm9wQ21wdFJlZi5pbnN0YW5jZSwgY29uZmlnKTtcbiAgICAgIGJhY2tkcm9wQ21wdFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHdpbmRvd0NtcHRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgcmV0dXJuIG1vZGFsUmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlXaW5kb3dPcHRpb25zKFxuICAgIHdpbmRvd0luc3RhbmNlOiBMdXhNb2RhbFdpbmRvd0NvbXBvbmVudCxcbiAgICBjb25maWc6IEx1eE1vZGFsT3B0aW9uc1xuICApOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dBdHRyaWJ1dGVzLmZvckVhY2goKG9wdGlvbk5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlzRGVmaW5lZChjb25maWdbb3B0aW9uTmFtZV0pKSB7XG4gICAgICAgIHdpbmRvd0luc3RhbmNlW29wdGlvbk5hbWVdID0gY29uZmlnW29wdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlCYWNrZ3JvdW5kT3B0aW9ucyhcbiAgICBiYWNrZ3JvdWRJbnN0YW5jZTogTHV4TW9kYWxCYWNrZHJvcENvbXBvbmVudCxcbiAgICBjb25maWc6IEx1eE1vZGFsT3B0aW9uc1xuICApOiB2b2lkIHtcbiAgICB0aGlzLl9iYWNrZHJvcEF0dHJpYnV0ZXMuZm9yRWFjaCgob3B0aW9uTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNEZWZpbmVkKGNvbmZpZ1tvcHRpb25OYW1lXSkpIHtcbiAgICAgICAgYmFja2dyb3VkSW5zdGFuY2Vbb3B0aW9uTmFtZV0gPSBjb25maWdbb3B0aW9uTmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZXZlcnRBcmlhSGlkZGVuKCk6IHZvaWQge1xuICAgIHRoaXMuX2FyaWFIaWRkZW5WYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9hcmlhSGlkZGVuVmFsdWVzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRlbnRSZWYoXG4gICAgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgY29udGVudDogYW55LFxuICAgIGFjdGl2ZU1vZGFsOiBBY3RpdmVNb2RhbFxuICApOiBDb250ZW50UmVmIHtcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVGcm9tVGVtcGxhdGVSZWYoY29udGVudCwgYWN0aXZlTW9kYWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnJvbVRlbXBsYXRlUmVmKFxuICAgIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgYWN0aXZlTW9kYWw6IEFjdGl2ZU1vZGFsXG4gICk6IENvbnRlbnRSZWYge1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAkaW1wbGljaXQ6IGFjdGl2ZU1vZGFsLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1hcnJvdy9wcmVmZXItYXJyb3ctZnVuY3Rpb25zXG4gICAgICBjbG9zZShyZXN1bHQpOiB2b2lkIHtcbiAgICAgICAgYWN0aXZlTW9kYWwuY2xvc2UocmVzdWx0KTtcbiAgICAgIH0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWFycm93L3ByZWZlci1hcnJvdy1mdW5jdGlvbnNcbiAgICAgIGRpc21pc3MocmVhc29uKTogdm9pZCB7XG4gICAgICAgIGFjdGl2ZU1vZGFsLmRpc21pc3MocmVhc29uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHZpZXdSZWYpO1xuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbdmlld1JlZi5yb290Tm9kZXNdLCB2aWV3UmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaEJhY2tkcm9wKFxuICAgIG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIGNvbnRhaW5lckVsOiBhbnlcbiAgKTogQ29tcG9uZW50UmVmPEx1eE1vZGFsQmFja2Ryb3BDb21wb25lbnQ+IHtcbiAgICBjb25zdCBiYWNrZHJvcEZhY3RvcnkgPSBtb2R1bGVDRlIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICBMdXhNb2RhbEJhY2tkcm9wQ29tcG9uZW50XG4gICAgKTtcbiAgICBjb25zdCBiYWNrZHJvcENtcHRSZWYgPSBiYWNrZHJvcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2luamVjdG9yKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KGJhY2tkcm9wQ21wdFJlZi5ob3N0Vmlldyk7XG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQoYmFja2Ryb3BDbXB0UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHJldHVybiBiYWNrZHJvcENtcHRSZWY7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hXaW5kb3dDb21wb25lbnQoXG4gICAgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgY29udGFpbmVyRWw6IGFueSxcbiAgICBjb250ZW50UmVmOiBhbnlcbiAgKTogQ29tcG9uZW50UmVmPEx1eE1vZGFsV2luZG93Q29tcG9uZW50PiB7XG4gICAgY29uc3Qgd2luZG93RmFjdG9yeSA9IG1vZHVsZUNGUi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShcbiAgICAgIEx1eE1vZGFsV2luZG93Q29tcG9uZW50XG4gICAgKTtcbiAgICBjb25zdCB3aW5kb3dDbXB0UmVmID0gd2luZG93RmFjdG9yeS5jcmVhdGUoXG4gICAgICB0aGlzLl9pbmplY3RvcixcbiAgICAgIGNvbnRlbnRSZWYubm9kZXNcbiAgICApO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcod2luZG93Q21wdFJlZi5ob3N0Vmlldyk7XG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQod2luZG93Q21wdFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICByZXR1cm4gd2luZG93Q21wdFJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyTW9kYWxSZWYobW9kYWxSZWY6IE1vZGFsUmVmKTogdm9pZCB7XG4gICAgY29uc3QgdW5yZWdpc3Rlck1vZGFsUmVmID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9tb2RhbFJlZnMuaW5kZXhPZihtb2RhbFJlZik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX21vZGFsUmVmcy5wdXNoKG1vZGFsUmVmKTtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbih1bnJlZ2lzdGVyTW9kYWxSZWYsIHVucmVnaXN0ZXJNb2RhbFJlZik7XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlcldpbmRvd0NtcHQoXG4gICAgd2luZG93Q21wdDogQ29tcG9uZW50UmVmPEx1eE1vZGFsV2luZG93Q29tcG9uZW50PlxuICApOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dDbXB0cy5wdXNoKHdpbmRvd0NtcHQpO1xuICAgIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkLm5leHQoKTtcblxuICAgIHdpbmRvd0NtcHQub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2luZG93Q21wdHMuaW5kZXhPZih3aW5kb3dDbXB0KTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuX3dpbmRvd0NtcHRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkLm5leHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldEFyaWFIaWRkZW4oZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICBpZiAocGFyZW50ICYmIGVsZW1lbnQgIT09IHRoaXMuX2RvY3VtZW50LmJvZHkpIHtcbiAgICAgIEFycmF5LmZyb20ocGFyZW50LmNoaWxkcmVuKS5mb3JFYWNoKChzaWJsaW5nKSA9PiB7XG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBlbGVtZW50ICYmIHNpYmxpbmcubm9kZU5hbWUgIT09ICdTQ1JJUFQnKSB7XG4gICAgICAgICAgdGhpcy5fYXJpYUhpZGRlblZhbHVlcy5zZXQoXG4gICAgICAgICAgICBzaWJsaW5nLFxuICAgICAgICAgICAgc2libGluZy5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJylcbiAgICAgICAgICApO1xuICAgICAgICAgIHNpYmxpbmcuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fc2V0QXJpYUhpZGRlbihwYXJlbnQpO1xuICAgIH1cbiAgfVxufVxuIl19
|