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 %}
- - {%s name %}
- {% endfor %}
-
-
- {%s lc.Get("ui.users_moderators") %}
- {% for _, name := range moderators %}
- - {%s name %}
- {% endfor %}
-
-
- {%s lc.Get("ui.users_editors") %}
- {% for _, name := range editors %}
- - {%s name %}
- {% 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(`
@@ -207,9 +204,9 @@ func StreamBaseHTML(qw422016 *qt422016.Writer, title, body string, lc *l18n.Loca
@@ -217,213 +214,213 @@ func StreamBaseHTML(qw422016 *qt422016.Writer, title, body string, lc *l18n.Loca
`)
-//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: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 %}
+ - {%s name %}
+ {% endfor %}
+
+
+ {%s get("moderators") %}
+ {% for _, name := range moderators %}
+ - {%s name %}
+ {% endfor %}
+
+
+ {%s get("editors") %}
+ {% for _, name := range editors %}
+ - {%s name %}
+ {% 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: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
+}