mirror of
https://github.com/neocturne/MinedMap.git
synced 2025-03-04 17:23:33 +01:00
viewer: update opened marker popup on URL hash change
This commit is contained in:
parent
08f84fa339
commit
3d024c6cd8
1 changed files with 23 additions and 3 deletions
|
@ -38,9 +38,21 @@ const signKinds = {
|
||||||
|
|
||||||
const params = {};
|
const params = {};
|
||||||
const signIcons = {};
|
const signIcons = {};
|
||||||
|
const markers = {};
|
||||||
|
|
||||||
let updateHash = () => {};
|
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 signIcon(material, kind) {
|
||||||
function createSignIcon(material, kind) {
|
function createSignIcon(material, kind) {
|
||||||
const {iconSize, popupAnchor} = signKinds[kind];
|
const {iconSize, popupAnchor} = signKinds[kind];
|
||||||
|
@ -280,7 +292,7 @@ function loadSigns(signLayer) {
|
||||||
|
|
||||||
// Group signs by x,z coordinates
|
// Group signs by x,z coordinates
|
||||||
for (const sign of res.signs) {
|
for (const sign of res.signs) {
|
||||||
const key = `${sign.x},${sign.z}`;
|
const key = coordKey([sign.x, sign.z]);
|
||||||
const group = groups[key] ??= [];
|
const group = groups[key] ??= [];
|
||||||
group.push(sign);
|
group.push(sign);
|
||||||
}
|
}
|
||||||
|
@ -324,6 +336,8 @@ function loadSigns(signLayer) {
|
||||||
icon: signIcon(material, kind),
|
icon: signIcon(material, kind),
|
||||||
}).addTo(signLayer).bindPopup(popup);
|
}).addTo(signLayer).bindPopup(popup);
|
||||||
|
|
||||||
|
markers[coordKey([x, z])] = marker;
|
||||||
|
|
||||||
if (params.marker && x === params.marker[0] && z === params.marker[1])
|
if (params.marker && x === params.marker[0] && z === params.marker[1])
|
||||||
marker.openPopup();
|
marker.openPopup();
|
||||||
}
|
}
|
||||||
|
@ -451,21 +465,27 @@ window.createMap = function () {
|
||||||
if (window.location.hash === makeHash())
|
if (window.location.hash === makeHash())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
updateParams();
|
const prevMarkerCoords = params.marker;
|
||||||
|
|
||||||
map.setView([-params.z, params.x], params.zoom);
|
updateParams();
|
||||||
|
|
||||||
if (params.light)
|
if (params.light)
|
||||||
map.addLayer(lightLayer);
|
map.addLayer(lightLayer);
|
||||||
else
|
else
|
||||||
map.removeLayer(lightLayer);
|
map.removeLayer(lightLayer);
|
||||||
|
|
||||||
if (features.signs) {
|
if (features.signs) {
|
||||||
if (params.signs)
|
if (params.signs)
|
||||||
map.addLayer(signLayer);
|
map.addLayer(signLayer);
|
||||||
else
|
else
|
||||||
map.removeLayer(signLayer);
|
map.removeLayer(signLayer);
|
||||||
|
|
||||||
|
if (coordKey(prevMarkerCoords) !== coordKey(params.marker))
|
||||||
|
getMarker(params.marker)?.openPopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
map.setView([-params.z, params.x], params.zoom);
|
||||||
|
|
||||||
updateHash();
|
updateHash();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue