From 239875c7f6590882f030fd361f1f98f4f64ccf7b Mon Sep 17 00:00:00 2001 From: Wolf Beckmann Date: Fri, 27 Mar 2026 09:40:27 +0100 Subject: [PATCH] feat(diarization-ui): add multi-select bulk actions to library view Add checkboxes to each row, select-all/deselect-all controls, and a bulk action bar for moving or deleting multiple documents at once. New endpoints: POST /documents/bulk-move and /documents/bulk-delete. Co-Authored-By: Claude Sonnet 4.6 --- app.py | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 91 insertions(+), 3 deletions(-) diff --git a/app.py b/app.py index bbe6003..47e8b6f 100644 --- a/app.py +++ b/app.py @@ -5,7 +5,7 @@ import threading from concurrent.futures import ThreadPoolExecutor from datetime import datetime from pathlib import Path -from typing import Optional +from typing import List, Optional import markdown as md import requests @@ -561,6 +561,7 @@ def library(project_id: Optional[str] = None, q_title: str = "", q_content: str rows = "".join( [ f"" + f"" f"#{d['id']}" f"{d['title']}" f"{d['kind']}" @@ -587,6 +588,10 @@ def library(project_id: Optional[str] = None, q_title: str = "", q_content: str .grid th,.grid td{{padding:10px 12px;border-bottom:1px solid #1f2937;text-align:left}} .grid th{{position:sticky;top:0;background:#0b1222;color:#94a3b8;font-size:12px;text-transform:uppercase;letter-spacing:.04em}} .grid tr:hover{{background:rgba(56,189,248,.06)}} +.grid tr.selected{{background:rgba(56,189,248,.12)}} +.cb-cell{{width:32px;padding:10px 4px 10px 12px}} +.bulk-bar{{display:none;gap:8px;align-items:center;padding:8px 12px;background:rgba(56,189,248,.08);border-radius:6px;margin-bottom:8px}} +.bulk-bar.active{{display:flex}}

Projekte · Dokumente

Ansicht im Projektlisten-Stil mit Schnellaktionen.
@@ -599,18 +604,72 @@ def library(project_id: Optional[str] = None, q_title: str = "", q_content: str
{len(docs)} Treffer +
+ 0 ausgewählt + + +
- - {rows or ""} + + + + + {rows or ""}
IDTitelTypProjektErstelltAktionen
Keine Einträge.
IDTitelTypProjektErstelltAktionen
Keine Einträge.
+
+ + +
""" return layout("Library", body) @@ -730,6 +804,20 @@ def delete_document(doc_id: int): return HTMLResponse("") +@app.post("/documents/bulk-move", response_class=HTMLResponse) +def bulk_move_documents(ids: List[int] = Form(...), project_id: int = Form(...)): + with db() as c: + c.executemany("UPDATE documents SET project_id=? WHERE id=?", [(project_id, i) for i in ids]) + return HTMLResponse("") + + +@app.post("/documents/bulk-delete", response_class=HTMLResponse) +def bulk_delete_documents(ids: List[int] = Form(...)): + with db() as c: + c.executemany("DELETE FROM documents WHERE id=?", [(i,) for i in ids]) + return HTMLResponse("") + + @app.get("/prompts", response_class=HTMLResponse) def prompts_page(): with db() as c: