feat: guide d'utilisation - couverture complete, telechargement MD/PDF, section Architecture Mermaid, guide desktop elargi (#105, BUG-067)
This commit is contained in:
+247
-27
@@ -2869,6 +2869,30 @@
|
||||
Guide d'utilisation ObsiGate
|
||||
</div>
|
||||
<div class="editor-actions">
|
||||
<button
|
||||
class="editor-btn"
|
||||
id="help-download-md"
|
||||
title="Télécharger ce guide en Markdown"
|
||||
data-i18n-attr="title:guide105.dl_md_title"
|
||||
>
|
||||
<i
|
||||
data-lucide="file-code-2"
|
||||
style="width: 16px; height: 16px"
|
||||
></i>
|
||||
<span data-i18n="guide105.dl_md">Markdown</span>
|
||||
</button>
|
||||
<button
|
||||
class="editor-btn"
|
||||
id="help-download-pdf"
|
||||
title="Télécharger ce guide en PDF"
|
||||
data-i18n-attr="title:guide105.dl_pdf_title"
|
||||
>
|
||||
<i
|
||||
data-lucide="file-down"
|
||||
style="width: 16px; height: 16px"
|
||||
></i>
|
||||
<span data-i18n="guide105.dl_pdf">PDF</span>
|
||||
</button>
|
||||
<button
|
||||
class="editor-btn"
|
||||
id="help-close"
|
||||
@@ -2892,7 +2916,7 @@
|
||||
type="text"
|
||||
class="help-nav-search"
|
||||
id="help-nav-search"
|
||||
data-i18n-placeholder="help.search_placeholder" data-i18n-placeholder="help.search_placeholder" placeholder="Rechercher dans l'aide..."
|
||||
data-i18n-placeholder="help.search_placeholder" placeholder="Rechercher dans l'aide..."
|
||||
autocomplete="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
@@ -2922,7 +2946,10 @@
|
||||
data-i18n="help.nav_intro">📘 Introduction</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<li>
|
||||
<a href="#help-architecture" class="help-nav-link" data-i18n="guide105.nav_architecture">🏗️ Architecture</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-interface" class="help-nav-link"
|
||||
data-i18n="help.nav_interface">🧭 Interface</a
|
||||
>
|
||||
@@ -2957,7 +2984,10 @@
|
||||
data-i18n="help.nav_excalidraw">🎨 Excalidraw</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<li>
|
||||
<a href="#help-diagrams" class="help-nav-link" data-i18n="guide105.nav_diagrams">📊 Diagrammes</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-edition" class="help-nav-link"
|
||||
data-i18n="help.nav_editing">✏️ Édition</a
|
||||
>
|
||||
@@ -2967,7 +2997,10 @@
|
||||
data-i18n="help.nav_mobile_editor">📱 Mobile</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<li>
|
||||
<a href="#help-library" class="help-nav-link" data-i18n="guide105.nav_library">⭐ Bibliothèque</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-graphe" class="help-nav-link"
|
||||
data-i18n="help.nav_graph">🗺️ Graphe</a
|
||||
>
|
||||
@@ -2986,8 +3019,17 @@
|
||||
<a href="#help-raccourcis" class="help-nav-link"
|
||||
data-i18n="help.nav_shortcuts">⌨️ Raccourcis</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-offline" class="help-nav-link" data-i18n="guide105.nav_offline">📴 Hors-ligne</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-collab" class="help-nav-link" data-i18n="guide105.nav_collab">👥 Collaboration</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-desktop" class="help-nav-link" data-i18n="guide105.nav_desktop">🖥️ Desktop</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-partage" class="help-nav-link"
|
||||
data-i18n="help.nav_sharing">🔗 Partage</a
|
||||
>
|
||||
@@ -3020,8 +3062,14 @@
|
||||
<a href="#help-astuces" class="help-nav-link"
|
||||
data-i18n="help.nav_tips">💡 Astuces</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-api" class="help-nav-link" data-i18n="guide105.nav_api">🔌 API</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-languages" class="help-nav-link" data-i18n="guide105.nav_languages">🌍 Multilingue</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#help-plugins" class="help-nav-link"
|
||||
data-i18n="help.nav_plugins">🧩 Plugins</a
|
||||
>
|
||||
@@ -3080,7 +3128,74 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-interface">
|
||||
<section class="help-section" id="help-architecture">
|
||||
<h2 data-i18n="guide105.nav_architecture">🏗️ Architecture</h2>
|
||||
<p data-i18n-html="guide105.arch_intro">ObsiGate est une application web complète construite en couches indépendantes, sans base de données externe : les notes vivent dans vos dossiers Obsidian, l'état applicatif dans des fichiers JSON de <code>data/</code>, l'index de recherche en mémoire.</p>
|
||||
<pre class="mermaid-code"><code class="language-mermaid">flowchart TB
|
||||
subgraph client["Clients"]
|
||||
UI["SPA vanilla JS\n(frontend/js)"]
|
||||
PWA["PWA hors-ligne\n(service worker + IndexedDB)"]
|
||||
DESK["App desktop Tauri\n(fenêtre native)"]
|
||||
end
|
||||
subgraph server["Serveur FastAPI (Python 3.11)"]
|
||||
API["REST /api\nJWT + Argon2id"]
|
||||
IDX["Index recherche\nTF-IDF + embeddings"]
|
||||
FS["Accès fichiers\nwatchdog + safe paths"]
|
||||
PDF["Rendu markdown\nmistune + WeasyPrint"]
|
||||
AI["Assistant IA\nproviders + outils"]
|
||||
MCP["Serveur MCP\n/mcp (HTTP)"]
|
||||
WS["WebSocket\ncollab Yjs + SSE"]
|
||||
WH["Webhooks\nHMAC-SHA256"]
|
||||
end
|
||||
subgraph data["Données"]
|
||||
V1["Vault 1 (dossier)"]
|
||||
V2["Vault 2 (dossier)"]
|
||||
CFG["data/*.json\nconfig, users, audit"]
|
||||
BK[".obsigate-backup/\nbackups horodatés"]
|
||||
end
|
||||
UI -- HTTP --> API
|
||||
PWA -- "cache + queue" --> API
|
||||
DESK -- embarqué --> API
|
||||
API --> IDX
|
||||
API --> FS
|
||||
API --> PDF
|
||||
API --> AI
|
||||
MCP --> AI
|
||||
WS --> FS
|
||||
FS --> V1
|
||||
FS --> V2
|
||||
IDX --> V1
|
||||
IDX --> V2
|
||||
BK --> V1
|
||||
API --> CFG
|
||||
API -- événements --> WH</code></pre>
|
||||
<p data-i18n="guide105.arch_diagram_note">Le diagramme est interactif dans l'application : zoom, plein écran, copie SVG ou code.</p>
|
||||
<h3 data-i18n="guide105.arch_h3_layers">Les grandes composantes</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<strong data-i18n="guide105.arch_lbl_fe">Frontend</strong><span data-i18n-html="guide105.arch_fe"> — SPA en JavaScript vanilla (modules ES), sans framework ni build npm : <code>frontend/js/</code> (~30 modules). Le CSS utilise des variables pour les thèmes.</span>
|
||||
</li>
|
||||
<li>
|
||||
<strong data-i18n="guide105.arch_lbl_be">Backend</strong><span data-i18n="guide105.arch_be"> — serveur FastAPI (Python 3.11) : rendu markdown (mistune + wikilinks), recherche TF-IDF stemmisée (index inversé en mémoire), watchers watchdog, JWT + Argon2id, webhooks HMAC, export PDF (WeasyPrint).</span>
|
||||
</li>
|
||||
<li>
|
||||
<strong data-i18n="guide105.arch_lbl_realtime">Temps réel & MCP</strong><span data-i18n-html="guide105.arch_rt"> — passerelle WebSocket (collaboration Yjs, notifications SSE/push) et serveur MCP (Streamable HTTP, <code>/mcp</code>) pour les clients externes.</span>
|
||||
</li>
|
||||
<li>
|
||||
<strong data-i18n="guide105.arch_lbl_ai">Couche IA</strong><span data-i18n="guide105.arch_ai"> — assistants d'édition et BooksLM multi-providers (DeepSeek, OpenRouter, Gemini, Mistral…), bibliothèque d'outils (function calling, recherche web, crawl, lecture de documents) et embeddings optionnels pour la recherche sémantique.</span>
|
||||
</li>
|
||||
<li>
|
||||
<strong data-i18n="guide105.arch_lbl_data">Données</strong><span data-i18n-html="guide105.arch_data"> — les vaults Obsidian sur disque (source de vérité), la configuration en JSON (<code>data/</code>), les backups horodatés (<code>.obsigate-backup/</code>), l'audit en JSON lines, les clés API chiffrées dans <code>data/api_keys.json</code>.</span>
|
||||
</li>
|
||||
<li>
|
||||
<strong data-i18n="guide105.arch_lbl_deploy">Déploiement</strong><span data-i18n="guide105.arch_deploy"> — application desktop Tauri (Rust) embarquant le backend Python, conteneur Docker, ou PWA installable dans le navigateur (mode hors-ligne).</span>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 data-i18n="guide105.arch_h3_flux">Flux typique</h3>
|
||||
<p data-i18n-html="guide105.arch_flux"> Un clic sur un fichier émet <code>GET /api/file/...</code> ; le backend résout le chemin en sécurité, parse le frontmatter, rend le markdown et renvoie le HTML ; le frontend enrichit l'affichage (Mermaid, coloration, wikilinks cliquables). Chaque écriture crée un backup avant application.</p>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-interface">
|
||||
<h2 data-i18n="help.nav_interface">🧭 Interface utilisateur</h2>
|
||||
|
||||
<h3 data-i18n="help.header_section">En-tête</h3>
|
||||
@@ -3170,7 +3285,10 @@
|
||||
avec wikilinks et images</span>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<h3 data-i18n="guide105.h3_push">Notifications web (push)</h3>
|
||||
<p data-i18n="guide105.push_p1">Autorisez les notifications (bouton 🔔 de l'en-tête) pour être averti des fins de synchronisation hors-ligne et des événements importants. La gestion des abonnements est dans les Configurations.</p>
|
||||
<p data-i18n="guide105.push_p2">Basée sur la Web Push API (clés VAPID) ; fonctionne sur desktop et PWA mobile, sans service tiers : le serveur émet directement vers les endpoints push des navigateurs.</p>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-navigation">
|
||||
<h2 data-i18n="help.733f0559">🗺️ Navigation</h2>
|
||||
@@ -3329,7 +3447,7 @@
|
||||
<h2 data-i18n="help.adf30d78">🔍 Recherche</h2>
|
||||
|
||||
<h3 data-i18n="help.simple_search">Recherche simple</h3>
|
||||
<p data-i18n="help.desc_search_intro">
|
||||
<p data-i18n-html="help.desc_search_intro">
|
||||
Tapez dans la barre de recherche en haut pour
|
||||
lancer une recherche fulltext :
|
||||
</p>
|
||||
@@ -3382,7 +3500,7 @@
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<strong>Exemples</strong><span data-i18n="help.desc_examples">:
|
||||
<strong>Exemples</strong><span data-i18n-html="help.desc_examples">:
|
||||
<code>ext:sh</code> recherche dans les scripts
|
||||
bash, <code>ext:py</code> dans les scripts
|
||||
Python, <code>ext:md</code> dans les fichiers
|
||||
@@ -3458,13 +3576,16 @@
|
||||
<strong>Tri par date</strong><span data-i18n="help.desc_42a81347"> : Dernière
|
||||
modification</span></li>
|
||||
</ul>
|
||||
</section>
|
||||
<h3 data-i18n="guide105.h3_semantic">Recherche sémantique (hybride)</h3>
|
||||
<p data-i18n="guide105.sem_p1">Activez le bouton « S » de la barre de recherche (ou Alt-S) pour combiner TF-IDF et similarité vectorielle (fusion RRF) : les concepts approchants (« velours » trouve « tissu doux ») remontent mieux.</p>
|
||||
<p data-i18n="guide105.sem_p2">Le moteur d'embeddings (modèle multilingue) est optionnel : sans lui, un repli par hash conserve une recherche hybride fonctionnelle. Les vecteurs sont recalculés à chaque indexation du vault.</p>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-tags">
|
||||
<h2 data-i18n="help.2507242f">🏷️ Tags</h2>
|
||||
|
||||
<h3 data-i18n="help.5f87ea79">Tag cloud</h3>
|
||||
<p data-i18n="help.desc_tag_cloud_intro">
|
||||
<p data-i18n-html="help.desc_tag_cloud_intro">
|
||||
L'onglet Tags de la sidebar affiche un nuage de
|
||||
tags :
|
||||
</p>
|
||||
@@ -3486,15 +3607,15 @@
|
||||
</ul>
|
||||
|
||||
<h3 data-i18n="help.2c03a7ba">Tags inline vs frontmatter</h3>
|
||||
<p data-i18n="help.desc_two_tag_types">ObsiGate supporte deux types de tags :</p>
|
||||
<p data-i18n-html="help.desc_two_tag_types">ObsiGate supporte deux types de tags :</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Frontmatter YAML</strong><span data-i18n="help.desc_frontmatter">:
|
||||
<strong>Frontmatter YAML</strong><span data-i18n-html="help.desc_frontmatter">:
|
||||
<code>tags: [docker, linux]</code> ou
|
||||
<code>tags: docker, linux</code></span>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Inline</strong><span data-i18n="help.desc_inline_tags">:
|
||||
<strong>Inline</strong><span data-i18n-html="help.desc_inline_tags">:
|
||||
<code>#docker</code> dans le contenu
|
||||
markdown</span>
|
||||
</li>
|
||||
@@ -3504,13 +3625,13 @@
|
||||
</ul>
|
||||
|
||||
<h3 data-i18n="help.63f024d4">Filtrage de tags template</h3>
|
||||
<p data-i18n="help.desc_template_intro">
|
||||
<p data-i18n-html="help.desc_template_intro">
|
||||
Dans les Configurations, vous pouvez masquer les
|
||||
tags de template :
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Patterns wildcards</strong><span data-i18n="help.desc_patterns">: Ex:
|
||||
<strong>Patterns wildcards</strong><span data-i18n-html="help.desc_patterns">: Ex:
|
||||
<code>#<% ... %></code> ou
|
||||
<code>#{{ ... }}</code></span>
|
||||
</li>
|
||||
@@ -3530,12 +3651,12 @@
|
||||
<p data-i18n="help.desc_md_render">Les fichiers markdown sont rendus avec :</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Wikilinks cliquables</strong><span data-i18n="help.desc_wikilinks">:
|
||||
<strong>Wikilinks cliquables</strong><span data-i18n-html="help.desc_wikilinks">:
|
||||
<code>[[lien]]</code> et
|
||||
<code>[[lien|texte]]</code></span>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Images Obsidian</strong><span data-i18n="help.desc_images">: Support
|
||||
<strong>Images Obsidian</strong><span data-i18n-html="help.desc_images">: Support
|
||||
de <code>![[image.png]]</code></span>
|
||||
</li>
|
||||
<li>
|
||||
@@ -3635,7 +3756,13 @@
|
||||
.csv
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<h3 data-i18n="guide105.h3_pdf">Export PDF</h3>
|
||||
<p data-i18n-html="guide105.pdf_p">Le bouton « PDF » d'un document le rend avec le même moteur que la vue (WeasyPrint) : titres, tableaux, listes et code sont conservés. Depuis un lien public, la route <code>/s/{token}/pdf</code> produit le même PDF.</p>
|
||||
<h3 data-i18n="guide105.h3_exports">Export HTML / ePub / ZIP</h3>
|
||||
<p data-i18n="guide105.exp_p">Le menu « Exporter » propose trois formats : HTML autonome (fichier unique, images incluses), ePub pour les liseuses et, pour un dossier, un bundle Markdown en ZIP — liens et ressources résolus pendant l'export.</p>
|
||||
<h3 data-i18n="guide105.h3_dupe">Anti-doublons à l'upload</h3>
|
||||
<p data-i18n="guide105.dupe_p">L'upload en masse (glisser-déposer un dossier sur la sidebar) compare chaque fichier au contenu existant : un fichier déjà présent est ignoré plutôt que dupliqué avec un suffixe « (1) ». Utile pour restaurer un vault sans créer de doublons.</p>
|
||||
</section>
|
||||
|
||||
<!-- 🎨 Excalidraw -->
|
||||
<section class="help-section" id="help-excalidraw">
|
||||
@@ -3682,7 +3809,21 @@
|
||||
</section>
|
||||
|
||||
<!-- ✏️ Édition -->
|
||||
<section class="help-section" id="help-edition">
|
||||
<section class="help-section" id="help-diagrams">
|
||||
<h2 data-i18n="guide105.nav_diagrams">📊 Diagrammes</h2>
|
||||
<p data-i18n-html="guide105.dia_intro">Les blocs <code>```mermaid</code> de vos notes sont rendus en diagrammes interactifs (Mermaid v11, chargé depuis un CDN).</p>
|
||||
<ul>
|
||||
<li data-i18n="guide105.dia_zoom">Zoom : boutons + / − dans la barre d'outils du diagramme.</li>
|
||||
<li data-i18n="guide105.dia_fs">Plein écran : idéal pour les grandes matrices.</li>
|
||||
<li data-i18n="guide105.dia_copy">Copie : exportez le SVG ou le code source (boutons dédiés).</li>
|
||||
<li data-i18n="guide105.dia_toggle">Bascule Aperçu / Code pour éditer la source sans quitter la vue.</li>
|
||||
<li data-i18n="guide105.dia_theme">Thème : le diagramme suit le thème clair/sombre de l'application.</li>
|
||||
</ul>
|
||||
<p data-i18n="guide105.dia_types">Types supportés : flowchart, sequence, class, state, ER, gantt, pie, journey, quadrant, radar, mindmap, timeline, C4, xychart, sankey — plus un préprocesseur qui comprend la syntaxe Obsidian.</p>
|
||||
<p data-i18n-html="guide105.dia_excalidraw_ref">Les dessins à main levée (<code>.excalidraw</code>, <code>.excalidraw.md</code>) sont couverts dans la section 🎨 Excalidraw.</p>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-edition">
|
||||
<h2 data-i18n="auto.f346076a">✏️ Édition avancée</h2>
|
||||
|
||||
<h3 data-i18n="auto.695d9e47">Éditeur CodeMirror 6</h3>
|
||||
@@ -3719,11 +3860,15 @@
|
||||
<li>
|
||||
<strong data-i18n="help.toolbar_section">Barre d'outils AI</strong><span data-i18n="help.desc_c8532869"> :
|
||||
Complétion, réécriture, traduction (voir
|
||||
section</span><a href="#help-ia" data-i18n="settings.ai">🤖 IA</a>)
|
||||
section</span><a href="#help-ai" data-i18n="settings.ai">🤖 IA</a>)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 data-i18n="help.mobile_editor_title">📱 Édition mobile</h3>
|
||||
</section>
|
||||
|
||||
<!-- 🗺️ Graphe -->
|
||||
<section class="help-section" id="help-mobile-editor">
|
||||
<h2 data-i18n="help.mobile_editor_title">📱 Édition mobile</h2>
|
||||
<p data-i18n="help.mobile_editor_intro">
|
||||
Sur téléphone et tablette, l'édition s'adapte au
|
||||
tactile : barre d'outils flottante, gestes et mode
|
||||
@@ -3760,8 +3905,21 @@
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<!-- 🗺️ Graphe -->
|
||||
<section class="help-section" id="help-graphe">
|
||||
<section class="help-section" id="help-library">
|
||||
<h2 data-i18n="guide105.nav_library">⭐ Bibliothèque</h2>
|
||||
<h3 data-i18n="guide105.lib_h3_bookmarks">Signets & récents</h3>
|
||||
<p data-i18n="guide105.lib_bookmarks">Marquez un fichier d'un ★ (bouton Signet de la barre d'actions) : il rejoint la liste des signets du dashboard. Les fichiers récemment ouverts sont listés automatiquement dans l'onglet « Récents » de la sidebar, avec un filtre de recherche dédié.</p>
|
||||
<h3 data-i18n="guide105.lib_h3_saved">Recherches sauvegardées</h3>
|
||||
<p data-i18n="guide105.lib_saved">Enregistrez une recherche depuis la page de résultats pour la relancer en un clic depuis la sidebar : chaque recherche sauvegardée conserve ses opérateurs et filtres.</p>
|
||||
<h3 data-i18n="guide105.lib_h3_backlinks">Backlinks & graphe</h3>
|
||||
<p data-i18n="guide105.lib_backlinks">Le panneau Backlinks liste toutes les notes qui pointent vers le fichier ouvert. La vue Graphe (bouton 🕸️) affiche les liens entre fichiers : glissez les nœuds, zoomez à la molette, double-cliquez pour ouvrir une note.</p>
|
||||
<h3 data-i18n="guide105.lib_h3_conflicts">Conflits de synchronisation</h3>
|
||||
<p data-i18n="guide105.lib_conflicts">Si vous synchronisez le vault avec Syncthing, ObsiGate détecte les fichiers de conflit (copies « sync-conflict ») et propose de les comparer puis résoudre depuis la page dédiée du menu Options.</p>
|
||||
<h3 data-i18n="guide105.lib_h3_attach">Fichiers joints & médias</h3>
|
||||
<p data-i18n-html="guide105.lib_attach">Les images <code>![[image.png]]</code>, pièces jointes et médias (audio, vidéo, PDF intégrés) dans les notes sont rendus dans le viewer et indexés pour la recherche ; le bouton « Rescan attachments » de la configuration recrée l'index des pièces jointes.</p>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-graphe">
|
||||
<h2 data-i18n="help.9c7a0a8d">🗺️ Vue Graphe</h2>
|
||||
<p data-i18n="help.desc_graph_intro">
|
||||
La vue graphe offre une visualisation
|
||||
@@ -3914,7 +4072,9 @@
|
||||
rescan des vaults
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<h3 data-i18n="guide105.h3_panes">Vue multi-panneaux (split view)</h3>
|
||||
<p data-i18n="guide105.panes_p">Le bouton « Diviser » de la barre d'actions ouvre le document dans un panneau jumeau ; empilez plusieurs panneaux pour comparer deux notes ou lire et éditer en parallèle. Les largeurs se règlent au bord des panneaux et sont mémorisées.</p>
|
||||
</section>
|
||||
|
||||
<!-- ⌨️ Palette de commandes -->
|
||||
<section class="help-section" id="help-palette">
|
||||
@@ -4373,7 +4533,37 @@
|
||||
</section>
|
||||
|
||||
<!-- 🔗 Partage -->
|
||||
<section class="help-section" id="help-partage">
|
||||
<section class="help-section" id="help-offline">
|
||||
<h2 data-i18n="guide105.nav_offline">📴 Hors-ligne</h2>
|
||||
<ul>
|
||||
<li data-i18n="guide105.off_pwa">ObsiGate est une PWA : installez-la (icône d'installation de la barre d'adresse) pour l'ouvrir comme une application. Le service worker met en cache l'interface et vos derniers documents consultés.</li>
|
||||
<li data-i18n="guide105.off_edit">Hors-ligne, vous pouvez lire les documents en cache et même les éditer : les modifications sont mises en file d'attente dans IndexedDB.</li>
|
||||
<li data-i18n="guide105.off_sync">Au retour en ligne, la file se rejoue automatiquement (badge de synchronisation dans l'en-tête). Si la version serveur a divergé entre-temps, le fichier est marqué en conflit et la version serveur est préservée en backup.</li>
|
||||
<li data-i18n="guide105.off_watch">Les modifications externes (Obsidian sur disque) sont détectées par le watcher : la vue se recharge sans perte de position, ou signale « modifié en externe » pendant une édition.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-collab">
|
||||
<h2 data-i18n="guide105.nav_collab">👥 Collaboration</h2>
|
||||
<ul>
|
||||
<li data-i18n="guide105.col_intro">Ouvrez un document en mode Édition : plusieurs personnes peuvent travailler simultanément sur le même fichier via un WebSocket Yjs (CRDT). Les modifications fusionnent sans verrou.</li>
|
||||
<li data-i18n="guide105.col_cursors">Les curseurs et sélections des collaborateurs apparaissent avec une couleur et un nom par personne (awareness).</li>
|
||||
<li data-i18n="guide105.col_save">La fusion est persistée côté serveur après 2 s d'inactivité ; chaque écriture crée un backup horodaté avant application.</li>
|
||||
<li data-i18n="guide105.col_perm">Accès limité aux utilisateurs authentifiés disposant de la permission sur la vault.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-desktop">
|
||||
<h2 data-i18n="guide105.nav_desktop">🖥️ Desktop</h2>
|
||||
<ul>
|
||||
<li data-i18n="guide105.des_get">L'application desktop ObsiGate (Tauri) embarque le serveur Python : aucune installation de Docker nécessaire. Elle se télécharge sur la page des Releases du dépôt et se met à jour automatiquement (updater signé).</li>
|
||||
<li data-i18n="guide105.des_wizard">Au premier lancement, un assistant demande le dossier de vos vaults (ou crée un vault de démonstration). Chaque document peut être détaché en fenêtre native séparée.</li>
|
||||
<li data-i18n="guide105.des_data">Les données desktop restent dans le répertoire applicatif ; les vaults pointent sur vos dossiers existants. Toutes les fonctionnalités web (recherche, IA, partage) sont disponibles.</li>
|
||||
<li data-i18n="guide105.des_native">Menu système natif, raccourci global optionnel pour afficher/masquer la fenêtre et jumplist des vaults récents.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-partage">
|
||||
<h2 data-i18n="help.8c65b2f2">🔗 Partage et Webhooks</h2>
|
||||
|
||||
<h3 data-i18n="help.public_shares">Publication publique</h3>
|
||||
@@ -4956,7 +5146,11 @@ curl -X POST https://votre-serveur.com/webhook \
|
||||
tourne avec UID 1000
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<h3 data-i18n="guide105.h3_mfa">MFA : TOTP, WebAuthn, codes de secours</h3>
|
||||
<p data-i18n="guide105.mfa_p">Activez la double authentification dans Réglages → Profil : applications TOTP (Authy, Aegis…), clés de sécurité et passkeys (WebAuthn, y compris Windows Hello) et 10 codes de secours à conserver hors ligne. Chaque méthode s'active et se désactive indépendamment.</p>
|
||||
<h3 data-i18n="guide105.h3_admin">Tableau de bord administrateur</h3>
|
||||
<p data-i18n-html="guide105.admin_p">Le rôle admin ouvre une page dédiée <code>/admin.html</code> (bouton du menu Options) : statut du serveur en direct, utilisateurs, vaults, sessions actives et journal d'audit. Le CRUD utilisateurs est aussi disponible dans les Configurations.</p>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-astuces">
|
||||
<h2 data-i18n="help.686f8313">💡 Astuces et bonnes pratiques</h2>
|
||||
@@ -5062,7 +5256,33 @@ curl -X POST https://votre-serveur.com/webhook \
|
||||
</section>
|
||||
|
||||
<!-- 🧩 Plugins -->
|
||||
<section class="help-section" id="help-plugins">
|
||||
<section class="help-section" id="help-api">
|
||||
<h2 data-i18n="guide105.nav_api">🔌 API</h2>
|
||||
<p data-i18n="guide105.api_intro">ObsiGate expose une API REST couvrant toute l'application (vaults, fichiers, recherche, backups, export, IA, partage, admin), documentée en OpenAPI 3.1 :</p>
|
||||
<ul>
|
||||
<li data-i18n-html="guide105.api_docs_url"><code>/docs</code> — interface Swagger UI pour essayer les requêtes en direct.</li>
|
||||
<li data-i18n-html="guide105.api_redoc"><code>/redoc</code> — référence alternative plus compacte.</li>
|
||||
<li data-i18n-html="guide105.api_landing"><code>/api</code> — page de garde regroupant les endpoints par catégorie.</li>
|
||||
<li data-i18n-html="guide105.api_schema"><code>/openapi.json</code> — le schéma machine, à importer dans Postman ou Insomnia.</li>
|
||||
</ul>
|
||||
<h3 data-i18n="guide105.api_h3_auth">Authentification</h3>
|
||||
<p data-i18n-html="guide105.api_auth">Connectez-vous via <code>POST /api/auth/login</code> pour obtenir un token Bearer (le même jeton est accepté en cookie HttpOnly, ce qui permet aux clients navigateur d'utiliser <code>credentials: "include"</code>). Toutes les routes <code>/api/*</code> exigent ce jeton sauf mention contraire.</p>
|
||||
<h3 data-i18n="guide105.api_h3_mcp">Serveur MCP</h3>
|
||||
<p data-i18n-html="guide105.api_mcp">Les outils de l'assistant IA (lire, lister, chercher, ouvrir, écrire…) sont exposés à tout client MCP (Claude Desktop, Cursor, Cline…) sur <code>https://votre-instance/mcp</code> avec un token d'API. Configuration et exemples : <code>docs/MCP_GUIDE.md</code>.</p>
|
||||
<h3 data-i18n="guide105.api_h3_autom">Automatisation</h3>
|
||||
<p data-i18n-html="guide105.api_autom">Pour automatiser depuis l'extérieur : <code>GET /api/search?q=…</code> et <code>GET /api/file/{vault}?path=…</code> permettent d'indexer ou relire vos notes dans un autre outil ; les webhooks sortants (section 🪝) évitent le polling.</p>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-languages">
|
||||
<h2 data-i18n="guide105.nav_languages">🌍 Multilingue</h2>
|
||||
<ul>
|
||||
<li data-i18n="guide105.lng_how">L'interface est intégralement bilingue français / anglais. Réglages → Profil → Langue : le choix est enregistré sur votre compte et vous suit sur tous les appareils.</li>
|
||||
<li data-i18n="guide105.lng_scope">Tout est traduit : menus, messages, notifications, et le présent guide. Les réponses de l'assistant IA suivent la langue de vos documents.</li>
|
||||
<li data-i18n="guide105.lng_export">Les boutons Markdown / PDF de ce guide téléchargent la version dans votre langue.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="help-section" id="help-plugins">
|
||||
<h2 data-i18n="help.plugins_title">🧩 Plugins</h2>
|
||||
<p data-i18n="help.plugins_intro">
|
||||
Les plugins étendent ObsiGate : affichage personnalisé des
|
||||
|
||||
@@ -353,6 +353,7 @@ function initHelpModal() {
|
||||
initHelpNavigation();
|
||||
helpNavInitialized = true;
|
||||
}
|
||||
renderGuideMermaid();
|
||||
});
|
||||
|
||||
closeBtn.addEventListener("click", closeHelpModal);
|
||||
@@ -367,6 +368,64 @@ function initHelpModal() {
|
||||
closeHelpModal();
|
||||
}
|
||||
});
|
||||
|
||||
// Guide downloads (#105) — markdown / pdf, current language.
|
||||
const dlMd = document.getElementById("help-download-md");
|
||||
const dlPdf = document.getElementById("help-download-pdf");
|
||||
[dlMd, dlPdf].forEach((btn) => {
|
||||
if (!btn) return;
|
||||
btn.addEventListener("click", () => {
|
||||
downloadGuide(btn.id === "help-download-md" ? "md" : "pdf");
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Render any Mermaid blocks inside the guide modal (the architecture diagram,
|
||||
// #105). The viewer's own pipeline only touches document views, so the help
|
||||
// modal is enriched here — once per modal open, cheap on repeats.
|
||||
function renderGuideMermaid() {
|
||||
const modal = document.getElementById("help-modal");
|
||||
if (!modal || modal.dataset.mermaidRendered === "1") return;
|
||||
import("./mermaid-viewer.js")
|
||||
.then((m) => m.renderMermaidBlocks(modal))
|
||||
.then(() => {
|
||||
// Only mark done when the source block actually became a rendered
|
||||
// diagram — if the Mermaid CDN wasn't ready yet, retry on next open.
|
||||
if (!modal.querySelector("code.language-mermaid")) {
|
||||
modal.dataset.mermaidRendered = "1";
|
||||
}
|
||||
})
|
||||
.catch(() => { /* CDN offline: keep the code block readable */ });
|
||||
}
|
||||
|
||||
// Fetch the generated guide (auth headers + cookie) and trigger the browser
|
||||
// download, mirroring viewer.downloadExport().
|
||||
async function downloadGuide(format) {
|
||||
showToast(t("viewer.export_start"), "info");
|
||||
try {
|
||||
const headers = AuthManager.getAuthHeaders ? AuthManager.getAuthHeaders() || {} : {};
|
||||
const res = await fetch(
|
||||
`/api/guide/download?format=${format}&lang=${encodeURIComponent(getLocale() || "fr")}`,
|
||||
{ credentials: "include", headers },
|
||||
);
|
||||
if (!res.ok) {
|
||||
let detail = "";
|
||||
try { detail = (await res.json()).detail || ""; } catch (_) { /* ignore */ }
|
||||
throw new Error(detail || "HTTP " + res.status);
|
||||
}
|
||||
const blob = await res.blob();
|
||||
const a = document.createElement("a");
|
||||
a.href = URL.createObjectURL(blob);
|
||||
a.download = `ObsiGate-Guide-${getLocale() || "fr"}.${format}`;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
setTimeout(() => URL.revokeObjectURL(a.href), 1000);
|
||||
showToast(t("viewer.export_done"), "success");
|
||||
} catch (err) {
|
||||
console.error("Guide export error:", err);
|
||||
showToast(t("viewer.export_error") + " " + err.message, "error");
|
||||
}
|
||||
}
|
||||
|
||||
function initEditorPocBtn() {
|
||||
|
||||
@@ -231,6 +231,9 @@ export async function initDesktopIntegration() {
|
||||
defineBackendCrashBanner();
|
||||
if (!isTauriEnv()) return false;
|
||||
|
||||
// Desktop marker for CSS (wider reading layouts, e.g. the user guide #105).
|
||||
try { document.body.classList.add('desktop-mode'); } catch (e) { /* ignore */ }
|
||||
|
||||
// Follow the OS theme on first run, before the theme engine renders.
|
||||
await syncSystemTheme();
|
||||
|
||||
|
||||
@@ -1961,5 +1961,98 @@
|
||||
"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 <code>.excalidraw.md</code> format) are compatible.",
|
||||
"help.footer_tagline": "- Web gateway for your Obsidian vaults"
|
||||
}
|
||||
"help.footer_tagline": "- Web gateway for your Obsidian vaults",
|
||||
"guide105.nav_architecture": "🏗️ Architecture",
|
||||
"guide105.nav_library": "⭐ Library",
|
||||
"guide105.nav_diagrams": "📊 Diagrams",
|
||||
"guide105.nav_offline": "📴 Offline",
|
||||
"guide105.nav_collab": "👥 Collaboration",
|
||||
"guide105.nav_desktop": "🖥️ Desktop",
|
||||
"guide105.nav_api": "🔌 API",
|
||||
"guide105.nav_languages": "🌍 Languages",
|
||||
"guide105.arch_intro": "ObsiGate is a full web application built as independent layers, with no external database: notes live in your Obsidian folders, app state in JSON files under <code>data/</code>, the search index in memory.",
|
||||
"guide105.arch_diagram_note": "The diagram is interactive in the app: zoom, fullscreen, copy SVG or code.",
|
||||
"guide105.arch_h3_layers": "The main components",
|
||||
"guide105.arch_lbl_fe": "Frontend",
|
||||
"guide105.arch_fe": " — vanilla-JavaScript SPA (ES modules), no framework, no npm build: <code>frontend/js/</code> (~30 modules). CSS variables drive the themes.",
|
||||
"guide105.arch_lbl_be": "Backend",
|
||||
"guide105.arch_be": " — FastAPI server (Python 3.11): markdown rendering (mistune + wikilinks), stemmed TF-IDF search (in-memory inverted index), watchdog file watchers, JWT + Argon2id, HMAC webhooks, PDF export (WeasyPrint).",
|
||||
"guide105.arch_lbl_realtime": "Realtime & MCP",
|
||||
"guide105.arch_rt": " — WebSocket gateway (Yjs collaboration, SSE/push notifications) and an MCP server (Streamable HTTP, <code>/mcp</code>) for external clients.",
|
||||
"guide105.arch_lbl_ai": "AI layer",
|
||||
"guide105.arch_ai": " — editor assistant and BooksLM with multiple providers (DeepSeek, OpenRouter, Gemini, Mistral…), a tool library (function calling, web search, crawl, document reading) and optional embeddings for semantic search.",
|
||||
"guide105.arch_lbl_data": "Data",
|
||||
"guide105.arch_data": " — Obsidian vaults on disk (the source of truth), JSON configuration (<code>data/</code>), timestamped backups (<code>.obsigate-backup/</code>), a JSON-lines audit log, encrypted API keys in <code>data/api_keys.json</code>.",
|
||||
"guide105.arch_lbl_deploy": "Deployment",
|
||||
"guide105.arch_deploy": " — Tauri desktop app (Rust) embedding the Python backend, a Docker container, or an installable PWA in the browser (offline mode).",
|
||||
"guide105.arch_h3_flux": "Typical request flow",
|
||||
"guide105.arch_flux": " Clicking a file issues <code>GET /api/file/...</code>; the backend resolves the path safely, parses frontmatter, renders the markdown and returns HTML; the frontend enriches the view (Mermaid, syntax highlighting, clickable wikilinks). Every write creates a backup before applying.",
|
||||
"guide105.dia_intro": "<code>```mermaid</code> blocks in your notes render as interactive diagrams (Mermaid v11, loaded from a CDN).",
|
||||
"guide105.dia_zoom": "Zoom: + / − buttons in the diagram toolbar.",
|
||||
"guide105.dia_fs": "Fullscreen: ideal for large charts.",
|
||||
"guide105.dia_copy": "Copy: export the SVG or the source code (dedicated buttons).",
|
||||
"guide105.dia_toggle": "Preview / Code toggle to edit the source without leaving the view.",
|
||||
"guide105.dia_theme": "Theme: the diagram follows the app's light/dark theme.",
|
||||
"guide105.dia_types": "Supported types: flowchart, sequence, class, state, ER, gantt, pie, journey, quadrant, radar, mindmap, timeline, C4, xychart, sankey — plus a preprocessor that understands Obsidian syntax.",
|
||||
"guide105.dia_excalidraw_ref": "Hand-drawn sketches (<code>.excalidraw</code>, <code>.excalidraw.md</code>) are covered in the 🎨 Excalidraw section.",
|
||||
"guide105.lib_h3_bookmarks": "Bookmarks & recents",
|
||||
"guide105.lib_bookmarks": "Star a file with the Bookmark button in the action bar: it joins the dashboard's bookmark list. Recently opened files are listed automatically in the sidebar's \"Recent\" tab, with a dedicated search filter.",
|
||||
"guide105.lib_h3_saved": "Saved searches",
|
||||
"guide105.lib_saved": "Save a search from the results page to rerun it in one click from the sidebar: each saved search keeps its operators and filters.",
|
||||
"guide105.lib_h3_backlinks": "Backlinks & graph",
|
||||
"guide105.lib_backlinks": "The Backlinks panel lists every note pointing to the open file. The Graph view (🕸️ button) shows links between files: drag nodes, scroll to zoom, double-click a node to open the note.",
|
||||
"guide105.lib_h3_conflicts": "Sync conflicts",
|
||||
"guide105.lib_conflicts": "If you sync the vault with Syncthing, ObsiGate detects conflict files (\"sync-conflict\" copies) and offers to compare then resolve them from a dedicated page in the Options menu.",
|
||||
"guide105.lib_h3_attach": "Attachments & media",
|
||||
"guide105.lib_attach": "Inline <code>![[image.png]]</code> images, attachments and media (audio, video, embedded PDFs) are rendered in the viewer and indexed for search; the \"Rescan attachments\" button in Configuration rebuilds the attachment index.",
|
||||
"guide105.off_pwa": "ObsiGate is a PWA: install it (install icon in the address bar) to open it like an app. The service worker caches the UI and your recently viewed documents.",
|
||||
"guide105.off_edit": "Offline you can read cached documents and even edit them: changes are queued in IndexedDB.",
|
||||
"guide105.off_sync": "When back online the queue replays automatically (sync badge in the header). If the server version diverged meanwhile, the file is flagged as conflict and the server copy is kept as a backup.",
|
||||
"guide105.off_watch": "External changes (Obsidian on disk) are detected by the watcher: the view reloads without losing your position, or flags \"modified externally\" during an edit.",
|
||||
"guide105.col_intro": "Open a document in Edit mode: several people can work on the same file simultaneously over a Yjs (CRDT) WebSocket. Changes merge without locks.",
|
||||
"guide105.col_cursors": "Collaborators' cursors and selections appear with a per-person colour and name (awareness).",
|
||||
"guide105.col_save": "The merge is persisted server-side after 2 s of idle; every write creates a timestamped backup before applying.",
|
||||
"guide105.col_perm": "Limited to authenticated users with permission on the vault.",
|
||||
"guide105.des_get": "The ObsiGate desktop app (Tauri) embeds the Python server: no Docker install needed. Download it from the repository's Releases page; it auto-updates (signed updater).",
|
||||
"guide105.des_wizard": "On first launch a wizard asks for your vaults folder (or creates a demo vault). Any document can be detached into its own native window.",
|
||||
"guide105.des_data": "Desktop data stays in the app directory; vaults point at your existing folders. Every web feature (search, AI, sharing) is available.",
|
||||
"guide105.des_native": "Native system menu, optional global show/hide shortcut and a recents vault jumplist.",
|
||||
"guide105.api_intro": "ObsiGate exposes a REST API covering the whole application (vaults, files, search, backups, export, AI, sharing, admin), documented in OpenAPI 3.1:",
|
||||
"guide105.api_docs_url": "<code>/docs</code> — Swagger UI to try requests live.",
|
||||
"guide105.api_redoc": "<code>/redoc</code> — compact alternative reference.",
|
||||
"guide105.api_landing": "<code>/api</code> — landing page grouping endpoints by category.",
|
||||
"guide105.api_schema": "<code>/openapi.json</code> — the machine schema, import into Postman or Insomnia.",
|
||||
"guide105.api_h3_auth": "Authentication",
|
||||
"guide105.api_auth": "Log in via <code>POST /api/auth/login</code> to get a Bearer token (the same token is accepted as an HttpOnly cookie, so browser clients can use <code>credentials: \"include\"</code>). All <code>/api/*</code> routes require it unless documented otherwise.",
|
||||
"guide105.api_h3_mcp": "MCP server",
|
||||
"guide105.api_mcp": "The assistant's tools (read, list, search, open, write…) are exposed to any MCP client (Claude Desktop, Cursor, Cline…) at <code>https://your-instance/mcp</code> with an API token. Setup and examples: <code>docs/MCP_GUIDE.md</code>.",
|
||||
"guide105.api_h3_autom": "Automation",
|
||||
"guide105.api_autom": "To automate from outside: <code>GET /api/search?q=…</code> and <code>GET /api/file/{vault}?path=…</code> let another tool index or re-read your notes; outgoing webhooks (🪝 section) avoid polling.",
|
||||
"guide105.lng_how": "The interface is fully bilingual FR/EN. Settings → Profile → Language: the choice is stored on your account and follows you across devices.",
|
||||
"guide105.lng_scope": "Everything is translated: menus, messages, notifications, and this guide. AI assistant answers follow the language of your documents.",
|
||||
"guide105.lng_export": "This guide's Markdown / PDF buttons download the version in your language.",
|
||||
"guide105.h3_semantic": "Semantic search (hybrid)",
|
||||
"guide105.sem_p1": "Toggle the \"S\" button in the search bar (or Alt-S) to combine TF-IDF with vector similarity (RRF fusion): near concepts (\"velvet\" finds \"soft fabric\") surface higher.",
|
||||
"guide105.sem_p2": "The embedding engine (multilingual model) is optional: without it a hash fallback keeps hybrid search working. Vectors are recomputed on each vault reindex.",
|
||||
"guide105.h3_push": "Web notifications (push)",
|
||||
"guide105.push_p1": "Grant notification permission (🔔 button in the header) to be alerted of offline-sync completions and important events. Subscription management lives in Configuration.",
|
||||
"guide105.push_p2": "Built on the Web Push API (VAPID keys); works on desktop and mobile PWA with no third-party service: the server sends directly to browser push endpoints.",
|
||||
"guide105.h3_panes": "Multi-pane split view",
|
||||
"guide105.panes_p": "The \"Split\" button in the action bar opens the document in a twin pane; stack several panes to compare two notes or read and edit side by side. Pane widths drag on the border and are remembered.",
|
||||
"guide105.h3_dupe": "Duplicate-proof uploads",
|
||||
"guide105.dupe_p": "Bulk upload (drag a folder onto the sidebar) compares each file with existing content: an already-present file is skipped rather than duplicated with a \"(1)\" suffix. Handy when restoring a vault.",
|
||||
"guide105.h3_pdf": "PDF export",
|
||||
"guide105.pdf_p": "A document's \"PDF\" button renders it with the same engine as the viewer (WeasyPrint): headings, tables, lists and code are preserved. From a public link, the <code>/s/{token}/pdf</code> route produces the same PDF.",
|
||||
"guide105.h3_exports": "HTML / ePub / ZIP export",
|
||||
"guide105.exp_p": "The \"Export\" menu offers three formats: standalone HTML (single file, images inlined), ePub for e-readers and, for a folder, a Markdown ZIP bundle — links and resources resolved during export.",
|
||||
"guide105.h3_mfa": "MFA: TOTP, WebAuthn, recovery codes",
|
||||
"guide105.mfa_p": "Enable two-factor auth in Settings → Profile: TOTP apps (Authy, Aegis…), security keys and passkeys (WebAuthn, including Windows Hello) and 10 recovery codes to keep offline. Each method can be enabled and disabled independently.",
|
||||
"guide105.h3_admin": "Admin dashboard",
|
||||
"guide105.admin_p": "The admin role unlocks a dedicated <code>/admin.html</code> page (Options menu button): live server status, users, vaults, active sessions and the audit log. User CRUD also lives in Configuration.",
|
||||
"guide105.dl_md_title": "Download this guide as Markdown",
|
||||
"guide105.dl_pdf_title": "Download this guide as PDF",
|
||||
"guide105.dl_md": "Markdown",
|
||||
"guide105.dl_pdf": "PDF",
|
||||
"guide105.export_title": "ObsiGate User Guide",
|
||||
"guide105.export_footer": "Generated from ObsiGate {version} — {date}. This document mirrors the in-app guide; the latest version always lives in the application."
|
||||
}
|
||||
|
||||
@@ -1961,5 +1961,98 @@
|
||||
"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 <code>.excalidraw.md</code> compressé) sont compatibles.",
|
||||
"help.footer_tagline": "- Porte d'entrée web pour vos vaults Obsidian"
|
||||
}
|
||||
"help.footer_tagline": "- Porte d'entrée web pour vos vaults Obsidian",
|
||||
"guide105.nav_architecture": "🏗️ Architecture",
|
||||
"guide105.nav_library": "⭐ Bibliothèque",
|
||||
"guide105.nav_diagrams": "📊 Diagrammes",
|
||||
"guide105.nav_offline": "📴 Hors-ligne",
|
||||
"guide105.nav_collab": "👥 Collaboration",
|
||||
"guide105.nav_desktop": "🖥️ Desktop",
|
||||
"guide105.nav_api": "🔌 API",
|
||||
"guide105.nav_languages": "🌍 Multilingue",
|
||||
"guide105.arch_intro": "ObsiGate est une application web complète construite en couches indépendantes, sans base de données externe : les notes vivent dans vos dossiers Obsidian, l'état applicatif dans des fichiers JSON de <code>data/</code>, l'index de recherche en mémoire.",
|
||||
"guide105.arch_diagram_note": "Le diagramme est interactif dans l'application : zoom, plein écran, copie SVG ou code.",
|
||||
"guide105.arch_h3_layers": "Les grandes composantes",
|
||||
"guide105.arch_lbl_fe": "Frontend",
|
||||
"guide105.arch_fe": " — SPA en JavaScript vanilla (modules ES), sans framework ni build npm : <code>frontend/js/</code> (~30 modules). Le CSS utilise des variables pour les thèmes.",
|
||||
"guide105.arch_lbl_be": "Backend",
|
||||
"guide105.arch_be": " — serveur FastAPI (Python 3.11) : rendu markdown (mistune + wikilinks), recherche TF-IDF stemmisée (index inversé en mémoire), watchers watchdog, JWT + Argon2id, webhooks HMAC, export PDF (WeasyPrint).",
|
||||
"guide105.arch_lbl_realtime": "Temps réel & MCP",
|
||||
"guide105.arch_rt": " — passerelle WebSocket (collaboration Yjs, notifications SSE/push) et serveur MCP (Streamable HTTP, <code>/mcp</code>) pour les clients externes.",
|
||||
"guide105.arch_lbl_ai": "Couche IA",
|
||||
"guide105.arch_ai": " — assistants d'édition et BooksLM multi-providers (DeepSeek, OpenRouter, Gemini, Mistral…), bibliothèque d'outils (function calling, recherche web, crawl, lecture de documents) et embeddings optionnels pour la recherche sémantique.",
|
||||
"guide105.arch_lbl_data": "Données",
|
||||
"guide105.arch_data": " — les vaults Obsidian sur disque (source de vérité), la configuration en JSON (<code>data/</code>), les backups horodatés (<code>.obsigate-backup/</code>), l'audit en JSON lines, les clés API chiffrées dans <code>data/api_keys.json</code>.",
|
||||
"guide105.arch_lbl_deploy": "Déploiement",
|
||||
"guide105.arch_deploy": " — application desktop Tauri (Rust) embarquant le backend Python, conteneur Docker, ou PWA installable dans le navigateur (mode hors-ligne).",
|
||||
"guide105.arch_h3_flux": "Flux typique",
|
||||
"guide105.arch_flux": " Un clic sur un fichier émet <code>GET /api/file/...</code> ; le backend résout le chemin en sécurité, parse le frontmatter, rend le markdown et renvoie le HTML ; le frontend enrichit l'affichage (Mermaid, coloration, wikilinks cliquables). Chaque écriture crée un backup avant application.",
|
||||
"guide105.dia_intro": "Les blocs <code>```mermaid</code> de vos notes sont rendus en diagrammes interactifs (Mermaid v11, chargé depuis un CDN).",
|
||||
"guide105.dia_zoom": "Zoom : boutons + / − dans la barre d'outils du diagramme.",
|
||||
"guide105.dia_fs": "Plein écran : idéal pour les grandes matrices.",
|
||||
"guide105.dia_copy": "Copie : exportez le SVG ou le code source (boutons dédiés).",
|
||||
"guide105.dia_toggle": "Bascule Aperçu / Code pour éditer la source sans quitter la vue.",
|
||||
"guide105.dia_theme": "Thème : le diagramme suit le thème clair/sombre de l'application.",
|
||||
"guide105.dia_types": "Types supportés : flowchart, sequence, class, state, ER, gantt, pie, journey, quadrant, radar, mindmap, timeline, C4, xychart, sankey — plus un préprocesseur qui comprend la syntaxe Obsidian.",
|
||||
"guide105.dia_excalidraw_ref": "Les dessins à main levée (<code>.excalidraw</code>, <code>.excalidraw.md</code>) sont couverts dans la section 🎨 Excalidraw.",
|
||||
"guide105.lib_h3_bookmarks": "Signets & récents",
|
||||
"guide105.lib_bookmarks": "Marquez un fichier d'un ★ (bouton Signet de la barre d'actions) : il rejoint la liste des signets du dashboard. Les fichiers récemment ouverts sont listés automatiquement dans l'onglet « Récents » de la sidebar, avec un filtre de recherche dédié.",
|
||||
"guide105.lib_h3_saved": "Recherches sauvegardées",
|
||||
"guide105.lib_saved": "Enregistrez une recherche depuis la page de résultats pour la relancer en un clic depuis la sidebar : chaque recherche sauvegardée conserve ses opérateurs et filtres.",
|
||||
"guide105.lib_h3_backlinks": "Backlinks & graphe",
|
||||
"guide105.lib_backlinks": "Le panneau Backlinks liste toutes les notes qui pointent vers le fichier ouvert. La vue Graphe (bouton 🕸️) affiche les liens entre fichiers : glissez les nœuds, zoomez à la molette, double-cliquez pour ouvrir une note.",
|
||||
"guide105.lib_h3_conflicts": "Conflits de synchronisation",
|
||||
"guide105.lib_conflicts": "Si vous synchronisez le vault avec Syncthing, ObsiGate détecte les fichiers de conflit (copies « sync-conflict ») et propose de les comparer puis résoudre depuis la page dédiée du menu Options.",
|
||||
"guide105.lib_h3_attach": "Fichiers joints & médias",
|
||||
"guide105.lib_attach": "Les images <code>![[image.png]]</code>, pièces jointes et médias (audio, vidéo, PDF intégrés) dans les notes sont rendus dans le viewer et indexés pour la recherche ; le bouton « Rescan attachments » de la configuration recrée l'index des pièces jointes.",
|
||||
"guide105.off_pwa": "ObsiGate est une PWA : installez-la (icône d'installation de la barre d'adresse) pour l'ouvrir comme une application. Le service worker met en cache l'interface et vos derniers documents consultés.",
|
||||
"guide105.off_edit": "Hors-ligne, vous pouvez lire les documents en cache et même les éditer : les modifications sont mises en file d'attente dans IndexedDB.",
|
||||
"guide105.off_sync": "Au retour en ligne, la file se rejoue automatiquement (badge de synchronisation dans l'en-tête). Si la version serveur a divergé entre-temps, le fichier est marqué en conflit et la version serveur est préservée en backup.",
|
||||
"guide105.off_watch": "Les modifications externes (Obsidian sur disque) sont détectées par le watcher : la vue se recharge sans perte de position, ou signale « modifié en externe » pendant une édition.",
|
||||
"guide105.col_intro": "Ouvrez un document en mode Édition : plusieurs personnes peuvent travailler simultanément sur le même fichier via un WebSocket Yjs (CRDT). Les modifications fusionnent sans verrou.",
|
||||
"guide105.col_cursors": "Les curseurs et sélections des collaborateurs apparaissent avec une couleur et un nom par personne (awareness).",
|
||||
"guide105.col_save": "La fusion est persistée côté serveur après 2 s d'inactivité ; chaque écriture crée un backup horodaté avant application.",
|
||||
"guide105.col_perm": "Accès limité aux utilisateurs authentifiés disposant de la permission sur la vault.",
|
||||
"guide105.des_get": "L'application desktop ObsiGate (Tauri) embarque le serveur Python : aucune installation de Docker nécessaire. Elle se télécharge sur la page des Releases du dépôt et se met à jour automatiquement (updater signé).",
|
||||
"guide105.des_wizard": "Au premier lancement, un assistant demande le dossier de vos vaults (ou crée un vault de démonstration). Chaque document peut être détaché en fenêtre native séparée.",
|
||||
"guide105.des_data": "Les données desktop restent dans le répertoire applicatif ; les vaults pointent sur vos dossiers existants. Toutes les fonctionnalités web (recherche, IA, partage) sont disponibles.",
|
||||
"guide105.des_native": "Menu système natif, raccourci global optionnel pour afficher/masquer la fenêtre et jumplist des vaults récents.",
|
||||
"guide105.api_intro": "ObsiGate expose une API REST couvrant toute l'application (vaults, fichiers, recherche, backups, export, IA, partage, admin), documentée en OpenAPI 3.1 :",
|
||||
"guide105.api_docs_url": "<code>/docs</code> — interface Swagger UI pour essayer les requêtes en direct.",
|
||||
"guide105.api_redoc": "<code>/redoc</code> — référence alternative plus compacte.",
|
||||
"guide105.api_landing": "<code>/api</code> — page de garde regroupant les endpoints par catégorie.",
|
||||
"guide105.api_schema": "<code>/openapi.json</code> — le schéma machine, à importer dans Postman ou Insomnia.",
|
||||
"guide105.api_h3_auth": "Authentification",
|
||||
"guide105.api_auth": "Connectez-vous via <code>POST /api/auth/login</code> pour obtenir un token Bearer (le même jeton est accepté en cookie HttpOnly, ce qui permet aux clients navigateur d'utiliser <code>credentials: \"include\"</code>). Toutes les routes <code>/api/*</code> exigent ce jeton sauf mention contraire.",
|
||||
"guide105.api_h3_mcp": "Serveur MCP",
|
||||
"guide105.api_mcp": "Les outils de l'assistant IA (lire, lister, chercher, ouvrir, écrire…) sont exposés à tout client MCP (Claude Desktop, Cursor, Cline…) sur <code>https://votre-instance/mcp</code> avec un token d'API. Configuration et exemples : <code>docs/MCP_GUIDE.md</code>.",
|
||||
"guide105.api_h3_autom": "Automatisation",
|
||||
"guide105.api_autom": "Pour automatiser depuis l'extérieur : <code>GET /api/search?q=…</code> et <code>GET /api/file/{vault}?path=…</code> permettent d'indexer ou relire vos notes dans un autre outil ; les webhooks sortants (section 🪝) évitent le polling.",
|
||||
"guide105.lng_how": "L'interface est intégralement bilingue français / anglais. Réglages → Profil → Langue : le choix est enregistré sur votre compte et vous suit sur tous les appareils.",
|
||||
"guide105.lng_scope": "Tout est traduit : menus, messages, notifications, et le présent guide. Les réponses de l'assistant IA suivent la langue de vos documents.",
|
||||
"guide105.lng_export": "Les boutons Markdown / PDF de ce guide téléchargent la version dans votre langue.",
|
||||
"guide105.h3_semantic": "Recherche sémantique (hybride)",
|
||||
"guide105.sem_p1": "Activez le bouton « S » de la barre de recherche (ou Alt-S) pour combiner TF-IDF et similarité vectorielle (fusion RRF) : les concepts approchants (« velours » trouve « tissu doux ») remontent mieux.",
|
||||
"guide105.sem_p2": "Le moteur d'embeddings (modèle multilingue) est optionnel : sans lui, un repli par hash conserve une recherche hybride fonctionnelle. Les vecteurs sont recalculés à chaque indexation du vault.",
|
||||
"guide105.h3_push": "Notifications web (push)",
|
||||
"guide105.push_p1": "Autorisez les notifications (bouton 🔔 de l'en-tête) pour être averti des fins de synchronisation hors-ligne et des événements importants. La gestion des abonnements est dans les Configurations.",
|
||||
"guide105.push_p2": "Basée sur la Web Push API (clés VAPID) ; fonctionne sur desktop et PWA mobile, sans service tiers : le serveur émet directement vers les endpoints push des navigateurs.",
|
||||
"guide105.h3_panes": "Vue multi-panneaux (split view)",
|
||||
"guide105.panes_p": "Le bouton « Diviser » de la barre d'actions ouvre le document dans un panneau jumeau ; empilez plusieurs panneaux pour comparer deux notes ou lire et éditer en parallèle. Les largeurs se règlent au bord des panneaux et sont mémorisées.",
|
||||
"guide105.h3_dupe": "Anti-doublons à l'upload",
|
||||
"guide105.dupe_p": "L'upload en masse (glisser-déposer un dossier sur la sidebar) compare chaque fichier au contenu existant : un fichier déjà présent est ignoré plutôt que dupliqué avec un suffixe « (1) ». Utile pour restaurer un vault sans créer de doublons.",
|
||||
"guide105.h3_pdf": "Export PDF",
|
||||
"guide105.pdf_p": "Le bouton « PDF » d'un document le rend avec le même moteur que la vue (WeasyPrint) : titres, tableaux, listes et code sont conservés. Depuis un lien public, la route <code>/s/{token}/pdf</code> produit le même PDF.",
|
||||
"guide105.h3_exports": "Export HTML / ePub / ZIP",
|
||||
"guide105.exp_p": "Le menu « Exporter » propose trois formats : HTML autonome (fichier unique, images incluses), ePub pour les liseuses et, pour un dossier, un bundle Markdown en ZIP — liens et ressources résolus pendant l'export.",
|
||||
"guide105.h3_mfa": "MFA : TOTP, WebAuthn, codes de secours",
|
||||
"guide105.mfa_p": "Activez la double authentification dans Réglages → Profil : applications TOTP (Authy, Aegis…), clés de sécurité et passkeys (WebAuthn, y compris Windows Hello) et 10 codes de secours à conserver hors ligne. Chaque méthode s'active et se désactive indépendamment.",
|
||||
"guide105.h3_admin": "Tableau de bord administrateur",
|
||||
"guide105.admin_p": "Le rôle admin ouvre une page dédiée <code>/admin.html</code> (bouton du menu Options) : statut du serveur en direct, utilisateurs, vaults, sessions actives et journal d'audit. Le CRUD utilisateurs est aussi disponible dans les Configurations.",
|
||||
"guide105.dl_md_title": "Télécharger ce guide en Markdown",
|
||||
"guide105.dl_pdf_title": "Télécharger ce guide en PDF",
|
||||
"guide105.dl_md": "Markdown",
|
||||
"guide105.dl_pdf": "PDF",
|
||||
"guide105.export_title": "Guide d'utilisation ObsiGate",
|
||||
"guide105.export_footer": "Généré depuis ObsiGate {version} — {date}. Ce document est la copie du guide intégré ; la version la plus récente est toujours dans l'application."
|
||||
}
|
||||
|
||||
@@ -8146,6 +8146,29 @@ body.popup-mode .content-area {
|
||||
.cp-browse-filter:focus { border-color: var(--accent); }
|
||||
.cp-browse-filter::placeholder { color: var(--text-muted); }
|
||||
|
||||
/* ── Help Modal: desktop = wider reading (#105) ──
|
||||
The Tauri shell (body.desktop-mode) and wide web viewports get the full
|
||||
reading layout instead of the 1320px modal cap. */
|
||||
body.desktop-mode .help-container {
|
||||
max-width: 1760px;
|
||||
width: 96vw;
|
||||
}
|
||||
body.desktop-mode .help-content {
|
||||
max-width: 1440px;
|
||||
padding: 36px 56px 64px;
|
||||
}
|
||||
body.desktop-mode .editor-container {
|
||||
max-height: 94vh;
|
||||
}
|
||||
@media (min-width: 1400px) {
|
||||
.help-container {
|
||||
max-width: min(1640px, calc(100vw - 48px));
|
||||
}
|
||||
.help-content {
|
||||
max-width: 1280px;
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Help Modal: Mobile responsive ── */
|
||||
@media (max-width: 768px) {
|
||||
.help-container,
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
* cache or Cloudflare does NOT clear the Service Worker Cache Storage, which is
|
||||
* a separate store. Bumping SW_VERSION invalidates it on every release.
|
||||
*/
|
||||
const SW_VERSION = 'v21';
|
||||
const SW_VERSION = 'v22';
|
||||
const CODE_CACHE = `obsigate-code-${SW_VERSION}`;
|
||||
const RUNTIME_CACHE = `obsigate-runtime-${SW_VERSION}`;
|
||||
const API_CACHE = `obsigate-api-${SW_VERSION}`;
|
||||
|
||||
Reference in New Issue
Block a user