1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-02-11 08:30:10 +00:00

Admin: Isolate the panel view

This commit is contained in:
Timur Ismagilov 2022-05-18 21:03:36 +03:00
parent a16304b26f
commit afb5c22c40
6 changed files with 47 additions and 90 deletions

33
admin/admin.go Normal file
View File

@ -0,0 +1,33 @@
package admin
import (
"embed"
"github.com/bouncepaw/mycorrhiza/viewutil"
"github.com/gorilla/mux"
)
const adminTranslationRu = `
{{define "panel title"}}Панель админстратора{{end}}
{{define "panel safe section title"}}Безопасная секция{{end}}
{{define "panel link about"}}Об этой вики{{end}}
{{define "panel update header"}}Обновить ссылки в верхней панели{{end}}
{{define "panel link user list"}}Список пользователей{{end}}
{{define "panel users"}}Управление пользователями{{end}}
{{define "panel unsafe section title"}}Опасная секция{{end}}
{{define "panel shutdown"}}Выключить вики{{end}}
{{define "panel reindex hyphae"}}Переиндексировать гифы{{end}}
`
var (
//go:embed *.html
fs embed.FS
panelChain viewutil.Chain
)
func Init(rtr *mux.Router) {
panelChain = viewutil.CopyEnRuWith(fs, "admin.html", adminTranslationRu)
}
func AdminPanel(meta viewutil.Meta) {
viewutil.ExecutePage(meta, panelChain, &viewutil.BaseData{})
}

View File

@ -1,5 +1,6 @@
{{define "panel title"}}Administrative functions{{end}}
{{define "panel"}}
{{define "title"}}{{template "panel title"}}{{end}}
{{define "body"}}
<main class="main-width">
<h1>{{template "panel title"}}</h1>
<section>

View File

@ -1,77 +0,0 @@
package views
import (
"github.com/bouncepaw/mycorrhiza/util"
"github.com/bouncepaw/mycorrhiza/viewutil"
"html/template"
"io"
"log"
"strings"
)
const adminTranslationRu = `
{{define "panel title"}}Панель админстратора{{end}}
{{define "panel safe section title"}}Безопасная секция{{end}}
{{define "panel link about"}}Об этой вики{{end}}
{{define "panel update header"}}Обновить ссылки в верхней панели{{end}}
{{define "panel link user list"}}Список пользователей{{end}}
{{define "panel users"}}Управление пользователями{{end}}
{{define "panel unsafe section title"}}Опасная секция{{end}}
{{define "panel shutdown"}}Выключить вики{{end}}
{{define "panel reindex hyphae"}}Переиндексировать гифы{{end}}
`
var (
adminTemplatesEn *template.Template
adminTemplatesRu *template.Template
)
func localizedAdminTemplates(meta viewutil.Meta) *template.Template {
if meta.Lc.Locale == "ru" {
return adminTemplatesRu
}
return adminTemplatesEn
}
func templateAsString(temp *template.Template, name string, datum ...interface{}) string {
var buf strings.Builder
var err error
if len(datum) == 1 {
err = temp.ExecuteTemplate(&buf, name, datum[0])
} else {
err = temp.ExecuteTemplate(&buf, name, nil)
}
if err != nil {
log.Println(err)
return ""
}
return buf.String()
}
func init() {
adminTemplatesEn = template.Must(
template.
New("admin").
Funcs(template.FuncMap{
"beautifulName": util.BeautifulName,
}).
ParseFS(fs, "admin.html"))
adminTemplatesRu = template.Must(
template.Must(adminTemplatesEn.Clone()).Parse(adminTranslationRu))
}
func AdminPanel(meta viewutil.Meta) {
var buf strings.Builder
err := localizedAdminTemplates(meta).ExecuteTemplate(&buf, "panel", nil)
if err != nil {
log.Println(err)
}
_, err = io.WriteString(meta.W, Base(
meta,
templateAsString(localizedAdminTemplates(meta), "panel title"),
buf.String(),
))
if err != nil {
log.Println(err)
}
}

View File

@ -1,12 +1,9 @@
package views
import (
"embed"
"github.com/bouncepaw/mycorrhiza/viewutil"
)
var (
//go:embed *.html
fs embed.FS
Base = viewutil.Base
)

View File

@ -2,6 +2,7 @@ package web
import (
"fmt"
"github.com/bouncepaw/mycorrhiza/admin"
"github.com/bouncepaw/mycorrhiza/viewutil"
"io"
"log"
@ -20,23 +21,23 @@ import (
)
// initAdmin sets up /admin routes if auth is used. Call it after you have decided if you want to use auth.
func initAdmin(r *mux.Router) {
r.HandleFunc("/shutdown", handlerAdminShutdown).Methods(http.MethodPost)
r.HandleFunc("/reindex-users", handlerAdminReindexUsers).Methods(http.MethodPost)
func initAdmin(rtr *mux.Router) {
rtr.HandleFunc("/shutdown", handlerAdminShutdown).Methods(http.MethodPost)
rtr.HandleFunc("/reindex-users", handlerAdminReindexUsers).Methods(http.MethodPost)
r.HandleFunc("/new-user", handlerAdminUserNew).Methods(http.MethodGet, http.MethodPost)
r.HandleFunc("/users/{username}/edit", handlerAdminUserEdit).Methods(http.MethodGet, http.MethodPost)
r.HandleFunc("/users/{username}/delete", handlerAdminUserDelete).Methods(http.MethodGet, http.MethodPost)
r.HandleFunc("/users", handlerAdminUsers)
rtr.HandleFunc("/new-user", handlerAdminUserNew).Methods(http.MethodGet, http.MethodPost)
rtr.HandleFunc("/users/{username}/edit", handlerAdminUserEdit).Methods(http.MethodGet, http.MethodPost)
rtr.HandleFunc("/users/{username}/delete", handlerAdminUserDelete).Methods(http.MethodGet, http.MethodPost)
rtr.HandleFunc("/users", handlerAdminUsers)
r.HandleFunc("/", handlerAdmin)
rtr.HandleFunc("/", handlerAdmin)
}
// handlerAdmin provides the admin panel.
func handlerAdmin(w http.ResponseWriter, rq *http.Request) {
w.Header().Set("Content-Type", "text/html;charset=utf-8")
w.WriteHeader(http.StatusOK)
views.AdminPanel(viewutil.MetaFrom(w, rq))
admin.AdminPanel(viewutil.MetaFrom(w, rq))
}
// handlerAdminShutdown kills the wiki.

View File

@ -2,6 +2,7 @@
package web
import (
"github.com/bouncepaw/mycorrhiza/admin"
"github.com/bouncepaw/mycorrhiza/backlinks"
"github.com/bouncepaw/mycorrhiza/categories"
"github.com/bouncepaw/mycorrhiza/help"
@ -61,6 +62,7 @@ func Handler() http.Handler {
adminRouter := wikiRouter.PathPrefix("/admin").Subrouter()
adminRouter.Use(groupMiddleware("admin"))
initAdmin(adminRouter)
admin.Init(adminRouter)
}
// Index page