38 lines
834 B
Go
38 lines
834 B
Go
package fs
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"html/template"
|
|
"io/fs"
|
|
|
|
"source.toby3d.me/toby3d/home/internal/templateutil"
|
|
"source.toby3d.me/toby3d/home/internal/theme"
|
|
)
|
|
|
|
type fileSystemThemeRepository struct {
|
|
dir fs.FS
|
|
funcMap template.FuncMap
|
|
}
|
|
|
|
func NewFileSystemThemeRepository(dir fs.FS) (theme.Repository, error) {
|
|
funcMap, err := templateutil.New(dir)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot setup template.FuncMap for theme templates: %w", err)
|
|
}
|
|
|
|
return &fileSystemThemeRepository{
|
|
dir: dir,
|
|
funcMap: funcMap,
|
|
}, nil
|
|
}
|
|
|
|
func (repo *fileSystemThemeRepository) Get(ctx context.Context) (*template.Template, error) {
|
|
tpl, err := template.New("").Funcs(repo.funcMap).ParseFS(repo.dir, "*.html")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot find baseof template: %w", err)
|
|
}
|
|
|
|
return tpl, nil
|
|
}
|