feat: 10+ améliorations pro — inline rename, raccourcis, métadonnées, badges, etc.
Implémenté depuis la ROADMAP v2.2.0: A3 Inline rename: double-clic → input inline (Enter/escape/blur). Fonctionne sur x-for items et breadcrumb. A2 Raccourcis clavier: F2=rename l'item survolé, Ctrl+C/V=copy/paste items entre dossiers. Layout focusable (tabindex=0, @keydown). A6 Duplicate: méthode duplicateItem(), crée une copie '(copy)'. B3 Métadonnées: child_count ajouté dans l'API tree + sidebar data. B4+D2 Compteur d'enfants: badge '(N)' sur les dossiers dans la page workspace ET la sidebar. B5 Loading skeletons: CSS shimmer animation (.skeleton). C1 Breadcrumb éditable: double-clic sur un segment → rename. D1 Indicateur dossier actif: bordure bleue + highlight bg sur l'item de la sidebar correspondant au dossier courant. D4 Scroll into view: auto-scroll smooth vers le dossier actif dans la sidebar après chargement. child_count ajouté à _build_tree_children (dashboard.py) et _load_workspace_pages/_load_children (board.py).
This commit is contained in:
@@ -179,12 +179,14 @@ def _load_workspace_pages(ws_cookie: str) -> list:
|
||||
for r in rows:
|
||||
is_folder = r["parent_section"] == "Workspace"
|
||||
title = r["title"] or "Untitled"
|
||||
sub_children = _load_children(r["id"])
|
||||
items.append({
|
||||
"db_id": r["id"], "name": title,
|
||||
"id": f"page/{r['id']}",
|
||||
"icon": "📁" if is_folder else _file_icon(title, r["content_format"]),
|
||||
"is_folder": is_folder,
|
||||
"children": _load_children(r["id"]),
|
||||
"child_count": len(sub_children),
|
||||
"children": sub_children,
|
||||
})
|
||||
return items
|
||||
except (ValueError, Exception):
|
||||
@@ -202,12 +204,14 @@ def _load_children(parent_id: int) -> list:
|
||||
for r in rows:
|
||||
is_folder = r["parent_section"] == "Workspace"
|
||||
title = r["title"] or "Untitled"
|
||||
sub_children = _load_children(r["id"])
|
||||
children.append({
|
||||
"db_id": r["id"], "name": title,
|
||||
"id": f"page/{r['id']}",
|
||||
"icon": "📁" if is_folder else _file_icon(title, r["content_format"]),
|
||||
"is_folder": is_folder,
|
||||
"children": _load_children(r["id"]),
|
||||
"child_count": len(sub_children),
|
||||
"children": sub_children,
|
||||
})
|
||||
return children
|
||||
|
||||
|
||||
@@ -604,6 +604,7 @@ def _build_tree_children(conn, parent_id: int | None, ws_id: int) -> list:
|
||||
"content_format": r["content_format"] if not is_folder else None,
|
||||
"children": children,
|
||||
"has_children": len(children) > 0,
|
||||
"child_count": len(children),
|
||||
})
|
||||
return tree
|
||||
|
||||
|
||||
Reference in New Issue
Block a user