diff --git a/internal/notes/notes.go b/internal/notes/notes.go index ab4b860..fae8c47 100644 --- a/internal/notes/notes.go +++ b/internal/notes/notes.go @@ -5,13 +5,16 @@ package notes import ( "bufio" "bytes" + "cmp" "crypto/rand" "errors" "fmt" "html/template" "log" + "maps" "os" "path/filepath" + "slices" "strings" "time" @@ -98,14 +101,26 @@ func Init() error { return nil } +func (ns *noteSet) Sort() []*Note { + orderByTitle := func(a, b *Note) int { + return cmp.Compare(a.Title, b.Title) + } + return slices.SortedFunc(maps.Keys(*ns), orderByTitle) +} + func (ns *NoteStore) Get(owner string) noteSet { return ns.notes[owner] } +func (ns *NoteStore) GetOrdered(owner string) []*Note { + notes := ns.Get(owner) + return notes.Sort() +} + func (ns *NoteStore) GetOne(owner string, uid string) (*Note, bool) { notes := ns.Get(owner) - for note, _ := range notes { + for note := range notes { if note.Uid == uid { log.Printf("Found single note during GetOne %s", note.Title) return note, true @@ -408,10 +423,5 @@ func (n *Note) ToggleBox(nthBox int) (bool, bool) { } func (n *Note) HasTag(tag string) bool { - for _, tag_ := range n.Tags { - if tag_ == tag { - return true - } - } - return false + return slices.Contains(n.Tags, tag) } diff --git a/internal/notes/views/views.go b/internal/notes/views/views.go index d0f7a4d..8684499 100644 --- a/internal/notes/views/views.go +++ b/internal/notes/views/views.go @@ -215,11 +215,11 @@ func list(w http.ResponseWriter, r *http.Request) { titlesAndUrls := make([]titleAndURL, 0) - ns := notes.Notes.Get(user) + ns := notes.Notes.GetOrdered(user) log.Printf("Notes: %+v", notes.Notes) log.Printf("Notes for %s: %+v", user, ns) - for note := range ns { + for _, note := range ns { if tag == "" || note.HasTag(tag) { titlesAndUrls = append( titlesAndUrls,