From fe0c7e8dc8e0d0ca61674782fad0d81e47ae5770 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 23 Mar 2026 18:47:06 +0000 Subject: [PATCH] feat: add server-side theme cookie with dropdown selector (no JS) - Add theme POST handler that sets HttpOnly cookie - Update preferences page to use + + + diff --git a/internal/views/views.go b/internal/views/views.go index e7ce360..54a1a84 100644 --- a/internal/views/views.go +++ b/internal/views/views.go @@ -55,6 +55,8 @@ type PageData struct { PageNumbers []PageNumber ShowHeader bool IsImageSearch bool + // Theme is the user's selected theme (light/dark) from cookie + Theme string // New fields for three-column layout Categories []string CategoryIcons map[string]string @@ -280,9 +282,9 @@ func FromResponse(resp contracts.SearchResponse, query string, pageno int, activ } // RenderIndex renders the homepage (search box only). -func RenderIndex(w http.ResponseWriter, sourceURL string) error { +func RenderIndex(w http.ResponseWriter, sourceURL, theme string) error { w.Header().Set("Content-Type", "text/html; charset=utf-8") - return tmplIndex.ExecuteTemplate(w, "base", PageData{ShowHeader: true, SourceURL: sourceURL}) + return tmplIndex.ExecuteTemplate(w, "base", PageData{ShowHeader: true, SourceURL: sourceURL, Theme: theme}) } // RenderSearch renders the full search results page (with base layout). @@ -326,8 +328,8 @@ func RenderSearchAuto(w http.ResponseWriter, r *http.Request, data PageData) err } // RenderPreferences renders the full preferences page. -func RenderPreferences(w http.ResponseWriter, sourceURL string) error { +func RenderPreferences(w http.ResponseWriter, sourceURL, theme string) error { w.Header().Set("Content-Type", "text/html; charset=utf-8") - return tmplPreferences.ExecuteTemplate(w, "base", PageData{ShowHeader: true, SourceURL: sourceURL}) + return tmplPreferences.ExecuteTemplate(w, "base", PageData{ShowHeader: true, SourceURL: sourceURL, Theme: theme}) }