diff --git a/app/routers/library.py b/app/routers/library.py index d0ec287..c3dfcdf 100644 --- a/app/routers/library.py +++ b/app/routers/library.py @@ -142,6 +142,10 @@ async def library_recents( query = f"{BASE_SELECT} FROM pages p WHERE p.parent_section != 'Trash' AND p.deleted_at IS NULL" params: list = [] + # Hierarchical view: show only root-level pages at the top + if tree: + query += " AND p.parent_id IS NULL" + # Filter by active workspace if workspace_id: query += " AND p.workspace_id = ?" @@ -175,6 +179,8 @@ async def library_favorites( f"WHERE f.user_id = ? AND p.parent_section != 'Trash' AND p.deleted_at IS NULL" ) params: list = [uid] + if tree: + query += " AND p.parent_id IS NULL" query, params = _apply_source_filter(query, params, source_type) query += " ORDER BY f.position" @@ -198,6 +204,8 @@ async def library_shared( uid = _get_user_id(request) query = f"{BASE_SELECT} FROM pages p WHERE p.share_mode != 'private' AND p.parent_section != 'Trash' AND p.deleted_at IS NULL" params: list = [] + if tree: + query += " AND p.parent_id IS NULL" query, params = _apply_source_filter(query, params, source_type) query += " ORDER BY p.updated_at DESC LIMIT 50" @@ -221,6 +229,8 @@ async def library_published( uid = _get_user_id(request) query = f"{BASE_SELECT} FROM pages p WHERE p.published = 1 AND p.parent_section != 'Trash' AND p.deleted_at IS NULL" params: list = [] + if tree: + query += " AND p.parent_id IS NULL" query, params = _apply_source_filter(query, params, source_type) query += " ORDER BY p.updated_at DESC LIMIT 50" @@ -244,6 +254,8 @@ async def library_private( uid = _get_user_id(request) query = f"{BASE_SELECT} FROM pages p WHERE p.parent_section = 'Private' AND p.deleted_at IS NULL" params: list = [] + if tree: + query += " AND p.parent_id IS NULL" query, params = _apply_source_filter(query, params, source_type) query += " ORDER BY p.updated_at DESC LIMIT 50" @@ -448,6 +460,9 @@ async def library_workspace( query = f"{BASE_SELECT} FROM pages p WHERE (p.workspace != '' OR p.workspace_id IS NOT NULL) AND p.parent_section != 'Trash' AND p.deleted_at IS NULL" params: list = [] + if tree: + query += " AND p.parent_id IS NULL" + if workspace_id: query += " AND p.workspace_id = ?" params.append(workspace_id) diff --git a/app/templates/library.html b/app/templates/library.html index 36a4a83..0d9ac52 100644 --- a/app/templates/library.html +++ b/app/templates/library.html @@ -19,132 +19,164 @@ @@ -154,54 +186,117 @@

Library

- - + +
+
+ + +
+
+ + + + + + + +
+
+
+ +
+
Source
+
All sources
+
Local
+
Gitea
+
GitHub
+
+
+
+ +
+
Sort by
+
Name
+
Last edited
+
Created by
+
+
+ +
+ +
+
Show columns
+
Created by
+
Source
+
+
-
- -
- - -
- - - - - - - +
- + + +
- +
- - - + + +
- +
@@ -212,22 +307,28 @@
-
+
-
Page name
-
Created by
+
+ + Page name +
+
Created by
Source
-
Last edited
-
Last visited
+
+ + Last edited time +
- -
- + Add new + +
+ + Add new
@@ -238,27 +339,104 @@
+ +
+ +
+ + +
+
+
Move to…
+ +
+
📄 Root (no parent)
+ +
+
+
+