Merge pull request 'Mobile : tiroir 264 px, pied visible, menu compte fonctionnel' (#72) from mobile-72 into main
CI / test (push) Successful in 3m46s

This commit was merged in pull request #72.
This commit is contained in:
2026-10-29 12:29:44 -04:00
6 changed files with 79 additions and 2 deletions
+7
View File
@@ -1,3 +1,10 @@
## 0.45.0 — 2026-10-29 — Mobile : tiroir, pied et menu compte
- **Tiroir mobile** : l'état « replié » mémorisé sur desktop ne rétrécit plus le tiroir (cause : `body.sidebar-collapsed .sidebar { width: 68px; }` gagnait par spécificité sur le 264 px mobile, libellés tronqués par overflow-x). Le tiroir fait 264 px, replié ou non ; le fond ne défile plus derrière lui ; le bouton de repli dans le tiroir le ferme ; un clic sur un lien de navigation le ferme aussi.
- **Pied de sidebar visible en mobile** : version, fraîcheur des données, thème et Sortir sont désormais accessibles dans le tiroir (avant : pied masqué, aucun moyen de sortir depuis un téléphone).
- **Menu compte draco** : Profil et Déconnexion fonctionnent enfin (ils étaient relayés par draco-barre.js mais jamais pris en charge par le onAction Kanbante — le menu se fermait sans rien faire). En mobile, c'était le seul accès au profil et à la déconnexion.
- **Menus draco** : largeur plafonnée à 100vw - 20 px pour ne jamais déborder d'un petit écran.
## 0.44.0 — 2026-10-29 — Ergonomie : tuile Projets et pied de sidebar
- **Tuile Projets** : en-tête groupé (gauche : organisation + santé, droite : date + étoile + menu) au lieu de 5 éléments éparpillés ; avancement global labellisé (« Avancement — X/Y terminées ») au lieu d'une barre anonyme ; jalon séparé par un filet, avec étiquette « Prochain jalon » et échéance distincte ; pied en 2 rangées — (1) compte d'issues + bouton Board, (2) répartition par colonne labellisée (« En cours 8 », « Terminé 59 », au lieu de chiffres nus 8 / 59) + prévision ; activité de la semaine en texte secondaire (« Cette semaine : … »).
+1 -1
View File
@@ -177,7 +177,7 @@ from urllib.parse import urlparse
BASE_DIR = Path(__file__).resolve().parent.parent
APP_VERSION = "0.44.0"
APP_VERSION = "0.45.0"
def _env_bool(name: str, default: bool) -> bool:
+7
View File
@@ -103,6 +103,13 @@
};
if (act === "domaine") { try { localStorage.setItem("draco_domain", el.dataset.dom); } catch (e) { } return; }
if (act === "rail") { var b = document.getElementById("side-collapse"); if (b) b.click(); return; }
/* Menu compte (image 2) : ces deux actions étaient relayées
par draco-barre.js mais jamais prises en charge ici —
le menu se fermait sans rien faire. En mobile, c'est le
seul accès au profil et à la déconnexion (le pied de
sidebar était masqué). */
if (act === "profil") { location.href = "/profile"; return; }
if (act === "deconnexion") { location.href = "/logout"; return; }
if (act === "palette") { location.href = "/recherche"; return; }
if (act === "alertes") { if (window.DRACO_ALERTES) { window.DRACO_ALERTES.open(); } else { location.href = "/activity"; } return; }
/* Correctif fusion #70 : action "menu" supprimée avec le bouton trois points (console agent dans le menu de la marque). */
+19 -1
View File
@@ -1462,12 +1462,30 @@ body.sidebar-collapsed .side-foot-user { justify-content: center; }
body.with-sidebar, body.with-sidebar.sidebar-collapsed { padding-left: 0; }
.sidebar { width: 264px; transform: translateX(-105%); box-shadow: none; }
body.sidebar-open .sidebar { transform: none; box-shadow: 18px 0 44px rgba(0,0,0,.5); }
/* Tiroir mobile : l'état « replié » mémorisé sur desktop ne doit
JAMAIS rétrécir le tiroir. Avant, `body.sidebar-collapsed
.sidebar { width: 68px; }` (spécificité supérieure à `.sidebar`)
gagnait en mobile : libellés tronqués par overflow-x hidden,
exactement la capture image 1. Le tiroir fait 264 px, replié
ou non, et le fond ne défile plus derrière lui. */
body.sidebar-collapsed .sidebar,
body.sidebar-open.sidebar-collapsed .sidebar { width: 264px; }
body.sidebar-open { overflow: hidden; }
body.sidebar-collapsed .side-label { display: initial; }
body.sidebar-collapsed .side-link { justify-content: flex-start; padding-left: 10px; padding-right: 10px; }
body.sidebar-collapsed .side-logo { justify-content: flex-start; padding-left: 8px; padding-right: 8px; }
body.sidebar-collapsed .side-head { flex-direction: row; padding: 4px 6px 12px; }
body.sidebar-collapsed .side-search { margin-left: auto; }
.side-foot { display: none; }
/* Pied visible dans le tiroir (avant : display:none en mobile —
aucun moyen de voir la version, la fraîcheur, le thème ni de
sortir depuis un téléphone). */
.side-foot { display: flex; }
body.sidebar-collapsed .side-foot { align-items: stretch; }
body.sidebar-collapsed .side-foot-meta { display: flex; }
body.sidebar-collapsed .side-foot-user { justify-content: flex-start; }
.topbar-search { display: inline-flex; }
/* Menus draco (vendangés) : jamais plus larges que l'écran. */
header.draco-bar .draco-compte-menu, header.draco-bar .draco-apps-menu { max-width: calc(100vw - 20px); }
}
/* ── Dashboard vague 2 (0.17.0, #17 #18 #20) + page Projet (#25) ── */
+10
View File
@@ -63,8 +63,18 @@
});
}
/* En mobile, le bouton de repli dans le tiroir FERME le tiroir :
replier un tiroir de 264 px n'a pas de sens, et avant ce
correctif il basculait l'état desktop (tiroir 68 px). */
var sideLinks = document.querySelectorAll('.side-link');
sideLinks.forEach(function (link) {
link.addEventListener('click', function () {
if (window.innerWidth <= 900) closeDrawer();
});
});
if (collapseBtn) {
collapseBtn.addEventListener('click', function () {
if (window.innerWidth <= 900) { closeDrawer(); return; }
var collapsed = document.body.classList.toggle('sidebar-collapsed');
try {
localStorage.setItem('kanbante-sidebar', collapsed ? 'collapsed' : 'open');
+35
View File
@@ -0,0 +1,35 @@
"""Mobile : tiroir, pied et menu compte.
Bugs signalés sur captures (29 octobre 2026) :
- tiroir rétréci à 68 px en mobile quand l'état « replié » desktop
était mémorisé (spécificité de `body.sidebar-collapsed .sidebar`) ;
- pied de sidebar masqué en mobile (`display: none`) ;
- Profil / Déconnexion du menu compte draco sans effet (onAction
ne les prenait pas en charge).
"""
def test_tiroir_mobile_largeur_fixe():
css = open("static/css/style.css", encoding="utf-8").read()
assert "body.sidebar-collapsed .sidebar,\n body.sidebar-open.sidebar-collapsed .sidebar { width: 264px; }" in css
assert "body.sidebar-open { overflow: hidden; }" in css
def test_pied_visible_en_mobile():
css = open("static/css/style.css", encoding="utf-8").read()
assert ".side-foot { display: none; }" not in css
assert "body.sidebar-collapsed .side-foot-meta { display: flex; }" in css
def test_menu_compte_draco_fonctionnel():
tpl = open("app/templates/_draco_bar.html", encoding="utf-8").read()
assert 'act === "profil"' in tpl
assert 'location.href = "/profile"' in tpl
assert 'act === "deconnexion"' in tpl
assert 'location.href = "/logout"' in tpl
def test_tiroir_ferme_en_mobile():
js = open("static/js/nav.js", encoding="utf-8").read()
assert "window.innerWidth <= 900" in js
assert "querySelectorAll('.side-link')" in js