From 255e81ce9f0c333827f1a2977a0ece8a83cc3071 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sun, 19 Apr 2020 10:45:26 +0200 Subject: [PATCH] Improve location history Before, script initiated moves would mess with the history through hash updates partway through the move. This commit fixes this behavior by checking for a human source. --- htdocs/mapscript.js | 28 ++++++++++++++++++++++------ htdocs/streeteditor.js | 2 -- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/htdocs/mapscript.js b/htdocs/mapscript.js index 4bdec93..89d32a9 100644 --- a/htdocs/mapscript.js +++ b/htdocs/mapscript.js @@ -183,12 +183,14 @@ function get_current_location_str() { function jump_to(latlng, zoom = -1) { if (zoom == -1) zoom = mymap.getZoom(); - document.location.hash = "#" + Math.round(latlng.lat) + "," + Math.round(latlng.lng) + "," + zoom; + if (!editor_mode) + document.location.hash = "#" + Math.round(latlng.lat) + "," + Math.round(latlng.lng) + "," + zoom; + else + mymap.setView(latlng, zoom); } function jump_to_marker(e) { - if (!editor_mode) - jump_to(e.target.getLatLng()); + jump_to(e.target.getLatLng()); } function prompt_location() { @@ -244,11 +246,25 @@ function onMapClick(e) { mymap.on('click', onMapClick); +var is_user_drag = 0; + function update_hash_from_position(e) { - document.location.hash = "#" + get_current_location_str(); + if (is_user_drag) + is_user_drag = 0; + else + return; + if (!editor_mode) + document.location.hash = "#" + get_current_location_str(); } -mymap.on('zoomend', update_hash_from_position); -mymap.on('dragend', update_hash_from_position); + +function dragstart(e) { + is_user_drag = 1; +} + +mymap.on('zoomend', function () {is_user_drag = 1; update_hash_from_position();}); +mymap.on('moveend', update_hash_from_position); +mymap.on('dragstart', function () { is_user_drag = 1;}); +mymap.on('keydown', function (e) { if (e.originalEvent.code.match(/Arrow.*/)) is_user_drag = 1;}); function onHashChange(e) { if (document.location.hash == "#" + get_current_location_str()) diff --git a/htdocs/streeteditor.js b/htdocs/streeteditor.js index 27addb5..a5e9e17 100644 --- a/htdocs/streeteditor.js +++ b/htdocs/streeteditor.js @@ -78,8 +78,6 @@ if (editor_mode) { document.getElementById('mapid').classList.add("no-aa"); mymap.setMaxZoom(14); mymap.off('click', onMapClick); - mymap.off('zoomend', update_hash_from_position); - mymap.off('dragend', update_hash_from_position); onLoad(); function get_location_string() {