Blog/models/html_template.go

92 lines
1.9 KiB
Go

package models
import (
"blog/config"
"fmt"
"html/template"
"io"
)
type TemplatePointer struct {
*template.Template
}
type HtmlTemplate struct {
Article TemplatePointer
Categories TemplatePointer
Dashboard TemplatePointer
ExtraNav TemplatePointer
Index TemplatePointer
}
func (t TemplatePointer) WriteData(w io.Writer, data interface{}) {
err := t.Execute(w, data)
if err != nil {
if _, e := w.Write([]byte(err.Error())); e != nil {
fmt.Println(e)
}
}
}
func (t TemplatePointer) WriteError(w io.Writer, err error) {
if _, e := w.Write([]byte(err.Error())); e != nil {
fmt.Println(e)
}
}
func BuildViewData(title string, data interface{}) map[string]interface{} {
return map[string]interface{}{
"Title": title,
"Data": data,
"Config": config.Cfg,
"Navs": Navigation,
}
}
func initHtmlTemplate(viewDir string) (HtmlTemplate, error) {
var htmlTemplate HtmlTemplate
tp, err := readHtmlTemplate(
[]string{"index", "extraNav", "dashboard", "categories", "article"},
viewDir)
if err != nil {
return htmlTemplate, err
}
htmlTemplate.Index = tp[0]
htmlTemplate.ExtraNav = tp[1]
htmlTemplate.Dashboard = tp[2]
htmlTemplate.Categories = tp[3]
htmlTemplate.Article = tp[4]
return htmlTemplate, nil
}
func SpreadDigit(n int) []int {
var r []int
for i := 1; i <= n; i++ {
r = append(r, i)
}
return r
}
func readHtmlTemplate(htmlFileName []string, viewDir string) ([]TemplatePointer, error) {
var htmlTemplate []TemplatePointer
head := viewDir + "/layouts/head.html"
footer := viewDir + "/layouts/footer.html"
reviews := viewDir + "/layouts/reviews.html"
for _, name := range htmlFileName {
tp, err := template.New(name+".html").
Funcs(template.FuncMap{"SpreadDigit": SpreadDigit}).
ParseFiles(viewDir+"/"+name+".html", head, footer, reviews)
if err != nil {
return htmlTemplate, err
}
htmlTemplate = append(htmlTemplate, TemplatePointer{tp})
}
return htmlTemplate, nil
}