From 0724d9200e54d948e2463835f5b61d04ab36bf84 Mon Sep 17 00:00:00 2001 From: Manuel Kasper Date: Mon, 4 Dec 2023 16:26:02 +0100 Subject: [PATCH] Update dependencies, fix saving drawn tracks --- package-lock.json | 184 ++++----------------------- package.json | 2 +- src/components/MapDraw.vue | 9 +- src/components/SummitPhotosGroup.vue | 15 ++- 4 files changed, 40 insertions(+), 170 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b81710..293fb25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@dsb-norge/vue-keycloak-js": "github:manuelkasper/vue-keycloak-js#sotlas", + "@dwayneparton/geojson-to-gpx": "^0.0.30", "@fortawesome/fontawesome-svg-core": "^1.2.34", "@fortawesome/free-brands-svg-icons": "^5.15.2", "@fortawesome/free-solid-svg-icons": "^5.15.2", @@ -32,7 +33,6 @@ "node-vincenty": "0.0.6", "photoswipe": "^4.1.3", "proj4": "^2.7.2", - "togpx": "^0.5.4", "vue": "^2.7.14", "vue-clipboard2": "^0.3.1", "vue-debounce": "^2.6.0", @@ -1335,6 +1335,11 @@ "keycloak-js": "4.8.3" } }, + "node_modules/@dwayneparton/geojson-to-gpx": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@dwayneparton/geojson-to-gpx/-/geojson-to-gpx-0.0.30.tgz", + "integrity": "sha512-POg5xLwnZ3leGWwNVQzCZCNiuwFR/ijv++ejOJLB+N2yVIJbDNubyoyQ877F6DNsIH6sscXu4RSfSSzbVeD/FA==" + }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "0.2.36", "resolved": "https://npm.fontawesome.com/@fortawesome/fontawesome-common-types/-/0.2.36/fontawesome-common-types-0.2.36.tgz", @@ -3474,9 +3479,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -3865,23 +3870,6 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/bops": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz", - "integrity": "sha512-EWD8/Ei9o/h/wmR3w/YL/8dGKe4rSFHlaO8VNNcuXnjXjeTgxdcmhjPf9hRCYlqTrBPZbKaht+FxZKahcob5UQ==", - "dependencies": { - "base64-js": "0.0.2", - "to-utf8": "0.0.1" - } - }, - "node_modules/bops/node_modules/base64-js": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", - "integrity": "sha512-Pj9L87dCdGcKlSqPVUjD+q96pbIx1zQQLb2CUiWURfjiBELv84YX+0nGnKmyT/9KkC7PQk7UN1w+Al8bBozaxQ==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4373,9 +4361,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==", + "version": "1.0.30001566", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", + "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", "dev": true, "funding": [ { @@ -10080,14 +10068,6 @@ "node": "*" } }, - "node_modules/jxon": { - "version": "2.0.0-beta.5", - "resolved": "https://registry.npmjs.org/jxon/-/jxon-2.0.0-beta.5.tgz", - "integrity": "sha512-Ot7muZ0v2cmgQ1k+e6bpNcz6E3q2zHssvzYubbKTk5nIEvBLqJfiS6/uivU2ujqKZQlORcjKqcyx6D9X6BEAkQ==", - "dependencies": { - "xmldom": "^0.1.21" - } - }, "node_modules/kdbush": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", @@ -11981,14 +11961,6 @@ "node": ">=4" } }, - "node_modules/optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", - "dependencies": { - "wordwrap": "~0.0.2" - } - }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -16525,36 +16497,6 @@ "node": ">=0.10.0" } }, - "node_modules/to-utf8": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", - "integrity": "sha512-zks18/TWT1iHO3v0vFp5qLKOG27m67ycq/Y7a7cTiRuUNlc4gf3HGnkRgMv0NyhnfTamtkYBJl+YeD1/j07gBQ==" - }, - "node_modules/togpx": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/togpx/-/togpx-0.5.4.tgz", - "integrity": "sha512-1LY9ZjBrCYbcWfD63ZaqRw53U0tkigGC9fOdhRaTZH6yrmhlQGbbsEVTyCFzagvbPO36sZuBz0SrEQ+paaCPiw==", - "dependencies": { - "concat-stream": "~1.0.1", - "jxon": "~2.0.0-beta.5", - "optimist": "~0.3.5", - "xmldom": "~0.1.17" - }, - "bin": { - "togpx": "togpx" - } - }, - "node_modules/togpx/node_modules/concat-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", - "integrity": "sha512-nAHFsgeRVVvZ+aB3S1gLeN73fQ+tdOcw075BHbXMbC6MY0h6nqAkEeqPVCw8kRuDJJZDvaUjxI4jZv2FD0Tl8A==", - "engines": [ - "node >= 0.8.0" - ], - "dependencies": { - "bops": "0.0.6" - } - }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -18643,14 +18585,6 @@ "node": ">=0.10.0" } }, - "node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -18751,15 +18685,6 @@ "async-limiter": "~1.0.0" } }, - "node_modules/xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", - "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", - "engines": { - "node": ">=0.1" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -19861,6 +19786,11 @@ "keycloak-js": "4.8.3" } }, + "@dwayneparton/geojson-to-gpx": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@dwayneparton/geojson-to-gpx/-/geojson-to-gpx-0.0.30.tgz", + "integrity": "sha512-POg5xLwnZ3leGWwNVQzCZCNiuwFR/ijv++ejOJLB+N2yVIJbDNubyoyQ877F6DNsIH6sscXu4RSfSSzbVeD/FA==" + }, "@fortawesome/fontawesome-common-types": { "version": "0.2.36", "resolved": "https://npm.fontawesome.com/@fortawesome/fontawesome-common-types/-/0.2.36/fontawesome-common-types-0.2.36.tgz", @@ -21642,9 +21572,9 @@ "dev": true }, "axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -21961,22 +21891,6 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "bops": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz", - "integrity": "sha512-EWD8/Ei9o/h/wmR3w/YL/8dGKe4rSFHlaO8VNNcuXnjXjeTgxdcmhjPf9hRCYlqTrBPZbKaht+FxZKahcob5UQ==", - "requires": { - "base64-js": "0.0.2", - "to-utf8": "0.0.1" - }, - "dependencies": { - "base64-js": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", - "integrity": "sha512-Pj9L87dCdGcKlSqPVUjD+q96pbIx1zQQLb2CUiWURfjiBELv84YX+0nGnKmyT/9KkC7PQk7UN1w+Al8bBozaxQ==" - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -22385,9 +22299,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==", + "version": "1.0.30001566", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", + "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", "dev": true }, "case-sensitive-paths-webpack-plugin": { @@ -26873,14 +26787,6 @@ "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", "integrity": "sha512-ZJ6wx9xaKJ3yFUhq5/sk82PJMuUyLk277I8mQeyDgCTjGdjWJIvPfaU5LIXaMuaN2UO1X3kZH4+lgphublZUHw==" }, - "jxon": { - "version": "2.0.0-beta.5", - "resolved": "https://registry.npmjs.org/jxon/-/jxon-2.0.0-beta.5.tgz", - "integrity": "sha512-Ot7muZ0v2cmgQ1k+e6bpNcz6E3q2zHssvzYubbKTk5nIEvBLqJfiS6/uivU2ujqKZQlORcjKqcyx6D9X6BEAkQ==", - "requires": { - "xmldom": "^0.1.21" - } - }, "kdbush": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", @@ -28405,14 +28311,6 @@ } } }, - "optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", - "requires": { - "wordwrap": "~0.0.2" - } - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -32166,32 +32064,6 @@ "repeat-string": "^1.6.1" } }, - "to-utf8": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", - "integrity": "sha512-zks18/TWT1iHO3v0vFp5qLKOG27m67ycq/Y7a7cTiRuUNlc4gf3HGnkRgMv0NyhnfTamtkYBJl+YeD1/j07gBQ==" - }, - "togpx": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/togpx/-/togpx-0.5.4.tgz", - "integrity": "sha512-1LY9ZjBrCYbcWfD63ZaqRw53U0tkigGC9fOdhRaTZH6yrmhlQGbbsEVTyCFzagvbPO36sZuBz0SrEQ+paaCPiw==", - "requires": { - "concat-stream": "~1.0.1", - "jxon": "~2.0.0-beta.5", - "optimist": "~0.3.5", - "xmldom": "~0.1.17" - }, - "dependencies": { - "concat-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", - "integrity": "sha512-nAHFsgeRVVvZ+aB3S1gLeN73fQ+tdOcw075BHbXMbC6MY0h6nqAkEeqPVCw8kRuDJJZDvaUjxI4jZv2FD0Tl8A==", - "requires": { - "bops": "0.0.6" - } - } - } - }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -33856,11 +33728,6 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==" - }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -33945,11 +33812,6 @@ "async-limiter": "~1.0.0" } }, - "xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 0d25fbd..c4ba454 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@dsb-norge/vue-keycloak-js": "github:manuelkasper/vue-keycloak-js#sotlas", + "@dwayneparton/geojson-to-gpx": "^0.0.30", "@fortawesome/fontawesome-svg-core": "^1.2.34", "@fortawesome/free-brands-svg-icons": "^5.15.2", "@fortawesome/free-solid-svg-icons": "^5.15.2", @@ -34,7 +35,6 @@ "node-vincenty": "0.0.6", "photoswipe": "^4.1.3", "proj4": "^2.7.2", - "togpx": "^0.5.4", "vue": "^2.7.14", "vue-clipboard2": "^0.3.1", "vue-debounce": "^2.6.0", diff --git a/src/components/MapDraw.vue b/src/components/MapDraw.vue index fc94292..1be69c3 100644 --- a/src/components/MapDraw.vue +++ b/src/components/MapDraw.vue @@ -15,7 +15,7 @@ import MapboxDraw from '@mapbox/mapbox-gl-draw' import haversineDistance from 'haversine-distance' import cheapRuler from 'cheap-ruler' -import togpx from 'togpx' +import GeoJsonToGpx from '@dwayneparton/geojson-to-gpx' import moment from 'moment' import axios from 'axios' import utils from '../mixins/utils.js' @@ -295,8 +295,9 @@ export default { this.addElevations(all) .then(() => { loadingComponent.close() - let gpx = togpx(all) - let blob = new Blob([gpx], { type: 'application/gpx+xml' }) + let gpx = GeoJsonToGpx(all) + let gpxString = new XMLSerializer().serializeToString(gpx) + let blob = new Blob([gpxString], { type: 'application/gpx+xml' }) let url = window.URL.createObjectURL(blob) let link = document.createElement('a') link.download = 'sotlas-' + moment().format('YYYYMMDD-HHmmss') + '.gpx' @@ -454,7 +455,7 @@ export default { } let coordsSwapped = feature.geometry.coordinates.map(coord => [coord[1], coord[0]]) - return axios.post('https://ele.sotl.as/api', coordsSwapped) + return axios.post(process.env.VUE_APP_ELEVATION_API_URL, coordsSwapped) .then(result => { result.data.forEach((elevation, index) => { if (feature.geometry.coordinates[index].length === 2) { diff --git a/src/components/SummitPhotosGroup.vue b/src/components/SummitPhotosGroup.vue index dccdc08..cdc7b8f 100644 --- a/src/components/SummitPhotosGroup.vue +++ b/src/components/SummitPhotosGroup.vue @@ -13,12 +13,13 @@ import PictureSwipe from './PictureSwipe.vue' import utils from '../mixins/utils.js' import photos from '../mixins/photos.js' import moment from 'moment' -import togpx from 'togpx' +import GeoJsonToGpx from '@dwayneparton/geojson-to-gpx' export default { name: 'SummitPhotosGroup', props: { photos: Array, + title: String, summit: Object, editable: Boolean, showSummitName: Boolean, @@ -146,11 +147,17 @@ export default { return feature }) - let gpx = togpx({ + let options = { + metadata: { + name: 'Photos from ' + this.title + ' for ' + this.summit.name + ' (' + this.summit.code + ')' + } + } + let gpx = GeoJsonToGpx({ 'type': 'FeatureCollection', 'features': features - }) - let blob = new Blob([gpx], { type: 'application/gpx+xml' }) + }, options) + let gpxString = new XMLSerializer().serializeToString(gpx) + let blob = new Blob([gpxString], { type: 'application/gpx+xml' }) let url = window.URL.createObjectURL(blob) let link = document.createElement('a') link.download = 'photos-' + this.summit.code.replace('/', '_') + '-' + this.title + '.gpx'