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) } 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) } 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) }