simple page edit screen
This commit is contained in:
parent
3f04afa16e
commit
358d4fb2af
5 changed files with 54 additions and 17 deletions
|
@ -3,8 +3,8 @@ package archetype
|
||||||
type EditMode int
|
type EditMode int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
EditModeLiteralTextArea EditMode = iota
|
EditModeLiteralTextArea EditMode = iota
|
||||||
EditModeEscapedContentEditable
|
EditModeEscapedContentEditable
|
||||||
)
|
)
|
||||||
|
|
||||||
type Adapter interface {
|
type Adapter interface {
|
||||||
|
|
|
@ -28,7 +28,7 @@ func (self *EurekaAdapter) Name() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *EurekaAdapter) EditMode() EditMode {
|
func (self *EurekaAdapter) EditMode() EditMode {
|
||||||
return EditModeLiteralTextArea
|
return EditModeLiteralTextArea
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *EurekaAdapter) GetConfig(key string) (interface{}, error) {
|
func (self *EurekaAdapter) GetConfig(key string) (interface{}, error) {
|
||||||
|
|
|
@ -1,17 +1,28 @@
|
||||||
package lfo
|
package lfo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
core "nilfm.cc/git/nirvash/archetype"
|
core "nilfm.cc/git/nirvash/archetype"
|
||||||
)
|
)
|
||||||
|
|
||||||
func WithAdapter(next http.Handler, adapter core.Adapter) http.Handler {
|
func WithAdapter(next http.Handler, adapter core.Adapter) http.Handler {
|
||||||
handlerFunc := func(w http.ResponseWriter, req *http.Request) {
|
handlerFunc := func(w http.ResponseWriter, req *http.Request) {
|
||||||
*req = *req.WithContext(context.WithValue(req.Context(), "adapter", adapter))
|
*req = *req.WithContext(context.WithValue(req.Context(), "adapter", adapter))
|
||||||
next.ServeHTTP(w, req)
|
next.ServeHTTP(w, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
return http.HandlerFunc(handlerFunc)
|
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)
|
||||||
|
}
|
||||||
|
|
17
nirvash.go
17
nirvash.go
|
@ -39,11 +39,18 @@ func main() {
|
||||||
rtr.Post("/login", middleware.Authorize("/", udb, "/login?tryagain=1"))
|
rtr.Post("/login", middleware.Authorize("/", udb, "/login?tryagain=1"))
|
||||||
|
|
||||||
rtr.Get("/", middleware.Protected(
|
rtr.Get("/", middleware.Protected(
|
||||||
shell.WithAdapter(
|
shell.WithAdapter(
|
||||||
renderer.Template(
|
renderer.Template(
|
||||||
"templates/cms_list.html",
|
"templates/cms_list.html",
|
||||||
"templates/header.html",
|
"templates/header.html",
|
||||||
"templates/footer.html"), cfg.Adapter), http.MethodGet, udb, "/login"))
|
"templates/footer.html"), cfg.Adapter), http.MethodGet, udb, "/login"))
|
||||||
|
|
||||||
|
rtr.Get(`/edit/(?P<Slug>\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)
|
http.ListenAndServe(":8080", rtr)
|
||||||
}
|
}
|
||||||
|
|
19
templates/cms_edit.html
Normal file
19
templates/cms_edit.html
Normal file
|
@ -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" . }}
|
||||||
|
|
||||||
|
<form method="POST" action="/save/{{$slug}}">
|
||||||
|
<textarea name="title">{{($page).Title}}</textarea>
|
||||||
|
<span>last edited {{($page).Edited}}</span>
|
||||||
|
{{ if eq $editMode 0 }}
|
||||||
|
<textarea name="content">{{($page).Content}}</textarea>
|
||||||
|
{{ else }}
|
||||||
|
<div contenteditable>{{($page).Content}}</div>
|
||||||
|
{{ end }}
|
||||||
|
<input type="submit" value="Save"/>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{{ template "footer" . }}
|
Loading…
Reference in a new issue