2026-05-16 23:03:50 +00:00
|
|
|
package app
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"net/http"
|
|
|
|
|
"net/url"
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func (s *Server) render(w http.ResponseWriter, name string, data pageData) {
|
|
|
|
|
var buf bytes.Buffer
|
|
|
|
|
if err := s.templates.ExecuteTemplate(&buf, name, data); err != nil {
|
|
|
|
|
http.Error(w, "template error", http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
|
|
|
|
_, _ = buf.WriteTo(w)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Server) renderAdmin(w http.ResponseWriter, r *http.Request, fullTemplate, partialTemplate string, data pageData) {
|
|
|
|
|
if r.Header.Get("HX-Request") == "true" {
|
|
|
|
|
s.render(w, partialTemplate, data)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
s.render(w, fullTemplate, data)
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-17 12:55:41 +00:00
|
|
|
func (s *Server) renderPublic(w http.ResponseWriter, r *http.Request, fullTemplate, partialTemplate string, data pageData) {
|
|
|
|
|
if r.Header.Get("HX-Request") == "true" {
|
|
|
|
|
s.render(w, partialTemplate, data)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
s.render(w, fullTemplate, data)
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-16 23:03:50 +00:00
|
|
|
func (s *Server) error(w http.ResponseWriter, err error) {
|
|
|
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Server) redirectAdmin(w http.ResponseWriter, r *http.Request, tab, message string) {
|
|
|
|
|
key := "err"
|
|
|
|
|
for _, success := range []string{" saved", " created", " deleted", " added"} {
|
|
|
|
|
if strings.HasSuffix(message, success) {
|
|
|
|
|
key = "ok"
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
http.Redirect(w, r, "/admin/"+tab+"?"+key+"="+url.QueryEscape(message), http.StatusSeeOther)
|
|
|
|
|
}
|