UNPKG

angular-bootstrap-italia

Version:

<p align="center"> <h1 align="center">Bootstrap Italia + Angular 9</h1>

210 lines 26.3 kB
import { __decorate, __values } from "tslib"; import { Component, Input, Output, EventEmitter } from '@angular/core'; import * as L from 'leaflet'; // Leaflet Draw import 'leaflet-draw'; import drawLocales from 'leaflet-draw-locales'; var LeafletMapComponent = /** @class */ (function () { function LeafletMapComponent() { this.geoJson = new EventEmitter(); this.editableLayers = new L.FeatureGroup(); this.options = { position: 'topright', draw: { marker: { icon: L.icon({ iconSize: [25, 41], iconAnchor: [13, 41], iconUrl: 'assets/marker-icon.png', shadowUrl: 'assets/marker-shadow.png' }) }, // rectangle: { showArea: false }, // disable showArea rectangle: false, polyline: false, polygon: true, circlemarker: false }, edit: { featureGroup: this.editableLayers, remove: true } }; } LeafletMapComponent.prototype.ngOnInit = function () { var _this = this; this.drawnLayers = []; // initialize Leaflet this.map = L.map('mapid', { center: [this.latitude, this.longitude], zoom: 6, scrollWheelZoom: true }); // add the OpenStreetMap tiles L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '&copy; <a href="https://openstreetmap.org/copyright">OpenStreetMap</a> contributors', }).addTo(this.map); // Center Marker // this.userCenterMarker = L.marker([this.latitude, this.longitude]).addTo(this.map); // show the scale bar on the lower left corner L.control.scale().addTo(this.map); // Automatically defines Leaflet.draw to the specified language drawLocales('it'); this.map.addLayer(this.editableLayers); if (this.enableEdit) { var drawControl = new L.Control.Draw(this.options); this.map.addControl(drawControl); } this.map.on(L.Draw.Event.CREATED, function (e) { _this.drawnLayers.push({ layer: e.layer, type: e.layerType }); _this.editableLayers.addLayer(e.layer); // Output GeoJSON _this.updateMapGeoJson(); }); this.map.on(L.Draw.Event.DELETED, function (e) { e.layers.eachLayer(function (layer) { var _a, _b; var lyIndex = -1; _this.drawnLayers.forEach(function (value, index) { if (value.layer._leaflet_id === layer._leaflet_id) { lyIndex = index; } }); if (lyIndex > -1) { _this.drawnLayers.splice(lyIndex, 1); } if (((_a = _this.locationBoundingBox) === null || _a === void 0 ? void 0 : _a._leaflet_id) === layer._leaflet_id) { _this.locationBoundingBox = null; } if (((_b = _this.userCenterMarker) === null || _b === void 0 ? void 0 : _b._leaflet_id) === layer._leaflet_id) { _this.userCenterMarker = null; } }); _this.updateMapGeoJson(); }); // Input GeoJson feature list var fullLayer = L.geoJSON(this.geoJsonFeatureList); var layers = fullLayer.getLayers(); layers.forEach(function (layer) { _this.drawnLayers.push({ layer: layer, type: 'Feature' }); _this.editableLayers.addLayer(layer); }); this.map.fitBounds(fullLayer.getBounds()); }; LeafletMapComponent.prototype.ngOnChanges = function (changes) { var _a, _b; if (this.map && (changes.latitude || changes.longitude)) { this.map.setView([this.latitude, this.longitude], 6); if (this.userCenterMarker) { this.map.removeLayer(this.userCenterMarker); } this.userCenterMarker = L.marker([this.latitude, this.longitude], { icon: L.icon({ iconSize: [25, 41], iconAnchor: [13, 41], iconUrl: 'assets/marker-icon.png', shadowUrl: 'assets/marker-shadow.png' }) }); this.editableLayers.addLayer(this.userCenterMarker); } if (changes.bboxPolygon && ((_a = this.bboxPolygon) === null || _a === void 0 ? void 0 : _a.coordinates)) { var bbox = this.getBoundBoxFromPolygon(this.bboxPolygon.coordinates); if (this.locationBoundingBox) { this.map.removeLayer(this.locationBoundingBox); } // add the bounding box to the map, and set the map extent to it // this.locationBoundingBox = L.rectangle(bbox); // this.editableLayers.addLayer(this.locationBoundingBox); this.map.fitBounds(bbox); } if (changes.shapePolygon && ((_b = this.shapePolygon) === null || _b === void 0 ? void 0 : _b.coordinates)) { this.locationBoundingBox = L.geoJSON(this.shapePolygon); this.editableLayers.addLayer(this.locationBoundingBox); } this.updateMapGeoJson(); }; LeafletMapComponent.prototype.getBoundBoxFromPolygon = function (coordinates) { var e_1, _a; var lats = []; var lngs = []; try { for (var _b = __values(coordinates[0]), _c = _b.next(); !_c.done; _c = _b.next()) { var coordinate = _c.value; lats.push(coordinate[1]); lngs.push(coordinate[0]); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } // calc the min and max lng and lat var minlat = Math.min.apply(null, lats); var maxlat = Math.max.apply(null, lats); var minlng = Math.min.apply(null, lngs); var maxlng = Math.max.apply(null, lngs); // create a bounding rectangle that can be used in leaflet return [[minlat, minlng], [maxlat, maxlng]]; }; LeafletMapComponent.prototype.layerToGeoJson = function (layer, layerType) { var geoJson = layer.toGeoJSON(); if (layerType === 'circle') { var radius = layer.getRadius(); geoJson.properties.radius = radius; } return geoJson; }; LeafletMapComponent.prototype.updateMapGeoJson = function () { var _this = this; var drawnLayersGeoJson = []; if (this.drawnLayers) { this.drawnLayers.forEach(function (e) { var geojson = _this.layerToGeoJson(e.layer, e.type); drawnLayersGeoJson.push(geojson); }); } if (this.userCenterMarker) { drawnLayersGeoJson.push(this.userCenterMarker.toGeoJSON()); } if (this.locationBoundingBox) { drawnLayersGeoJson.push(this.locationBoundingBox.toGeoJSON()); } this.geoJson.emit(drawnLayersGeoJson); }; __decorate([ Input() ], LeafletMapComponent.prototype, "latitude", void 0); __decorate([ Input() ], LeafletMapComponent.prototype, "longitude", void 0); __decorate([ Input() ], LeafletMapComponent.prototype, "enableEdit", void 0); __decorate([ Input() ], LeafletMapComponent.prototype, "bboxPolygon", void 0); __decorate([ Input() ], LeafletMapComponent.prototype, "shapePolygon", void 0); __decorate([ Input() ], LeafletMapComponent.prototype, "geoJsonFeatureList", void 0); __decorate([ Output() ], LeafletMapComponent.prototype, "geoJson", void 0); LeafletMapComponent = __decorate([ Component({ selector: 'lib-leaflet-map', template: "<div id=\"mapid\"></div>\r\n", styles: ["#mapid{height:500px}"] }) ], LeafletMapComponent); return LeafletMapComponent; }()); export { LeafletMapComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1ib290c3RyYXAtaXRhbGlhLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbGVhZmxldC9sZWFmbGV0LW1hcC9sZWFmbGV0LW1hcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFhLE1BQU0sRUFBRSxZQUFZLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sS0FBSyxDQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTdCLGVBQWU7QUFDZixPQUFPLGNBQWMsQ0FBQztBQUN0QixPQUFPLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQVEvQztJQTBDRTtRQWhDVSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVEvQixtQkFBYyxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLFlBQU8sR0FBRztZQUNoQixRQUFRLEVBQUUsVUFBVTtZQUNwQixJQUFJLEVBQUU7Z0JBQ0osTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO3dCQUNYLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7d0JBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7d0JBQ3BCLE9BQU8sRUFBRSx3QkFBd0I7d0JBQ2pDLFNBQVMsRUFBRSwwQkFBMEI7cUJBQ3RDLENBQUM7aUJBQ0g7Z0JBQ0Qsc0RBQXNEO2dCQUN0RCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsWUFBWSxFQUFFLEtBQUs7YUFDcEI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNqQyxNQUFNLEVBQUUsSUFBSTthQUNiO1NBQ0YsQ0FBQztJ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TlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XHJcblxyXG4vLyBMZWFmbGV0IERyYXdcclxuaW1wb3J0ICdsZWFmbGV0LWRyYXcnO1xyXG5pbXBvcnQgZHJhd0xvY2FsZXMgZnJvbSAnbGVhZmxldC1kcmF3LWxvY2FsZXMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWxlYWZsZXQtbWFwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGVhZmxldC1tYXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xlYWZsZXQtbWFwLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExlYWZsZXRNYXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8vIEBJbnB1dCgpIG1hcElkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGF0aXR1ZGU6IG51bWJlcjtcclxuICBASW5wdXQoKSBsb25naXR1ZGU6IG51bWJlcjtcclxuICBASW5wdXQoKSBlbmFibGVFZGl0OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGJib3hQb2x5Z29uOiBhbnk7XHJcbiAgQElucHV0KCkgc2hhcGVQb2x5Z29uOiBhbnk7XHJcbiAgQElucHV0KCkgZ2VvSnNvbkZlYXR1cmVMaXN0OiBhbnlbXTtcclxuXHJcbiAgQE91dHB1dCgpIGdlb0pzb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHByaXZhdGUgbWFwO1xyXG4gIHByaXZhdGUgdXNlckNlbnRlck1hcmtlcjtcclxuXHJcbiAgcHJpdmF0ZSBkcmF3bkxheWVyczogYW55W107XHJcbiAgcHJpdmF0ZSBsb2NhdGlvbkJvdW5kaW5nQm94O1xyXG5cclxuICBwcml2YXRlIGVkaXRhYmxlTGF5ZXJzID0gbmV3IEwuRmVhdHVyZUdyb3VwKCk7XHJcbiAgcHJpdmF0ZSBvcHRpb25zID0ge1xyXG4gICAgcG9zaXRpb246ICd0b3ByaWdodCcsXHJcbiAgICBkcmF3OiB7XHJcbiAgICAgIG1hcmtlcjoge1xyXG4gICAgICAgIGljb246IEwuaWNvbih7XHJcbiAgICAgICAgICBpY29uU2l6ZTogWzI1LCA0MV0sXHJcbiAgICAgICAgICBpY29uQW5jaG9yOiBbMTMsIDQxXSxcclxuICAgICAgICAgIGljb25Vcmw6ICdhc3NldHMvbWFya2VyLWljb24ucG5nJyxcclxuICAgICAgICAgIHNoYWRvd1VybDogJ2Fzc2V0cy9tYXJrZXItc2hhZG93LnBuZydcclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICAvLyByZWN0YW5nbGU6IHsgc2hvd0FyZWE6IGZhbHNlIH0sIC8vIGRpc2FibGUgc2hvd0FyZWFcclxuICAgICAgcmVjdGFuZ2xlOiBmYWxzZSxcclxuICAgICAgcG9seWxpbmU6IGZhbHNlLFxyXG4gICAgICBwb2x5Z29uOiB0cnVlLFxyXG4gICAgICBjaXJjbGVtYXJrZXI6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAgZWRpdDoge1xyXG4gICAgICBmZWF0dXJlR3JvdXA6IHRoaXMuZWRpdGFibGVMYXllcnMsIC8vIFJFUVVJUkVEISFcclxuICAgICAgcmVtb3ZlOiB0cnVlXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRyYXduTGF5ZXJzID0gW107XHJcblxyXG4gICAgLy8gaW5pdGlhbGl6ZSBMZWFmbGV0XHJcbiAgICB0aGlzLm1hcCA9IEwubWFwKCdtYXBpZCcsIHtcclxuICAgICAgY2VudGVyOiBbdGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGVdLFxyXG4gICAgICB6b29tOiA2LFxyXG4gICAgICBzY3JvbGxXaGVlbFpvb206IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFkZCB0aGUgT3BlblN0cmVldE1hcCB0aWxlc1xyXG4gICAgTC50aWxlTGF5ZXIoJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywge1xyXG4gICAgICBtYXhab29tOiAxOSxcclxuICAgICAgYXR0cmlidXRpb246ICcmY29weTsgPGEgaHJlZj1cImh0dHBzOi8vb3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJyxcclxuICAgIH0pLmFkZFRvKHRoaXMubWFwKTtcclxuXHJcbiAgICAvLyBDZW50ZXIgTWFya2VyXHJcbiAgICAvLyB0aGlzLnVzZXJDZW50ZXJNYXJrZXIgPSBMLm1hcmtlcihbdGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGVdKS5hZGRUbyh0aGlzLm1hcCk7XHJcblxyXG4gICAgLy8gc2hvdyB0aGUgc2NhbGUgYmFyIG9uIHRoZSBsb3dlciBsZWZ0IGNvcm5lclxyXG4gICAgTC5jb250cm9sLnNjYWxlKCkuYWRkVG8odGhpcy5tYXApO1xyXG5cclxuICAgIC8vIEF1dG9tYXRpY2FsbHkgZGVmaW5lcyBMZWFmbGV0LmRyYXcgdG8gdGhlIHNwZWNpZmllZCBsYW5ndWFnZVxyXG4gICAgZHJhd0xvY2FsZXMoJ2l0Jyk7XHJcblxyXG4gICAgdGhpcy5tYXAuYWRkTGF5ZXIodGhpcy5lZGl0YWJsZUxheWVycyk7XHJcblxyXG4gICAgaWYgKHRoaXMuZW5hYmxlRWRpdCkge1xyXG4gICAgICBjb25zdCBkcmF3Q29udHJvbCA9IG5ldyBMLkNvbnRyb2wuRHJhdyh0aGlzLm9wdGlvbnMpO1xyXG4gICAgICB0aGlzLm1hcC5hZGRDb250cm9sKGRyYXdDb250cm9sKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1hcC5vbihMLkRyYXcuRXZlbnQuQ1JFQVRFRCwgKGUpID0+IHtcclxuICAgICAgdGhpcy5kcmF3bkxheWVycy5wdXNoKHsgbGF5ZXI6IGUubGF5ZXIsIHR5cGU6IGUubGF5ZXJUeXBlIH0pO1xyXG5cclxuICAgICAgdGhpcy5lZGl0YWJsZUxheWVycy5hZGRMYXllcihlLmxheWVyKTtcclxuXHJcbiAgICAgIC8vIE91dHB1dCBHZW9KU09OXHJcbiAgICAgIHRoaXMudXBkYXRlTWFwR2VvSnNvbigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5tYXAub24oTC5EcmF3LkV2ZW50LkRFTEVURUQsIChlKSA9PiB7XHJcbiAgICAgIGUubGF5ZXJzLmVhY2hMYXllcihsYXllciA9PiB7XHJcbiAgICAgICAgbGV0IGx5SW5kZXggPSAtMTtcclxuICAgICAgICB0aGlzLmRyYXduTGF5ZXJzLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlLmxheWVyLl9sZWFmbGV0X2lkID09PSBsYXllci5fbGVhZmxldF9pZCkge1xyXG4gICAgICAgICAgICBseUluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChseUluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIHRoaXMuZHJhd25MYXllcnMuc3BsaWNlKGx5SW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9jYXRpb25Cb3VuZGluZ0JveD8uX2xlYWZsZXRfaWQgPT09IGxheWVyLl9sZWFmbGV0X2lkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uQm91bmRpbmdCb3ggPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlckNlbnRlck1hcmtlcj8uX2xlYWZsZXRfaWQgPT09IGxheWVyLl9sZWFmbGV0X2lkKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJDZW50ZXJNYXJrZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZU1hcEdlb0pzb24oKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIElucHV0IEdlb0pzb24gZmVhdHVyZSBsaXN0XHJcbiAgICBjb25zdCBmdWxsTGF5ZXIgPSBMLmdlb0pTT04odGhpcy5nZW9Kc29uRmVhdHVyZUxpc3QpO1xyXG4gICAgY29uc3QgbGF5ZXJzID0gZnVsbExheWVyLmdldExheWVycygpO1xyXG4gICAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xyXG4gICAgICB0aGlzLmRyYXduTGF5ZXJzLnB1c2goeyBsYXllciwgdHlwZTogJ0ZlYXR1cmUnIH0pO1xyXG4gICAgICB0aGlzLmVkaXRhYmxlTGF5ZXJzLmFkZExheWVyKGxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubWFwLmZpdEJvdW5kcyhmdWxsTGF5ZXIuZ2V0Qm91bmRzKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubWFwICYmIChjaGFuZ2VzLmxhdGl0dWRlIHx8IGNoYW5nZXMubG9uZ2l0dWRlKSkge1xyXG4gICAgICB0aGlzLm1hcC5zZXRWaWV3KFt0aGlzLmxhdGl0dWRlLCB0aGlzLmxvbmdpdHVkZV0sIDYpO1xyXG5cclxuICAgICAgaWYgKHRoaXMudXNlckNlbnRlck1hcmtlcikge1xyXG4gICAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKHRoaXMudXNlckNlbnRlck1hcmtlcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXNlckNlbnRlck1hcmtlciA9IEwubWFya2VyKFxyXG4gICAgICAgIFt0aGlzLmxhdGl0dWRlLCB0aGlzLmxvbmdpdHVkZV0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWNvbjogTC5pY29uKHtcclxuICAgICAgICAgICAgaWNvblNpemU6IFsyNSwgNDFdLFxyXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMTMsIDQxXSxcclxuICAgICAgICAgICAgaWNvblVybDogJ2Fzc2V0cy9tYXJrZXItaWNvbi5wbmcnLFxyXG4gICAgICAgICAgICBzaGFkb3dVcmw6ICdhc3NldHMvbWFya2VyLXNoYWRvdy5wbmcnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5lZGl0YWJsZUxheWVycy5hZGRMYXllcih0aGlzLnVzZXJDZW50ZXJNYXJrZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLmJib3hQb2x5Z29uICYmIHRoaXMuYmJveFBvbHlnb24/LmNvb3JkaW5hdGVzKSB7XHJcbiAgICAgIGNvbnN0IGJib3ggPSB0aGlzLmdldEJvdW5kQm94RnJvbVBvbHlnb24odGhpcy5iYm94UG9seWdvbi5jb29yZGluYXRlcyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5sb2NhdGlvbkJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIodGhpcy5sb2NhdGlvbkJvdW5kaW5nQm94KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIHRoZSBib3VuZGluZyBib3ggdG8gdGhlIG1hcCwgYW5kIHNldCB0aGUgbWFwIGV4dGVudCB0byBpdFxyXG4gICAgICAvLyB0aGlzLmxvY2F0aW9uQm91bmRpbmdCb3ggPSBMLnJlY3RhbmdsZShiYm94KTtcclxuICAgICAgLy8gdGhpcy5lZGl0YWJsZUxheWVycy5hZGRMYXllcih0aGlzLmxvY2F0aW9uQm91bmRpbmdCb3gpO1xyXG4gICAgICB0aGlzLm1hcC5maXRCb3VuZHMoYmJveCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXMuc2hhcGVQb2x5Z29uICYmIHRoaXMuc2hhcGVQb2x5Z29uPy5jb29yZGluYXRlcykge1xyXG4gICAgICB0aGlzLmxvY2F0aW9uQm91bmRpbmdCb3ggPSBMLmdlb0pTT04odGhpcy5zaGFwZVBvbHlnb24pO1xyXG4gICAgICB0aGlzLmVkaXRhYmxlTGF5ZXJzLmFkZExheWVyKHRoaXMubG9jYXRpb25Cb3VuZGluZ0JveCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVNYXBHZW9Kc29uKCk7XHJcbiAgfVxyXG5cclxuICBnZXRCb3VuZEJveEZyb21Qb2x5Z29uKGNvb3JkaW5hdGVzKSB7XHJcbiAgICBjb25zdCBsYXRzID0gW107XHJcbiAgICBjb25zdCBsbmdzID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb29yZGluYXRlIG9mIGNvb3JkaW5hdGVzWzBdKSB7XHJcbiAgICAgIGxhdHMucHVzaChjb29yZGluYXRlWzFdKTtcclxuICAgICAgbG5ncy5wdXNoKGNvb3JkaW5hdGVbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNhbGMgdGhlIG1pbiBhbmQgbWF4IGxuZyBhbmQgbGF0XHJcbiAgICBjb25zdCBtaW5sYXQgPSBNYXRoLm1pbi5hcHBseShudWxsLCBsYXRzKTtcclxuICAgIGNvbnN0IG1heGxhdCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGxhdHMpO1xyXG4gICAgY29uc3QgbWlubG5nID0gTWF0aC5taW4uYXBwbHkobnVsbCwgbG5ncyk7XHJcbiAgICBjb25zdCBtYXhsbmcgPSBNYXRoLm1heC5hcHBseShudWxsLCBsbmdzKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgYSBib3VuZGluZyByZWN0YW5nbGUgdGhhdCBjYW4gYmUgdXNlZCBpbiBsZWFmbGV0XHJcbiAgICByZXR1cm4gW1ttaW5sYXQsIG1pbmxuZ10sIFttYXhsYXQsIG1heGxuZ11dO1xyXG4gIH1cclxuXHJcbiAgbGF5ZXJUb0dlb0pzb24obGF5ZXI6IGFueSwgbGF5ZXJUeXBlOiBhbnkpIHtcclxuICAgIGNvbnN0IGdlb0pzb24gPSBsYXllci50b0dlb0pTT04oKTtcclxuICAgIGlmIChsYXllclR5cGUgPT09ICdjaXJjbGUnKSB7XHJcbiAgICAgIGNvbnN0IHJhZGl1cyA9IGxheWVyLmdldFJhZGl1cygpO1xyXG4gICAgICBnZW9Kc29uLnByb3BlcnRpZXMucmFkaXVzID0gcmFkaXVzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBnZW9Kc29uO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWFwR2VvSnNvbigpIHtcclxuICAgIGNvbnN0IGRyYXduTGF5ZXJzR2VvSnNvbiA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmRyYXduTGF5ZXJzKSB7XHJcbiAgICAgIHRoaXMuZHJhd25MYXllcnMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICBjb25zdCBnZW9qc29uID0gdGhpcy5sYXllclRvR2VvSnNvbihlLmxheWVyLCBlLnR5cGUpO1xyXG4gICAgICAgIGRyYXduTGF5ZXJzR2VvSnNvbi5wdXNoKGdlb2pzb24pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51c2VyQ2VudGVyTWFya2VyKSB7XHJcbiAgICAgIGRyYXduTGF5ZXJzR2VvSnNvbi5wdXNoKHRoaXMudXNlckNlbnRlck1hcmtlci50b0dlb0pTT04oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubG9jYXRpb25Cb3VuZGluZ0JveCkge1xyXG4gICAgICBkcmF3bkxheWVyc0dlb0pzb24ucHVzaCh0aGlzLmxvY2F0aW9uQm91bmRpbmdCb3gudG9HZW9KU09OKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2VvSnNvbi5lbWl0KGRyYXduTGF5ZXJzR2VvSnNvbik7XHJcbiAgfVxyXG59XHJcbiJdfQ==