mirror of
https://github.com/neocturne/MinedMap.git
synced 2025-04-19 19:15:08 +02:00
viewer: include open marker in URL
Allow sharing URLs that reference a marker.
This commit is contained in:
parent
7b3ac8647e
commit
7daddd6bbc
1 changed files with 27 additions and 5 deletions
|
@ -39,6 +39,8 @@ const signKinds = {
|
||||||
const params = {};
|
const params = {};
|
||||||
const signIcons = {};
|
const signIcons = {};
|
||||||
|
|
||||||
|
let updateHash = () => {};
|
||||||
|
|
||||||
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];
|
||||||
|
@ -284,7 +286,7 @@ function loadSigns(signLayer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [key, group] of Object.entries(groups)) {
|
for (const [key, group] of Object.entries(groups)) {
|
||||||
const popup = document.createElement('div');
|
const el = document.createElement('div');
|
||||||
|
|
||||||
let material;
|
let material;
|
||||||
let kind;
|
let kind;
|
||||||
|
@ -293,10 +295,10 @@ function loadSigns(signLayer) {
|
||||||
group.sort((a, b) => b.y - a.y);
|
group.sort((a, b) => b.y - a.y);
|
||||||
|
|
||||||
for (const sign of group) {
|
for (const sign of group) {
|
||||||
popup.appendChild(createSign(sign, false));
|
el.appendChild(createSign(sign, false));
|
||||||
|
|
||||||
if (sign.back_text)
|
if (sign.back_text)
|
||||||
popup.appendChild(createSign(sign, true));
|
el.appendChild(createSign(sign, true));
|
||||||
|
|
||||||
material ??= sign.material;
|
material ??= sign.material;
|
||||||
kind ??= sign.kind;
|
kind ??= sign.kind;
|
||||||
|
@ -307,9 +309,23 @@ function loadSigns(signLayer) {
|
||||||
|
|
||||||
const [x, z] = key.split(',').map((i) => +i);
|
const [x, z] = key.split(',').map((i) => +i);
|
||||||
|
|
||||||
L.marker([-z-0.5, x+0.5], {
|
const popup = L.popup().setContent(el);
|
||||||
|
|
||||||
|
popup.on('add', () => {
|
||||||
|
params.marker = [x, z];
|
||||||
|
updateHash();
|
||||||
|
});
|
||||||
|
popup.on('remove', () => {
|
||||||
|
params.marker = null;
|
||||||
|
updateHash();
|
||||||
|
});
|
||||||
|
|
||||||
|
const marker = L.marker([-z-0.5, x+0.5], {
|
||||||
icon: signIcon(material, kind),
|
icon: signIcon(material, kind),
|
||||||
}).addTo(signLayer).bindPopup(popup);
|
}).addTo(signLayer).bindPopup(popup);
|
||||||
|
|
||||||
|
if (params.marker && x === params.marker[0] && z === params.marker[1])
|
||||||
|
marker.openPopup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,6 +348,7 @@ window.createMap = function () {
|
||||||
params.z = parseFloat(args['z']);
|
params.z = parseFloat(args['z']);
|
||||||
params.light = parseInt(args['light']);
|
params.light = parseInt(args['light']);
|
||||||
params.signs = parseInt(args['signs'] ?? '1');
|
params.signs = parseInt(args['signs'] ?? '1');
|
||||||
|
params.marker = (args['marker'] ?? '').split(',').map((i) => +i);
|
||||||
|
|
||||||
if (isNaN(params.zoom))
|
if (isNaN(params.zoom))
|
||||||
params.zoom = 0;
|
params.zoom = 0;
|
||||||
|
@ -339,6 +356,8 @@ window.createMap = function () {
|
||||||
params.x = spawn.x;
|
params.x = spawn.x;
|
||||||
if (isNaN(params.z))
|
if (isNaN(params.z))
|
||||||
params.z = spawn.z;
|
params.z = spawn.z;
|
||||||
|
if (isNaN(params.marker[0]) || isNaN(params.marker[1]))
|
||||||
|
params.marker = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
updateParams();
|
updateParams();
|
||||||
|
@ -392,11 +411,14 @@ window.createMap = function () {
|
||||||
ret += '&light=1';
|
ret += '&light=1';
|
||||||
if (!map.hasLayer(signLayer))
|
if (!map.hasLayer(signLayer))
|
||||||
ret += '&signs=0';
|
ret += '&signs=0';
|
||||||
|
if (params.marker) {
|
||||||
|
ret += `&marker=${params.marker[0]},${params.marker[1]}`;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateHash = function () {
|
updateHash = function () {
|
||||||
window.location.hash = makeHash();
|
window.location.hash = makeHash();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue