From bbd4e2ef061aa87238ad1ad7e57ad68d28e3b48d Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Sat, 10 Oct 2026 18:24:49 +0100 Subject: [PATCH] feat(notes): notes de commandes, une commande copiee ou tapee a la fois Modele "commands" : "# titre" ouvre un groupe, chaque ligne est une commande. Le corps reste du texte (aucune colonne, sync et APK inchanges). Panneau : liste avec Copier. Recherche rapide : la note s'ouvre sur sa liste filtrable ; Entree tape la commande sans Entree et sans vider le champ, Ctrl+Entree copie, Esc revient. Decoupage teste. Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 10 ++++ css/style.css | 8 +++ index.html | 4 ++ js/app.js | 105 ++++++++++++++++++++++++++++++++++++-- js/app.overlays.js | 100 +++++++++++++++++++++++++++++++++++- js/tests/commands.test.js | 31 +++++++++++ js/tests/harness.js | 2 + 7 files changed, 253 insertions(+), 7 deletions(-) create mode 100644 js/tests/commands.test.js diff --git a/CLAUDE.md b/CLAUDE.md index 6f39ca5..9468b17 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1572,6 +1572,16 @@ après chaque `DELETE /attachments/{id}`. Un petit vault sain ne paie rien. (`entryHistoryPush` / `entryHistoryTarget`) testee dans `js/tests/history.test.js`. Raison : un clic par erreur dans une liste filtree obligeait a refaire la recherche. +- **Notes de commandes** (2026-10-10, modele `commands`) : le corps reste du + texte - `# titre` ouvre un groupe, chaque autre ligne non vide est une + commande (`parseCommandNote`, teste dans `js/tests/commands.test.js`). Aucune + colonne : le texte est deja chiffre, synchronise, exporte et lu par l'APK. + Panneau : case *Command list* (bascule le modele, compte dans `isSoDirty` via + `originalTemplate`) + liste avec **Copier** seulement - la fenetre au premier + plan y serait l'app elle-meme. Recherche rapide : choisir la note ouvre sa + liste (`qsCommands`), la saisie filtre, Entree **tape sans Entree** et + **sans Ctrl+A + Suppr** (`executeAutofill(..., noClear)` : dans un terminal + Ctrl+A ramene en debut de ligne), Ctrl+Entree copie, Esc revient aux entrees. - **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 6caed5b..fbf2c3d 100644 --- a/css/style.css +++ b/css/style.css @@ -1979,6 +1979,14 @@ input[type="range"]::-webkit-slider-thumb { .so-note-body.is-masked, .so-custom-multiline.is-masked { -webkit-text-security: disc; } .so-note-label { display: flex; align-items: center; justify-content: space-between; } +/* Note de commandes : une ligne par commande, groupees sous leur titre. */ +.so-cmds-toggle { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-dim); cursor: pointer; } +.so-cmds-list { margin-top: 8px; display: flex; flex-direction: column; gap: 4px; } +.so-cmds-group { font-size: 11px; font-weight: 600; text-transform: uppercase; color: var(--text-dim); margin-top: 8px; } +.so-cmds-row { display: flex; align-items: center; gap: 8px; padding: 4px 8px; border: 1px solid var(--border); border-radius: 6px; } +.so-cmds-cmd { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; } +.so-cmds-empty { font-size: 12px; color: var(--text-dim); } +.qs-cmd { font-family: ui-monospace, Consolas, monospace; font-size: 13px; } /* ---- + New dropdown ---------------------------------- */ .new-entry-wrap { diff --git a/index.html b/index.html index 5b1cc21..05bcb70 100644 --- a/index.html +++ b/index.html @@ -371,6 +371,10 @@ Server credentials +