From a726ad85111f0ce62d15c925f43c494017bdc574 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Wed, 23 Sep 2026 21:06:37 -0400 Subject: [PATCH] feat: en-tete allege, compte utilisateur en sidebar et pellicule d'images defilable (molette + fleches) #112 --- .gitea/workflows/ci.yml | 1 + CHANGELOG.md | 24 +++- README.fr.md | 6 +- README.md | 6 +- VERSION | 2 +- desktop/Cargo.lock | 2 +- desktop/Cargo.toml | 2 +- desktop/tauri.conf.json | 2 +- docs/ROADMAP.md | 5 +- docs/features/header-user-sidebar-112.md | 69 ++++++++++ frontend/index.html | 76 ++++++++--- frontend/js/auth.js | 54 ++++++-- frontend/js/viewer.js | 40 +++++- frontend/locales/en.json | 9 +- frontend/locales/fr.json | 9 +- frontend/style.css | 153 ++++++++++++++++++++++- package.json | 2 +- tests/e2e/header-sidebar.spec.js | 67 ++++++++++ tests/e2e/image-viewer.spec.js | 27 ++++ tests/frontend/image-viewer.test.mjs | 15 +++ tests/frontend/unit.test.mjs | 45 +++++++ 21 files changed, 563 insertions(+), 53 deletions(-) create mode 100644 docs/features/header-user-sidebar-112.md create mode 100644 tests/e2e/header-sidebar.spec.js diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 346c177..1565ad7 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -38,6 +38,7 @@ jobs: - name: Frontend unit tests run: | node tests/frontend/unit.test.mjs + node tests/frontend/image-viewer.test.mjs node tests/frontend/pdf-viewer.test.mjs node tests/frontend/forge-completion.test.mjs node tests/frontend/config-mobile.test.mjs diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c74e75..2ea8d8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/), et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). > **En cours de développement** : les changements à venir sont listés dans la section -> [Unreleased](#unreleased). La dernière version livrée est **2.20.0**. +> [Unreleased](#unreleased). La dernière version livrée est **2.21.0**. --- @@ -14,6 +14,28 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- +## [2.21.0] — 2026-09-23 + +### Ajouté + +- **#112 — section compte en bas de la sidebar.** L'identité (avatar avec + initiales, nom, rôle) et la **déconnexion** sont regroupées dans un bloc + épinglé au bas de la barre latérale, comme sur les sites professionnels ; un + clic sur l'identité ouvre le Profil. Nouvelle clef i18n FR/EN pour le rôle. +- **#112 — pellicule d'images défilable.** La molette de la souris fait défiler + horizontalement la bande de miniatures et deux **flèches translucides** sur les + côtés (révélées au survol) remplissent la même fonction. + +### Modifié + +- **#112 — en-tête allégé.** La **version** quitte le header pour le menu + **Options** (ligne « Version ») ; le **bouton de déconnexion** et le **nom de + l'utilisateur** sont retirés du header au profit de la section compte de la + sidebar. Le header droit ne conserve que l'indicateur hors-ligne, le contexte + vault et le bouton Options. + +--- + ## [2.20.0] — 2026-09-23 ### Ajouté diff --git a/README.fr.md b/README.fr.md index 9ccff85..68854c7 100644 --- a/README.fr.md +++ b/README.fr.md @@ -4,7 +4,7 @@ **Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive. -[![Version](https://img.shields.io/badge/Version-2.20.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.21.0-blue.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) @@ -975,8 +975,8 @@ Ce projet est sous licence **MIT** — voir le fichier [LICENSE](LICENSE) pour l ## 📝 Changelog -Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.20.0). +Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.21.0). --- -*Projet : ObsiGate | Version : 2.20.0 | Dernière mise à jour : Septembre 2026* +*Projet : ObsiGate | Version : 2.21.0 | Dernière mise à jour : Septembre 2026* diff --git a/README.md b/README.md index f77a701..968a565 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Ultra-light web gateway for your Obsidian vaults** — Access, browse, and search all your Obsidian notes from any device via a modern, responsive web interface. -[![Version](https://img.shields.io/badge/Version-2.20.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.21.0-blue.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) @@ -1150,8 +1150,8 @@ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) ## 📝 Changelog -See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.20.0). +See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.21.0). --- -*Project: ObsiGate | Version: 2.20.0 | Last updated: September 2026* +*Project: ObsiGate | Version: 2.21.0 | Last updated: September 2026* diff --git a/VERSION b/VERSION index 7329e21..db65e21 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.20.0 +2.21.0 diff --git a/desktop/Cargo.lock b/desktop/Cargo.lock index 4d818fd..d5fabbb 100644 --- a/desktop/Cargo.lock +++ b/desktop/Cargo.lock @@ -2626,7 +2626,7 @@ dependencies = [ [[package]] name = "obsigate-desktop" -version = "2.20.0" +version = "2.21.0" dependencies = [ "chrono", "env_logger", diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index bd01a95..56c371c 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "obsigate-desktop" -version = "2.20.0" +version = "2.21.0" description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian" authors = ["Bruno Charest"] edition = "2021" diff --git a/desktop/tauri.conf.json b/desktop/tauri.conf.json index 671de7a..3d192c8 100644 --- a/desktop/tauri.conf.json +++ b/desktop/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json", "productName": "ObsiGate", - "version": "2.20.0", + "version": "2.21.0", "identifier": "com.obsigate.desktop", "build": { "frontendDist": "../frontend", diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index eee8c72..9a040c6 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,6 +1,6 @@ # ObsiGate — Roadmap -> **Version :** 2.20.0 | **Dernière mise à jour :** 2026-09-23 +> **Version :** 2.21.0 | **Dernière mise à jour :** 2026-09-23 > **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact > vers les fonctionnalités livrées. > - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)** @@ -184,6 +184,7 @@ | 109 | Support audio & vidéo — lecteurs HTML5 intégrés, streaming HTTP Range (`/api/media`), fallback codec/taille | 2.18.0 | [features/media-viewers-109.md](./features/media-viewers-109.md) | | 110 | Lecteur média persistant « Now Playing » — élément partagé téléporté (inline ⇄ dock), Media Session, mini-vidéo PiP, mobile, reprise | 2.19.0 | [features/media-viewers-109.md](./features/media-viewers-109.md) | | 111 | Visionneuse d'images — navigation fluide : image ajustée au cadre, navigation en place (cache annuaire + préchargement), pellicule persistante, flèches latérales au survol | 2.20.0 | [features/image-navigation-111.md](./features/image-navigation-111.md) | +| 112 | En-tête allégé & compte en sidebar — version dans le menu Options, retrait utilisateur/déconnexion du header, section compte en bas de la sidebar, pellicule d'images défilable (molette + flèches) | 2.21.0 | [features/header-user-sidebar-112.md](./features/header-user-sidebar-112.md) | --- @@ -191,7 +192,7 @@ | Priorité | Items | Effort total estimé | |---|---|---| -| ✅ Complété | #1 → #59, #61–72, #74–76, #78–84, #86, #88–93, #94–100, #102–111, #92 | ~130 jours réalisés | +| ✅ Complété | #1 → #59, #61–72, #74–76, #78–84, #86, #88–93, #94–100, #102–112, #92 | ~130 jours réalisés | | 🔵 P2 restant | #77 Desktop : signature de code (non retenue), 6 tests E2E **manuels** ([protocole](./DESKTOP_E2E_CHECKLIST.md)) | ~0,5-1 jour | | ⚪ P4 restant | #73 Sync (6-8j) | 6-8 jours | | ⚪ P0/P1 restant | #85, #87 Refonte architecturale, CI/CD (BUG-035 → BUG-040 corrigés, #86 livré) | ~11-17 jours | diff --git a/docs/features/header-user-sidebar-112.md b/docs/features/header-user-sidebar-112.md new file mode 100644 index 0000000..0713a41 --- /dev/null +++ b/docs/features/header-user-sidebar-112.md @@ -0,0 +1,69 @@ +# #112 — En-tête allégé & compte en sidebar + +> **Version livrée :** 2.21.0 · **Statut :** 🟢 · **Impact :** 🟡 +> **Zone :** frontend (`index.html`, `frontend/js/auth.js`, `frontend/js/viewer.js`, +> `frontend/style.css`, i18n FR/EN) + CI (`.gitea/workflows/ci.yml`). + +## Contexte + +Le header concentrait plusieurs éléments redondants ou peu lisibles : + +- la **version** était affichée en permanence à côté du bouton Options ; +- un **bouton de déconnexion** et le **nom de l'utilisateur** occupaient la zone + droite du header, sans regroupement logique ; +- la pellicule de miniatures de la visionneuse d'images ne pouvait être + parcourue qu'au glisser (pas de molette horizontale ni de flèches dédiées). + +## Ce qui a été livré + +### A. Header allégé + +- **Version déplacée** du header vers le menu **Options** : nouvelle ligne + non-interactive « Version » (`#version-badge` conservé pour `populateVersions`). +- **Suppression** du bloc `#user-menu` (nom + bouton « sign out ») et de la + ligne « Déconnexion » du menu Options. Le header droit ne garde que l'indicateur + hors-ligne, le contexte vault et le bouton Options. + +### B. Section compte en bas de la sidebar + +- Nouveau bloc `#sidebar-user` épinglé au bas de la sidebar (`flex-shrink: 0`, + bordure supérieure), à la manière d'un site web professionnel : + - initiales dans un **avatar** circulaire (dégradé d'accent) ; + - **nom** (`#sidebar-user-name`, classe `.user-display-name` conservée pour la + réutilisation par la collaboration) et **rôle** localisé + (Administrateur / Utilisateur) ; + - **bouton déconnexion** (`#sidebar-user-logout`) ; + - clic sur l'identité → **Profil** (ouvre la section `#cfg-profile`). +- `AuthManager.renderUserSection()` peuple le bloc ; il reste masqué quand + l'authentification est désactivée (`#sidebar-user[hidden]`). `renderUserMenu()` + est conservé comme alias rétro-compatible. +- La règle mobile qui masquait `.user-display-name` est limitée au header + (`.header-right .user-display-name`) pour que le nom reste visible dans la + sidebar mobile. + +### C. Pellicule d'images défilable (#112, complément de #111) + +- Nouveau conteneur `.image-nav` autour de la pellicule, avec deux **flèches + translucides** fixes (`.image-strip-arrow-prev/next`) révélées au survol. +- **Molette** au-dessus de la pellicule → défilement horizontal + (`strip.scrollLeft += deltaY`), conversion des deltas verticaux. +- Les flèches font défiler d'une « page » (`strip.scrollBy`, défilement doux). + +## Tests + +- `tests/frontend/unit.test.mjs` (+1) : header nettoyé (plus de `#user-menu`, + `#logout-btn`, ni version dans `.header-right`), version dans le menu Options, + présence de `#sidebar-user`, styles `.sidebar-user`/`.menu-list-version`, clés + i18n FR/EN. +- `tests/frontend/image-viewer.test.mjs` (+1) : wrapper `.image-nav`, flèches de + pellicule, molette et `scrollBy`. +- `tests/e2e/header-sidebar.spec.js` (nouveau) : test header/version exécuté + partout ; test compte en sidebar conditionné à l'auth (skip sinon). +- CI : `image-viewer.test.mjs` ajouté au job `lint` (il n'y était pas depuis #108). + +## Limitations connues + +- La section compte n'apparaît que si l'authentification est activée. +- `doLogoutFallback` (script inline supprimé avec la ligne du menu) reste appelé + par la section Profil uniquement en repli ; `window.handleLogout` est toujours + défini par `auth.js`, donc le repli n'est jamais atteint. diff --git a/frontend/index.html b/frontend/index.html index 37a29fd..4834917 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -519,9 +519,6 @@ > All - -
-
- - +
@@ -1052,6 +1049,43 @@ Aucune conversation + + + @@ -3293,6 +3327,10 @@ Tags : Nuage de tags cliquables +
  • + Compte : Avatar, nom, + rôle et déconnexion en bas de la sidebar +
  • Fonctionnalités de la sidebar :