all repos — nirvash @ 3f04afa16e7e6d2f76e114e1b5591f82ea904134

modular CMS using the quartzgun library

add EditMode enum to adapter, basic CMS list
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmKZiJAACgkQO3+8IhRO
Y5i86Q/+M3IREn72NrsFnm7MgxsW2j3jgtWDcWBr94mJZ9hjx37HGNGhkdsESNSp
edoifpl/30kL0pGZdVkQ7Wh0EOMO5/5NxAiFR+LfSFViJjnRpkuPvsXz8jqBL8iZ
ozmBtpzlA0WjDQoSYs4A7gV87IexvnajBag84JIT2INpaMAFYFr5Gt96KhvcqYij
2oPJtV2tK7NB25A8Vbi2aU7kDgUM/MnbDN+VgZIfH3zLtx7sZA1Kyow2C9+xSKAI
N4LObQcdJCM9he3l/06X1uQdwDAh8N0wlBc79c9Oec0WBPlE+xx68papOgCoebFn
UkYF8ViFoUltZ6pgtVQwbL0DygtZs86ZX30gNlBB9oZIxzW5pTBdkb43mLiWRmH3
5uZfZ4aNI3XwqYP/bkG2HdPPapRTNNPb7xNNkzWTFDZ4durbh3nTRfb41iScS/+g
vjI3g4VVpPgcNmNiG/7EJAvzyCBH01CftJetNnb0S7UWrMY6JrrcC7/bdgP8T/Ql
dlrXV68DVSl5I1TQZ/pmhkFMcAbX6tM6514+CuS+AFbPyJfWoVC1wnGB9cL2Hcvg
bS2FLIwGdD2sKnTcT/9J9Czj8VI8SeePpBNS1tBBtefizNaloFvmijBVk8/BSI20
rRALRy6XUcXYsSW0atTydDDkTFs255FbDE+E6RIAn/+lJE8Omps=
=HebP
-----END PGP SIGNATURE-----
commit

3f04afa16e7e6d2f76e114e1b5591f82ea904134

parent

8e8fd65f92536383734ad1824500c196b2bc2000

M archetype/adapter.goarchetype/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
M archetype/eureka.goarchetype/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 }
A 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) +} +
M nirvash.gonirvash.go

@@ -3,6 +3,7 @@

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 @@

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) }
M templates/cms_list.htmltemplates/cms_list.html

@@ -1,3 +1,15 @@

+{{ $pages := ((.Context).Value "adapter").ListPages }} + {{ template "header" .}} -<h1>It works!</h1> +<div class="page-list"> + <a class="new-page-button" href="/new/">New Page</a> + <ul> + {{ range $slug, $title := $pages }} + <li><a href="/edit/{{$slug}}">{{$title}}</a></li> + {{ end }} + </ul> +</div> + +<div class="static-files-list"> +</div> {{ template "footer" .}}
M templates/header.htmltemplates/header.html

@@ -5,7 +5,7 @@ <head>

<meta charset='utf-8'> <meta name='description' content='Nirvash CMS'/> <meta name='viewport' content='width=device-width,initial-scale=1'> - <title>Nirvash &mdash; Test</title> + <title>Nirvash &mdash; CMS</title> </head> <body> {{end}}