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() }