From d6b702e35a95c0d7921bd16fc6d9475d144813df Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Wed, 11 Mar 2026 16:42:34 -0400 Subject: [PATCH] device: add copyToClipboard and fix regenerate token HTMX button Phase 3: Complete device page functionality fixes - Add copyToClipboard function to device-management.ts: - Uses navigator.clipboard.writeText() for copying - Shows success/error toast notifications - Already exported in Alpine.store, now properly defined - Fix typo in devices.templ: change 'regerate-token' to 'regenerate-token' - Add HTMX support to RegenerateDeviceToken handler: - Returns HTML with reload script for HTMX requests - Preserves JSON response for API calls The regenerate token button now works via HTMX (hx-put) instead of Alpine.js, matching the pattern used elsewhere in the app. --- internal/handlers/devices.go | 5 + templates/devices.templ | 3 +- web/src/device-management.ts | 272 ++++++++++++++++++++++++++--------- 3 files changed, 211 insertions(+), 69 deletions(-) diff --git a/internal/handlers/devices.go b/internal/handlers/devices.go index 8aa68bd..0234e00 100644 --- a/internal/handlers/devices.go +++ b/internal/handlers/devices.go @@ -554,6 +554,11 @@ func (h *DeviceHandler) RegenerateDeviceToken(c *echo.Context) error { syncURLs["bookmarks"] = fmt.Sprintf("%s/api/sync/koreader/bookmarks", baseURL) } + // Handle HTMX requests - return HTML with page reload script + if c.Request().Header.Get("HX-Request") == "true" { + html := fmt.Sprintf(`
Token regenerated! Reloading ...