viewer: more URL hash improvements

This commit is contained in:
Matthias Schiffer 2015-02-04 22:01:14 +01:00
parent 82acbeacb1
commit 02808dcf9b

View file

@ -122,18 +122,25 @@ window.createMap = function () {
mipmaps = res.mipmaps, mipmaps = res.mipmaps,
spawn = res.spawn; spawn = res.spawn;
var args = parseHash(), var x, z, zoom, light;
zoom = parseInt(args['zoom']),
x = parseFloat(args['x']),
z = parseFloat(args['z']),
light = parseInt(args['light']);
if (isNaN(zoom)) var updateParams = function () {
zoom = 0; var args = parseHash();
if (isNaN(x))
x = spawn.x; zoom = parseInt(args['zoom']);
if (isNaN(z)) x = parseFloat(args['x']);
z = spawn.z; z = parseFloat(args['z']);
light = parseInt(args['light']);
if (isNaN(zoom))
zoom = 0;
if (isNaN(x))
x = spawn.x;
if (isNaN(z))
z = spawn.z;
};
updateParams();
var map = L.map('map', { var map = L.map('map', {
center: [-z, x], center: [-z, x],
@ -169,14 +176,13 @@ window.createMap = function () {
}); });
var makeHash = function () { var makeHash = function () {
var zoom = map.getZoom(), var ret = '#x='+x+'&z='+z;
center = map.getCenter(),
x = Math.round(center.lng), if (zoom != 0)
z = Math.round(-center.lat), ret += '&zoom='+zoom;
ret = '#x='+x+'&z='+z+'&zoom='+zoom;
if (map.hasLayer(lightLayer)) if (map.hasLayer(lightLayer))
ret += '&light=1'; ret += '&light=1';
return ret; return ret;
}; };
@ -185,30 +191,27 @@ window.createMap = function () {
window.location.hash = makeHash(); window.location.hash = makeHash();
}; };
var refreshHash = function () {
zoom = map.getZoom();
center = map.getCenter();
x = Math.round(center.lng);
z = Math.round(-center.lat);
updateHash();
}
updateHash(); updateHash();
map.on('moveend', updateHash); map.on('moveend', refreshHash);
map.on('zoomend', updateHash); map.on('zoomend', refreshHash);
map.on('layeradd', updateHash); map.on('layeradd', refreshHash);
map.on('layerremove', updateHash); map.on('layerremove', refreshHash);
window.onhashchange = function () { window.onhashchange = function () {
if (window.location.hash == makeHash()) if (window.location.hash == makeHash())
return; return;
var args = parseHash(), updateParams();
center = map.getCenter(),
zoom = parseInt(args['zoom']),
x = parseFloat(args['x']),
z = parseFloat(args['z']),
light = parseInt(args['light']);
if (isNaN(zoom))
zoom = map.getZoom();
if (isNaN(x))
x = center.lng;
if (isNaN(z))
z = -center.lat;
map.setView([-z, x], zoom); map.setView([-z, x], zoom);
@ -216,6 +219,8 @@ window.createMap = function () {
map.addLayer(lightLayer); map.addLayer(lightLayer);
else else
map.removeLayer(lightLayer); map.removeLayer(lightLayer);
updateHash();
}; };
}; };