diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 68a4d78a..a8cf5434 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -2319,5 +2319,29 @@ }, "downloadUpdatesBtn": { "message": "Download new app" + }, + "tabMissionControl": { + "message": "Mission Control" + }, + "loadMissionButton": { + "message": "Load mission" + }, + "saveMissionButton": { + "message": "Save mission" + }, + "editPointHead": { + "message": "Edit point" + }, + "editPointButtonSave": { + "message": "Save" + }, + "editPointButtonRemove": { + "message": "Remove" + }, + "removeAllPointButtonSave": { + "message": "Remove all points" + }, + "missionTotalInformationHead": { + "message": "Total information" } } 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/main.html b/main.html index f989e0c4..651e8cd5 100755 --- a/main.html +++ b/main.html @@ -1,9 +1,11 @@ - + + + @@ -14,7 +16,8 @@ @@ -185,6 +188,7 @@
  • +
  • @@ -199,7 +203,6 @@ title="Onboard Logging">
  • - 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==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/openlayers/-/openlayers-4.6.4.tgz", + "integrity": "sha512-Oru7/xniirjech7H5zkMQSUj/JUymNveiE4vAwmyjAmcoNyO4zTRD/Pp7BPfxBPuAz45vDl78H1wEQD7RGWkGg==", "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", + "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 2b5ae60f..ca6ef0c2 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..132f2b3d --- /dev/null +++ b/src/css/tabs/mission_planer.css @@ -0,0 +1,65 @@ +.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 .content_wrapper { + height: calc(100% - 150px); +} + +.tab-mission-control .content_toolbar { + height: 150px; +} + +.tab-mission-control input { + width: 157px; + 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; +} + +.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); + } +} \ No newline at end of file diff --git a/tabs/mission_control.html b/tabs/mission_control.html new file mode 100644 index 00000000..ea8f18ed --- /dev/null +++ b/tabs/mission_control.html @@ -0,0 +1,61 @@ +
    +
    +
    +
    +
    +
    +
    +
    +
    Edit point
    +
    +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + Save +
    +
    + Remove +
    + +
    +
    +
    +
    +
    +
    +
    +
    Total information
    +
    +
    +
    + Distance (m): + +
    +
    + Available Points +
    + + +
    +
    +
    +
    +
    diff --git a/tabs/mission_control.js b/tabs/mission_control.js new file mode 100644 index 00000000..d9c75eeb --- /dev/null +++ b/tabs/mission_control.js @@ -0,0 +1,356 @@ +'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'); + } + + function load_html() { + $('#content').load("./tabs/mission_control.html", process_html); + } + + load_html(); + + function process_html() { + initMap(); + localize(); + + GUI.content_ready(callback); + } + + var markers = []; + var lines = []; + var map; + var selectedMarker; + + 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) { + 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 = 0; + vectorLayer.number = markers.length; + + 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: 10 + }) + }); + + 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); + } else { + map.addLayer(addMarker(evt.coordinate)); + 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 () { + for (var i in markers) { + map.removeLayer(markers[i]); + } + markers = []; + clearEditForm(); + repaint(); + }); + + $('#removePoint').on('click', function () { + if (selectedMarker) { + map.removeLayer(selectedMarker); + var tmp = []; + for (var i in markers) { + if (markers[i] !== selectedMarker) { + tmp.push(markers[i]); + } + } + 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(); + } + }); + + selectedMarker = null; + clearEditForm(); + repaint(); + } + }); + } +}; + +TABS.mission_control.cleanup = function (callback) { + if (callback) callback(); +}; \ No newline at end of file