Commit Graph
25 Commits
Author SHA1 Message Date
eezd 9449a1aa65 feat(storage): expose backup restoration and maintenance tools 2026-10-25 13:22:16 +08:00
eezd 88492fdcde feat(settings): organize categories and include optional font storage 2026-10-25 13:22:16 +08:00
eezd 56145dba72 feat(settings): show categorized storage usage on demand 2026-10-25 11:56:38 +08:00
eezd ac10de0466 feat(trash): add bulk purge and automatic retention 2026-10-25 11:56:28 +08:00
eezd 1882312435 feat(settings): manage shared interface and editor fonts 2026-10-24 20:14:48 +08:00
eezd 0861be681b feat(tree): persist custom node icons and animate folder expansion 2026-10-24 18:13:42 +08:00
eezd 19aab631ec feat(ui): streamline workspace settings and remove sharing
Unify compact workspace controls and panel transitions, move directory actions into the context menu, and remove backlink UI.

Reorganize settings with searchable sections, per-setting resets, shortcut search, and accurate save feedback.

Remove sharing UI, APIs, authentication helpers, and storage code; provide a transactional cleanup script with retirement tests. Reject directories during orphan image cleanup and cover mixed-batch preservation.
2026-10-24 12:32:23 +08:00
eezd 91a359c2b7 feat(assets): add searchable media library and verified orphan cleanup 2026-10-22 15:09:15 +08:00
eezd a923c2dfb9 feat(knowledge): index note relationships and maintain moved links 2026-10-22 14:52:37 +08:00
eezd 828d50f242 Support live collection shares with stable member scopes 2026-10-21 16:16:53 +08:00
eezd ffc95d6dbc Add tree multiselection, batch actions and Markdown export 2026-10-21 16:10:49 +08:00
eezd d253536009 Add image listing and asset management
Show images in asset directories with preview, rename, replacement, and trash recovery. Update local Markdown references when images move and restore original files if related metadata cannot be committed.

Refresh image previews after replacement and compare actual contents when deduplicating subsequent uploads.
2026-10-21 15:14:07 +08:00
eezd 8b54ccba18 Remove setup code from first-run initialization 2026-10-21 14:19:11 +08:00
eezd 34d2acbbd5 Add Markdown and ZIP notebook import 2026-10-21 12:56:38 +08:00
eezd 8c13dfeaec Convert pasted web content to Markdown and import remote images 2026-10-20 18:18:00 +08:00
eezd 84e89c8fe4 Support live recursive folder shares and follow subject moves 2026-10-20 17:20:23 +08:00
eezd 8ce4a11b33 Add managed plugins with lifecycle cleanup and editor extensions 2026-10-20 11:53:29 +08:00
eezd 7f65162115 Add synced themes, color modes and custom CSS snippets 2026-10-20 10:06:58 +08:00
eezd 1562519f08 Add installable PWA shell with safe updates and offline status 2026-10-19 13:22:56 +08:00
eezd eb63b14c8e Add settings page with synced appearance and password change
- Store app settings as one JSON document on the server, merged per key and
  pushed to other devices; cache locally to avoid a flash on load
- Settings page groups appearance, account, shortcuts, shares, API tokens and
  trash; full screen with a section list on phones
- Font size and content width settings
- Change the login password, signing out other sessions
- Settings writes and password changes only accept a login session
2026-10-17 16:23:39 +08:00
eezd 5ac01894e6 Add read-only sharing, API tokens and OpenAPI spec
- Share a note as a live read-only page at /s/{token} with optional password and expiry
- Share page renders with the shared parser (TOC, footnotes, math, Mermaid, code highlighting)
  and only serves images from the note's own .assets directory
- Shares follow renames made through the API or externally
- Manage shares and API tokens from the command palette and file tree
- Accept read/write API tokens as Bearer credentials; management endpoints require a session
- Serve a hand-written openapi.json, checked against the route table in tests
2026-10-17 15:21:47 +08:00
eezd b26c5aa693 Revert "Add client-side note encryption"
This reverts commit 5cf5a45682.
2026-10-17 14:56:23 +08:00
eezd 5cf5a45682 Add client-side note encryption
- WebCrypto keyring (PBKDF2 600k + AES-GCM master key) and per-note/per-image keys
- Encrypt/decrypt commands convert the note and its own images, deleting the originals
- Unlock, setup and change-password dialogs; manual lock; lock on page close
- Encrypted images are decrypted to blob URLs; pasted images are encrypted before upload
- Rewrite image links in the browser when renaming an encrypted note
- Skip local drafts for encrypted notes and confirm before closing with unsaved changes
- Show encrypted notes as locked with an explanation outside secure contexts
2026-10-17 14:51:08 +08:00
eezd 55f0ee174e Add full-text search
- Index notes in a separate, rebuildable SQLite database (index.db) using FTS5 trigram,
  synced from watcher snapshots so external edits are picked up; terms under 3 characters
  fall back to LIKE
- GET /api/v1/search?q= returns matching notes with the first matching line and a snippet;
  path matches rank first
- Sidebar search panel (Ctrl+Shift+F) with highlighted terms and keyboard navigation;
  opening a result jumps to and selects the match
- Restore scroll position on tab switch with scroll snapshots; restoring scrollTop drifted
  by a few lines after line heights were re-estimated
2026-10-16 20:17:24 +08:00
eezd 02d904056c feat(web): add Vue workspace with file tree, tabs, autosave and live sync
- Login and first-run setup screens
- File tree with inline create/rename, context menu, drag-and-drop
  move and trash with undo; all operations update the UI first and roll
  back on failure
- Tabs keep a CodeMirror state each; edits autosave after 500 ms with
  If-Match revisions, unsent edits persist in IndexedDB, and conflicts
  or remote deletions surface as banners with explicit choices
- WebSocket events sync external edits, moves and deletions into open
  tabs; reconnects trigger a full resync
- Pasted or dropped images show instantly and upload to note.assets/
- Responsive layout with a swipe-in sidebar drawer on phones
- Switch to TypeScript 6: vue-tsc does not support TypeScript 7 yet
2026-10-16 18:37:14 +08:00