From eeea1b647545f109d32c6140e476d281acae73ba Mon Sep 17 00:00:00 2001 From: agent-company Date: Sat, 28 Mar 2026 13:06:25 +0000 Subject: [PATCH] chore: extract inline settings template to internal/templates/settings.html Move the large inline HTML template from settings.go into a separate file at internal/templates/settings.html, matching the project convention used by all other handlers. The template is now loaded at render time via template.ParseFiles, consistent with dashboard, issues, etc. Closes leeworks-agents/gitea-mobile#126 Co-Authored-By: Claude Opus 4.6 (1M context) --- internal/handlers/settings.go | 104 +++++-------------------------- internal/templates/settings.html | 83 ++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 87 deletions(-) create mode 100644 internal/templates/settings.html diff --git a/internal/handlers/settings.go b/internal/handlers/settings.go index 0c7f721..4e4be37 100644 --- a/internal/handlers/settings.go +++ b/internal/handlers/settings.go @@ -2,6 +2,7 @@ package handlers import ( "html/template" + "log/slog" "net/http" "strings" @@ -9,89 +10,7 @@ import ( "gitea.leeworks.dev/0xwheatyz/gitea-mobile/internal/middleware" ) -var settingsTemplate = template.Must(template.New("settings").Parse(` - - - - - Settings — Gitea Mobile - - - -

Settings

- - {{if .Message}} -
{{.Message}}
- {{end}} - - {{if .HasToken}} -
-

Status: Connected

-

A Gitea API token is configured.

-
- - -
-
- {{end}} - -
-
- - - -

Generate a token at your Gitea instance under Settings → Applications.

- -
-
- - {{if .HasToken}} -

- Back to Dashboard -

- {{end}} - -`)) +const settingsTemplatePath = "internal/templates/settings.html" // SettingsHandler handles GET and POST requests for the settings page. type SettingsHandler struct { @@ -126,8 +45,7 @@ func (h *SettingsHandler) handleGet(w http.ResponseWriter, r *http.Request) { } data := settingsData{HasToken: hasToken} - w.Header().Set("Content-Type", "text/html; charset=utf-8") - settingsTemplate.Execute(w, data) + h.renderSettings(w, data) } func (h *SettingsHandler) handlePost(w http.ResponseWriter, r *http.Request) { @@ -172,6 +90,18 @@ func (h *SettingsHandler) renderWithMessage(w http.ResponseWriter, r *http.Reque Message: msg, MessageType: msgType, } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - settingsTemplate.Execute(w, data) + h.renderSettings(w, data) +} + +func (h *SettingsHandler) renderSettings(w http.ResponseWriter, data settingsData) { + tmpl, err := template.ParseFiles(settingsTemplatePath) + if err != nil { + slog.Error("failed to parse settings template", "error", err) + http.Error(w, "template error", http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + if err := tmpl.Execute(w, data); err != nil { + slog.Error("failed to execute settings template", "error", err) + } } diff --git a/internal/templates/settings.html b/internal/templates/settings.html new file mode 100644 index 0000000..411e89c --- /dev/null +++ b/internal/templates/settings.html @@ -0,0 +1,83 @@ + + + + + + Settings — Gitea Mobile + + + +

Settings

+ + {{if .Message}} +
{{.Message}}
+ {{end}} + + {{if .HasToken}} +
+

Status: Connected

+

A Gitea API token is configured.

+
+ + +
+
+ {{end}} + +
+
+ + + +

Generate a token at your Gitea instance under Settings → Applications.

+ +
+
+ + {{if .HasToken}} +

+ Back to Dashboard +

+ {{end}} + + -- 2.52.0