From ed3a547e543d177a20fb0bc330f19f8daee50d66 Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Sun, 29 Mar 2026 00:08:45 -0700 Subject: [PATCH] Add unqueue (delete) button to web reading view Adds a delete route and handler to the web UI so documents can be removed directly from the reading page. Uses CSRF-protected POST with a browser confirmation dialog. Styled with a danger accent. Co-Authored-By: Claude Opus 4.6 (1M context) --- internal/webserver/server.go | 9 +++++++++ web/static/style.css | 8 ++++++++ web/templates/read.html | 5 +++++ 3 files changed, 22 insertions(+) diff --git a/internal/webserver/server.go b/internal/webserver/server.go index e48ad02..58c487d 100644 --- a/internal/webserver/server.go +++ b/internal/webserver/server.go @@ -70,6 +70,7 @@ func (s *Server) RegisterRoutes(r chi.Router) { r.Get("/d/{slug}", s.handleRead) r.Post("/d/{slug}/read", s.handleMarkRead) r.Post("/d/{slug}/unread", s.handleMarkUnread) + r.Post("/d/{slug}/delete", s.handleDelete) r.Post("/logout", s.handleLogout) }) } @@ -176,3 +177,11 @@ func (s *Server) handleMarkUnread(w http.ResponseWriter, r *http.Request) { } http.Redirect(w, r, "/", http.StatusFound) } + +func (s *Server) handleDelete(w http.ResponseWriter, r *http.Request) { + slug := chi.URLParam(r, "slug") + if err := s.db.DeleteDocument(slug); err != nil { + s.logger.Error("failed to delete document", "slug", slug, "error", err) + } + http.Redirect(w, r, "/", http.StatusFound) +} diff --git a/web/static/style.css b/web/static/style.css index b7cf1cf..ea979fa 100644 --- a/web/static/style.css +++ b/web/static/style.css @@ -252,6 +252,14 @@ button:hover, .btn:hover { padding: 0.1875rem 0.625rem; font-size: 0.75rem; } +.btn-danger { + color: var(--accent); + border-color: var(--accent); +} +.btn-danger:hover { + background: var(--accent); + color: var(--bg); +} /* =========================== Forms diff --git a/web/templates/read.html b/web/templates/read.html index 413ff9e..78aacbb 100644 --- a/web/templates/read.html +++ b/web/templates/read.html @@ -18,6 +18,11 @@ {{end}} +
+ {{csrfField}} + +
Back to queue