Nettoyer le contour de dalle et la référence à la bulle quand on change d'onglet

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Antoine Jacquin
2026-09-27 18:23:46 +02:00
parent 45455aec93
commit 375d53c0b1
2 changed files with 20 additions and 4 deletions

View File

@ -336,6 +336,12 @@ def test_ui_tile_popup_and_details_view():
# Pas de bulle pendant le déplacement du cadre d'export ni un tracé # Pas de bulle pendant le déplacement du cadre d'export ni un tracé
click = _MAP_JS[_MAP_JS.index("map.on('click'"):] click = _MAP_JS[_MAP_JS.index("map.on('click'"):]
assert "genDrawing" in click[:400] and "PRINT.dragging" in click[:400] assert "genDrawing" in click[:400] and "PRINT.dragging" in click[:400]
# Changer d'onglet pendant que la fiche est ouverte nettoie le contour
# de sélection (pas de fuite de tileSel) : openTab passe par le même
# nettoyage que closeTileViews, sans se rappeler lui-même.
assert "function hideTileView(" in _MAP_JS
open_tab = _MAP_JS[_MAP_JS.index("function openTab("):]
assert "hideTileView()" in open_tab[:200]
def test_defaults_roundtrip(tmp_path, monkeypatch): def test_defaults_roundtrip(tmp_path, monkeypatch):

View File

@ -601,7 +601,10 @@ function showTilePopup(data, latlng) {
showTilePopup.data = data; showTilePopup.data = data;
const btn = el('tilePopDetails'); const btn = el('tilePopDetails');
if (btn) btn.addEventListener('click', openTileDetails); if (btn) btn.addEventListener('click', openTileDetails);
tilePopup.on('remove', () => { if (el('tileView').hidden && tileSel) { map.removeLayer(tileSel); tileSel = null; } }); tilePopup.on('remove', () => {
tilePopup = null;
if (el('tileView').hidden && tileSel) { map.removeLayer(tileSel); tileSel = null; }
});
} }
function openTileDetails() { function openTileDetails() {
@ -616,12 +619,19 @@ function openTileDetails() {
showTileInfo(data, lastTileQuery); showTileInfo(data, lastTileQuery);
} }
// Masque #tileView et retire le contour de sélection, sans toucher aux
// onglets (utilisé par closeTileViews et par openTab, qui ne doit pas
// se rappeler lui-même via closeTileViews).
function hideTileView() {
el('tileView').hidden = true;
if (tileSel) { map.removeLayer(tileSel); tileSel = null; }
}
// Ferme la bulle, sinon la fiche ; renvoie true si quelque chose a été fermé. // Ferme la bulle, sinon la fiche ; renvoie true si quelque chose a été fermé.
function closeTileViews() { function closeTileViews() {
if (tilePopup) { tilePopup.remove(); tilePopup = null; return true; } if (tilePopup) { tilePopup.remove(); tilePopup = null; return true; }
if (!el('tileView').hidden) { if (!el('tileView').hidden) {
el('tileView').hidden = true; hideTileView();
if (tileSel) { map.removeLayer(tileSel); tileSel = null; }
openTab(tileReturnTab || 'view'); openTab(tileReturnTab || 'view');
return true; return true;
} }
@ -1218,7 +1228,7 @@ function panelRender() {
function openTab(tab) { function openTab(tab) {
if (!panelTabs().includes(tab)) return; if (!panelTabs().includes(tab)) return;
el('tileView').hidden = true; if (!el('tileView').hidden) hideTileView();
const before = PANEL.sheet; const before = PANEL.sheet;
// Onglet actif retouché sur téléphone : le volet change de hauteur. // Onglet actif retouché sur téléphone : le volet change de hauteur.
if (isPhone() && tab === PANEL.tab && PANEL.sheet !== 'closed') { if (isPhone() && tab === PANEL.tab && PANEL.sheet !== 'closed') {