diff --git a/go.mod b/go.mod index d1334e1..e992aff 100644 --- a/go.mod +++ b/go.mod @@ -5,3 +5,5 @@ go 1.23.5 require github.com/yuin/goldmark v1.7.8 require github.com/pelletier/go-toml v1.9.5 + +require gitea.gwairfelin.com/max/gispatcho v0.1.1 diff --git a/go.sum b/go.sum index 1449848..f27af30 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +gitea.gwairfelin.com/max/gispatcho v0.1.1 h1:8Zv6UH046mSSLdf0PqpNRK6DACuWJfgBSUiWhMW0sMY= +gitea.gwairfelin.com/max/gispatcho v0.1.1/go.mod h1:TRhxU+uNv+nIcFIxy2jl30DPbcM5Yib0S/cpLXws5iM= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= diff --git a/internal/notes/views/views.go b/internal/notes/views/views.go index 16d9d72..de70e18 100644 --- a/internal/notes/views/views.go +++ b/internal/notes/views/views.go @@ -8,9 +8,9 @@ import ( "path/filepath" "strings" + urls "gitea.gwairfelin.com/max/gispatcho" "gitea.gwairfelin.com/max/gonotes/internal/conf" "gitea.gwairfelin.com/max/gonotes/internal/notes" - "gitea.gwairfelin.com/max/gonotes/internal/urls" ) var myurls urls.URLs @@ -31,13 +31,15 @@ func GetRoutes(prefix string) *http.ServeMux { func view(w http.ResponseWriter, r *http.Request) { title := r.PathValue("note") note, err := notes.LoadNote(title) + urlEdit := myurls.Reverse("edit", urls.Repl{"note": title}) if err != nil { - http.Redirect(w, r, myurls.Reverse("edit", map[string]string{"note": title}), http.StatusFound) + http.Redirect(w, r, urlEdit, http.StatusFound) return } + context := map[string]any{"note": note, "urlEdit": urlEdit} note.Render() - err = renderTemplate(w, "view.html", note) + err = renderTemplate(w, "view.html", context) if err != nil { log.Print(err.Error()) http.Error(w, "Couldn't load template", http.StatusInternalServerError) @@ -52,7 +54,9 @@ func edit(w http.ResponseWriter, r *http.Request) { note = ¬es.Note{Title: title} } - err = renderTemplate(w, "edit.html", note) + urlSave := myurls.Reverse("save", urls.Repl{"note": title}) + context := map[string]any{"note": note, "urlSave": urlSave} + err = renderTemplate(w, "edit.html", context) if err != nil { log.Print(err.Error()) http.Error(w, "Couldn't load template", http.StatusInternalServerError) @@ -65,7 +69,7 @@ func save(w http.ResponseWriter, r *http.Request) { body := r.FormValue("body") note := ¬es.Note{Title: title, Body: []byte(body)} note.Save() - http.Redirect(w, r, myurls.Reverse("view", map[string]string{"note": title}), http.StatusFound) + http.Redirect(w, r, myurls.Reverse("view", urls.Repl{"note": title}), http.StatusFound) } func list(w http.ResponseWriter, r *http.Request) { diff --git a/internal/urls/urls.go b/internal/urls/urls.go deleted file mode 100644 index 2e3f08a..0000000 --- a/internal/urls/urls.go +++ /dev/null @@ -1,47 +0,0 @@ -// Package to manage routing of urls in net/http -// URLs type is the main thing of interest -package urls - -import ( - "fmt" - "net/http" - "regexp" -) - -// Represent a single URL with a name, a pattern and supported protocol -type URL struct { - Handler func(http.ResponseWriter, *http.Request) - Path string - Protocol string -} - -// Return the corresponding net/http pattern for a URL -func (url *URL) GetPattern() string { - return fmt.Sprintf("%s %s", url.Protocol, url.Path) -} - -// Represent a set of URLs at a prefix -type URLs struct { - URLs map[string]URL - Prefix string -} - -// Given a name and replacements, return a rendered path component of a URL -func (urls URLs) Reverse(name string, replacements map[string]string) string { - pattern := urls.URLs[name].Path - - for key, val := range replacements { - re := regexp.MustCompile("{" + key + "}") - pattern = re.ReplaceAllString(pattern, val) - } - return urls.Prefix + pattern -} - -// Return router for the urls -func (urls URLs) GetRouter() *http.ServeMux { - router := http.NewServeMux() - for _, url := range urls.URLs { - router.HandleFunc(url.GetPattern(), url.Handler) - } - return router -} diff --git a/templates/edit.html b/templates/edit.html index a19594b..27b7b17 100644 --- a/templates/edit.html +++ b/templates/edit.html @@ -1,11 +1,13 @@ -{{define "title"}}Edit {{.Title}}{{end}} +{{define "title"}}Edit {{.note.Title}}{{end}} {{define "main"}} -
+
-
- +
+
+ +
Enter your note content in markdown
diff --git a/templates/view.html b/templates/view.html index adb79ed..2f58842 100644 --- a/templates/view.html +++ b/templates/view.html @@ -1,10 +1,10 @@ -{{define "title"}}{{.Title}}{{end}} +{{define "title"}}{{.note.Title}}{{end}} {{define "main"}}
-{{.BodyRendered}} +{{.note.BodyRendered}}
- Edit + Edit
{{end}}