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:
parent
1a2f9908fa
commit
255e81ce9f
@ -183,11 +183,13 @@ 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();
|
||||||
|
if (!editor_mode)
|
||||||
document.location.hash = "#" + Math.round(latlng.lat) + "," + Math.round(latlng.lng) + "," + zoom;
|
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());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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) {
|
||||||
|
if (is_user_drag)
|
||||||
|
is_user_drag = 0;
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
if (!editor_mode)
|
||||||
document.location.hash = "#" + get_current_location_str();
|
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())
|
||||||
|
@ -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() {
|
||||||
|
Loading…
Reference in New Issue
Block a user