Move /user-list to the new system

This commit is contained in:
Timur Ismagilov 2024-06-03 23:22:22 +03:00
parent bf03105d09
commit 65989c1db1
6 changed files with 287 additions and 500 deletions

View File

@ -1,8 +1,6 @@
{% import "net/http" %}
{% import "sort" %}
{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
{% import "github.com/bouncepaw/mycorrhiza/l18n" %}
{% import "github.com/bouncepaw/mycorrhiza/user" %}
{% func Register(rq *http.Request) %}
{% code
@ -143,71 +141,3 @@ Telegram auth widget was requested by Yogurt. As you can see, we don't offer use
</html>
{% endfunc %}
{% code
var userListL10n = map[string]L10nEntry{
"heading": En("List of users").Ru("Список пользователей"),
"administrators": En("Administrators").Ru("Администраторы"),
"moderators": En("Moderators").Ru("Модераторы"),
"editors": En("Editors").Ru("Редакторы"),
"readers": En("Readers").Ru("Читатели"),
}
%}
{% func UserList(lc *l18n.Localizer) %}
<main class="main-width user-list">
{% code
var get = func(key string) string {
return userListL10n[key].Get(lc.Locale)
}
var (
admins = make([]string, 0)
moderators = make([]string, 0)
editors = make([]string, 0)
readers = 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)
case "reader":
readers = append(readers, u.Name)
}
}
sort.Strings(admins)
sort.Strings(moderators)
sort.Strings(editors)
sort.Strings(readers)
%}
<h1>{%s get("heading") %}</h1>
<section>
<h2>{%s get("administrators") %}</h2>
<ol>{% for _, name := range admins %}
<li><a href="/hypha/{%s cfg.UserHypha %}/{%s name %}">{%s name %}</a></li>
{% endfor %}</ol>
</section>
<section>
<h2>{%s get("moderators") %}</h2>
<ol>{% for _, name := range moderators %}
<li><a href="/hypha/{%s cfg.UserHypha %}/{%s name %}">{%s name %}</a></li>
{% endfor %}</ol>
</section>
<section>
<h2>{%s get("editors") %}</h2>
<ol>{% for _, name := range editors %}
<li><a href="/hypha/{%s cfg.UserHypha %}/{%s name %}">{%s name %}</a></li>
{% endfor %}</ol>
</section>
<section>
<h2>{%s get("readers") %}</h2>
<ol>{% for _, name := range readers %}
<li><a href="/hypha/{%s cfg.UserHypha %}/{%s name %}">{%s name %}</a></li>
{% endfor %}</ol>
</section>
</main>
{% endfunc %}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,9 @@
package user
import "sync"
import (
"sort"
"sync"
)
var users sync.Map
var tokens sync.Map
@ -99,3 +102,24 @@ func terminateSession(token string) {
tokens.Delete(token)
dumpTokens()
}
func UsersInGroups() (admins []string, moderators []string, editors []string, readers []string) {
for u := range 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)
case "reader":
readers = append(readers, u.Name)
}
}
sort.Strings(admins)
sort.Strings(moderators)
sort.Strings(editors)
sort.Strings(readers)
return
}

View File

@ -8,7 +8,7 @@ import (
//go:embed views/*.html
var fs embed.FS
var pageOrphans, pageBacklinks *newtmpl.Page
var pageOrphans, pageBacklinks, pageUserList *newtmpl.Page
func initPages() {
pageOrphans = newtmpl.NewPage(fs, "views/orphans.html", map[string]string{
@ -20,4 +20,11 @@ func initPages() {
"backlinks to link": `Обратные ссылки на <a href="/hypha/{{.}}">{{beautifulName .}}</a>`,
"description": `Ниже перечислены гифы, на которых есть ссылка на эту гифу, трансклюзия этой гифы или эта гифа вставлена как изображение.`,
})
pageUserList = newtmpl.NewPage(fs, "views/user-list.html", map[string]string{
"title": "Список пользователей",
"administrators": "Администраторы",
"moderators": "Модераторы",
"editors": "Редакторы",
"readers": "Читатели",
})
}

30
web/views/user-list.html Normal file
View File

@ -0,0 +1,30 @@
{{define "title"}}List of users{{end}}
{{define "body"}}
<main class="main-width user-list">
<h1>{{template "title"}}</h1>
<section>{{$u := .UserHypha}}
<h2>{{block "administrators" .}}Administrators{{end}}</h2>
<ol>
{{range .Admins}}<li><a href="/hypha/{{$u}}/{{.}}">{{.}}</a></li>{{end}}
</ol>
</section>
<section>
<h2>{{block "moderators" .}}Moderators{{end}}</h2>
<ol>
{{range .Moderators}}<li><a href="/hypha/{{$u}}/{{.}}">{{.}}</a></li>{{end}}
</ol>
</section>
<section>
<h2>{{block "editors" .}}Editors{{end}}</h2>
<ol>
{{range .Editors}}<li><a href="/hypha/{{$u}}/{{.}}">{{.}}</a></li>{{end}}
</ol>
</section>
<section>
<h2>{{block "readers" .}}Readers{{end}}</h2>
<ol>
{{range .Readers}}<li><a href="/hypha/{{$u}}/{{.}}">{{.}}</a></li>{{end}}
</ol>
</section>
</main>
{{end}}

View File

@ -126,10 +126,14 @@ func groupMiddleware(group string) func(http.Handler) http.Handler {
// Auth
func handlerUserList(w http.ResponseWriter, rq *http.Request) {
lc := l18n.FromRequest(rq)
w.Header().Set("Content-Type", mime.TypeByExtension(".html"))
w.WriteHeader(http.StatusOK)
w.Write([]byte(viewutil.Base(viewutil.MetaFrom(w, rq), lc.Get("ui.users_title"), auth.UserList(lc), map[string]string{})))
admins, moderators, editors, readers := user.UsersInGroups()
_ = pageUserList.RenderTo(viewutil.MetaFrom(w, rq),
map[string]any{
"Admins": admins,
"Moderators": moderators,
"Editors": editors,
"Readers": readers,
})
}
func handlerLock(w http.ResponseWriter, rq *http.Request) {