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:
parent
a16304b26f
commit
afb5c22c40
33
admin/admin.go
Normal file
33
admin/admin.go
Normal 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{})
|
||||
}
|
@ -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>
|
@ -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)
|
||||
}
|
||||
}
|
@ -1,12 +1,9 @@
|
||||
package views
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"github.com/bouncepaw/mycorrhiza/viewutil"
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed *.html
|
||||
fs embed.FS
|
||||
Base = viewutil.Base
|
||||
)
|
||||
|
19
web/admin.go
19
web/admin.go
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user