From 4f99d5ce6193473285521741cec7a4177df9adee Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Thu, 10 Sep 2026 20:51:25 -0400 Subject: [PATCH] docs(excalidraw,roadmap): #78 H1-H3 doc utilisateur + #61/#74 optionnels non retenus - README FR/EN : .excalidraw dans les formats supportes + section Diagrammes Excalidraw - Guide integre : nouvelle section Excalidraw (i18n FR/EN) + note compatibilite plugin Obsidian - ROADMAP : #78 termine (B5/F3/H1-H3), C8/F2 non retenus ; #61 et #74 optionnels marques non retenus - CHANGELOG : entree Documentation --- CHANGELOG.md | 9 +++++++ README.fr.md | 8 ++++++ README.md | 10 ++++++- docs/ROADMAP.md | 44 +++++++++++++++---------------- frontend/index.html | 56 ++++++++++++++++++++++++++++++++++++++++ frontend/locales/en.json | 11 ++++++++ frontend/locales/fr.json | 11 ++++++++ 7 files changed, 126 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59c8a82..73ff383 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,15 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - CI : job lint ajoute `node plugins.test.mjs` aux tests JSDOM. - Docs : `docs/PLUGINS.md` (manifest, hooks, permissions, modèle de sécurité, API, guide). +### Documentation + +- **#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. + --- ## [2.1.0] — 2026-09-08 diff --git a/README.fr.md b/README.fr.md index 1a5b5cd..f259540 100644 --- a/README.fr.md +++ b/README.fr.md @@ -65,6 +65,7 @@ - **🏷️ Tag cloud** : Filtrage par tags extraits des frontmatters YAML - **🔗 Wikilinks** : Les `[[liens internes]]` Obsidian sont cliquables - **🖼️ Images Obsidian** : Support complet des syntaxes d'images Obsidian avec résolution intelligente +- **🎨 Diagrammes Excalidraw** : Visualiseur/éditeur natif des fichiers `.excalidraw` et `.excalidraw.md` (iframe sandboxée, auto-save, thème clair/sombre, texte des diagrammes indexé pour la recherche) - **🎨 Syntax highlight** : Coloration syntaxique des blocs de code - **🌓 Thème clair/sombre** : Toggle persisté en localStorage - **📡 Synchronisation temps réel** : Surveillance automatique des fichiers via watchdog avec mise à jour incrémentale de l'index @@ -623,6 +624,13 @@ Les métadonnées (pages, titre, auteur) sont disponibles via `GET /api/file/{va **Limitations :** pas d'OCR (les PDF scannés ne sont pas recherchables), pas d'annotation, pas d'édition du PDF lui-même. +### Diagrammes Excalidraw + +Les fichiers `.excalidraw` et `.excalidraw.md` s'ouvrent dans un éditeur visuel Excalidraw complet, intégré dans une iframe sandboxée — dessinez, modifiez et sauvegardez sans quitter ObsiGate. +Les modifications sont sauvegardées automatiquement (2 s) ou avec `Ctrl+S` ; l'éditeur suit le thème clair/sombre. +Le texte des éléments du diagramme est extrait à l'indexation : il est donc recherchable via la recherche full-text (`ext:excalidraw`). +Les fichiers créés avec le **plugin Obsidian Excalidraw** (y compris le format `.excalidraw.md` compressé) sont compatibles. + ### Raccourcis clavier | Raccourci | Action | diff --git a/README.md b/README.md index 19ea58b..464da86 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ - **🏷️ Tag Cloud** : Filtering by tags extracted from YAML frontmatters - **🔗 Wikilinks** : `[[internal links]]` from Obsidian are clickable - **🖼️ Obsidian Images** : Full support for all Obsidian image syntaxes with intelligent resolution +- **🎨 Excalidraw Diagrams** : Native viewer/editor for `.excalidraw` and `.excalidraw.md` files (sandboxed iframe, autosave, dark/light theme, diagram text indexed for search) - **🎨 Syntax Highlight** : Syntax highlighting for code blocks - **🌓 Light/Dark Theme** : Toggle persisted in localStorage - **📡 Real-time Sync** : Automatic file monitoring via watchdog with incremental index updates @@ -740,7 +741,7 @@ curl "http://localhost:2020/api/file/Recipes?path=pizza.md" | `ext:` | Filter by file type | `ext:md kubernetes` | | `"exact phrase"` | Phrase search | `tag:"multiple words"` | -Extension filter examples: `ext:sh` for bash scripts, `ext:py` for Python scripts, `ext:md` for Markdown files, `ext:pdf` for PDF documents (text-extracted content is indexed). +Extension filter examples: `ext:sh` for bash scripts, `ext:py` for Python scripts, `ext:md` for Markdown files, `ext:pdf` for PDF documents, `ext:excalidraw` for Excalidraw diagrams (text-extracted content is indexed). ### PDF support @@ -752,6 +753,13 @@ PDF metadata (pages, title, author) is available via `GET /api/file/{vault}/pdf/ **Limitations:** no OCR (scanned PDFs aren't searchable), no annotation, no editing of the PDF itself. +### Excalidraw diagrams + +`.excalidraw` and `.excalidraw.md` files open in a full visual Excalidraw editor embedded in a sandboxed iframe — draw, edit and save without leaving ObsiGate. +Changes are saved automatically (2s debounce) or with `Ctrl+S`; the editor follows the light/dark theme. +Text labels inside the diagram elements are extracted on indexing, so diagram content is searchable via the full-text search (`ext:excalidraw`). +Files created with the **Obsidian Excalidraw plugin** (including the compressed `.excalidraw.md` format) are compatible. + Operators are combinable: `tag:linux vault:IT ext:md server web` searches for "server web" in Markdown files of the IT vault with the linux tag. ### Keyboard Shortcuts diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 9d1f9b5..edfc251 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,7 +1,7 @@ # ObsiGate — Roadmap -> **Version :** 2.1.0-dev | **Dernière mise à jour :** 2026-09-07 -> Revue de cohérence roadmap ↔ code : cases cochées selon l'état réel vérifié dans le dépôt (commit c066b2c). +> **Version :** 2.1.0-dev | **Dernière mise à jour :** 2026-09-10 +> Revue de cohérence roadmap ↔ code : cases cochées selon l'état réel vérifié dans le dépôt (#78 docs H1-H3, #67 push, #68 health, #74/#61 optionnels non retenus). > Voir aussi [CHANGELOG.md](./CHANGELOG.md), [AUDIT_TECHNIQUE.md](./docs/AUDIT_TECHNIQUE_2026-05-27.md) --- @@ -168,7 +168,7 @@ - [x] API de hooks : `onFileRender`, `onSearchFilter`, `onEditorAction`, `onSidebarItem`, `onFileCreate`, `onFileDelete`, `onVaultMount` - [x] Sandbox d'exécution : Web Worker isolé pour le code plugin (blob URL, postMessage structuré, CSP sans importScripts) - [x] UI : page « Plugins » dans les paramètres (installer, activer/désactiver, désinstaller, template, viewer) - - [ ] Distribution : dépôt de plugins communautaire (fichier JSON index) — *backlog* + - [ ] Distribution : dépôt de plugins communautaire (fichier JSON index) — ⚪ NON RETENU (backlog) - [x] Hot-reload : activation/désactivation sans rechargement de page (marker `.disabled`) - [x] Sécurité : manifest de permissions, validation path-traversal, CSP restrictif - **Livré :** @@ -251,7 +251,7 @@ - [x] Endpoints : `GET /api/export/html`, `GET /api/export/md-bundle`, `GET /api/export/epub` ### 74. Support complet des documents PDF — ✅ TERMINÉ -- **Effort :** 4-5 jours | **Impact :** 🟡 | **Statut :** ✅ COMPLET (2026-09-07 — C3 + Range 206 + config G3 + indexation incrémentale, commit 7042307) +- **Effort :** 4-5 jours | **Impact :** 🟡 | **Statut :** ✅ COMPLET (2026-09-07 — C3 + Range 206 + config G3 + indexation incrémentale, commit 7042307. Optionnels D2/E4/H2/I2 non retenus) - **Description :** Prise en charge native des fichiers PDF dans ObsiGate avec parité fonctionnelle complète avec les documents Markdown : apparition dans l'arborescence, indexation full-text, visualisation inline dans le navigateur, recherche TF-IDF, et téléchargement. - **Implémentation réelle (vérifiée 2026-09-07) :** - **Bugs corrigés (2026-09) :** `api_pdf_stream` crashait en 500 (`NameError: current_user` jamais injecté) ; l'indexation incrémentale du watcher faisait `read_text()` sur les PDFs (garbage) ; Range/206 et `pdf/info` absents malgré le texte ci-dessous. @@ -294,7 +294,7 @@ ##### D. Frontend — Arborescence de fichiers (0.5 jour) - [x] **D1. Icône et filtre** : L'icône PDF (`file-text` de Lucide) est déjà mappée dans `EXT_ICONS` (`frontend/js/utils.js:129`). Une fois `.pdf` dans `SUPPORTED_EXTENSIONS`, les PDFs apparaissent automatiquement dans l'arborescence via l'API `list_directory`. Aucun changement UI nécessaire. - - [ ] **D2. Distinction visuelle** (optionnel — non retenu) : Sous-titre léger sous le nom du fichier dans l'arborescence indiquant le nombre de pages (ex: « 12 pages ») pour différencier rapidement les PDF des MD. Donnée disponible via l'API `pdf/info`. + - [ ] **D2. Distinction visuelle** — ⚪ NON RETENU : Sous-titre léger sous le nom du fichier dans l'arborescence indiquant le nombre de pages (ex: « 12 pages ») pour différencier rapidement les PDF des MD. Donnée disponible via l'API `pdf/info`. - [x] **D3. Drag & drop et upload** : Le mécanisme d'upload existant (`POST /api/file/{vault}/upload`) fonctionne déjà pour tout type de fichier. Vérifier que le MIME type `application/pdf` est correctement détecté et que le watcher réindexe automatiquement. ##### E. Frontend — Viewer PDF (1 jour) @@ -312,7 +312,7 @@ - Bouton « Plein écran » — ouvre le PDF dans un nouvel onglet en plein écran - Badge « N pages » indiquant le nombre de pages - Bouton « pop-out » — gardé, ouvre le viewer PDF dans une popup séparée - - [ ] **E4. Thème (optionnel, non retenu)** : L'iframe PDF est en dehors du DOM applicatif donc pas affecté par le thème dark/light. Ajouter un message discret « Le PDF s'affiche avec le thème de votre navigateur » si `_currentTheme === 'dark'` (les PDFs en fond blanc dans un thème sombre peuvent surprendre). + - [ ] **E4. Thème** — ⚪ NON RETENU : L'iframe PDF est en dehors du DOM applicatif donc pas affecté par le thème dark/light. Ajouter un message discret « Le PDF s'affiche avec le thème de votre navigateur » si `_currentTheme === 'dark'` (les PDFs en fond blanc dans un thème sombre peuvent surprendre). - [x] **E5. Responsive** : L'iframe s'adapte à la largeur du content-area. En mode mobile, hauteur ajustée à la viewport. La toolbar mobile existante fonctionne avec les actions PDF. ##### F. Frontend — Recherche (0.5 jour) @@ -331,7 +331,7 @@ - Fixtures : créer un PDF de test minimal (2 pages, texte simple) via `reportlab` dans les fixtures de test - `test_pdf_indexing.py` : vérifier qu'un PDF dans un vault est correctement indexé, que le texte est recherchable, que `index_document()` gère l'extension `.pdf` - `test_pdf_api.py` : endpoint `view` retourne `is_pdf: true`, endpoint `pdf/stream` retourne `application/pdf`, endpoint `pdf/info` retourne les métadonnées - - [ ] **H2. Tests frontend** : + - [ ] **H2. Tests frontend** — ⚪ NON RETENU : - Test d'intégration : naviguer vers un fichier PDF → l'iframe est rendue - Test : fichier PDF dans les résultats de recherche - Test : téléchargement de PDF fonctionnel @@ -339,7 +339,7 @@ ##### I. Documentation utilisateur (inclus dans l'effort) - [x] **I1.** Mettre à jour README.md : mentionner le support PDF dans les formats supportés - - [ ] **I2.** Ajouter une note dans la FAQ : « Comment visualiser un PDF dans ObsiGate ? » + - [ ] **I2.** Ajouter une note dans la FAQ : « Comment visualiser un PDF dans ObsiGate ? » — ⚪ NON RETENU (README + guide couvrent déjà le support PDF) - [x] **I3.** Documenter les limitations : pas d'OCR (PDFs scannés non recherchables), pas d'annotation PDF, pas d'édition de PDF ##### J. Points d'attention / Risques @@ -529,7 +529,7 @@ ### 78. Éditeur Excalidraw — Ouverture et édition de fichiers .excalidraw -- **Effort :** 3-4 jours | **Impact :** 🟡 | **Statut :** 🟡 ~90% livré (2026-09 — éditeur iframe complet, détection, création, autosave, support `.excalidraw.md`. Reste : B5 extraction texte pour recherche, C8 menu contextuel, F2/F3 tests, vérif BUG-002) +- **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é) - **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. @@ -604,7 +604,7 @@ - Retourner `is_excalidraw: true` + les données parsées (`elements`, `appState`, `files`) - Si le JSON est invalide ou n'est pas un fichier Excalidraw valide → fallback sur le viewer JSON standard - [x] **B4. Endpoint de sauvegarde** : Le endpoint existant `PUT /api/file/{vault}` fonctionne déjà pour écrire du contenu. L'iframe envoie le JSON modifié via postMessage → le parent appelle l'API existante. Aucun nouvel endpoint nécessaire. - - [ ] **B5. Indexation du contenu texte** (NON FAIT) : extraire `element.text` des éléments pour la recherche TF-IDF — les fichiers sont indexés comme JSON brut. + - [x] **B5. Indexation du contenu texte** (FAIT 2026-09) : `extract_excalidraw_indexable()` extrait `element.text` des éléments (JSON pur et `.excalidraw.md` compressé) → recherche TF-IDF fonctionnelle. - [x] **B6. Contenu initial pour nouveaux fichiers** : Définir le squelette JSON minimum pour un fichier `.excalidraw` vide : ```json {"type":"excalidraw","version":2,"elements":[],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} @@ -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 FAIT — 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é. + - [ ] **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é. ##### 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. @@ -655,11 +655,11 @@ - [x] **F1. Tests backend** : - `test_excalidraw_detection.py` : fichier `.excalidraw` valide → `is_excalidraw: true`, JSON invalide → fallback JSON, fichier sans `type: excalidraw` → fallback - `test_excalidraw_search.py` : texte extrait des éléments → recherchable via TF-IDF - - [ ] **F2. Tests frontend (non retenus)** : + - [ ] **F2. Tests frontend** — ⚪ NON RETENU : - Chargement de l'iframe avec des données de test - Communication postMessage (init → ready → save) - Changement de thème propagé à l'iframe - - [ ] **F3. Tests E2E (Playwright) (NON FAITS)** : + - [x] **F3. Tests E2E (Playwright)** (FAIT 2026-09 — `tests/e2e/excalidraw.spec.js`) : - Ouvrir un fichier `.excalidraw` → l'iframe se charge → le canvas Excalidraw est visible - Dessiner un rectangle → sauvegarder → recharger → le rectangle est toujours là - Basculer thème sombre → l'iframe passe en dark mode @@ -674,9 +674,9 @@ - **Pas d'édition collaborative** : Cette implémentation est mono-utilisateur. La collaboration temps réel (#62) pourra être étendue aux fichiers `.excalidraw` ultérieurement via le même mécanisme Yjs. ##### H. Documentation utilisateur - - [ ] **H1.** Mettre à jour README : ajouter `.excalidraw` dans les formats supportés - - [ ] **H2.** Ajouter dans le guide d'utilisation (Quick Help) : section « Diagrammes Excalidraw » - - [ ] **H3.** Note : « Les fichiers .excalidraw créés avec le plugin Obsidian Excalidraw sont compatibles » + - [x] **H1.** Mettre à jour README : ajouter `.excalidraw` dans les formats supportés (FR + EN) + - [x] **H2.** Ajouter dans le guide d'utilisation (Quick Help) : section « Diagrammes Excalidraw » (i18n FR/EN) + - [x] **H3.** Note : « Les fichiers .excalidraw créés avec le plugin Obsidian Excalidraw sont compatibles » --- @@ -897,11 +897,11 @@ | Priorité | Items | Effort total estimé | |---|---|---| -| ✅ Complété | #1 → #59, #63-66, #71, #74, #75, #76 (58 E2E, 59 offline, 63 i18n, 64 MFA TOTP+WebAuthn, 65 thèmes, 66 export, 71 admin, 74 PDF, 76 BooksLM) | ~75 jours réalisés | +| ✅ Complété | #1 → #59, #63-68, #71, #74, #75, #76, #78 (58 E2E, 59 offline, 63 i18n, 64 MFA TOTP+WebAuthn, 65 thèmes, 66 export, 67 push, 68 health, 71 admin, 74 PDF, 75 split view, 76 BooksLM, 78 Excalidraw) | ~80 jours réalisés | | 🔵 P2 restant | #77 Desktop : signature code (optionnel), wizard 1er lancement (optionnel), 6 tests E2E **manuels** | ~1-2 jours | -| ⚪ P3 restant | #62 Collaboration Yjs (5-7j) · #78 Excalidraw finitions (B5 recherche, C8, F3 E2E, BUG-002) (~1-1.5j) | ~6-8.5 jours | -| ⚪ P4 restant | #67 Push (2j) · #68 Health enrichi (1j) · #69 Mobile éditeur (2-3j) · #70 Sémantique (4-5j) · #72 OpenAPI (1-2j) · #73 Sync (6-8j) | 16-21 jours | -| **Total restant** | **9 items + finitions** | **~28-37 jours** | +| ⚪ P3 restant | #62 Collaboration Yjs (5-7j) | ~5-7 jours | +| ⚪ P4 restant | #69 Mobile éditeur (2-3j) · #70 Sémantique (4-5j) · #72 OpenAPI (1-2j) · #73 Sync (6-8j) | 13-18 jours | +| **Total restant** | **6 items + finitions** | **~19-27 jours** | #75 : E2E matriciels 37/37 verts (split-view.spec.js + split-view-matrix.spec.js) — 2026-09-08. @@ -912,5 +912,5 @@ - Les items P3/P4 ne sont pas ordonnés par priorité interne — à raffiner selon les retours utilisateurs. - 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, #71, #74, #75, #76 sont livrés — les P3 restants à plus fort rapport effort/valeur : #78 finitions (recherche texte Excalidraw) et #68 (health check, 1j). -- #78 a un bug ouvert référencé dans docs/ISSUES_TODOLIST.md (BUG-002, loading infini Excalidraw) — fixés par les commits a4ea322/185d603, à revalider sur poste client avant de cocher F3. +- #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. diff --git a/frontend/index.html b/frontend/index.html index 61a5015..106a5af 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2804,6 +2804,11 @@ data-i18n="help.nav_files">📁 Fichiers +
  • + 🎨 Excalidraw +
  • ✏️ Édition Web : .html, .css, .scss
  • +
  • + PDF : .pdf (visualiseur natif, texte indexé) +
  • +
  • + Excalidraw : .excalidraw, + .excalidraw.md +
  • Autres : .txt, .log, .sql, .csv @@ -3472,6 +3484,50 @@ + +
    +

    🎨 Diagrammes Excalidraw

    +

    + Les fichiers .excalidraw et + .excalidraw.md s'ouvrent dans un éditeur visuel + Excalidraw complet, intégré dans une iframe sandboxée. +

    + +

    Ouverture

    +
      +
    • + Cliquez sur un fichier .excalidraw dans + l'arborescence : l'éditeur s'ouvre à la place du viewer markdown. +
    • +
    • + Dessinez, ajoutez des formes, du texte, des flèches et des + images — l'expérience Excalidraw complète. +
    • +
    + +

    Sauvegarde

    +
      +
    • + Les modifications sont sauvegardées automatiquement (2 s) ou + avec Ctrl+S. L'éditeur suit le thème + clair/sombre. +
    • +
    + +

    Recherche

    +
      +
    • + Le texte des éléments du diagramme est extrait à l'indexation : + il est donc recherchable via la recherche full-text. +
    • +
    • + Les fichiers créés avec le plugin Obsidian Excalidraw (y + compris le format .excalidraw.md compressé) sont + compatibles. +
    • +
    +
    +

    ✏️ Édition avancée

    diff --git a/frontend/locales/en.json b/frontend/locales/en.json index bec4c9f..1fdc560 100644 --- a/frontend/locales/en.json +++ b/frontend/locales/en.json @@ -1076,6 +1076,7 @@ "help.nav_tips": "💡 Tips", "help.nav_webhooks": "🪝 Webhooks", "help.nav_plugins": "🧩 Plugins", + "help.nav_excalidraw": "🎨 Excalidraw", "help.new_file": "New file", "help.new_folder": "New folder", "help.nights": "sleepless nights 😅", @@ -1668,5 +1669,15 @@ "help.plugins_security_3": "Secure packaging: the .zip is checked against path traversal on install.", "help.plugins_security_4": "Admin only: installation and removal require the admin role.", "help.plugins_template": "Use the Template button in Settings > Plugins to generate a valid starter plugin.", + "help.excalidraw_title": "🎨 Excalidraw diagrams", + "help.excalidraw_intro": ".excalidraw and .excalidraw.md files open in a full visual Excalidraw editor embedded in a sandboxed iframe.", + "help.excalidraw_open_title": "Opening", + "help.excalidraw_open": "Click a .excalidraw file in the tree: the editor opens instead of the markdown viewer.", + "help.excalidraw_edit": "Draw, add shapes, text, arrows and images — the complete Excalidraw experience.", + "help.excalidraw_save_title": "Saving", + "help.excalidraw_save": "Changes are saved automatically (2s debounce) or with Ctrl+S. The editor follows the light/dark theme.", + "help.excalidraw_search_title": "Search", + "help.excalidraw_search": "Text inside diagram elements is extracted on indexing, so it is searchable via the full-text search.", + "help.excalidraw_compat": "Files created with the Obsidian Excalidraw plugin (including the compressed .excalidraw.md format) are compatible.", "help.footer_tagline": "- Web gateway for your Obsidian vaults" } \ No newline at end of file diff --git a/frontend/locales/fr.json b/frontend/locales/fr.json index 20b8add..ddba688 100644 --- a/frontend/locales/fr.json +++ b/frontend/locales/fr.json @@ -1076,6 +1076,7 @@ "help.nav_tips": "💡 Astuces", "help.nav_webhooks": "🪝 Webhooks", "help.nav_plugins": "🧩 Plugins", + "help.nav_excalidraw": "🎨 Excalidraw", "help.new_file": "Nouveau fichier", "help.new_folder": "Nouveau dossier", "help.nights": "nuits blanches 😅", @@ -1668,5 +1669,15 @@ "help.plugins_security_3": "Empaquetage sécurisé : le .zip est vérifié contre le path traversal à l'installation.", "help.plugins_security_4": "Admin uniquement : l'installation et la suppression requièrent le rôle admin.", "help.plugins_template": "Utilisez le bouton Template dans Paramètres > Plugins pour générer un plugin starter valide.", + "help.excalidraw_title": "🎨 Diagrammes Excalidraw", + "help.excalidraw_intro": "Les fichiers .excalidraw et .excalidraw.md s'ouvrent dans un éditeur visuel Excalidraw complet, intégré dans une iframe sandboxée.", + "help.excalidraw_open_title": "Ouverture", + "help.excalidraw_open": "Cliquez sur un fichier .excalidraw dans l'arborescence : l'éditeur s'ouvre à la place du viewer markdown.", + "help.excalidraw_edit": "Dessinez, ajoutez des formes, du texte, des flèches et des images — l'expérience Excalidraw complète.", + "help.excalidraw_save_title": "Sauvegarde", + "help.excalidraw_save": "Les modifications sont sauvegardées automatiquement (2 s) ou avec Ctrl+S. L'éditeur suit le thème clair/sombre.", + "help.excalidraw_search_title": "Recherche", + "help.excalidraw_search": "Le texte des éléments du diagramme est extrait à l'indexation : il est donc recherchable via la recherche full-text.", + "help.excalidraw_compat": "Les fichiers créés avec le plugin Obsidian Excalidraw (y compris le format .excalidraw.md compressé) sont compatibles.", "help.footer_tagline": "- Porte d'entrée web pour vos vaults Obsidian" } \ No newline at end of file