Let user download GPX trace from menu
This commit is contained in:
parent
05cb92d8e3
commit
d5dcf96af8
@ -15,6 +15,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"es6-promise": "^4.2.4",
|
"es6-promise": "^4.2.4",
|
||||||
|
"file-saver": "^1.3.8",
|
||||||
|
"gps-to-gpx": "^1.3.0",
|
||||||
"howler": "^2.0.14",
|
"howler": "^2.0.14",
|
||||||
"isomorphic-fetch": "^2.2.1",
|
"isomorphic-fetch": "^2.2.1",
|
||||||
"leaflet": "^1.3.1",
|
"leaflet": "^1.3.1",
|
||||||
|
31
src/App.vue
31
src/App.vue
@ -29,6 +29,9 @@
|
|||||||
<v-icon>more_vert</v-icon>
|
<v-icon>more_vert</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-list>
|
<v-list>
|
||||||
|
<v-list-tile @click="exportGPX" v-if="isExportGPXMenuEntryVisible">
|
||||||
|
<v-list-tile-title>{{ $t("menu.exportGPX") }}</v-list-tile-title>
|
||||||
|
</v-list-tile>
|
||||||
<v-list-tile @click="isShareMapViewModalShown = true" v-if="isShareMapViewMenuEntryVisible">
|
<v-list-tile @click="isShareMapViewModalShown = true" v-if="isShareMapViewMenuEntryVisible">
|
||||||
<v-list-tile-title>{{ $t("menu.shareMapView") }}</v-list-tile-title>
|
<v-list-tile-title>{{ $t("menu.shareMapView") }}</v-list-tile-title>
|
||||||
</v-list-tile>
|
</v-list-tile>
|
||||||
@ -56,7 +59,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { DELAY_BETWEEN_API_BATCH_REQUESTS } from '@/constants';
|
import FileSaver from 'file-saver';
|
||||||
|
import createGPX from 'gps-to-gpx';
|
||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
|
import { DELAY_BETWEEN_API_BATCH_REQUESTS, VERSION } from '@/constants';
|
||||||
|
|
||||||
import ReportErrorModal from '@/components/ReportErrorModal.vue';
|
import ReportErrorModal from '@/components/ReportErrorModal.vue';
|
||||||
import ShareMapViewModal from '@/components/ShareMapViewModal.vue';
|
import ShareMapViewModal from '@/components/ShareMapViewModal.vue';
|
||||||
@ -70,6 +77,9 @@ export default {
|
|||||||
isLoading() {
|
isLoading() {
|
||||||
return this.$store.state.isLoading;
|
return this.$store.state.isLoading;
|
||||||
},
|
},
|
||||||
|
isExportGPXMenuEntryVisible() {
|
||||||
|
return this.$store.state.location.gpx.length > 0;
|
||||||
|
},
|
||||||
isShareMapViewMenuEntryVisible() {
|
isShareMapViewMenuEntryVisible() {
|
||||||
return this.$store.state.map.center.every(item => item !== null);
|
return this.$store.state.map.center.every(item => item !== null);
|
||||||
},
|
},
|
||||||
@ -86,6 +96,25 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
exportGPX() {
|
||||||
|
const activityName = this.$t('misc.activityName');
|
||||||
|
const waypoints = this.$store.state.location.gpx.map(
|
||||||
|
item => Object.assign({}, item, { timestamp: new Date(item.timestamp) }),
|
||||||
|
);
|
||||||
|
const gpx = createGPX(waypoints, {
|
||||||
|
activityName,
|
||||||
|
creator: `Cycl'Assist v${VERSION}`,
|
||||||
|
eleKey: 'elevation',
|
||||||
|
latKey: 'latitude',
|
||||||
|
lonKey: 'longitude',
|
||||||
|
startTime: waypoints[0].timestamp,
|
||||||
|
timeKey: 'timestamp',
|
||||||
|
});
|
||||||
|
FileSaver.saveAs(
|
||||||
|
new Blob([gpx], { type: 'application/gpx+xml;charset=utf-8' }),
|
||||||
|
`cyclassist_${moment().locale('en').format('YYYY-MM-DD_HH-mm_ddd')}.gpx`,
|
||||||
|
);
|
||||||
|
},
|
||||||
goToAbout() {
|
goToAbout() {
|
||||||
this.$router.push({ name: 'About' });
|
this.$router.push({ name: 'About' });
|
||||||
},
|
},
|
||||||
|
@ -47,10 +47,12 @@
|
|||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"About": "Help",
|
"About": "Help",
|
||||||
|
"exportGPX": "Export GPX",
|
||||||
"Settings": "Settings",
|
"Settings": "Settings",
|
||||||
"shareMapView": "Share map view"
|
"shareMapView": "Share map view"
|
||||||
},
|
},
|
||||||
"misc": {
|
"misc": {
|
||||||
|
"activityName": "Biking",
|
||||||
"discard": "Discard",
|
"discard": "Discard",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"or": "or",
|
"or": "or",
|
||||||
|
37
yarn.lock
37
yarn.lock
@ -860,6 +860,13 @@ babel-register@^6.26.0:
|
|||||||
mkdirp "^0.5.1"
|
mkdirp "^0.5.1"
|
||||||
source-map-support "^0.4.15"
|
source-map-support "^0.4.15"
|
||||||
|
|
||||||
|
babel-runtime@6.18.0:
|
||||||
|
version "6.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078"
|
||||||
|
dependencies:
|
||||||
|
core-js "^2.4.0"
|
||||||
|
regenerator-runtime "^0.9.5"
|
||||||
|
|
||||||
babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
|
babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
|
||||||
version "6.26.0"
|
version "6.26.0"
|
||||||
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
|
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
|
||||||
@ -3143,6 +3150,10 @@ file-loader@^1.1.4:
|
|||||||
loader-utils "^1.0.2"
|
loader-utils "^1.0.2"
|
||||||
schema-utils "^0.4.5"
|
schema-utils "^0.4.5"
|
||||||
|
|
||||||
|
file-saver@^1.3.8:
|
||||||
|
version "1.3.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-1.3.8.tgz#e68a30c7cb044e2fb362b428469feb291c2e09d8"
|
||||||
|
|
||||||
file-type@5.2.0, file-type@^5.2.0:
|
file-type@5.2.0, file-type@^5.2.0:
|
||||||
version "5.2.0"
|
version "5.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
|
resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
|
||||||
@ -3626,6 +3637,14 @@ got@^7.0.0:
|
|||||||
url-parse-lax "^1.0.0"
|
url-parse-lax "^1.0.0"
|
||||||
url-to-options "^1.0.1"
|
url-to-options "^1.0.1"
|
||||||
|
|
||||||
|
gps-to-gpx@^1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/gps-to-gpx/-/gps-to-gpx-1.3.0.tgz#6b422a15073c6aced31e45c77712d6727822d39d"
|
||||||
|
dependencies:
|
||||||
|
babel-runtime "6.18.0"
|
||||||
|
loose-envify "1.3.0"
|
||||||
|
xmlbuilder "8.2.2"
|
||||||
|
|
||||||
graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
|
graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
|
||||||
version "4.1.11"
|
version "4.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||||
@ -4602,6 +4621,10 @@ js-base64@^2.1.9:
|
|||||||
version "2.4.5"
|
version "2.4.5"
|
||||||
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92"
|
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92"
|
||||||
|
|
||||||
|
js-tokens@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
|
||||||
|
|
||||||
js-tokens@^3.0.0, js-tokens@^3.0.2:
|
js-tokens@^3.0.0, js-tokens@^3.0.2:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||||
@ -4997,6 +5020,12 @@ longest@^1.0.0, longest@^1.0.1:
|
|||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
|
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
|
||||||
|
|
||||||
|
loose-envify@1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
|
||||||
|
dependencies:
|
||||||
|
js-tokens "^2.0.0"
|
||||||
|
|
||||||
loose-envify@^1.0.0:
|
loose-envify@^1.0.0:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
|
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
|
||||||
@ -6630,6 +6659,10 @@ regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1:
|
|||||||
version "0.11.1"
|
version "0.11.1"
|
||||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
|
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
|
||||||
|
|
||||||
|
regenerator-runtime@^0.9.5:
|
||||||
|
version "0.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029"
|
||||||
|
|
||||||
regenerator-transform@^0.10.0:
|
regenerator-transform@^0.10.0:
|
||||||
version "0.10.1"
|
version "0.10.1"
|
||||||
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
|
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
|
||||||
@ -8382,6 +8415,10 @@ xml2js@^0.4.5:
|
|||||||
sax ">=0.6.0"
|
sax ">=0.6.0"
|
||||||
xmlbuilder "~9.0.1"
|
xmlbuilder "~9.0.1"
|
||||||
|
|
||||||
|
xmlbuilder@8.2.2:
|
||||||
|
version "8.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773"
|
||||||
|
|
||||||
xmlbuilder@~9.0.1:
|
xmlbuilder@~9.0.1:
|
||||||
version "9.0.7"
|
version "9.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
|
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
|
||||||
|
Loading…
Reference in New Issue
Block a user