From 0cbbbf260a12ecbce565449790b67a4d87752787 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Thu, 10 Sep 2026 22:51:08 -0400 Subject: [PATCH] fix(search,excalidraw,e2e): recherche cassee + corruption .excalidraw.md + tests E2E #78 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - frontend/js/search.js : onSearchFilter appelee avec (vault, query, results) — renvoyait undefined, cassait le rendu et basculait sur la recherche offline (0 resultat). Regression plugins depuis 30f2df3. - frontend/excalidraw-editor.html + js/excalidraw-viewer.js : ignorer onChange au montage (plus d'auto-save spurieux qui reecrivait .excalidraw.md en JSON brut) + preservation du format Obsidian frontmatter + compressed-json a la sauvegarde. - frontend/js/app.js : __OBSIGATE_BOOTED pose apres init() (splash + E2E attendent les handlers lies). - tests/e2e : goHome/login attendent le boot ; excalidraw.spec.js reecrit avec les selecteurs reels (modal, context menu, canvas.first()). - ROADMAP : C8 (creation via menu contextuel) marque fait. - Verifie : 86/86 E2E chromium-desktop, 599 backend, ruff, validate-imports, JSDOM. --- CHANGELOG.md | 25 ++++- docs/ROADMAP.md | 6 +- frontend/excalidraw-editor.html | 39 +++++--- frontend/js/app.js | 5 +- frontend/js/excalidraw-viewer.js | 15 ++- frontend/js/search.js | 2 +- tests/e2e/excalidraw.spec.js | 162 +++++++++---------------------- tests/e2e/obsigate.spec.ts | 2 + 8 files changed, 116 insertions(+), 140 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73ff383..3d69de0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,9 +40,28 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - **#78 Excalidraw — doc utilisateur finalisée** : `.excalidraw` / `.excalidraw.md` ajoutés aux formats supportés (README FR/EN), nouvelle section « Diagrammes Excalidraw » dans le guide intégré (i18n FR/EN) et note de compatibilité avec le plugin Obsidian Excalidraw. -- **Roadmap** : #78 marqué terminé (B5 extraction texte, F3 E2E `tests/e2e/excalidraw.spec.js`, - H1-H3 docs) ; C8/F2 non retenus. Points optionnels #61 (dépôt communautaire de plugins) et - #74 (D2/E4/H2/I2) explicitement marqués non retenus. +- **Roadmap** : #78 marqué terminé (B5 extraction texte, C8 menu contextuel, F3 E2E + `tests/e2e/excalidraw.spec.js`, H1-H3 docs) ; F2 non retenu. Points optionnels #61 + (dépôt communautaire de plugins) et #74 (D2/E4/H2/I2) explicitement marqués non retenus. + +### Corrigé + +- **Recherche cassée (régression plugins)** : `onSearchFilter()` était appelée avec 2 arguments + au lieu de 3 (`frontend/js/search.js`), renvoyait `undefined`, faisait échouer le rendu des + résultats et basculait silencieusement sur la recherche hors-ligne (0 résultat). Corrigé → + la recherche full-text et l'autocomplétion refonctionnent (20 tests E2E). +- **`.excalidraw.md` corrompu à l'ouverture** : Excalidraw émet `onChange` au montage, ce qui + déclenchait un auto-save 2 s plus tard réécrivant le fichier au format JSON brut et détruisant + le format plugin Obsidian (`frontend/excalidraw-editor.html` + `frontend/js/excalidraw-viewer.js`). + Les changements initiaux sont désormais ignorés et le format `frontmatter + compressed-json` + est préservé à la sauvegarde. +- **Splash / tests E2E** : `window.__OBSIGATE_BOOTED` était posé avant la fin de `init()` — le + splash disparaissait trop tôt et les tests E2E interagissaient avant que les handlers soient + liés. Le flag est maintenant posé après résolution de `init()` (`frontend/js/app.js`), et + `goHome()`/`login()` attendent ce signal. +- **Tests E2E Excalidraw** : réécriture de `tests/e2e/excalidraw.spec.js` avec les sélecteurs + réels (modale `.obsigate-modal` + `#file-ext-select`/`#file-name-input`, menu contextuel, + `canvas.first()` pour les deux couches canvas). --- diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index edfc251..478ebc5 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -529,7 +529,7 @@ ### 78. Éditeur Excalidraw — Ouverture et édition de fichiers .excalidraw -- **Effort :** 3-4 jours | **Impact :** 🟡 | **Statut :** ✅ TERMINÉ (2026-09-10 — éditeur iframe complet, détection, création, autosave, support `.excalidraw.md`, B5 extraction texte pour la recherche, F3 E2E `tests/e2e/excalidraw.spec.js`, doc H1-H3. C8 et F2 non retenus. BUG-002 corrigé) +- **Effort :** 3-4 jours | **Impact :** 🟡 | **Statut :** ✅ TERMINÉ (2026-09-10 — éditeur iframe complet, détection, création, autosave, support `.excalidraw.md`, B5 extraction texte pour la recherche, C8 création via menu contextuel, F3 E2E `tests/e2e/excalidraw.spec.js`, doc H1-H3. F2 non retenu. BUG-002 corrigé) - **Description :** Prise en charge native des fichiers `.excalidraw` dans ObsiGate avec un éditeur visuel complet intégré. L'utilisateur peut ouvrir un fichier `.excalidraw` depuis l'arborescence et obtenir l'éditeur de diagrammes Excalidraw directement dans ObsiGate — dessiner, modifier, sauvegarder, comme dans l'app Excalidraw standalone, mais intégré au flux de travail du vault Obsidian. @@ -635,7 +635,7 @@ - Quand l'extension `.excalidraw` est sélectionnée, le backend crée le fichier avec le squelette JSON minimum (B6) - Après création → `openFile(vault, path)` → le viewer détecte `is_excalidraw: true` → l'iframe s'ouvre avec le canvas vierge - Fonctionne aussi via la palette de commandes `Ctrl+Alt+Space` → « Nouveau fichier » (action `create-file` existante) - - [ ] **C8. Création via le menu contextuel** — ⚪ NON RETENU (la modale « Nouveau fichier » suffit) : Dans `frontend/js/context-menu.js`, ajouter une option « 🎨 Nouveau diagramme Excalidraw » dans le menu contextuel des répertoires → ouvre directement la modale avec `.excalidraw` pré-sélectionné. + - [x] **C8. Création via le menu contextuel** (FAIT 2026-09 — `frontend/js/ui.js` `_createExcalidraw()`, option « Nouveau diagramme Excalidraw » sur les répertoires, E2E couvert) : ouvre la modale avec `.excalidraw` pré-sélectionné. ##### D. CSS & Design (0.5 jour) - [x] **D1. Styles de l'iframe dans ObsiGate** : L'iframe occupe 100% du content-area (`width: 100%; height: 100%; border: none;`). Aucun padding ni marge. @@ -913,4 +913,4 @@ - L'effort inclut le développement + tests unitaires + intégration CI, mais pas la documentation utilisateur. - Les items marqués 🟢 (nice-to-have) sont de bons candidats pour des contributions externes. - #59 (hors-ligne), #63 (i18n), #64 (MFA), #65-66, #67-68, #71, #74-76, #78 sont livrés — les P3 restants à plus fort rapport effort/valeur : #72 (OpenAPI, 1-2j) et #62 (collaboration). -- #78 est terminé (B5 recherche texte, F3 E2E, doc H1-H3) ; les points C8 et F2 sont non retenus. BUG-002 (loading infini Excalidraw) corrigé par les commits a4ea322/185d603 — à revalider sur poste client. +- #78 est terminé (B5 recherche texte, C8 menu contextuel, F3 E2E, doc H1-H3) ; F2 non retenu. BUG-002 (loading infini Excalidraw) corrigé par les commits a4ea322/185d603. diff --git a/frontend/excalidraw-editor.html b/frontend/excalidraw-editor.html index a9faddd..1c15024 100644 --- a/frontend/excalidraw-editor.html +++ b/frontend/excalidraw-editor.html @@ -102,7 +102,7 @@