From 358d4fb2af62189b913432997462a71b61090eb4 Mon Sep 17 00:00:00 2001 From: Derek Stevens Date: Thu, 2 Jun 2022 22:56:38 -0600 Subject: [PATCH] simple page edit screen --- archetype/adapter.go | 4 ++-- archetype/eureka.go | 2 +- lfo/middleware.go | 29 ++++++++++++++++++++--------- nirvash.go | 17 ++++++++++++----- templates/cms_edit.html | 19 +++++++++++++++++++ 5 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 templates/cms_edit.html diff --git a/archetype/adapter.go b/archetype/adapter.go index 1527387..af6e17b 100644 --- a/archetype/adapter.go +++ b/archetype/adapter.go @@ -3,8 +3,8 @@ package archetype type EditMode int const ( - EditModeLiteralTextArea EditMode = iota - EditModeEscapedContentEditable + EditModeLiteralTextArea EditMode = iota + EditModeEscapedContentEditable ) type Adapter interface { diff --git a/archetype/eureka.go b/archetype/eureka.go index 4abd8e6..bfcfa8f 100644 --- a/archetype/eureka.go +++ b/archetype/eureka.go @@ -28,7 +28,7 @@ func (self *EurekaAdapter) Name() string { } func (self *EurekaAdapter) EditMode() EditMode { - return EditModeLiteralTextArea + return EditModeLiteralTextArea } func (self *EurekaAdapter) GetConfig(key string) (interface{}, error) { diff --git a/lfo/middleware.go b/lfo/middleware.go index 360899c..a6c29ee 100644 --- a/lfo/middleware.go +++ b/lfo/middleware.go @@ -1,17 +1,28 @@ package lfo import ( - "context" - "net/http" - core "nilfm.cc/git/nirvash/archetype" + "context" + "net/http" + core "nilfm.cc/git/nirvash/archetype" ) func WithAdapter(next http.Handler, adapter core.Adapter) http.Handler { - handlerFunc := func(w http.ResponseWriter, req *http.Request) { - *req = *req.WithContext(context.WithValue(req.Context(), "adapter", adapter)) - next.ServeHTTP(w, req) - } - - return http.HandlerFunc(handlerFunc) + handlerFunc := func(w http.ResponseWriter, req *http.Request) { + *req = *req.WithContext(context.WithValue(req.Context(), "adapter", adapter)) + next.ServeHTTP(w, req) + } + + return http.HandlerFunc(handlerFunc) } +func WithEditModes(next http.Handler) http.Handler { + handlerFunc := func(w http.ResponseWriter, req *http.Request) { + *req = *req.WithContext(context.WithValue(req.Context(), "edit-modes", map[string]core.EditMode{ + "Literal": core.EditModeLiteralTextArea, + "Escaped": core.EditModeEscapedContentEditable, + })) + next.ServeHTTP(w, req) + } + + return http.HandlerFunc(handlerFunc) +} diff --git a/nirvash.go b/nirvash.go index 0569cf2..a4235ac 100644 --- a/nirvash.go +++ b/nirvash.go @@ -39,11 +39,18 @@ func main() { rtr.Post("/login", middleware.Authorize("/", udb, "/login?tryagain=1")) rtr.Get("/", middleware.Protected( - shell.WithAdapter( - renderer.Template( - "templates/cms_list.html", - "templates/header.html", - "templates/footer.html"), cfg.Adapter), http.MethodGet, udb, "/login")) + shell.WithAdapter( + renderer.Template( + "templates/cms_list.html", + "templates/header.html", + "templates/footer.html"), cfg.Adapter), http.MethodGet, udb, "/login")) + + rtr.Get(`/edit/(?P\S+)`, middleware.Protected( + shell.WithAdapter( + renderer.Template( + "templates/cms_edit.html", + "templates/header.html", + "templates/footer.html"), cfg.Adapter), http.MethodGet, udb, "/login")) http.ListenAndServe(":8080", rtr) } diff --git a/templates/cms_edit.html b/templates/cms_edit.html new file mode 100644 index 0000000..083453b --- /dev/null +++ b/templates/cms_edit.html @@ -0,0 +1,19 @@ +{{ $slug := ((.Context).Value "params").Slug }} +{{ $page := ((.Context).Value "adapter").GetPage $slug }} +{{ $editMode := ((.Context).Value "adapter").EditMode }} +{{ $editModes := (.Context).Value "edit-modes" }} + +{{ template "header" . }} + +
+ +last edited {{($page).Edited}} +{{ if eq $editMode 0 }} + +{{ else }} +
{{($page).Content}}
+{{ end }} + +
+ +{{ template "footer" . }} \ No newline at end of file