From bd6b46f346603ccf48aca831330bef207fc47d3b Mon Sep 17 00:00:00 2001 From: Timur Ismagilov Date: Sun, 27 Feb 2022 13:44:47 +0300 Subject: [PATCH] =?UTF-8?q?Experiment=20=E2=84=96=203.=20QTPL+l10nEntry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Encapsulate translations, but still use QTPL. Hmm --- l18n/en/ui.json | 4 - l18n/ru/ui.json | 4 - views/about.go | 4 + views/stuff.qtpl | 49 +-- views/stuff.qtpl.go | 729 ++++++++++++++++------------------------ views/user_list.qtpl | 64 ++++ views/user_list.qtpl.go | 199 +++++++++++ 7 files changed, 553 insertions(+), 500 deletions(-) create mode 100644 views/user_list.qtpl create mode 100644 views/user_list.qtpl.go diff --git a/l18n/en/ui.json b/l18n/en/ui.json index 6943b14..28a1de6 100644 --- a/l18n/en/ui.json +++ b/l18n/en/ui.json @@ -93,10 +93,6 @@ "about_title": "About {{.name}}", "users_title": "User list", - "users_heading": "List of users", - "users_admins": "Admins", - "users_moderators": "Moderators", - "users_editors": "Editors", "no_rights": "Not enough rights", "reindex_no_rights": "You must be an admin to reindex hyphae.", diff --git a/l18n/ru/ui.json b/l18n/ru/ui.json index 186fddd..43285ac 100644 --- a/l18n/ru/ui.json +++ b/l18n/ru/ui.json @@ -96,10 +96,6 @@ "about_title": "О {{.name}}", "users_title": "Список пользователей", - "users_heading": "Список пользователей", - "users_admins": "Администраторы", - "users_moderators": "Модераторы", - "users_editors": "Редакторы", "no_rights": "Недостаточно прав", "reindex_no_rights": "Вы должны быть администратором, чтобы переиндексировать гифы.", diff --git a/views/about.go b/views/about.go index b07d3d7..fadf2b0 100644 --- a/views/about.go +++ b/views/about.go @@ -14,6 +14,10 @@ type l10nEntry struct { _ru string } +func en(v string) l10nEntry { + return e().en(v) +} + func e() l10nEntry { return l10nEntry{} } diff --git a/views/stuff.qtpl b/views/stuff.qtpl index 70a599b..6403939 100644 --- a/views/stuff.qtpl +++ b/views/stuff.qtpl @@ -1,6 +1,5 @@ {% import "fmt" %} {% import "path/filepath" %} -{% import "sort" %} {% import "github.com/bouncepaw/mycorrhiza/cfg" %} {% import "github.com/bouncepaw/mycorrhiza/hyphae" %} @@ -165,59 +164,13 @@ It outputs a poorly formatted JSON, but it works and is valid. ? {% endfunc %} -{% func UserListHTML(lc *l18n.Localizer) %} -
-
-

{%s lc.Get("ui.users_heading") %}

-{% code -var ( - admins = make([]string, 0) - moderators = make([]string, 0) - editors = make([]string, 0) -) -for u := range user.YieldUsers() { - switch u.Group { - case "admin": - admins = append(admins, u.Name) - case "moderator": - moderators = append(moderators, u.Name) - case "editor", "trusted": - editors = append(editors, u.Name) - } -} -sort.Strings(admins) -sort.Strings(moderators) -sort.Strings(editors) -%} -
-

{%s lc.Get("ui.users_admins") %}

-
    {% for _, name := range admins %} -
  1. {%s name %}
  2. - {% endfor %}
-
-
-

{%s lc.Get("ui.users_moderators") %}

-
    {% for _, name := range moderators %} -
  1. {%s name %}
  2. - {% endfor %}
-
-
-

{%s lc.Get("ui.users_editors") %}

-
    {% for _, name := range editors %} -
  1. {%s name %}
  2. - {% endfor %}
-
-
-
-{% endfunc %} - {% func HyphaListHTML(lc *l18n.Localizer) %}

{%s lc.Get("ui.list_heading") %}

