package web import ( "net/http" "strings" "github.com/gramanas/blogspace/internal/i18n" ) func (s *Server) handleBlogOverview(w http.ResponseWriter, r *http.Request) { pages, err := blogStore(r).ListPages(r.Context()) if err != nil { s.serverError(w, err) return } posts, err := blogStore(r).ListPosts(r.Context(), 0) if err != nil { s.serverError(w, err) return } if len(posts) > 5 { posts = posts[:5] } s.render(w, r, "dashboard/overview.html", map[string]any{"pages": pages, "posts": posts}) } func (s *Server) handleSettingsForm(w http.ResponseWriter, r *http.Request) { s.render(w, r, "dashboard/settings.html", map[string]any{"languages": i18n.Languages()}) } func (s *Server) handleSettings(w http.ResponseWriter, r *http.Request) { blog := currentBlog(r) title := strings.TrimSpace(r.FormValue("title")) tagline := strings.TrimSpace(r.FormValue("tagline")) language := r.FormValue("language") if title == "" || len(title) > 120 || len(tagline) > 300 || !i18n.Valid(language) { s.renderStatus(w, r, http.StatusBadRequest, "dashboard/settings.html", map[string]any{"languages": i18n.Languages(), "error": s.tr(r, "Title is required (max 120 chars); tagline max 300.")}) return } if err := blogStore(r).UpdateSettings(r.Context(), title, tagline, language); err != nil { s.serverError(w, err) return } // The flash speaks the language just chosen, not the one the form was in. redirectOK(w, r, "/b/"+blog.Subdomain+"/settings", i18n.T(language, "Saved. Refresh your blog to see it.")) }