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
deadf1e1ea
fix: repair broken import blocks in sync.js and legacy.js
CI / lint (push) Successful in 12s
CI / security (push) Successful in 13s
CI / test (push) Successful in 19s
CI / build (push) Successful in 3s
2026-05-28 16:41:15 -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
16e0860a69
fix: export RightSidebarManager from ui.js
CI / lint (push) Successful in 13s
CI / security (push) Successful in 9s
CI / test (push) Successful in 16s
CI / build (push) Successful in 3s
2026-05-28 16:20:17 -04:00
bruno
48ab3d2b80
fix: add missing _recentFilesCache and _recentRefreshTimer in config.js
CI / lint (push) Successful in 14s
CI / security (push) Successful in 10s
CI / test (push) Successful in 22s
CI / build (push) Successful in 3s
2026-05-28 16:15:49 -04:00
bruno
60c23e811b
fix: add missing safeCreateIcons import in ui.js
CI / lint (push) Successful in 13s
CI / security (push) Successful in 9s
CI / test (push) Successful in 16s
CI / build (push) Successful in 3s
2026-05-28 16:06:40 -04:00
bruno
a0768d7a76
fix: remove broken ES module const reassignment (openFile monkey-patch)
CI / lint (push) Successful in 13s
CI / security (push) Successful in 9s
CI / test (push) Successful in 19s
CI / build (push) Successful in 2s
2026-05-28 15:43:31 -04:00
bruno
83a5de2ed2
fix: add missing openFile import in ui.js
CI / lint (push) Successful in 13s
CI / security (push) Successful in 9s
CI / test (push) Successful in 16s
CI / build (push) Successful in 3s
2026-05-28 15:35:35 -04:00
bruno
25cfd7cc56
fix: export DashboardSharedWidget from dashboard.js
CI / lint (push) Successful in 12s
CI / security (push) Successful in 9s
CI / test (push) Successful in 42s
CI / build (push) Successful in 3s
2026-05-28 14:58:42 -04:00
bruno
e9e954f36b
feat(graph): Phase 4 — Barnes-Hut, cache, lazy loading
...
CI / lint (push) Successful in 13s
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled
CI / security (push) Has been cancelled
Performance optimizations for large vaults:
- Barnes-Hut quadtree repulsion (O(n log n) for >200 nodes)
- Naive O(n²) preserved for small graphs (<200 nodes)
- Graph cache: reuse data when same (vault, path, depth, scope, tag)
- Cache key displayed in info bar: '(cache)' label
2026-05-28 14:52:31 -04:00
bruno
0416266dde
feat(graph): Phase 3 — type filter, export PNG, fullscreen, focus node
...
CI / lint (push) Has started running
CI / test (push) Has been cancelled
CI / security (push) Has been cancelled
CI / build (push) Has been cancelled
- Type filter checkboxes (dossier, .md, autre) in legend
- Export PNG button (canvas.toDataURL)
- Fullscreen button (Fullscreen API)
- Focus node function (center on specific node)
- Filter applied during _draw() to skip hidden nodes
2026-05-28 14:48:31 -04:00
bruno
a373279b08
feat(graph): Phase 1+2 — full-vault, tag filter, backlinks, tooltips, depth slider
...
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / security (push) Has been cancelled
CI / build (push) Has been cancelled
Backend (main.py):
- GraphNode: added tags, incoming_count, outgoing_count
- GraphEdge: added 'backlink' relation
- GraphResponse: added 'scope' field
- api_graph: scope=full|directory, tag= filter, backlinks
- Full-vault tree walk with configurable depth 0-3
- Tag index from in-memory file index for fast filtering
- Incoming/outgoing link count per node
Frontend (graph.js + index.html):
- Theme-adaptive colors via CSS custom properties
- Depth slider (0-3) with live reload
- Full-vault toggle button (🌐 Tout / 📁 Dossier)
- Search input with tag filtering + visual highlighting
- Tooltip on hover (name, path, tags, link counts)
- Backlink edges rendered in red dashed
- Node size proportional to link count
- Larger modal (1000px, 85vh)
2026-05-28 14:46:22 -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
bruno
a5afbb1dc1
fix: SSE sync indicator stuck on 'Connexion...' (3 fixes)
...
1. Move initSyncStatus() AFTER auth check — EventSource was connecting
before the access_token cookie was available, causing 401 errors.
2. Reconnect SSE after login — Login form handler now calls
IndexUpdateManager.connect() + showWelcome() after successful auth.
3. SSESafeGZipMiddleware — GZip buffering breaks Server-Sent Events
streaming. Custom middleware subclass skips compression for
/api/events endpoint (path-based bypass).
2026-05-27 21:40:32 -04:00
bruno
d6cf2a1a7f
Remove vault filter dropdown from dashboard
2026-05-27 15:57:59 -04:00
bruno
6e742bfa2c
Adjust dashboard tab styling for responsive layout
2026-05-27 15:23:50 -04:00
bruno
b5aae2b2fd
Reduce dashboard tab padding and font, enlarge icons
2026-05-27 15:09:08 -04:00
bruno
b879163052
Refine mobile styles and improve search, sidebar, and layout
2026-05-27 12:55:46 -04:00
bruno
a7c719afb1
Prioritize autocomplete dropdown over search results on Enter keypress
2026-05-27 12:25:25 -04:00
bruno
fcf134d37e
Always show tags section with placeholder or error message
2026-05-27 12:01:23 -04:00
bruno
73593f5e89
Remove duplicate _collectItems call
2026-05-27 11:54:24 -04:00
bruno
c3d583177a
Handle aborted requests by returning early
2026-05-27 11:51:10 -04:00
bruno
96218f872e
Avoid flashing loading state on fast search queries
2026-05-27 11:39:37 -04:00
bruno
56b2a004f9
Show loading state while fetching suggestions
2026-05-27 10:56:44 -04:00
bruno
e5b5f2d4f4
Limit search history to 5 items and isolate suggestion fetches
2026-05-27 09:59:35 -04:00
bruno
586acbe9a1
Keep the dropdown hidden after search execution
2026-05-27 09:45:22 -04:00
bruno
0d3de28967
Simplify sidebar tabs, improve saved search display, and refactor
...
suggestions
2026-05-27 09:27:26 -04:00
bruno
1c59300f11
Remove stray extra closing brace
2026-05-27 08:44:18 -04:00
bruno
e3c25b5b09
Add saved searches with CRUD API and UI sidebar
...
Add extension field to search results and display it
Add active filter badges and save button to search header
2026-05-27 08:39:52 -04:00
bruno
aa2c05b05f
Add regex search with highlighted snippet support
2026-05-27 08:15:39 -04:00
bruno
0630aeba77
Remove case-sensitive toggle and reset search options on clear
2026-05-27 08:01:57 -04:00
bruno
dc9684e56c
Remove deprecated PDF endpoint and update frontend download actions
...
Remove the old HTML-based PDF download endpoint in favor of the new
WeasyPrint-based one, and replace the generic "Télécharger" button
in popout.html with a dedicated .md download and a new PDF button.
Also remove the unused generic download button from the main file view.
2026-05-26 21:55:42 -04:00
bruno
c79202716c
Add WeasyPrint PDF export for markdown files
2026-05-26 21:22:02 -04:00
bruno
9752b18529
Add dark theme support and bookmark status to share view
...
- Implement dark/light theme toggle with persistent preference via
localStorage
- Add a sticky toolbar with theme toggle, Markdown export, and PDF
export buttons
- Update bookmark button to reflect current state with visual feedback
- Introduce CSS custom properties for theming and responsive layout
improvements
2026-05-26 20:19:58 -04:00
bruno
d4896a5df1
Sync YAML frontmatter with share and bookmark actions
2026-05-26 20:02:37 -04:00
bruno
32a41532ba
Auto-set Content-Type for JSON HTTP requests
...
- Add automatic Content-Type header injection for JSON string bodies
- Explicitly set Content-Type on bookmark toggle and share creation
calls
- Add escapeHtml helper function for safe string handling
2026-05-26 15:46:26 -04:00
bruno
b1fcc080e5
Add bookmark support and enhance share dialog
...
- Add bookmark button to file header and context menu
- Implement toggle bookmark API call with toast notification
- Redesign share dialog to show existing shares with revocation
- Add expiration options when creating a new share
- Add CSS styles for share action buttons
2026-05-26 15:40:02 -04:00
bruno
20f9bad9c0
Replace replace UI with search result navigation
2026-05-26 15:25:20 -04:00
bruno
6cd981f9bc
Move search state variables to module scope
2026-05-26 14:37:44 -04:00
bruno
f2170e9ac8
Guard against missing search elements and restyle search layout
2026-05-26 14:05:26 -04:00
bruno
8fdcdaf412
Add search toggles, path filters, and find/replace functionality
2026-05-26 13:35:38 -04:00
bruno
872a3e56dd
Refactor file opening to use TabManager and add dashboard tab system
2026-05-26 12:14:47 -04:00
bruno
b38f3f16e4
Coalesce index generation increments and add rebuild cooldown
2026-05-26 11:42:47 -04:00
bruno
0b611a8735
Add share, webhook, and conflict management features
2026-05-26 11:00:48 -04:00
bruno
482937fb30
Add audit logging, rate limiting, secret redactor, and backlinks
...
Implement several security and feature improvements across the backend
and frontend:
- New IP-based rate limiter for authentication endpoints
- New audit logging system for sensitive operations
- New secret redactor to mask sensitive patterns in rendered content
- Configurable token TTL and IGNORED_DIRS via environment variables
- Add backlink index and API endpoint
- Add preview tab support with single/double-click behavior in tree
- Add file backup before write/delete operations
2026-05-26 10:27:00 -04:00
bruno
c65063fbca
Update README docker-compose syntax and add incremental sidebar refresh
...
Implement `incrementalLoadDirectory` to update tree items without full
DOM
rebuild. Modify `refreshSidebarTreePreservingState` to use incremental
updates for expanded vaults and directories, preserving existing DOM
state.
2026-05-25 22:05:40 -04:00
bruno
9ce95eda2d
Remove toast notification for silent auto-indexing
...
Replace `loadVaults()` and `loadTags()` calls with state-preserving
sidebar and tag refresh functions after silent indexing
2026-05-25 21:54:25 -04:00