From e08b2cec5ad3d130e17f2d6789a06dedb419ee11 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Fri, 16 Jul 2021 11:48:44 +0200 Subject: [PATCH] Warn when navigating away from page if there are edits --- frontend/App.vue | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/frontend/App.vue b/frontend/App.vue index 6e818a6..99e7912 100644 --- a/frontend/App.vue +++ b/frontend/App.vue @@ -598,6 +598,11 @@ var osmOrangeMarker = ExtraMarkers.icon({ prefix: "fa", }); +function beforeUnloadListener(event) { + event.preventDefault(); + return event.returnValue = ""; +}; + export default { props: { startLat: Number, @@ -745,6 +750,9 @@ export default { }, }, watch: { + edits(edit_list) { + this.update_unload_warning(edit_list); + }, selected_items(new_items, old_items) { for (const qid of Object.keys(new_items)) { if (!old_items[qid]) @@ -807,6 +815,13 @@ export default { } }, methods: { + update_unload_warning(edit_list) { + if (edit_list.length) { + addEventListener("beforeunload", beforeUnloadListener, {capture: true}); + } else { + removeEventListener("beforeunload", beforeUnloadListener, {capture: true}); + } + }, format_area(area) { var value, unit, dp; if(area > 1000 * 1000) { @@ -898,6 +913,7 @@ export default { break; case "done": app.upload_state = "done"; + removeEventListener("beforeunload", beforeUnloadListener, {capture: true}); es.close(); break; } @@ -936,6 +952,8 @@ export default { this.edits.splice(index, 1); } + this.update_unload_warning(this.edits); + var marker = this.getMarker(item); item.wikidata.markers.forEach((marker_data) => {