From 4729dc8c1a0cf58ef54e4fa41911dd20aa97e6a4 Mon Sep 17 00:00:00 2001 From: bel Date: Sun, 20 Oct 2019 00:48:52 +0000 Subject: [PATCH] Edit and submit pages but need to create new pages --- server/file.go | 12 ++++++++++-- server/path.go | 19 ++++++++++++------- server/routes.go | 4 ++++ server/submit.go | 30 ++++++++++++++++++++++++++++++ server/submit_test.go | 1 + wrapper.html | 6 +++++- 6 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 server/submit.go create mode 100644 server/submit_test.go diff --git a/server/file.go b/server/file.go index 75682b0..eacd7c6 100755 --- a/server/file.go +++ b/server/file.go @@ -4,12 +4,20 @@ import ( "fmt" "io/ioutil" "net/http" + "path" "github.com/gomarkdown/markdown" ) -func notesFile(path Path, w http.ResponseWriter, r *http.Request) { - b, _ := ioutil.ReadFile(path.Local) +func notesFile(p Path, w http.ResponseWriter, r *http.Request) { + b, _ := ioutil.ReadFile(p.Local) + notesFileHead(p, w) content := markdown.ToHTML(b, nil, nil) fmt.Fprintf(w, "%s\n", content) } + +func notesFileHead(p Path, w http.ResponseWriter) { + fmt.Fprintf(w, ` + + `, path.Join("/edit/", p.BaseHREF)) +} diff --git a/server/path.go b/server/path.go index 642718f..2d1bd8f 100755 --- a/server/path.go +++ b/server/path.go @@ -9,9 +9,10 @@ import ( ) type Path struct { - Local string - HREF string - Base string + Local string + HREF string + Base string + BaseHREF string } func NewPathFromLocal(p string) Path { @@ -34,21 +35,25 @@ func NewPathFromURL(p string) Path { if len(locals) > 1 { local = locals[1] } + baseHREF := local local = path.Join(config.Root, local) if strings.Trim(p, "/") == base { local = config.Root + baseHREF = "/" } return Path{ - Base: base, - HREF: href, - Local: local, + Base: base, + HREF: href, + Local: local, + BaseHREF: baseHREF, } } func (p Path) MultiLink() string { - href := p.HREF + href := p.BaseHREF href = strings.TrimPrefix(href, "/") href = strings.TrimSuffix(href, "/") + href = path.Join("notes/", href) segments := strings.Split(href, "/") full := "" for i := range segments { diff --git a/server/routes.go b/server/routes.go index 3ce585f..dbc98a1 100755 --- a/server/routes.go +++ b/server/routes.go @@ -20,6 +20,10 @@ func (s *Server) Routes() error { path: fmt.Sprintf("edit/%s%s", wildcard, wildcard), handler: s.edit, }, + { + path: fmt.Sprintf("submit/%s%s", wildcard, wildcard), + handler: s.submit, + }, } for _, endpoint := range endpoints { diff --git a/server/submit.go b/server/submit.go new file mode 100644 index 0000000..6afde11 --- /dev/null +++ b/server/submit.go @@ -0,0 +1,30 @@ +package server + +import ( + "fmt" + "html" + "io/ioutil" + "net/http" + "os" + "path" + "strings" +) + +func (s *Server) submit(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + http.NotFound(w, r) + return + } + content := r.FormValue("content") + content = html.UnescapeString(content) + content = strings.ReplaceAll(content, "\r", "") + p := NewPathFromURL(r.URL.Path) + if err := ioutil.WriteFile(p.Local, []byte(content), os.ModePerm); err != nil { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintln(w, err) + } else { + url := *r.URL + url.Path = path.Join("/notes/", p.BaseHREF) + http.Redirect(w, r, url.String(), http.StatusSeeOther) + } +} diff --git a/server/submit_test.go b/server/submit_test.go new file mode 100644 index 0000000..abb4e43 --- /dev/null +++ b/server/submit_test.go @@ -0,0 +1 @@ +package server diff --git a/wrapper.html b/wrapper.html index 3d4f708..3adccf4 100755 --- a/wrapper.html +++ b/wrapper.html @@ -1,6 +1,10 @@
- + + +
{{{}}}