|
|
package view
import ( "errors" "fmt" "html/template" "io" "log" "net/http" "os"
"github.com/eknkc/amber"
"git.aiterp.net/AiteRP/aitestory/server" "git.aiterp.net/gisle/wrouter/response" )
var wd, _ = os.Getwd() var cache = make(map[string]*template.Template) var argsCache = make(map[string][]string)
var defaultOptions = amber.Options{PrettyPrint: true} var defaultDirOptions = amber.DirOptions{Ext: ".amber", Recursive: true}
// Render renders a template with the name it was registered with, and with the
// view model. The view model is expected to be the correct model from the viewmodel
// package
func Render(w http.ResponseWriter, name string, status int, viewModel interface{}) { var err error
if server.Main.Config.Server.Debug { cache, err = amber.CompileDir(server.Main.Config.Directories.Templates, defaultDirOptions, defaultOptions) if err != nil { log.Println(err) } }
tmpl, ok := cache[name] if !ok { response.Text(w, 500, "Template not found: "+name) return }
w.WriteHeader(status) err = tmpl.Execute(w, viewModel) if err != nil { log.Println("Template error:", err.Error()) response.Text(w, 500, "Template error: "+err.Error()) } }
// Run runs the template to a simple io.Writer. It's made for testing
func Run(w io.Writer, name string, viewModel interface{}) error { tmpl, ok := cache[name] if !ok { return errors.New("template not found") }
return tmpl.ExecuteTemplate(w, "base", viewModel) }
func init() { var err error
for key, value := range funcMap { if _, exists := amber.FuncMap[key]; exists { log.Printf("Amber already provides a function by the name: %s", key) }
amber.FuncMap[key] = value }
cache, err = amber.CompileDir(server.Main.Config.Directories.Templates, defaultDirOptions, defaultOptions) if err != nil { if server.Main.Config.Server.Debug { log.Println(err) return }
log.Fatalln(err) }
if server.Main.Config.Server.Debug { fmt.Printf("Template directory: %s\n", server.Main.Config.Directories.Templates)
for key := range cache { fmt.Printf("Template loaded: %s\n", key) } } }
|