Commit Graph
50 Commits
Author SHA1 Message Date
bruno 31b7f4c569 fix: translate dashboard tabs, header menu items
CI / lint (push) Failing after 19s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Failing after 10s
- showWelcome() dashboard: all tabs, empty states, hints → ${t()}
- Header dropdown: 7 menu items with data-i18n (Thème..Déconnexion)
- 61 new locale keys for dashboard, settings nav, help nav, about
- Total: 658 keys per language
2026-06-18 14:47:18 -04:00
bruno 0403be4516 feat: complete i18n coverage — all dynamic content translated
CI / test (push) Has been cancelled
CI / security (push) Has been cancelled
CI / build (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / lint (push) Has been cancelled
All remaining French strings converted to t() calls:
- ui.js: create/delete file/dir modals, rename/copy/bookmark toasts
- palette.js: confirm dialogs, error toasts
- search.js: result summary text with interpolation
- config.js: about/diagnostics section labels
- auth.js: admin panel title
- viewer.js: forge popout labels
- dashboard.js: shared widget buttons, date locale-aware

57 new locale keys for dynamic content (modals, toasts, admin, about)
Total: 597 keys per language

All 26 modules validated — 163 exports, 0 errors
2026-06-18 14:18:25 -04:00
bruno 36c1546098 fix: header Forge — affiche Forge + titre/fichier, restaure ObsiGate a la fermeture
CI / lint (push) Failing after 10s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Failing after -7s
2026-06-16 10:13:19 -04:00
bruno a002acb2b2 fix: liens wikilink utilisent TabManager.openPreview (corrige titre du tab)
CI / lint (push) Failing after 2s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Failing after -2s
2026-06-16 08:23:23 -04:00
bruno 83d21bad1a fix: syntaxe viewer.js — accolade et ligne orphelines apres patch filtre
CI / lint (push) Failing after 1s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Failing after -5s
2026-06-15 16:59:36 -04:00
bruno 5466457a06 feat: filtre sauvegardes (Tous/Recherches/Repertoires) extensible
CI / lint (push) Failing after 3s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Failing after -7s
- Barre de filtres avec 3 pills: Tous, Recherches, Repertoires
- Chaque saved-search-item a data-type=search|directory
- _applySavedFilter() masque/affiche selon le filtre actif
- _initSavedFilter() initialise les listeners (run once)
- Extensible: ajouter un pill + data-type suffit
- Gere l'etat empty quand aucun resultat pour le filtre
2026-06-15 16:57:19 -04:00
bruno 2c7b8b525a fix: icone type distinct + position a droite dans les recherches sauvegardees
CI / lint (push) Failing after 5s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Failing after -3s
- Recherche classique: icone search (loupe) grise a droite
- Recherche repertoire: icone folder-search bleue a droite
- Icones dans .saved-search-meta, poussees a droite via margin-left:auto
- Les badges/vault restent a gauche dans .saved-search-badges
2026-06-15 16:51:49 -04:00
bruno 1116957c19 feat: menu contextuel repertoire → Sauvegarder recherche + icone dossier
CI / lint (push) Failing after 5s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Failing after -2s
- ContextMenuManager: option Ajouter aux recherches sauvegardees pour repertoires
- _saveDirectorySearch: POST /api/saved-searches avec include_paths=repertoire/**
- Bascule automatique vers longlet Sauvegardes dans le sidebar
- loadSavedSearches: icone folder-search + classe saved-search-dir pour recherches dossier
- Recherches dossier affichent le chemin au lieu d'une query vide
2026-06-15 16:45:45 -04:00
bruno cc2ec9e869 fix: suppression boutons doublons Forge + delegation parent modal
CI / lint (push) Failing after 7s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Failing after -8s
- Retrait des 3 boutons (delete/cancel/save) de la barre Forge (doublons)
- Retrait des handlers JS associés dans editor-poc.html
- Le header parent ObsiGate reste visible quand Forge est ouvert
- Les boutons save/delete du parent délèguent à Forge via postMessage
- Forge écoute 'parent-save' et 'parent-delete' du parent
- state.editorVault/editorPath settés dans viewer.js pour le parent
2026-06-15 13:57:21 -04:00
bruno feeb46b873 feat: finalisation éditeur Forge + mode hors-ligne PWA + consolidation roadmap
CI / lint (push) Failing after 7s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Failing after -7s
- 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/
2026-06-14 20:27:37 -04:00
bruno 8cf7b55747 fix: slash commands clean /command + cache-bust Forge iframe
CI / lint (push) Failing after 5s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Successful in -3s
Bug 1: selectSlashAction now strips /command text before executing. Bug 2: Forge URL includes _ts=Date.now() to prevent cache.
2026-06-10 08:59:58 -04:00
bruno 3090fe62fe fix: Forge iframe height uses 82vh (bypasses flex parent issue)
CI / lint (push) Successful in 14s
CI / security (push) Successful in 8s
CI / test (push) Successful in 24s
CI / build (push) Successful in 2s
height:100% doesn't work when parent uses flex height. position:absolute collapses the parent. 82vh = 90vh modal - header. Also set bodyEl overflow:hidden.
2026-06-06 00:40:35 -04:00
bruno 6388718b87 fix: Forge iframe fills full modal height (position:absolute)
CI / lint (push) Successful in 15s
CI / security (push) Successful in 9s
CI / test (push) Successful in 38s
CI / build (push) Successful in 3s
.editor-body has flex height, so percentage height on iframe didn't work. Changed to position:absolute;inset:0 which fills the relative parent regardless of flex sizing.
2026-06-06 00:35:57 -04:00
bruno ba30d1e7ce feat: Forge opens in editor modal instead of new tab
CI / lint (push) Successful in 14s
CI / security (push) Successful in 8s
CI / test (push) Successful in 29s
CI / build (push) Successful in 3s
Forge button now reuses the existing editor-modal with an iframe. Same position as the Edit/CodeMirror modal. On close, the forge iframe is removed and the current file is refreshed (picks up changes saved by the POC's auto-save). Updated both frontend/js/viewer.js and frontend/app.js.
2026-06-06 00:11:21 -04:00
bruno 6eff157686 feat: add Forge button next to Edit in viewer toolbar
CI / lint (push) Successful in 15s
CI / security (push) Successful in 9s
CI / test (push) Successful in 26s
CI / build (push) Successful in 2s
Opens /editor-poc?vault=X&path=Y in new tab. Button uses hammer icon + Forge label. Added in both frontend/js/viewer.js and frontend/app.js.
2026-06-05 22:17:37 -04:00
bruno 5c5ef561cf feat: Mermaid.js integration #20-29 — full diagram support
CI / lint (push) Failing after 4s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Successful in 7s
- CDN: mermaid@11 from jsdelivr
- mermaid-viewer.js: init, render, templates, zoom/pan, fullscreen, focus
- All diagram types: flowchart, sequence, class, state, ER, journey, gantt,
  pie, gitGraph, requirement, mindmap, timeline, quadrant, C4 (x4), beta types
- viewer.js: auto-render Mermaid blocks after markdown rendering
- utils.js: live preview panel in editor (debounced 500ms)
- app.js: initMermaid + setupFocusMode on startup
- CSS: container, controls, error, fullscreen overlay, focus panel, live preview
- Export SVG/PNG download buttons
- Obsidian preprocessor ([[links]], ![[img]], ==highlight==)
2026-06-04 23:23:21 -04:00
bruno 652bcb9eef fix: export focusPathInSidebar from sidebar.js and import in viewer.js
CI / lint (push) Failing after 5s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Successful in 7s
Breadcrumb path clicks called focusPathInSidebar() which was defined
in sidebar.js but never exported or imported by viewer.js
2026-06-04 18:52:28 -04:00
bruno 5a76a48e28 fix: loadSavedSearches() après sauvegarde — màj immédiate sans refresh
CI / lint (push) Successful in 13s
CI / security (push) Successful in 8s
CI / test (push) Successful in 16s
CI / build (push) Successful in 1s
2026-05-29 22:03:16 -04:00
bruno ea74907098 fix: refreshSidebarTreePreservingState non importé dans ui/config/viewer
CI / lint (push) Successful in 16s
CI / security (push) Successful in 8s
CI / test (push) Successful in 24s
CI / build (push) Successful in 4s
2026-05-29 20:49:30 -04:00
bruno 0befd161e3 fix: openEditor, openShareDialog, clipboard fallback — boutons Copier/Éditer/Partager
CI / lint (push) Successful in 13s
CI / security (push) Successful in 8s
CI / test (push) Successful in 16s
CI / build (push) Successful in 15s
2026-05-29 20:21:08 -04:00
bruno 3ad484001a fix: advancedSearchOffset → state.advancedSearchOffset + openFile dans dashboard.js
CI / lint (push) Successful in 13s
CI / security (push) Successful in 8s
CI / test (push) Successful in 16s
CI / build (push) Successful in 22s
2026-05-29 15:57:50 -04:00
bruno c0851d9860 fix: el dans ui.js + performAdvancedSearch dans viewer.js — documents et recherches sauvegardées
CI / lint (push) Successful in 13s
CI / security (push) Successful in 8s
CI / test (push) Successful in 17s
CI / build (push) Successful in 5s
2026-05-29 15:49:25 -04:00
bruno 3c93cebdf1 fix: appendHighlightedText non importé dans sidebar.js → erreur filtre sidebar
CI / lint (push) Successful in 14s
CI / security (push) Successful in 8s
CI / test (push) Successful in 15s
CI / build (push) Successful in 2s
2026-05-29 14:52:14 -04:00
bruno 7c288460c3 fix: buildFrontmatterCard non exporté de ui.js → cassait le rendu des documents (et donc les tabs)
CI / lint (push) Successful in 13s
CI / security (push) Successful in 7s
CI / test (push) Successful in 15s
CI / build (push) Successful in 2s
2026-05-29 14:40:26 -04:00
bruno 5d006ddc35 fix: TagFilterService non importé dans config/search/viewer — bloquait rendu résultats et affichage docs
CI / lint (push) Successful in 12s
CI / security (push) Successful in 7s
CI / test (push) Successful in 15s
CI / build (push) Successful in 5s
2026-05-29 13:54:02 -04:00
bruno 10fbeccb5f fix: buildSearchResultsHeader, highlightSearchText, shouldDisplayPath — imports manquants bloquant l'affichage des résultats
CI / lint (push) Successful in 13s
CI / security (push) Successful in 12s
CI / test (push) Successful in 20s
CI / build (push) Successful in 2s
2026-05-29 13:28:14 -04:00
bruno c22259b362 fix: renderFile, searchByTag, addTagFilter, DashboardWidgets — 8 imports manquants
CI / lint (push) Successful in 14s
CI / security (push) Successful in 9s
CI / test (push) Successful in 17s
CI / build (push) Successful in 2s
2026-05-29 13:20:07 -04:00
bruno 4748a75687 fix: initDashboardTabs non exporté de sync.js → importé dans viewer.js
CI / lint (push) Successful in 12s
CI / security (push) Successful in 7s
CI / test (push) Successful in 15s
CI / build (push) Successful in 2s
2026-05-29 11:39:31 -04:00
bruno eb32dce219 fix: AutocompleteDropdown non importé dans viewer.js
CI / lint (push) Successful in 12s
CI / security (push) Successful in 8s
CI / test (push) Successful in 16s
CI / build (push) Successful in 2s
2026-05-29 11:29:14 -04:00
bruno 889d6d6f68 fix: syncActiveFileTreeItem non exporté de sidebar.js → importé dans ui.js et viewer.js
CI / lint (push) Successful in 23s
CI / security (push) Successful in 8s
CI / test (push) Successful in 15s
CI / build (push) Successful in 2s
2026-05-29 09:30:48 -04:00
bruno 0db52c3c0e fix: imports manquants — getFileIcon, showWelcome, showProgressBar, hideProgressBar
CI / lint (push) Successful in 13s
CI / security (push) Successful in 7s
CI / test (push) Successful in 14s
CI / build (push) Successful in 2s
2026-05-29 09:13:41 -04:00
bruno 7edbd7a31a fix: imports manquants — TabManager, showToast, closeHeaderMenu, closeMobileSidebar, ContextMenuManager, RightSidebarManager
CI / lint (push) Successful in 14s
CI / security (push) Successful in 9s
CI / test (push) Successful in 18s
CI / build (push) Successful in 5s
2026-05-29 09:01:33 -04:00
bruno 8662d4ce17 fix: export closeMobileSidebar, showLoading; add imports
CI / lint (push) Successful in 12s
CI / security (push) Successful in 15s
CI / test (push) Successful in 15s
CI / build (push) Successful in 1s
2026-05-29 08:42:22 -04:00
bruno 7d13585b11 fix: export attachTreeItemActionButton/LongPress from viewer.js, import in sidebar.js
CI / lint (push) Successful in 14s
CI / security (push) Successful in 8s
CI / test (push) Successful in 15s
CI / build (push) Successful in 2s
2026-05-28 20:50:56 -04:00
bruno a91dfa65fc fix: export smallBadge from viewer.js, import in sidebar.js
CI / lint (push) Successful in 13s
CI / security (push) Successful in 9s
CI / test (push) Successful in 17s
CI / build (push) Successful in 2s
2026-05-28 20:43:50 -04:00
bruno f5cf2ca0da fix: add state. prefix to allVaults in viewer.js getVaultIcon
CI / lint (push) Successful in 14s
CI / security (push) Successful in 8s
CI / test (push) Successful in 15s
CI / build (push) Successful in 6s
2026-05-28 20:40:46 -04:00
bruno de5cc97015 fix: export getVaultIcon from viewer.js, import in sidebar.js
CI / lint (push) Successful in 16s
CI / security (push) Successful in 13s
CI / test (push) Successful in 18s
CI / build (push) Successful in 8s
2026-05-28 20:31:15 -04:00
bruno c7378e4f12 fix: export icon from viewer.js, import syncVaultSelectors in config.js, cleanup dupes
CI / lint (push) Successful in 16s
CI / security (push) Successful in 10s
CI / test (push) Successful in 22s
CI / build (push) Successful in 3s
2026-05-28 20:26:04 -04:00
bruno 6e59dfdd06 fix: export populateCustomDropdown from ui.js + missing imports
CI / lint (push) Successful in 12s
CI / security (push) Successful in 7s
CI / test (push) Successful in 15s
CI / build (push) Successful in 2s
2026-05-28 19:35:22 -04:00
bruno 015bec7774 fix: add missing imports (api, escapeHtml, safeCreateIcons, getFileIcon) to sidebar, legacy, viewer, dashboard, config
CI / lint (push) Successful in 12s
CI / security (push) Successful in 8s
CI / test (push) Successful in 22s
CI / build (push) Successful in 2s
2026-05-28 19:28:50 -04:00
bruno 148b3851ae fix: add missing state. prefix to all bare state variable references across all modules
CI / lint (push) Successful in 15s
CI / security (push) Successful in 8s
CI / test (push) Successful in 16s
CI / build (push) Successful in 2s
2026-05-28 18:33:39 -04:00
bruno eab6c11dc4 fix: add export to openFile in viewer.js
CI / lint (push) Successful in 18s
CI / security (push) Successful in 7s
CI / test (push) Successful in 15s
CI / build (push) Successful in 6s
2026-05-28 17:05:43 -04:00
bruno 33cfefcb20 fix: remove duplicate escapeHtml in viewer.js (already imported)
CI / lint (push) Successful in 11s
CI / security (push) Successful in 8s
CI / test (push) Successful in 19s
CI / build (push) Successful in 2s
2026-05-28 16:58:25 -04:00
bruno 7c927ca54e fix: rebuild ui.js, search.js, viewer.js from app.js with shell script (no truncation)
CI / lint (push) Successful in 12s
CI / security (push) Successful in 8s
CI / test (push) Successful in 16s
CI / build (push) Successful in 3s
2026-05-28 16:54:15 -04:00
bruno 97d14d867a fix: apply state.xxx pattern and exports to regenerated modules
CI / lint (push) Successful in 11s
CI / security (push) Successful in 17s
CI / test (push) Successful in 15s
CI / build (push) Successful in 3s
2026-05-28 16:50:06 -04:00
bruno 6d36b53b3a fix: regenerate corrupted ui.js, search.js, viewer.js from app.js
CI / lint (push) Successful in 12s
CI / security (push) Successful in 8s
CI / build (push) Has been cancelled
CI / test (push) Has been cancelled
2026-05-28 16:49:29 -04:00
bruno a2ff9297ce fix: strip line number prefixes from all JS files
CI / lint (push) Successful in 13s
CI / security (push) Successful in 8s
CI / test (push) Successful in 18s
CI / build (push) Successful in 2s
2026-05-28 16:46:17 -04:00
bruno 643a73e0f5 fix: strip read_file line numbers accidentally injected into JS files
CI / lint (push) Successful in 13s
CI / security (push) Successful in 8s
CI / test (push) Successful in 16s
CI / build (push) Successful in 3s
2026-05-28 16:40:14 -04:00
bruno 7866f93778 refactor: state.js → mutable object to fix 'assignment to constant' errors
CI / lint (push) Successful in 13s
CI / security (push) Successful in 8s
CI / test (push) Successful in 16s
CI / build (push) Successful in 6s
ES module imports are read-only live bindings — can't reassign
imported let/const variables. Replace individual 'export let' with
single 'export const state = {...}' mutable object.

All modules updated: import { state } from './state.js'
All state access changed to state.xxx pattern.

Fixes cascade of 'Assignment to constant variable' errors.
2026-05-28 16:34:39 -04:00
bruno 4836d6f1d0 refactor: split app.js (8875 lines) into 12 ES modules
CI / lint (push) Successful in 10s
CI / security (push) Successful in 8s
CI / build (push) Has been cancelled
CI / test (push) Has been cancelled
frontend/js/ structure:
  state.js      (55 lines)  — Shared mutable state, constants
  utils.js      (510 lines) — EXT_ICONS, getFileIcon, escapeHtml, safeCreateIcons
  auth.js       (547 lines) — api(), AuthManager, initLoginForm, AdminPanel
  search.js     (1106 lines)— SearchHistory, QueryParser, Autocomplete, performSearch
  sidebar.js    (1091 lines)— Vault tree, sidebar filter, TagFilterService, loadTags
  viewer.js     (1554 lines)— openFile, Outline, ScrollSpy, Frontmatter, Editor
  ui.js         (2250 lines)— Theme, Toast, Sidebar, Dropdowns, Tabs, ContextMenu
  dashboard.js  (461 lines) — Dashboard widgets (Recent, Stats, Bookmarks)
  config.js     (999 lines) — Config panel, Hidden files, About, Sidebar tabs
  sync.js       (436 lines) — SSE/IndexUpdateManager, PWA registration
  graph.js      (401 lines) — GraphViewManager (force-directed canvas graph)
  legacy.js     (550 lines) — Remaining bridge functions (goHome, showWelcome, initSearch)
  app.js        (80 lines)  — Thin orchestrator: imports all modules, calls init()

index.html: switched from <script src="app.js"> to <script type="module" src="js/app.js">
Original app.js preserved for backward compatibility.
All 14 modules pass node --check syntax validation.
2026-05-28 14:04:50 -04:00