package util import ( "path" "text/template" "time" ) func NewTemplate(filenames ...string) *template.Template { return template.Must(template.New(path.Base(filenames[0])). Funcs(template.FuncMap{ // Form input helpers "value": func(v interface{}) string { if v == nil { return "" } return "value=\"" + template.HTMLEscapeString(v.(string)) + "\"" }, "checked": func(v1 interface{}, v2 interface{}) string { if v1 == nil || v2 == nil { return "" } if v1 == v2 { return "checked" } return "" }, "selected": func(v1 interface{}, v2 interface{}) string { if v1 == nil || v2 == nil { return "" } if v1 == v2 { return "selected" } return "" }, // Form result helpers "q": func(v interface{}) string { if v == nil || v.(string) == "" { return "none" } return "" + template.HTMLEscapeString(v.(string)) + "" }, "have": func(v interface{}) bool { return v != nil && v.(string) == "on" }, "date": func(v string) string { t, err := time.Parse("2006-01-02", v) if err != nil { panic(err) } return t.Format("January 2, 2006") }, }). ParseFiles(filenames...)) }