From afb5c22c40feb2941d1f73d9e54472be5e2bae09 Mon Sep 17 00:00:00 2001 From: Timur Ismagilov Date: Wed, 18 May 2022 21:03:36 +0300 Subject: [PATCH] Admin: Isolate the panel view --- admin/admin.go | 33 ++++++++++++++++ {views => admin}/admin.html | 3 +- views/admin.go | 77 ------------------------------------- views/base.go | 3 -- web/admin.go | 19 ++++----- web/web.go | 2 + 6 files changed, 47 insertions(+), 90 deletions(-) create mode 100644 admin/admin.go rename {views => admin}/admin.html (93%) delete mode 100644 views/admin.go diff --git a/admin/admin.go b/admin/admin.go new file mode 100644 index 0000000..2d09b01 --- /dev/null +++ b/admin/admin.go @@ -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{}) +} diff --git a/views/admin.html b/admin/admin.html similarity index 93% rename from views/admin.html rename to admin/admin.html index f6b17d7..d5116ac 100644 --- a/views/admin.html +++ b/admin/admin.html @@ -1,5 +1,6 @@ {{define "panel title"}}Administrative functions{{end}} -{{define "panel"}} +{{define "title"}}{{template "panel title"}}{{end}} +{{define "body"}}

{{template "panel title"}}

diff --git a/views/admin.go b/views/admin.go deleted file mode 100644 index f0d9993..0000000 --- a/views/admin.go +++ /dev/null @@ -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) - } -} diff --git a/views/base.go b/views/base.go index 4b7e50b..90a5465 100644 --- a/views/base.go +++ b/views/base.go @@ -1,12 +1,9 @@ package views import ( - "embed" "github.com/bouncepaw/mycorrhiza/viewutil" ) var ( - //go:embed *.html - fs embed.FS Base = viewutil.Base ) diff --git a/web/admin.go b/web/admin.go index 5a87bf7..4843f4c 100644 --- a/web/admin.go +++ b/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. diff --git a/web/web.go b/web/web.go index 80d2ff2..8b3eda1 100644 --- a/web/web.go +++ b/web/web.go @@ -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