90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package handlers
|
|
|
|
import (
|
|
"html/template"
|
|
"net/http"
|
|
"path/filepath"
|
|
|
|
"github.com/gorilla/csrf"
|
|
"github.com/zhang2092/mediahls/internal/pkg/logger"
|
|
)
|
|
|
|
// func render(w http.ResponseWriter, data any, tmpls ...string) {
|
|
// t, err := template.ParseFiles(tmpls...)
|
|
// if err != nil {
|
|
// log.Printf("template parse: %v", err)
|
|
// w.WriteHeader(http.StatusInternalServerError)
|
|
// return
|
|
// }
|
|
|
|
// err = t.Execute(w, data)
|
|
// if err != nil {
|
|
// log.Printf("template execute: %v", err)
|
|
// w.WriteHeader(http.StatusInternalServerError)
|
|
// return
|
|
// }
|
|
// }
|
|
|
|
// renderLayout 渲染方法 带框架
|
|
func (server *Server) renderLayout(w http.ResponseWriter, r *http.Request, data any, tmpl string) {
|
|
t := template.New(filepath.Base(tmpl))
|
|
t = t.Funcs(template.FuncMap{
|
|
"csrfField": func() template.HTML {
|
|
return csrf.TemplateField(r)
|
|
},
|
|
"currentUser": func() *Authorize {
|
|
return withUser(r.Context())
|
|
},
|
|
})
|
|
|
|
tpl := template.Must(t.Clone())
|
|
|
|
// compress
|
|
// "github.com/tdewolff/minify/v2"
|
|
// "github.com/tdewolff/minify/v2/css"
|
|
// "github.com/tdewolff/minify/v2/html"
|
|
// "github.com/tdewolff/minify/v2/js"
|
|
// m := minify.New()
|
|
// m.AddFunc("text/css", css.Minify)
|
|
// m.AddFunc("text/html", html.Minify)
|
|
// m.AddFuncRegexp(regexp.MustCompile("^(application|text)/(x-)?(java|ecma)script$"), js.Minify)
|
|
// pages := []string{
|
|
// tmpl,
|
|
// "base/header.html.tmpl",
|
|
// "base/footer.html.tmpl",
|
|
// }
|
|
// for _, page := range pages {
|
|
// b, err := fs.ReadFile(server.templateFS, page)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("fs read file: %s, %v", page, err)
|
|
// w.WriteHeader(http.StatusInternalServerError)
|
|
// return
|
|
// }
|
|
// mb, err := m.Bytes("text/html", b)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("minify bytes: %s, %v", page, err)
|
|
// w.WriteHeader(http.StatusInternalServerError)
|
|
// return
|
|
// }
|
|
// tpl, err = tpl.Parse(string(mb))
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("template parse: %s, %v", page, err)
|
|
// w.WriteHeader(http.StatusInternalServerError)
|
|
// return
|
|
// }
|
|
// }
|
|
|
|
tpl, err := tpl.ParseFS(server.templateFS, tmpl, "base/header.html.tmpl", "base/footer.html.tmpl")
|
|
if err != nil {
|
|
logger.Logger.Errorf("template parse: %s, %v", tmpl, err)
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
if err := tpl.Execute(w, data); err != nil {
|
|
logger.Logger.Errorf("template execute: %s, %v", tmpl, err)
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|