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.9.0
{{ if .Cfg.UseAuth }}
{{ get .L.UserCount }}
{{ .UserCount }}
{{ get .L.HomeHypha }}
{{ .Cfg.HomeHypha }}
{{ get .L.Admins }}
{{$cfg := .Cfg}}{{ range $i, $username := .Admins }}
{{ $username }}
{{ end }} {{ else }}
{{get .L.Auth}}
{{ 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("Число пользователей:"), "HomeHypha": e().en("Home hypha:").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, чтобы узнать о гифах в этой вики."), "Auth": e().en("Authentication is set up").ru("Аутентификация настроена"), }, } 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, } var out strings.Builder err = temp.Execute(&out, data) if err != nil { log.Println(err) } return out.String() }