34 lines
654 B
Go
34 lines
654 B
Go
package themes
|
|
|
|
import (
|
|
"lmika.dev/lmika/hugo-cms/models"
|
|
"lmika.dev/pkg/modash/momap"
|
|
"slices"
|
|
"sort"
|
|
)
|
|
|
|
type Provider struct {
|
|
themes []models.ThemeMeta
|
|
themeIndex map[string]models.ThemeMeta
|
|
}
|
|
|
|
func New() *Provider {
|
|
ts := slices.Clone(themes)
|
|
sort.Slice(ts, func(i, j int) bool { return ts[i].Name < ts[j].Name })
|
|
ti := momap.IndexSlice(themes, func(m models.ThemeMeta) string { return m.ID })
|
|
|
|
return &Provider{
|
|
themes: ts,
|
|
themeIndex: ti,
|
|
}
|
|
}
|
|
|
|
func (p *Provider) Themes() []models.ThemeMeta {
|
|
return p.themes
|
|
}
|
|
|
|
func (p *Provider) Lookup(name string) (models.ThemeMeta, bool) {
|
|
t, ok := p.themeIndex[name]
|
|
return t, ok
|
|
}
|