From 63e532d5bbbac11d2242c378c4b39579f50be62a Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Sat, 10 Oct 2026 17:39:24 +0100 Subject: [PATCH] feat(entries): Precedent / Suivant parmi les entrees ouvertes Fleches dans l'en-tete du panneau et Alt+fleches, comme un navigateur : un clic par erreur dans une liste filtree ne force plus a refaire la recherche. Historique en memoire (50), vide au verrouillage ; la navigation repasse par openSlideOver et sa confirmation de modifications non enregistrees. Logique pure testee (history.test.js). Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 11 ++++++++ css/style.css | 5 ++++ index.html | 2 ++ js/app.js | 54 ++++++++++++++++++++++++++++++++++++++++ js/tests/harness.js | 2 ++ js/tests/history.test.js | 46 ++++++++++++++++++++++++++++++++++ 6 files changed, 120 insertions(+) create mode 100644 js/tests/history.test.js diff --git a/CLAUDE.md b/CLAUDE.md index b4d02d8..6f39ca5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1561,6 +1561,17 @@ après chaque `DELETE /attachments/{id}`. Un petit vault sain ne paie rien. clic extérieur est déjà câblée). Basculer le flag secret se fait **en place**, jamais via `rerender()` : reconstruire la liste fait flasher le panneau et perd le focus + la hauteur auto du multiligne. +- **Precedent / Suivant des entrees ouvertes** (2026-10-10) : fleches ‹ › de + l'en-tete du panneau + **Alt+←/→** (le `preventDefault` empeche aussi la page + de « reculer »). `state.entryHistory = {ids, pos}`, 50 au plus, memoire + seulement, vide par `lockVault`. Alimente par `openSlideOver` (sauf + `opts.fromHistory`) ; la navigation repasse par `openSlideOver`, donc par la + confirmation « modifications non enregistrees » — la position ne bouge + qu'une fois l'entree vraiment ouverte. Entree supprimee sautee ; panneau + ferme, Alt+← rouvre celle qu'on vient de quitter. Logique pure + (`entryHistoryPush` / `entryHistoryTarget`) testee dans + `js/tests/history.test.js`. Raison : un clic par erreur dans une liste + filtree obligeait a refaire la recherche. - **Settings search** : `#settingsSearch` filtre les `.setting-row` par texte ; match sur le label de section garde toute la section. Esc dans la search avec query = clear ; Esc vide = ferme Settings. diff --git a/css/style.css b/css/style.css index d24a817..6caed5b 100644 --- a/css/style.css +++ b/css/style.css @@ -2285,6 +2285,11 @@ body[data-editor-position="center"]:has(#settingsPanel.is-open)::before { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .slideover-body { padding: 20px; overflow-y: auto; flex: 1; } +/* Precedent / Suivant : le chevron du sprite, tourne. Le titre prend la place. */ +#slideover .slideover-header h3 { flex: 1; min-width: 0; margin-left: 6px; } +.so-hist:disabled { opacity: .3; cursor: default; } +.so-hist-back { transform: rotate(90deg); } +.so-hist-fwd { transform: rotate(-90deg); } .slideover-field { margin-bottom: 16px; } /* Settings panel search — sits below the header, above the body. Only present inside #settingsPanel. */ diff --git a/index.html b/index.html index a4c57c7..5b1cc21 100644 --- a/index.html +++ b/index.html @@ -421,6 +421,8 @@