From 10aa88e03c247ac116961893df9002aa96429624 Mon Sep 17 00:00:00 2001 From: Spark Date: Thu, 5 Nov 2026 05:53:05 +0000 Subject: [PATCH] =?UTF-8?q?ObsiGate=202.83.5=20:=20barre=20v0.4.1=20?= =?UTF-8?q?=E2=80=94=20correctif=20des=20ic=C3=B4nes=20invisibles=20du=20m?= =?UTF-8?q?enu=20compte,=20vendange=20verbatim=20(fusion=20#125)=20+=20gar?= =?UTF-8?q?de?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/draco-barre.js | 10 ++++++++-- tests/test_draco_barre.py | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/frontend/draco-barre.js b/frontend/draco-barre.js index 582e088..7078871 100644 --- a/frontend/draco-barre.js +++ b/frontend/draco-barre.js @@ -529,11 +529,17 @@ ["line", { x1: "21", y1: "12", x2: "9", y2: "12" }] ] }; + /* Espace de noms SVG — OBLIGATOIRE : un élément « svg » (ou + * « path », « circle »…) créé par createElement() appartient à + * l'espace de noms HTML et le navigateur ne le dessine JAMAIS + * (bug v0.4.0 : libellés décalés d'un cran d'icône, aucun glyphe + * visible ; corrigé en v0.4.1, carte fusion #125). */ + var SVG_NS = "http://www.w3.org/2000/svg"; function menuIcone(nom) { var span = document.createElement("span"); span.className = "draco-menu-icone"; span.setAttribute("aria-hidden", "true"); - var svg = document.createElement("svg"); + var svg = document.createElementNS(SVG_NS, "svg"); svg.setAttribute("viewBox", "0 0 24 24"); svg.setAttribute("fill", "none"); svg.setAttribute("stroke", "currentColor"); @@ -542,7 +548,7 @@ svg.setAttribute("stroke-linejoin", "round"); svg.setAttribute("focusable", "false"); (MENU_ICONES[nom] || []).forEach(function (spec) { - var el = document.createElement(spec[0]); + var el = document.createElementNS(SVG_NS, spec[0]); for (var k in spec[1]) el.setAttribute(k, spec[1][k]); svg.appendChild(el); }); diff --git a/tests/test_draco_barre.py b/tests/test_draco_barre.py index 0b58aea..f55ccca 100644 --- a/tests/test_draco_barre.py +++ b/tests/test_draco_barre.py @@ -226,3 +226,16 @@ def test_barre_v040_icones_monoline_menu_compte(): bloc = css.split(".draco-menu-icone {", 1)[1].split("}", 1)[0] assert "width: 18px" in bloc assert "var(--ink-2)" in bloc + + +def test_barre_v041_correctif_icones_espace_de_noms_svg(): + # v0.4.1 (correctif fusion #125) : les icônes du menu compte + # sont créées via createElementNS (espace de noms SVG). En + # v0.4.0, createElement() les créait dans l'espace de noms + # HTML : jamais dessinées par le navigateur, libellés + # décalés d'un cran d'icône sans aucun glyphe. + js = (FRONTEND / "draco-barre.js").read_text(encoding="utf-8") + assert 'createElementNS(SVG_NS, "svg")' in js + assert "createElementNS(SVG_NS, spec[0])" in js + assert 'createElement("svg")' not in js + assert "createElement(spec[0])" not in js