Kanbante 0.45.12 : barre v0.4.1 — correctif des icônes invisibles du menu compte, vendange verbatim (fusion #125) + tests + version/changelog
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
## 0.45.12 — 2026-11-05 — Barre commune v0.4.1 : correctif des icônes invisibles du menu compte (fusion #125)
|
||||||
|
|
||||||
|
- **Barre d'apps v0.4.1 vendangée (dracodev-commons, branche `menu-compte-icones-svg-ns-v0-4-1`, PR commons #11)** : `static/js/draco-barre.js` remplacé **verbatim** — SHA-256 JS `82c4940e…b34f85a42` (preuve dans `tests/test_barre_v041.py`). Le CSS est inchangé (empreinte v0.4.0 conservée) ; le gabarit `_draco_bar.html` est inchangé.
|
||||||
|
- **Correctif** : en v0.4.0, `menuIcone()` créait le `<svg>` des icônes et ses primitives via `document.createElement()` — espace de noms **HTML**, jamais dessinés par le navigateur : les libellés du menu compte étaient décalés d'un cran d'icône, sans aucun glyphe. La v0.4.1 crée tout via `document.createElementNS()` (espace de noms SVG). Glyphes, CSS et comportements inchangés.
|
||||||
|
- **Cache** : le bump du fichier `VERSION` change le `?v=` des CSS/JS de la barre ; `APP_VERSION` suit automatiquement (source unique `VERSION`).
|
||||||
|
- Tests : `tests/test_barre_v041.py` (verbatim v0.4.1 prouvé par SHA-256, création en espace de noms SVG) ; l'empreinte JS de `tests/test_barre_v040.py` est supersédée selon le patron habituel.
|
||||||
|
|
||||||
## 0.45.11 — 2026-11-05 — Barre commune v0.4.0 : icônes monoline du menu compte (HUB-11)
|
## 0.45.11 — 2026-11-05 — Barre commune v0.4.0 : icônes monoline du menu compte (HUB-11)
|
||||||
|
|
||||||
- **Barre d'apps v0.4.0 vendangée (dracodev-commons, branche `menu-compte-icones-v0-4-0`, PR commons #10)** : `static/css/draco-barre.css` et `static/js/draco-barre.js` remplacés **verbatim** — SHA-256 CSS `d8cf53b2…a6bd06ec`, JS `36cc24b2…e5d39a0` (preuve dans `tests/test_barre_v040.py`). Le gabarit `_draco_bar.html` est inchangé.
|
- **Barre d'apps v0.4.0 vendangée (dracodev-commons, branche `menu-compte-icones-v0-4-0`, PR commons #10)** : `static/css/draco-barre.css` et `static/js/draco-barre.js` remplacés **verbatim** — SHA-256 CSS `d8cf53b2…a6bd06ec`, JS `36cc24b2…e5d39a0` (preuve dans `tests/test_barre_v040.py`). Le gabarit `_draco_bar.html` est inchangé.
|
||||||
|
|||||||
@@ -529,11 +529,17 @@
|
|||||||
["line", { x1: "21", y1: "12", x2: "9", y2: "12" }]
|
["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) {
|
function menuIcone(nom) {
|
||||||
var span = document.createElement("span");
|
var span = document.createElement("span");
|
||||||
span.className = "draco-menu-icone";
|
span.className = "draco-menu-icone";
|
||||||
span.setAttribute("aria-hidden", "true");
|
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("viewBox", "0 0 24 24");
|
||||||
svg.setAttribute("fill", "none");
|
svg.setAttribute("fill", "none");
|
||||||
svg.setAttribute("stroke", "currentColor");
|
svg.setAttribute("stroke", "currentColor");
|
||||||
@@ -542,7 +548,7 @@
|
|||||||
svg.setAttribute("stroke-linejoin", "round");
|
svg.setAttribute("stroke-linejoin", "round");
|
||||||
svg.setAttribute("focusable", "false");
|
svg.setAttribute("focusable", "false");
|
||||||
(MENU_ICONES[nom] || []).forEach(function (spec) {
|
(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]);
|
for (var k in spec[1]) el.setAttribute(k, spec[1][k]);
|
||||||
svg.appendChild(el);
|
svg.appendChild(el);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -26,8 +26,13 @@ def _sha256(chemin):
|
|||||||
|
|
||||||
|
|
||||||
def test_barre_css_js_verbatim_commons_v040():
|
def test_barre_css_js_verbatim_commons_v040():
|
||||||
|
# Remplacé en 0.45.12 : la re-vendange v0.4.1 (correctif
|
||||||
|
# fusion #125) supersède l'empreinte JS v0.4.0 — l'empreinte
|
||||||
|
# JS courante est verrouillée par tests/test_barre_v041.py.
|
||||||
|
# Le CSS, inchangé en v0.4.1, garde son empreinte v0.4.0 ;
|
||||||
|
# on garde ici la preuve que le JS a bien quitté la v0.4.0.
|
||||||
assert _sha256("static/css/draco-barre.css") == SHA256_CSS_V040
|
assert _sha256("static/css/draco-barre.css") == SHA256_CSS_V040
|
||||||
assert _sha256("static/js/draco-barre.js") == SHA256_JS_V040
|
assert _sha256("static/js/draco-barre.js") != SHA256_JS_V040
|
||||||
|
|
||||||
|
|
||||||
def test_js_icones_monoline_menu_compte():
|
def test_js_icones_monoline_menu_compte():
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
"""Barre commune v0.4.1 (correctif fusion #125) — re-vendange 0.45.12.
|
||||||
|
|
||||||
|
- JS vendangé VERBATIM depuis dracodev-commons, branche
|
||||||
|
menu-compte-icones-svg-ns-v0-4-1 (PR commons #11),
|
||||||
|
ui/barre-apps/. Le CSS est inchangé par rapport à la v0.4.0.
|
||||||
|
- Correctif : en v0.4.0, les icônes du menu compte étaient
|
||||||
|
créées via document.createElement() — espace de noms HTML,
|
||||||
|
jamais dessinées par le navigateur (libellés décalés d'un
|
||||||
|
cran d'icône, aucun glyphe visible en production). La v0.4.1
|
||||||
|
crée le <svg> et ses primitives via
|
||||||
|
document.createElementNS() (espace de noms SVG).
|
||||||
|
"""
|
||||||
|
import hashlib
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
R = Path(__file__).resolve().parents[1]
|
||||||
|
|
||||||
|
# Empreintes SHA-256 de la source commons
|
||||||
|
# (Projets/dracodev-commons, ui/barre-apps/ ; CSS : v0.4.0
|
||||||
|
# inchangé, JS : branche du correctif v0.4.1 @32a729f).
|
||||||
|
SHA256_CSS_V040 = "d8cf53b2f6700ebc7499d43869d5cae256d1f74636f0113bffb174b8a6bd06ec"
|
||||||
|
SHA256_JS_V041 = "82c4940e8e115ed71d95f7c0dcdc906b93e49855580cc0fec7a1ccba34f85a42"
|
||||||
|
|
||||||
|
|
||||||
|
def _sha256(chemin):
|
||||||
|
return hashlib.sha256((R / chemin).read_bytes()).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
def test_barre_css_js_verbatim_commons_v041():
|
||||||
|
assert _sha256("static/css/draco-barre.css") == SHA256_CSS_V040
|
||||||
|
assert _sha256("static/js/draco-barre.js") == SHA256_JS_V041
|
||||||
|
|
||||||
|
|
||||||
|
def test_js_icones_espace_de_noms_svg():
|
||||||
|
js = (R / "static/js/draco-barre.js").read_text(encoding="utf-8")
|
||||||
|
assert "MENU_ICONES" in js
|
||||||
|
# Le correctif : création dans l'espace de noms SVG…
|
||||||
|
assert 'createElementNS(SVG_NS, "svg")' in js
|
||||||
|
assert "createElementNS(SVG_NS, spec[0])" in js
|
||||||
|
# …et plus aucune création HTML du svg ou des primitives.
|
||||||
|
assert 'createElement("svg")' not in js
|
||||||
|
assert "createElement(spec[0])" not in js
|
||||||
|
# Comportements conservés.
|
||||||
|
assert 'hub: "https://hub.dracodev.net/"' in js
|
||||||
|
assert '"profil", "Profil"' in js
|
||||||
|
assert 'data-compte-act", "deconnexion"' in js
|
||||||
Reference in New Issue
Block a user