diff --git a/archetype/adapter.go b/archetype/adapter.go index 8ccd355..1527387 100644 --- a/archetype/adapter.go +++ b/archetype/adapter.go @@ -1,8 +1,16 @@ package archetype +type EditMode int + +const ( + EditModeLiteralTextArea EditMode = iota + EditModeEscapedContentEditable +) + type Adapter interface { Init(cfg *Config) Name() string + EditMode() EditMode GetConfig(key string) (interface{}, error) SetConfig(key string, value interface{}) error ListPages() map[string]string diff --git a/archetype/eureka.go b/archetype/eureka.go index 527ed68..4abd8e6 100644 --- a/archetype/eureka.go +++ b/archetype/eureka.go @@ -27,6 +27,10 @@ func (self *EurekaAdapter) Name() string { return "eureka" } +func (self *EurekaAdapter) EditMode() EditMode { + return EditModeLiteralTextArea +} + func (self *EurekaAdapter) GetConfig(key string) (interface{}, error) { return nil, nil } diff --git a/lfo/middleware.go b/lfo/middleware.go new file mode 100644 index 0000000..360899c --- /dev/null +++ b/lfo/middleware.go @@ -0,0 +1,17 @@ +package lfo + +import ( + "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) +} + diff --git a/nirvash.go b/nirvash.go index 44cc2bf..0569cf2 100644 --- a/nirvash.go +++ b/nirvash.go @@ -3,6 +3,7 @@ package main import ( "net/http" core "nilfm.cc/git/nirvash/archetype" + shell "nilfm.cc/git/nirvash/lfo" "nilfm.cc/git/quartzgun/indentalUserDB" "nilfm.cc/git/quartzgun/middleware" "nilfm.cc/git/quartzgun/renderer" @@ -38,10 +39,11 @@ 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"), http.MethodGet, udb, "/login")) + "templates/footer.html"), cfg.Adapter), http.MethodGet, udb, "/login")) http.ListenAndServe(":8080", rtr) } diff --git a/templates/cms_list.html b/templates/cms_list.html index 4dfa833..b2a2c4d 100644 --- a/templates/cms_list.html +++ b/templates/cms_list.html @@ -1,3 +1,15 @@ +{{ $pages := ((.Context).Value "adapter").ListPages }} + {{ template "header" .}} -

It works!

+
+ New Page + +
+ +
+
{{ template "footer" .}} \ No newline at end of file diff --git a/templates/header.html b/templates/header.html index f3c546f..0f00ca5 100644 --- a/templates/header.html +++ b/templates/header.html @@ -5,7 +5,7 @@ - Nirvash — Test + Nirvash — CMS {{end}} \ No newline at end of file