diff --git a/app/Database/migrations/2017_06_07_014930_create_settings_table.php b/app/Database/migrations/2017_06_07_014930_create_settings_table.php
index 56df35f1..6801be0b 100644
--- a/app/Database/migrations/2017_06_07_014930_create_settings_table.php
+++ b/app/Database/migrations/2017_06_07_014930_create_settings_table.php
@@ -122,6 +122,35 @@ class CreateSettingsTable extends Migration
'description' => 'The units for temperature',
]);
+ /**
+ * ACARS Settings
+ */
+
+ $this->addSetting('acars.live_time', [
+ 'name' => 'Live Time',
+ 'group' => 'acars',
+ 'value' => 12,
+ 'type' => 'int',
+ 'description' => 'Age of flights to show on the map in hours. '
+ .'Set to 0 to show only all in-progress flights',
+ ]);
+
+ $this->addSetting('acars.center_coords', [
+ 'name' => 'Center Coords',
+ 'group' => 'acars',
+ 'value' => '30.1945,-97.6699',
+ 'type' => 'text',
+ 'description' => 'Where to center the map; enter as LAT,LON',
+ ]);
+
+ $this->addSetting('acars.default_zoom', [
+ 'name' => 'Default Zoom',
+ 'group' => 'acars',
+ 'value' => 5,
+ 'type' => 'int',
+ 'description' => 'Initial zoom level on the map',
+ ]);
+
/**
* BIDS
*/
diff --git a/app/Repositories/AcarsRepository.php b/app/Repositories/AcarsRepository.php
index ee43d9b7..3e1311e1 100644
--- a/app/Repositories/AcarsRepository.php
+++ b/app/Repositories/AcarsRepository.php
@@ -7,6 +7,7 @@ use App\Models\Acars;
use App\Models\Enums\AcarsType;
use App\Models\Enums\PirepState;
use App\Models\Pirep;
+use Carbon\Carbon;
/**
* Class AcarsRepository
@@ -51,14 +52,21 @@ class AcarsRepository extends Repository
/**
* Get all of the PIREPS that are in-progress, and then
* get the latest update for those flights
+ * @param int $live_time Age in hours of the oldest flights to show
* @return Pirep
*/
- public function getPositions()
+ public function getPositions($live_time = 0)
{
- return Pirep::with(['airline', 'position', 'aircraft'])
- ->where(['state' => PirepState::IN_PROGRESS])
- ->orderBy('created_at', 'desc')
- ->get();
+ $q = Pirep::with(['airline', 'position', 'aircraft'])
+ ->where(['state' => PirepState::IN_PROGRESS]);
+
+ if($live_time !== null && $live_time > 0) {
+ $st = Carbon::now('UTC')->subHours($live_time);
+ $q = $q->whereDate('created_at', '>=', $st);
+ }
+
+ $q = $q->orderBy('created_at', 'desc');
+ return $q->get();
}
/**
diff --git a/app/Widgets/LiveMap.php b/app/Widgets/LiveMap.php
index c4bc7ec8..453e4212 100644
--- a/app/Widgets/LiveMap.php
+++ b/app/Widgets/LiveMap.php
@@ -25,13 +25,20 @@ class LiveMap extends Widget
$geoSvc = app(GeoService::class);
$acarsRepo = app(AcarsRepository::class);
- $pireps = $acarsRepo->getPositions();
+ $pireps = $acarsRepo->getPositions(setting('acars.live_time', 0));
$positions = $geoSvc->getFeatureForLiveFlights($pireps);
+ $center_coords = setting('acars.center_coords', '0,0');
+ $center_coords = array_map(function($c) {
+ return (float) trim($c);
+ }, explode(',', $center_coords));
+
return view('widgets.live_map', [
- 'config' => $this->config,
- 'pireps' => $pireps,
- 'positions' => $positions,
+ 'config' => $this->config,
+ 'pireps' => $pireps,
+ 'positions' => $positions,
+ 'center' => $center_coords,
+ 'zoom' => setting('acars.default_zoom', 5),
]);
}
}
diff --git a/composer.lock b/composer.lock
index b70c576d..b2d0df85 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1448,16 +1448,16 @@
},
{
"name": "laravel/framework",
- "version": "v5.6.20",
+ "version": "v5.6.22",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "3c11e7acc6ad14dd86e2f9e4bf3230010c3e611c"
+ "reference": "637fd797a6dde8d24a9f07da77e375ec251c5d24"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/3c11e7acc6ad14dd86e2f9e4bf3230010c3e611c",
- "reference": "3c11e7acc6ad14dd86e2f9e4bf3230010c3e611c",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/637fd797a6dde8d24a9f07da77e375ec251c5d24",
+ "reference": "637fd797a6dde8d24a9f07da77e375ec251c5d24",
"shasum": ""
},
"require": {
@@ -1583,20 +1583,20 @@
"framework",
"laravel"
],
- "time": "2018-05-02T15:22:18+00:00"
+ "time": "2018-05-15T13:34:20+00:00"
},
{
"name": "laravelcollective/html",
- "version": "v5.6.7",
+ "version": "v5.6.8",
"source": {
"type": "git",
"url": "https://github.com/LaravelCollective/html.git",
- "reference": "38f2c6ff0d3dfc497175a5cff5e24b3937f6e2c9"
+ "reference": "42c0854e00d6bb3346883d122b444fbf15a13ecb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/LaravelCollective/html/zipball/38f2c6ff0d3dfc497175a5cff5e24b3937f6e2c9",
- "reference": "38f2c6ff0d3dfc497175a5cff5e24b3937f6e2c9",
+ "url": "https://api.github.com/repos/LaravelCollective/html/zipball/42c0854e00d6bb3346883d122b444fbf15a13ecb",
+ "reference": "42c0854e00d6bb3346883d122b444fbf15a13ecb",
"shasum": ""
},
"require": {
@@ -1651,7 +1651,7 @@
],
"description": "HTML and Form Builders for the Laravel Framework",
"homepage": "https://laravelcollective.com",
- "time": "2018-04-26T16:09:18+00:00"
+ "time": "2018-05-10T17:15:15+00:00"
},
{
"name": "league/csv",
@@ -1722,16 +1722,16 @@
},
{
"name": "league/flysystem",
- "version": "1.0.44",
+ "version": "1.0.45",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "168dbe519737221dc87d17385cde33073881fd02"
+ "reference": "a99f94e63b512d75f851b181afcdf0ee9ebef7e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/168dbe519737221dc87d17385cde33073881fd02",
- "reference": "168dbe519737221dc87d17385cde33073881fd02",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a99f94e63b512d75f851b181afcdf0ee9ebef7e6",
+ "reference": "a99f94e63b512d75f851b181afcdf0ee9ebef7e6",
"shasum": ""
},
"require": {
@@ -1802,7 +1802,7 @@
"sftp",
"storage"
],
- "time": "2018-04-06T09:58:14+00:00"
+ "time": "2018-05-07T08:44:23+00:00"
},
{
"name": "league/geotools",
diff --git a/public/assets/admin/js/app.js b/public/assets/admin/js/app.js
index 2c180696..24fc4437 100644
--- a/public/assets/admin/js/app.js
+++ b/public/assets/admin/js/app.js
@@ -368,7 +368,7 @@ eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base_map__ = __webpa
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("//\n\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\n__webpack_require__(\"./node_modules/leaflet-providers/leaflet-providers.js\");\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n render_elem: 'map',\n center: [29.98139, -95.33374],\n zoom: 5,\n maxZoom: 10,\n layers: [],\n set_marker: false,\n providers: ['Esri.WorldStreetMap']\n }, opts);\n\n /*\n let feature_groups = [];\n const openaip_airspace_labels = new leaflet.TileLayer.WMS(\n \"http://{s}.tile.maps.openaip.net/geowebcache/service/wms\", {\n maxZoom: 14,\n minZoom: 12,\n layers: 'openaip_approved_airspaces_labels',\n tileSize: 1024,\n detectRetina: true,\n subdomains: '12',\n format: 'image/png',\n transparent: true\n });\n openaip_airspace_labels.addTo(map);*/\n\n /*const openaip_cached_basemap = new leaflet.TileLayer(\"http://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.png\", {\n maxZoom: 14,\n minZoom: 4,\n tms: true,\n detectRetina: true,\n subdomains: '12',\n format: 'image/png',\n transparent: true\n });\n feature_groups.push(openaip_cached_basemap);\n */\n\n var map = leaflet.map('map', {\n //layers: [openaip_basemap_phys_osm],\n center: opts.center,\n zoom: opts.zoom,\n scrollWheelZoom: false\n });\n\n for (var i in opts.providers) {\n leaflet.tileLayer.provider(opts.providers[i]).addTo(map);\n }\n\n return map;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcz80MzA3Il0sIm5hbWVzIjpbImxlYWZsZXQiLCJyZXF1aXJlIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInJlbmRlcl9lbGVtIiwiY2VudGVyIiwiem9vbSIsIm1heFpvb20iLCJsYXllcnMiLCJzZXRfbWFya2VyIiwicHJvdmlkZXJzIiwibWFwIiwic2Nyb2xsV2hlZWxab29tIiwiaSIsInRpbGVMYXllciIsInByb3ZpZGVyIiwiYWRkVG8iXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLElBQU1BLFVBQVUsbUJBQUFDLENBQVEsNENBQVIsQ0FBaEI7QUFDQSxtQkFBQUEsQ0FBUSx1REFBUjs7QUFFQSx5REFBZSxVQUFDQyxJQUFELEVBQVU7O0FBRXJCQSxXQUFPQyxPQUFPQyxNQUFQLENBQWM7QUFDakJDLHFCQUFhLEtBREk7QUFFakJDLGdCQUFRLENBQUMsUUFBRCxFQUFXLENBQUMsUUFBWixDQUZTO0FBR2pCQyxjQUFNLENBSFc7QUFJakJDLGlCQUFTLEVBSlE7QUFLakJDLGdCQUFRLEVBTFM7QUFNakJDLG9CQUFZLEtBTks7QUFPakJDLG1CQUFXLENBQ1AscUJBRE87QUFQTSxLQUFkLEVBVUpULElBVkksQ0FBUDs7QUFZQTs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBOzs7Ozs7Ozs7Ozs7QUFhQSxRQUFJVSxNQUFNWixRQUFRWSxHQUFSLENBQVksS0FBWixFQUFtQjtBQUN6QjtBQUNBTixnQkFBUUosS0FBS0ksTUFGWTtBQUd6QkMsY0FBTUwsS0FBS0ssSUFIYztBQUl6Qk0seUJBQWlCO0FBSlEsS0FBbkIsQ0FBVjs7QUFPQSxTQUFJLElBQU1DLENBQVYsSUFBZVosS0FBS1MsU0FBcEIsRUFBK0I7QUFDM0JYLGdCQUFRZSxTQUFSLENBQWtCQyxRQUFsQixDQUEyQmQsS0FBS1MsU0FBTCxDQUFlRyxDQUFmLENBQTNCLEVBQThDRyxLQUE5QyxDQUFvREwsR0FBcEQ7QUFDSDs7QUFFRCxXQUFPQSxHQUFQO0FBQ0gsQ0F2REQiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG5cbmNvbnN0IGxlYWZsZXQgPSByZXF1aXJlKCdsZWFmbGV0Jyk7XG5yZXF1aXJlKCdsZWFmbGV0LXByb3ZpZGVycycpO1xuXG5leHBvcnQgZGVmYXVsdCAob3B0cykgPT4ge1xuXG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICByZW5kZXJfZWxlbTogJ21hcCcsXG4gICAgICAgIGNlbnRlcjogWzI5Ljk4MTM5LCAtOTUuMzMzNzRdLFxuICAgICAgICB6b29tOiA1LFxuICAgICAgICBtYXhab29tOiAxMCxcbiAgICAgICAgbGF5ZXJzOiBbXSxcbiAgICAgICAgc2V0X21hcmtlcjogZmFsc2UsXG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgJ0VzcmkuV29ybGRTdHJlZXRNYXAnLFxuICAgICAgICBdLFxuICAgIH0sIG9wdHMpO1xuXG4gICAgLypcbiAgICBsZXQgZmVhdHVyZV9ncm91cHMgPSBbXTtcbiAgICBjb25zdCBvcGVuYWlwX2FpcnNwYWNlX2xhYmVscyA9IG5ldyBsZWFmbGV0LlRpbGVMYXllci5XTVMoXG4gICAgICAgIFwiaHR0cDovL3tzfS50aWxlLm1hcHMub3BlbmFpcC5uZXQvZ2Vvd2ViY2FjaGUvc2VydmljZS93bXNcIiwge1xuICAgICAgICAgICAgbWF4Wm9vbTogMTQsXG4gICAgICAgICAgICBtaW5ab29tOiAxMixcbiAgICAgICAgICAgIGxheWVyczogJ29wZW5haXBfYXBwcm92ZWRfYWlyc3BhY2VzX2xhYmVscycsXG4gICAgICAgICAgICB0aWxlU2l6ZTogMTAyNCxcbiAgICAgICAgICAgIGRldGVjdFJldGluYTogdHJ1ZSxcbiAgICAgICAgICAgIHN1YmRvbWFpbnM6ICcxMicsXG4gICAgICAgICAgICBmb3JtYXQ6ICdpbWFnZS9wbmcnLFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICBvcGVuYWlwX2FpcnNwYWNlX2xhYmVscy5hZGRUbyhtYXApOyovXG5cbiAgICAvKmNvbnN0IG9wZW5haXBfY2FjaGVkX2Jhc2VtYXAgPSBuZXcgbGVhZmxldC5UaWxlTGF5ZXIoXCJodHRwOi8ve3N9LnRpbGUubWFwcy5vcGVuYWlwLm5ldC9nZW93ZWJjYWNoZS9zZXJ2aWNlL3Rtcy8xLjAuMC9vcGVuYWlwX2Jhc2VtYXBARVBTRyUzQTkwMDkxM0Bwbmcve3p9L3t4fS97eX0ucG5nXCIsIHtcbiAgICAgICAgbWF4Wm9vbTogMTQsXG4gICAgICAgIG1pblpvb206IDQsXG4gICAgICAgIHRtczogdHJ1ZSxcbiAgICAgICAgZGV0ZWN0UmV0aW5hOiB0cnVlLFxuICAgICAgICBzdWJkb21haW5zOiAnMTInLFxuICAgICAgICBmb3JtYXQ6ICdpbWFnZS9wbmcnLFxuICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZmVhdHVyZV9ncm91cHMucHVzaChvcGVuYWlwX2NhY2hlZF9iYXNlbWFwKTtcbiAgICAqL1xuXG4gICAgbGV0IG1hcCA9IGxlYWZsZXQubWFwKCdtYXAnLCB7XG4gICAgICAgIC8vbGF5ZXJzOiBbb3BlbmFpcF9iYXNlbWFwX3BoeXNfb3NtXSxcbiAgICAgICAgY2VudGVyOiBvcHRzLmNlbnRlcixcbiAgICAgICAgem9vbTogb3B0cy56b29tLFxuICAgICAgICBzY3JvbGxXaGVlbFpvb206IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgZm9yKGNvbnN0IGkgaW4gb3B0cy5wcm92aWRlcnMpIHtcbiAgICAgICAgbGVhZmxldC50aWxlTGF5ZXIucHJvdmlkZXIob3B0cy5wcm92aWRlcnNbaV0pLmFkZFRvKG1hcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/maps/base_map.js\n");
+eval("//\n\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\n__webpack_require__(\"./node_modules/leaflet-providers/leaflet-providers.js\");\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n render_elem: 'map',\n center: [29.98139, -95.33374],\n zoom: 5,\n maxZoom: 10,\n layers: [],\n set_marker: false,\n providers: ['Esri.WorldStreetMap'],\n tile_layers: []\n }, opts);\n\n /*\n let feature_groups = [];\n const openaip_airspace_labels = new leaflet.TileLayer.WMS(\n \"http://{s}.tile.maps.openaip.net/geowebcache/service/wms\", {\n maxZoom: 14,\n minZoom: 12,\n layers: 'openaip_approved_airspaces_labels',\n tileSize: 1024,\n detectRetina: true,\n subdomains: '12',\n format: 'image/png',\n transparent: true\n });\n openaip_airspace_labels.addTo(map);*/\n\n /*const openaip_cached_basemap = new leaflet.TileLayer(\"http://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.png\", {\n maxZoom: 14,\n minZoom: 4,\n tms: true,\n detectRetina: true,\n subdomains: '12',\n format: 'image/png',\n transparent: true\n });\n feature_groups.push(openaip_cached_basemap);\n */\n\n var map = leaflet.map('map', {\n //layers: [openaip_basemap_phys_osm],\n center: opts.center,\n zoom: opts.zoom,\n scrollWheelZoom: false\n });\n\n for (var i in opts.providers) {\n leaflet.tileLayer.provider(opts.providers[i]).addTo(map);\n }\n\n return map;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcz80MzA3Il0sIm5hbWVzIjpbImxlYWZsZXQiLCJyZXF1aXJlIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInJlbmRlcl9lbGVtIiwiY2VudGVyIiwiem9vbSIsIm1heFpvb20iLCJsYXllcnMiLCJzZXRfbWFya2VyIiwicHJvdmlkZXJzIiwidGlsZV9sYXllcnMiLCJtYXAiLCJzY3JvbGxXaGVlbFpvb20iLCJpIiwidGlsZUxheWVyIiwicHJvdmlkZXIiLCJhZGRUbyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsSUFBTUEsVUFBVSxtQkFBQUMsQ0FBUSw0Q0FBUixDQUFoQjtBQUNBLG1CQUFBQSxDQUFRLHVEQUFSOztBQUVBLHlEQUFlLFVBQUNDLElBQUQsRUFBVTs7QUFFckJBLFdBQU9DLE9BQU9DLE1BQVAsQ0FBYztBQUNqQkMscUJBQWEsS0FESTtBQUVqQkMsZ0JBQVEsQ0FBQyxRQUFELEVBQVcsQ0FBQyxRQUFaLENBRlM7QUFHakJDLGNBQU0sQ0FIVztBQUlqQkMsaUJBQVMsRUFKUTtBQUtqQkMsZ0JBQVEsRUFMUztBQU1qQkMsb0JBQVksS0FOSztBQU9qQkMsbUJBQVcsQ0FDUCxxQkFETyxDQVBNO0FBVWpCQyxxQkFBYTtBQVZJLEtBQWQsRUFXSlYsSUFYSSxDQUFQOztBQWFBOzs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7Ozs7Ozs7Ozs7OztBQWFBLFFBQUlXLE1BQU1iLFFBQVFhLEdBQVIsQ0FBWSxLQUFaLEVBQW1CO0FBQ3pCO0FBQ0FQLGdCQUFRSixLQUFLSSxNQUZZO0FBR3pCQyxjQUFNTCxLQUFLSyxJQUhjO0FBSXpCTyx5QkFBaUI7QUFKUSxLQUFuQixDQUFWOztBQU9BLFNBQUksSUFBTUMsQ0FBVixJQUFlYixLQUFLUyxTQUFwQixFQUErQjtBQUMzQlgsZ0JBQVFnQixTQUFSLENBQWtCQyxRQUFsQixDQUEyQmYsS0FBS1MsU0FBTCxDQUFlSSxDQUFmLENBQTNCLEVBQThDRyxLQUE5QyxDQUFvREwsR0FBcEQ7QUFDSDs7QUFFRCxXQUFPQSxHQUFQO0FBQ0gsQ0F4REQiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG5cbmNvbnN0IGxlYWZsZXQgPSByZXF1aXJlKCdsZWFmbGV0Jyk7XG5yZXF1aXJlKCdsZWFmbGV0LXByb3ZpZGVycycpO1xuXG5leHBvcnQgZGVmYXVsdCAob3B0cykgPT4ge1xuXG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICByZW5kZXJfZWxlbTogJ21hcCcsXG4gICAgICAgIGNlbnRlcjogWzI5Ljk4MTM5LCAtOTUuMzMzNzRdLFxuICAgICAgICB6b29tOiA1LFxuICAgICAgICBtYXhab29tOiAxMCxcbiAgICAgICAgbGF5ZXJzOiBbXSxcbiAgICAgICAgc2V0X21hcmtlcjogZmFsc2UsXG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgJ0VzcmkuV29ybGRTdHJlZXRNYXAnLFxuICAgICAgICBdLFxuICAgICAgICB0aWxlX2xheWVyczogW10sXG4gICAgfSwgb3B0cyk7XG5cbiAgICAvKlxuICAgIGxldCBmZWF0dXJlX2dyb3VwcyA9IFtdO1xuICAgIGNvbnN0IG9wZW5haXBfYWlyc3BhY2VfbGFiZWxzID0gbmV3IGxlYWZsZXQuVGlsZUxheWVyLldNUyhcbiAgICAgICAgXCJodHRwOi8ve3N9LnRpbGUubWFwcy5vcGVuYWlwLm5ldC9nZW93ZWJjYWNoZS9zZXJ2aWNlL3dtc1wiLCB7XG4gICAgICAgICAgICBtYXhab29tOiAxNCxcbiAgICAgICAgICAgIG1pblpvb206IDEyLFxuICAgICAgICAgICAgbGF5ZXJzOiAnb3BlbmFpcF9hcHByb3ZlZF9haXJzcGFjZXNfbGFiZWxzJyxcbiAgICAgICAgICAgIHRpbGVTaXplOiAxMDI0LFxuICAgICAgICAgICAgZGV0ZWN0UmV0aW5hOiB0cnVlLFxuICAgICAgICAgICAgc3ViZG9tYWluczogJzEyJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgIG9wZW5haXBfYWlyc3BhY2VfbGFiZWxzLmFkZFRvKG1hcCk7Ki9cblxuICAgIC8qY29uc3Qgb3BlbmFpcF9jYWNoZWRfYmFzZW1hcCA9IG5ldyBsZWFmbGV0LlRpbGVMYXllcihcImh0dHA6Ly97c30udGlsZS5tYXBzLm9wZW5haXAubmV0L2dlb3dlYmNhY2hlL3NlcnZpY2UvdG1zLzEuMC4wL29wZW5haXBfYmFzZW1hcEBFUFNHJTNBOTAwOTEzQHBuZy97en0ve3h9L3t5fS5wbmdcIiwge1xuICAgICAgICBtYXhab29tOiAxNCxcbiAgICAgICAgbWluWm9vbTogNCxcbiAgICAgICAgdG1zOiB0cnVlLFxuICAgICAgICBkZXRlY3RSZXRpbmE6IHRydWUsXG4gICAgICAgIHN1YmRvbWFpbnM6ICcxMicsXG4gICAgICAgIGZvcm1hdDogJ2ltYWdlL3BuZycsXG4gICAgICAgIHRyYW5zcGFyZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICBmZWF0dXJlX2dyb3Vwcy5wdXNoKG9wZW5haXBfY2FjaGVkX2Jhc2VtYXApO1xuICAgICovXG5cbiAgICBsZXQgbWFwID0gbGVhZmxldC5tYXAoJ21hcCcsIHtcbiAgICAgICAgLy9sYXllcnM6IFtvcGVuYWlwX2Jhc2VtYXBfcGh5c19vc21dLFxuICAgICAgICBjZW50ZXI6IG9wdHMuY2VudGVyLFxuICAgICAgICB6b29tOiBvcHRzLnpvb20sXG4gICAgICAgIHNjcm9sbFdoZWVsWm9vbTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBmb3IoY29uc3QgaSBpbiBvcHRzLnByb3ZpZGVycykge1xuICAgICAgICBsZWFmbGV0LnRpbGVMYXllci5wcm92aWRlcihvcHRzLnByb3ZpZGVyc1tpXSkuYWRkVG8obWFwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3Jlc291cmNlcy9qcy9tYXBzL2Jhc2VfbWFwLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/maps/base_map.js\n");
/***/ }),
@@ -400,7 +400,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\");\n//\n\nvar geolib = __webpack_require__(\"./node_modules/geolib/dist/geolib.js\");\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\nvar rivets = __webpack_require__(\"./node_modules/rivets/dist/rivets.js\");\n\n\n\n\n/**\n * Render the live map\n * @param opts\n * @private\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 /**\n * Hold the markers\n * @type {{}}\n */\n var markers_list = {};\n\n var pannedToCenter = false;\n\n var layerFlights = null;\n var layerSelFlight = null;\n var layerSelFlightFeature = null;\n var layerSelFlightLayer = null;\n var layerSelArr = null;\n var layerSelDep = null;\n\n /**\n * Controller for two-way bindings\n * @type {{focusMarker: focusMarker}}\n */\n var mapController = {\n /**\n * Focus on a specific marker\n * @param e\n * @param model\n */\n focusMarker: function focusMarker(e, model) {\n if (!(model.pirep.id in markers_list)) {\n console.log('marker not found in list');\n return;\n }\n\n var marker = markers_list[model.pirep.id];\n onFlightClick(marker[0], marker[1]);\n }\n };\n\n var r_map_view = rivets.bind($('#map-info-box'), { pirep: {}, controller: mapController });\n var r_table_view = rivets.bind($('#live_flights'), { pireps: [], controller: mapController });\n\n /**\n * When a flight is clicked on, show the path, etc for that flight\n * @param feature\n * @param layer\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 (rte) {\n if (layerSelFlight !== null) {\n map.removeLayer(layerSelFlight);\n //map.removeLayer(layerSelArr);\n //map.removeLayer(layerSelDep);\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(rte.line);\n layerSelFlightFeature = feature;\n layerSelFlightLayer = layer;\n\n /*const dptIcon = leaflet.divIcon({\n html: '
' + rte.airports.d.icao + '
'\n });\n layerSelDep = leaflet.marker([rte.airports.d.lat, rte.airports.d.lon], {icon:dptIcon}).addTo(map);\n */\n\n // Center on it, but only do it once, in case the map is moved\n if (!pannedToCenter) {\n // find center\n var c = geolib.getCenter([{ latitude: rte.airports.a.lat, longitude: rte.airports.a.lon }, { latitude: rte.airports.d.lat, longitude: rte.airports.d.lon }]);\n\n //map.panTo({lat: c.latitude, lng: c.longitude});\n map.panTo({ lat: rte.position.lat, lng: rte.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 r_map_view.update({ pirep: pirep.data });\n $('#map-info-box').show();\n });\n };\n\n var updateMap = function updateMap() {\n\n console.log('reloading flights from acars...');\n\n /**\n * AJAX UPDATE\n */\n var pirep_uri = opts.pirep_uri.replace('{id}', '');\n var pireps = $.ajax({\n url: pirep_uri,\n dataType: 'json',\n error: console.log\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 // add to the list\n markers_list[feature.properties.pirep_id] = [feature, layer];\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 $.when(pireps).done(function (pireps) {\n r_table_view.update({\n pireps: pireps.data,\n has_data: pireps.data.length > 0\n });\n });\n };\n\n updateMap();\n setInterval(updateMap, 10000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcz9lN2Y2Il0sIm5hbWVzIjpbImdlb2xpYiIsInJlcXVpcmUiLCJsZWFmbGV0Iiwicml2ZXRzIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInVwZGF0ZV91cmkiLCJwaXJlcF91cmkiLCJwaXJlcF9saW5rX3VyaSIsInBvc2l0aW9ucyIsInJlbmRlcl9lbGVtIiwiYWlyY3JhZnRfaWNvbiIsInVuaXRzIiwibWFwIiwiZHJhd19iYXNlX21hcCIsImFpcmNyYWZ0SWNvbiIsImljb24iLCJpY29uVXJsIiwiaWNvblNpemUiLCJpY29uQW5jaG9yIiwibWFya2Vyc19saXN0IiwicGFubmVkVG9DZW50ZXIiLCJsYXllckZsaWdodHMiLCJsYXllclNlbEZsaWdodCIsImxheWVyU2VsRmxpZ2h0RmVhdHVyZSIsImxheWVyU2VsRmxpZ2h0TGF5ZXIiLCJsYXllclNlbEFyciIsImxheWVyU2VsRGVwIiwibWFwQ29udHJvbGxlciIsImZvY3VzTWFya2VyIiwiZSIsIm1vZGVsIiwicGlyZXAiLCJpZCIsImNvbnNvbGUiLCJsb2ciLCJtYXJrZXIiLCJvbkZsaWdodENsaWNrIiwicl9tYXBfdmlldyIsImJpbmQiLCIkIiwiY29udHJvbGxlciIsInJfdGFibGVfdmlldyIsInBpcmVwcyIsImZlYXR1cmUiLCJsYXllciIsInJlcGxhY2UiLCJwcm9wZXJ0aWVzIiwicGlyZXBfaWQiLCJnZW9qc29uX3VyaSIsInBpcmVwX2luZm8iLCJhamF4IiwidXJsIiwiZGF0YVR5cGUiLCJlcnJvciIsImZsaWdodF9yb3V0ZSIsIndoZW4iLCJkb25lIiwicnRlIiwicmVtb3ZlTGF5ZXIiLCJnZW9kZXNpYyIsIndlaWdodCIsIm9wYWNpdHkiLCJjb2xvciIsIndyYXAiLCJhZGRUbyIsImdlb0pzb24iLCJsaW5lIiwiYyIsImdldENlbnRlciIsImxhdGl0dWRlIiwiYWlycG9ydHMiLCJhIiwibGF0IiwibG9uZ2l0dWRlIiwibG9uIiwiZCIsInBhblRvIiwicG9zaXRpb24iLCJsbmciLCJ1cGRhdGUiLCJkYXRhIiwic2hvdyIsInVwZGF0ZU1hcCIsImZsaWdodHMiLCJjbGVhckxheWVycyIsImdlb0pTT04iLCJmbGlnaHRHZW9Kc29uIiwib25FYWNoRmVhdHVyZSIsIm9uIiwiY2xpY2siLCJwb3B1cF9odG1sIiwicG9wdXAiLCJ1bmRlZmluZWQiLCJiaW5kUG9wdXAiLCJwb2ludFRvTGF5ZXIiLCJsYXRsb24iLCJyb3RhdGlvbkFuZ2xlIiwiaGVhZGluZyIsImhhc19kYXRhIiwibGVuZ3RoIiwic2V0SW50ZXJ2YWwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBOztBQUVBLElBQU1BLFNBQVMsbUJBQUFDLENBQVEsc0NBQVIsQ0FBZjtBQUNBLElBQU1DLFVBQVUsbUJBQUFELENBQVEsNENBQVIsQ0FBaEI7QUFDQSxJQUFNRSxTQUFTLG1CQUFBRixDQUFRLHNDQUFSLENBQWY7O0FBRUE7QUFDQTs7QUFFQTs7Ozs7QUFLQSx5REFBZSxVQUFDRyxJQUFELEVBQVU7O0FBRXJCQSxXQUFPQyxPQUFPQyxNQUFQLENBQWM7QUFDakJDLG9CQUFZLFlBREs7QUFFakJDLG1CQUFXLGtCQUZNO0FBR2pCQyx3QkFBZ0IsY0FIQztBQUlqQkMsbUJBQVcsSUFKTTtBQUtqQkMscUJBQWEsS0FMSTtBQU1qQkMsdUJBQWUsZ0NBTkU7QUFPakJDLGVBQU87QUFQVSxLQUFkLEVBUUpULElBUkksQ0FBUDs7QUFVQSxRQUFNVSxNQUFNLGtFQUFBQyxDQUFjWCxJQUFkLENBQVo7QUFDQSxRQUFNWSxlQUFlZCxRQUFRZSxJQUFSLENBQWE7QUFDOUJDLGlCQUFTZCxLQUFLUSxhQURnQjtBQUU5Qk8sa0JBQVUsQ0FBQyxFQUFELEVBQUssRUFBTCxDQUZvQjtBQUc5QkMsb0JBQVksQ0FBQyxFQUFELEVBQUssRUFBTDtBQUhrQixLQUFiLENBQXJCOztBQU1BOzs7O0FBSUEsUUFBSUMsZUFBZSxFQUFuQjs7QUFFQSxRQUFJQyxpQkFBaUIsS0FBckI7O0FBRUEs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eEQsT0FBT3NDLElBQVAsQ0FBWW1CLE1BQVosR0FBcUI7QUFGaEIsYUFBcEI7QUFJSCxTQUxEO0FBTUgsS0FsRUQ7O0FBb0VBakI7QUFDQWtCLGdCQUFZbEIsU0FBWixFQUF1QixLQUF2QjtBQUNILENBdk1EIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuXG5jb25zdCBnZW9saWIgPSByZXF1aXJlKCdnZW9saWInKTtcbmNvbnN0IGxlYWZsZXQgPSByZXF1aXJlKCdsZWFmbGV0Jyk7XG5jb25zdCByaXZldHMgPSByZXF1aXJlKCdyaXZldHMnKTtcblxuaW1wb3J0IGRyYXdfYmFzZV9tYXAgZnJvbSAnLi9iYXNlX21hcCdcbmltcG9ydCB7IEFDVFVBTF9ST1VURV9DT0xPUiB9IGZyb20gJy4vY29uZmlnJ1xuXG4vKipcbiAqIFJlbmRlciB0aGUgbGl2ZSBtYXBcbiAqIEBwYXJhbSBvcHRzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCAob3B0cykgPT4ge1xuXG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB1cGRhdGVfdXJpOiAnL2FwaS9hY2FycycsXG4gICAgICAgIHBpcmVwX3VyaTogJy9hcGkvcGlyZXBzL3tpZH0nLFxuICAgICAgICBwaXJlcF9saW5rX3VyaTogJy9waXJlcHMve2lkfScsXG4gICAgICAgIHBvc2l0aW9uczogbnVsbCxcbiAgICAgICAgcmVuZGVyX2VsZW06ICdtYXAnLFxuICAgICAgICBhaXJjcmFmdF9pY29uOiAnL2Fzc2V0cy9pbWcvYWNhcnMvYWlyY3JhZnQucG5nJyxcbiAgICAgICAgdW5pdHM6ICdubWknLFxuICAgIH0sIG9wdHMpO1xuXG4gICAgY29uc3QgbWFwID0gZHJhd19iYXNlX21hcChvcHRzKTtcbiAgICBjb25zdCBhaXJjcmFmdEljb24gPSBsZWFmbGV0Lmljb24oe1xuICAgICAgICBpY29uVXJsOiBvcHRzLmFpcmNyYWZ0X2ljb24sXG4gICAgICAgIGljb25TaXplOiBbNDIsIDQyXSxcbiAgICAgICAgaWNvbkFuY2hvcjogWzIxLCAyMV0sXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkIHRoZSBtYXJrZXJzXG4gICAgICogQHR5cGUge3t9fVxuICAgICAqL1xuICAgIGxldCBtYXJrZXJzX2xpc3QgPSB7fTtcblxuICAgIGxldCBwYW5uZWRUb0NlbnRlciA9IGZhbHNlO1xuXG4gICAgbGV0IGxheWVyRmxpZ2h0cyA9IG51bGw7XG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0ID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxGbGlnaHRGZWF0dXJlID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxGbGlnaHRMYXllciA9IG51bGw7XG4gICAgbGV0IGxheWVyU2VsQXJyID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxEZXAgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGxlciBmb3IgdHdvLXdheSBiaW5kaW5nc1xuICAgICAqIEB0eXBlIHt7Zm9jdXNNYXJrZXI6IGZvY3VzTWFya2VyfX1cbiAgICAgKi9cbiAgICBjb25zdCBtYXBDb250cm9sbGVyID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogRm9jdXMgb24gYSBzcGVjaWZpYyBtYXJrZXJcbiAgICAgICAgICogQHBhcmFtIGVcbiAgICAgICAgICogQHBhcmFtIG1vZGVsXG4gICAgICAgICAqL1xuICAgICAgICBmb2N1c01hcmtlcjogKGUsIG1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZighKG1vZGVsLnBpcmVwLmlkIGluIG1hcmtlcnNfbGlzdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbWFya2VyIG5vdCBmb3VuZCBpbiBsaXN0Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBtYXJrZXJzX2xpc3RbbW9kZWwucGlyZXAuaWRdO1xuICAgICAgICAgICAgb25GbGlnaHRDbGljayhtYXJrZXJbMF0sIG1hcmtlclsxXSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJfbWFwX3ZpZXcgPSByaXZldHMuYmluZCgkKCcjbWFwLWluZm8tYm94JyksIHtwaXJlcDoge30sIGNvbnRyb2xsZXI6IG1hcENvbnRyb2xsZXJ9KTtcbiAgICBjb25zdCByX3RhYmxlX3ZpZXcgPSByaXZldHMuYmluZCgkKCcjbGl2ZV9mbGlnaHRzJyksIHtwaXJlcHM6IFtdLCBjb250cm9sbGVyOiBtYXBDb250cm9sbGVyfSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgZmxpZ2h0IGlzIGNsaWNrZWQgb24sIHNob3cgdGhlIHBhdGgsIGV0YyBmb3IgdGhhdCBmbGlnaHRcbiAgICAgKiBAcGFyYW0gZmVhdHVyZVxuICAgICAqIEBwYXJhbSBsYXllclxuICAgICAqL1xuICAgIGNvbnN0IG9uRmxpZ2h0Q2xpY2sgPSAoZmVhdHVyZSwgbGF5ZXIpID0+IHtcblxuICAgICAgICBjb25zdCBwaXJlcF91cmkgPSBvcHRzLnBpcmVwX3VyaS5yZXBsYWNlKCd7aWR9JywgZmVhdHVyZS5wcm9wZXJ0aWVzLnBpcmVwX2lkKTtcbiAgICAgICAgY29uc3QgZ2VvanNvbl91cmkgPSBvcHRzLnBpcmVwX3VyaS5yZXBsYWNlKCd7aWR9JywgZmVhdHVyZS5wcm9wZXJ0aWVzLnBpcmVwX2lkKSArIFwiL2FjYXJzL2dlb2pzb25cIjtcblxuICAgICAgICBjb25zdCBwaXJlcF9pbmZvID0gJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogcGlyZXBfdXJpLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLmxvZ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmbGlnaHRfcm91dGUgPSAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBnZW9qc29uX3VyaSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICBlcnJvcjogY29uc29sZS5sb2dcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTG9hZCB1cCB0aGUgUElSRVAgaW5mb1xuICAgICAgICAkLndoZW4oZmxpZ2h0X3JvdXRlKS5kb25lKChydGUpID0+IHtcbiAgICAgICAgICAgIGlmIChsYXllclNlbEZsaWdodCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG1hcC5yZW1vdmVMYXllcihsYXllclNlbEZsaWdodCk7XG4gICAgICAgICAgICAgICAgLy9tYXAucmVtb3ZlTGF5ZXIobGF5ZXJTZWxBcnIpO1xuICAgICAgICAgICAgICAgIC8vbWFwLnJlbW92ZUxheWVyKGxheWVyU2VsRGVwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHQgPSBsZWFmbGV0Lmdlb2Rlc2ljKFtdLCB7XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiA1LFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuOSxcbiAgICAgICAgICAgICAgICBjb2xvcjogQUNUVUFMX1JPVVRFX0NPTE9SLFxuICAgICAgICAgICAgICAgIHdyYXA6IGZhbHNlLFxuICAgICAgICAgICAgfSkuYWRkVG8obWFwKTtcblxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHQuZ2VvSnNvbihydGUubGluZSk7XG4gICAgICAgICAgICBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBmZWF0dXJlO1xuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHRMYXllciA9IGxheWVyO1xuXG4gICAgICAgICAgICAvKmNvbnN0IGRwdEljb24gPSBsZWFmbGV0LmRpdkljb24oe1xuICAgICAgICAgICAgICAgIGh0bWw6ICc8ZGl2IGNsYXNzPVwibWFwLWluZm8tbGFiZWxcIj48aDU+JyArIHJ0ZS5haXJwb3J0cy5kLmljYW8gKyAnPC9oNT48L2Rpdj4nXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGF5ZXJTZWxEZXAgPSBsZWFmbGV0Lm1hcmtlcihbcnRlLmFpcnBvcnRzLmQubGF0LCBydGUuYWlycG9ydHMuZC5sb25dLCB7aWNvbjpkcHRJY29ufSkuYWRkVG8obWFwKTtcbiAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIC8vIENlbnRlciBvbiBpdCwgYnV0IG9ubHkgZG8gaXQgb25jZSwgaW4gY2FzZSB0aGUgbWFwIGlzIG1vdmVkXG4gICAgICAgICAgICBpZighcGFubmVkVG9DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBmaW5kIGNlbnRlclxuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBnZW9saWIuZ2V0Q2VudGVyKFtcbiAgICAgICAgICAgICAgICAgICAge2xhdGl0dWRlOiBydGUuYWlycG9ydHMuYS5sYXQsIGxvbmdpdHVkZTogcnRlLmFpcnBvcnRzLmEubG9ufSxcbiAgICAgICAgICAgICAgICAgICAge2xhdGl0dWRlOiBydGUuYWlycG9ydHMuZC5sYXQsIGxvbmdpdHVkZTogcnRlLmFpcnBvcnRzLmQubG9ufSxcbiAgICAgICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgICAgIC8vbWFwLnBhblRvKHtsYXQ6IGMubGF0aXR1ZGUsIGxuZzogYy5sb25naXR1ZGV9KTtcbiAgICAgICAgICAgICAgICBtYXAucGFuVG8oe2xhdDogcnRlLnBvc2l0aW9uLmxhdCwgbG5nOiBydGUucG9zaXRpb24ubG9ufSk7XG4gICAgICAgICAgICAgICAgcGFubmVkVG9DZW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvL1xuICAgICAgICAvLyBXaGVuIHRoZSBQSVJFUCBpbmZvIGlzIGRvbmUgbG9hZGluZywgc2hvdyB0aGUgYm90dG9tIGJhclxuICAgICAgICAvL1xuICAgICAgICAkLndoZW4ocGlyZXBfaW5mbykuZG9uZShwaXJlcCA9PiB7XG4gICAgICAgICAgICByX21hcF92aWV3LnVwZGF0ZSh7cGlyZXA6cGlyZXAuZGF0YX0pO1xuICAgICAgICAgICAgJCgnI21hcC1pbmZvLWJveCcpLnNob3coKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZU1hcCA9ICgpID0+IHtcblxuICAgICAgICBjb25zb2xlLmxvZygncmVsb2FkaW5nIGZsaWdodHMgZnJvbSBhY2Fycy4uLicpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBSkFYIFVQREFURVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgcGlyZXBfdXJpID0gb3B0cy5waXJlcF91cmkucmVwbGFjZSgne2lkfScsICcnKTtcbiAgICAgICAgbGV0IHBpcmVwcyA9ICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHBpcmVwX3VyaSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICBlcnJvcjogY29uc29sZS5sb2dcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGZsaWdodHMgPSAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBvcHRzLnVwZGF0ZV91cmksXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgICQud2hlbihmbGlnaHRzKS5kb25lKGZsaWdodEdlb0pzb24gPT4ge1xuXG4gICAgICAgICAgICBpZiAobGF5ZXJGbGlnaHRzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGF5ZXJGbGlnaHRzLmNsZWFyTGF5ZXJzKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGF5ZXJGbGlnaHRzID0gbGVhZmxldC5nZW9KU09OKGZsaWdodEdlb0pzb24sIHtcbiAgICAgICAgICAgICAgICBvbkVhY2hGZWF0dXJlOiAoZmVhdHVyZSwgbGF5ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIub24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFubmVkVG9DZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGZlYXR1cmUsIGxheWVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9wdXBfaHRtbCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzICYmIChmZWF0dXJlLnByb3BlcnRpZXMucG9wdXAgIT09ICcnICYmIGZlYXR1cmUucHJvcGVydGllcy5wb3B1cCAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBfaHRtbCArPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5iaW5kUG9wdXAocG9wdXBfaHRtbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gdGhlIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgbWFya2Vyc19saXN0W2ZlYXR1cmUucHJvcGVydGllcy5waXJlcF9pZF0gPSBbZmVhdHVyZSwgbGF5ZXJdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9pbnRUb0xheWVyOiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF0bG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWFmbGV0Lm1hcmtlcihsYXRsb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGFpcmNyYWZ0SWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQW5nbGU6IGZlYXR1cmUucHJvcGVydGllcy5oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxheWVyRmxpZ2h0cy5hZGRUbyhtYXApO1xuXG4gICAgICAgICAgICAvLyBSZWxvYWQgdGhlIGNsaWNrZWQtZmxpZ2h0IGluZm9ybWF0aW9uXG4gICAgICAgICAgICBpZiAobGF5ZXJTZWxGbGlnaHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGxheWVyU2VsRmxpZ2h0RmVhdHVyZSwgbGF5ZXJTZWxGbGlnaHRMYXllcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC53aGVuKHBpcmVwcykuZG9uZShwaXJlcHMgPT4ge1xuICAgICAgICAgICAgcl90YWJsZV92aWV3LnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgcGlyZXBzOiBwaXJlcHMuZGF0YSxcbiAgICAgICAgICAgICAgICBoYXNfZGF0YTogKHBpcmVwcy5kYXRhLmxlbmd0aCA+IDApLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB1cGRhdGVNYXAoKTtcbiAgICBzZXRJbnRlcnZhbCh1cGRhdGVNYXAsIDEwMDAwKVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3Jlc291cmNlcy9qcy9tYXBzL2xpdmVfbWFwLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\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\");\n//\n\nvar geolib = __webpack_require__(\"./node_modules/geolib/dist/geolib.js\");\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\nvar rivets = __webpack_require__(\"./node_modules/rivets/dist/rivets.js\");\n\n\n\n\n/**\n * Render the live map\n * @param opts\n * @private\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n center: [29.98139, -95.33374],\n zoom: 5,\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 /**\n * Hold the markers\n * @type {{}}\n */\n var markers_list = {};\n\n var pannedToCenter = false;\n\n var layerFlights = null;\n var layerSelFlight = null;\n var layerSelFlightFeature = null;\n var layerSelFlightLayer = null;\n var layerSelArr = null;\n var layerSelDep = null;\n\n /**\n * Controller for two-way bindings\n * @type {{focusMarker: focusMarker}}\n */\n var mapController = {\n /**\n * Focus on a specific marker\n * @param e\n * @param model\n */\n focusMarker: function focusMarker(e, model) {\n if (!(model.pirep.id in markers_list)) {\n console.log('marker not found in list');\n return;\n }\n\n var marker = markers_list[model.pirep.id];\n onFlightClick(marker[0], marker[1]);\n }\n };\n\n var r_map_view = rivets.bind($('#map-info-box'), { pirep: {}, controller: mapController });\n var r_table_view = rivets.bind($('#live_flights'), { pireps: [], controller: mapController });\n\n /**\n * When a flight is clicked on, show the path, etc for that flight\n * @param feature\n * @param layer\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 (rte) {\n if (layerSelFlight !== null) {\n map.removeLayer(layerSelFlight);\n //map.removeLayer(layerSelArr);\n //map.removeLayer(layerSelDep);\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(rte.line);\n layerSelFlightFeature = feature;\n layerSelFlightLayer = layer;\n\n /*const dptIcon = leaflet.divIcon({\n html: '' + rte.airports.d.icao + '
'\n });\n layerSelDep = leaflet.marker([rte.airports.d.lat, rte.airports.d.lon], {icon:dptIcon}).addTo(map);\n */\n\n // Center on it, but only do it once, in case the map is moved\n if (!pannedToCenter) {\n // find center\n var c = geolib.getCenter([{ latitude: rte.airports.a.lat, longitude: rte.airports.a.lon }, { latitude: rte.airports.d.lat, longitude: rte.airports.d.lon }]);\n\n //map.panTo({lat: c.latitude, lng: c.longitude});\n map.panTo({ lat: rte.position.lat, lng: rte.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 r_map_view.update({ pirep: pirep.data });\n $('#map-info-box').show();\n });\n };\n\n var updateMap = function updateMap() {\n\n console.log('reloading flights from acars...');\n\n /**\n * AJAX UPDATE\n */\n var pirep_uri = opts.pirep_uri.replace('{id}', '');\n var pireps = $.ajax({\n url: pirep_uri,\n dataType: 'json',\n error: console.log\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 // add to the list\n markers_list[feature.properties.pirep_id] = [feature, layer];\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 $.when(pireps).done(function (pireps) {\n r_table_view.update({\n pireps: pireps.data,\n has_data: pireps.data.length > 0\n });\n });\n };\n\n updateMap();\n setInterval(updateMap, 10000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcz9lN2Y2Il0sIm5hbWVzIjpbImdlb2xpYiIsInJlcXVpcmUiLCJsZWFmbGV0Iiwicml2ZXRzIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsImNlbnRlciIsInpvb20iLCJ1cGRhdGVfdXJpIiwicGlyZXBfdXJpIiwicGlyZXBfbGlua191cmkiLCJwb3NpdGlvbnMiLCJyZW5kZXJfZWxlbSIsImFpcmNyYWZ0X2ljb24iLCJ1bml0cyIsIm1hcCIsImRyYXdfYmFzZV9tYXAiLCJhaXJjcmFmdEljb24iLCJpY29uIiwiaWNvblVybCIsImljb25TaXplIiwiaWNvbkFuY2hvciIsIm1hcmtlcnNfbGlzdCIsInBhbm5lZFRvQ2VudGVyIiwibGF5ZXJGbGlnaHRzIiwibGF5ZXJTZWxGbGlnaHQiLCJsYXllclNlbEZsaWdodEZlYXR1cmUiLCJsYXllclNlbEZsaWdodExheWVyIiwibGF5ZXJTZWxBcnIiLCJsYXllclNlbERlcCIsIm1hcENvbnRyb2xsZXIiLCJmb2N1c01hcmtlciIsImUiLCJtb2RlbCIsInBpcmVwIiwiaWQiLCJjb25zb2xlIiwibG9nIiwibWFya2VyIiwib25GbGlnaHRDbGljayIsInJfbWFwX3ZpZXciLCJiaW5kIiwiJCIsImNvbnRyb2xsZXIiLCJyX3RhYmxlX3ZpZXciLCJwaXJlcHMiLCJmZWF0dXJlIiwibGF5ZXIiLCJyZXBsYWNlIiwicHJvcGVydGllcyIsInBpcmVwX2lkIiwiZ2VvanNvbl91cmkiLCJwaXJlcF9pbmZvIiwiYWpheCIsInVybCIsImRhdGFUeXBlIiwiZXJyb3IiLCJmbGlnaHRfcm91dGUiLCJ3aGVuIiwiZG9uZSIsInJ0ZSIsInJlbW92ZUxheWVyIiwiZ2VvZGVzaWMiLCJ3ZWlnaHQiLCJvcGFjaXR5IiwiY29sb3IiLCJ3cmFwIiwiYWRkVG8iLCJnZW9Kc29uIiwibGluZSIsImMiLCJnZXRDZW50ZXIiLCJsYXRpdHVkZSIsImFpcnBvcnRzIiwiYSIsImxhdCIsImxvbmdpdHVkZSIsImxvbiIsImQiLCJwYW5UbyIsInBvc2l0aW9uIiwibG5nIiwidXBkYXRlIiwiZGF0YSIsInNob3ciLCJ1cGRhdGVNYXAiLCJmbGlnaHRzIiwiY2xlYXJMYXllcnMiLCJnZW9KU09OIiwiZmxpZ2h0R2VvSnNvbiIsIm9uRWFjaEZlYXR1cmUiLCJvbiIsImNsaWNrIiwicG9wdXBfaHRtbCIsInBvcHVwIiwidW5kZWZpbmVkIiwiYmluZFBvcHVwIiwicG9pbnRUb0xheWVyIiwibGF0bG9uIiwicm90YXRpb25BbmdsZSIsImhlYWRpbmciLCJoYXNfZGF0YSIsImxlbmd0aCIsInNldEludGVydmFsIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTs7QUFFQSxJQUFNQSxTQUFTLG1CQUFBQyxDQUFRLHNDQUFSLENBQWY7QUFDQSxJQUFNQyxVQUFVLG1CQUFBRCxDQUFRLDRDQUFSLENBQWhCO0FBQ0EsSUFBTUUsU0FBUyxtQkFBQUYsQ0FBUSxzQ0FBUixDQUFmOztBQUVBO0FBQ0E7O0FBRUE7Ozs7O0FBS0EseURBQWUsVUFBQ0csSUFBRCxFQUFVOztBQUVyQkEsV0FBT0MsT0FBT0MsTUFBUCxDQUFjO0FBQ2pCQyxnQkFBUSxDQUFDLFFBQUQsRUFBVyxDQUFDLFFBQVosQ0FEUztBQUVqQkMsY0FBTSxDQUZXO0FBR2pCQyxvQkFBWSxZQUhLO0FBSWpCQyxtQkFBVyxrQkFKTTtBQUtqQkMsd0JBQWdCLGNBTEM7QUFNakJDLG1CQUFXLElBTk07QUFPakJDLHFCQUFhLEtBUEk7QUFRakJDLHVCQUFlLGdDQVJFO0FBU2pCQyxlQUFPO0FBVFUsS0FBZCxFQVVKWCxJQVZJLENBQVA7O0FBWUEsUUFBTVksTUFBTSxrRUFBQUMsQ0FBY2IsSUFBZCxDQUFaO0FBQ0EsUUFBTWMsZUFBZWhCLFFBQVFpQixJQUFSLENBQWE7QUFDOUJDLGlCQUFTaEIsS0FBS1UsYUFEZ0I7QUFFOUJPLGtCQUFVLENBQUMsRUFBRCxFQUFLLEVBQUwsQ0FGb0I7QUFHOUJDLG9CQUFZLENBQUMsRUFBRCxFQUFLLEVBQUw7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LENBQW9CLGtCQUFVO0FBQzFCZix5QkFBYXNDLE1BQWIsQ0FBb0I7QUFDaEJyQyx3QkFBUUEsT0FBT3NDLElBREM7QUFFaEJrQiwwQkFBV3hELE9BQU9zQyxJQUFQLENBQVltQixNQUFaLEdBQXFCO0FBRmhCLGFBQXBCO0FBSUgsU0FMRDtBQU1ILEtBbEVEOztBQW9FQWpCO0FBQ0FrQixnQkFBWWxCLFNBQVosRUFBdUIsS0FBdkI7QUFDSCxDQXpNRCIsImZpbGUiOiIuL3Jlc291cmNlcy9qcy9tYXBzL2xpdmVfbWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cblxuY29uc3QgZ2VvbGliID0gcmVxdWlyZSgnZ2VvbGliJyk7XG5jb25zdCBsZWFmbGV0ID0gcmVxdWlyZSgnbGVhZmxldCcpO1xuY29uc3Qgcml2ZXRzID0gcmVxdWlyZSgncml2ZXRzJyk7XG5cbmltcG9ydCBkcmF3X2Jhc2VfbWFwIGZyb20gJy4vYmFzZV9tYXAnXG5pbXBvcnQgeyBBQ1RVQUxfUk9VVEVfQ09MT1IgfSBmcm9tICcuL2NvbmZpZydcblxuLyoqXG4gKiBSZW5kZXIgdGhlIGxpdmUgbWFwXG4gKiBAcGFyYW0gb3B0c1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgKG9wdHMpID0+IHtcblxuICAgIG9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgY2VudGVyOiBbMjkuOTgxMzksIC05NS4zMzM3NF0sXG4gICAgICAgIHpvb206IDUsXG4gICAgICAgIHVwZGF0ZV91cmk6ICcvYXBpL2FjYXJzJyxcbiAgICAgICAgcGlyZXBfdXJpOiAnL2FwaS9waXJlcHMve2lkfScsXG4gICAgICAgIHBpcmVwX2xpbmtfdXJpOiAnL3BpcmVwcy97aWR9JyxcbiAgICAgICAgcG9zaXRpb25zOiBudWxsLFxuICAgICAgICByZW5kZXJfZWxlbTogJ21hcCcsXG4gICAgICAgIGFpcmNyYWZ0X2ljb246ICcvYXNzZXRzL2ltZy9hY2Fycy9haXJjcmFmdC5wbmcnLFxuICAgICAgICB1bml0czogJ25taScsXG4gICAgfSwgb3B0cyk7XG5cbiAgICBjb25zdCBtYXAgPSBkcmF3X2Jhc2VfbWFwKG9wdHMpO1xuICAgIGNvbnN0IGFpcmNyYWZ0SWNvbiA9IGxlYWZsZXQuaWNvbih7XG4gICAgICAgIGljb25Vcmw6IG9wdHMuYWlyY3JhZnRfaWNvbixcbiAgICAgICAgaWNvblNpemU6IFs0MiwgNDJdLFxuICAgICAgICBpY29uQW5jaG9yOiBbMjEsIDIxXSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEhvbGQgdGhlIG1hcmtlcnNcbiAgICAgKiBAdHlwZSB7e319XG4gICAgICovXG4gICAgbGV0IG1hcmtlcnNfbGlzdCA9IHt9O1xuXG4gICAgbGV0IHBhbm5lZFRvQ2VudGVyID0gZmFsc2U7XG5cbiAgICBsZXQgbGF5ZXJGbGlnaHRzID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxGbGlnaHQgPSBudWxsO1xuICAgIGxldCBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBudWxsO1xuICAgIGxldCBsYXllclNlbEZsaWdodExheWVyID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxBcnIgPSBudWxsO1xuICAgIGxldCBsYXllclNlbERlcCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sbGVyIGZvciB0d28td2F5IGJpbmRpbmdzXG4gICAgICogQHR5cGUge3tmb2N1c01hcmtlcjogZm9jdXNNYXJrZXJ9fVxuICAgICAqL1xuICAgIGNvbnN0IG1hcENvbnRyb2xsZXIgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb2N1cyBvbiBhIHNwZWNpZmljIG1hcmtlclxuICAgICAgICAgKiBAcGFyYW0gZVxuICAgICAgICAgKiBAcGFyYW0gbW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIGZvY3VzTWFya2VyOiAoZSwgbW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmKCEobW9kZWwucGlyZXAuaWQgaW4gbWFya2Vyc19saXN0KSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXJrZXIgbm90IGZvdW5kIGluIGxpc3QnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IG1hcmtlcnNfbGlzdFttb2RlbC5waXJlcC5pZF07XG4gICAgICAgICAgICBvbkZsaWdodENsaWNrKG1hcmtlclswXSwgbWFya2VyWzFdKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3Qgcl9tYXBfdmlldyA9IHJpdmV0cy5iaW5kKCQoJyNtYXAtaW5mby1ib3gnKSwge3BpcmVwOiB7fSwgY29udHJvbGxlcjogbWFwQ29udHJvbGxlcn0pO1xuICAgIGNvbnN0IHJfdGFibGVfdmlldyA9IHJpdmV0cy5iaW5kKCQoJyNsaXZlX2ZsaWdodHMnKSwge3BpcmVwczogW10sIGNvbnRyb2xsZXI6IG1hcENvbnRyb2xsZXJ9KTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gYSBmbGlnaHQgaXMgY2xpY2tlZCBvbiwgc2hvdyB0aGUgcGF0aCwgZXRjIGZvciB0aGF0IGZsaWdodFxuICAgICAqIEBwYXJhbSBmZWF0dXJlXG4gICAgICogQHBhcmFtIGxheWVyXG4gICAgICovXG4gICAgY29uc3Qgb25GbGlnaHRDbGljayA9IChmZWF0dXJlLCBsYXllcikgPT4ge1xuXG4gICAgICAgIGNvbnN0IHBpcmVwX3VyaSA9IG9wdHMucGlyZXBfdXJpLnJlcGxhY2UoJ3tpZH0nLCBmZWF0dXJlLnByb3BlcnRpZXMucGlyZXBfaWQpO1xuICAgICAgICBjb25zdCBnZW9qc29uX3VyaSA9IG9wdHMucGlyZXBfdXJpLnJlcGxhY2UoJ3tpZH0nLCBmZWF0dXJlLnByb3BlcnRpZXMucGlyZXBfaWQpICsgXCIvYWNhcnMvZ2VvanNvblwiO1xuXG4gICAgICAgIGNvbnN0IHBpcmVwX2luZm8gPSAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBwaXJlcF91cmksXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZsaWdodF9yb3V0ZSA9ICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IGdlb2pzb25fdXJpLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLmxvZ1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBMb2FkIHVwIHRoZSBQSVJFUCBpbmZvXG4gICAgICAgICQud2hlbihmbGlnaHRfcm91dGUpLmRvbmUoKHJ0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxheWVyU2VsRmxpZ2h0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyU2VsRmxpZ2h0KTtcbiAgICAgICAgICAgICAgICAvL21hcC5yZW1vdmVMYXllcihsYXllclNlbEFycik7XG4gICAgICAgICAgICAgICAgLy9tYXAucmVtb3ZlTGF5ZXIobGF5ZXJTZWxEZXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodCA9IGxlYWZsZXQuZ2VvZGVzaWMoW10sIHtcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IDUsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC45LFxuICAgICAgICAgICAgICAgIGNvbG9yOiBBQ1RVQUxfUk9VVEVfQ09MT1IsXG4gICAgICAgICAgICAgICAgd3JhcDogZmFsc2UsXG4gICAgICAgICAgICB9KS5hZGRUbyhtYXApO1xuXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodC5nZW9Kc29uKHJ0ZS5saW5lKTtcbiAgICAgICAgICAgIGxheWVyU2VsRmxpZ2h0RmVhdHVyZSA9IGZlYXR1cmU7XG4gICAgICAgICAgICBsYXllclNlbEZsaWdodExheWVyID0gbGF5ZXI7XG5cbiAgICAgICAgICAgIC8qY29uc3QgZHB0SWNvbiA9IGxlYWZsZXQuZGl2SWNvbih7XG4gICAgICAgICAgICAgICAgaHRtbDogJzxkaXYgY2xhc3M9XCJtYXAtaW5mby1sYWJlbFwiPjxoNT4nICsgcnRlLmFpcnBvcnRzLmQuaWNhbyArICc8L2g1PjwvZGl2PidcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsYXllclNlbERlcCA9IGxlYWZsZXQubWFya2VyKFtydGUuYWlycG9ydHMuZC5sYXQsIHJ0ZS5haXJwb3J0cy5kLmxvbl0sIHtpY29uOmRwdEljb259KS5hZGRUbyhtYXApO1xuICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgLy8gQ2VudGVyIG9uIGl0LCBidXQgb25seSBkbyBpdCBvbmNlLCBpbiBjYXNlIHRoZSBtYXAgaXMgbW92ZWRcbiAgICAgICAgICAgIGlmKCFwYW5uZWRUb0NlbnRlcikge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgY2VudGVyXG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IGdlb2xpYi5nZXRDZW50ZXIoW1xuICAgICAgICAgICAgICAgICAgICB7bGF0aXR1ZGU6IHJ0ZS5haXJwb3J0cy5hLmxhdCwgbG9uZ2l0dWRlOiBydGUuYWlycG9ydHMuYS5sb259LFxuICAgICAgICAgICAgICAgICAgICB7bGF0aXR1ZGU6IHJ0ZS5haXJwb3J0cy5kLmxhdCwgbG9uZ2l0dWRlOiBydGUuYWlycG9ydHMuZC5sb259LFxuICAgICAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICAgICAgLy9tYXAucGFuVG8oe2xhdDogYy5sYXRpdHVkZSwgbG5nOiBjLmxvbmdpdHVkZX0pO1xuICAgICAgICAgICAgICAgIG1hcC5wYW5Ubyh7bGF0OiBydGUucG9zaXRpb24ubGF0LCBsbmc6IHJ0ZS5wb3NpdGlvbi5sb259KTtcbiAgICAgICAgICAgICAgICBwYW5uZWRUb0NlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdoZW4gdGhlIFBJUkVQIGluZm8gaXMgZG9uZSBsb2FkaW5nLCBzaG93IHRoZSBib3R0b20gYmFyXG4gICAgICAgIC8vXG4gICAgICAgICQud2hlbihwaXJlcF9pbmZvKS5kb25lKHBpcmVwID0+IHtcbiAgICAgICAgICAgIHJfbWFwX3ZpZXcudXBkYXRlKHtwaXJlcDpwaXJlcC5kYXRhfSk7XG4gICAgICAgICAgICAkKCcjbWFwLWluZm8tYm94Jykuc2hvdygpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlTWFwID0gKCkgPT4ge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZWxvYWRpbmcgZmxpZ2h0cyBmcm9tIGFjYXJzLi4uJyk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFKQVggVVBEQVRFXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBwaXJlcF91cmkgPSBvcHRzLnBpcmVwX3VyaS5yZXBsYWNlKCd7aWR9JywgJycpO1xuICAgICAgICBsZXQgcGlyZXBzID0gJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogcGlyZXBfdXJpLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLmxvZ1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgZmxpZ2h0cyA9ICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IG9wdHMudXBkYXRlX3VyaSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICBlcnJvcjogY29uc29sZS5sb2dcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC53aGVuKGZsaWdodHMpLmRvbmUoZmxpZ2h0R2VvSnNvbiA9PiB7XG5cbiAgICAgICAgICAgIGlmIChsYXllckZsaWdodHMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsYXllckZsaWdodHMuY2xlYXJMYXllcnMoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXllckZsaWdodHMgPSBsZWFmbGV0Lmdlb0pTT04oZmxpZ2h0R2VvSnNvbiwge1xuICAgICAgICAgICAgICAgIG9uRWFjaEZlYXR1cmU6IChmZWF0dXJlLCBsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsYXllci5vbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5uZWRUb0NlbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmxpZ2h0Q2xpY2soZmVhdHVyZSwgbGF5ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1cF9odG1sID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMgJiYgKGZlYXR1cmUucHJvcGVydGllcy5wb3B1cCAhPT0gJycgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cF9odG1sICs9IGZlYXR1cmUucHJvcGVydGllcy5wb3B1cDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChwb3B1cF9odG1sKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0byB0aGUgbGlzdFxuICAgICAgICAgICAgICAgICAgICBtYXJrZXJzX2xpc3RbZmVhdHVyZS5wcm9wZXJ0aWVzLnBpcmVwX2lkXSA9IFtmZWF0dXJlLCBsYXllcl07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwb2ludFRvTGF5ZXI6IGZ1bmN0aW9uIChmZWF0dXJlLCBsYXRsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWZsZXQubWFya2VyKGxhdGxvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYWlyY3JhZnRJY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25BbmdsZTogZmVhdHVyZS5wcm9wZXJ0aWVzLmhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGF5ZXJGbGlnaHRzLmFkZFRvKG1hcCk7XG5cbiAgICAgICAgICAgIC8vIFJlbG9hZCB0aGUgY2xpY2tlZC1mbGlnaHQgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGlmIChsYXllclNlbEZsaWdodCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG9uRmxpZ2h0Q2xpY2sobGF5ZXJTZWxGbGlnaHRGZWF0dXJlLCBsYXllclNlbEZsaWdodExheWVyKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkLndoZW4ocGlyZXBzKS5kb25lKHBpcmVwcyA9PiB7XG4gICAgICAgICAgICByX3RhYmxlX3ZpZXcudXBkYXRlKHtcbiAgICAgICAgICAgICAgICBwaXJlcHM6IHBpcmVwcy5kYXRhLFxuICAgICAgICAgICAgICAgIGhhc19kYXRhOiAocGlyZXBzLmRhdGEubGVuZ3RoID4gMCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHVwZGF0ZU1hcCgpO1xuICAgIHNldEludGVydmFsKHVwZGF0ZU1hcCwgMTAwMDApXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMiXSwic291cmNlUm9vdCI6IiJ9\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 105a7f41..dda367f4 100644
--- a/public/assets/frontend/js/app.js
+++ b/public/assets/frontend/js/app.js
@@ -368,7 +368,7 @@ eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base_map__ = __webpa
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("//\n\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\n__webpack_require__(\"./node_modules/leaflet-providers/leaflet-providers.js\");\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n render_elem: 'map',\n center: [29.98139, -95.33374],\n zoom: 5,\n maxZoom: 10,\n layers: [],\n set_marker: false,\n providers: ['Esri.WorldStreetMap']\n }, opts);\n\n /*\n let feature_groups = [];\n const openaip_airspace_labels = new leaflet.TileLayer.WMS(\n \"http://{s}.tile.maps.openaip.net/geowebcache/service/wms\", {\n maxZoom: 14,\n minZoom: 12,\n layers: 'openaip_approved_airspaces_labels',\n tileSize: 1024,\n detectRetina: true,\n subdomains: '12',\n format: 'image/png',\n transparent: true\n });\n openaip_airspace_labels.addTo(map);*/\n\n /*const openaip_cached_basemap = new leaflet.TileLayer(\"http://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.png\", {\n maxZoom: 14,\n minZoom: 4,\n tms: true,\n detectRetina: true,\n subdomains: '12',\n format: 'image/png',\n transparent: true\n });\n feature_groups.push(openaip_cached_basemap);\n */\n\n var map = leaflet.map('map', {\n //layers: [openaip_basemap_phys_osm],\n center: opts.center,\n zoom: opts.zoom,\n scrollWheelZoom: false\n });\n\n for (var i in opts.providers) {\n leaflet.tileLayer.provider(opts.providers[i]).addTo(map);\n }\n\n return map;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcz80MzA3Il0sIm5hbWVzIjpbImxlYWZsZXQiLCJyZXF1aXJlIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInJlbmRlcl9lbGVtIiwiY2VudGVyIiwiem9vbSIsIm1heFpvb20iLCJsYXllcnMiLCJzZXRfbWFya2VyIiwicHJvdmlkZXJzIiwibWFwIiwic2Nyb2xsV2hlZWxab29tIiwiaSIsInRpbGVMYXllciIsInByb3ZpZGVyIiwiYWRkVG8iXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLElBQU1BLFVBQVUsbUJBQUFDLENBQVEsNENBQVIsQ0FBaEI7QUFDQSxtQkFBQUEsQ0FBUSx1REFBUjs7QUFFQSx5REFBZSxVQUFDQyxJQUFELEVBQVU7O0FBRXJCQSxXQUFPQyxPQUFPQyxNQUFQLENBQWM7QUFDakJDLHFCQUFhLEtBREk7QUFFakJDLGdCQUFRLENBQUMsUUFBRCxFQUFXLENBQUMsUUFBWixDQUZTO0FBR2pCQyxjQUFNLENBSFc7QUFJakJDLGlCQUFTLEVBSlE7QUFLakJDLGdCQUFRLEVBTFM7QUFNakJDLG9CQUFZLEtBTks7QUFPakJDLG1CQUFXLENBQ1AscUJBRE87QUFQTSxLQUFkLEVBVUpULElBVkksQ0FBUDs7QUFZQTs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBOzs7Ozs7Ozs7Ozs7QUFhQSxRQUFJVSxNQUFNWixRQUFRWSxHQUFSLENBQVksS0FBWixFQUFtQjtBQUN6QjtBQUNBTixnQkFBUUosS0FBS0ksTUFGWTtBQUd6QkMsY0FBTUwsS0FBS0ssSUFIYztBQUl6Qk0seUJBQWlCO0FBSlEsS0FBbkIsQ0FBVjs7QUFPQSxTQUFJLElBQU1DLENBQVYsSUFBZVosS0FBS1MsU0FBcEIsRUFBK0I7QUFDM0JYLGdCQUFRZSxTQUFSLENBQWtCQyxRQUFsQixDQUEyQmQsS0FBS1MsU0FBTCxDQUFlRyxDQUFmLENBQTNCLEVBQThDRyxLQUE5QyxDQUFvREwsR0FBcEQ7QUFDSDs7QUFFRCxXQUFPQSxHQUFQO0FBQ0gsQ0F2REQiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG5cbmNvbnN0IGxlYWZsZXQgPSByZXF1aXJlKCdsZWFmbGV0Jyk7XG5yZXF1aXJlKCdsZWFmbGV0LXByb3ZpZGVycycpO1xuXG5leHBvcnQgZGVmYXVsdCAob3B0cykgPT4ge1xuXG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICByZW5kZXJfZWxlbTogJ21hcCcsXG4gICAgICAgIGNlbnRlcjogWzI5Ljk4MTM5LCAtOTUuMzMzNzRdLFxuICAgICAgICB6b29tOiA1LFxuICAgICAgICBtYXhab29tOiAxMCxcbiAgICAgICAgbGF5ZXJzOiBbXSxcbiAgICAgICAgc2V0X21hcmtlcjogZmFsc2UsXG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgJ0VzcmkuV29ybGRTdHJlZXRNYXAnLFxuICAgICAgICBdLFxuICAgIH0sIG9wdHMpO1xuXG4gICAgLypcbiAgICBsZXQgZmVhdHVyZV9ncm91cHMgPSBbXTtcbiAgICBjb25zdCBvcGVuYWlwX2FpcnNwYWNlX2xhYmVscyA9IG5ldyBsZWFmbGV0LlRpbGVMYXllci5XTVMoXG4gICAgICAgIFwiaHR0cDovL3tzfS50aWxlLm1hcHMub3BlbmFpcC5uZXQvZ2Vvd2ViY2FjaGUvc2VydmljZS93bXNcIiwge1xuICAgICAgICAgICAgbWF4Wm9vbTogMTQsXG4gICAgICAgICAgICBtaW5ab29tOiAxMixcbiAgICAgICAgICAgIGxheWVyczogJ29wZW5haXBfYXBwcm92ZWRfYWlyc3BhY2VzX2xhYmVscycsXG4gICAgICAgICAgICB0aWxlU2l6ZTogMTAyNCxcbiAgICAgICAgICAgIGRldGVjdFJldGluYTogdHJ1ZSxcbiAgICAgICAgICAgIHN1YmRvbWFpbnM6ICcxMicsXG4gICAgICAgICAgICBmb3JtYXQ6ICdpbWFnZS9wbmcnLFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICBvcGVuYWlwX2FpcnNwYWNlX2xhYmVscy5hZGRUbyhtYXApOyovXG5cbiAgICAvKmNvbnN0IG9wZW5haXBfY2FjaGVkX2Jhc2VtYXAgPSBuZXcgbGVhZmxldC5UaWxlTGF5ZXIoXCJodHRwOi8ve3N9LnRpbGUubWFwcy5vcGVuYWlwLm5ldC9nZW93ZWJjYWNoZS9zZXJ2aWNlL3Rtcy8xLjAuMC9vcGVuYWlwX2Jhc2VtYXBARVBTRyUzQTkwMDkxM0Bwbmcve3p9L3t4fS97eX0ucG5nXCIsIHtcbiAgICAgICAgbWF4Wm9vbTogMTQsXG4gICAgICAgIG1pblpvb206IDQsXG4gICAgICAgIHRtczogdHJ1ZSxcbiAgICAgICAgZGV0ZWN0UmV0aW5hOiB0cnVlLFxuICAgICAgICBzdWJkb21haW5zOiAnMTInLFxuICAgICAgICBmb3JtYXQ6ICdpbWFnZS9wbmcnLFxuICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZmVhdHVyZV9ncm91cHMucHVzaChvcGVuYWlwX2NhY2hlZF9iYXNlbWFwKTtcbiAgICAqL1xuXG4gICAgbGV0IG1hcCA9IGxlYWZsZXQubWFwKCdtYXAnLCB7XG4gICAgICAgIC8vbGF5ZXJzOiBbb3BlbmFpcF9iYXNlbWFwX3BoeXNfb3NtXSxcbiAgICAgICAgY2VudGVyOiBvcHRzLmNlbnRlcixcbiAgICAgICAgem9vbTogb3B0cy56b29tLFxuICAgICAgICBzY3JvbGxXaGVlbFpvb206IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgZm9yKGNvbnN0IGkgaW4gb3B0cy5wcm92aWRlcnMpIHtcbiAgICAgICAgbGVhZmxldC50aWxlTGF5ZXIucHJvdmlkZXIob3B0cy5wcm92aWRlcnNbaV0pLmFkZFRvKG1hcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/maps/base_map.js\n");
+eval("//\n\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\n__webpack_require__(\"./node_modules/leaflet-providers/leaflet-providers.js\");\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n render_elem: 'map',\n center: [29.98139, -95.33374],\n zoom: 5,\n maxZoom: 10,\n layers: [],\n set_marker: false,\n providers: ['Esri.WorldStreetMap'],\n tile_layers: []\n }, opts);\n\n /*\n let feature_groups = [];\n const openaip_airspace_labels = new leaflet.TileLayer.WMS(\n \"http://{s}.tile.maps.openaip.net/geowebcache/service/wms\", {\n maxZoom: 14,\n minZoom: 12,\n layers: 'openaip_approved_airspaces_labels',\n tileSize: 1024,\n detectRetina: true,\n subdomains: '12',\n format: 'image/png',\n transparent: true\n });\n openaip_airspace_labels.addTo(map);*/\n\n /*const openaip_cached_basemap = new leaflet.TileLayer(\"http://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.png\", {\n maxZoom: 14,\n minZoom: 4,\n tms: true,\n detectRetina: true,\n subdomains: '12',\n format: 'image/png',\n transparent: true\n });\n feature_groups.push(openaip_cached_basemap);\n */\n\n var map = leaflet.map('map', {\n //layers: [openaip_basemap_phys_osm],\n center: opts.center,\n zoom: opts.zoom,\n scrollWheelZoom: false\n });\n\n for (var i in opts.providers) {\n leaflet.tileLayer.provider(opts.providers[i]).addTo(map);\n }\n\n return map;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcz80MzA3Il0sIm5hbWVzIjpbImxlYWZsZXQiLCJyZXF1aXJlIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInJlbmRlcl9lbGVtIiwiY2VudGVyIiwiem9vbSIsIm1heFpvb20iLCJsYXllcnMiLCJzZXRfbWFya2VyIiwicHJvdmlkZXJzIiwidGlsZV9sYXllcnMiLCJtYXAiLCJzY3JvbGxXaGVlbFpvb20iLCJpIiwidGlsZUxheWVyIiwicHJvdmlkZXIiLCJhZGRUbyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsSUFBTUEsVUFBVSxtQkFBQUMsQ0FBUSw0Q0FBUixDQUFoQjtBQUNBLG1CQUFBQSxDQUFRLHVEQUFSOztBQUVBLHlEQUFlLFVBQUNDLElBQUQsRUFBVTs7QUFFckJBLFdBQU9DLE9BQU9DLE1BQVAsQ0FBYztBQUNqQkMscUJBQWEsS0FESTtBQUVqQkMsZ0JBQVEsQ0FBQyxRQUFELEVBQVcsQ0FBQyxRQUFaLENBRlM7QUFHakJDLGNBQU0sQ0FIVztBQUlqQkMsaUJBQVMsRUFKUTtBQUtqQkMsZ0JBQVEsRUFMUztBQU1qQkMsb0JBQVksS0FOSztBQU9qQkMsbUJBQVcsQ0FDUCxxQkFETyxDQVBNO0FBVWpCQyxxQkFBYTtBQVZJLEtBQWQsRUFXSlYsSUFYSSxDQUFQOztBQWFBOzs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7Ozs7Ozs7Ozs7OztBQWFBLFFBQUlXLE1BQU1iLFFBQVFhLEdBQVIsQ0FBWSxLQUFaLEVBQW1CO0FBQ3pCO0FBQ0FQLGdCQUFRSixLQUFLSSxNQUZZO0FBR3pCQyxjQUFNTCxLQUFLSyxJQUhjO0FBSXpCTyx5QkFBaUI7QUFKUSxLQUFuQixDQUFWOztBQU9BLFNBQUksSUFBTUMsQ0FBVixJQUFlYixLQUFLUyxTQUFwQixFQUErQjtBQUMzQlgsZ0JBQVFnQixTQUFSLENBQWtCQyxRQUFsQixDQUEyQmYsS0FBS1MsU0FBTCxDQUFlSSxDQUFmLENBQTNCLEVBQThDRyxLQUE5QyxDQUFvREwsR0FBcEQ7QUFDSDs7QUFFRCxXQUFPQSxHQUFQO0FBQ0gsQ0F4REQiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbWFwcy9iYXNlX21hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG5cbmNvbnN0IGxlYWZsZXQgPSByZXF1aXJlKCdsZWFmbGV0Jyk7XG5yZXF1aXJlKCdsZWFmbGV0LXByb3ZpZGVycycpO1xuXG5leHBvcnQgZGVmYXVsdCAob3B0cykgPT4ge1xuXG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICByZW5kZXJfZWxlbTogJ21hcCcsXG4gICAgICAgIGNlbnRlcjogWzI5Ljk4MTM5LCAtOTUuMzMzNzRdLFxuICAgICAgICB6b29tOiA1LFxuICAgICAgICBtYXhab29tOiAxMCxcbiAgICAgICAgbGF5ZXJzOiBbXSxcbiAgICAgICAgc2V0X21hcmtlcjogZmFsc2UsXG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgJ0VzcmkuV29ybGRTdHJlZXRNYXAnLFxuICAgICAgICBdLFxuICAgICAgICB0aWxlX2xheWVyczogW10sXG4gICAgfSwgb3B0cyk7XG5cbiAgICAvKlxuICAgIGxldCBmZWF0dXJlX2dyb3VwcyA9IFtdO1xuICAgIGNvbnN0IG9wZW5haXBfYWlyc3BhY2VfbGFiZWxzID0gbmV3IGxlYWZsZXQuVGlsZUxheWVyLldNUyhcbiAgICAgICAgXCJodHRwOi8ve3N9LnRpbGUubWFwcy5vcGVuYWlwLm5ldC9nZW93ZWJjYWNoZS9zZXJ2aWNlL3dtc1wiLCB7XG4gICAgICAgICAgICBtYXhab29tOiAxNCxcbiAgICAgICAgICAgIG1pblpvb206IDEyLFxuICAgICAgICAgICAgbGF5ZXJzOiAnb3BlbmFpcF9hcHByb3ZlZF9haXJzcGFjZXNfbGFiZWxzJyxcbiAgICAgICAgICAgIHRpbGVTaXplOiAxMDI0LFxuICAgICAgICAgICAgZGV0ZWN0UmV0aW5hOiB0cnVlLFxuICAgICAgICAgICAgc3ViZG9tYWluczogJzEyJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgIG9wZW5haXBfYWlyc3BhY2VfbGFiZWxzLmFkZFRvKG1hcCk7Ki9cblxuICAgIC8qY29uc3Qgb3BlbmFpcF9jYWNoZWRfYmFzZW1hcCA9IG5ldyBsZWFmbGV0LlRpbGVMYXllcihcImh0dHA6Ly97c30udGlsZS5tYXBzLm9wZW5haXAubmV0L2dlb3dlYmNhY2hlL3NlcnZpY2UvdG1zLzEuMC4wL29wZW5haXBfYmFzZW1hcEBFUFNHJTNBOTAwOTEzQHBuZy97en0ve3h9L3t5fS5wbmdcIiwge1xuICAgICAgICBtYXhab29tOiAxNCxcbiAgICAgICAgbWluWm9vbTogNCxcbiAgICAgICAgdG1zOiB0cnVlLFxuICAgICAgICBkZXRlY3RSZXRpbmE6IHRydWUsXG4gICAgICAgIHN1YmRvbWFpbnM6ICcxMicsXG4gICAgICAgIGZvcm1hdDogJ2ltYWdlL3BuZycsXG4gICAgICAgIHRyYW5zcGFyZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICBmZWF0dXJlX2dyb3Vwcy5wdXNoKG9wZW5haXBfY2FjaGVkX2Jhc2VtYXApO1xuICAgICovXG5cbiAgICBsZXQgbWFwID0gbGVhZmxldC5tYXAoJ21hcCcsIHtcbiAgICAgICAgLy9sYXllcnM6IFtvcGVuYWlwX2Jhc2VtYXBfcGh5c19vc21dLFxuICAgICAgICBjZW50ZXI6IG9wdHMuY2VudGVyLFxuICAgICAgICB6b29tOiBvcHRzLnpvb20sXG4gICAgICAgIHNjcm9sbFdoZWVsWm9vbTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBmb3IoY29uc3QgaSBpbiBvcHRzLnByb3ZpZGVycykge1xuICAgICAgICBsZWFmbGV0LnRpbGVMYXllci5wcm92aWRlcihvcHRzLnByb3ZpZGVyc1tpXSkuYWRkVG8obWFwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3Jlc291cmNlcy9qcy9tYXBzL2Jhc2VfbWFwLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/maps/base_map.js\n");
/***/ }),
@@ -400,7 +400,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\");\n//\n\nvar geolib = __webpack_require__(\"./node_modules/geolib/dist/geolib.js\");\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\nvar rivets = __webpack_require__(\"./node_modules/rivets/dist/rivets.js\");\n\n\n\n\n/**\n * Render the live map\n * @param opts\n * @private\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 /**\n * Hold the markers\n * @type {{}}\n */\n var markers_list = {};\n\n var pannedToCenter = false;\n\n var layerFlights = null;\n var layerSelFlight = null;\n var layerSelFlightFeature = null;\n var layerSelFlightLayer = null;\n var layerSelArr = null;\n var layerSelDep = null;\n\n /**\n * Controller for two-way bindings\n * @type {{focusMarker: focusMarker}}\n */\n var mapController = {\n /**\n * Focus on a specific marker\n * @param e\n * @param model\n */\n focusMarker: function focusMarker(e, model) {\n if (!(model.pirep.id in markers_list)) {\n console.log('marker not found in list');\n return;\n }\n\n var marker = markers_list[model.pirep.id];\n onFlightClick(marker[0], marker[1]);\n }\n };\n\n var r_map_view = rivets.bind($('#map-info-box'), { pirep: {}, controller: mapController });\n var r_table_view = rivets.bind($('#live_flights'), { pireps: [], controller: mapController });\n\n /**\n * When a flight is clicked on, show the path, etc for that flight\n * @param feature\n * @param layer\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 (rte) {\n if (layerSelFlight !== null) {\n map.removeLayer(layerSelFlight);\n //map.removeLayer(layerSelArr);\n //map.removeLayer(layerSelDep);\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(rte.line);\n layerSelFlightFeature = feature;\n layerSelFlightLayer = layer;\n\n /*const dptIcon = leaflet.divIcon({\n html: '' + rte.airports.d.icao + '
'\n });\n layerSelDep = leaflet.marker([rte.airports.d.lat, rte.airports.d.lon], {icon:dptIcon}).addTo(map);\n */\n\n // Center on it, but only do it once, in case the map is moved\n if (!pannedToCenter) {\n // find center\n var c = geolib.getCenter([{ latitude: rte.airports.a.lat, longitude: rte.airports.a.lon }, { latitude: rte.airports.d.lat, longitude: rte.airports.d.lon }]);\n\n //map.panTo({lat: c.latitude, lng: c.longitude});\n map.panTo({ lat: rte.position.lat, lng: rte.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 r_map_view.update({ pirep: pirep.data });\n $('#map-info-box').show();\n });\n };\n\n var updateMap = function updateMap() {\n\n console.log('reloading flights from acars...');\n\n /**\n * AJAX UPDATE\n */\n var pirep_uri = opts.pirep_uri.replace('{id}', '');\n var pireps = $.ajax({\n url: pirep_uri,\n dataType: 'json',\n error: console.log\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 // add to the list\n markers_list[feature.properties.pirep_id] = [feature, layer];\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 $.when(pireps).done(function (pireps) {\n r_table_view.update({\n pireps: pireps.data,\n has_data: pireps.data.length > 0\n });\n });\n };\n\n updateMap();\n setInterval(updateMap, 10000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcz9lN2Y2Il0sIm5hbWVzIjpbImdlb2xpYiIsInJlcXVpcmUiLCJsZWFmbGV0Iiwicml2ZXRzIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsInVwZGF0ZV91cmkiLCJwaXJlcF91cmkiLCJwaXJlcF9saW5rX3VyaSIsInBvc2l0aW9ucyIsInJlbmRlcl9lbGVtIiwiYWlyY3JhZnRfaWNvbiIsInVuaXRzIiwibWFwIiwiZHJhd19iYXNlX21hcCIsImFpcmNyYWZ0SWNvbiIsImljb24iLCJpY29uVXJsIiwiaWNvblNpemUiLCJpY29uQW5jaG9yIiwibWFya2Vyc19saXN0IiwicGFubmVkVG9DZW50ZXIiLCJsYXllckZsaWdodHMiLCJsYXllclNlbEZsaWdodCIsImxheWVyU2VsRmxpZ2h0RmVhdHVyZSIsImxheWVyU2VsRmxpZ2h0TGF5ZXIiLCJsYXllclNlbEFyciIsImxheWVyU2VsRGVwIiwibWFwQ29udHJvbGxlciIsImZvY3VzTWFya2VyIiwiZSIsIm1vZGVsIiwicGlyZXAiLCJpZCIsImNvbnNvbGUiLCJsb2ciLCJtYXJrZXIiLCJvbkZsaWdodENsaWNrIiwicl9tYXBfdmlldyIsImJpbmQiLCIkIiwiY29udHJvbGxlciIsInJfdGFibGVfdmlldyIsInBpcmVwcyIsImZlYXR1cmUiLCJsYXllciIsInJlcGxhY2UiLCJwcm9wZXJ0aWVzIiwicGlyZXBfaWQiLCJnZW9qc29uX3VyaSIsInBpcmVwX2luZm8iLCJhamF4IiwidXJsIiwiZGF0YVR5cGUiLCJlcnJvciIsImZsaWdodF9yb3V0ZSIsIndoZW4iLCJkb25lIiwicnRlIiwicmVtb3ZlTGF5ZXIiLCJnZW9kZXNpYyIsIndlaWdodCIsIm9wYWNpdHkiLCJjb2xvciIsIndyYXAiLCJhZGRUbyIsImdlb0pzb24iLCJsaW5lIiwiYyIsImdldENlbnRlciIsImxhdGl0dWRlIiwiYWlycG9ydHMiLCJhIiwibGF0IiwibG9uZ2l0dWRlIiwibG9uIiwiZCIsInBhblRvIiwicG9zaXRpb24iLCJsbmciLCJ1cGRhdGUiLCJkYXRhIiwic2hvdyIsInVwZGF0ZU1hcCIsImZsaWdodHMiLCJjbGVhckxheWVycyIsImdlb0pTT04iLCJmbGlnaHRHZW9Kc29uIiwib25FYWNoRmVhdHVyZSIsIm9uIiwiY2xpY2siLCJwb3B1cF9odG1sIiwicG9wdXAiLCJ1bmRlZmluZWQiLCJiaW5kUG9wdXAiLCJwb2ludFRvTGF5ZXIiLCJsYXRsb24iLCJyb3RhdGlvbkFuZ2xlIiwiaGVhZGluZyIsImhhc19kYXRhIiwibGVuZ3RoIiwic2V0SW50ZXJ2YWwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBOztBQUVBLElBQU1BLFNBQVMsbUJBQUFDLENBQVEsc0NBQVIsQ0FBZjtBQUNBLElBQU1DLFVBQVUsbUJBQUFELENBQVEsNENBQVIsQ0FBaEI7QUFDQSxJQUFNRSxTQUFTLG1CQUFBRixDQUFRLHNDQUFSLENBQWY7O0FBRUE7QUFDQTs7QUFFQTs7Ozs7QUFLQSx5REFBZSxVQUFDRyxJQUFELEVBQVU7O0FBRXJCQSxXQUFPQyxPQUFPQyxNQUFQLENBQWM7QUFDakJDLG9CQUFZLFlBREs7QUFFakJDLG1CQUFXLGtCQUZNO0FBR2pCQyx3QkFBZ0IsY0FIQztBQUlqQkMsbUJBQVcsSUFKTTtBQUtqQkMscUJBQWEsS0FMSTtBQU1qQkMsdUJBQWUsZ0NBTkU7QUFPakJDLGVBQU87QUFQVSxLQUFkLEVBUUpULElBUkksQ0FBUDs7QUFVQSxRQUFNVSxNQUFNLGtFQUFBQyxDQUFjWCxJQUFkLENBQVo7QUFDQSxRQUFNWSxlQUFlZCxRQUFRZSxJQUFSLENBQWE7QUFDOUJDLGlCQUFTZCxLQUFLUSxhQURnQjtBQUU5Qk8sa0JBQVUsQ0FBQyxFQUFELEVBQUssRUFBTCxDQUZvQjtBQUc5QkMsb0JBQVksQ0FBQyxFQUFELEVBQUssRUFBTDtBQUhrQixLQUFiLENBQXJCOztBQU1BOzs7O0FBSUEsUUFBSUMsZUFBZSxFQUFuQjs7QUFFQSxRQUFJQyxpQkFBaUIsS0FBckI7O0FBRUEs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eEQsT0FBT3NDLElBQVAsQ0FBWW1CLE1BQVosR0FBcUI7QUFGaEIsYUFBcEI7QUFJSCxTQUxEO0FBTUgsS0FsRUQ7O0FBb0VBakI7QUFDQWtCLGdCQUFZbEIsU0FBWixFQUF1QixLQUF2QjtBQUNILENBdk1EIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuXG5jb25zdCBnZW9saWIgPSByZXF1aXJlKCdnZW9saWInKTtcbmNvbnN0IGxlYWZsZXQgPSByZXF1aXJlKCdsZWFmbGV0Jyk7XG5jb25zdCByaXZldHMgPSByZXF1aXJlKCdyaXZldHMnKTtcblxuaW1wb3J0IGRyYXdfYmFzZV9tYXAgZnJvbSAnLi9iYXNlX21hcCdcbmltcG9ydCB7IEFDVFVBTF9ST1VURV9DT0xPUiB9IGZyb20gJy4vY29uZmlnJ1xuXG4vKipcbiAqIFJlbmRlciB0aGUgbGl2ZSBtYXBcbiAqIEBwYXJhbSBvcHRzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCAob3B0cykgPT4ge1xuXG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB1cGRhdGVfdXJpOiAnL2FwaS9hY2FycycsXG4gICAgICAgIHBpcmVwX3VyaTogJy9hcGkvcGlyZXBzL3tpZH0nLFxuICAgICAgICBwaXJlcF9saW5rX3VyaTogJy9waXJlcHMve2lkfScsXG4gICAgICAgIHBvc2l0aW9uczogbnVsbCxcbiAgICAgICAgcmVuZGVyX2VsZW06ICdtYXAnLFxuICAgICAgICBhaXJjcmFmdF9pY29uOiAnL2Fzc2V0cy9pbWcvYWNhcnMvYWlyY3JhZnQucG5nJyxcbiAgICAgICAgdW5pdHM6ICdubWknLFxuICAgIH0sIG9wdHMpO1xuXG4gICAgY29uc3QgbWFwID0gZHJhd19iYXNlX21hcChvcHRzKTtcbiAgICBjb25zdCBhaXJjcmFmdEljb24gPSBsZWFmbGV0Lmljb24oe1xuICAgICAgICBpY29uVXJsOiBvcHRzLmFpcmNyYWZ0X2ljb24sXG4gICAgICAgIGljb25TaXplOiBbNDIsIDQyXSxcbiAgICAgICAgaWNvbkFuY2hvcjogWzIxLCAyMV0sXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkIHRoZSBtYXJrZXJzXG4gICAgICogQHR5cGUge3t9fVxuICAgICAqL1xuICAgIGxldCBtYXJrZXJzX2xpc3QgPSB7fTtcblxuICAgIGxldCBwYW5uZWRUb0NlbnRlciA9IGZhbHNlO1xuXG4gICAgbGV0IGxheWVyRmxpZ2h0cyA9IG51bGw7XG4gICAgbGV0IGxheWVyU2VsRmxpZ2h0ID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxGbGlnaHRGZWF0dXJlID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxGbGlnaHRMYXllciA9IG51bGw7XG4gICAgbGV0IGxheWVyU2VsQXJyID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxEZXAgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGxlciBmb3IgdHdvLXdheSBiaW5kaW5nc1xuICAgICAqIEB0eXBlIHt7Zm9jdXNNYXJrZXI6IGZvY3VzTWFya2VyfX1cbiAgICAgKi9cbiAgICBjb25zdCBtYXBDb250cm9sbGVyID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogRm9jdXMgb24gYSBzcGVjaWZpYyBtYXJrZXJcbiAgICAgICAgICogQHBhcmFtIGVcbiAgICAgICAgICogQHBhcmFtIG1vZGVsXG4gICAgICAgICAqL1xuICAgICAgICBmb2N1c01hcmtlcjogKGUsIG1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZighKG1vZGVsLnBpcmVwLmlkIGluIG1hcmtlcnNfbGlzdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbWFya2VyIG5vdCBmb3VuZCBpbiBsaXN0Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBtYXJrZXJzX2xpc3RbbW9kZWwucGlyZXAuaWRdO1xuICAgICAgICAgICAgb25GbGlnaHRDbGljayhtYXJrZXJbMF0sIG1hcmtlclsxXSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJfbWFwX3ZpZXcgPSByaXZldHMuYmluZCgkKCcjbWFwLWluZm8tYm94JyksIHtwaXJlcDoge30sIGNvbnRyb2xsZXI6IG1hcENvbnRyb2xsZXJ9KTtcbiAgICBjb25zdCByX3RhYmxlX3ZpZXcgPSByaXZldHMuYmluZCgkKCcjbGl2ZV9mbGlnaHRzJyksIHtwaXJlcHM6IFtdLCBjb250cm9sbGVyOiBtYXBDb250cm9sbGVyfSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgZmxpZ2h0IGlzIGNsaWNrZWQgb24sIHNob3cgdGhlIHBhdGgsIGV0YyBmb3IgdGhhdCBmbGlnaHRcbiAgICAgKiBAcGFyYW0gZmVhdHVyZVxuICAgICAqIEBwYXJhbSBsYXllclxuICAgICAqL1xuICAgIGNvbnN0IG9uRmxpZ2h0Q2xpY2sgPSAoZmVhdHVyZSwgbGF5ZXIpID0+IHtcblxuICAgICAgICBjb25zdCBwaXJlcF91cmkgPSBvcHRzLnBpcmVwX3VyaS5yZXBsYWNlKCd7aWR9JywgZmVhdHVyZS5wcm9wZXJ0aWVzLnBpcmVwX2lkKTtcbiAgICAgICAgY29uc3QgZ2VvanNvbl91cmkgPSBvcHRzLnBpcmVwX3VyaS5yZXBsYWNlKCd7aWR9JywgZmVhdHVyZS5wcm9wZXJ0aWVzLnBpcmVwX2lkKSArIFwiL2FjYXJzL2dlb2pzb25cIjtcblxuICAgICAgICBjb25zdCBwaXJlcF9pbmZvID0gJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogcGlyZXBfdXJpLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLmxvZ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmbGlnaHRfcm91dGUgPSAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBnZW9qc29uX3VyaSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICBlcnJvcjogY29uc29sZS5sb2dcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTG9hZCB1cCB0aGUgUElSRVAgaW5mb1xuICAgICAgICAkLndoZW4oZmxpZ2h0X3JvdXRlKS5kb25lKChydGUpID0+IHtcbiAgICAgICAgICAgIGlmIChsYXllclNlbEZsaWdodCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG1hcC5yZW1vdmVMYXllcihsYXllclNlbEZsaWdodCk7XG4gICAgICAgICAgICAgICAgLy9tYXAucmVtb3ZlTGF5ZXIobGF5ZXJTZWxBcnIpO1xuICAgICAgICAgICAgICAgIC8vbWFwLnJlbW92ZUxheWVyKGxheWVyU2VsRGVwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHQgPSBsZWFmbGV0Lmdlb2Rlc2ljKFtdLCB7XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiA1LFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuOSxcbiAgICAgICAgICAgICAgICBjb2xvcjogQUNUVUFMX1JPVVRFX0NPTE9SLFxuICAgICAgICAgICAgICAgIHdyYXA6IGZhbHNlLFxuICAgICAgICAgICAgfSkuYWRkVG8obWFwKTtcblxuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHQuZ2VvSnNvbihydGUubGluZSk7XG4gICAgICAgICAgICBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBmZWF0dXJlO1xuICAgICAgICAgICAgbGF5ZXJTZWxGbGlnaHRMYXllciA9IGxheWVyO1xuXG4gICAgICAgICAgICAvKmNvbnN0IGRwdEljb24gPSBsZWFmbGV0LmRpdkljb24oe1xuICAgICAgICAgICAgICAgIGh0bWw6ICc8ZGl2IGNsYXNzPVwibWFwLWluZm8tbGFiZWxcIj48aDU+JyArIHJ0ZS5haXJwb3J0cy5kLmljYW8gKyAnPC9oNT48L2Rpdj4nXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGF5ZXJTZWxEZXAgPSBsZWFmbGV0Lm1hcmtlcihbcnRlLmFpcnBvcnRzLmQubGF0LCBydGUuYWlycG9ydHMuZC5sb25dLCB7aWNvbjpkcHRJY29ufSkuYWRkVG8obWFwKTtcbiAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIC8vIENlbnRlciBvbiBpdCwgYnV0IG9ubHkgZG8gaXQgb25jZSwgaW4gY2FzZSB0aGUgbWFwIGlzIG1vdmVkXG4gICAgICAgICAgICBpZighcGFubmVkVG9DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBmaW5kIGNlbnRlclxuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBnZW9saWIuZ2V0Q2VudGVyKFtcbiAgICAgICAgICAgICAgICAgICAge2xhdGl0dWRlOiBydGUuYWlycG9ydHMuYS5sYXQsIGxvbmdpdHVkZTogcnRlLmFpcnBvcnRzLmEubG9ufSxcbiAgICAgICAgICAgICAgICAgICAge2xhdGl0dWRlOiBydGUuYWlycG9ydHMuZC5sYXQsIGxvbmdpdHVkZTogcnRlLmFpcnBvcnRzLmQubG9ufSxcbiAgICAgICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgICAgIC8vbWFwLnBhblRvKHtsYXQ6IGMubGF0aXR1ZGUsIGxuZzogYy5sb25naXR1ZGV9KTtcbiAgICAgICAgICAgICAgICBtYXAucGFuVG8oe2xhdDogcnRlLnBvc2l0aW9uLmxhdCwgbG5nOiBydGUucG9zaXRpb24ubG9ufSk7XG4gICAgICAgICAgICAgICAgcGFubmVkVG9DZW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvL1xuICAgICAgICAvLyBXaGVuIHRoZSBQSVJFUCBpbmZvIGlzIGRvbmUgbG9hZGluZywgc2hvdyB0aGUgYm90dG9tIGJhclxuICAgICAgICAvL1xuICAgICAgICAkLndoZW4ocGlyZXBfaW5mbykuZG9uZShwaXJlcCA9PiB7XG4gICAgICAgICAgICByX21hcF92aWV3LnVwZGF0ZSh7cGlyZXA6cGlyZXAuZGF0YX0pO1xuICAgICAgICAgICAgJCgnI21hcC1pbmZvLWJveCcpLnNob3coKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZU1hcCA9ICgpID0+IHtcblxuICAgICAgICBjb25zb2xlLmxvZygncmVsb2FkaW5nIGZsaWdodHMgZnJvbSBhY2Fycy4uLicpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBSkFYIFVQREFURVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgcGlyZXBfdXJpID0gb3B0cy5waXJlcF91cmkucmVwbGFjZSgne2lkfScsICcnKTtcbiAgICAgICAgbGV0IHBpcmVwcyA9ICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHBpcmVwX3VyaSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICBlcnJvcjogY29uc29sZS5sb2dcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGZsaWdodHMgPSAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBvcHRzLnVwZGF0ZV91cmksXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgICQud2hlbihmbGlnaHRzKS5kb25lKGZsaWdodEdlb0pzb24gPT4ge1xuXG4gICAgICAgICAgICBpZiAobGF5ZXJGbGlnaHRzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGF5ZXJGbGlnaHRzLmNsZWFyTGF5ZXJzKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGF5ZXJGbGlnaHRzID0gbGVhZmxldC5nZW9KU09OKGZsaWdodEdlb0pzb24sIHtcbiAgICAgICAgICAgICAgICBvbkVhY2hGZWF0dXJlOiAoZmVhdHVyZSwgbGF5ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIub24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFubmVkVG9DZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGZlYXR1cmUsIGxheWVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9wdXBfaHRtbCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzICYmIChmZWF0dXJlLnByb3BlcnRpZXMucG9wdXAgIT09ICcnICYmIGZlYXR1cmUucHJvcGVydGllcy5wb3B1cCAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBfaHRtbCArPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5iaW5kUG9wdXAocG9wdXBfaHRtbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gdGhlIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgbWFya2Vyc19saXN0W2ZlYXR1cmUucHJvcGVydGllcy5waXJlcF9pZF0gPSBbZmVhdHVyZSwgbGF5ZXJdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9pbnRUb0xheWVyOiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF0bG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWFmbGV0Lm1hcmtlcihsYXRsb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGFpcmNyYWZ0SWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQW5nbGU6IGZlYXR1cmUucHJvcGVydGllcy5oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxheWVyRmxpZ2h0cy5hZGRUbyhtYXApO1xuXG4gICAgICAgICAgICAvLyBSZWxvYWQgdGhlIGNsaWNrZWQtZmxpZ2h0IGluZm9ybWF0aW9uXG4gICAgICAgICAgICBpZiAobGF5ZXJTZWxGbGlnaHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvbkZsaWdodENsaWNrKGxheWVyU2VsRmxpZ2h0RmVhdHVyZSwgbGF5ZXJTZWxGbGlnaHRMYXllcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC53aGVuKHBpcmVwcykuZG9uZShwaXJlcHMgPT4ge1xuICAgICAgICAgICAgcl90YWJsZV92aWV3LnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgcGlyZXBzOiBwaXJlcHMuZGF0YSxcbiAgICAgICAgICAgICAgICBoYXNfZGF0YTogKHBpcmVwcy5kYXRhLmxlbmd0aCA+IDApLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB1cGRhdGVNYXAoKTtcbiAgICBzZXRJbnRlcnZhbCh1cGRhdGVNYXAsIDEwMDAwKVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3Jlc291cmNlcy9qcy9tYXBzL2xpdmVfbWFwLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\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\");\n//\n\nvar geolib = __webpack_require__(\"./node_modules/geolib/dist/geolib.js\");\nvar leaflet = __webpack_require__(\"./node_modules/leaflet/dist/leaflet-src.js\");\nvar rivets = __webpack_require__(\"./node_modules/rivets/dist/rivets.js\");\n\n\n\n\n/**\n * Render the live map\n * @param opts\n * @private\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (opts) {\n\n opts = Object.assign({\n center: [29.98139, -95.33374],\n zoom: 5,\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 /**\n * Hold the markers\n * @type {{}}\n */\n var markers_list = {};\n\n var pannedToCenter = false;\n\n var layerFlights = null;\n var layerSelFlight = null;\n var layerSelFlightFeature = null;\n var layerSelFlightLayer = null;\n var layerSelArr = null;\n var layerSelDep = null;\n\n /**\n * Controller for two-way bindings\n * @type {{focusMarker: focusMarker}}\n */\n var mapController = {\n /**\n * Focus on a specific marker\n * @param e\n * @param model\n */\n focusMarker: function focusMarker(e, model) {\n if (!(model.pirep.id in markers_list)) {\n console.log('marker not found in list');\n return;\n }\n\n var marker = markers_list[model.pirep.id];\n onFlightClick(marker[0], marker[1]);\n }\n };\n\n var r_map_view = rivets.bind($('#map-info-box'), { pirep: {}, controller: mapController });\n var r_table_view = rivets.bind($('#live_flights'), { pireps: [], controller: mapController });\n\n /**\n * When a flight is clicked on, show the path, etc for that flight\n * @param feature\n * @param layer\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 (rte) {\n if (layerSelFlight !== null) {\n map.removeLayer(layerSelFlight);\n //map.removeLayer(layerSelArr);\n //map.removeLayer(layerSelDep);\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(rte.line);\n layerSelFlightFeature = feature;\n layerSelFlightLayer = layer;\n\n /*const dptIcon = leaflet.divIcon({\n html: '' + rte.airports.d.icao + '
'\n });\n layerSelDep = leaflet.marker([rte.airports.d.lat, rte.airports.d.lon], {icon:dptIcon}).addTo(map);\n */\n\n // Center on it, but only do it once, in case the map is moved\n if (!pannedToCenter) {\n // find center\n var c = geolib.getCenter([{ latitude: rte.airports.a.lat, longitude: rte.airports.a.lon }, { latitude: rte.airports.d.lat, longitude: rte.airports.d.lon }]);\n\n //map.panTo({lat: c.latitude, lng: c.longitude});\n map.panTo({ lat: rte.position.lat, lng: rte.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 r_map_view.update({ pirep: pirep.data });\n $('#map-info-box').show();\n });\n };\n\n var updateMap = function updateMap() {\n\n console.log('reloading flights from acars...');\n\n /**\n * AJAX UPDATE\n */\n var pirep_uri = opts.pirep_uri.replace('{id}', '');\n var pireps = $.ajax({\n url: pirep_uri,\n dataType: 'json',\n error: console.log\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 // add to the list\n markers_list[feature.properties.pirep_id] = [feature, layer];\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 $.when(pireps).done(function (pireps) {\n r_table_view.update({\n pireps: pireps.data,\n has_data: pireps.data.length > 0\n });\n });\n };\n\n updateMap();\n setInterval(updateMap, 10000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbWFwcy9saXZlX21hcC5qcz9lN2Y2Il0sIm5hbWVzIjpbImdlb2xpYiIsInJlcXVpcmUiLCJsZWFmbGV0Iiwicml2ZXRzIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsImNlbnRlciIsInpvb20iLCJ1cGRhdGVfdXJpIiwicGlyZXBfdXJpIiwicGlyZXBfbGlua191cmkiLCJwb3NpdGlvbnMiLCJyZW5kZXJfZWxlbSIsImFpcmNyYWZ0X2ljb24iLCJ1bml0cyIsIm1hcCIsImRyYXdfYmFzZV9tYXAiLCJhaXJjcmFmdEljb24iLCJpY29uIiwiaWNvblVybCIsImljb25TaXplIiwiaWNvbkFuY2hvciIsIm1hcmtlcnNfbGlzdCIsInBhbm5lZFRvQ2VudGVyIiwibGF5ZXJGbGlnaHRzIiwibGF5ZXJTZWxGbGlnaHQiLCJsYXllclNlbEZsaWdodEZlYXR1cmUiLCJsYXllclNlbEZsaWdodExheWVyIiwibGF5ZXJTZWxBcnIiLCJsYXllclNlbERlcCIsIm1hcENvbnRyb2xsZXIiLCJmb2N1c01hcmtlciIsImUiLCJtb2RlbCIsInBpcmVwIiwiaWQiLCJjb25zb2xlIiwibG9nIiwibWFya2VyIiwib25GbGlnaHRDbGljayIsInJfbWFwX3ZpZXciLCJiaW5kIiwiJCIsImNvbnRyb2xsZXIiLCJyX3RhYmxlX3ZpZXciLCJwaXJlcHMiLCJmZWF0dXJlIiwibGF5ZXIiLCJyZXBsYWNlIiwicHJvcGVydGllcyIsInBpcmVwX2lkIiwiZ2VvanNvbl91cmkiLCJwaXJlcF9pbmZvIiwiYWpheCIsInVybCIsImRhdGFUeXBlIiwiZXJyb3IiLCJmbGlnaHRfcm91dGUiLCJ3aGVuIiwiZG9uZSIsInJ0ZSIsInJlbW92ZUxheWVyIiwiZ2VvZGVzaWMiLCJ3ZWlnaHQiLCJvcGFjaXR5IiwiY29sb3IiLCJ3cmFwIiwiYWRkVG8iLCJnZW9Kc29uIiwibGluZSIsImMiLCJnZXRDZW50ZXIiLCJsYXRpdHVkZSIsImFpcnBvcnRzIiwiYSIsImxhdCIsImxvbmdpdHVkZSIsImxvbiIsImQiLCJwYW5UbyIsInBvc2l0aW9uIiwibG5nIiwidXBkYXRlIiwiZGF0YSIsInNob3ciLCJ1cGRhdGVNYXAiLCJmbGlnaHRzIiwiY2xlYXJMYXllcnMiLCJnZW9KU09OIiwiZmxpZ2h0R2VvSnNvbiIsIm9uRWFjaEZlYXR1cmUiLCJvbiIsImNsaWNrIiwicG9wdXBfaHRtbCIsInBvcHVwIiwidW5kZWZpbmVkIiwiYmluZFBvcHVwIiwicG9pbnRUb0xheWVyIiwibGF0bG9uIiwicm90YXRpb25BbmdsZSIsImhlYWRpbmciLCJoYXNfZGF0YSIsImxlbmd0aCIsInNldEludGVydmFsIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTs7QUFFQSxJQUFNQSxTQUFTLG1CQUFBQyxDQUFRLHNDQUFSLENBQWY7QUFDQSxJQUFNQyxVQUFVLG1CQUFBRCxDQUFRLDRDQUFSLENBQWhCO0FBQ0EsSUFBTUUsU0FBUyxtQkFBQUYsQ0FBUSxzQ0FBUixDQUFmOztBQUVBO0FBQ0E7O0FBRUE7Ozs7O0FBS0EseURBQWUsVUFBQ0csSUFBRCxFQUFVOztBQUVyQkEsV0FBT0MsT0FBT0MsTUFBUCxDQUFjO0FBQ2pCQyxnQkFBUSxDQUFDLFFBQUQsRUFBVyxDQUFDLFFBQVosQ0FEUztBQUVqQkMsY0FBTSxDQUZXO0FBR2pCQyxvQkFBWSxZQUhLO0FBSWpCQyxtQkFBVyxrQkFKTTtBQUtqQkMsd0JBQWdCLGNBTEM7QUFNakJDLG1CQUFXLElBTk07QUFPakJDLHFCQUFhLEtBUEk7QUFRakJDLHVCQUFlLGdDQVJFO0FBU2pCQyxlQUFPO0FBVFUsS0FBZCxFQVVKWCxJQVZJLENBQVA7O0FBWUEsUUFBTVksTUFBTSxrRUFBQUMsQ0FBY2IsSUFBZCxDQUFaO0FBQ0EsUUFBTWMsZUFBZWhCLFFBQVFpQixJQUFSLENBQWE7QUFDOUJDLGlCQUFTaEIsS0FBS1UsYUFEZ0I7QUFFOUJPLGtCQUFVLENBQUMsRUFBRCxFQUFLLEVBQUwsQ0FGb0I7QUFHOUJDLG9CQUFZLENBQUMsRUFBRCxFQUFLLEVBQUw7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LENBQW9CLGtCQUFVO0FBQzFCZix5QkFBYXNDLE1BQWIsQ0FBb0I7QUFDaEJyQyx3QkFBUUEsT0FBT3NDLElBREM7QUFFaEJrQiwwQkFBV3hELE9BQU9zQyxJQUFQLENBQVltQixNQUFaLEdBQXFCO0FBRmhCLGFBQXBCO0FBSUgsU0FMRDtBQU1ILEtBbEVEOztBQW9FQWpCO0FBQ0FrQixnQkFBWWxCLFNBQVosRUFBdUIsS0FBdkI7QUFDSCxDQXpNRCIsImZpbGUiOiIuL3Jlc291cmNlcy9qcy9tYXBzL2xpdmVfbWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cblxuY29uc3QgZ2VvbGliID0gcmVxdWlyZSgnZ2VvbGliJyk7XG5jb25zdCBsZWFmbGV0ID0gcmVxdWlyZSgnbGVhZmxldCcpO1xuY29uc3Qgcml2ZXRzID0gcmVxdWlyZSgncml2ZXRzJyk7XG5cbmltcG9ydCBkcmF3X2Jhc2VfbWFwIGZyb20gJy4vYmFzZV9tYXAnXG5pbXBvcnQgeyBBQ1RVQUxfUk9VVEVfQ09MT1IgfSBmcm9tICcuL2NvbmZpZydcblxuLyoqXG4gKiBSZW5kZXIgdGhlIGxpdmUgbWFwXG4gKiBAcGFyYW0gb3B0c1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgKG9wdHMpID0+IHtcblxuICAgIG9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgY2VudGVyOiBbMjkuOTgxMzksIC05NS4zMzM3NF0sXG4gICAgICAgIHpvb206IDUsXG4gICAgICAgIHVwZGF0ZV91cmk6ICcvYXBpL2FjYXJzJyxcbiAgICAgICAgcGlyZXBfdXJpOiAnL2FwaS9waXJlcHMve2lkfScsXG4gICAgICAgIHBpcmVwX2xpbmtfdXJpOiAnL3BpcmVwcy97aWR9JyxcbiAgICAgICAgcG9zaXRpb25zOiBudWxsLFxuICAgICAgICByZW5kZXJfZWxlbTogJ21hcCcsXG4gICAgICAgIGFpcmNyYWZ0X2ljb246ICcvYXNzZXRzL2ltZy9hY2Fycy9haXJjcmFmdC5wbmcnLFxuICAgICAgICB1bml0czogJ25taScsXG4gICAgfSwgb3B0cyk7XG5cbiAgICBjb25zdCBtYXAgPSBkcmF3X2Jhc2VfbWFwKG9wdHMpO1xuICAgIGNvbnN0IGFpcmNyYWZ0SWNvbiA9IGxlYWZsZXQuaWNvbih7XG4gICAgICAgIGljb25Vcmw6IG9wdHMuYWlyY3JhZnRfaWNvbixcbiAgICAgICAgaWNvblNpemU6IFs0MiwgNDJdLFxuICAgICAgICBpY29uQW5jaG9yOiBbMjEsIDIxXSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEhvbGQgdGhlIG1hcmtlcnNcbiAgICAgKiBAdHlwZSB7e319XG4gICAgICovXG4gICAgbGV0IG1hcmtlcnNfbGlzdCA9IHt9O1xuXG4gICAgbGV0IHBhbm5lZFRvQ2VudGVyID0gZmFsc2U7XG5cbiAgICBsZXQgbGF5ZXJGbGlnaHRzID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxGbGlnaHQgPSBudWxsO1xuICAgIGxldCBsYXllclNlbEZsaWdodEZlYXR1cmUgPSBudWxsO1xuICAgIGxldCBsYXllclNlbEZsaWdodExheWVyID0gbnVsbDtcbiAgICBsZXQgbGF5ZXJTZWxBcnIgPSBudWxsO1xuICAgIGxldCBsYXllclNlbERlcCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sbGVyIGZvciB0d28td2F5IGJpbmRpbmdzXG4gICAgICogQHR5cGUge3tmb2N1c01hcmtlcjogZm9jdXNNYXJrZXJ9fVxuICAgICAqL1xuICAgIGNvbnN0IG1hcENvbnRyb2xsZXIgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb2N1cyBvbiBhIHNwZWNpZmljIG1hcmtlclxuICAgICAgICAgKiBAcGFyYW0gZVxuICAgICAgICAgKiBAcGFyYW0gbW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIGZvY3VzTWFya2VyOiAoZSwgbW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmKCEobW9kZWwucGlyZXAuaWQgaW4gbWFya2Vyc19saXN0KSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXJrZXIgbm90IGZvdW5kIGluIGxpc3QnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IG1hcmtlcnNfbGlzdFttb2RlbC5waXJlcC5pZF07XG4gICAgICAgICAgICBvbkZsaWdodENsaWNrKG1hcmtlclswXSwgbWFya2VyWzFdKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3Qgcl9tYXBfdmlldyA9IHJpdmV0cy5iaW5kKCQoJyNtYXAtaW5mby1ib3gnKSwge3BpcmVwOiB7fSwgY29udHJvbGxlcjogbWFwQ29udHJvbGxlcn0pO1xuICAgIGNvbnN0IHJfdGFibGVfdmlldyA9IHJpdmV0cy5iaW5kKCQoJyNsaXZlX2ZsaWdodHMnKSwge3BpcmVwczogW10sIGNvbnRyb2xsZXI6IG1hcENvbnRyb2xsZXJ9KTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gYSBmbGlnaHQgaXMgY2xpY2tlZCBvbiwgc2hvdyB0aGUgcGF0aCwgZXRjIGZvciB0aGF0IGZsaWdodFxuICAgICAqIEBwYXJhbSBmZWF0dXJlXG4gICAgICogQHBhcmFtIGxheWVyXG4gICAgICovXG4gICAgY29uc3Qgb25GbGlnaHRDbGljayA9IChmZWF0dXJlLCBsYXllcikgPT4ge1xuXG4gICAgICAgIGNvbnN0IHBpcmVwX3VyaSA9IG9wdHMucGlyZXBfdXJpLnJlcGxhY2UoJ3tpZH0nLCBmZWF0dXJlLnByb3BlcnRpZXMucGlyZXBfaWQpO1xuICAgICAgICBjb25zdCBnZW9qc29uX3VyaSA9IG9wdHMucGlyZXBfdXJpLnJlcGxhY2UoJ3tpZH0nLCBmZWF0dXJlLnByb3BlcnRpZXMucGlyZXBfaWQpICsgXCIvYWNhcnMvZ2VvanNvblwiO1xuXG4gICAgICAgIGNvbnN0IHBpcmVwX2luZm8gPSAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBwaXJlcF91cmksXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUubG9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZsaWdodF9yb3V0ZSA9ICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IGdlb2pzb25fdXJpLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLmxvZ1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBMb2FkIHVwIHRoZSBQSVJFUCBpbmZvXG4gICAgICAgICQud2hlbihmbGlnaHRfcm91dGUpLmRvbmUoKHJ0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxheWVyU2VsRmxpZ2h0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyU2VsRmxpZ2h0KTtcbiAgICAgICAgICAgICAgICAvL21hcC5yZW1vdmVMYXllcihsYXllclNlbEFycik7XG4gICAgICAgICAgICAgICAgLy9tYXAucmVtb3ZlTGF5ZXIobGF5ZXJTZWxEZXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodCA9IGxlYWZsZXQuZ2VvZGVzaWMoW10sIHtcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IDUsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC45LFxuICAgICAgICAgICAgICAgIGNvbG9yOiBBQ1RVQUxfUk9VVEVfQ09MT1IsXG4gICAgICAgICAgICAgICAgd3JhcDogZmFsc2UsXG4gICAgICAgICAgICB9KS5hZGRUbyhtYXApO1xuXG4gICAgICAgICAgICBsYXllclNlbEZsaWdodC5nZW9Kc29uKHJ0ZS5saW5lKTtcbiAgICAgICAgICAgIGxheWVyU2VsRmxpZ2h0RmVhdHVyZSA9IGZlYXR1cmU7XG4gICAgICAgICAgICBsYXllclNlbEZsaWdodExheWVyID0gbGF5ZXI7XG5cbiAgICAgICAgICAgIC8qY29uc3QgZHB0SWNvbiA9IGxlYWZsZXQuZGl2SWNvbih7XG4gICAgICAgICAgICAgICAgaHRtbDogJzxkaXYgY2xhc3M9XCJtYXAtaW5mby1sYWJlbFwiPjxoNT4nICsgcnRlLmFpcnBvcnRzLmQuaWNhbyArICc8L2g1PjwvZGl2PidcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsYXllclNlbERlcCA9IGxlYWZsZXQubWFya2VyKFtydGUuYWlycG9ydHMuZC5sYXQsIHJ0ZS5haXJwb3J0cy5kLmxvbl0sIHtpY29uOmRwdEljb259KS5hZGRUbyhtYXApO1xuICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgLy8gQ2VudGVyIG9uIGl0LCBidXQgb25seSBkbyBpdCBvbmNlLCBpbiBjYXNlIHRoZSBtYXAgaXMgbW92ZWRcbiAgICAgICAgICAgIGlmKCFwYW5uZWRUb0NlbnRlcikge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgY2VudGVyXG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IGdlb2xpYi5nZXRDZW50ZXIoW1xuICAgICAgICAgICAgICAgICAgICB7bGF0aXR1ZGU6IHJ0ZS5haXJwb3J0cy5hLmxhdCwgbG9uZ2l0dWRlOiBydGUuYWlycG9ydHMuYS5sb259LFxuICAgICAgICAgICAgICAgICAgICB7bGF0aXR1ZGU6IHJ0ZS5haXJwb3J0cy5kLmxhdCwgbG9uZ2l0dWRlOiBydGUuYWlycG9ydHMuZC5sb259LFxuICAgICAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICAgICAgLy9tYXAucGFuVG8oe2xhdDogYy5sYXRpdHVkZSwgbG5nOiBjLmxvbmdpdHVkZX0pO1xuICAgICAgICAgICAgICAgIG1hcC5wYW5Ubyh7bGF0OiBydGUucG9zaXRpb24ubGF0LCBsbmc6IHJ0ZS5wb3NpdGlvbi5sb259KTtcbiAgICAgICAgICAgICAgICBwYW5uZWRUb0NlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdoZW4gdGhlIFBJUkVQIGluZm8gaXMgZG9uZSBsb2FkaW5nLCBzaG93IHRoZSBib3R0b20gYmFyXG4gICAgICAgIC8vXG4gICAgICAgICQud2hlbihwaXJlcF9pbmZvKS5kb25lKHBpcmVwID0+IHtcbiAgICAgICAgICAgIHJfbWFwX3ZpZXcudXBkYXRlKHtwaXJlcDpwaXJlcC5kYXRhfSk7XG4gICAgICAgICAgICAkKCcjbWFwLWluZm8tYm94Jykuc2hvdygpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlTWFwID0gKCkgPT4ge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZWxvYWRpbmcgZmxpZ2h0cyBmcm9tIGFjYXJzLi4uJyk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFKQVggVVBEQVRFXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBwaXJlcF91cmkgPSBvcHRzLnBpcmVwX3VyaS5yZXBsYWNlKCd7aWR9JywgJycpO1xuICAgICAgICBsZXQgcGlyZXBzID0gJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogcGlyZXBfdXJpLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLmxvZ1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgZmxpZ2h0cyA9ICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IG9wdHMudXBkYXRlX3VyaSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICBlcnJvcjogY29uc29sZS5sb2dcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC53aGVuKGZsaWdodHMpLmRvbmUoZmxpZ2h0R2VvSnNvbiA9PiB7XG5cbiAgICAgICAgICAgIGlmIChsYXllckZsaWdodHMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsYXllckZsaWdodHMuY2xlYXJMYXllcnMoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXllckZsaWdodHMgPSBsZWFmbGV0Lmdlb0pTT04oZmxpZ2h0R2VvSnNvbiwge1xuICAgICAgICAgICAgICAgIG9uRWFjaEZlYXR1cmU6IChmZWF0dXJlLCBsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsYXllci5vbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5uZWRUb0NlbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmxpZ2h0Q2xpY2soZmVhdHVyZSwgbGF5ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1cF9odG1sID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMgJiYgKGZlYXR1cmUucHJvcGVydGllcy5wb3B1cCAhPT0gJycgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cF9odG1sICs9IGZlYXR1cmUucHJvcGVydGllcy5wb3B1cDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChwb3B1cF9odG1sKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0byB0aGUgbGlzdFxuICAgICAgICAgICAgICAgICAgICBtYXJrZXJzX2xpc3RbZmVhdHVyZS5wcm9wZXJ0aWVzLnBpcmVwX2lkXSA9IFtmZWF0dXJlLCBsYXllcl07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwb2ludFRvTGF5ZXI6IGZ1bmN0aW9uIChmZWF0dXJlLCBsYXRsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWZsZXQubWFya2VyKGxhdGxvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYWlyY3JhZnRJY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25BbmdsZTogZmVhdHVyZS5wcm9wZXJ0aWVzLmhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGF5ZXJGbGlnaHRzLmFkZFRvKG1hcCk7XG5cbiAgICAgICAgICAgIC8vIFJlbG9hZCB0aGUgY2xpY2tlZC1mbGlnaHQgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGlmIChsYXllclNlbEZsaWdodCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG9uRmxpZ2h0Q2xpY2sobGF5ZXJTZWxGbGlnaHRGZWF0dXJlLCBsYXllclNlbEZsaWdodExheWVyKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkLndoZW4ocGlyZXBzKS5kb25lKHBpcmVwcyA9PiB7XG4gICAgICAgICAgICByX3RhYmxlX3ZpZXcudXBkYXRlKHtcbiAgICAgICAgICAgICAgICBwaXJlcHM6IHBpcmVwcy5kYXRhLFxuICAgICAgICAgICAgICAgIGhhc19kYXRhOiAocGlyZXBzLmRhdGEubGVuZ3RoID4gMCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHVwZGF0ZU1hcCgpO1xuICAgIHNldEludGVydmFsKHVwZGF0ZU1hcCwgMTAwMDApXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL21hcHMvbGl2ZV9tYXAuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/maps/live_map.js\n");
/***/ }),
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
index 5050494f..ab1e19db 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=c30de31f825160aacbb4",
+ "/assets/frontend/js/app.js": "/assets/frontend/js/app.js?id=b83a392b6c373e164576",
"/assets/frontend/css/now-ui-kit.css": "/assets/frontend/css/now-ui-kit.css?id=b0a0f05b94a4486db4f2",
"/assets/admin/css/vendor.min.css": "/assets/admin/css/vendor.min.css?id=cc80aec3cf1646f83d8d",
- "/assets/admin/js/app.js": "/assets/admin/js/app.js?id=fd7aff514485e548f4bc",
+ "/assets/admin/js/app.js": "/assets/admin/js/app.js?id=1f2917a3a9f172f3cdad",
"/assets/installer/js/app.js": "/assets/installer/js/app.js?id=3a51850509367b06cd1f",
"/assets/fonts/glyphicons-halflings-regular.woff2": "/assets/fonts/glyphicons-halflings-regular.woff2?id=349344e92fb16221dd56",
"/assets/admin/fonts/glyphicons-halflings-regular.woff2": "/assets/admin/fonts/glyphicons-halflings-regular.woff2?id=349344e92fb16221dd56",
diff --git a/resources/js/maps/live_map.js b/resources/js/maps/live_map.js
index 5f3f9b45..21193fe0 100644
--- a/resources/js/maps/live_map.js
+++ b/resources/js/maps/live_map.js
@@ -15,6 +15,8 @@ import { ACTUAL_ROUTE_COLOR } from './config'
export default (opts) => {
opts = Object.assign({
+ center: [29.98139, -95.33374],
+ zoom: 5,
update_uri: '/api/acars',
pirep_uri: '/api/pireps/{id}',
pirep_link_uri: '/pireps/{id}',
diff --git a/resources/views/layouts/default/widgets/live_map.blade.php b/resources/views/layouts/default/widgets/live_map.blade.php
index fdf7fc0c..358888a2 100644
--- a/resources/views/layouts/default/widgets/live_map.blade.php
+++ b/resources/views/layouts/default/widgets/live_map.blade.php
@@ -110,11 +110,13 @@ and being mindful of the rivets bindings
@section('scripts')
@endsection