You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

82 lines
1.7 KiB

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