From 7e4df3fa3a6d8adeaea5834300ae8a4413d697fa Mon Sep 17 00:00:00 2001 From: william Date: Sun, 23 Aug 2026 18:55:44 +0200 Subject: [PATCH] Fix Jauge bar collapsing to 0px when nested with a name label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A Jauge posée dans un conteneur a une hauteur "auto" (voir _style_string) — "flex:1 1 auto" seul n'avait alors rien à répartir (le conteneur flex lui-même n'a pas de hauteur définie), donc le wrapper de la barre s'effondrait à 0px : seul le nom restait visible, la jauge elle-même disparaissait. Ajout d'un "min-height" plancher sur ce wrapper, qui laisse toujours la barre visible dans ce cas tout en la laissant grandir avec flex:1 si l'élément a une vraie hauteur. --- screens/rendering/render_jauge.py | 10 +++++++++- tests/test_jauge.py | 25 +++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/screens/rendering/render_jauge.py b/screens/rendering/render_jauge.py index ea6fdbf1..5e6ddb1b 100644 --- a/screens/rendering/render_jauge.py +++ b/screens/rendering/render_jauge.py @@ -115,9 +115,17 @@ def _render_jauge(el, meta, slug, children_map=None, ctx=None, parent_flex_direc f'
' ) + # min-height (pas 0) : un élément posé DANS un conteneur a une hauteur + # "auto" par défaut (voir _style_string) — "flex:1 1 auto" seul n'a + # alors rien à répartir (le conteneur flex lui-même n'a pas de hauteur + # définie tant que rien ne la contraint) et la barre s'effondrait à 0px, + # ne laissant plus que le nom visible. Cette valeur plancher garde la + # barre visible dans ce cas, tout en la laissant grandir avec flex:1 si + # l'élément a une vraie hauteur (posé directement sur un écran, ou + # hauteur fixée via "Position & taille"). bar_wrap = ( f'
{bar}{label_html}
' + f'flex:1 1 auto; min-height:14px;">{bar}{label_html}' ) return ( f'
' diff --git a/tests/test_jauge.py b/tests/test_jauge.py index 00a5507b..3f97c9cc 100644 --- a/tests/test_jauge.py +++ b/tests/test_jauge.py @@ -165,6 +165,31 @@ def test_gauge_without_champ_nom_shows_no_name_no_regression(client, game): assert ">Confiance<" not in html +def test_gauge_bar_stays_visible_when_nested_in_a_container_with_a_name(client, game): + """Régression : posée À L'INTÉRIEUR d'un conteneur (donc en hauteur + "auto", voir _style_string), la Jauge avec un nom affiché au-dessus ne + doit pas voir sa barre s'effondrer à 0px — "flex:1 1 auto" seul n'a + rien à répartir dans un conteneur flex sans hauteur définie, d'où le + "min-height" plancher sur le wrapper de la barre (voir render_jauge.py). + On vérifie ici que la classe "jaugeBar" reste dans un wrapper qui porte + bien un min-height non nul, pas seulement sa présence dans le HTML.""" + def_id, row_ids = _create_jauge_object_with_rows(client, game) + screen_id = _create_screen(client, game) + resp = client.post(f"/game/{game}/screens/{screen_id}/elements/add", data={"widget": "conteneur"}, follow_redirects=False) + container_id = int(re.search(r"selected=(\d+)", resp.headers["Location"]).group(1)) + resp = client.post(f"/game/{game}/elements/{container_id}/children/add", data={"widget": "jauge"}, follow_redirects=False) + jauge_id = int(re.search(r"selected=(\d+)", resp.headers["Location"]).group(1)) + client.post(f"/game/{game}/elements/{jauge_id}/save", data={ + "ctrl_definition_id": str(def_id), "ctrl_row_id": str(row_ids["Confiance"]), + "ctrl_champ": "value", "ctrl_champ_nom": "name", "ctrl_min": "0", "ctrl_max": "100", + }) + html = client.get(f"/game/{game}/play").data.decode() + assert ">Confiance<" in html + idx = html.find("jaugeBar") + wrap_style = html[html.rfind('style="', 0, html.rfind('