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