{%s lc.GetPlural("ui.list_desc", hyphae.Count()) %}

    - {% code + {% code hyphaNames := make(chan string) sortedHypha := hyphae.PathographicSort(hyphaNames) for hypha := range hyphae.YieldExistingHyphae() { diff --git a/views/stuff.qtpl.go b/views/stuff.qtpl.go index 8d2f74a..84001e4 100644 --- a/views/stuff.qtpl.go +++ b/views/stuff.qtpl.go @@ -10,66 +10,63 @@ import "fmt" //line views/stuff.qtpl:2 import "path/filepath" -//line views/stuff.qtpl:3 -import "sort" - -//line views/stuff.qtpl:5 +//line views/stuff.qtpl:4 import "github.com/bouncepaw/mycorrhiza/cfg" -//line views/stuff.qtpl:6 +//line views/stuff.qtpl:5 import "github.com/bouncepaw/mycorrhiza/hyphae" -//line views/stuff.qtpl:7 +//line views/stuff.qtpl:6 import "github.com/bouncepaw/mycorrhiza/user" -//line views/stuff.qtpl:8 +//line views/stuff.qtpl:7 import "github.com/bouncepaw/mycorrhiza/util" -//line views/stuff.qtpl:9 +//line views/stuff.qtpl:8 import "github.com/bouncepaw/mycorrhiza/l18n" -//line views/stuff.qtpl:11 +//line views/stuff.qtpl:10 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line views/stuff.qtpl:11 +//line views/stuff.qtpl:10 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line views/stuff.qtpl:11 +//line views/stuff.qtpl:10 func StreamBaseHTML(qw422016 *qt422016.Writer, title, body string, lc *l18n.Localizer, u *user.User, headElements ...string) { -//line views/stuff.qtpl:11 +//line views/stuff.qtpl:10 qw422016.N().S(` `) -//line views/stuff.qtpl:17 +//line views/stuff.qtpl:16 qw422016.E().S(title) -//line views/stuff.qtpl:17 +//line views/stuff.qtpl:16 qw422016.N().S(` `) -//line views/stuff.qtpl:21 +//line views/stuff.qtpl:20 for _, el := range headElements { -//line views/stuff.qtpl:21 +//line views/stuff.qtpl:20 qw422016.N().S(el) -//line views/stuff.qtpl:21 +//line views/stuff.qtpl:20 } -//line views/stuff.qtpl:21 +//line views/stuff.qtpl:20 qw422016.N().S(` @@ -79,127 +76,127 @@ func StreamBaseHTML(qw422016 *qt422016.Writer, title, body string, lc *l18n.Loca
  • `) -//line views/stuff.qtpl:38 +//line views/stuff.qtpl:37 if cfg.UseAuth { -//line views/stuff.qtpl:38 +//line views/stuff.qtpl:37 qw422016.N().S(` `) -//line views/stuff.qtpl:53 +//line views/stuff.qtpl:52 } -//line views/stuff.qtpl:53 +//line views/stuff.qtpl:52 qw422016.N().S(`
`) -//line views/stuff.qtpl:69 +//line views/stuff.qtpl:68 qw422016.N().S(body) -//line views/stuff.qtpl:69 +//line views/stuff.qtpl:68 qw422016.N().S(` `) -//line views/stuff.qtpl:81 +//line views/stuff.qtpl:80 StreamCommonScripts(qw422016) -//line views/stuff.qtpl:81 +//line views/stuff.qtpl:80 qw422016.N().S(` `) -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 } -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 func WriteBaseHTML(qq422016 qtio422016.Writer, title, body string, lc *l18n.Localizer, u *user.User, headElements ...string) { -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 StreamBaseHTML(qw422016, title, body, lc, u, headElements...) -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 } -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 func BaseHTML(title, body string, lc *l18n.Localizer, u *user.User, headElements ...string) string { -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 WriteBaseHTML(qb422016, title, body, lc, u, headElements...) -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 return qs422016 -//line views/stuff.qtpl:85 +//line views/stuff.qtpl:84 } -//line views/stuff.qtpl:87 +//line views/stuff.qtpl:86 func StreamTitleSearchHTML(qw422016 *qt422016.Writer, query string, generator func(string) <-chan string, lc *l18n.Localizer) { -//line views/stuff.qtpl:87 +//line views/stuff.qtpl:86 qw422016.N().S(`

`) -//line views/stuff.qtpl:90 +//line views/stuff.qtpl:89 qw422016.E().S(lc.Get("ui.search_results_query", &l18n.Replacements{"query": query})) -//line views/stuff.qtpl:90 +//line views/stuff.qtpl:89 qw422016.N().S(`

`) -//line views/stuff.qtpl:91 +//line views/stuff.qtpl:90 qw422016.E().S(lc.Get("ui.search_results_desc")) -//line views/stuff.qtpl:91 +//line views/stuff.qtpl:90 qw422016.N().S(`

`) -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 } -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 func WriteTitleSearchHTML(qq422016 qtio422016.Writer, query string, generator func(string) <-chan string, lc *l18n.Localizer) { -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 StreamTitleSearchHTML(qw422016, query, generator, lc) -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 } -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 func TitleSearchHTML(query string, generator func(string) <-chan string, lc *l18n.Localizer) string { -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 WriteTitleSearchHTML(qb422016, query, generator, lc) -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 return qs422016 -//line views/stuff.qtpl:100 +//line views/stuff.qtpl:99 } // It outputs a poorly formatted JSON, but it works and is valid. -//line views/stuff.qtpl:103 +//line views/stuff.qtpl:102 func StreamTitleSearchJSON(qw422016 *qt422016.Writer, query string, generator func(string) <-chan string) { -//line views/stuff.qtpl:103 +//line views/stuff.qtpl:102 qw422016.N().S(` `) -//line views/stuff.qtpl:105 +//line views/stuff.qtpl:104 // Lol counter := 0 -//line views/stuff.qtpl:107 +//line views/stuff.qtpl:106 qw422016.N().S(` { "source_query": "`) -//line views/stuff.qtpl:109 +//line views/stuff.qtpl:108 qw422016.E().S(query) -//line views/stuff.qtpl:109 +//line views/stuff.qtpl:108 qw422016.N().S(`", "results": [ `) -//line views/stuff.qtpl:111 +//line views/stuff.qtpl:110 for hyphaName := range generator(query) { -//line views/stuff.qtpl:111 +//line views/stuff.qtpl:110 qw422016.N().S(` `) -//line views/stuff.qtpl:112 +//line views/stuff.qtpl:111 if counter > 0 { -//line views/stuff.qtpl:112 +//line views/stuff.qtpl:111 qw422016.N().S(`, `) -//line views/stuff.qtpl:112 +//line views/stuff.qtpl:111 } -//line views/stuff.qtpl:112 +//line views/stuff.qtpl:111 qw422016.N().S(`{ "canonical_name": "`) -//line views/stuff.qtpl:113 +//line views/stuff.qtpl:112 qw422016.E().S(hyphaName) -//line views/stuff.qtpl:113 +//line views/stuff.qtpl:112 qw422016.N().S(`", "beautiful_name": "`) -//line views/stuff.qtpl:114 +//line views/stuff.qtpl:113 qw422016.E().S(util.BeautifulName(hyphaName)) -//line views/stuff.qtpl:114 +//line views/stuff.qtpl:113 qw422016.N().S(`", "url": "`) -//line views/stuff.qtpl:115 +//line views/stuff.qtpl:114 qw422016.E().S(cfg.URL + "/hypha/" + hyphaName) -//line views/stuff.qtpl:115 +//line views/stuff.qtpl:114 qw422016.N().S(`" }`) -//line views/stuff.qtpl:116 +//line views/stuff.qtpl:115 counter++ -//line views/stuff.qtpl:116 +//line views/stuff.qtpl:115 qw422016.N().S(` `) -//line views/stuff.qtpl:117 +//line views/stuff.qtpl:116 } -//line views/stuff.qtpl:117 +//line views/stuff.qtpl:116 qw422016.N().S(` ] } `) -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 } -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 func WriteTitleSearchJSON(qq422016 qtio422016.Writer, query string, generator func(string) <-chan string) { -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 StreamTitleSearchJSON(qw422016, query, generator) -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 } -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 func TitleSearchJSON(query string, generator func(string) <-chan string) string { -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 WriteTitleSearchJSON(qb422016, query, generator) -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 return qs422016 -//line views/stuff.qtpl:120 +//line views/stuff.qtpl:119 } -//line views/stuff.qtpl:122 +//line views/stuff.qtpl:121 func StreamBacklinksHTML(qw422016 *qt422016.Writer, hyphaName string, generator func(string) <-chan string, lc *l18n.Localizer) { -//line views/stuff.qtpl:122 +//line views/stuff.qtpl:121 qw422016.N().S(`

`) -//line views/stuff.qtpl:125 +//line views/stuff.qtpl:124 qw422016.N().S(lc.Get( "ui.backlinks_heading", &l18n.Replacements{ @@ -434,389 +431,233 @@ func StreamBacklinksHTML(qw422016 *qt422016.Writer, hyphaName string, generator ), }, )) -//line views/stuff.qtpl:134 +//line views/stuff.qtpl:133 qw422016.N().S(`

`) -//line views/stuff.qtpl:135 +//line views/stuff.qtpl:134 qw422016.E().S(lc.Get("ui.backlinks_desc")) -//line views/stuff.qtpl:135 +//line views/stuff.qtpl:134 qw422016.N().S(`

`) -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 } -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 func WriteBacklinksHTML(qq422016 qtio422016.Writer, hyphaName string, generator func(string) <-chan string, lc *l18n.Localizer) { -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 StreamBacklinksHTML(qw422016, hyphaName, generator, lc) -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 } -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 func BacklinksHTML(hyphaName string, generator func(string) <-chan string, lc *l18n.Localizer) string { -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 WriteBacklinksHTML(qb422016, hyphaName, generator, lc) -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 return qs422016 -//line views/stuff.qtpl:145 +//line views/stuff.qtpl:144 } -//line views/stuff.qtpl:147 +//line views/stuff.qtpl:146 func StreamHelpHTML(qw422016 *qt422016.Writer, content, lang string, lc *l18n.Localizer) { -//line views/stuff.qtpl:147 +//line views/stuff.qtpl:146 qw422016.N().S(`
`) -//line views/stuff.qtpl:151 +//line views/stuff.qtpl:150 qw422016.N().S(content) -//line views/stuff.qtpl:151 +//line views/stuff.qtpl:150 qw422016.N().S(`
`) -//line views/stuff.qtpl:154 +//line views/stuff.qtpl:153 qw422016.N().S(helpTopicsHTML(lang, lc)) -//line views/stuff.qtpl:154 +//line views/stuff.qtpl:153 qw422016.N().S(`
`) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 } -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 func WriteHelpHTML(qq422016 qtio422016.Writer, content, lang string, lc *l18n.Localizer) { -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 StreamHelpHTML(qw422016, content, lang, lc) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 } -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 func HelpHTML(content, lang string, lc *l18n.Localizer) string { -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 WriteHelpHTML(qb422016, content, lang, lc) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 return qs422016 -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:155 } -//line views/stuff.qtpl:158 +//line views/stuff.qtpl:157 func StreamHelpEmptyErrorHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) { -//line views/stuff.qtpl:158 +//line views/stuff.qtpl:157 qw422016.N().S(`

`) -//line views/stuff.qtpl:159 +//line views/stuff.qtpl:158 qw422016.E().S(lc.Get("help.empty_error_title")) -//line views/stuff.qtpl:159 +//line views/stuff.qtpl:158 qw422016.N().S(`

`) -//line views/stuff.qtpl:160 +//line views/stuff.qtpl:159 qw422016.E().S(lc.Get("help.empty_error_line_1")) -//line views/stuff.qtpl:160 +//line views/stuff.qtpl:159 qw422016.N().S(`

`) -//line views/stuff.qtpl:161 +//line views/stuff.qtpl:160 qw422016.E().S(lc.Get("help.empty_error_line_2a")) -//line views/stuff.qtpl:161 +//line views/stuff.qtpl:160 qw422016.N().S(` `) -//line views/stuff.qtpl:161 +//line views/stuff.qtpl:160 qw422016.E().S(lc.Get("help.empty_error_link")) -//line views/stuff.qtpl:161 +//line views/stuff.qtpl:160 qw422016.N().S(` `) -//line views/stuff.qtpl:161 +//line views/stuff.qtpl:160 qw422016.E().S(lc.Get("help.empty_error_line_2b")) -//line views/stuff.qtpl:161 +//line views/stuff.qtpl:160 qw422016.N().S(`

`) -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 } -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 func WriteHelpEmptyErrorHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) { -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 StreamHelpEmptyErrorHTML(qw422016, lc) -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 } -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 func HelpEmptyErrorHTML(lc *l18n.Localizer) string { -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 WriteHelpEmptyErrorHTML(qb422016, lc) -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 return qs422016 -//line views/stuff.qtpl:162 +//line views/stuff.qtpl:161 } -//line views/stuff.qtpl:164 +//line views/stuff.qtpl:163 func streamhelpTopicBadgeHTML(qw422016 *qt422016.Writer, lang, topic string) { -//line views/stuff.qtpl:164 +//line views/stuff.qtpl:163 qw422016.N().S(` ? `) -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 } -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 func writehelpTopicBadgeHTML(qq422016 qtio422016.Writer, lang, topic string) { -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 streamhelpTopicBadgeHTML(qw422016, lang, topic) -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 } -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 func helpTopicBadgeHTML(lang, topic string) string { -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 writehelpTopicBadgeHTML(qb422016, lang, topic) -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 return qs422016 -//line views/stuff.qtpl:166 +//line views/stuff.qtpl:165 } -//line views/stuff.qtpl:168 -func StreamUserListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) { -//line views/stuff.qtpl:168 - qw422016.N().S(` -
-
-

`) -//line views/stuff.qtpl:171 - qw422016.E().S(lc.Get("ui.users_heading")) -//line views/stuff.qtpl:171 - qw422016.N().S(`

-`) -//line views/stuff.qtpl:173 - var ( - admins = make([]string, 0) - moderators = make([]string, 0) - editors = make([]string, 0) - ) - for u := range user.YieldUsers() { - switch u.Group { - case "admin": - admins = append(admins, u.Name) - case "moderator": - moderators = append(moderators, u.Name) - case "editor", "trusted": - editors = append(editors, u.Name) - } - } - sort.Strings(admins) - sort.Strings(moderators) - sort.Strings(editors) - -//line views/stuff.qtpl:191 - qw422016.N().S(` -
-

`) -//line views/stuff.qtpl:193 - qw422016.E().S(lc.Get("ui.users_admins")) -//line views/stuff.qtpl:193 - qw422016.N().S(`

-
    `) -//line views/stuff.qtpl:194 - for _, name := range admins { -//line views/stuff.qtpl:194 - qw422016.N().S(` -
  1. `) -//line views/stuff.qtpl:195 - qw422016.E().S(name) -//line views/stuff.qtpl:195 - qw422016.N().S(`
  2. - `) -//line views/stuff.qtpl:196 - } -//line views/stuff.qtpl:196 - qw422016.N().S(`
-
-
-

`) -//line views/stuff.qtpl:199 - qw422016.E().S(lc.Get("ui.users_moderators")) -//line views/stuff.qtpl:199 - qw422016.N().S(`

-
    `) -//line views/stuff.qtpl:200 - for _, name := range moderators { -//line views/stuff.qtpl:200 - qw422016.N().S(` -
  1. `) -//line views/stuff.qtpl:201 - qw422016.E().S(name) -//line views/stuff.qtpl:201 - qw422016.N().S(`
  2. - `) -//line views/stuff.qtpl:202 - } -//line views/stuff.qtpl:202 - qw422016.N().S(`
-
-
-

`) -//line views/stuff.qtpl:205 - qw422016.E().S(lc.Get("ui.users_editors")) -//line views/stuff.qtpl:205 - qw422016.N().S(`

-
    `) -//line views/stuff.qtpl:206 - for _, name := range editors { -//line views/stuff.qtpl:206 - qw422016.N().S(` -
  1. `) -//line views/stuff.qtpl:207 - qw422016.E().S(name) -//line views/stuff.qtpl:207 - qw422016.N().S(`
  2. - `) -//line views/stuff.qtpl:208 - } -//line views/stuff.qtpl:208 - qw422016.N().S(`
-
-
-
-`) -//line views/stuff.qtpl:212 -} - -//line views/stuff.qtpl:212 -func WriteUserListHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) { -//line views/stuff.qtpl:212 - qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:212 - StreamUserListHTML(qw422016, lc) -//line views/stuff.qtpl:212 - qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:212 -} - -//line views/stuff.qtpl:212 -func UserListHTML(lc *l18n.Localizer) string { -//line views/stuff.qtpl:212 - qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:212 - WriteUserListHTML(qb422016, lc) -//line views/stuff.qtpl:212 - qs422016 := string(qb422016.B) -//line views/stuff.qtpl:212 - qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:212 - return qs422016 -//line views/stuff.qtpl:212 -} - -//line views/stuff.qtpl:214 +//line views/stuff.qtpl:167 func StreamHyphaListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) { -//line views/stuff.qtpl:214 +//line views/stuff.qtpl:167 qw422016.N().S(`

`) -//line views/stuff.qtpl:217 +//line views/stuff.qtpl:170 qw422016.E().S(lc.Get("ui.list_heading")) -//line views/stuff.qtpl:217 +//line views/stuff.qtpl:170 qw422016.N().S(`

`) -//line views/stuff.qtpl:218 +//line views/stuff.qtpl:171 qw422016.E().S(lc.GetPlural("ui.list_desc", hyphae.Count())) -//line views/stuff.qtpl:218 +//line views/stuff.qtpl:171 qw422016.N().S(`

    `) -//line views/stuff.qtpl:221 +//line views/stuff.qtpl:174 hyphaNames := make(chan string) sortedHypha := hyphae.PathographicSort(hyphaNames) for hypha := range hyphae.YieldExistingHyphae() { @@ -824,134 +665,134 @@ func StreamHyphaListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) { } close(hyphaNames) -//line views/stuff.qtpl:227 +//line views/stuff.qtpl:180 qw422016.N().S(` `) -//line views/stuff.qtpl:228 +//line views/stuff.qtpl:181 for hyphaName := range sortedHypha { -//line views/stuff.qtpl:228 +//line views/stuff.qtpl:181 qw422016.N().S(` `) -//line views/stuff.qtpl:229 +//line views/stuff.qtpl:182 h := hyphae.ByName(hyphaName) -//line views/stuff.qtpl:229 +//line views/stuff.qtpl:182 qw422016.N().S(`
  • `) -//line views/stuff.qtpl:232 +//line views/stuff.qtpl:185 qw422016.E().S(util.BeautifulName(h.CanonicalName())) -//line views/stuff.qtpl:232 +//line views/stuff.qtpl:185 qw422016.N().S(` `) -//line views/stuff.qtpl:234 +//line views/stuff.qtpl:187 switch h := h.(type) { -//line views/stuff.qtpl:235 +//line views/stuff.qtpl:188 case *hyphae.MediaHypha: -//line views/stuff.qtpl:235 +//line views/stuff.qtpl:188 qw422016.N().S(` `) -//line views/stuff.qtpl:237 +//line views/stuff.qtpl:190 qw422016.E().S(filepath.Ext(h.MediaFilePath())[1:]) -//line views/stuff.qtpl:237 +//line views/stuff.qtpl:190 qw422016.N().S(` `) -//line views/stuff.qtpl:239 +//line views/stuff.qtpl:192 } -//line views/stuff.qtpl:239 +//line views/stuff.qtpl:192 qw422016.N().S(`
  • `) -//line views/stuff.qtpl:241 +//line views/stuff.qtpl:194 } -//line views/stuff.qtpl:241 +//line views/stuff.qtpl:194 qw422016.N().S(`
`) -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 } -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 func WriteHyphaListHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) { -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 StreamHyphaListHTML(qw422016, lc) -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 } -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 func HyphaListHTML(lc *l18n.Localizer) string { -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 WriteHyphaListHTML(qb422016, lc) -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 return qs422016 -//line views/stuff.qtpl:245 +//line views/stuff.qtpl:198 } -//line views/stuff.qtpl:247 +//line views/stuff.qtpl:200 func StreamCommonScripts(qw422016 *qt422016.Writer) { -//line views/stuff.qtpl:247 +//line views/stuff.qtpl:200 qw422016.N().S(` `) -//line views/stuff.qtpl:248 +//line views/stuff.qtpl:201 for _, scriptPath := range cfg.CommonScripts { -//line views/stuff.qtpl:248 +//line views/stuff.qtpl:201 qw422016.N().S(` `) -//line views/stuff.qtpl:250 +//line views/stuff.qtpl:203 } -//line views/stuff.qtpl:250 +//line views/stuff.qtpl:203 qw422016.N().S(` `) -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 } -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 func WriteCommonScripts(qq422016 qtio422016.Writer) { -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 StreamCommonScripts(qw422016) -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 } -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 func CommonScripts() string { -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 WriteCommonScripts(qb422016) -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 return qs422016 -//line views/stuff.qtpl:251 +//line views/stuff.qtpl:204 } diff --git a/views/user_list.qtpl b/views/user_list.qtpl new file mode 100644 index 0000000..77f4ad3 --- /dev/null +++ b/views/user_list.qtpl @@ -0,0 +1,64 @@ +{% import "github.com/bouncepaw/mycorrhiza/cfg" %} +{% import "github.com/bouncepaw/mycorrhiza/l18n" %} +{% import "github.com/bouncepaw/mycorrhiza/user" %} +{% import "sort" %} + +{% code +var hyphaListL10n = map[string]l10nEntry{ + "heading": en("List of users").ru("Список пользователей"), + "administrators": en("Administrators").ru("Администраторы"), + "moderators": en("Moderators").ru("Модераторы"), + "editors": en("Editors").ru("Редакторы"), +} +%} + +{% func UserListHTML(lc *l18n.Localizer) %} +
+
+{% code +var get = func(key string) string { + return hyphaListL10n[key].get(lc.Locale) +} + +var ( + admins = make([]string, 0) + moderators = make([]string, 0) + editors = make([]string, 0) +) +for u := range user.YieldUsers() { + switch u.Group { + // What if we place the users into sorted slices? + case "admin": + admins = append(admins, u.Name) + case "moderator": + moderators = append(moderators, u.Name) + case "editor", "trusted": + editors = append(editors, u.Name) + } +} +sort.Strings(admins) +sort.Strings(moderators) +sort.Strings(editors) +%} +

{%s get("heading") %}

+
+

{%s get("administrators") %}

+
    {% for _, name := range admins %} +
  1. {%s name %}
  2. + {% endfor %}
+
+
+

{%s get("moderators") %}

+
    {% for _, name := range moderators %} +
  1. {%s name %}
  2. + {% endfor %}
+
+
+

{%s get("editors") %}

+
    {% for _, name := range editors %} +
  1. {%s name %}
  2. + {% endfor %}
+
+
+
+{% endfunc %} \ No newline at end of file diff --git a/views/user_list.qtpl.go b/views/user_list.qtpl.go new file mode 100644 index 0000000..811912f --- /dev/null +++ b/views/user_list.qtpl.go @@ -0,0 +1,199 @@ +// Code generated by qtc from "user_list.qtpl". DO NOT EDIT. +// See https://github.com/valyala/quicktemplate for details. + +//line views/user_list.qtpl:1 +package views + +//line views/user_list.qtpl:1 +import "github.com/bouncepaw/mycorrhiza/cfg" + +//line views/user_list.qtpl:2 +import "github.com/bouncepaw/mycorrhiza/l18n" + +//line views/user_list.qtpl:3 +import "github.com/bouncepaw/mycorrhiza/user" + +//line views/user_list.qtpl:4 +import "sort" + +//line views/user_list.qtpl:6 +import ( + qtio422016 "io" + + qt422016 "github.com/valyala/quicktemplate" +) + +//line views/user_list.qtpl:6 +var ( + _ = qtio422016.Copy + _ = qt422016.AcquireByteBuffer +) + +//line views/user_list.qtpl:7 +var hyphaListL10n = map[string]l10nEntry{ + "heading": en("List of users").ru("Список пользователей"), + "administrators": en("Administrators").ru("Администраторы"), + "moderators": en("Moderators").ru("Модераторы"), + "editors": en("Editors").ru("Редакторы"), +} + +//line views/user_list.qtpl:15 +func StreamUserListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) { +//line views/user_list.qtpl:15 + qw422016.N().S(` +
+
+`) +//line views/user_list.qtpl:19 + var get = func(key string) string { + return hyphaListL10n[key].get(lc.Locale) + } + + var ( + admins = make([]string, 0) + moderators = make([]string, 0) + editors = make([]string, 0) + ) + for u := range user.YieldUsers() { + switch u.Group { + // What if we place the users into sorted slices? + case "admin": + admins = append(admins, u.Name) + case "moderator": + moderators = append(moderators, u.Name) + case "editor", "trusted": + editors = append(editors, u.Name) + } + } + sort.Strings(admins) + sort.Strings(moderators) + sort.Strings(editors) + +//line views/user_list.qtpl:42 + qw422016.N().S(` +

`) +//line views/user_list.qtpl:43 + qw422016.E().S(get("heading")) +//line views/user_list.qtpl:43 + qw422016.N().S(`

+
+

`) +//line views/user_list.qtpl:45 + qw422016.E().S(get("administrators")) +//line views/user_list.qtpl:45 + qw422016.N().S(`

+
    `) +//line views/user_list.qtpl:46 + for _, name := range admins { +//line views/user_list.qtpl:46 + qw422016.N().S(` +
  1. `) +//line views/user_list.qtpl:47 + qw422016.E().S(name) +//line views/user_list.qtpl:47 + qw422016.N().S(`
  2. + `) +//line views/user_list.qtpl:48 + } +//line views/user_list.qtpl:48 + qw422016.N().S(`
+
+
+

`) +//line views/user_list.qtpl:51 + qw422016.E().S(get("moderators")) +//line views/user_list.qtpl:51 + qw422016.N().S(`

+
    `) +//line views/user_list.qtpl:52 + for _, name := range moderators { +//line views/user_list.qtpl:52 + qw422016.N().S(` +
  1. `) +//line views/user_list.qtpl:53 + qw422016.E().S(name) +//line views/user_list.qtpl:53 + qw422016.N().S(`
  2. + `) +//line views/user_list.qtpl:54 + } +//line views/user_list.qtpl:54 + qw422016.N().S(`
+
+
+

`) +//line views/user_list.qtpl:57 + qw422016.E().S(get("editors")) +//line views/user_list.qtpl:57 + qw422016.N().S(`

+
    `) +//line views/user_list.qtpl:58 + for _, name := range editors { +//line views/user_list.qtpl:58 + qw422016.N().S(` +
  1. `) +//line views/user_list.qtpl:59 + qw422016.E().S(name) +//line views/user_list.qtpl:59 + qw422016.N().S(`
  2. + `) +//line views/user_list.qtpl:60 + } +//line views/user_list.qtpl:60 + qw422016.N().S(`
+
+
+
+`) +//line views/user_list.qtpl:64 +} + +//line views/user_list.qtpl:64 +func WriteUserListHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) { +//line views/user_list.qtpl:64 + qw422016 := qt422016.AcquireWriter(qq422016) +//line views/user_list.qtpl:64 + StreamUserListHTML(qw422016, lc) +//line views/user_list.qtpl:64 + qt422016.ReleaseWriter(qw422016) +//line views/user_list.qtpl:64 +} + +//line views/user_list.qtpl:64 +func UserListHTML(lc *l18n.Localizer) string { +//line views/user_list.qtpl:64 + qb422016 := qt422016.AcquireByteBuffer() +//line views/user_list.qtpl:64 + WriteUserListHTML(qb422016, lc) +//line views/user_list.qtpl:64 + qs422016 := string(qb422016.B) +//line views/user_list.qtpl:64 + qt422016.ReleaseByteBuffer(qb422016) +//line views/user_list.qtpl:64 + return qs422016 +//line views/user_list.qtpl:64 +}