aboutsummaryrefslogtreecommitdiff
path: root/internal/web
diff options
context:
space:
mode:
Diffstat (limited to 'internal/web')
-rw-r--r--internal/web/server.go8
-rw-r--r--internal/web/server_test.go6
-rw-r--r--internal/web/templates/bookmarks.html2
-rw-r--r--internal/web/templates/reader.html1
4 files changed, 13 insertions, 4 deletions
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>