feat: finalisation éditeur Forge + mode hors-ligne PWA + consolidation roadmap
- Forge: Tab indent, Ctrl+K, auto-focus, AI status, messages erreur FR - Forge: slash commands clean, cache-bust iframe, preview serveur - Forge: iframe 82vh, hauteur auto, table inline, sélecteur langage - PWA hors-ligne: IndexedDB (offline-db.js + offline.js) - Mermaid: thème dark complet, highlight.js preview - Backend: màj CSP, rename chain, bookmarks/history/shares - Roadmap: consolidation dans docs/ROADMAP.md (75 items) - Infra: docker-compose.podman.yml, suppression test-vault - .gitignore: exclusion odysseus/
This commit is contained in:
+71
-49
@@ -1137,46 +1137,23 @@
|
||||
<div class="editor-modal" id="editor-modal">
|
||||
<div class="editor-container">
|
||||
<div class="editor-header">
|
||||
<div class="editor-title" id="editor-title">Édition</div>
|
||||
<div class="editor-actions">
|
||||
<button
|
||||
class="editor-btn danger"
|
||||
id="editor-delete"
|
||||
title="Supprimer"
|
||||
aria-label="Supprimer"
|
||||
>
|
||||
<i
|
||||
data-lucide="trash-2"
|
||||
style="width: 16px; height: 16px"
|
||||
></i>
|
||||
</button>
|
||||
<button
|
||||
class="editor-btn"
|
||||
id="editor-cancel"
|
||||
title="Annuler"
|
||||
aria-label="Annuler"
|
||||
>
|
||||
<i
|
||||
data-lucide="x"
|
||||
style="width: 16px; height: 16px"
|
||||
></i>
|
||||
</button>
|
||||
<button
|
||||
class="editor-btn primary"
|
||||
id="editor-save"
|
||||
title="Sauvegarder"
|
||||
aria-label="Sauvegarder"
|
||||
>
|
||||
<i
|
||||
data-lucide="check"
|
||||
style="width: 16px; height: 16px"
|
||||
></i>
|
||||
</button>
|
||||
</div>
|
||||
<span class="editor-brand">ObsiGate</span>
|
||||
<input class="editor-title-input" id="editor-title-input" placeholder="Titre..." spellcheck="false" title="Titre (sync avec # Heading)">
|
||||
<span class="editor-sep">/</span>
|
||||
<input class="editor-filename-input" id="editor-filename-input" placeholder="nom.md" spellcheck="false" title="Renommer le fichier">
|
||||
<div class="editor-spacer"></div>
|
||||
<span class="editor-save-dot ok" id="editor-save-dot"><span class="dot"></span><span id="editor-save-label">Saved</span></span>
|
||||
<button class="editor-btn danger" id="editor-delete" title="Supprimer" aria-label="Supprimer">🗑</button>
|
||||
<button class="editor-btn" id="editor-cancel" title="Annuler" aria-label="Annuler">✕</button>
|
||||
<button class="editor-btn primary" id="editor-save" title="Sauvegarder" aria-label="Sauvegarder">✓</button>
|
||||
</div>
|
||||
<div class="editor-body" id="editor-body">
|
||||
<div class="editor-body editor-body-cm" id="editor-body">
|
||||
<div id="ai-toolbar-container"></div>
|
||||
</div>
|
||||
<div class="editor-footer">
|
||||
<span class="editor-stat-file" id="editor-stat-file"></span>
|
||||
<span class="editor-stat-words" id="editor-stat-words">0 words</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1199,10 +1176,26 @@
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="editor-body" id="config-body">
|
||||
<div class="editor-body help-body" id="config-body">
|
||||
<nav class="help-nav" id="config-nav">
|
||||
<div class="help-nav-header"><div class="help-nav-title">Configuration</div></div>
|
||||
<div class="help-nav-search-wrap">
|
||||
<input type="text" class="help-nav-search" id="config-nav-search" placeholder="Rechercher..." autocomplete="off" spellcheck="false">
|
||||
<button class="help-search-clear" id="config-search-clear" title="Effacer" onclick="var s=document.getElementById('config-nav-search');if(s){s.value='';s.dispatchEvent(new Event('input'));s.focus();}">X</button>
|
||||
</div>
|
||||
<ul class="help-nav-list">
|
||||
<li><a href="#cfg-search" class="help-nav-link">🔍 Recherche</a></li>
|
||||
<li><a href="#cfg-backend" class="help-nav-link">⚙️ Backend</a></li>
|
||||
<li><a href="#cfg-sync" class="help-nav-link">🔄 Synchronisation</a></li>
|
||||
<li><a href="#cfg-diags" class="help-nav-link">🩺 Diagnostics</a></li>
|
||||
<li><a href="#cfg-ai" class="help-nav-link">🤖 IA</a></li>
|
||||
<li><a href="#cfg-about" class="help-nav-link">📦 A propos</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<div class="help-content" id="config-scroll">
|
||||
<div class="config-content">
|
||||
<!-- Performance Settings - Frontend -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section" id="cfg-search">
|
||||
<h2>Paramètres de recherche</h2>
|
||||
<p class="config-description">
|
||||
Ces paramètres s'appliquent immédiatement côté
|
||||
@@ -1286,7 +1279,7 @@
|
||||
</section>
|
||||
|
||||
<!-- Historique récent -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section">
|
||||
<h2>
|
||||
📋 Historique récent
|
||||
<span class="config-badge-restart"
|
||||
@@ -1335,7 +1328,7 @@
|
||||
</section>
|
||||
|
||||
<!-- Performance Settings - Backend -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section">
|
||||
<h2>
|
||||
Paramètres backend
|
||||
<span class="config-badge-restart"
|
||||
@@ -1465,7 +1458,7 @@
|
||||
</section>
|
||||
|
||||
<!-- Tag Filtering (existing) -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section">
|
||||
<h2>Filtrage de tags</h2>
|
||||
<p class="config-description">
|
||||
Définissez les patterns de tags à masquer dans
|
||||
@@ -1505,7 +1498,7 @@
|
||||
</section>
|
||||
|
||||
<!-- Watcher / Synchronisation -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section" id="cfg-sync">
|
||||
<h2>Synchronisation automatique</h2>
|
||||
<p class="config-description">
|
||||
Surveillance des fichiers en temps réel via
|
||||
@@ -1595,7 +1588,7 @@
|
||||
</section>
|
||||
|
||||
<!-- Hidden Files/Folders Configuration -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section">
|
||||
<h2>🗂️ Fichiers cachés</h2>
|
||||
<p class="config-description">
|
||||
Contrôlez l'affichage des fichiers/dossiers
|
||||
@@ -1635,7 +1628,7 @@
|
||||
</section>
|
||||
|
||||
<!-- Diagnostics -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section" id="cfg-diags">
|
||||
<h2>Diagnostics</h2>
|
||||
<p class="config-description">
|
||||
Statistiques de l'index et du moteur de
|
||||
@@ -1658,8 +1651,36 @@
|
||||
</button>
|
||||
</section>
|
||||
|
||||
<!-- Cles API AI -->
|
||||
<section class="config-section help-section" id="cfg-ai">
|
||||
<h2>🤖 Cles API Intelligence Artificielle</h2>
|
||||
<p class="config-description">
|
||||
Configurez vos cles API. Cliquez sur <strong>Tester</strong> pour charger les modeles.
|
||||
</p>
|
||||
<div class="config-row">
|
||||
<label class="config-label" for="cfg-deepseek-key">DeepSeek API Key</label>
|
||||
<input type="password" id="cfg-deepseek-key" class="config-input" placeholder="sk-..." autocomplete="off">
|
||||
<select id="cfg-deepseek-model" class="config-select" style="width:200px"><option value="">-- Modele --</option></select>
|
||||
</div>
|
||||
<div class="config-row">
|
||||
<label class="config-label" for="cfg-openrouter-key">OpenRouter API Key</label>
|
||||
<input type="password" id="cfg-openrouter-key" class="config-input" placeholder="sk-or-..." autocomplete="off">
|
||||
<select id="cfg-openrouter-model" class="config-select" style="width:200px"><option value="">-- Modele --</option></select>
|
||||
</div>
|
||||
<div class="config-row">
|
||||
<label class="config-label" for="cfg-gemini-key">Gemini API Key</label>
|
||||
<input type="password" id="cfg-gemini-key" class="config-input" placeholder="AIza..." autocomplete="off">
|
||||
<select id="cfg-gemini-model" class="config-select" style="width:200px"><option value="">-- Modele --</option></select>
|
||||
</div>
|
||||
<div class="config-actions-row" style="margin-top:16px">
|
||||
<button class="config-btn-save" id="cfg-save-ai-keys">Sauvegarder</button>
|
||||
<button class="config-btn-secondary" id="cfg-test-ai-keys">Tester</button>
|
||||
<span id="cfg-ai-status" style="font-size:12px;color:var(--text-muted);margin-left:12px"></span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- À propos -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section" id="cfg-about">
|
||||
<h2>📦 À propos</h2>
|
||||
<div id="config-about" class="config-diagnostics">
|
||||
<div class="config-diag-loading">
|
||||
@@ -1669,7 +1690,7 @@
|
||||
</section>
|
||||
|
||||
<!-- Webhooks -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section">
|
||||
<h2>🔔 Webhooks</h2>
|
||||
<p class="config-description">
|
||||
Notifications HTTP vers des services externes
|
||||
@@ -1701,7 +1722,7 @@
|
||||
</section>
|
||||
|
||||
<!-- Partages publics -->
|
||||
<section class="config-section">
|
||||
<section class="config-section help-section">
|
||||
<h2>📤 Partages publics</h2>
|
||||
<p class="config-description">
|
||||
Liens de partage publics pour des documents
|
||||
@@ -1710,6 +1731,7 @@
|
||||
<div id="shares-list"></div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2968,7 +2990,7 @@
|
||||
<li>
|
||||
<strong>Barre d'outils AI</strong> :
|
||||
Complétion, réécriture, traduction (voir
|
||||
section <a href="#help-ia">IA</a>)
|
||||
section <a href="#help-ia">🤖 IA</a>)
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
Reference in New Issue
Block a user