Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/iNavFlight/inav-configurator.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Sharlaimov <konstantin.sharlaimov@gmail.com>2018-02-17 14:27:54 +0300
committerGitHub <noreply@github.com>2018-02-17 14:27:54 +0300
commit23ef794d5b20def7693908bfc1f9f5ce132eaff7 (patch)
treebe321465b42d90d812c4c03c79f15abe91e9c8dc
parent5a1238cc99fb82f698aaf49ee047fba4cf78a869 (diff)
parentb24f3a29d656ca7dc09f4bf5f2858400eeb089c2 (diff)
Merge pull request #324 from Afinogen/mission-planer1.9.0
Mission planer
-rwxr-xr-x_locales/en/messages.json39
-rw-r--r--js/fc.js15
-rw-r--r--js/gui.js3
-rw-r--r--js/msp/MSPCodes.js4
-rw-r--r--js/msp/MSPHelper.js130
-rw-r--r--main.css11
-rwxr-xr-xmain.html9
-rw-r--r--main.js3
-rw-r--r--package-lock.json413
-rwxr-xr-xpackage.json2
-rw-r--r--src/css/tabs/mission_planer.css122
-rw-r--r--tabs/mission_control.html76
-rw-r--r--tabs/mission_control.js474
13 files changed, 1055 insertions, 246 deletions
diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 3763ea04..41a8ad07 100755
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -2328,6 +2328,45 @@
"downloadUpdatesBtn": {
"message": "Download new app"
},
+ "tabMissionControl": {
+ "message": "Mission Control"
+ },
+ "loadMissionButton": {
+ "message": "Load mission from FC"
+ },
+ "saveMissionButton": {
+ "message": "Save mission to FC"
+ },
+ "loadEepromMissionButton": {
+ "message": "Load Eeprom mission"
+ },
+ "saveEepromMissionButton": {
+ "message": "Save Eeprom mission"
+ },
+ "editPointHead": {
+ "message": "Edit point"
+ },
+ "editPointButtonSave": {
+ "message": "Save"
+ },
+ "editPointButtonRemove": {
+ "message": "Remove"
+ },
+ "removeAllPointButtonSave": {
+ "message": "Remove all points"
+ },
+ "missionTotalInformationHead": {
+ "message": "Total information"
+ },
+ "useOnlyStandalone": {
+ "message": "Use stand-alone application.<br> Please visit the <a href=\"https://github.com/iNavFlight/inav-configurator/releases\" target=\"_blank\">website</a> to read the release notes and download."
+ },
+ "eeprom_load_ok": {
+ "message": "EEPROM <span style=\"color: #37a8db\">loaded</span>"
+ },
+ "confirm_delete_all_points": {
+ "message": "Do you really want to delete all points?"
+ },
"servoMixer": {
"message": "Servo mixer"
},
diff --git a/js/fc.js b/js/fc.js
index 3d098332..fe10c0c3 100644
--- a/js/fc.js
+++ b/js/fc.js
@@ -23,6 +23,7 @@ var CONFIG,
MOTOR_DATA,
SERVO_DATA,
GPS_DATA,
+ MISSION_PLANER,
ANALOG,
ARMING_CONFIG,
FC_CONFIG,
@@ -197,6 +198,20 @@ var FC = {
packetCount: 0
};
+ MISSION_PLANER = {
+ maxWaypoints: 0,
+ isValidMission: 0,
+ countBusyPoints: 0,
+ bufferPoint: {
+ number: 0,
+ action: 0,
+ lat: 0,
+ lon: 0,
+ alt: 0,
+ endMission: 0
+ }
+ };
+
ANALOG = {
voltage: 0,
mAhdrawn: 0,
diff --git a/js/gui.js b/js/gui.js
index 3028577d..a1ce5d8b 100644
--- a/js/gui.js
+++ b/js/gui.js
@@ -38,7 +38,8 @@ var GUI_control = function () {
'setup',
'osd',
'profiles',
- 'advanced_tuning'
+ 'advanced_tuning',
+ 'mission_control'
];
this.allowedTabs = this.defaultAllowedTabsWhenDisconnected;
diff --git a/js/msp/MSPCodes.js b/js/msp/MSPCodes.js
index 2ac5e26a..69cd7ace 100644
--- a/js/msp/MSPCodes.js
+++ b/js/msp/MSPCodes.js
@@ -20,7 +20,9 @@ var MSPCodes = {
MSP_POSITION_ESTIMATION_CONFIG: 16,
MSP_SET_POSITION_ESTIMATION_CONFIG: 17,
-
+ MSP_WP_MISSION_LOAD: 18,
+ MSP_WP_MISSION_SAVE: 19,
+ MSP_WP_GETINFO: 20,
MSP_RTH_AND_LAND_CONFIG: 21,
MSP_SET_RTH_AND_LAND_CONFIG: 22,
MSP_FW_CONFIG: 23,
diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js
index 5c150eb7..f3601d6d 100644
--- a/js/msp/MSPHelper.js
+++ b/js/msp/MSPHelper.js
@@ -42,7 +42,7 @@ var mspHelper = (function (gui) {
'BLACKBOX': 7,
'TELEMETRY_MAVLINK': 8,
'TELEMETRY_IBUS': 9,
- 'RUNCAM_DEVICE_CONTROL' : 10,
+ 'RUNCAM_DEVICE_CONTROL': 10,
'TBS_SMARTAUDIO': 11,
'IRC_TRAMP': 12
};
@@ -138,14 +138,14 @@ var mspHelper = (function (gui) {
case MSPCodes.MSP_SENSOR_STATUS:
SENSOR_STATUS.isHardwareHealthy = data.getUint8(0);
- SENSOR_STATUS.gyroHwStatus = data.getUint8(1);
- SENSOR_STATUS.accHwStatus = data.getUint8(2);
- SENSOR_STATUS.magHwStatus = data.getUint8(3);
- SENSOR_STATUS.baroHwStatus = data.getUint8(4);
- SENSOR_STATUS.gpsHwStatus = data.getUint8(5);
- SENSOR_STATUS.rangeHwStatus = data.getUint8(6);
- SENSOR_STATUS.speedHwStatus = data.getUint8(7);
- SENSOR_STATUS.flowHwStatus = data.getUint8(8);
+ SENSOR_STATUS.gyroHwStatus = data.getUint8(1);
+ SENSOR_STATUS.accHwStatus = data.getUint8(2);
+ SENSOR_STATUS.magHwStatus = data.getUint8(3);
+ SENSOR_STATUS.baroHwStatus = data.getUint8(4);
+ SENSOR_STATUS.gpsHwStatus = data.getUint8(5);
+ SENSOR_STATUS.rangeHwStatus = data.getUint8(6);
+ SENSOR_STATUS.speedHwStatus = data.getUint8(7);
+ SENSOR_STATUS.flowHwStatus = data.getUint8(8);
if (semver.gte(CONFIG.flightControllerVersion, "1.5.0")) {
sensor_status_ex(SENSOR_STATUS);
}
@@ -345,7 +345,12 @@ var mspHelper = (function (gui) {
}
break;
case MSPCodes.MSP_WP:
- console.log(data);
+ MISSION_PLANER.bufferPoint.number = data.getUint8(0);
+ MISSION_PLANER.bufferPoint.action = data.getUint8(1);
+ MISSION_PLANER.bufferPoint.lat = data.getInt32(2, true) / 10000000;
+ MISSION_PLANER.bufferPoint.lon = data.getInt32(6, true) / 10000000;
+ MISSION_PLANER.bufferPoint.alt = data.getInt32(10, true);
+
break;
case MSPCodes.MSP_BOXIDS:
//noinspection JSUndeclaredVariable
@@ -1144,6 +1149,23 @@ var mspHelper = (function (gui) {
case MSPCodes.MSPV2_SET_SETTING:
console.log("Setting set");
break;
+ case MSPCodes.MSP_WP_GETINFO:
+ // Reserved for waypoint capabilities data.getUint8(0);
+ MISSION_PLANER.maxWaypoints = data.getUint8(1);
+ MISSION_PLANER.isValidMission = data.getUint8(2);
+ MISSION_PLANER.countBusyPoints = data.getUint8(3);
+ break;
+ case MSPCodes.MSP_SET_WP:
+ console.log('Point saved');
+ break;
+ case MSPCodes.MSP_WP_MISSION_SAVE:
+ // buffer.push(0);
+ console.log(data);
+
+ break;
+ case MSPCodes.MSP_WP_MISSION_LOAD:
+ console.log('Mission load');
+ break;
default:
console.log('Unknown code detected: ' + dataHandler.code);
} else {
@@ -1323,7 +1345,7 @@ var mspHelper = (function (gui) {
buffer.push(highByte(FAILSAFE_CONFIG.failsafe_fw_yaw_rate));
buffer.push(lowByte(FAILSAFE_CONFIG.failsafe_stick_motion_threshold));
buffer.push(highByte(FAILSAFE_CONFIG.failsafe_stick_motion_threshold));
- }
+ }
if (semver.gte(CONFIG.flightControllerVersion, "1.7.4")) {
buffer.push(lowByte(FAILSAFE_CONFIG.failsafe_min_distance));
buffer.push(highByte(FAILSAFE_CONFIG.failsafe_min_distance));
@@ -1624,6 +1646,44 @@ var mspHelper = (function (gui) {
buffer.push(SENSOR_CONFIG.opflow);
break;
+ case MSPCodes.MSP_SET_WP:
+ buffer.push(MISSION_PLANER.bufferPoint.number); // sbufReadU8(src); // number
+ buffer.push(MISSION_PLANER.bufferPoint.action); // sbufReadU8(src); // action
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.lat, 0)); // sbufReadU32(src); // lat
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.lat, 1));
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.lat, 2));
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.lat, 3));
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.lon, 0)); // sbufReadU32(src); // lon
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.lon, 1));
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.lon, 2));
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.lon, 3));
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.alt, 0)); // sbufReadU32(src); // to set altitude (cm)
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.alt, 1));
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.alt, 2));
+ buffer.push(specificByte(MISSION_PLANER.bufferPoint.alt, 3));
+ buffer.push(lowByte(0)); //sbufReadU16(src); // P1
+ buffer.push(highByte(0));
+ buffer.push(lowByte(0)); //sbufReadU16(src); // P2
+ buffer.push(highByte(0));
+ buffer.push(lowByte(0)); //sbufReadU16(src); // P3
+ buffer.push(highByte(0));
+ buffer.push(MISSION_PLANER.bufferPoint.endMission); //sbufReadU8(src); // future: to set nav flag
+ break;
+ case MSPCodes.MSP_WP:
+ console.log(MISSION_PLANER.bufferPoint.number);
+ buffer.push(MISSION_PLANER.bufferPoint.number+1);
+
+ break;
+ case MSPCodes.MSP_WP_MISSION_SAVE:
+ // buffer.push(0);
+ console.log(buffer);
+
+ break;
+ case MSPCodes.MSP_WP_MISSION_LOAD:
+ // buffer.push(0);
+ console.log(buffer);
+
+ break;
default:
return false;
}
@@ -1649,9 +1709,9 @@ var mspHelper = (function (gui) {
self.sendBlackboxConfiguration = function (onDataCallback) {
var message = [
- BLACKBOX.blackboxDevice & 0xFF,
- BLACKBOX.blackboxRateNum & 0xFF,
- BLACKBOX.blackboxRateDenom & 0xFF
+ BLACKBOX.blackboxDevice & 0xFF,
+ BLACKBOX.blackboxRateNum & 0xFF,
+ BLACKBOX.blackboxRateDenom & 0xFF
];
//noinspection JSUnusedLocalSymbols
@@ -2095,7 +2155,7 @@ var mspHelper = (function (gui) {
MSP.send_message(MSPCodes.MSP_IDENT, false, false, callback);
};
- self.loadINAVPidConfig = function(callback) {
+ self.loadINAVPidConfig = function (callback) {
if (semver.gt(CONFIG.flightControllerVersion, "1.3.0")) {
MSP.send_message(MSPCodes.MSP_INAV_PID, false, false, callback);
} else {
@@ -2107,7 +2167,7 @@ var mspHelper = (function (gui) {
MSP.send_message(MSPCodes.MSP_LOOP_TIME, false, false, callback);
};
- self.loadAdvancedConfig = function(callback) {
+ self.loadAdvancedConfig = function (callback) {
if (semver.gte(CONFIG.flightControllerVersion, "1.3.0")) {
MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, callback);
} else {
@@ -2288,7 +2348,7 @@ var mspHelper = (function (gui) {
};
self.saveRxConfig = function (callback) {
- if(semver.gte(CONFIG.apiVersion, "1.21.0")) {
+ if (semver.gte(CONFIG.apiVersion, "1.21.0")) {
MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, callback);
} else {
callback();
@@ -2296,7 +2356,7 @@ var mspHelper = (function (gui) {
};
self.saveSensorConfig = function (callback) {
- if(semver.gte(CONFIG.flightControllerVersion, "1.5.0")) {
+ if (semver.gte(CONFIG.flightControllerVersion, "1.5.0")) {
MSP.send_message(MSPCodes.MSP_SET_SENSOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_CONFIG), false, callback);
} else {
callback();
@@ -2383,20 +2443,28 @@ var mspHelper = (function (gui) {
}
};
- self._getSetting = function(name) {
+ self.getMissionInfo = function (callback) {
+ if (semver.gte(CONFIG.flightControllerVersion, "1.8.1")) {
+ MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, callback);
+ } else {
+ callback();
+ }
+ };
+
+ self._getSetting = function (name) {
var promise;
if (this._settings) {
promise = Promise.resolve(this._settings);
} else {
- promise = new Promise(function(resolve, reject) {
+ promise = new Promise(function (resolve, reject) {
var $this = this;
$.ajax({
url: chrome.runtime.getURL('/resources/settings.json'),
dataType: 'json',
- error: function(jqXHR, text, error) {
+ error: function (jqXHR, text, error) {
reject(error);
},
- success: function(data) {
+ success: function (data) {
$this._settings = data;
resolve(data);
}
@@ -2408,19 +2476,19 @@ var mspHelper = (function (gui) {
});
};
- self._encodeSettingName = function(name, data) {
+ self._encodeSettingName = function (name, data) {
for (var ii = 0; ii < name.length; ii++) {
data.push(name.charCodeAt(ii));
}
data.push(0);
};
- self.getSetting = function(name, callback) {
+ self.getSetting = function (name, callback) {
var $this = this;
return this._getSetting(name).then(function (setting) {
- var data = [];
+ var data = [];
$this._encodeSettingName(name, data);
- MSP.send_message(MSPCodes.MSPV2_SETTING, data, false, function(resp) {
+ MSP.send_message(MSPCodes.MSPV2_SETTING, data, false, function (resp) {
var value;
switch (setting.type) {
case "uint8_t":
@@ -2457,7 +2525,7 @@ var mspHelper = (function (gui) {
});
};
- self.encodeSetting = function(name, value) {
+ self.encodeSetting = function (name, value) {
var $this = this;
return this._getSetting(name).then(function (setting) {
if (setting.table) {
@@ -2500,15 +2568,15 @@ var mspHelper = (function (gui) {
});
};
- self.setSetting = function(name, value, callback) {
+ self.setSetting = function (name, value, callback) {
this.encodeSetting(name, value).then(function (data) {
MSP.send_message(MSPCodes.MSPV2_SET_SETTING, data, false, callback);
});
};
- self.getRTC = function(callback) {
+ self.getRTC = function (callback) {
if (semver.gt(CONFIG.flightControllerVersion, "1.7.3")) {
- MSP.send_message(MSPCodes.MSP_RTC, false, false, function(resp) {
+ MSP.send_message(MSPCodes.MSP_RTC, false, false, function (resp) {
var seconds = resp.data.read32();
var millis = resp.data.readU16();
if (callback) {
@@ -2520,7 +2588,7 @@ var mspHelper = (function (gui) {
}
};
- self.setRTC = function(callback) {
+ self.setRTC = function (callback) {
if (semver.gt(CONFIG.flightControllerVersion, "1.7.3")) {
var now = Date.now();
var secs = now / 1000;
diff --git a/main.css b/main.css
index 34b66acb..236bedc4 100644
--- a/main.css
+++ b/main.css
@@ -1107,6 +1107,17 @@ dialog {
opacity: 0.5;
}
+.content_toolbar .btn-danger a {
+ background-color: #db250e;
+ border: 1px solid #b5480e;
+}
+
+.content_toolbar .btn-danger a:hover {
+ background-color: #b5480e;
+ transition: all ease 0.2s;
+}
+
+
.toolbar_scroll_bottom .content_wrapper {
/* content wrapper in view with toolbar in scroll bottom
leave 50px space for the toolbar
diff --git a/main.html b/main.html
index f989e0c4..651e8cd5 100755
--- a/main.html
+++ b/main.html
@@ -1,9 +1,11 @@
-<!DOCTYPE html>
+<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link type="text/css" rel="stylesheet" href="./build/styles.css" media="all"/>
<script type="text/javascript" src="./build/script.js"></script>
+ <link type="text/css" rel="stylesheet" href="./build/map.css" media="all"/>
+ <script type="text/javascript" src="./build/map.js"></script>
<title></title>
</head>
<body>
@@ -14,7 +16,8 @@
<div class="modal__text" data-i18n="appUpdateNotificationDescription"></div>
</div>
<div class="modal__buttons modal__buttons--upbottom">
- <a href="https://github.com/iNavFlight/inav-configurator/releases" target="_blank" id="update-notification-download" class="modal__button modal__button--main modal__button--main--inline" data-i18n="downloadUpdatesBtn"></a>
+ <a href="https://github.com/iNavFlight/inav-configurator/releases" target="_blank" id="update-notification-download"
+ class="modal__button modal__button--main modal__button--main--inline" data-i18n="downloadUpdatesBtn"></a>
<a id="update-notification-close" class="modal__button modal__button--main modal__button--main--inline" data-i18n="closeUpdateBtn"></a>
</div>
</div>
@@ -185,6 +188,7 @@
<li class="tab_servos"><a href="#" data-i18n="tabServos" class="tabicon ic_servo" title="Servos"></a>
</li>
<li class="tab_gps"><a href="#" data-i18n="tabGPS" class="tabicon ic_gps" title="GPS"></a></li>
+ <li class="tab_mission_control"><a href="#" data-i18n="tabMissionControl" class="tabicon ic_mission" title="Mission Control"></a></li>
<li class="tab_motors"><a href="#" data-i18n="tabMotorTesting" class="tabicon ic_motor"
title="Motors"></a></li>
<li class="tab_osd"><a href="#" data-i18n="tabOSD" class="tabicon ic_osd" title="OSD"></a></li>
@@ -199,7 +203,6 @@
title="Onboard Logging"></a></li>
<li class="tab_cli"><a href="#" data-i18n="tabCLI" class="tabicon ic_cli" title="CLI"></a></li>
- <!--<li class=""><a href="#" class="tabicon ic_mission">Mission (spare icon)</a></li>-->
<!--<li class=""><a href="#" class="tabicon ic_advanced">Advanced (spare icon)</a></li>-->
<!--<li class=""><a href="#" class="tabicon ic_wizzard">Wizzard (spare icon)</a></li>-->
</ul>
diff --git a/main.js b/main.js
index 8dcbb28c..6d2d6789 100644
--- a/main.js
+++ b/main.js
@@ -189,6 +189,9 @@ $(document).ready(function () {
case 'gps':
TABS.gps.initialize(content_ready);
break;
+ case 'mission_control':
+ TABS.mission_control.initialize(content_ready);
+ break;
case 'motors':
TABS.motors.initialize(content_ready);
break;
diff --git a/package-lock.json b/package-lock.json
index d5346a6a..979d93f8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,26 +1,13 @@
{
"name": "inav-configurator",
- "version": "1.7.3",
+ "version": "1.8.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@mapbox/point-geometry": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
- "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI="
- },
- "@mapbox/vector-tile": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.0.tgz",
- "integrity": "sha1-xJX5clJb78zvzYOPRf+jfvO3D+g=",
- "requires": {
- "@mapbox/point-geometry": "0.1.0"
- }
- },
"abbrev": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
- "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"accepts": {
"version": "1.3.3",
@@ -32,9 +19,9 @@
}
},
"acorn": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
- "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w=="
},
"after": {
"version": "0.8.2",
@@ -118,9 +105,9 @@
"integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
},
"aproba": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz",
- "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
"archiver": {
"version": "2.0.3",
@@ -212,9 +199,9 @@
"integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
},
"arraybuffer.slice": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
- "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco="
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
},
"asn1": {
"version": "0.2.3",
@@ -234,6 +221,11 @@
"lodash": "4.17.4"
}
},
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -250,9 +242,9 @@
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
},
"babylon": {
- "version": "7.0.0-beta.24",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.24.tgz",
- "integrity": "sha512-k1yiJYz1Zt6/xfxx0OC7obTNOF5WktZ8P8z1y+7kwP4INOygqqgzolO5fse4jYIb3CzHyU7WNC38EjYa1wjEGQ=="
+ "version": "7.0.0-beta.19",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
+ "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A=="
},
"backo2": {
"version": "1.0.2",
@@ -612,36 +604,44 @@
}
},
"closure-util": {
- "version": "1.22.0",
- "resolved": "https://registry.npmjs.org/closure-util/-/closure-util-1.22.0.tgz",
- "integrity": "sha512-DX5IhSawO9838/fKNaH3Cx8jeeJGWORodHhTFkxCOVsr71OtXCfo/rtXsV24eq3iq31jdmgUQvlNIXEMHTlkWg==",
+ "version": "1.26.0",
+ "resolved": "https://registry.npmjs.org/closure-util/-/closure-util-1.26.0.tgz",
+ "integrity": "sha512-zpWABEochWrY48soiEttuqJk/OSYscS9PcvKgHvKUefM29+R8rqx5Bp8KIZHR0Nsq1JrNgxg2VTmJ/IsqN5VOA==",
"requires": {
- "acorn": "5.0.3",
- "async": "2.5.0",
- "fs-extra": "3.0.1",
+ "acorn": "5.2.1",
+ "async": "2.6.0",
+ "fs-extra": "4.0.2",
"gaze": "1.1.2",
"get-down": "1.2.0",
"glob": "7.1.2",
"graceful-fs": "4.1.11",
- "handlebars": "4.0.10",
+ "handlebars": "4.0.11",
"lodash": "4.17.4",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"nomnom": "1.8.1",
"npmlog": "4.1.2",
- "rimraf": "2.6.1",
- "send": "0.15.3",
- "socket.io": "2.0.1",
+ "rimraf": "2.6.2",
+ "send": "0.16.1",
+ "socket.io": "2.0.4",
"temp": "github:adam-lynch/node-temp#279c1350cb7e4f02515d91da9e35d39a40774016"
},
"dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
"fs-extra": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
- "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz",
+ "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
"requires": {
"graceful-fs": "4.1.11",
- "jsonfile": "3.0.1",
+ "jsonfile": "4.0.0",
"universalify": "0.1.1"
}
},
@@ -664,12 +664,20 @@
}
},
"jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "4.1.11"
}
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "7.1.2"
+ }
}
}
},
@@ -1572,23 +1580,23 @@
}
},
"engine.io": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.1.tgz",
- "integrity": "sha1-CAUf+5UZB6MmfnLgvLPQ83fkZgs=",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz",
+ "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=",
"requires": {
"accepts": "1.3.3",
"base64id": "1.0.0",
"cookie": "0.3.1",
- "debug": "2.6.8",
- "engine.io-parser": "2.1.1",
+ "debug": "2.6.9",
+ "engine.io-parser": "2.1.2",
"uws": "0.14.5",
- "ws": "2.3.1"
+ "ws": "3.3.3"
},
"dependencies": {
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -1601,28 +1609,27 @@
}
},
"engine.io-client": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.1.tgz",
- "integrity": "sha1-QVqYUrrbFPoAj6PvHjFgjbZ2EyU=",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz",
+ "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=",
"requires": {
"component-emitter": "1.2.1",
"component-inherit": "0.0.3",
- "debug": "2.6.8",
- "engine.io-parser": "2.1.1",
+ "debug": "2.6.9",
+ "engine.io-parser": "2.1.2",
"has-cors": "1.1.0",
"indexof": "0.0.1",
- "parsejson": "0.0.3",
"parseqs": "0.0.5",
"parseuri": "0.0.5",
- "ws": "2.3.1",
- "xmlhttprequest-ssl": "1.5.3",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.4",
"yeast": "0.1.2"
},
"dependencies": {
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -1635,12 +1642,12 @@
}
},
"engine.io-parser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.1.tgz",
- "integrity": "sha1-4Ps/DgRi9/WLt3waUun1p+JuRmg=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
"requires": {
"after": "0.8.2",
- "arraybuffer.slice": "0.0.6",
+ "arraybuffer.slice": "0.0.7",
"base64-arraybuffer": "0.1.5",
"blob": "0.0.4",
"has-binary2": "1.0.2"
@@ -1927,9 +1934,9 @@
}
},
"fresh": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz",
- "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44="
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fs-exists-sync": {
"version": "0.1.0",
@@ -1958,7 +1965,7 @@
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"requires": {
- "aproba": "1.1.2",
+ "aproba": "1.2.0",
"console-control-strings": "1.1.0",
"has-unicode": "2.0.1",
"object-assign": "4.1.1",
@@ -2410,9 +2417,9 @@
}
},
"handlebars": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz",
- "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=",
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
"requires": {
"async": "1.5.2",
"optimist": "0.6.1",
@@ -2880,17 +2887,17 @@
"optional": true
},
"jsdoc": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.4.tgz",
- "integrity": "sha512-VmTw0J+2L16IxAe0JSDSAcH0F+DbZxaj8wN1AjHtKMQU/hO0ciIl5ZE93XqrrFIbknobuqHKJCXZj6+Hk57MjA==",
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
+ "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
"requires": {
- "babylon": "7.0.0-beta.24",
- "bluebird": "3.5.0",
+ "babylon": "7.0.0-beta.19",
+ "bluebird": "3.5.1",
"catharsis": "0.8.9",
"escape-string-regexp": "1.0.5",
"js2xmlparser": "3.0.0",
"klaw": "2.0.0",
- "marked": "0.3.6",
+ "marked": "0.3.9",
"mkdirp": "0.5.1",
"requizzle": "0.2.1",
"strip-json-comments": "2.0.1",
@@ -2899,9 +2906,9 @@
},
"dependencies": {
"bluebird": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
- "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw="
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
},
"klaw": {
"version": "2.0.0",
@@ -3187,7 +3194,7 @@
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz",
"integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==",
"requires": {
- "vlq": "0.2.2"
+ "vlq": "0.2.3"
}
},
"make-dir": {
@@ -3211,9 +3218,9 @@
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
},
"marked": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz",
- "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc="
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.9.tgz",
+ "integrity": "sha512-nW5u0dxpXxHfkHzzrveY45gCbi+R4PaO4WRZYqZNl+vB0hVGeqlFn0aOg1c8AKL63TrNFn9Bm2UP4AdiZ9TPLw=="
},
"merge": {
"version": "1.2.0",
@@ -3254,9 +3261,9 @@
}
},
"mime": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
- "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
},
"mime-db": {
"version": "1.30.0",
@@ -3300,9 +3307,9 @@
}
},
"minizlib": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.0.3.tgz",
- "integrity": "sha1-1cGr93vhVGGZUuJTM27Mq5sqMvU=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
+ "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
"requires": {
"minipass": "2.2.1"
}
@@ -3414,7 +3421,7 @@
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"requires": {
- "abbrev": "1.1.0"
+ "abbrev": "1.1.1"
}
},
"normalize-path": {
@@ -3617,41 +3624,48 @@
}
},
"openlayers": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/openlayers/-/openlayers-4.3.3.tgz",
- "integrity": "sha512-hFOPwplmgjgCyIrnXoVixtZeZ4mog84xpI9PLoXWiyO7iGmIH3/XxhBPuSLuvrHg+/huoFzA0OckRLvr3T2DAg==",
- "requires": {
- "@mapbox/vector-tile": "1.3.0",
- "async": "2.5.0",
- "closure-util": "1.22.0",
- "fs-extra": "4.0.1",
- "jsdoc": "3.5.4",
+ "version": "4.6.4",
+ "resolved": "https://registry.npmjs.org/openlayers/-/openlayers-4.6.4.tgz",
+ "integrity": "sha512-Oru7/xniirjech7H5zkMQSUj/JUymNveiE4vAwmyjAmcoNyO4zTRD/Pp7BPfxBPuAz45vDl78H1wEQD7RGWkGg==",
+ "requires": {
+ "async": "2.6.0",
+ "closure-util": "1.26.0",
+ "fs-extra": "4.0.3",
+ "jsdoc": "3.5.5",
"nomnom": "1.8.1",
- "pbf": "3.0.5",
+ "pbf": "3.1.0",
"pixelworks": "1.1.0",
"rbush": "2.0.1",
- "rollup": "0.47.6",
- "rollup-plugin-cleanup": "1.0.1",
- "rollup-plugin-commonjs": "8.2.1",
+ "rollup": "0.52.3",
+ "rollup-plugin-cleanup": "2.0.0",
+ "rollup-plugin-commonjs": "8.2.6",
"rollup-plugin-node-resolve": "3.0.0",
"temp": "github:adam-lynch/node-temp#279c1350cb7e4f02515d91da9e35d39a40774016",
"walk": "2.3.9"
},
"dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
"fs-extra": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz",
- "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"requires": {
"graceful-fs": "4.1.11",
- "jsonfile": "3.0.1",
+ "jsonfile": "4.0.0",
"universalify": "0.1.1"
}
},
"jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "4.1.11"
}
@@ -3836,14 +3850,6 @@
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
},
- "parsejson": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
- "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
- "requires": {
- "better-assert": "1.0.2"
- }
- },
"parseqs": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
@@ -3899,9 +3905,9 @@
"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
},
"pbf": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.0.5.tgz",
- "integrity": "sha1-JPD6LL6xblxWpZAbt+nCrAyAWb4=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz",
+ "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==",
"requires": {
"ieee754": "1.1.8",
"resolve-protobuf-schema": "2.0.0"
@@ -4054,9 +4060,9 @@
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
},
"quickselect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.0.0.tgz",
- "integrity": "sha1-AmMIGPmq5OyrJvAQP5jQYcF8WPM="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.0.1.tgz",
+ "integrity": "sha512-Jt30UQSzTbxf6L2bFTMabHtGtYUzQcvOY0a+s5brm8tzndV/XWifBIH9v5QKtH5gGCZ5RRDwRhdhGMDVHAEGNQ=="
},
"randomatic": {
"version": "1.1.7",
@@ -4105,7 +4111,7 @@
"resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.1.tgz",
"integrity": "sha1-TPrKKMMGS8DudUMaG3mZDode76k=",
"requires": {
- "quickselect": "1.0.0"
+ "quickselect": "1.0.1"
}
},
"rc": {
@@ -4308,14 +4314,14 @@
}
},
"rollup": {
- "version": "0.47.6",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.47.6.tgz",
- "integrity": "sha512-bH3eWh7MzbiKTQcHQN7Ievqbs/yY7T+ZcJYboBYkp7BkRlAr2DXHPfiqlvlEH/M95giEBpinHEi/s9CVIgYT6w=="
+ "version": "0.52.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.52.3.tgz",
+ "integrity": "sha512-cw+vb9NqaTXlwJyb8G+Ve+uhhlVTcl1NKBkfANdeQqVcpZFilQgeNnAnNiu7MwfeXrqiKEGz+3R03a3zeFkmEQ=="
},
"rollup-plugin-cleanup": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-1.0.1.tgz",
- "integrity": "sha1-ygVsdP5uoheD+ZhRljsXPL6Ok1k=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-2.0.0.tgz",
+ "integrity": "sha1-hZdzGaO/VHUKnXX7kJx+UfWaLaQ=",
"requires": {
"acorn": "4.0.13",
"magic-string": "0.22.4",
@@ -4330,26 +4336,21 @@
}
},
"rollup-plugin-commonjs": {
- "version": "8.2.1",
- "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.1.tgz",
- "integrity": "sha512-ZTwAetmKimCsuWost/+n4FaOpMoczBRTx+kuQaZCIKXTx/R1wNBezuX5NS0vnPKM3hBoErdpAqmNyVSCi5XKbg==",
+ "version": "8.2.6",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.6.tgz",
+ "integrity": "sha512-qK0+uhktmnAgZkHkqFuajNmPw93fjrO7+CysDaxWE5jrUR9XSlSvuao5ZJP+XizxA8weakhgYYBtbVz9SGBpjA==",
"requires": {
- "acorn": "5.1.2",
- "estree-walker": "0.5.0",
+ "acorn": "5.2.1",
+ "estree-walker": "0.5.1",
"magic-string": "0.22.4",
"resolve": "1.4.0",
"rollup-pluginutils": "2.0.1"
},
"dependencies": {
- "acorn": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz",
- "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA=="
- },
"estree-walker": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.0.tgz",
- "integrity": "sha512-/bEAy+yKAZQrEWUhGmS3H9XpGqSDBtRzX0I2PgMw9kA2n1jN22uV5B5p7MFdZdvWdXCRJztXAfx6ZeRfgkEETg=="
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.1.tgz",
+ "integrity": "sha512-7HgCgz1axW7w5aOvgOQkoR1RMBkllygJrssU3BvymKQ95lxXYv6Pon17fBRDm9qhkvXZGijOULoSF9ShOk/ZLg=="
}
}
},
@@ -4416,19 +4417,19 @@
}
},
"send": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz",
- "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=",
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
"requires": {
- "debug": "2.6.7",
+ "debug": "2.6.9",
"depd": "1.1.1",
"destroy": "1.0.4",
"encodeurl": "1.0.1",
"escape-html": "1.0.3",
"etag": "1.8.1",
- "fresh": "0.5.0",
+ "fresh": "0.5.2",
"http-errors": "1.6.2",
- "mime": "1.3.4",
+ "mime": "1.4.1",
"ms": "2.0.0",
"on-finished": "2.3.0",
"range-parser": "1.2.0",
@@ -4436,9 +4437,9 @@
},
"dependencies": {
"debug": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
- "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -4548,22 +4549,21 @@
}
},
"socket.io": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.1.tgz",
- "integrity": "sha1-BkwSUXhGLkd6bfI9L9rRjdHFkU8=",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz",
+ "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=",
"requires": {
- "debug": "2.6.8",
- "engine.io": "3.1.1",
- "object-assign": "4.1.1",
+ "debug": "2.6.9",
+ "engine.io": "3.1.4",
"socket.io-adapter": "1.1.1",
- "socket.io-client": "2.0.1",
+ "socket.io-client": "2.0.4",
"socket.io-parser": "3.1.2"
},
"dependencies": {
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -4581,36 +4581,37 @@
"integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs="
},
"socket.io-client": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.1.tgz",
- "integrity": "sha1-HVL4x0Zgxou2aVlT+hGZcRVfrZM=",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
+ "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
"requires": {
"backo2": "1.0.2",
"base64-arraybuffer": "0.1.5",
"component-bind": "1.0.0",
"component-emitter": "1.2.1",
- "debug": "2.6.4",
- "engine.io-client": "3.1.1",
+ "debug": "2.6.9",
+ "engine.io-client": "3.1.4",
"has-cors": "1.1.0",
"indexof": "0.0.1",
"object-component": "0.0.3",
+ "parseqs": "0.0.5",
"parseuri": "0.0.5",
"socket.io-parser": "3.1.2",
"to-array": "0.1.4"
},
"dependencies": {
"debug": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz",
- "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
- "ms": "0.7.3"
+ "ms": "2.0.0"
}
},
"ms": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
- "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -4620,15 +4621,15 @@
"integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=",
"requires": {
"component-emitter": "1.2.1",
- "debug": "2.6.8",
+ "debug": "2.6.9",
"has-binary2": "1.0.2",
"isarray": "2.0.1"
},
"dependencies": {
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -4845,7 +4846,7 @@
"integrity": "sha512-TKJKz1fqBOZBaIQ/MGRKU0EnTGmKMLy4ReTRgP10AgtfOWBbj9PBg4MgY80GFpqGbs2EzcIctW5gbwbP4woDYg==",
"requires": {
"minipass": "2.2.1",
- "minizlib": "1.0.3",
+ "minizlib": "1.1.0",
"mkdirp": "0.5.1",
"yallist": "3.0.2"
},
@@ -4993,7 +4994,7 @@
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
"requires": {
- "abbrev": "1.1.0"
+ "abbrev": "1.1.1"
}
}
}
@@ -5099,9 +5100,9 @@
"optional": true
},
"ultron": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz",
- "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
},
"unbzip2-stream": {
"version": "1.2.5",
@@ -5344,9 +5345,9 @@
}
},
"vlq": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz",
- "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE="
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow=="
},
"walk": {
"version": "2.3.9",
@@ -5425,19 +5426,13 @@
}
},
"ws": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz",
- "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
"requires": {
- "safe-buffer": "5.0.1",
- "ultron": "1.1.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
- "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c="
- }
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
}
},
"xdg-basedir": {
@@ -5464,9 +5459,9 @@
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
},
"xmlhttprequest-ssl": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
- "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0="
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz",
+ "integrity": "sha1-BPVgkVcks4kIhxXMDteBPpZ3v1c="
},
"xtend": {
"version": "4.0.1",
diff --git a/package.json b/package.json
index 19b56933..a484cffe 100755
--- a/package.json
+++ b/package.json
@@ -31,7 +31,7 @@
"jquery-ui-npm": "1.12.0",
"nw": "^0.25.4-sdk",
"nw-builder": "^3.4.1",
- "openlayers": "^4.3.3",
+ "openlayers": "^4.6.4",
"run-sequence": "^2.2.0",
"temp": "^0.8.3",
"three": "0.72.0"
diff --git a/src/css/tabs/mission_planer.css b/src/css/tabs/mission_planer.css
new file mode 100644
index 00000000..40bd7f7b
--- /dev/null
+++ b/src/css/tabs/mission_planer.css
@@ -0,0 +1,122 @@
+.tab-calibration .content_toolbar {
+ height: 100px;
+}
+
+.tab-mission-control .waypoint {
+ padding-left: 19px;
+ padding-right: 19px;
+ /*padding-bottom: 10px;*/
+}
+.tab-mission-control .waypoint-left {
+ width: 54%;
+ float: left;
+ padding-right: 5px;
+}
+.tab-mission-control .waypoint-right{
+ width: 40%;
+ float: right;
+}
+
+.tab-mission-control .checksfail {
+ /*float: right;*/
+ margin-top: 3px;
+ height: 15px;
+ width: 15px;
+ background-image:url(../../../images/icons/nopass.svg);
+ background-size:contain;
+ background-position:center;
+ background-repeat:no-repeat;
+}
+
+.tab-mission-control input {
+ width: 115px;
+ padding-left: 3px;
+ height: 20px;
+ line-height: 20px;
+ text-align: left;
+ border: 1px solid silver;
+ border-radius: 3px;
+ margin-left: 11px;
+ font-size: 12px;
+ font-weight: normal;
+}
+
+.tab-mission-control .point {
+ display: inline-block;
+ margin-bottom: 5px;
+ margin-left: 5px;
+}
+
+.tab-mission-control .point-label {
+
+}
+
+@media (max-width: 1236px) {
+ .tab-mission-control .waypoint-left {
+ width: 96%;
+ }
+ .tab-mission-control .waypoint-right{
+ width: 96%;
+ float: left;
+ padding-right: 19px;
+ }
+ .tab-mission-control .content_toolbar {
+ height: 240px;
+ }
+ .tab-mission-control .content_wrapper {
+ height: calc(100% - 240px);
+ }
+}
+
+/* Need test! */
+.tab-mission-control .content_toolbar {
+ display: flex;
+ /*height: 150px;*/
+ height: auto;
+ flex-direction: row;
+ justify-content: space-between;
+ flex-wrap: wrap;
+}
+
+.tab-mission-control .waypoint-left,
+.tab-mission-control .waypoint-right {
+ width: 47%;
+ float: none;
+}
+
+.tab-mission-control .btn.save_btn {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+
+.tab-mission-control .btn.save_btn a{
+ margin-top: 5px;
+}
+
+.tab-mission-control .gui_box{
+ width: 100%;
+ clear: both;
+ height: 90%;
+}
+
+.tab-mission-control.toolbar_fixed_bottom{
+ height: 100%;
+}
+/*.tab-mission-control .content_wrapper{*/
+ /*height: 100%;*/
+/*}*/
+#missionMap{
+ height: 100%;
+}
+
+@media (max-width: 1252px){
+ .tab-mission-control .waypoint-left,
+ .tab-mission-control .waypoint-right {
+ width: 100%;
+ }
+ .tab-mission-control .waypoint-right{
+ padding-right: 5px;
+ margin-top: 5px;
+ }
+}
diff --git a/tabs/mission_control.html b/tabs/mission_control.html
new file mode 100644
index 00000000..c7b04d66
--- /dev/null
+++ b/tabs/mission_control.html
@@ -0,0 +1,76 @@
+<div class="tab-mission-control toolbar_fixed_bottom">
+ <div class="content_wrapper">
+ <div id="missionMap"></div>
+ <div id="notLoadMap" data-i18n="useOnlyStandalone" style="display: none;"></div>
+ </div>
+ <div class="content_toolbar" id="missionControls">
+ <div class="waypoint waypoint-left">
+ <div class="gui_box" style="padding-bottom: 10px">
+ <div class="gui_box_titlebar">
+ <div class="spacer_box_title i18n-replaced" data-i18n="editPointHead">Edit point</div>
+ </div>
+ <div class="spacer">
+ <input type="hidden" name="pointNumber" value="">
+ <div class="point">
+ <select name="type" id="pointType">
+ <!--<option value="1">Home</option>-->
+ <option value="1">Waypoint</option>
+ <option value="4">RTH</option>
+ </select>
+ </div>
+ <div class="point">
+ <label class="point-label" for="pointLat">Lat: </label>
+ <input id="pointLat" type="text" value="0.0" required>
+ </div>
+ <div class="point">
+ <label class="point-label" for="pointLon">Lon: </label>
+ <input id="pointLon" type="text" value="0.0" required>
+ </div>
+ <div class="point">
+ <label class="point-label" for="pointAlt">Alt (cm): </label>
+ <input id="pointAlt" type="text" value="0" required>
+ </div>
+ <div>
+ <div id="savePoint" class="btn save_btn" style="padding-top: 10px; display: inline-block">
+ <a class="save" href="#" data-i18n="editPointButtonSave" style="float: left">Save</a>
+ </div>
+ <div id="removePoint" class="btn btn-danger" style="padding-top: 10px; display: inline-block;">
+ <a class="save" href="#" data-i18n="editPointButtonRemove" style="float: left">Remove</a>
+ </div>
+ <div id="removeAllPoints" class="btn btn-danger" style="padding-top: 10px; display: inline-block">
+ <a class="save" href="#" data-i18n="removeAllPointButtonSave" style="float: left">Remove all points</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="waypoint waypoint-right">
+ <div class="gui_box" style="padding-bottom: 10px">
+ <div class="gui_box_titlebar">
+ <div class="spacer_box_title i18n-replaced" data-i18n="missionTotalInformationHead">Total information</div>
+ </div>
+ <div class="spacer">
+ <div>
+ <span>Distance (m):</span>
+ <span id="missionDistance"></span>
+ </div>
+ <div>
+ <span>Available Points</span>
+ <span id="availablePoints">0/0</span>
+ </div>
+ <div>
+ <span>Mission valid</span>
+ <div id="missionValid" style="display: inline-block"></div>
+ </div>
+
+ <div class="btn save_btn">
+ <a id="loadMissionButton" class="save" href="#" data-i18n="loadMissionButton"></a>
+ <a id="saveMissionButton" class="save" href="#" data-i18n="saveMissionButton"></a>
+ <a id="loadEepromMissionButton" class="save" href="#" data-i18n="loadEepromMissionButton">Load Eeprom mission</a>
+ <a id="saveEepromMissionButton" class="save" href="#" data-i18n="saveEepromMissionButton">Save Eeprom mission</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/tabs/mission_control.js b/tabs/mission_control.js
new file mode 100644
index 00000000..c438b199
--- /dev/null
+++ b/tabs/mission_control.js
@@ -0,0 +1,474 @@
+'use strict';
+
+TABS.mission_control = {};
+TABS.mission_control.isYmapLoad = false;
+TABS.mission_control.initialize = function (callback) {
+
+ if (GUI.active_tab != 'mission_control') {
+ GUI.active_tab = 'mission_control';
+ googleAnalytics.sendAppView('Mission Control');
+ }
+
+ var loadChainer = new MSPChainerClass();
+ loadChainer.setChain([
+ mspHelper.getMissionInfo
+ ]);
+ loadChainer.setExitPoint(loadHtml);
+ loadChainer.execute();
+
+ function updateTotalInfo() {
+ $('#availablePoints').text(MISSION_PLANER.countBusyPoints + '/' + MISSION_PLANER.maxWaypoints);
+ $('#missionValid').html(MISSION_PLANER.isValidMission ? chrome.i18n.getMessage('armingCheckPass') : chrome.i18n.getMessage('armingCheckFail'));
+ }
+
+ function loadHtml() {
+ $('#content').load("./tabs/mission_control.html", process_html);
+ }
+
+ function process_html() {
+ if (typeof require !== "undefined") {
+ initMap();
+ } else {
+ $('#missionMap, #missionControls').hide();
+ $('#notLoadMap').show();
+ }
+ localize();
+
+ GUI.content_ready(callback);
+ }
+
+ var markers = [];
+ var lines = [];
+ var map;
+ var selectedMarker;
+ var pointForSend = 0;
+
+ function clearEditForm() {
+ $('#pointLat').val('');
+ $('#pointLon').val('');
+ $('#pointAlt').val('');
+ $('[name=pointNumber]').val('')
+ }
+
+ function repaint() {
+ var oldPos;
+ for (var i in lines) {
+ map.removeLayer(lines[i]);
+ }
+ lines = [];
+ $('#missionDistance').text(0);
+
+ map.getLayers().forEach(function (t) {
+ //feature.getGeometry().getType()
+ if (t instanceof ol.layer.Vector && typeof t.alt !== 'undefined') {
+ var geometry = t.getSource().getFeatures()[0].getGeometry();
+ if (typeof oldPos !== 'undefined') {
+ paintLine(oldPos, geometry.getCoordinates());
+ }
+
+ oldPos = geometry.getCoordinates();
+ }
+ });
+ }
+
+ function paintLine(pos1, pos2) {
+ var line = new ol.geom.LineString([pos1, pos2]);
+
+ var feature = new ol.Feature({
+ geometry: line
+ });
+ feature.setStyle(new ol.style.Style({
+ stroke: new ol.style.Stroke({
+ color: '#1497f1',
+ width: 3
+ })
+ }));
+
+ var vectorSource = new ol.source.Vector({
+ features: [feature]
+ });
+
+ var vectorLayer = new ol.layer.Vector({
+ source: vectorSource
+ });
+
+ lines.push(vectorLayer);
+
+ var length = ol.Sphere.getLength(line) + parseFloat($('#missionDistance').text());
+ $('#missionDistance').text(length.toFixed(3));
+
+ map.addLayer(vectorLayer);
+ }
+
+ function addMarker(_pos, _alt, _action) {
+ var iconFeature = new ol.Feature({
+ geometry: new ol.geom.Point(_pos),
+ name: 'Null Island',
+ population: 4000,
+ rainfall: 500
+ });
+
+ var iconStyle = new ol.style.Style({
+ image: new ol.style.Icon(({
+ anchor: [0.5, 1],
+ opacity: 1,
+ scale: 0.5,
+ src: '../images/icons/cf_icon_position.png'
+ }))
+// text: new ol.style.Text({
+// text: '10',
+// offsetX: -1,
+// offsetY: -30,
+// overflow: true,
+// scale: 2,
+// fill: new ol.style.Fill({
+// color: 'black'
+// })
+// })
+ });
+
+ iconFeature.setStyle(iconStyle);
+
+ var vectorSource = new ol.source.Vector({
+ features: [iconFeature]
+ });
+
+ var vectorLayer = new ol.layer.Vector({
+ source: vectorSource
+ });
+
+ vectorLayer.alt = _alt;
+ vectorLayer.number = markers.length;
+ vectorLayer.action = _action;
+
+ markers.push(vectorLayer);
+
+ return vectorLayer;
+ }
+
+ function initMap() {
+ // var center = ol.proj.fromLonLat([e.data.lon, e.data.lat]);
+ //
+ // mapView.setCenter(center);
+ // iconGeometry.setCoordinates(center);
+
+ var app = {};
+
+ /**
+ * @constructor
+ * @extends {ol.interaction.Pointer}
+ */
+ app.Drag = function () {
+
+ ol.interaction.Pointer.call(this, {
+ handleDownEvent: app.Drag.prototype.handleDownEvent,
+ handleDragEvent: app.Drag.prototype.handleDragEvent,
+ handleMoveEvent: app.Drag.prototype.handleMoveEvent,
+ handleUpEvent: app.Drag.prototype.handleUpEvent
+ });
+
+ /**
+ * @type {ol.Pixel}
+ * @private
+ */
+ this.coordinate_ = null;
+
+ /**
+ * @type {string|undefined}
+ * @private
+ */
+ this.cursor_ = 'pointer';
+
+ /**
+ * @type {ol.Feature}
+ * @private
+ */
+ this.feature_ = null;
+
+ /**
+ * @type {string|undefined}
+ * @private
+ */
+ this.previousCursor_ = undefined;
+
+ };
+ ol.inherits(app.Drag, ol.interaction.Pointer);
+
+
+ /**
+ * @param {ol.MapBrowserEvent} evt Map browser event.
+ * @return {boolean} `true` to start the drag sequence.
+ */
+ app.Drag.prototype.handleDownEvent = function (evt) {
+ var map = evt.map;
+
+ var feature = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return feature;
+ });
+
+ if (feature) {
+ this.coordinate_ = evt.coordinate;
+ this.feature_ = feature;
+ }
+
+ return !!feature;
+ };
+
+ /**
+ * @param {ol.MapBrowserEvent} evt Map browser event.
+ */
+ app.Drag.prototype.handleDragEvent = function (evt) {
+ var map = evt.map;
+
+ var feature = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return feature;
+ });
+
+ var deltaX = evt.coordinate[0] - this.coordinate_[0];
+ var deltaY = evt.coordinate[1] - this.coordinate_[1];
+
+ var geometry = /** @type {ol.geom.SimpleGeometry} */
+ (this.feature_.getGeometry());
+ geometry.translate(deltaX, deltaY);
+
+ this.coordinate_[0] = evt.coordinate[0];
+ this.coordinate_[1] = evt.coordinate[1];
+ repaint();
+ };
+
+
+ /**
+ * @param {ol.MapBrowserEvent} evt Event.
+ */
+ app.Drag.prototype.handleMoveEvent = function (evt) {
+ if (this.cursor_) {
+ var map = evt.map;
+ var feature = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return feature;
+ });
+ var element = evt.map.getTargetElement();
+ if (feature) {
+ if (element.style.cursor != this.cursor_) {
+ this.previousCursor_ = element.style.cursor;
+ element.style.cursor = this.cursor_;
+ }
+ } else if (this.previousCursor_ !== undefined) {
+ element.style.cursor = this.previousCursor_;
+ this.previousCursor_ = undefined;
+ }
+ }
+ };
+
+
+ /**
+ * @param {ol.MapBrowserEvent} evt Map browser event.
+ * @return {boolean} `false` to stop the drag sequence.
+ */
+ app.Drag.prototype.handleUpEvent = function (evt) {
+ this.coordinate_ = null;
+ this.feature_ = null;
+ return false;
+ };
+
+ var lat = GPS_DATA.lat / 10000000;
+ var lon = GPS_DATA.lon / 10000000;
+
+ map = new ol.Map({
+ interactions: ol.interaction.defaults().extend([new app.Drag()]),
+ layers: [
+ new ol.layer.Tile({
+ source: new ol.source.OSM()
+ })
+ ],
+ target: document.getElementById('missionMap'),
+ view: new ol.View({
+ center: ol.proj.fromLonLat([lon, lat]),
+ zoom: 14
+ })
+ });
+
+ map.on('click', function (evt) {
+ var selectedFeature = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return feature;
+ });
+ selectedMarker = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return layer;
+ });
+ if (selectedFeature) {
+ var geometry = selectedFeature.getGeometry();
+ var coord = ol.proj.toLonLat(geometry.getCoordinates());
+
+ $('#pointLat').val(coord[0]);
+ $('#pointLon').val(coord[1]);
+ $('#pointAlt').val(selectedMarker.alt);
+ $('#pointType').val(selectedMarker.action);
+ } else {
+ map.addLayer(addMarker(evt.coordinate, 1500, 1));
+ repaint();
+ }
+ });
+
+ // change mouse cursor when over marker
+ $(map.getViewport()).on('mousemove', function (e) {
+ var pixel = map.getEventPixel(e.originalEvent);
+ var hit = map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+ return true;
+ });
+ if (hit) {
+ map.getTarget().style.cursor = 'pointer';
+ } else {
+ map.getTarget().style.cursor = '';
+ }
+ });
+
+ $('#removeAllPoints').on('click', function () {
+ if (confirm(chrome.i18n.getMessage('confirm_delete_all_points'))) {
+ removeAllPoints();
+ }
+ });
+
+ $('#removePoint').on('click', function () {
+ if (selectedMarker) {
+
+ var tmp = [];
+ for (var i in markers) {
+ if (markers[i] !== selectedMarker && typeof markers[i].action !== "undefined") {
+ tmp.push(markers[i]);
+ }
+ }
+ map.removeLayer(selectedMarker);
+ markers = tmp;
+ selectedMarker = null;
+
+ clearEditForm();
+ repaint();
+ }
+ });
+
+ $('#savePoint').on('click', function () {
+ if (selectedMarker) {
+ map.getLayers().forEach(function (t) {
+ if (t === selectedMarker) {
+ var geometry = t.getSource().getFeatures()[0].getGeometry();
+ geometry.setCoordinates(ol.proj.fromLonLat([parseFloat($('#pointLat').val()), parseFloat($('#pointLon').val())]));
+ t.alt = $('#pointAlt').val();
+ t.action = $('#pointType').val();
+ }
+ });
+
+ selectedMarker = null;
+ clearEditForm();
+ repaint();
+ }
+ });
+
+ $('#loadMissionButton').on('click', function () {
+ removeAllPoints();
+ $(this).addClass('disabled');
+ GUI.log('Start get point');
+
+ pointForSend = 0;
+ getNextPoint();
+ });
+
+ $('#saveMissionButton').on('click', function () {
+ $(this).addClass('disabled');
+ GUI.log('Start send point');
+
+ pointForSend = 0;
+ sendNextPoint();
+ });
+
+ $('#loadEepromMissionButton').on('click', function () {
+ GUI.log(chrome.i18n.getMessage('eeprom_load_ok'));
+
+ MSP.send_message(MSPCodes.MSP_WP_MISSION_LOAD, false, getPointsFromEprom);
+ });
+ $('#saveEepromMissionButton').on('click', function () {
+ GUI.log(chrome.i18n.getMessage('eeprom_saved_ok'));
+ MSP.send_message(MSPCodes.MSP_WP_MISSION_SAVE, false, false);
+ });
+
+ updateTotalInfo();
+ }
+
+ function removeAllPoints() {
+ for (var i in markers) {
+ map.removeLayer(markers[i]);
+ }
+ markers = [];
+ clearEditForm();
+ repaint();
+ }
+
+ function getPointsFromEprom() {
+ pointForSend = 0;
+ MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, getNextPoint);
+ }
+
+
+ function getNextPoint() {
+ var coord;
+ if (pointForSend > 0) {
+ // console.log(MISSION_PLANER.bufferPoint.lon);
+ // console.log(MISSION_PLANER.bufferPoint.lat);
+ // console.log(MISSION_PLANER.bufferPoint.alt);
+ // console.log(MISSION_PLANER.bufferPoint.action);
+
+ coord = ol.proj.fromLonLat([MISSION_PLANER.bufferPoint.lon, MISSION_PLANER.bufferPoint.lat]);
+ map.addLayer(addMarker(coord, MISSION_PLANER.bufferPoint.alt, MISSION_PLANER.bufferPoint.action));
+ }
+
+ if (pointForSend >= MISSION_PLANER.countBusyPoints) {
+ GUI.log('End get point');
+ $('#loadMissionButton').removeClass('disabled');
+ map.getView().setCenter(coord);
+ repaint();
+ updateTotalInfo();
+ return;
+ }
+
+ MISSION_PLANER.bufferPoint.number = pointForSend;
+
+ pointForSend++;
+
+ MSP.send_message(MSPCodes.MSP_WP, mspHelper.crunch(MSPCodes.MSP_WP), false, getNextPoint);
+ }
+
+ function sendNextPoint() {
+ if (pointForSend >= markers.length) {
+ GUI.log('End send point');
+
+ MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, updateTotalInfo);
+
+ $('#saveMissionButton').removeClass('disabled');
+ return;
+ }
+
+ var geometry = markers[pointForSend].getSource().getFeatures()[0].getGeometry();
+ var coordinate = ol.proj.toLonLat(geometry.getCoordinates());
+
+ MISSION_PLANER.bufferPoint.number = pointForSend + 1;
+ MISSION_PLANER.bufferPoint.action = markers[pointForSend].action;
+ MISSION_PLANER.bufferPoint.lon = parseInt(coordinate[0] * 10000000);
+ MISSION_PLANER.bufferPoint.lat = parseInt(coordinate[1] * 10000000);
+ MISSION_PLANER.bufferPoint.alt = markers[pointForSend].alt;
+ pointForSend++;
+ if (pointForSend >= markers.length) {
+ MISSION_PLANER.bufferPoint.endMission = 0xA5;
+ } else {
+ MISSION_PLANER.bufferPoint.endMission = 0;
+ }
+
+ MSP.send_message(MSPCodes.MSP_SET_WP, mspHelper.crunch(MSPCodes.MSP_SET_WP), false, sendNextPoint);
+ }
+};
+
+TABS.mission_control.cleanup = function (callback) {
+ if (callback) callback();
+}; \ No newline at end of file