From 06b5df833fc1421cd0f47a99252b8f175ab8f0f1 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Fri, 5 Aug 2022 19:47:24 +0200 Subject: [PATCH] Some finetuning of GPX trace uploading --- Logic/Osm/OsmConnection.ts | 2 -- UI/BigComponents/UploadTraceToOsmUI.ts | 36 ++++++++++++++++---------- UI/SpecialVisualizations.ts | 21 +++++++++------ langs/en.json | 13 ++++++---- 4 files changed, 43 insertions(+), 29 deletions(-) diff --git a/Logic/Osm/OsmConnection.ts b/Logic/Osm/OsmConnection.ts index 07839e4a4..db5fa9fbc 100644 --- a/Logic/Osm/OsmConnection.ts +++ b/Logic/Osm/OsmConnection.ts @@ -8,8 +8,6 @@ import Img from "../../UI/Base/Img"; import {Utils} from "../../Utils"; import {OsmObject} from "./OsmObject"; import {Changes} from "./Changes"; -import {GeoOperations} from "../GeoOperations"; -import { Feature } from "@turf/turf"; export default class UserDetails { diff --git a/UI/BigComponents/UploadTraceToOsmUI.ts b/UI/BigComponents/UploadTraceToOsmUI.ts index b73a44b77..bd82ab590 100644 --- a/UI/BigComponents/UploadTraceToOsmUI.ts +++ b/UI/BigComponents/UploadTraceToOsmUI.ts @@ -17,7 +17,7 @@ export default class UploadTraceToOsmUI extends Toggle { constructor( - trace: () => string, + trace: (title: string) => string, state: { layoutToUse: LayoutConfig; osmConnection: OsmConnection @@ -25,7 +25,7 @@ export default class UploadTraceToOsmUI extends Toggle { whenUploaded?: () => void | Promise }) { const t = Translations.t.general.uploadGpx - + const uploadFinished = new UIEventSource(false) const traceVisibilities: { key: "private" | "public", name: Translation, @@ -33,11 +33,11 @@ export default class UploadTraceToOsmUI extends Toggle { }[] = [ { key: "private", - ...Translations.t.general.uploadGpx.modes.private + ...t.modes.private }, { key: "public", - ...Translations.t.general.uploadGpx.modes.public + ...t.modes.public } ] @@ -52,7 +52,10 @@ export default class UploadTraceToOsmUI extends Toggle { } ) const description = new TextField({ - placeholder: t.placeHolder + placeholder: t.meta.descriptionPlaceHolder + }) + const title = new TextField({ + placeholder: t.meta.titlePlaceholder }) const clicked = new UIEventSource(false) @@ -63,15 +66,17 @@ export default class UploadTraceToOsmUI extends Toggle { t.choosePermission, dropdown, - new Title(t.description.title, 4), - t.description.intro, + new Title(t.meta.title, 4), + t.meta.intro, + title, + t.meta.descriptionIntro, description, new Combine([ new SubtleButton(Svg.close_svg(), Translations.t.general.cancel).onClick(() => { clicked.setData(false) }).SetClass(""), new SubtleButton(Svg.upload_svg(), t.confirm).OnClickWithLoading(t.uploading, async () => { - await state?.osmConnection?.uploadGpxTrack(trace(), { + await state?.osmConnection?.uploadGpxTrack(trace(title.GetValue().data), { visibility: dropdown.GetValue().data, description: description.GetValue().data, labels: ["MapComplete", state?.layoutToUse?.id] @@ -80,17 +85,20 @@ export default class UploadTraceToOsmUI extends Toggle { if (options?.whenUploaded !== undefined) { await options.whenUploaded() } + uploadFinished.setData(true) - }).SetClass("") + }) ]).SetClass("flex flex-wrap flex-wrap-reverse justify-between items-stretch") ]).SetClass("flex flex-col p-4 rounded border-2 m-2 border-subtle") super( - confirmPanel, - new SubtleButton(Svg.upload_svg(), t.title) - .onClick(() => clicked.setData(true)), - clicked - ) + new Combine([Svg.confirm_svg(),t.uploadFinished]).SetClass("flex"), + new Toggle( + confirmPanel, + new SubtleButton(Svg.upload_svg(), t.title) + .onClick(() => clicked.setData(true)), + clicked + ), uploadFinished) } } \ No newline at end of file diff --git a/UI/SpecialVisualizations.ts b/UI/SpecialVisualizations.ts index 3f99c175c..2747772d8 100644 --- a/UI/SpecialVisualizations.ts +++ b/UI/SpecialVisualizations.ts @@ -881,26 +881,31 @@ export default class SpecialVisualizations { { funcName: "upload_to_osm", docs: "Uploads the GPS-history as GPX to OpenStreetMap.org; clears the history afterwards. The actual feature is ignored.", - args:[], + args: [], constr(state, featureTags, args) { - - function getTrace() { - const userLocations : Feature[] = state.historicalUserLocations.features.data.map(f => f.feature) + + function getTrace(title: string) { + title = title?.trim() + if (title === undefined || title === "") { + title = "Uploaded with MapComplete" + } + title = Utils.EncodeXmlValue(title) + const userLocations: Feature[] = state.historicalUserLocations.features.data.map(f => f.feature) const trackPoints: string[] = [] for (const l of userLocations) { let trkpt = ` ` trkpt += ` ` - if(l.properties.altitude !== null && l.properties.altitude !== undefined ){ + if (l.properties.altitude !== null && l.properties.altitude !== undefined) { trkpt += ` ${l.properties.altitude}` } trkpt += " " trackPoints.push(trkpt) } const header = '' - return header+"\n\n"+trackPoints.join("\n")+"\n" + return header + "\n" + title + "\n\n" + trackPoints.join("\n") + "\n" } - - return new UploadTraceToOsmUI(getTrace, state,{ + + return new UploadTraceToOsmUI(getTrace, state, { whenUploaded: async () => { state.historicalUserLocations.features.setData([]) } diff --git a/langs/en.json b/langs/en.json index 695b25814..d50ccc65a 100644 --- a/langs/en.json +++ b/langs/en.json @@ -242,12 +242,15 @@ "uploadGpx": { "choosePermission": "Choose below if your track should be shared:", "confirm": "Confirm upload", - "description": { - "intro": "Optionally, you can enter a description of your trace below", - "title": "Description" - }, "intro0": "By uploading your track, OpenStreetMap.org will retain a full copy of the track.", "intro1": "You will be able to download your track again and to load them into OpenStreetMap editing programs", + "meta": { + "descriptionIntro": "Optionally, you can enter a description of your trace:", + "descriptionPlaceHolder": "Enter a description of your trace", + "intro": "Add a title for your track:", + "title": "Title and description", + "titlePlaceholder": "Enter the title of your trace" + }, "modes": { "private": { "docs": "The points of your track will be shared and aggregated among other tracks. The full track will be visible to you and you will be able to load it into other editing programs. OpenStreetMap.org retains a copy of your trace", @@ -258,8 +261,8 @@ "name": "Public" } }, - "placeHolder": "Enter a description of your trace", "title": "Upload your track to OpenStreetMap.org", + "uploadFinished": "Your track has been uploaded!", "uploading": "Uploading your trace..." }, "useSearch": "Use the search above to see presets",