diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/bookmarks/bookmarks.go | 1 | ||||
| -rw-r--r-- | internal/config/config.go | 2 | ||||
| -rw-r--r-- | internal/web/server.go | 8 | ||||
| -rw-r--r-- | internal/web/server_test.go | 6 | ||||
| -rw-r--r-- | internal/web/templates/bookmarks.html | 2 | ||||
| -rw-r--r-- | internal/web/templates/reader.html | 1 |
6 files changed, 15 insertions, 5 deletions
diff --git a/internal/bookmarks/bookmarks.go b/internal/bookmarks/bookmarks.go index 4b839ed..ac8926d 100644 --- a/internal/bookmarks/bookmarks.go +++ b/internal/bookmarks/bookmarks.go @@ -19,6 +19,7 @@ type Bookmark struct { ID string `json:"id"` Book string `json:"book"` // canonical English name (Bible-corpus key) Chapter int `json:"chapter"` + Verse int `json:"verse,omitempty"` // 0 = whole chapter; >0 = a specific verse Note string `json:"note"` Tags []string `json:"tags"` Created string `json:"created"` // RFC3339 diff --git a/internal/config/config.go b/internal/config/config.go index e3299e1..4293bd2 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -25,7 +25,7 @@ var seedTOML []byte // Version is lectio's release version, shared by every binary's // -v/--version output (lectio, lectio-ui, lectio-web). -const Version = "0.16.1" +const Version = "0.17.0" // validVersions are the five scripture versions lectio understands. var validVersions = map[string]bool{ diff --git a/internal/web/server.go b/internal/web/server.go index cd50e5a..006bbdb 100644 --- a/internal/web/server.go +++ b/internal/web/server.go @@ -527,10 +527,15 @@ func addBookmark(s *server) http.HandlerFunc { } book := r.PostForm.Get("book") chap := atoiOr(r.PostForm.Get("chap"), 0) + verse := atoiOr(r.PostForm.Get("verse"), 0) + if verse < 0 { + verse = 0 + } if book != "" && chap > 0 { _, _ = s.bm.Add(bookmarks.Bookmark{ Book: book, Chapter: chap, + Verse: verse, Note: strings.TrimSpace(r.PostForm.Get("note")), Tags: bookmarks.ParseTags(r.PostForm.Get("tags")), }) @@ -545,6 +550,7 @@ type bookmarkView struct { Book string // canonical (for the ?book= open link) Display string // dialect display name Chapter int + Verse int // 0 = whole chapter Note string Tags []string Created string @@ -578,7 +584,7 @@ func listBookmarks(s *server) http.HandlerFunc { if disp == "" { disp = b.Book } - views = append(views, bookmarkView{ID: b.ID, Book: b.Book, Display: disp, Chapter: b.Chapter, Note: b.Note, Tags: b.Tags, Created: b.Created}) + views = append(views, bookmarkView{ID: b.ID, Book: b.Book, Display: disp, Chapter: b.Chapter, Verse: b.Verse, Note: b.Note, Tags: b.Tags, Created: b.Created}) } allTags, _ := s.bm.Tags() data := bookmarksData{Items: views, AllTags: allTags, Tag: tag, L: i18n.Get(cfg.UILanguage), Lang: cfg.UILanguage} diff --git a/internal/web/server_test.go b/internal/web/server_test.go index f6c050b..0754b08 100644 --- a/internal/web/server_test.go +++ b/internal/web/server_test.go @@ -606,6 +606,7 @@ func TestBookmarksFlow(t *testing.T) { form := url.Values{} form.Set("book", "John") form.Set("chap", "3") + form.Set("verse", "16") form.Set("note", "for God so loved") form.Set("tags", "grace, gospel") post := httptest.NewRequest("POST", "/reader/bookmark", strings.NewReader(form.Encode())) @@ -620,8 +621,9 @@ func TestBookmarksFlow(t *testing.T) { list := httptest.NewRecorder() srv.ServeHTTP(list, httptest.NewRequest("GET", "/bookmarks", nil)) b := list.Body.String() - if !strings.Contains(b, "John") || !strings.Contains(b, "for God so loved") || !strings.Contains(b, `book=John&chap=3`) { - t.Errorf("bookmark not listed:\n%s", b) + if !strings.Contains(b, "John") || !strings.Contains(b, "for God so loved") || + !strings.Contains(b, `book=John&chap=3`) || !strings.Contains(b, "John 3:16") { + t.Errorf("bookmark not listed with verse:\n%s", b) } // Tag filter. diff --git a/internal/web/templates/bookmarks.html b/internal/web/templates/bookmarks.html index f51515b..3597b74 100644 --- a/internal/web/templates/bookmarks.html +++ b/internal/web/templates/bookmarks.html @@ -33,7 +33,7 @@ <div class="bookmarks"> {{range .Items}} <div class="bookmark"> - <a href="/reader?book={{.Book}}&chap={{.Chapter}}">{{.Display}} {{.Chapter}}</a> + <a href="/reader?book={{.Book}}&chap={{.Chapter}}">{{.Display}} {{.Chapter}}{{if .Verse}}:{{.Verse}}{{end}}</a> {{if .Note}}<span class="note">{{.Note}}</span>{{end}} {{if .Tags}}<span class="tags">{{range .Tags}}#{{.}} {{end}}</span>{{end}} <form method="post" action="/bookmarks/delete"> diff --git a/internal/web/templates/reader.html b/internal/web/templates/reader.html index 7e506c2..02ecf38 100644 --- a/internal/web/templates/reader.html +++ b/internal/web/templates/reader.html @@ -58,6 +58,7 @@ <form class="bookmark-add" method="post" action="/reader/bookmark"> <input type="hidden" name="book" value="{{.Book}}"> <input type="hidden" name="chap" value="{{.Chap}}"> + <input type="number" name="verse" min="1" placeholder="verse (optional)"> <input type="text" name="note" placeholder="note"> <input type="text" name="tags" placeholder="tags, comma-separated"> <button type="submit">★ bookmark</button> |
