package views
import (
"github.com/bouncepaw/mycorrhiza/cfg"
"github.com/bouncepaw/mycorrhiza/l18n"
"github.com/bouncepaw/mycorrhiza/user"
"log"
"strings"
"text/template" // sic!
)
type l10nEntry struct {
_en string
_ru string
}
func en(v string) l10nEntry {
return e().en(v)
}
func e() l10nEntry {
return l10nEntry{}
}
func (e l10nEntry) ru(v string) l10nEntry {
e._ru = v
return e
}
func (e l10nEntry) en(v string) l10nEntry {
e._en = v
return e
}
func (e l10nEntry) get(lang string) string {
if lang == "ru" && e._ru != "" {
return e._ru
}
return e._en
}
const aboutTemplateString = `
{{ printf (get .L.Title) .Cfg.WikiName }}
- {{ get .L.Version }} 1.8.2
{{ if .Cfg.UseAuth }}
- {{ get .L.UserCount }} {{ .UserCount }}
- {{ get .L.HomePage }} {{ .Cfg.HomeHypha }}
- {{ get .L.Admins }} {{$cfg := .Cfg}}{{ range $i, $username := .Admins }}
{{ if gt $i 0 }}, {{ end }}
{{ $username }}
{{ end }}
{{ else }}
- {{ get .L.NoAuth }}
{{ end }}
{{ get .L.AboutHyphae }}
`
var aboutData = struct {
L map[string]l10nEntry
Cfg map[string]interface{}
Admins []string
UserCount uint64
}{
L: map[string]l10nEntry{
"Title": e().en("About %s").ru("О %s"),
"Version": e().en("Mycorrhiza Wiki version:").ru("Версия Микоризы:"),
"UserCount": e().en("User count:").ru("Число пользователей:"),
"HomePage": e().en("Home page:").ru("Домашняя гифа:"),
"Admins": e().en("Administrators:").ru("Администраторы:"),
"NoAuth": e().en("This wiki does not use authorization").ru("На этой вики не используется авторизация"),
"AboutHyphae": e().en("See /list for information about hyphae on this wiki.").ru("См. /list, чтобы узнать о гифах в этой вики."),
},
}
func AboutHTML(lc *l18n.Localizer) string {
get := func(e l10nEntry) string {
return e.get(lc.Locale)
}
temp, err := template.New("about wiki").Funcs(template.FuncMap{"get": get}).Parse(aboutTemplateString)
if err != nil {
log.Fatalln(err)
}
data := aboutData
data.Admins = user.ListUsersWithGroup("admin")
data.UserCount = user.Count()
data.Cfg = map[string]interface{}{
"UseAuth": cfg.UseAuth,
"WikiName": cfg.WikiName,
"HomeHypha": cfg.HomeHypha,
"UserHypha": cfg.UserHypha,
}
var out strings.Builder
err = temp.Execute(&out, data)
if err != nil {
log.Println(err)
}
return out.String()
}