package webserver import ( "log" "net/http" "path" "text/template" "git.tovijaeschke.xyz/tovi/personal_website/database" "git.tovijaeschke.xyz/tovi/personal_website/helper" ) type Unauthenticated struct { FlashMsg string } var ( partials = []string{ "html/header.gohtml", "html/sidebar.gohtml", "html/index-intro.gohtml", "html/index-links.gohtml", "html/index-post-list.gohtml", "html/post-list.gohtml", "html/post.gohtml", "html/error.gohtml", } ) func ServeTemplate(w http.ResponseWriter, r *http.Request, mainFile string, v map[string]interface{}) { var ( tpl *template.Template files []string e error ) if _, ok := v["Subject"]; !ok { v["Subject"] = "" } v["LastUpdatedAt"], e = database.GetLastUpdatedAt() if e != nil { v["LastUpdatedAt"] = " - " } v["SidebarLinks"], e = database.GetAllSidebarLinks() if e != nil { log.Println(e) http.Redirect(w, r, "/error", 302) return } files = []string{webRootJoin(mainFile)} for _, p := range partials { files = append(files, webRootJoin(p)) } tpl, e = template.New(path.Base(files[0])).Funcs( template.FuncMap{ "FormatTimestamp": helper.FormatTimestamp, "MinusInt64": helper.MinusInt64, "MinusInt": helper.MinusInt, "Minus": helper.MinusInt, "PlusInt64": helper.PlusInt64, "PlusInt": helper.PlusInt, "Iterate": helper.Iterate, "StrToLower": helper.StrToLower, }, ).ParseFiles(files...) if e != nil { log.Println(e) http.Redirect(w, r, "/error", 302) } w.Header().Set("Content-type", "text/html") e = tpl.Execute(w, v) if e != nil { log.Println(e) http.Redirect(w, r, "/error", 302) return } }