diff --git a/internal/conf/templates/base.tmpl.html b/internal/conf/templates/base.tmpl.html index f663226..0819389 100644 --- a/internal/conf/templates/base.tmpl.html +++ b/internal/conf/templates/base.tmpl.html @@ -31,25 +31,43 @@
diff --git a/internal/conf/templates/view.tmpl.html b/internal/conf/templates/view.tmpl.html index eefa8dc..57b79b2 100644 --- a/internal/conf/templates/view.tmpl.html +++ b/internal/conf/templates/view.tmpl.html @@ -46,7 +46,7 @@
Share with other user
- + @@ -65,7 +65,7 @@
- +
Tags
diff --git a/internal/notes/notes.go b/internal/notes/notes.go index c542aad..a11c74f 100644 --- a/internal/notes/notes.go +++ b/internal/notes/notes.go @@ -398,3 +398,12 @@ func (n *Note) ToggleBox(nthBox int) { n.Body = buf.Bytes() n.Save() } + +func (n *Note) HasTag(tag string) bool { + for _, tag_ := range n.Tags { + if tag_ == tag { + return true + } + } + return false +} diff --git a/internal/notes/views/views.go b/internal/notes/views/views.go index 8452840..39b5659 100644 --- a/internal/notes/views/views.go +++ b/internal/notes/views/views.go @@ -4,6 +4,7 @@ import ( "log" "net/http" "strconv" + "strings" urls "forgejo.gwairfelin.com/max/gispatcho" "forgejo.gwairfelin.com/max/gonotes/internal/middleware" @@ -25,6 +26,7 @@ func GetRoutes(prefix string) *http.ServeMux { "new": {Path: "/new", Protocol: "GET", Handler: new}, "view_": {Path: "/{note}", Protocol: "GET", Handler: view}, "view": {Path: "/{note}/", Protocol: "GET", Handler: view}, + "setTags": {Path: "/{note}/tags/", Protocol: "POST", Handler: setTags}, "delete": {Path: "/{note}/delete/", Protocol: "GET", Handler: delete}, "edit": {Path: "/{note}/edit/", Protocol: "GET", Handler: edit}, "share": {Path: "/{note}/share/", Protocol: "POST", Handler: share}, @@ -55,7 +57,9 @@ func view(w http.ResponseWriter, r *http.Request) { "urlNew": myurls.Reverse("new", urls.Repl{}), "urlShare": myurls.Reverse("share", urls.Repl{"note": uid}), "urlUnshare": myurls.Reverse("unshare", urls.Repl{"note": uid}), + "urlSetTags": myurls.Reverse("setTags", urls.Repl{"note": uid}), "viewers": viewers, + "tags": strings.Join(note.Tags, " "), "isOwner": user == note.Owner, } @@ -199,6 +203,8 @@ type titleAndURL struct { func list(w http.ResponseWriter, r *http.Request) { user := r.Context().Value(middleware.ContextKey("user")).(string) + tag := r.FormValue("tag") + titlesAndUrls := make([]titleAndURL, 0) ns := notes.Notes.Get(user) @@ -206,10 +212,12 @@ func list(w http.ResponseWriter, r *http.Request) { log.Printf("Notes for %s: %+v", user, ns) for note := range ns { - titlesAndUrls = append( - titlesAndUrls, - titleAndURL{Title: note.Title, URL: myurls.Reverse("view", urls.Repl{"note": note.Uid})}, - ) + if tag == "" || note.HasTag(tag) { + titlesAndUrls = append( + titlesAndUrls, + titleAndURL{Title: note.Title, URL: myurls.Reverse("view", urls.Repl{"note": note.Uid})}, + ) + } } urlNew := myurls.Reverse("new", urls.Repl{}) @@ -221,3 +229,19 @@ func list(w http.ResponseWriter, r *http.Request) { return } } + +func setTags(w http.ResponseWriter, r *http.Request) { + user := r.Context().Value(middleware.ContextKey("user")).(string) + uid := r.PathValue("note") + tags := r.FormValue("tags") + + note, ok := notes.Notes.GetOne(user, uid) + if !ok || note.Owner != user { + http.Redirect(w, r, myurls.Reverse("view", urls.Repl{"note": uid}), http.StatusFound) + return + } + + note.Tags = strings.Split(tags, " ") + note.Save() + http.Redirect(w, r, myurls.Reverse("view", urls.Repl{"note": note.Uid}), http.StatusFound) +}