viewer: update opened marker popup on URL hash change

This commit is contained in:
Matthias Schiffer 2024-01-07 20:32:56 +01:00
parent 08f84fa339
commit 3d024c6cd8
Signed by: neocturne
GPG key ID: 16EF3F64CB201D9C

View file

@ -38,9 +38,21 @@ const signKinds = {
const params = {};
const signIcons = {};
const markers = {};
let updateHash = () => {};
function coordKey(coords) {
if (!coords)
return null;
return `${coords[0]},${coords[1]}`;
}
function getMarker(coords) {
return markers[coordKey(coords)];
}
function signIcon(material, kind) {
function createSignIcon(material, kind) {
const {iconSize, popupAnchor} = signKinds[kind];
@ -280,7 +292,7 @@ function loadSigns(signLayer) {
// Group signs by x,z coordinates
for (const sign of res.signs) {
const key = `${sign.x},${sign.z}`;
const key = coordKey([sign.x, sign.z]);
const group = groups[key] ??= [];
group.push(sign);
}
@ -324,6 +336,8 @@ function loadSigns(signLayer) {
icon: signIcon(material, kind),
}).addTo(signLayer).bindPopup(popup);
markers[coordKey([x, z])] = marker;
if (params.marker && x === params.marker[0] && z === params.marker[1])
marker.openPopup();
}
@ -451,21 +465,27 @@ window.createMap = function () {
if (window.location.hash === makeHash())
return;
updateParams();
const prevMarkerCoords = params.marker;
map.setView([-params.z, params.x], params.zoom);
updateParams();
if (params.light)
map.addLayer(lightLayer);
else
map.removeLayer(lightLayer);
if (features.signs) {
if (params.signs)
map.addLayer(signLayer);
else
map.removeLayer(signLayer);
if (coordKey(prevMarkerCoords) !== coordKey(params.marker))
getMarker(params.marker)?.openPopup();
}
map.setView([-params.z, params.x], params.zoom);
updateHash();
};