package templates import ( _ "embed" "html/template" "strings" "time" ) //go:embed "html/layout.html" var layoutHTML string //go:embed "html/index.html" var indexHTML string //go:embed "html/vod-list.html" var vodListHTML string //go:embed "html/vod.html" var vodHTML string type ( Crumb struct { Name string Path string } ) var templateFuncs = template.FuncMap{ "FormatTime": func (time time.Time, format string) string { return time.Format(format) }, "ToLower": func (str string) string { return strings.ToLower(str) }, "ToUpper": func (str string) string { return strings.ToUpper(str) }, "Crumbs": func (path string) []Crumb { split := strings.Split(strings.TrimSuffix(path, "/"), "/") crumbs := make([]Crumb, len(split)) for i := range crumbs { segment := split[i] crumbs[i] = Crumb{ segment, strings.Repeat("../", len(crumbs)-i-1), } } return crumbs }, } var BaseTemplate = template.Must(template.New("base").Funcs(templateFuncs).Parse( strings.Join([]string{ layoutHTML, // headerHTML, // footerHTML, }, "\n"), )) var IndexTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(indexHTML)) var VODListTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(vodListHTML)) var VODTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(vodHTML))