1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2024-10-30 11:46:16 +00:00
mycorrhiza/categories/views.go

142 lines
4.0 KiB
Go
Raw Normal View History

package categories
import (
"embed"
"github.com/bouncepaw/mycorrhiza/cfg"
"github.com/bouncepaw/mycorrhiza/util"
2022-03-29 20:59:36 +00:00
"github.com/bouncepaw/mycorrhiza/viewutil"
"log"
"strings"
"text/template" // TODO: Fight
)
const categoriesRu = `
{{define "empty cat"}}Эта категория пуста.{{end}}
{{define "add hypha"}}Добавить в категорию{{end}}
{{define "cat"}}Категория{{end}}
{{define "hypha name"}}Имя гифы{{end}}
{{define "categories"}}Категории{{end}}
2022-03-23 12:46:08 +00:00
{{define "placeholder"}}Имя категории...{{end}}
{{define "remove from category title"}}Убрать гифу из этой категории{{end}}
2022-03-23 12:46:08 +00:00
{{define "add to category title"}}Добавить гифу в эту категорию{{end}}
{{define "category list heading"}}Список категорий{{end}}
{{define "no categories"}}В этой вики нет категорий.{{end}}
{{define "category x"}}Категория {{. | beautifulName}}{{end}}
`
2022-03-20 08:21:59 +00:00
var (
//go:embed *.html
fs embed.FS
m = template.Must
baseEn, baseRu *template.Template
viewListChain, viewPageChain viewutil.Chain
categoryTemplatesEn *template.Template
categoryTemplatesRu *template.Template
2022-03-20 08:21:59 +00:00
)
func prepareViews() {
2022-03-23 12:46:08 +00:00
categoryTemplatesEn = template.Must(template.
New("category").
Funcs(
template.FuncMap{
"beautifulName": util.BeautifulName,
}).
2022-03-22 13:40:40 +00:00
ParseFS(fs, "categories.html"))
2022-03-23 12:46:08 +00:00
categoryTemplatesRu = template.Must(template.Must(categoryTemplatesEn.Clone()).Parse(categoriesRu))
baseEn = m(viewutil.BaseEn.Clone())
baseRu = m(viewutil.BaseRu.Clone())
viewListChain = viewutil.
En(
m(m(baseEn.Clone()).ParseFS(fs, "view_list.html"))).
Ru(
m(m(m(baseRu.Clone()).ParseFS(fs, "view_list.html")).Parse(categoriesRu)))
viewPageChain = viewutil.
En(
m(m(baseEn.Clone()).ParseFS(fs, "view_page.html"))).
Ru(
m(m(m(baseRu.Clone()).ParseFS(fs, "view_page.html")).Parse(categoriesRu)))
}
2022-03-29 20:59:36 +00:00
func localizedCatTemplates(meta viewutil.Meta) *template.Template {
2022-03-23 12:46:08 +00:00
if meta.Lc.Locale == "ru" {
return categoryTemplatesRu
}
return categoryTemplatesEn
}
2022-03-29 20:59:36 +00:00
func localizedCatTemplateAsString(meta viewutil.Meta, name string, datum ...interface{}) string {
var buf strings.Builder
2022-03-23 12:46:08 +00:00
var err error
if len(datum) == 1 {
err = localizedCatTemplates(meta).ExecuteTemplate(&buf, name, datum[0])
2022-03-23 12:46:08 +00:00
} else {
err = localizedCatTemplates(meta).ExecuteTemplate(&buf, name, nil)
2022-03-23 12:46:08 +00:00
}
2022-03-22 13:40:40 +00:00
if err != nil {
log.Println(err)
return ""
}
2022-03-23 12:46:08 +00:00
return buf.String()
}
func CategoryCard(meta viewutil.Meta, hyphaName string) string {
2022-03-23 12:46:08 +00:00
var buf strings.Builder
err := localizedCatTemplates(meta).ExecuteTemplate(&buf, "category card", struct {
HyphaName string
Categories []string
GivenPermissionToModify bool
}{
hyphaName,
WithHypha(hyphaName),
meta.U.CanProceed("add-to-category"),
})
if err != nil {
log.Println(err)
}
return buf.String()
}
2022-03-20 08:21:59 +00:00
type pageData struct {
viewutil.BaseData
CatName string
Hyphae []string
GivenPermissionToModify bool
2022-03-20 08:21:59 +00:00
}
func categoryPage(meta viewutil.Meta, catName string) {
if err := viewPageChain.Get(meta).ExecuteTemplate(meta.W, "page", pageData{
BaseData: viewutil.BaseData{
Meta: meta,
Title: localizedCatTemplateAsString(meta, "category x", catName),
HeaderLinks: cfg.HeaderLinks,
CommonScripts: cfg.CommonScripts,
},
CatName: catName,
Hyphae: Contents(catName),
GivenPermissionToModify: meta.U.CanProceed("add-to-category"),
}); err != nil {
log.Println(err)
}
}
type listData struct {
viewutil.BaseData
Categories []string
}
func categoryList(meta viewutil.Meta) {
if err := viewListChain.Get(meta).ExecuteTemplate(meta.W, "page", listData{
BaseData: viewutil.BaseData{
Meta: meta,
Title: localizedCatTemplateAsString(meta, "category list heading"),
HeaderLinks: cfg.HeaderLinks,
CommonScripts: cfg.CommonScripts,
},
Categories: List(),
}); err != nil {
log.Println(err)
}
}