95 lines
2.3 KiB
Go
95 lines
2.3 KiB
Go
package xtemplate
|
|
|
|
import (
|
|
htmltemplate "html/template"
|
|
"io"
|
|
"io/fs"
|
|
"text/template"
|
|
"text/template/parse"
|
|
)
|
|
|
|
func Must(t Template, err error) Template {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return t
|
|
}
|
|
|
|
func New[T template.Template | htmltemplate.Template](name string) Template {
|
|
var t T
|
|
switch any(t).(type) {
|
|
case template.Template:
|
|
return &textTemplate{template.New(name)}
|
|
case htmltemplate.Template:
|
|
return &htmlTemplate{htmltemplate.New(name)}
|
|
default:
|
|
panic("Incorrect T type")
|
|
}
|
|
}
|
|
|
|
func ParseFS[T template.Template | htmltemplate.Template](fs fs.FS, patterns ...string) (Template, error) {
|
|
var t T
|
|
switch any(t).(type) {
|
|
case template.Template:
|
|
temp, err := template.ParseFS(fs, patterns...)
|
|
return &textTemplate{temp}, err
|
|
case htmltemplate.Template:
|
|
temp, err := htmltemplate.ParseFS(fs, patterns...)
|
|
return &htmlTemplate{temp}, err
|
|
default:
|
|
panic("Incorrect T type")
|
|
}
|
|
}
|
|
|
|
func ParseFiles[T template.Template | htmltemplate.Template](filenames ...string) (Template, error) {
|
|
var t T
|
|
switch any(t).(type) {
|
|
case template.Template:
|
|
temp, err := template.ParseFiles(filenames...)
|
|
return &textTemplate{temp}, err
|
|
case htmltemplate.Template:
|
|
temp, err := htmltemplate.ParseFiles(filenames...)
|
|
return &htmlTemplate{temp}, err
|
|
default:
|
|
panic("Incorrect T type")
|
|
}
|
|
}
|
|
|
|
func ParseGlob[T template.Template | htmltemplate.Template](pattern string) (Template, error) {
|
|
var t T
|
|
switch any(t).(type) {
|
|
case template.Template:
|
|
temp, err := template.ParseGlob(pattern)
|
|
return &textTemplate{temp}, err
|
|
case htmltemplate.Template:
|
|
temp, err := htmltemplate.ParseGlob(pattern)
|
|
return &htmlTemplate{temp}, err
|
|
default:
|
|
panic("Incorrect T type")
|
|
}
|
|
}
|
|
|
|
type Template interface {
|
|
AddParseTree(name string, tree *parse.Tree) (Template, error)
|
|
Clone() (Template, error)
|
|
DefinedTemplates() string
|
|
Delims(left, right string) Template
|
|
Funcs(funcMap template.FuncMap) Template
|
|
Lookup(name string) Template
|
|
Name() string
|
|
New(name string) Template
|
|
Option(opt ...string) Template
|
|
Parse(text string) (Template, error)
|
|
ParseFS(fs fs.FS, patterns ...string) (Template, error)
|
|
ParseFiles(filenames ...string) (Template, error)
|
|
ParseGlob(pattern string) (Template, error)
|
|
Templates() []Template
|
|
|
|
Templater
|
|
}
|
|
|
|
type Templater interface {
|
|
Execute(wr io.Writer, data any) error
|
|
ExecuteTemplate(wr io.Writer, name string, data any) error
|
|
}
|