From b622d55720c60271a6fe840ad38697260d210a88 Mon Sep 17 00:00:00 2001 From: Antoine Jacquin Date: Sun, 20 Sep 2026 00:57:46 +0200 Subject: [PATCH] =?UTF-8?q?R=C3=A9soudre=20paresseusement=20la=20div=20des?= =?UTF-8?q?=20mosa=C3=AFques=20d=20overview=20(ic=C3=B4ne=20non=20pos?= =?UTF-8?q?=C3=A9e=20=C3=A0=20l=20eval)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lidar_pipeline/index.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lidar_pipeline/index.py b/lidar_pipeline/index.py index b8b6150..abc3769 100644 --- a/lidar_pipeline/index.py +++ b/lidar_pipeline/index.py @@ -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 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');