✨ Added html helper for unsafe HTML rendering
/ docker (push) Successful in 1m2s
Details
/ docker (push) Successful in 1m2s
Details
This commit is contained in:
parent
0c57b47a17
commit
6b1a81e8cb
|
@ -2,9 +2,11 @@ package fs
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io/fs"
|
||||
"reflect"
|
||||
|
||||
"source.toby3d.me/toby3d/home/internal/theme"
|
||||
)
|
||||
|
@ -13,6 +15,21 @@ type fileSystemThemeRepository struct {
|
|||
dir fs.FS
|
||||
}
|
||||
|
||||
var ErrSafeHTML error = errors.New("unsupported input type for SafeHTML")
|
||||
|
||||
var helpers = template.FuncMap{
|
||||
"safeHTML": func(v reflect.Value) (template.HTML, error) {
|
||||
switch v.Kind() {
|
||||
default:
|
||||
return "", ErrSafeHTML
|
||||
case reflect.Slice:
|
||||
return template.HTML(v.Bytes()), nil
|
||||
case reflect.String:
|
||||
return template.HTML(v.String()), nil
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
func NewFileSystemThemeRepository(dir fs.FS) theme.Repository {
|
||||
return &fileSystemThemeRepository{
|
||||
dir: dir,
|
||||
|
@ -20,9 +37,9 @@ func NewFileSystemThemeRepository(dir fs.FS) theme.Repository {
|
|||
}
|
||||
|
||||
func (repo *fileSystemThemeRepository) Get(ctx context.Context) (*template.Template, error) {
|
||||
tpl, err := template.New("").ParseFS(repo.dir, "baseof.html", "single.html")
|
||||
tpl, err := template.New("").Funcs(helpers).ParseFS(repo.dir, "baseof.html", "single.html")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot find baseof.html: %w", err)
|
||||
return nil, fmt.Errorf("cannot find baseof template: %w", err)
|
||||
}
|
||||
|
||||
return tpl, nil
|
||||
|
|
Loading…
Reference in New Issue