Résoudre paresseusement la div des mosaïques d overview (icône non posée à l eval)

This commit is contained in:
Antoine Jacquin
2026-09-20 00:57:46 +02:00
parent b5f3faa14d
commit b622d55720

View File

@ -2405,6 +2405,18 @@ const ovItemFor = (k, e) => {
let ovSig = null; // géométrie enregistrée (anti-recréation au merge live)
// Div de mosaïque, résolue paresseusement : à la création (eval du script)
// la vue Leaflet n'est pas encore posée et getElement() renvoie null — le
// marqueur n'a son icône qu'après le premier setView (même mécanique que
// entryDiv pour les tuiles).
function ovDiv(e) {
if (!e.div) {
const el = e.mk.getElement();
e.div = el ? el.querySelector('.ltile') : null;
}
return e.div;
}
function registerOverview() {
const items = ovItems();
if (!items.length || !map) return;
@ -2469,7 +2481,8 @@ function quadMatrix3d(src, dst) {
function layoutOverview() {
const zoom = map.getZoom();
for (const e of ovEntries) {
if (!e.div) continue;
const div = ovDiv(e);
if (!div) continue;
const meta = e.meta;
const anchor = map.project(e.latlngs[3], zoom);
// Coins image : NW(0,0) NE(w,0) SE(w,h) SW(0,h) — soit corners[3,2,1,0].
@ -2478,7 +2491,6 @@ function layoutOverview() {
return [p.x - anchor.x, p.y - anchor.y];
});
const m = quadMatrix3d([[0, 0], [meta.w, 0], [meta.w, meta.h], [0, meta.h]], dst);
const div = e.div;
div.style.width = meta.w + 'px';
div.style.height = meta.h + 'px';
div.style.transformOrigin = '0 0';
@ -2621,7 +2633,8 @@ function syncTileLayers() {
}
// Overview : mêmes couches actives, une <img> par couche et par mosaïque.
for (const e of ovEntries) {
if (!e.div) continue;
const div = ovDiv(e);
if (!div) continue;
for (const k of Object.keys(e.imgs)) {
if (act.includes(k) && ovItemFor(k, e)) continue;
e.imgs[k].src = '';
@ -2636,7 +2649,7 @@ function syncTileLayers() {
img.dataset.layer = k;
img.alt = '';
img.decoding = 'async';
e.div.appendChild(img);
div.appendChild(img);
e.imgs[k] = img;
}
img.classList.remove('fading');