diff --git a/public/assets/admin/js/app.js b/public/assets/admin/js/app.js index 49d4dce0..ec30596b 100644 --- a/public/assets/admin/js/app.js +++ b/public/assets/admin/js/app.js @@ -358,7 +358,7 @@ eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true } /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base_map__ = __webpack_require__(\"./resources/js/maps/base_map.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config__ = __webpack_require__(\"./resources/js/maps/config.js\");\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\n\n\n\n\n/**\r\n * Render the live map\r\n * @param opts\r\n * @private\r\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n update_uri: '/api/acars',\n pirep_uri: '/api/pireps/{id}',\n positions: null,\n render_elem: 'map',\n aircraft_icon: '/assets/img/acars/aircraft.png',\n units: 'nmi'\n }, opts);\n\n var map = Object(__WEBPACK_IMPORTED_MODULE_0__base_map__[\"a\" /* default */])(opts);\n var aircraftIcon = leaflet.icon({\n iconUrl: opts.aircraft_icon,\n iconSize: [42, 42],\n iconAnchor: [21, 21]\n });\n\n var pannedToCenter = false;\n var layerFlights = null;\n var layerSelFlight = null;\n var layerSelFlightFeature = null;\n var layerSelFlightLayer = null;\n\n /**\r\n * When a flight is clicked on, show the path, etc for that flight\r\n * @param feature\r\n * @param layer\r\n */\n var onFlightClick = function onFlightClick(feature, layer) {\n\n var pirep_uri = opts.pirep_uri.replace('{id}', feature.properties.pirep_id);\n var geojson_uri = opts.pirep_uri.replace('{id}', feature.properties.pirep_id) + \"/acars/geojson\";\n\n var pirep_info = $.ajax({\n url: pirep_uri,\n dataType: 'json',\n error: console.log\n });\n\n var flight_route = $.ajax({\n url: geojson_uri,\n dataType: 'json',\n error: console.log\n });\n\n // Load up the PIREP info\n $.when(flight_route).done(function (routeJson) {\n if (layerSelFlight !== null) {\n map.removeLayer(layerSelFlight);\n }\n\n layerSelFlight = leaflet.geodesic([], {\n weight: 7,\n opacity: 0.9,\n color: __WEBPACK_IMPORTED_MODULE_1__config__[\"a\" /* ACTUAL_ROUTE_COLOR */],\n wrap: false\n }).addTo(map);\n\n layerSelFlight.geoJson(routeJson.line);\n layerSelFlightFeature = feature;\n layerSelFlightLayer = layer;\n\n // Center on it, but only do it once, in case the map is moved\n if (!pannedToCenter) {\n map.panTo({ lat: routeJson.position.lat, lng: routeJson.position.lon });\n pannedToCenter = true;\n }\n });\n\n //\n // When the PIREP info is done loading, show the bottom bar\n //\n $.when(pirep_info).done(function (pirep) {\n pirep = pirep.data;\n\n var dist = void 0,\n planned_dist = void 0;\n if (opts.units === 'nmi') {\n dist = pirep.distance.nmi;\n planned_dist = pirep.planned_distance.nmi;\n } else if (opts.units === 'mi') {\n dist = pirep.distance.mi;\n planned_dist = pirep.planned_distance.mi;\n } else if (opts.units === 'km') {\n dist = pirep.distance.km;\n planned_dist = pirep.planned_distance.km;\n }\n\n // Parse flight time\n var hours = Math.floor(pirep.flight_time / 60);\n var mins = pirep.flight_time % 60;\n\n $('#map_flight_id').text(pirep.airline.icao + pirep.flight_number);\n $('#map_flight_info').text(pirep.dpt_airport.name + ' (' + pirep.dpt_airport.icao + ') to ' + pirep.arr_airport.name + ' (' + pirep.arr_airport.icao + ')');\n\n $('#map_flight_stats_middle').html('Status: ' + pirep.status_text + '
' + 'Flight Time: ' + hours + 'h ' + mins + 'm
' + 'Distance: ' + dist + ' / ' + planned_dist + opts.units + '
');\n\n // Show flight stat info\n $('#map_flight_stats_right').html('Ground Speed: ' + pirep.position.gs + '
' + 'Altitude: ' + pirep.position.altitude + '
' + 'Heading: ' + pirep.position.heading + '');\n\n $('#map-info-bar').show();\n });\n };\n\n var updateMap = function updateMap() {\n\n console.log('reloading flights from acars...');\n\n /**\r\n * AJAX UPDATE\r\n */\n\n var flights = $.ajax({\n url: opts.update_uri,\n dataType: 'json',\n error: console.log\n });\n\n $.when(flights).done(function (flightGeoJson) {\n\n if (layerFlights !== null) {\n layerFlights.clearLayers();\n }\n\n layerFlights = leaflet.geoJSON(flightGeoJson, {\n onEachFeature: function onEachFeature(feature, layer) {\n layer.on({\n click: function click(e) {\n pannedToCenter = false;\n onFlightClick(feature, layer);\n }\n });\n\n var popup_html = '';\n if (feature.properties && feature.properties.popup !== '' && feature.properties.popup !== undefined) {\n popup_html += feature.properties.popup;\n layer.bindPopup(popup_html);\n }\n },\n pointToLayer: function pointToLayer(feature, latlon) {\n return leaflet.marker(latlon, {\n icon: aircraftIcon,\n rotationAngle: feature.properties.heading\n });\n }\n });\n\n layerFlights.addTo(map);\n\n // Reload the clicked-flight information\n if (layerSelFlight !== null) {\n onFlightClick(layerSelFlightFeature, layerSelFlightLayer);\n }\n });\n };\n\n updateMap();\n setInterval(updateMap, 10000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcz9lN2Y2Il0sIm5hbWVzIjpbImxlYWZsZXQiLCJyZXF1aXJlIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInVwZGF0ZV91cmkiLCJwaXJlcF91cmkiLCJwb3NpdGlvbnMiLCJyZW5kZXJfZWxlbSIsImFpcmNyYWZ0X2ljb24iLCJ1bml0cyIsIm1hcCIsImRyYXdfYmFzZV9tYXAiLCJhaXJjcmFmdEljb24iLCJpY29uIiwiaWNvblVybCIsImljb25TaXplIiwiaWNvbkFuY2hvciIsInBhbm5lZFRvQ2VudGVyIiwibGF5ZXJGbGlnaHRzIiwibGF5ZXJTZWxGbGlnaHQiLCJsYXllclNlbEZsaWdodEZlYXR1cmUiLCJsYXllclNlbEZsaWdodExheWVyIiwib25GbGlnaHRDbGljayIsImZlYXR1cmUiLCJsYXllciIsInJlcGxhY2UiLCJwcm9wZXJ0aWVzIiwicGlyZXBfaWQiLCJnZW9qc29uX3VyaSIsInBpcmVwX2luZm8iLCIkIiwiYWpheCIsInVybCIsImRhdGFUeXBlIiwiZXJyb3IiLCJjb25zb2xlIiwibG9nIiwiZmxpZ2h0X3JvdXRlIiwid2hlbiIsImRvbmUiLCJyb3V0ZUpzb24iLCJyZW1vdmVMYXllciIsImdlb2Rlc2ljIiwid2VpZ2h0Iiwib3BhY2l0eSIsImNvbG9yIiwid3JhcCIsImFkZFRvIiwiZ2VvSnNvbiIsImxpbmUiLCJwYW5UbyIsImxhdCIsInBvc2l0aW9uIiwibG5nIiwibG9uIiwicGlyZXAiLCJkYXRhIiwiZGlzdCIsInBsYW5uZWRfZGlzdCIsImRpc3RhbmNlIiwibm1pIiwicGxhbm5lZF9kaXN0YW5jZSIsIm1pIiwia20iLCJob3VycyIsIk1hdGgiLCJmbG9vciIsImZsaWdodF90aW1lIiwibWlucyIsInRleHQiLCJhaXJsaW5lIiwiaWNhbyIsImZsaWdodF9udW1iZXIiLCJkcHRfYWlycG9ydCIsIm5hbWUiLCJhcnJfYWlycG9ydCIsImh0bWwiLCJzdGF0dXNfdGV4dCIsImdzIiwiYWx0aXR1ZGUiLCJoZWFkaW5nIiwic2hvdyIsInVwZGF0ZU1hcCIsImZsaWdodHMiLCJmbGlnaHRHZW9Kc29uIiwiY2xlYXJMYXllcnMiLCJnZW9KU09OIiwib25FYWNoRmVhdHVyZSIsIm9uIiwiY2xpY2siLCJlIiwicG9wdXBfaHRtbCIsInBvcHVwIiwidW5kZWZpbmVkIiwiYmluZFBvcHVwIiwicG9pbnRUb0xheWVyIiwibGF0bG9uIiwibWFya2VyIiwicm90YXRpb25BbmdsZSIsInNldEludGVydmFsIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQSxJQUFNQSxVQUFVLG1CQUFBQyxDQUFRLDRDQUFSLENBQWhCOztBQUVBO0FBQ0E7O0FBRUE7Ozs7O0FBS0EseURBQWUsVUFBQ0MsSUFBRCxFQUFVOztBQUVyQkEsV0FBT0MsT0FBT0MsTUFBUCxDQUFjO0FBQ2pCQyxvQkFBWSxZQURLO0FBRWpCQyxtQkFBVyxrQkFGTTtBQUdqQkMsbUJBQVcsSUFITTtBQUlqQkMscUJBQWEsS0FKSTtBQUtqQkMsdUJBQWUsZ0NBTEU7QUFNakJDLGVBQU87QUFOVSxLQUFkLEVBT0pSLElBUEksQ0FBUDs7QUFTQSxRQUFNUyxNQUFNLGtFQUFBQyxDQUFjVixJQUFkLENBQVo7QUFDQSxRQUFNVyxlQUFlYixRQUFRYyxJQUFSLENBQWE7QUFDOUJDLGlCQUFTYixLQUFLTyxhQURnQjtBQUU5Qk8sa0JBQVUsQ0FBQyxFQUFELEVBQUssRUFBTCxDQUZvQjtBQUc5QkMsb0JBQVksQ0FBQyxFQUFELEVBQUssRUFBTDtBQUhrQixLQUFiLENBQXJCOztBQU1BLFFBQUlDLGlCQUFpQixLQUFyQjtBQUNBLFFBQUlDLGVBQWUsSUFBbkI7QUFDQSxRQUFJQyxpQkFBaUIsSUFBckI7QUFDQSxRQUFJQyx3QkFBd0IsSUFBNUI7QUFDQSxRQUFJQyxzQkFBc0IsSUFBMUI7O0FBRUE7Ozs7O0FBS0EsUUFBTUMsZ0JBQWdCLFNBQWhCQSxhQUFnQixDQUFDQyxPQUFELEVBQVVDLEtBQVYsRUFBb0I7O0FBRXRDLFlBQU1u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QWUsdUJBQUNoRSxPQUFELEVBQVVDLEtBQVYsRUFBb0I7QUFDL0JBLDBCQUFNZ0UsRUFBTixDQUFTO0FBQ0xDLCtCQUFPLGVBQUNDLENBQUQsRUFBTztBQUNWekUsNkNBQWlCLEtBQWpCO0FBQ0FLLDBDQUFjQyxPQUFkLEVBQXVCQyxLQUF2QjtBQUNIO0FBSkkscUJBQVQ7O0FBT0Esd0JBQUltRSxhQUFhLEVBQWpCO0FBQ0Esd0JBQUlwRSxRQUFRRyxVQUFSLElBQXVCSCxRQUFRRyxVQUFSLENBQW1Ca0UsS0FBbkIsS0FBNkIsRUFBN0IsSUFBbUNyRSxRQUFRRyxVQUFSLENBQW1Ca0UsS0FBbkIsS0FBNkJDLFNBQTNGLEVBQXVHO0FBQ25HRixzQ0FBY3BFLFFBQVFHLFVBQVIsQ0FBbUJrRSxLQUFqQztBQUNBcEUsOEJBQU1zRSxTQUFOLENBQWdCSCxVQUFoQjtBQUNIO0FBQ0osaUJBZHlDO0FBZTFDSSw4QkFBYyxzQkFBVXhFLE9BQVYsRUFBbUJ5RSxNQUFuQixFQUEyQjtBQUNyQywyQkFBT2pHLFFBQVFrRyxNQUFSLENBQWVELE1BQWYsRUFBdUI7QUFDMUJuRiw4QkFBTUQsWUFEb0I7QUFFMUJzRix1Q0FBZTNFLFFBQVFHLFVBQVIsQ0FBbUJzRDtBQUZSLHFCQUF2QixDQUFQO0FBSUg7QUFwQnlDLGFBQS9CLENBQWY7O0FBdUJBOUQseUJBQWE2QixLQUFiLENBQW1CckMsR0FBbkI7O0FBRUE7QUFDQSxnQkFBSVMsbUJBQW1CLElBQXZCLEVBQTZCO0FBQ3pCRyw4QkFBY0YscUJBQWQsRUFBcUNDLG1CQUFyQztBQUNIO0FBQ0osU0FuQ0Q7QUFvQ0gsS0FsREQ7O0FBb0RBNkQ7QUFDQWlCLGdCQUFZakIsU0FBWixFQUF1QixLQUF2QjtBQUNILENBeEtEIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBsZWFmbGV0ID0gcmVxdWlyZSgnbGVhZmxldCcpO1xyXG5cclxuaW1wb3J0IGRyYXdfYmFzZV9tYXAgZnJvbSAnLi9iYXNlX21hcCdcclxuaW1wb3J0IHtBQ1RVQUxfUk9VVEVfQ09MT1J9IGZyb20gJy4vY29uZmlnJ1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlciB0aGUgbGl2ZSBtYXBcclxuICogQHBhcmFtIG9wdHNcclxuICogQHByaXZhdGVcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IChvcHRzKSA9PiB7XHJcblxyXG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgIHVwZGF0ZV91cmk6ICcvYXBpL2FjYXJzJyxcclxuICAgICAgICBwaXJlcF91cmk6ICcvYXBpL3BpcmVwcy97aWR9JyxcclxuICAgICAgICBwb3NpdGlvbnM6IG51bGwsXHJcbiAgICAgICAgcmVuZGVyX2VsZW06ICdtYXAnLFxyXG4gICAgICAgIGFpcmNyYWZ0X2ljb246ICcvYXNzZXRzL2ltZy9hY2Fycy9haXJjcmFmdC5wbmcnLFxyXG4gICAgICAgIHVuaXRzOiAnbm1pJyxcclxuICAgIH0sIG9wdHMpO1xyXG5cclxuICAgIGNvbnN0IG1hcCA9IGRyYXdfYmFzZV9tYXAob3B0cyk7XHJcbiAgICBjb25zdCBhaXJjcmFmdEljb24gPSBsZWFmbGV0Lmljb24oe1xyXG4gICAgICAgIGljb25Vcmw6IG9wdHMuYWlyY3JhZnRfaWNvbixcclxuICAgICAgICBpY29uU2l6ZTogWzQyLCA0Ml0sXHJcbiAgICAgICAgaWNvbkFuY2hvcjogWzIxLCAyMV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgcGFubmVkVG9DZW50ZXIgPSBmYWxzZTtcclxuICAgIGxldCBsYXllckZsaWdodHMgPSBudWxsO1xyXG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0ID0gbnVsbDtcclxuICAgIGxldCBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBudWxsO1xyXG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0TGF5ZXIgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBhIGZsaWdodCBpcyBjbGlja2VkIG9uLCBzaG93IHRoZSBwYXRoLCBldGMgZm9yIHRoYXQgZmxpZ2h0XHJcbiAgICAgKiBAcGFyYW0gZmVhdHVyZVxyXG4gICAgICogQHBhcmFtIGxheWVyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG9uRmxpZ2h0Q2xpY2sgPSAoZmVhdHVyZSwgbGF5ZXIpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgcGlyZXBfdXJpID0gb3B0cy5waXJlcF91cmkucmVwbGFjZSgne2lkfScsIGZlYXR1cmUucHJvcGVydGllcy5waXJlcF9pZCk7XHJcbiAgICAgICAgY29uc3QgZ2VvanNvbl91cmkgPSBvcHRzLnBpcmVwX3VyaS5yZXBsYWNlKCd7aWR9JywgZmVhdHVyZS5wcm9wZXJ0aWVzLnBpcmVwX2lkKSArIFwiL2FjYXJzL2dlb2pzb25cIjtcclxuXHJcbiAgICAgICAgY29uc3QgcGlyZXBfaW5mbyA9ICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogcGlyZXBfdXJpLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICBlcnJvcjogY29uc29sZS5sb2dcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmxpZ2h0X3JvdXRlID0gJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBnZW9qc29uX3VyaSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIExvYWQgdXAgdGhlIFBJUkVQIGluZm9cclxuICAgICAgICAkLndoZW4oZmxpZ2h0X3JvdXRlKS5kb25lKChyb3V0ZUpzb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKGxheWVyU2VsRmxpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXJTZWxGbGlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodCA9IGxlYWZsZXQuZ2VvZGVzaWMoW10sIHtcclxuICAgICAgICAgICAgICAgIHdlaWdodDogNyxcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuOSxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBBQ1RVQUxfUk9VVEVfQ09MT1IsXHJcbiAgICAgICAgICAgICAgICB3cmFwOiBmYWxzZSxcclxuICAgICAgICAgICAgfSkuYWRkVG8obWFwKTtcclxuXHJcbiAgICAgICAgICAgIGxheWVyU2VsRmxpZ2h0Lmdlb0pzb24ocm91dGVKc29uLmxpbmUpO1xyXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBmZWF0dXJlO1xyXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodExheWVyID0gbGF5ZXI7XHJcblxyXG4gICAgICAgICAgICAvLyBDZW50ZXIgb24gaXQsIGJ1dCBvbmx5IGRvIGl0IG9uY2UsIGluIGNhc2UgdGhlIG1hcCBpcyBtb3ZlZFxyXG4gICAgICAgICAgICBpZighcGFubmVkVG9DZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIG1hcC5wYW5Ubyh7bGF0OiByb3V0ZUpzb24ucG9zaXRpb24ubGF0LCBsbmc6IHJvdXRlSnNvbi5wb3NpdGlvbi5sb259KTtcclxuICAgICAgICAgICAgICAgIHBhbm5lZFRvQ2VudGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIFdoZW4gdGhlIFBJUkVQIGluZm8gaXMgZG9uZSBsb2FkaW5nLCBzaG93IHRoZSBib3R0b20gYmFyXHJcbiAgICAgICAgLy9cclxuICAgICAgICAkLndoZW4ocGlyZXBfaW5mbykuZG9uZShwaXJlcCA9PiB7IHBpcmVwID0gcGlyZXAuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkaXN0LCBwbGFubmVkX2Rpc3Q7XHJcbiAgICAgICAgICAgIGlmKG9wdHMudW5pdHMgPT09ICdubWknKSB7XHJcbiAgICAgICAgICAgICAgICBkaXN0ID0gcGlyZXAuZGlzdGFuY2Uubm1pO1xyXG4gICAgICAgICAgICAgICAgcGxhbm5lZF9kaXN0ID0gcGlyZXAucGxhbm5lZF9kaXN0YW5jZS5ubWk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZihvcHRzLnVuaXRzID09PSAnbWknKSB7XHJcbiAgICAgICAgICAgICAgICBkaXN0ID0gcGlyZXAuZGlzdGFuY2UubWk7XHJcbiAgICAgICAgICAgICAgICBwbGFubmVkX2Rpc3QgPSBwaXJlcC5wbGFubmVkX2Rpc3RhbmNlLm1pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYob3B0cy51bml0cyA9PT0gJ2ttJykge1xyXG4gICAgICAgICAgICAgICAgZGlzdCA9IHBpcmVwLmRpc3RhbmNlLmttO1xyXG4gICAgICAgICAgICAgICAgcGxhbm5lZF9kaXN0ID0gcGlyZXAucGxhbm5lZF9kaXN0YW5jZS5rbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUGFyc2UgZmxpZ2h0IHRpbWVcclxuICAgICAgICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHBpcmVwLmZsaWdodF90aW1lIC8gNjApO1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zID0gcGlyZXAuZmxpZ2h0X3RpbWUgJSA2MDtcclxuXHJcbiAgICAgICAgICAgICQoJyNtYXBfZmxpZ2h0X2lkJykudGV4dChwaXJlcC5haXJsaW5lLmljYW8gKyBwaXJlcC5mbGlnaHRfbnVtYmVyKTtcclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfaW5mbycpLnRleHQoXHJcbiAgICAgICAgICAgICAgICBwaXJlcC5kcHRfYWlycG9ydC5uYW1lICsgJyAoJyArIHBpcmVwLmRwdF9haXJwb3J0LmljYW8gKyAnKSB0byAnICtcclxuICAgICAgICAgICAgICAgIHBpcmVwLmFycl9haXJwb3J0Lm5hbWUgKyAnICgnICsgcGlyZXAuYXJyX2FpcnBvcnQuaWNhbyArICcpJ1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfc3RhdHNfbWlkZGxlJykuaHRtbChcclxuICAgICAgICAgICAgICAgICdTdGF0dXM6IDxzdHJvbmc+JyArIHBpcmVwLnN0YXR1c190ZXh0ICsgJzwvc3Ryb25nPjxiciAvPicgK1xyXG4gICAgICAgICAgICAgICAgJ0ZsaWdodCBUaW1lOiA8c3Ryb25nPicgKyBob3VycyArICdoICcgKyBtaW5zICsgJ208L3N0cm9uZz48YnIgLz4nICtcclxuICAgICAgICAgICAgICAgICdEaXN0YW5jZTogPHN0cm9uZz4nICsgZGlzdCArICc8L3N0cm9uZz4gLyAnICsgcGxhbm5lZF9kaXN0ICsgb3B0cy51bml0cyArICc8YnIgLz4nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBTaG93IGZsaWdodCBzdGF0IGluZm9cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfc3RhdHNfcmlnaHQnKS5odG1sKFxyXG4gICAgICAgICAgICAgICAgJ0dyb3VuZCBTcGVlZDogPHN0cm9uZz4nICsgcGlyZXAucG9zaXRpb24uZ3MgKyAnPC9zdHJvbmc+PGJyIC8+JyArXHJcbiAgICAgICAgICAgICAgICAnQWx0aXR1ZGU6IDxzdHJvbmc+JyArIHBpcmVwLnBvc2l0aW9uLmFsdGl0dWRlICsgJzwvc3Ryb25nPjxiciAvPicgICtcclxuICAgICAgICAgICAgICAgICdIZWFkaW5nOiA8c3Ryb25nPicgKyBwaXJlcC5wb3NpdGlvbi5oZWFkaW5nICsgJzwvc3Ryb25nPidcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICQoJyNtYXAtaW5mby1iYXInKS5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZU1hcCA9ICgpID0+IHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbG9hZGluZyBmbGlnaHRzIGZyb20gYWNhcnMuLi4nKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQUpBWCBVUERBVEVcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgbGV0IGZsaWdodHMgPSAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IG9wdHMudXBkYXRlX3VyaSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQud2hlbihmbGlnaHRzKS5kb25lKGZ1bmN0aW9uIChmbGlnaHRHZW9Kc29uKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAobGF5ZXJGbGlnaHRzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllckZsaWdodHMuY2xlYXJMYXllcnMoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsYXllckZsaWdodHMgPSBsZWFmbGV0Lmdlb0pTT04oZmxpZ2h0R2VvSnNvbiwge1xyXG4gICAgICAgICAgICAgICAgb25FYWNoRmVhdHVyZTogKGZlYXR1cmUsIGxheWVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIub24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbm5lZFRvQ2VudGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGZlYXR1cmUsIGxheWVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1cF9odG1sID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUucHJvcGVydGllcyAmJiAoZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwICE9PSAnJyAmJiBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXAgIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBfaHRtbCArPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChwb3B1cF9odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcG9pbnRUb0xheWVyOiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF0bG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWZsZXQubWFya2VyKGxhdGxvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBhaXJjcmFmdEljb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQW5nbGU6IGZlYXR1cmUucHJvcGVydGllcy5oZWFkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsYXllckZsaWdodHMuYWRkVG8obWFwKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbG9hZCB0aGUgY2xpY2tlZC1mbGlnaHQgaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgaWYgKGxheWVyU2VsRmxpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGxheWVyU2VsRmxpZ2h0RmVhdHVyZSwgbGF5ZXJTZWxGbGlnaHRMYXllcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG5cclxuICAgIHVwZGF0ZU1hcCgpO1xyXG4gICAgc2V0SW50ZXJ2YWwodXBkYXRlTWFwLCAxMDAwMClcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/maps/live_map.js\n"); +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base_map__ = __webpack_require__(\"./resources/js/maps/base_map.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config__ = __webpack_require__(\"./resources/js/maps/config.js\");\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\n\n\n\n\n/**\r\n * Render the live map\r\n * @param opts\r\n * @private\r\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n update_uri: '/api/acars',\n pirep_uri: '/api/pireps/{id}',\n pirep_link_uri: '/pireps/{id}',\n positions: null,\n render_elem: 'map',\n aircraft_icon: '/assets/img/acars/aircraft.png',\n units: 'nmi'\n }, opts);\n\n var map = Object(__WEBPACK_IMPORTED_MODULE_0__base_map__[\"a\" /* default */])(opts);\n var aircraftIcon = leaflet.icon({\n iconUrl: opts.aircraft_icon,\n iconSize: [42, 42],\n iconAnchor: [21, 21]\n });\n\n var pannedToCenter = false;\n var layerFlights = null;\n var layerSelFlight = null;\n var layerSelFlightFeature = null;\n var layerSelFlightLayer = null;\n\n /**\r\n * When a flight is clicked on, show the path, etc for that flight\r\n * @param feature\r\n * @param layer\r\n */\n var onFlightClick = function onFlightClick(feature, layer) {\n\n var pirep_uri = opts.pirep_uri.replace('{id}', feature.properties.pirep_id);\n var link_uri = opts.pirep_link_uri.replace('{id}', feature.properties.pirep_id);\n var geojson_uri = opts.pirep_uri.replace('{id}', feature.properties.pirep_id) + \"/acars/geojson\";\n\n var pirep_info = $.ajax({\n url: pirep_uri,\n dataType: 'json',\n error: console.log\n });\n\n var flight_route = $.ajax({\n url: geojson_uri,\n dataType: 'json',\n error: console.log\n });\n\n // Load up the PIREP info\n $.when(flight_route).done(function (routeJson) {\n if (layerSelFlight !== null) {\n map.removeLayer(layerSelFlight);\n }\n\n layerSelFlight = leaflet.geodesic([], {\n weight: 5,\n opacity: 0.9,\n color: __WEBPACK_IMPORTED_MODULE_1__config__[\"a\" /* ACTUAL_ROUTE_COLOR */],\n wrap: false\n }).addTo(map);\n\n layerSelFlight.geoJson(routeJson.line);\n layerSelFlightFeature = feature;\n layerSelFlightLayer = layer;\n\n // Center on it, but only do it once, in case the map is moved\n if (!pannedToCenter) {\n map.panTo({ lat: routeJson.position.lat, lng: routeJson.position.lon });\n pannedToCenter = true;\n }\n });\n\n //\n // When the PIREP info is done loading, show the bottom bar\n //\n $.when(pirep_info).done(function (pirep) {\n pirep = pirep.data;\n\n var dist = void 0,\n planned_dist = void 0;\n if (opts.units === 'nmi') {\n dist = pirep.distance.nmi;\n planned_dist = pirep.planned_distance.nmi;\n } else if (opts.units === 'mi') {\n dist = pirep.distance.mi;\n planned_dist = pirep.planned_distance.mi;\n } else if (opts.units === 'km') {\n dist = pirep.distance.km;\n planned_dist = pirep.planned_distance.km;\n }\n\n // Parse flight time\n var hours = Math.floor(pirep.flight_time / 60);\n var mins = pirep.flight_time % 60;\n\n $('#map_flight_id').html('' + pirep.airline.icao + pirep.flight_number + '');\n\n $('#map_flight_info').text(pirep.dpt_airport.name + ' (' + pirep.dpt_airport.icao + ') to ' + pirep.arr_airport.name + ' (' + pirep.arr_airport.icao + ')');\n\n $('#map_flight_stats_middle').html('Status: ' + pirep.status_text + '
' + 'Flight Time: ' + hours + 'h ' + mins + 'm
' + 'Distance: ' + dist + ' / ' + planned_dist + opts.units + '
');\n\n // Show flight stat info\n $('#map_flight_stats_right').html('Ground Speed: ' + pirep.position.gs + '
' + 'Altitude: ' + pirep.position.altitude + '
' + 'Heading: ' + pirep.position.heading + '');\n\n $('#map-info-bar').show();\n });\n };\n\n var updateMap = function updateMap() {\n\n console.log('reloading flights from acars...');\n\n /**\r\n * AJAX UPDATE\r\n */\n\n var flights = $.ajax({\n url: opts.update_uri,\n dataType: 'json',\n error: console.log\n });\n\n $.when(flights).done(function (flightGeoJson) {\n\n if (layerFlights !== null) {\n layerFlights.clearLayers();\n }\n\n layerFlights = leaflet.geoJSON(flightGeoJson, {\n onEachFeature: function onEachFeature(feature, layer) {\n layer.on({\n click: function click(e) {\n pannedToCenter = false;\n onFlightClick(feature, layer);\n }\n });\n\n var popup_html = '';\n if (feature.properties && feature.properties.popup !== '' && feature.properties.popup !== undefined) {\n popup_html += feature.properties.popup;\n layer.bindPopup(popup_html);\n }\n },\n pointToLayer: function pointToLayer(feature, latlon) {\n return leaflet.marker(latlon, {\n icon: aircraftIcon,\n rotationAngle: feature.properties.heading\n });\n }\n });\n\n layerFlights.addTo(map);\n\n // Reload the clicked-flight information\n if (layerSelFlight !== null) {\n onFlightClick(layerSelFlightFeature, layerSelFlightLayer);\n }\n });\n };\n\n updateMap();\n setInterval(updateMap, 10000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcz9lN2Y2Il0sIm5hbWVzIjpbImxlYWZsZXQiLCJyZXF1aXJlIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInVwZGF0ZV91cmkiLCJwaXJlcF91cmkiLCJwaXJlcF9saW5rX3VyaSIsInBvc2l0aW9ucyIsInJlbmRlcl9lbGVtIiwiYWlyY3JhZnRfaWNvbiIsInVuaXRzIiwibWFwIiwiZHJhd19iYXNlX21hcCIsImFpcmNyYWZ0SWNvbiIsImljb24iLCJpY29uVXJsIiwiaWNvblNpemUiLCJpY29uQW5jaG9yIiwicGFubmVkVG9DZW50ZXIiLCJsYXllckZsaWdodHMiLCJsYXllclNlbEZsaWdodCIsImxheWVyU2VsRmxpZ2h0RmVhdHVyZSIsImxheWVyU2VsRmxpZ2h0TGF5ZXIiLCJvbkZsaWdodENsaWNrIiwiZmVhdHVyZSIsImxheWVyIiwicmVwbGFjZSIsInByb3BlcnRpZXMiLCJwaXJlcF9pZCIsImxpbmtfdXJpIiwiZ2VvanNvbl91cmkiLCJwaXJlcF9pbmZvIiwiJCIsImFqYXgiLCJ1cmwiLCJkYXRhVHlwZSIsImVycm9yIiwiY29uc29sZSIsImxvZyIsImZsaWdodF9yb3V0ZSIsIndoZW4iLCJkb25lIiwicm91dGVKc29uIiwicmVtb3ZlTGF5ZXIiLCJnZW9kZXNpYyIsIndlaWdodCIsIm9wYWNpdHkiLCJjb2xvciIsIndyYXAiLCJhZGRUbyIsImdlb0pzb24iLCJsaW5lIiwicGFuVG8iLCJsYXQiLCJwb3NpdGlvbiIsImxuZyIsImxvbiIsInBpcmVwIiwiZGF0YSIsImRpc3QiLCJwbGFubmVkX2Rpc3QiLCJkaXN0YW5jZSIsIm5taSIsInBsYW5uZWRfZGlzdGFuY2UiLCJtaSIsImttIiwiaG91cnMiLCJNYXRoIiwiZmxvb3IiLCJmbGlnaHRfdGltZSIsIm1pbnMiLCJodG1sIiwiYWlybGluZSIsImljYW8iLCJmbGlnaHRfbnVtYmVyIiwidGV4dCIsImRwdF9haXJwb3J0IiwibmFtZSIsImFycl9haXJwb3J0Iiwic3RhdHVzX3RleHQiLCJncyIsImFsdGl0dWRlIiwiaGVhZGluZyIsInNob3ciLCJ1cGRhdGVNYXAiLCJmbGlnaHRzIiwiZmxpZ2h0R2VvSnNvbiIsImNsZWFyTGF5ZXJzIiwiZ2VvSlNPTiIsIm9uRWFjaEZlYXR1cmUiLCJvbiIsImNsaWNrIiwiZSIsInBvcHVwX2h0bWwiLCJwb3B1cCIsInVuZGVmaW5lZCIsImJpbmRQb3B1cCIsInBvaW50VG9MYXllciIsImxhdGxvbiIsIm1hcmtlciIsInJvdGF0aW9uQW5nbGUiLCJzZXRJbnRlcnZhbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUEsSUFBTUEsVUFBVSxtQkFBQUMsQ0FBUSw0Q0FBUixDQUFoQjs7QUFFQTtBQUNBOztBQUVBOzs7OztBQUtBLHlEQUFlLFVBQUNDLElBQUQsRUFBVTs7QUFFckJBLFdBQU9DLE9BQU9DLE1BQVAsQ0FBYztBQUNqQkMsb0JBQVksWUFESztBQUVqQkMsbUJBQVcsa0JBRk07QUFHakJDLHdCQUFnQixjQUhDO0FBSWpCQyxtQkFBVyxJQUpNO0FBS2pCQyxxQkFBYSxLQUxJO0FBTWpCQyx1QkFBZSxnQ0FORTtBQU9qQkMsZUFBTztBQVBVLEtBQWQsRUFRSlQsSUFSSSxDQUFQOztBQVVBLFFBQU1VLE1BQU0sa0VBQUFDLENBQWNYLElBQWQsQ0FBWjtBQUNBLFFBQU1ZLGVBQWVkLFFBQVFlLElBQVIsQ0FBYTtBQUM5QkMsaUJBQVNkLEtBQUtRLGFBRGdCO0FBRTlCTyxrQkFBVSxDQUFDLEVBQUQsRUFBSyxFQUFMLENBRm9CO0FBRzlCQyxvQkFBWSxDQUFDLEVBQUQsRUFBSyxFQUFMO0FBSGtCLEtBQWIsQ0FBckI7O0FBTUEsUUFBSUMsaUJBQWlCLEtBQXJCO0FBQ0EsUUFBSUMsZUFBZSxJQUFuQjtBQUNBLFFBQUlDLGlCQUFpQixJQUFyQjtBQUNBLFFBQUlDLHdCQUF3QixJQUE1QjtBQUNBLFFBQUlDLHNCQUFzQixJQUExQjs7QUFFQTs7Ozs7QUFLQSxRQUFNQyxnQkFBZ0IsU0FBaEJB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aUIsZ0JBQVlqQixTQUFaLEVBQXVCLEtBQXZCO0FBQ0gsQ0EvS0QiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGxlYWZsZXQgPSByZXF1aXJlKCdsZWFmbGV0Jyk7XHJcblxyXG5pbXBvcnQgZHJhd19iYXNlX21hcCBmcm9tICcuL2Jhc2VfbWFwJ1xyXG5pbXBvcnQge0FDVFVBTF9ST1VURV9DT0xPUn0gZnJvbSAnLi9jb25maWcnXHJcblxyXG4vKipcclxuICogUmVuZGVyIHRoZSBsaXZlIG1hcFxyXG4gKiBAcGFyYW0gb3B0c1xyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgKG9wdHMpID0+IHtcclxuXHJcbiAgICBvcHRzID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgdXBkYXRlX3VyaTogJy9hcGkvYWNhcnMnLFxyXG4gICAgICAgIHBpcmVwX3VyaTogJy9hcGkvcGlyZXBzL3tpZH0nLFxyXG4gICAgICAgIHBpcmVwX2xpbmtfdXJpOiAnL3BpcmVwcy97aWR9JyxcclxuICAgICAgICBwb3NpdGlvbnM6IG51bGwsXHJcbiAgICAgICAgcmVuZGVyX2VsZW06ICdtYXAnLFxyXG4gICAgICAgIGFpcmNyYWZ0X2ljb246ICcvYXNzZXRzL2ltZy9hY2Fycy9haXJjcmFmdC5wbmcnLFxyXG4gICAgICAgIHVuaXRzOiAnbm1pJyxcclxuICAgIH0sIG9wdHMpO1xyXG5cclxuICAgIGNvbnN0IG1hcCA9IGRyYXdfYmFzZV9tYXAob3B0cyk7XHJcbiAgICBjb25zdCBhaXJjcmFmdEljb24gPSBsZWFmbGV0Lmljb24oe1xyXG4gICAgICAgIGljb25Vcmw6IG9wdHMuYWlyY3JhZnRfaWNvbixcclxuICAgICAgICBpY29uU2l6ZTogWzQyLCA0Ml0sXHJcbiAgICAgICAgaWNvbkFuY2hvcjogWzIxLCAyMV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgcGFubmVkVG9DZW50ZXIgPSBmYWxzZTtcclxuICAgIGxldCBsYXllckZsaWdodHMgPSBudWxsO1xyXG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0ID0gbnVsbDtcclxuICAgIGxldCBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBudWxsO1xyXG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0TGF5ZXIgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBhIGZsaWdodCBpcyBjbGlja2VkIG9uLCBzaG93IHRoZSBwYXRoLCBldGMgZm9yIHRoYXQgZmxpZ2h0XHJcbiAgICAgKiBAcGFyYW0gZmVhdHVyZVxyXG4gICAgICogQHBhcmFtIGxheWVyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG9uRmxpZ2h0Q2xpY2sgPSAoZmVhdHVyZSwgbGF5ZXIpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgcGlyZXBfdXJpID0gb3B0cy5waXJlcF91cmkucmVwbGFjZSgne2lkfScsIGZlYXR1cmUucHJvcGVydGllcy5waXJlcF9pZCk7XHJcbiAgICAgICAgY29uc3QgbGlua191cmkgPSBvcHRzLnBpcmVwX2xpbmtfdXJpLnJlcGxhY2UoJ3tpZH0nLCBmZWF0dXJlLnByb3BlcnRpZXMucGlyZXBfaWQpO1xyXG4gICAgICAgIGNvbnN0IGdlb2pzb25fdXJpID0gb3B0cy5waXJlcF91cmkucmVwbGFjZSgne2lkfScsIGZlYXR1cmUucHJvcGVydGllcy5waXJlcF9pZCkgKyBcIi9hY2Fycy9nZW9qc29uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IHBpcmVwX2luZm8gPSAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IHBpcmVwX3VyaSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZsaWdodF9yb3V0ZSA9ICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogZ2VvanNvbl91cmksXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLmxvZ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBMb2FkIHVwIHRoZSBQSVJFUCBpbmZvXHJcbiAgICAgICAgJC53aGVuKGZsaWdodF9yb3V0ZSkuZG9uZSgocm91dGVKc29uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChsYXllclNlbEZsaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyU2VsRmxpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHQgPSBsZWFmbGV0Lmdlb2Rlc2ljKFtdLCB7XHJcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IDUsXHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjksXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQUNUVUFMX1JPVVRFX0NPTE9SLFxyXG4gICAgICAgICAgICAgICAgd3JhcDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pLmFkZFRvKG1hcCk7XHJcblxyXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodC5nZW9Kc29uKHJvdXRlSnNvbi5saW5lKTtcclxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHRGZWF0dXJlID0gZmVhdHVyZTtcclxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHRMYXllciA9IGxheWVyO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2VudGVyIG9uIGl0LCBidXQgb25seSBkbyBpdCBvbmNlLCBpbiBjYXNlIHRoZSBtYXAgaXMgbW92ZWRcclxuICAgICAgICAgICAgaWYoIXBhbm5lZFRvQ2VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICBtYXAucGFuVG8oe2xhdDogcm91dGVKc29uLnBvc2l0aW9uLmxhdCwgbG5nOiByb3V0ZUpzb24ucG9zaXRpb24ubG9ufSk7XHJcbiAgICAgICAgICAgICAgICBwYW5uZWRUb0NlbnRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBXaGVuIHRoZSBQSVJFUCBpbmZvIGlzIGRvbmUgbG9hZGluZywgc2hvdyB0aGUgYm90dG9tIGJhclxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgJC53aGVuKHBpcmVwX2luZm8pLmRvbmUocGlyZXAgPT4geyBwaXJlcCA9IHBpcmVwLmRhdGE7XHJcblxyXG4gICAgICAgICAgICBsZXQgZGlzdCwgcGxhbm5lZF9kaXN0O1xyXG4gICAgICAgICAgICBpZihvcHRzLnVuaXRzID09PSAnbm1pJykge1xyXG4gICAgICAgICAgICAgICAgZGlzdCA9IHBpcmVwLmRpc3RhbmNlLm5taTtcclxuICAgICAgICAgICAgICAgIHBsYW5uZWRfZGlzdCA9IHBpcmVwLnBsYW5uZWRfZGlzdGFuY2Uubm1pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYob3B0cy51bml0cyA9PT0gJ21pJykge1xyXG4gICAgICAgICAgICAgICAgZGlzdCA9IHBpcmVwLmRpc3RhbmNlLm1pO1xyXG4gICAgICAgICAgICAgICAgcGxhbm5lZF9kaXN0ID0gcGlyZXAucGxhbm5lZF9kaXN0YW5jZS5taTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKG9wdHMudW5pdHMgPT09ICdrbScpIHtcclxuICAgICAgICAgICAgICAgIGRpc3QgPSBwaXJlcC5kaXN0YW5jZS5rbTtcclxuICAgICAgICAgICAgICAgIHBsYW5uZWRfZGlzdCA9IHBpcmVwLnBsYW5uZWRfZGlzdGFuY2Uua207XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFBhcnNlIGZsaWdodCB0aW1lXHJcbiAgICAgICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihwaXJlcC5mbGlnaHRfdGltZSAvIDYwKTtcclxuICAgICAgICAgICAgY29uc3QgbWlucyA9IHBpcmVwLmZsaWdodF90aW1lICUgNjA7XHJcblxyXG4gICAgICAgICAgICAkKCcjbWFwX2ZsaWdodF9pZCcpLmh0bWwoXHJcbiAgICAgICAgICAgICAgICAnPGEgaHJlZj1cIicgKyBsaW5rX3VyaSAgKyAnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArXHJcbiAgICAgICAgICAgICAgICBwaXJlcC5haXJsaW5lLmljYW8gKyBwaXJlcC5mbGlnaHRfbnVtYmVyICtcclxuICAgICAgICAgICAgICAgICc8L2E+J1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfaW5mbycpLnRleHQoXHJcbiAgICAgICAgICAgICAgICBwaXJlcC5kcHRfYWlycG9ydC5uYW1lICsgJyAoJyArIHBpcmVwLmRwdF9haXJwb3J0LmljYW8gKyAnKSB0byAnICtcclxuICAgICAgICAgICAgICAgIHBpcmVwLmFycl9haXJwb3J0Lm5hbWUgKyAnICgnICsgcGlyZXAuYXJyX2FpcnBvcnQuaWNhbyArICcpJ1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfc3RhdHNfbWlkZGxlJykuaHRtbChcclxuICAgICAgICAgICAgICAgICdTdGF0dXM6IDxzdHJvbmc+JyArIHBpcmVwLnN0YXR1c190ZXh0ICsgJzwvc3Ryb25nPjxiciAvPicgK1xyXG4gICAgICAgICAgICAgICAgJ0ZsaWdodCBUaW1lOiA8c3Ryb25nPicgKyBob3VycyArICdoICcgKyBtaW5zICsgJ208L3N0cm9uZz48YnIgLz4nICtcclxuICAgICAgICAgICAgICAgICdEaXN0YW5jZTogPHN0cm9uZz4nICsgZGlzdCArICc8L3N0cm9uZz4gLyAnICsgcGxhbm5lZF9kaXN0ICsgb3B0cy51bml0cyArICc8YnIgLz4nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBTaG93IGZsaWdodCBzdGF0IGluZm9cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfc3RhdHNfcmlnaHQnKS5odG1sKFxyXG4gICAgICAgICAgICAgICAgJ0dyb3VuZCBTcGVlZDogPHN0cm9uZz4nICsgcGlyZXAucG9zaXRpb24uZ3MgKyAnPC9zdHJvbmc+PGJyIC8+JyArXHJcbiAgICAgICAgICAgICAgICAnQWx0aXR1ZGU6IDxzdHJvbmc+JyArIHBpcmVwLnBvc2l0aW9uLmFsdGl0dWRlICsgJzwvc3Ryb25nPjxiciAvPicgICtcclxuICAgICAgICAgICAgICAgICdIZWFkaW5nOiA8c3Ryb25nPicgKyBwaXJlcC5wb3NpdGlvbi5oZWFkaW5nICsgJzwvc3Ryb25nPidcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICQoJyNtYXAtaW5mby1iYXInKS5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZU1hcCA9ICgpID0+IHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbG9hZGluZyBmbGlnaHRzIGZyb20gYWNhcnMuLi4nKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQUpBWCBVUERBVEVcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgbGV0IGZsaWdodHMgPSAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IG9wdHMudXBkYXRlX3VyaSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQud2hlbihmbGlnaHRzKS5kb25lKGZ1bmN0aW9uIChmbGlnaHRHZW9Kc29uKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAobGF5ZXJGbGlnaHRzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllckZsaWdodHMuY2xlYXJMYXllcnMoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsYXllckZsaWdodHMgPSBsZWFmbGV0Lmdlb0pTT04oZmxpZ2h0R2VvSnNvbiwge1xyXG4gICAgICAgICAgICAgICAgb25FYWNoRmVhdHVyZTogKGZlYXR1cmUsIGxheWVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIub24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbm5lZFRvQ2VudGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGZlYXR1cmUsIGxheWVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1cF9odG1sID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUucHJvcGVydGllcyAmJiAoZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwICE9PSAnJyAmJiBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXAgIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBfaHRtbCArPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChwb3B1cF9odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcG9pbnRUb0xheWVyOiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF0bG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWZsZXQubWFya2VyKGxhdGxvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBhaXJjcmFmdEljb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQW5nbGU6IGZlYXR1cmUucHJvcGVydGllcy5oZWFkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsYXllckZsaWdodHMuYWRkVG8obWFwKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbG9hZCB0aGUgY2xpY2tlZC1mbGlnaHQgaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgaWYgKGxheWVyU2VsRmxpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGxheWVyU2VsRmxpZ2h0RmVhdHVyZSwgbGF5ZXJTZWxGbGlnaHRMYXllcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG5cclxuICAgIHVwZGF0ZU1hcCgpO1xyXG4gICAgc2V0SW50ZXJ2YWwodXBkYXRlTWFwLCAxMDAwMClcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/maps/live_map.js\n"); /***/ }), diff --git a/public/assets/frontend/js/app.js b/public/assets/frontend/js/app.js index 6b4c0020..e9754659 100644 --- a/public/assets/frontend/js/app.js +++ b/public/assets/frontend/js/app.js @@ -358,7 +358,7 @@ eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true } /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base_map__ = __webpack_require__(\"./resources/js/maps/base_map.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config__ = __webpack_require__(\"./resources/js/maps/config.js\");\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\n\n\n\n\n/**\r\n * Render the live map\r\n * @param opts\r\n * @private\r\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n update_uri: '/api/acars',\n pirep_uri: '/api/pireps/{id}',\n positions: null,\n render_elem: 'map',\n aircraft_icon: '/assets/img/acars/aircraft.png',\n units: 'nmi'\n }, opts);\n\n var map = Object(__WEBPACK_IMPORTED_MODULE_0__base_map__[\"a\" /* default */])(opts);\n var aircraftIcon = leaflet.icon({\n iconUrl: opts.aircraft_icon,\n iconSize: [42, 42],\n iconAnchor: [21, 21]\n });\n\n var pannedToCenter = false;\n var layerFlights = null;\n var layerSelFlight = null;\n var layerSelFlightFeature = null;\n var layerSelFlightLayer = null;\n\n /**\r\n * When a flight is clicked on, show the path, etc for that flight\r\n * @param feature\r\n * @param layer\r\n */\n var onFlightClick = function onFlightClick(feature, layer) {\n\n var pirep_uri = opts.pirep_uri.replace('{id}', feature.properties.pirep_id);\n var geojson_uri = opts.pirep_uri.replace('{id}', feature.properties.pirep_id) + \"/acars/geojson\";\n\n var pirep_info = $.ajax({\n url: pirep_uri,\n dataType: 'json',\n error: console.log\n });\n\n var flight_route = $.ajax({\n url: geojson_uri,\n dataType: 'json',\n error: console.log\n });\n\n // Load up the PIREP info\n $.when(flight_route).done(function (routeJson) {\n if (layerSelFlight !== null) {\n map.removeLayer(layerSelFlight);\n }\n\n layerSelFlight = leaflet.geodesic([], {\n weight: 7,\n opacity: 0.9,\n color: __WEBPACK_IMPORTED_MODULE_1__config__[\"a\" /* ACTUAL_ROUTE_COLOR */],\n wrap: false\n }).addTo(map);\n\n layerSelFlight.geoJson(routeJson.line);\n layerSelFlightFeature = feature;\n layerSelFlightLayer = layer;\n\n // Center on it, but only do it once, in case the map is moved\n if (!pannedToCenter) {\n map.panTo({ lat: routeJson.position.lat, lng: routeJson.position.lon });\n pannedToCenter = true;\n }\n });\n\n //\n // When the PIREP info is done loading, show the bottom bar\n //\n $.when(pirep_info).done(function (pirep) {\n pirep = pirep.data;\n\n var dist = void 0,\n planned_dist = void 0;\n if (opts.units === 'nmi') {\n dist = pirep.distance.nmi;\n planned_dist = pirep.planned_distance.nmi;\n } else if (opts.units === 'mi') {\n dist = pirep.distance.mi;\n planned_dist = pirep.planned_distance.mi;\n } else if (opts.units === 'km') {\n dist = pirep.distance.km;\n planned_dist = pirep.planned_distance.km;\n }\n\n // Parse flight time\n var hours = Math.floor(pirep.flight_time / 60);\n var mins = pirep.flight_time % 60;\n\n $('#map_flight_id').text(pirep.airline.icao + pirep.flight_number);\n $('#map_flight_info').text(pirep.dpt_airport.name + ' (' + pirep.dpt_airport.icao + ') to ' + pirep.arr_airport.name + ' (' + pirep.arr_airport.icao + ')');\n\n $('#map_flight_stats_middle').html('Status: ' + pirep.status_text + '
' + 'Flight Time: ' + hours + 'h ' + mins + 'm
' + 'Distance: ' + dist + ' / ' + planned_dist + opts.units + '
');\n\n // Show flight stat info\n $('#map_flight_stats_right').html('Ground Speed: ' + pirep.position.gs + '
' + 'Altitude: ' + pirep.position.altitude + '
' + 'Heading: ' + pirep.position.heading + '');\n\n $('#map-info-bar').show();\n });\n };\n\n var updateMap = function updateMap() {\n\n console.log('reloading flights from acars...');\n\n /**\r\n * AJAX UPDATE\r\n */\n\n var flights = $.ajax({\n url: opts.update_uri,\n dataType: 'json',\n error: console.log\n });\n\n $.when(flights).done(function (flightGeoJson) {\n\n if (layerFlights !== null) {\n layerFlights.clearLayers();\n }\n\n layerFlights = leaflet.geoJSON(flightGeoJson, {\n onEachFeature: function onEachFeature(feature, layer) {\n layer.on({\n click: function click(e) {\n pannedToCenter = false;\n onFlightClick(feature, layer);\n }\n });\n\n var popup_html = '';\n if (feature.properties && feature.properties.popup !== '' && feature.properties.popup !== undefined) {\n popup_html += feature.properties.popup;\n layer.bindPopup(popup_html);\n }\n },\n pointToLayer: function pointToLayer(feature, latlon) {\n return leaflet.marker(latlon, {\n icon: aircraftIcon,\n rotationAngle: feature.properties.heading\n });\n }\n });\n\n layerFlights.addTo(map);\n\n // Reload the clicked-flight information\n if (layerSelFlight !== null) {\n onFlightClick(layerSelFlightFeature, layerSelFlightLayer);\n }\n });\n };\n\n updateMap();\n setInterval(updateMap, 10000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcz9lN2Y2Il0sIm5hbWVzIjpbImxlYWZsZXQiLCJyZXF1aXJlIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInVwZGF0ZV91cmkiLCJwaXJlcF91cmkiLCJwb3NpdGlvbnMiLCJyZW5kZXJfZWxlbSIsImFpcmNyYWZ0X2ljb24iLCJ1bml0cyIsIm1hcCIsImRyYXdfYmFzZV9tYXAiLCJhaXJjcmFmdEljb24iLCJpY29uIiwiaWNvblVybCIsImljb25TaXplIiwiaWNvbkFuY2hvciIsInBhbm5lZFRvQ2VudGVyIiwibGF5ZXJGbGlnaHRzIiwibGF5ZXJTZWxGbGlnaHQiLCJsYXllclNlbEZsaWdodEZlYXR1cmUiLCJsYXllclNlbEZsaWdodExheWVyIiwib25GbGlnaHRDbGljayIsImZlYXR1cmUiLCJsYXllciIsInJlcGxhY2UiLCJwcm9wZXJ0aWVzIiwicGlyZXBfaWQiLCJnZW9qc29uX3VyaSIsInBpcmVwX2luZm8iLCIkIiwiYWpheCIsInVybCIsImRhdGFUeXBlIiwiZXJyb3IiLCJjb25zb2xlIiwibG9nIiwiZmxpZ2h0X3JvdXRlIiwid2hlbiIsImRvbmUiLCJyb3V0ZUpzb24iLCJyZW1vdmVMYXllciIsImdlb2Rlc2ljIiwid2VpZ2h0Iiwib3BhY2l0eSIsImNvbG9yIiwid3JhcCIsImFkZFRvIiwiZ2VvSnNvbiIsImxpbmUiLCJwYW5UbyIsImxhdCIsInBvc2l0aW9uIiwibG5nIiwibG9uIiwicGlyZXAiLCJkYXRhIiwiZGlzdCIsInBsYW5uZWRfZGlzdCIsImRpc3RhbmNlIiwibm1pIiwicGxhbm5lZF9kaXN0YW5jZSIsIm1pIiwia20iLCJob3VycyIsIk1hdGgiLCJmbG9vciIsImZsaWdodF90aW1lIiwibWlucyIsInRleHQiLCJhaXJsaW5lIiwiaWNhbyIsImZsaWdodF9udW1iZXIiLCJkcHRfYWlycG9ydCIsIm5hbWUiLCJhcnJfYWlycG9ydCIsImh0bWwiLCJzdGF0dXNfdGV4dCIsImdzIiwiYWx0aXR1ZGUiLCJoZWFkaW5nIiwic2hvdyIsInVwZGF0ZU1hcCIsImZsaWdodHMiLCJmbGlnaHRHZW9Kc29uIiwiY2xlYXJMYXllcnMiLCJnZW9KU09OIiwib25FYWNoRmVhdHVyZSIsIm9uIiwiY2xpY2siLCJlIiwicG9wdXBfaHRtbCIsInBvcHVwIiwidW5kZWZpbmVkIiwiYmluZFBvcHVwIiwicG9pbnRUb0xheWVyIiwibGF0bG9uIiwibWFya2VyIiwicm90YXRpb25BbmdsZSIsInNldEludGVydmFsIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQSxJQUFNQSxVQUFVLG1CQUFBQyxDQUFRLDRDQUFSLENBQWhCOztBQUVBO0FBQ0E7O0FBRUE7Ozs7O0FBS0EseURBQWUsVUFBQ0MsSUFBRCxFQUFVOztBQUVyQkEsV0FBT0MsT0FBT0MsTUFBUCxDQUFjO0FBQ2pCQyxvQkFBWSxZQURLO0FBRWpCQyxtQkFBVyxrQkFGTTtBQUdqQkMsbUJBQVcsSUFITTtBQUlqQkMscUJBQWEsS0FKSTtBQUtqQkMsdUJBQWUsZ0NBTEU7QUFNakJDLGVBQU87QUFOVSxLQUFkLEVBT0pSLElBUEksQ0FBUDs7QUFTQSxRQUFNUyxNQUFNLGtFQUFBQyxDQUFjVixJQUFkLENBQVo7QUFDQSxRQUFNVyxlQUFlYixRQUFRYyxJQUFSLENBQWE7QUFDOUJDLGlCQUFTYixLQUFLTyxhQURnQjtBQUU5Qk8sa0JBQVUsQ0FBQyxFQUFELEVBQUssRUFBTCxDQUZvQjtBQUc5QkMsb0JBQVksQ0FBQyxFQUFELEVBQUssRUFBTDtBQUhrQixLQUFiLENBQXJCOztBQU1BLFFBQUlDLGlCQUFpQixLQUFyQjtBQUNBLFFBQUlDLGVBQWUsSUFBbkI7QUFDQSxRQUFJQyxpQkFBaUIsSUFBckI7QUFDQSxRQUFJQyx3QkFBd0IsSUFBNUI7QUFDQSxRQUFJQyxzQkFBc0IsSUFBMUI7O0FBRUE7Ozs7O0FBS0EsUUFBTUMsZ0JBQWdCLFNBQWhCQSxhQUFnQixDQUFDQyxPQUFELEVBQVVDLEtBQVYsRUFBb0I7O0FBRXRDLFlBQU1u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QWUsdUJBQUNoRSxPQUFELEVBQVVDLEtBQVYsRUFBb0I7QUFDL0JBLDBCQUFNZ0UsRUFBTixDQUFTO0FBQ0xDLCtCQUFPLGVBQUNDLENBQUQsRUFBTztBQUNWekUsNkNBQWlCLEtBQWpCO0FBQ0FLLDBDQUFjQyxPQUFkLEVBQXVCQyxLQUF2QjtBQUNIO0FBSkkscUJBQVQ7O0FBT0Esd0JBQUltRSxhQUFhLEVBQWpCO0FBQ0Esd0JBQUlwRSxRQUFRRyxVQUFSLElBQXVCSCxRQUFRRyxVQUFSLENBQW1Ca0UsS0FBbkIsS0FBNkIsRUFBN0IsSUFBbUNyRSxRQUFRRyxVQUFSLENBQW1Ca0UsS0FBbkIsS0FBNkJDLFNBQTNGLEVBQXVHO0FBQ25HRixzQ0FBY3BFLFFBQVFHLFVBQVIsQ0FBbUJrRSxLQUFqQztBQUNBcEUsOEJBQU1zRSxTQUFOLENBQWdCSCxVQUFoQjtBQUNIO0FBQ0osaUJBZHlDO0FBZTFDSSw4QkFBYyxzQkFBVXhFLE9BQVYsRUFBbUJ5RSxNQUFuQixFQUEyQjtBQUNyQywyQkFBT2pHLFFBQVFrRyxNQUFSLENBQWVELE1BQWYsRUFBdUI7QUFDMUJuRiw4QkFBTUQsWUFEb0I7QUFFMUJzRix1Q0FBZTNFLFFBQVFHLFVBQVIsQ0FBbUJzRDtBQUZSLHFCQUF2QixDQUFQO0FBSUg7QUFwQnlDLGFBQS9CLENBQWY7O0FBdUJBOUQseUJBQWE2QixLQUFiLENBQW1CckMsR0FBbkI7O0FBRUE7QUFDQSxnQkFBSVMsbUJBQW1CLElBQXZCLEVBQTZCO0FBQ3pCRyw4QkFBY0YscUJBQWQsRUFBcUNDLG1CQUFyQztBQUNIO0FBQ0osU0FuQ0Q7QUFvQ0gsS0FsREQ7O0FBb0RBNkQ7QUFDQWlCLGdCQUFZakIsU0FBWixFQUF1QixLQUF2QjtBQUNILENBeEtEIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBsZWFmbGV0ID0gcmVxdWlyZSgnbGVhZmxldCcpO1xyXG5cclxuaW1wb3J0IGRyYXdfYmFzZV9tYXAgZnJvbSAnLi9iYXNlX21hcCdcclxuaW1wb3J0IHtBQ1RVQUxfUk9VVEVfQ09MT1J9IGZyb20gJy4vY29uZmlnJ1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlciB0aGUgbGl2ZSBtYXBcclxuICogQHBhcmFtIG9wdHNcclxuICogQHByaXZhdGVcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IChvcHRzKSA9PiB7XHJcblxyXG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgIHVwZGF0ZV91cmk6ICcvYXBpL2FjYXJzJyxcclxuICAgICAgICBwaXJlcF91cmk6ICcvYXBpL3BpcmVwcy97aWR9JyxcclxuICAgICAgICBwb3NpdGlvbnM6IG51bGwsXHJcbiAgICAgICAgcmVuZGVyX2VsZW06ICdtYXAnLFxyXG4gICAgICAgIGFpcmNyYWZ0X2ljb246ICcvYXNzZXRzL2ltZy9hY2Fycy9haXJjcmFmdC5wbmcnLFxyXG4gICAgICAgIHVuaXRzOiAnbm1pJyxcclxuICAgIH0sIG9wdHMpO1xyXG5cclxuICAgIGNvbnN0IG1hcCA9IGRyYXdfYmFzZV9tYXAob3B0cyk7XHJcbiAgICBjb25zdCBhaXJjcmFmdEljb24gPSBsZWFmbGV0Lmljb24oe1xyXG4gICAgICAgIGljb25Vcmw6IG9wdHMuYWlyY3JhZnRfaWNvbixcclxuICAgICAgICBpY29uU2l6ZTogWzQyLCA0Ml0sXHJcbiAgICAgICAgaWNvbkFuY2hvcjogWzIxLCAyMV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgcGFubmVkVG9DZW50ZXIgPSBmYWxzZTtcclxuICAgIGxldCBsYXllckZsaWdodHMgPSBudWxsO1xyXG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0ID0gbnVsbDtcclxuICAgIGxldCBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBudWxsO1xyXG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0TGF5ZXIgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBhIGZsaWdodCBpcyBjbGlja2VkIG9uLCBzaG93IHRoZSBwYXRoLCBldGMgZm9yIHRoYXQgZmxpZ2h0XHJcbiAgICAgKiBAcGFyYW0gZmVhdHVyZVxyXG4gICAgICogQHBhcmFtIGxheWVyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG9uRmxpZ2h0Q2xpY2sgPSAoZmVhdHVyZSwgbGF5ZXIpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgcGlyZXBfdXJpID0gb3B0cy5waXJlcF91cmkucmVwbGFjZSgne2lkfScsIGZlYXR1cmUucHJvcGVydGllcy5waXJlcF9pZCk7XHJcbiAgICAgICAgY29uc3QgZ2VvanNvbl91cmkgPSBvcHRzLnBpcmVwX3VyaS5yZXBsYWNlKCd7aWR9JywgZmVhdHVyZS5wcm9wZXJ0aWVzLnBpcmVwX2lkKSArIFwiL2FjYXJzL2dlb2pzb25cIjtcclxuXHJcbiAgICAgICAgY29uc3QgcGlyZXBfaW5mbyA9ICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogcGlyZXBfdXJpLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICBlcnJvcjogY29uc29sZS5sb2dcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmxpZ2h0X3JvdXRlID0gJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBnZW9qc29uX3VyaSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIExvYWQgdXAgdGhlIFBJUkVQIGluZm9cclxuICAgICAgICAkLndoZW4oZmxpZ2h0X3JvdXRlKS5kb25lKChyb3V0ZUpzb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKGxheWVyU2VsRmxpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXJTZWxGbGlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodCA9IGxlYWZsZXQuZ2VvZGVzaWMoW10sIHtcclxuICAgICAgICAgICAgICAgIHdlaWdodDogNyxcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuOSxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBBQ1RVQUxfUk9VVEVfQ09MT1IsXHJcbiAgICAgICAgICAgICAgICB3cmFwOiBmYWxzZSxcclxuICAgICAgICAgICAgfSkuYWRkVG8obWFwKTtcclxuXHJcbiAgICAgICAgICAgIGxheWVyU2VsRmxpZ2h0Lmdlb0pzb24ocm91dGVKc29uLmxpbmUpO1xyXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBmZWF0dXJlO1xyXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodExheWVyID0gbGF5ZXI7XHJcblxyXG4gICAgICAgICAgICAvLyBDZW50ZXIgb24gaXQsIGJ1dCBvbmx5IGRvIGl0IG9uY2UsIGluIGNhc2UgdGhlIG1hcCBpcyBtb3ZlZFxyXG4gICAgICAgICAgICBpZighcGFubmVkVG9DZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIG1hcC5wYW5Ubyh7bGF0OiByb3V0ZUpzb24ucG9zaXRpb24ubGF0LCBsbmc6IHJvdXRlSnNvbi5wb3NpdGlvbi5sb259KTtcclxuICAgICAgICAgICAgICAgIHBhbm5lZFRvQ2VudGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIFdoZW4gdGhlIFBJUkVQIGluZm8gaXMgZG9uZSBsb2FkaW5nLCBzaG93IHRoZSBib3R0b20gYmFyXHJcbiAgICAgICAgLy9cclxuICAgICAgICAkLndoZW4ocGlyZXBfaW5mbykuZG9uZShwaXJlcCA9PiB7IHBpcmVwID0gcGlyZXAuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkaXN0LCBwbGFubmVkX2Rpc3Q7XHJcbiAgICAgICAgICAgIGlmKG9wdHMudW5pdHMgPT09ICdubWknKSB7XHJcbiAgICAgICAgICAgICAgICBkaXN0ID0gcGlyZXAuZGlzdGFuY2Uubm1pO1xyXG4gICAgICAgICAgICAgICAgcGxhbm5lZF9kaXN0ID0gcGlyZXAucGxhbm5lZF9kaXN0YW5jZS5ubWk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZihvcHRzLnVuaXRzID09PSAnbWknKSB7XHJcbiAgICAgICAgICAgICAgICBkaXN0ID0gcGlyZXAuZGlzdGFuY2UubWk7XHJcbiAgICAgICAgICAgICAgICBwbGFubmVkX2Rpc3QgPSBwaXJlcC5wbGFubmVkX2Rpc3RhbmNlLm1pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYob3B0cy51bml0cyA9PT0gJ2ttJykge1xyXG4gICAgICAgICAgICAgICAgZGlzdCA9IHBpcmVwLmRpc3RhbmNlLmttO1xyXG4gICAgICAgICAgICAgICAgcGxhbm5lZF9kaXN0ID0gcGlyZXAucGxhbm5lZF9kaXN0YW5jZS5rbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUGFyc2UgZmxpZ2h0IHRpbWVcclxuICAgICAgICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHBpcmVwLmZsaWdodF90aW1lIC8gNjApO1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zID0gcGlyZXAuZmxpZ2h0X3RpbWUgJSA2MDtcclxuXHJcbiAgICAgICAgICAgICQoJyNtYXBfZmxpZ2h0X2lkJykudGV4dChwaXJlcC5haXJsaW5lLmljYW8gKyBwaXJlcC5mbGlnaHRfbnVtYmVyKTtcclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfaW5mbycpLnRleHQoXHJcbiAgICAgICAgICAgICAgICBwaXJlcC5kcHRfYWlycG9ydC5uYW1lICsgJyAoJyArIHBpcmVwLmRwdF9haXJwb3J0LmljYW8gKyAnKSB0byAnICtcclxuICAgICAgICAgICAgICAgIHBpcmVwLmFycl9haXJwb3J0Lm5hbWUgKyAnICgnICsgcGlyZXAuYXJyX2FpcnBvcnQuaWNhbyArICcpJ1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfc3RhdHNfbWlkZGxlJykuaHRtbChcclxuICAgICAgICAgICAgICAgICdTdGF0dXM6IDxzdHJvbmc+JyArIHBpcmVwLnN0YXR1c190ZXh0ICsgJzwvc3Ryb25nPjxiciAvPicgK1xyXG4gICAgICAgICAgICAgICAgJ0ZsaWdodCBUaW1lOiA8c3Ryb25nPicgKyBob3VycyArICdoICcgKyBtaW5zICsgJ208L3N0cm9uZz48YnIgLz4nICtcclxuICAgICAgICAgICAgICAgICdEaXN0YW5jZTogPHN0cm9uZz4nICsgZGlzdCArICc8L3N0cm9uZz4gLyAnICsgcGxhbm5lZF9kaXN0ICsgb3B0cy51bml0cyArICc8YnIgLz4nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBTaG93IGZsaWdodCBzdGF0IGluZm9cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfc3RhdHNfcmlnaHQnKS5odG1sKFxyXG4gICAgICAgICAgICAgICAgJ0dyb3VuZCBTcGVlZDogPHN0cm9uZz4nICsgcGlyZXAucG9zaXRpb24uZ3MgKyAnPC9zdHJvbmc+PGJyIC8+JyArXHJcbiAgICAgICAgICAgICAgICAnQWx0aXR1ZGU6IDxzdHJvbmc+JyArIHBpcmVwLnBvc2l0aW9uLmFsdGl0dWRlICsgJzwvc3Ryb25nPjxiciAvPicgICtcclxuICAgICAgICAgICAgICAgICdIZWFkaW5nOiA8c3Ryb25nPicgKyBwaXJlcC5wb3NpdGlvbi5oZWFkaW5nICsgJzwvc3Ryb25nPidcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICQoJyNtYXAtaW5mby1iYXInKS5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZU1hcCA9ICgpID0+IHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbG9hZGluZyBmbGlnaHRzIGZyb20gYWNhcnMuLi4nKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQUpBWCBVUERBVEVcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgbGV0IGZsaWdodHMgPSAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IG9wdHMudXBkYXRlX3VyaSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQud2hlbihmbGlnaHRzKS5kb25lKGZ1bmN0aW9uIChmbGlnaHRHZW9Kc29uKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAobGF5ZXJGbGlnaHRzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllckZsaWdodHMuY2xlYXJMYXllcnMoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsYXllckZsaWdodHMgPSBsZWFmbGV0Lmdlb0pTT04oZmxpZ2h0R2VvSnNvbiwge1xyXG4gICAgICAgICAgICAgICAgb25FYWNoRmVhdHVyZTogKGZlYXR1cmUsIGxheWVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIub24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbm5lZFRvQ2VudGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGZlYXR1cmUsIGxheWVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1cF9odG1sID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUucHJvcGVydGllcyAmJiAoZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwICE9PSAnJyAmJiBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXAgIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBfaHRtbCArPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChwb3B1cF9odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcG9pbnRUb0xheWVyOiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF0bG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWZsZXQubWFya2VyKGxhdGxvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBhaXJjcmFmdEljb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQW5nbGU6IGZlYXR1cmUucHJvcGVydGllcy5oZWFkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsYXllckZsaWdodHMuYWRkVG8obWFwKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbG9hZCB0aGUgY2xpY2tlZC1mbGlnaHQgaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgaWYgKGxheWVyU2VsRmxpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGxheWVyU2VsRmxpZ2h0RmVhdHVyZSwgbGF5ZXJTZWxGbGlnaHRMYXllcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG5cclxuICAgIHVwZGF0ZU1hcCgpO1xyXG4gICAgc2V0SW50ZXJ2YWwodXBkYXRlTWFwLCAxMDAwMClcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/maps/live_map.js\n"); +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base_map__ = __webpack_require__(\"./resources/js/maps/base_map.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config__ = __webpack_require__(\"./resources/js/maps/config.js\");\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\n\n\n\n\n/**\r\n * Render the live map\r\n * @param opts\r\n * @private\r\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n update_uri: '/api/acars',\n pirep_uri: '/api/pireps/{id}',\n pirep_link_uri: '/pireps/{id}',\n positions: null,\n render_elem: 'map',\n aircraft_icon: '/assets/img/acars/aircraft.png',\n units: 'nmi'\n }, opts);\n\n var map = Object(__WEBPACK_IMPORTED_MODULE_0__base_map__[\"a\" /* default */])(opts);\n var aircraftIcon = leaflet.icon({\n iconUrl: opts.aircraft_icon,\n iconSize: [42, 42],\n iconAnchor: [21, 21]\n });\n\n var pannedToCenter = false;\n var layerFlights = null;\n var layerSelFlight = null;\n var layerSelFlightFeature = null;\n var layerSelFlightLayer = null;\n\n /**\r\n * When a flight is clicked on, show the path, etc for that flight\r\n * @param feature\r\n * @param layer\r\n */\n var onFlightClick = function onFlightClick(feature, layer) {\n\n var pirep_uri = opts.pirep_uri.replace('{id}', feature.properties.pirep_id);\n var link_uri = opts.pirep_link_uri.replace('{id}', feature.properties.pirep_id);\n var geojson_uri = opts.pirep_uri.replace('{id}', feature.properties.pirep_id) + \"/acars/geojson\";\n\n var pirep_info = $.ajax({\n url: pirep_uri,\n dataType: 'json',\n error: console.log\n });\n\n var flight_route = $.ajax({\n url: geojson_uri,\n dataType: 'json',\n error: console.log\n });\n\n // Load up the PIREP info\n $.when(flight_route).done(function (routeJson) {\n if (layerSelFlight !== null) {\n map.removeLayer(layerSelFlight);\n }\n\n layerSelFlight = leaflet.geodesic([], {\n weight: 5,\n opacity: 0.9,\n color: __WEBPACK_IMPORTED_MODULE_1__config__[\"a\" /* ACTUAL_ROUTE_COLOR */],\n wrap: false\n }).addTo(map);\n\n layerSelFlight.geoJson(routeJson.line);\n layerSelFlightFeature = feature;\n layerSelFlightLayer = layer;\n\n // Center on it, but only do it once, in case the map is moved\n if (!pannedToCenter) {\n map.panTo({ lat: routeJson.position.lat, lng: routeJson.position.lon });\n pannedToCenter = true;\n }\n });\n\n //\n // When the PIREP info is done loading, show the bottom bar\n //\n $.when(pirep_info).done(function (pirep) {\n pirep = pirep.data;\n\n var dist = void 0,\n planned_dist = void 0;\n if (opts.units === 'nmi') {\n dist = pirep.distance.nmi;\n planned_dist = pirep.planned_distance.nmi;\n } else if (opts.units === 'mi') {\n dist = pirep.distance.mi;\n planned_dist = pirep.planned_distance.mi;\n } else if (opts.units === 'km') {\n dist = pirep.distance.km;\n planned_dist = pirep.planned_distance.km;\n }\n\n // Parse flight time\n var hours = Math.floor(pirep.flight_time / 60);\n var mins = pirep.flight_time % 60;\n\n $('#map_flight_id').html('' + pirep.airline.icao + pirep.flight_number + '');\n\n $('#map_flight_info').text(pirep.dpt_airport.name + ' (' + pirep.dpt_airport.icao + ') to ' + pirep.arr_airport.name + ' (' + pirep.arr_airport.icao + ')');\n\n $('#map_flight_stats_middle').html('Status: ' + pirep.status_text + '
' + 'Flight Time: ' + hours + 'h ' + mins + 'm
' + 'Distance: ' + dist + ' / ' + planned_dist + opts.units + '
');\n\n // Show flight stat info\n $('#map_flight_stats_right').html('Ground Speed: ' + pirep.position.gs + '
' + 'Altitude: ' + pirep.position.altitude + '
' + 'Heading: ' + pirep.position.heading + '');\n\n $('#map-info-bar').show();\n });\n };\n\n var updateMap = function updateMap() {\n\n console.log('reloading flights from acars...');\n\n /**\r\n * AJAX UPDATE\r\n */\n\n var flights = $.ajax({\n url: opts.update_uri,\n dataType: 'json',\n error: console.log\n });\n\n $.when(flights).done(function (flightGeoJson) {\n\n if (layerFlights !== null) {\n layerFlights.clearLayers();\n }\n\n layerFlights = leaflet.geoJSON(flightGeoJson, {\n onEachFeature: function onEachFeature(feature, layer) {\n layer.on({\n click: function click(e) {\n pannedToCenter = false;\n onFlightClick(feature, layer);\n }\n });\n\n var popup_html = '';\n if (feature.properties && feature.properties.popup !== '' && feature.properties.popup !== undefined) {\n popup_html += feature.properties.popup;\n layer.bindPopup(popup_html);\n }\n },\n pointToLayer: function pointToLayer(feature, latlon) {\n return leaflet.marker(latlon, {\n icon: aircraftIcon,\n rotationAngle: feature.properties.heading\n });\n }\n });\n\n layerFlights.addTo(map);\n\n // Reload the clicked-flight information\n if (layerSelFlight !== null) {\n onFlightClick(layerSelFlightFeature, layerSelFlightLayer);\n }\n });\n };\n\n updateMap();\n setInterval(updateMap, 10000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcz9lN2Y2Il0sIm5hbWVzIjpbImxlYWZsZXQiLCJyZXF1aXJlIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInVwZGF0ZV91cmkiLCJwaXJlcF91cmkiLCJwaXJlcF9saW5rX3VyaSIsInBvc2l0aW9ucyIsInJlbmRlcl9lbGVtIiwiYWlyY3JhZnRfaWNvbiIsInVuaXRzIiwibWFwIiwiZHJhd19iYXNlX21hcCIsImFpcmNyYWZ0SWNvbiIsImljb24iLCJpY29uVXJsIiwiaWNvblNpemUiLCJpY29uQW5jaG9yIiwicGFubmVkVG9DZW50ZXIiLCJsYXllckZsaWdodHMiLCJsYXllclNlbEZsaWdodCIsImxheWVyU2VsRmxpZ2h0RmVhdHVyZSIsImxheWVyU2VsRmxpZ2h0TGF5ZXIiLCJvbkZsaWdodENsaWNrIiwiZmVhdHVyZSIsImxheWVyIiwicmVwbGFjZSIsInByb3BlcnRpZXMiLCJwaXJlcF9pZCIsImxpbmtfdXJpIiwiZ2VvanNvbl91cmkiLCJwaXJlcF9pbmZvIiwiJCIsImFqYXgiLCJ1cmwiLCJkYXRhVHlwZSIsImVycm9yIiwiY29uc29sZSIsImxvZyIsImZsaWdodF9yb3V0ZSIsIndoZW4iLCJkb25lIiwicm91dGVKc29uIiwicmVtb3ZlTGF5ZXIiLCJnZW9kZXNpYyIsIndlaWdodCIsIm9wYWNpdHkiLCJjb2xvciIsIndyYXAiLCJhZGRUbyIsImdlb0pzb24iLCJsaW5lIiwicGFuVG8iLCJsYXQiLCJwb3NpdGlvbiIsImxuZyIsImxvbiIsInBpcmVwIiwiZGF0YSIsImRpc3QiLCJwbGFubmVkX2Rpc3QiLCJkaXN0YW5jZSIsIm5taSIsInBsYW5uZWRfZGlzdGFuY2UiLCJtaSIsImttIiwiaG91cnMiLCJNYXRoIiwiZmxvb3IiLCJmbGlnaHRfdGltZSIsIm1pbnMiLCJodG1sIiwiYWlybGluZSIsImljYW8iLCJmbGlnaHRfbnVtYmVyIiwidGV4dCIsImRwdF9haXJwb3J0IiwibmFtZSIsImFycl9haXJwb3J0Iiwic3RhdHVzX3RleHQiLCJncyIsImFsdGl0dWRlIiwiaGVhZGluZyIsInNob3ciLCJ1cGRhdGVNYXAiLCJmbGlnaHRzIiwiZmxpZ2h0R2VvSnNvbiIsImNsZWFyTGF5ZXJzIiwiZ2VvSlNPTiIsIm9uRWFjaEZlYXR1cmUiLCJvbiIsImNsaWNrIiwiZSIsInBvcHVwX2h0bWwiLCJwb3B1cCIsInVuZGVmaW5lZCIsImJpbmRQb3B1cCIsInBvaW50VG9MYXllciIsImxhdGxvbiIsIm1hcmtlciIsInJvdGF0aW9uQW5nbGUiLCJzZXRJbnRlcnZhbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUEsSUFBTUEsVUFBVSxtQkFBQUMsQ0FBUSw0Q0FBUixDQUFoQjs7QUFFQTtBQUNBOztBQUVBOzs7OztBQUtBLHlEQUFlLFVBQUNDLElBQUQsRUFBVTs7QUFFckJBLFdBQU9DLE9BQU9DLE1BQVAsQ0FBYztBQUNqQkMsb0JBQVksWUFESztBQUVqQkMsbUJBQVcsa0JBRk07QUFHakJDLHdCQUFnQixjQUhDO0FBSWpCQyxtQkFBVyxJQUpNO0FBS2pCQyxxQkFBYSxLQUxJO0FBTWpCQyx1QkFBZSxnQ0FORTtBQU9qQkMsZUFBTztBQVBVLEtBQWQsRUFRSlQsSUFSSSxDQUFQOztBQVVBLFFBQU1VLE1BQU0sa0VBQUFDLENBQWNYLElBQWQsQ0FBWjtBQUNBLFFBQU1ZLGVBQWVkLFFBQVFlLElBQVIsQ0FBYTtBQUM5QkMsaUJBQVNkLEtBQUtRLGFBRGdCO0FBRTlCTyxrQkFBVSxDQUFDLEVBQUQsRUFBSyxFQUFMLENBRm9CO0FBRzlCQyxvQkFBWSxDQUFDLEVBQUQsRUFBSyxFQUFMO0FBSGtCLEtBQWIsQ0FBckI7O0FBTUEsUUFBSUMsaUJBQWlCLEtBQXJCO0FBQ0EsUUFBSUMsZUFBZSxJQUFuQjtBQUNBLFFBQUlDLGlCQUFpQixJQUFyQjtBQUNBLFFBQUlDLHdCQUF3QixJQUE1QjtBQUNBLFFBQUlDLHNCQUFzQixJQUExQjs7QUFFQTs7Ozs7QUFLQSxRQUFNQyxnQkFBZ0IsU0FBaEJB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aUIsZ0JBQVlqQixTQUFaLEVBQXVCLEtBQXZCO0FBQ0gsQ0EvS0QiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGxlYWZsZXQgPSByZXF1aXJlKCdsZWFmbGV0Jyk7XHJcblxyXG5pbXBvcnQgZHJhd19iYXNlX21hcCBmcm9tICcuL2Jhc2VfbWFwJ1xyXG5pbXBvcnQge0FDVFVBTF9ST1VURV9DT0xPUn0gZnJvbSAnLi9jb25maWcnXHJcblxyXG4vKipcclxuICogUmVuZGVyIHRoZSBsaXZlIG1hcFxyXG4gKiBAcGFyYW0gb3B0c1xyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgKG9wdHMpID0+IHtcclxuXHJcbiAgICBvcHRzID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgdXBkYXRlX3VyaTogJy9hcGkvYWNhcnMnLFxyXG4gICAgICAgIHBpcmVwX3VyaTogJy9hcGkvcGlyZXBzL3tpZH0nLFxyXG4gICAgICAgIHBpcmVwX2xpbmtfdXJpOiAnL3BpcmVwcy97aWR9JyxcclxuICAgICAgICBwb3NpdGlvbnM6IG51bGwsXHJcbiAgICAgICAgcmVuZGVyX2VsZW06ICdtYXAnLFxyXG4gICAgICAgIGFpcmNyYWZ0X2ljb246ICcvYXNzZXRzL2ltZy9hY2Fycy9haXJjcmFmdC5wbmcnLFxyXG4gICAgICAgIHVuaXRzOiAnbm1pJyxcclxuICAgIH0sIG9wdHMpO1xyXG5cclxuICAgIGNvbnN0IG1hcCA9IGRyYXdfYmFzZV9tYXAob3B0cyk7XHJcbiAgICBjb25zdCBhaXJjcmFmdEljb24gPSBsZWFmbGV0Lmljb24oe1xyXG4gICAgICAgIGljb25Vcmw6IG9wdHMuYWlyY3JhZnRfaWNvbixcclxuICAgICAgICBpY29uU2l6ZTogWzQyLCA0Ml0sXHJcbiAgICAgICAgaWNvbkFuY2hvcjogWzIxLCAyMV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgcGFubmVkVG9DZW50ZXIgPSBmYWxzZTtcclxuICAgIGxldCBsYXllckZsaWdodHMgPSBudWxsO1xyXG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0ID0gbnVsbDtcclxuICAgIGxldCBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBudWxsO1xyXG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0TGF5ZXIgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBhIGZsaWdodCBpcyBjbGlja2VkIG9uLCBzaG93IHRoZSBwYXRoLCBldGMgZm9yIHRoYXQgZmxpZ2h0XHJcbiAgICAgKiBAcGFyYW0gZmVhdHVyZVxyXG4gICAgICogQHBhcmFtIGxheWVyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG9uRmxpZ2h0Q2xpY2sgPSAoZmVhdHVyZSwgbGF5ZXIpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgcGlyZXBfdXJpID0gb3B0cy5waXJlcF91cmkucmVwbGFjZSgne2lkfScsIGZlYXR1cmUucHJvcGVydGllcy5waXJlcF9pZCk7XHJcbiAgICAgICAgY29uc3QgbGlua191cmkgPSBvcHRzLnBpcmVwX2xpbmtfdXJpLnJlcGxhY2UoJ3tpZH0nLCBmZWF0dXJlLnByb3BlcnRpZXMucGlyZXBfaWQpO1xyXG4gICAgICAgIGNvbnN0IGdlb2pzb25fdXJpID0gb3B0cy5waXJlcF91cmkucmVwbGFjZSgne2lkfScsIGZlYXR1cmUucHJvcGVydGllcy5waXJlcF9pZCkgKyBcIi9hY2Fycy9nZW9qc29uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IHBpcmVwX2luZm8gPSAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IHBpcmVwX3VyaSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZsaWdodF9yb3V0ZSA9ICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogZ2VvanNvbl91cmksXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLmxvZ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBMb2FkIHVwIHRoZSBQSVJFUCBpbmZvXHJcbiAgICAgICAgJC53aGVuKGZsaWdodF9yb3V0ZSkuZG9uZSgocm91dGVKc29uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChsYXllclNlbEZsaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyU2VsRmxpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHQgPSBsZWFmbGV0Lmdlb2Rlc2ljKFtdLCB7XHJcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IDUsXHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjksXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQUNUVUFMX1JPVVRFX0NPTE9SLFxyXG4gICAgICAgICAgICAgICAgd3JhcDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pLmFkZFRvKG1hcCk7XHJcblxyXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodC5nZW9Kc29uKHJvdXRlSnNvbi5saW5lKTtcclxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHRGZWF0dXJlID0gZmVhdHVyZTtcclxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHRMYXllciA9IGxheWVyO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2VudGVyIG9uIGl0LCBidXQgb25seSBkbyBpdCBvbmNlLCBpbiBjYXNlIHRoZSBtYXAgaXMgbW92ZWRcclxuICAgICAgICAgICAgaWYoIXBhbm5lZFRvQ2VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICBtYXAucGFuVG8oe2xhdDogcm91dGVKc29uLnBvc2l0aW9uLmxhdCwgbG5nOiByb3V0ZUpzb24ucG9zaXRpb24ubG9ufSk7XHJcbiAgICAgICAgICAgICAgICBwYW5uZWRUb0NlbnRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBXaGVuIHRoZSBQSVJFUCBpbmZvIGlzIGRvbmUgbG9hZGluZywgc2hvdyB0aGUgYm90dG9tIGJhclxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgJC53aGVuKHBpcmVwX2luZm8pLmRvbmUocGlyZXAgPT4geyBwaXJlcCA9IHBpcmVwLmRhdGE7XHJcblxyXG4gICAgICAgICAgICBsZXQgZGlzdCwgcGxhbm5lZF9kaXN0O1xyXG4gICAgICAgICAgICBpZihvcHRzLnVuaXRzID09PSAnbm1pJykge1xyXG4gICAgICAgICAgICAgICAgZGlzdCA9IHBpcmVwLmRpc3RhbmNlLm5taTtcclxuICAgICAgICAgICAgICAgIHBsYW5uZWRfZGlzdCA9IHBpcmVwLnBsYW5uZWRfZGlzdGFuY2Uubm1pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYob3B0cy51bml0cyA9PT0gJ21pJykge1xyXG4gICAgICAgICAgICAgICAgZGlzdCA9IHBpcmVwLmRpc3RhbmNlLm1pO1xyXG4gICAgICAgICAgICAgICAgcGxhbm5lZF9kaXN0ID0gcGlyZXAucGxhbm5lZF9kaXN0YW5jZS5taTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKG9wdHMudW5pdHMgPT09ICdrbScpIHtcclxuICAgICAgICAgICAgICAgIGRpc3QgPSBwaXJlcC5kaXN0YW5jZS5rbTtcclxuICAgICAgICAgICAgICAgIHBsYW5uZWRfZGlzdCA9IHBpcmVwLnBsYW5uZWRfZGlzdGFuY2Uua207XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFBhcnNlIGZsaWdodCB0aW1lXHJcbiAgICAgICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihwaXJlcC5mbGlnaHRfdGltZSAvIDYwKTtcclxuICAgICAgICAgICAgY29uc3QgbWlucyA9IHBpcmVwLmZsaWdodF90aW1lICUgNjA7XHJcblxyXG4gICAgICAgICAgICAkKCcjbWFwX2ZsaWdodF9pZCcpLmh0bWwoXHJcbiAgICAgICAgICAgICAgICAnPGEgaHJlZj1cIicgKyBsaW5rX3VyaSAgKyAnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArXHJcbiAgICAgICAgICAgICAgICBwaXJlcC5haXJsaW5lLmljYW8gKyBwaXJlcC5mbGlnaHRfbnVtYmVyICtcclxuICAgICAgICAgICAgICAgICc8L2E+J1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfaW5mbycpLnRleHQoXHJcbiAgICAgICAgICAgICAgICBwaXJlcC5kcHRfYWlycG9ydC5uYW1lICsgJyAoJyArIHBpcmVwLmRwdF9haXJwb3J0LmljYW8gKyAnKSB0byAnICtcclxuICAgICAgICAgICAgICAgIHBpcmVwLmFycl9haXJwb3J0Lm5hbWUgKyAnICgnICsgcGlyZXAuYXJyX2FpcnBvcnQuaWNhbyArICcpJ1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfc3RhdHNfbWlkZGxlJykuaHRtbChcclxuICAgICAgICAgICAgICAgICdTdGF0dXM6IDxzdHJvbmc+JyArIHBpcmVwLnN0YXR1c190ZXh0ICsgJzwvc3Ryb25nPjxiciAvPicgK1xyXG4gICAgICAgICAgICAgICAgJ0ZsaWdodCBUaW1lOiA8c3Ryb25nPicgKyBob3VycyArICdoICcgKyBtaW5zICsgJ208L3N0cm9uZz48YnIgLz4nICtcclxuICAgICAgICAgICAgICAgICdEaXN0YW5jZTogPHN0cm9uZz4nICsgZGlzdCArICc8L3N0cm9uZz4gLyAnICsgcGxhbm5lZF9kaXN0ICsgb3B0cy51bml0cyArICc8YnIgLz4nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBTaG93IGZsaWdodCBzdGF0IGluZm9cclxuICAgICAgICAgICAgJCgnI21hcF9mbGlnaHRfc3RhdHNfcmlnaHQnKS5odG1sKFxyXG4gICAgICAgICAgICAgICAgJ0dyb3VuZCBTcGVlZDogPHN0cm9uZz4nICsgcGlyZXAucG9zaXRpb24uZ3MgKyAnPC9zdHJvbmc+PGJyIC8+JyArXHJcbiAgICAgICAgICAgICAgICAnQWx0aXR1ZGU6IDxzdHJvbmc+JyArIHBpcmVwLnBvc2l0aW9uLmFsdGl0dWRlICsgJzwvc3Ryb25nPjxiciAvPicgICtcclxuICAgICAgICAgICAgICAgICdIZWFkaW5nOiA8c3Ryb25nPicgKyBwaXJlcC5wb3NpdGlvbi5oZWFkaW5nICsgJzwvc3Ryb25nPidcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICQoJyNtYXAtaW5mby1iYXInKS5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZU1hcCA9ICgpID0+IHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbG9hZGluZyBmbGlnaHRzIGZyb20gYWNhcnMuLi4nKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQUpBWCBVUERBVEVcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgbGV0IGZsaWdodHMgPSAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IG9wdHMudXBkYXRlX3VyaSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQud2hlbihmbGlnaHRzKS5kb25lKGZ1bmN0aW9uIChmbGlnaHRHZW9Kc29uKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAobGF5ZXJGbGlnaHRzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllckZsaWdodHMuY2xlYXJMYXllcnMoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsYXllckZsaWdodHMgPSBsZWFmbGV0Lmdlb0pTT04oZmxpZ2h0R2VvSnNvbiwge1xyXG4gICAgICAgICAgICAgICAgb25FYWNoRmVhdHVyZTogKGZlYXR1cmUsIGxheWVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIub24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbm5lZFRvQ2VudGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGZlYXR1cmUsIGxheWVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1cF9odG1sID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUucHJvcGVydGllcyAmJiAoZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwICE9PSAnJyAmJiBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXAgIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBfaHRtbCArPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChwb3B1cF9odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcG9pbnRUb0xheWVyOiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF0bG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWZsZXQubWFya2VyKGxhdGxvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBhaXJjcmFmdEljb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQW5nbGU6IGZlYXR1cmUucHJvcGVydGllcy5oZWFkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsYXllckZsaWdodHMuYWRkVG8obWFwKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbG9hZCB0aGUgY2xpY2tlZC1mbGlnaHQgaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgaWYgKGxheWVyU2VsRmxpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGxheWVyU2VsRmxpZ2h0RmVhdHVyZSwgbGF5ZXJTZWxGbGlnaHRMYXllcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG5cclxuICAgIHVwZGF0ZU1hcCgpO1xyXG4gICAgc2V0SW50ZXJ2YWwodXBkYXRlTWFwLCAxMDAwMClcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/maps/live_map.js\n"); /***/ }), diff --git a/public/mix-manifest.json b/public/mix-manifest.json index a3159cfb..c12d2cb9 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,8 +1,8 @@ { - "/assets/frontend/js/app.js": "/assets/frontend/js/app.js?id=df652ba09d3074d46cd0", + "/assets/frontend/js/app.js": "/assets/frontend/js/app.js?id=8f1a1bff7c8d0e2888db", "/assets/frontend/css/now-ui-kit.css": "/assets/frontend/css/now-ui-kit.css?id=70c0f73b28bc686d7791", "/assets/admin/css/vendor.min.css": "/assets/admin/css/vendor.min.css?id=42f138d32d03b309dec7", - "/assets/admin/js/app.js": "/assets/admin/js/app.js?id=cf0b6af9aeb25fe3fbcd", + "/assets/admin/js/app.js": "/assets/admin/js/app.js?id=e4a5d8869d23f708dd10", "/assets/installer/js/app.js": "/assets/installer/js/app.js?id=27b9f2ce0b268e658f01", "/assets/fonts/glyphicons-halflings-regular.woff2": "/assets/fonts/glyphicons-halflings-regular.woff2?id=b5b5055c6d812c0f9f0d", "/assets/admin/fonts/glyphicons-halflings-regular.woff2": "/assets/admin/fonts/glyphicons-halflings-regular.woff2?id=b5b5055c6d812c0f9f0d",