|
|
- package Webserver
-
- import (
- "log"
- "net/http"
- "path"
- "text/template"
-
- "PersonalWebsite/Database"
- "PersonalWebsite/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
- }
- }
|