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.
This commit is contained in:
Markus Koch 2020-04-19 10:45:26 +02:00
parent 1a2f9908fa
commit 255e81ce9f
2 changed files with 22 additions and 8 deletions

View File

@ -183,12 +183,14 @@ function get_current_location_str() {
function jump_to(latlng, zoom = -1) { function jump_to(latlng, zoom = -1) {
if (zoom == -1) if (zoom == -1)
zoom = mymap.getZoom(); 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) { function jump_to_marker(e) {
if (!editor_mode) jump_to(e.target.getLatLng());
jump_to(e.target.getLatLng());
} }
function prompt_location() { function prompt_location() {
@ -244,11 +246,25 @@ function onMapClick(e) {
mymap.on('click', onMapClick); mymap.on('click', onMapClick);
var is_user_drag = 0;
function update_hash_from_position(e) { 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) { function onHashChange(e) {
if (document.location.hash == "#" + get_current_location_str()) if (document.location.hash == "#" + get_current_location_str())

View File

@ -78,8 +78,6 @@ if (editor_mode) {
document.getElementById('mapid').classList.add("no-aa"); document.getElementById('mapid').classList.add("no-aa");
mymap.setMaxZoom(14); mymap.setMaxZoom(14);
mymap.off('click', onMapClick); mymap.off('click', onMapClick);
mymap.off('zoomend', update_hash_from_position);
mymap.off('dragend', update_hash_from_position);
onLoad(); onLoad();
function get_location_string() { function get_location_string() {