fix: Editeur Excalidraw - diagramme vide (CSS + appState) et auto-save pendant l'edition (BUG-064, BUG-065)
This commit is contained in:
+48
-1
@@ -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.11.5**.
|
||||
> [Unreleased](#unreleased). La dernière version livrée est **2.11.6**.
|
||||
|
||||
---
|
||||
|
||||
@@ -14,6 +14,53 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
---
|
||||
|
||||
## [2.11.6] — 2026-09-18
|
||||
|
||||
### Corrigé
|
||||
|
||||
- **BUG-064 - Éditeur Excalidraw : le diagramme ne s'affiche jamais (canvas vide)** — deux
|
||||
causes cumulées :
|
||||
1. **La feuille de style d'Excalidraw n'était jamais chargée** (`@excalidraw/excalidraw` exige
|
||||
un import CSS explicite). Sans elle, l'éditeur est non stylisé et `.excalidraw` n'a aucune
|
||||
hauteur fixe : la boucle de redimensionnement d'Excalidraw fait grossir le canvas jusqu'au
|
||||
plafond codé en dur de `2^25` (33 554 432 px), que le navigateur ne peut pas dessiner → scène
|
||||
blanche. Correctifs : `<link>` vers `…/@excalidraw/[email protected]/dist/prod/index.css` dans
|
||||
`frontend/excalidraw-editor.html` et ajout de `https://esm.sh` à `style-src` de la CSP
|
||||
(`backend/main.py`).
|
||||
2. `appState.collaborators` est une `Map` sérialisée en objet JSON (`{}`) par l'app Excalidraw /
|
||||
le plugin Obsidian ; réinjectée via `initialData`, Excalidraw 0.18 appelait `.forEach()` dessus
|
||||
et plantait (`e.appState.collaborators.forEach is not a function`). `sanitizeAppState()` la
|
||||
reconvertit en `Map` et écarte la géométrie de viewport importée (`width`, `height`,
|
||||
`offsetLeft`, `offsetTop`) pour les deux formats (`.excalidraw` et `.excalidraw.md`).
|
||||
Tests de non-régression : `tests/frontend/excalidraw-viewer.test.mjs` (CSS lié + CSP),
|
||||
`tests/test_security_hardening.py::TestCspExcalidrawStylesheet`, `tests/e2e/excalidraw.spec.js`
|
||||
(hauteur de canvas bornée) + fixtures `test_vault/diagram-app-export.excalidraw`.
|
||||
- **BUG-064 (complément) - Éditeur Excalidraw : pleine largeur quand la navigation est masquée** :
|
||||
la règle `.sidebar.hidden ~ .content-wrapper .content-area { max-width: 1200px }` (colonne de
|
||||
lecture centrée) s'appliquait aussi au viewer Excalidraw. Ajout de
|
||||
`.content-area:has(iframe[src*="excalidraw-editor.html"])` en `max-width: none; margin: 0`,
|
||||
comme pour les viewers PDF/image (BUG-062). Fichier : `frontend/style.css`.
|
||||
- **BUG-065 - Excalidraw : l'auto-save rechargeait la page en pleine édition** : chaque
|
||||
modification déclenchait, 2 s plus tard, un `PUT /api/file/…/save` ; l'écriture émettait
|
||||
`index_updated` (SSE) qui re-rendait la vue et **recréait l'iframe** — un refresh visible qui
|
||||
interrompait le dessin. L'auto-save est supprimée (`frontend/js/excalidraw-viewer.js`) :
|
||||
sauvegarde explicite par le bouton « 💾 Save » ou `Ctrl+S`. En complément, `reloadExternalWrite`
|
||||
ne re-rend plus la vue quand un iframe Excalidraw est déjà ouvert sur le fichier
|
||||
(`iframe[data-excalidraw-*]`), et le badge « Modified » ne se déclenche plus sur les
|
||||
changements d'`appState` (resize, zoom) mais uniquement sur le contenu (signature des éléments).
|
||||
- **#78 (complément) - Bouton plein écran pour les diagrammes Excalidraw** : nouveau bouton
|
||||
`#btn-fullscreen` dans la barre d'outils de l'éditeur (`frontend/excalidraw-editor.html`) qui
|
||||
bascule le mode plein écran natif ; l'iframe est créée avec `allow="fullscreen" allowfullscreen`
|
||||
(`frontend/js/excalidraw-viewer.js`). Fichiers : `frontend/excalidraw-editor.html`,
|
||||
`frontend/js/excalidraw-viewer.js`, `tests/frontend/excalidraw-viewer.test.mjs`.
|
||||
- **#78 (complément) - Barre d'outils Excalidraw en icônes, verticale à droite** : les boutons
|
||||
Save / PNG / SVG / plein écran passent en **icônes seules** (34×34 px) dans une colonne
|
||||
**collée au bord droit** (`right: 0`), débutant à `45%` de la hauteur, empilée verticalement,
|
||||
avec infobulles et `aria-label`. L'icône du bouton Save devient une coche après une sauvegarde
|
||||
réussie. Fichier : `frontend/excalidraw-editor.html`.
|
||||
|
||||
---
|
||||
|
||||
## [2.11.5] — 2026-09-17
|
||||
|
||||
### Corrigé
|
||||
|
||||
Reference in New Issue
Block a user