- Dynamic miller column sizing with flexbox layout - Root column (160px), middle slices (48px), active column (flex) - Auto-scroll browser to rightmost column on navigation - Offline indicator UI and IndexedDB cache integration - /api/documents endpoint for client-side document caching - Breadcrumb navigation in document content area - FTS5 search with SQLite virtual table - Client-side Mermaid and KaTeX rendering via CDN - Deep sample content (advanced-topics/raft-deep-dive) - Border removal (only search button keeps radius) - Full viewport layout with proper borders between sidebar/content
30 lines
752 B
SQL
30 lines
752 B
SQL
CREATE VIRTUAL TABLE IF NOT EXISTS document_search USING fts5(
|
|
title,
|
|
content,
|
|
path UNINDEXED,
|
|
tokenize='porter'
|
|
);
|
|
|
|
INSERT INTO document_search (rowid, title, content, path)
|
|
SELECT rowid, title, '', path FROM documents;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS document_search_insert
|
|
AFTER INSERT ON documents
|
|
BEGIN
|
|
INSERT INTO document_search (rowid, title, content, path)
|
|
VALUES (NEW.rowid, NEW.title, '', NEW.path);
|
|
END;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS document_search_update
|
|
AFTER UPDATE ON documents
|
|
BEGIN
|
|
UPDATE document_search SET title = NEW.title, path = NEW.path
|
|
WHERE rowid = NEW.rowid;
|
|
END;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS document_search_delete
|
|
AFTER DELETE ON documents
|
|
BEGIN
|
|
DELETE FROM document_search WHERE rowid = OLD.rowid;
|
|
END;
|