Fix round 2 : fermer le cadre d'export sous la fiche détaillée en toutes circonstances, ne pas la recadrer au retour, réarmer BOOTSTRAPPING sur échec

panelVisibleTab() renvoie null tant que la fiche détaillée est ouverte,
quel que soit ce qui redéclenche panelRender (grip, redimensionnement,
changement phoneQuery…) : le cadre d'export ne rouvre plus derrière elle.
Rétablir l'onglet Export après un retour (restoreTabAfterDetails / M5)
repose désormais le cadre sans recadrer la vue ni le recentrer
(nouveau drapeau RESTORING_TAB, distingué d'une ouverture explicite par
l'utilisateur). BOOTSTRAPPING est aussi réarmé quand /api/map/meta échoue,
pour qu'une ouverture explicite ultérieure de l'onglet recadre bien la vue.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Antoine Jacquin
2026-09-27 19:21:50 +02:00
parent 72b10cd228
commit 72c50dca99
2 changed files with 72 additions and 16 deletions

View File

@ -522,21 +522,45 @@ def test_ui_phone_return_and_escape_keep_sheet_height():
def test_ui_saved_print_tab_does_not_rezoom_shared_link():
"""L'onglet Export mémorisé ne recadre pas la vue au tout premier rendu du
panneau (sinon il écrase le zoom d'un lien partagé ou de l'URL initiale) :
BOOTSTRAPPING passe à faux juste après ce premier rendu."""
BOOTSTRAPPING passe à faux juste après CE premier rendu — succès ET échec
du chargement de /api/map/meta (sinon un serveur injoignable au démarrage
bloque BOOTSTRAPPING à vrai pour toujours : plus aucun recadrage, même
après une ouverture explicite ultérieure de l'onglet)."""
from lidar_pipeline.mapui import _MAP_JS
assert "let BOOTSTRAPPING = true;" in _MAP_JS
assert "printSetOpen(e.detail.visible === 'print', !BOOTSTRAPPING);" in _MAP_JS
boot = _MAP_JS[_MAP_JS.index("panelRender();\n BOOTSTRAPPING = false;"):]
assert boot.startswith("panelRender();\n BOOTSTRAPPING = false;")
assert "printSetOpen(e.detail.visible === 'print', !BOOTSTRAPPING && !RESTORING_TAB);" in _MAP_JS
then_branch = _MAP_JS[_MAP_JS.index("panelRender();\n BOOTSTRAPPING = false;"):]
assert then_branch.startswith("panelRender();\n BOOTSTRAPPING = false;")
catch_branch = _MAP_JS[_MAP_JS.index(".catch(() => {\n toast('Serveur de tuiles injoignable."):]
assert "BOOTSTRAPPING = false;" in catch_branch[:400]
def test_ui_details_view_hides_print_frame():
"""Ouvrir la fiche détaillée pendant que l'onglet Export est affiché
referme le cadre d'export (sinon cadre + poignée restent visibles
derrière la fiche)."""
derrière la fiche) — et le reste tant que la fiche est ouverte, quel que
soit ce qui redéclenche un rendu du panneau (grip, redimensionnement,
changement phoneQuery…) puisque panelVisibleTab() renvoie null tant que
#tileView n'est pas masqué."""
from lidar_pipeline.mapui import _MAP_JS
open_details = _MAP_JS[_MAP_JS.index("function openTileDetails("):]
assert "printSetOpen(false);" in open_details[:600]
visible_tab = _MAP_JS[_MAP_JS.index("function panelVisibleTab("):]
assert "if (!el('tileView').hidden) return null;" in visible_tab[:300]
def test_ui_restoring_tab_does_not_refit_or_recentre_print_frame():
"""Rétablir l'onglet Export (retour de la fiche détaillée) rouvre le
cadre là où il était, sans recadrer la vue ni le recentrer sur l'écran —
au contraire d'une ouverture explicite de l'onglet par l'utilisateur."""
from lidar_pipeline.mapui import _MAP_JS
assert "let RESTORING_TAB = false;" in _MAP_JS
restore = _MAP_JS[_MAP_JS.index("function restoreTabAfterDetails("):]
assert "RESTORING_TAB = true;" in restore[:400]
assert "panelRender();\n RESTORING_TAB = false;" in restore[:400]
open_fn = _MAP_JS[_MAP_JS.index("function printSetOpen("):]
assert "explicit && !map.getBounds().contains(PRINT.center)" in open_fn[:700]
assert "printRefreshFrame(!!explicit);" in open_fn[:700]
def test_ui_colors_are_tokenised():