aboutsummaryrefslogtreecommitdiff
path: root/internal/web/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/web/server.go')
-rw-r--r--internal/web/server.go22
1 files changed, 16 insertions, 6 deletions
diff --git a/internal/web/server.go b/internal/web/server.go
index 92cb758..7d9dfe5 100644
--- a/internal/web/server.go
+++ b/internal/web/server.go
@@ -72,7 +72,7 @@ func NewServer(cfg config.Config) http.Handler {
mux.HandleFunc("GET /calendar", func(w http.ResponseWriter, r *http.Request) { calendarHandler(s.get())(w, r) })
mux.HandleFunc("GET /api/calendar.json", func(w http.ResponseWriter, r *http.Request) { apiCalendarJSONHandler(s.get())(w, r) })
mux.HandleFunc("GET /calendar.ics", func(w http.ResponseWriter, r *http.Request) { calendarICSHandler(s.get())(w, r) })
- mux.HandleFunc("GET /reader", func(w http.ResponseWriter, r *http.Request) { readerHandler(s.get(), s.table())(w, r) })
+ mux.HandleFunc("GET /reader", func(w http.ResponseWriter, r *http.Request) { readerHandler(s.get(), s.table(), s.bm)(w, r) })
mux.HandleFunc("GET /theme.css", func(w http.ResponseWriter, r *http.Request) { themeCSSHandler(s.get())(w, r) })
mux.HandleFunc("GET /source", sourceHandler)
mux.HandleFunc("GET /settings", settingsGet(s))
@@ -500,7 +500,7 @@ type chapOpt struct {
// navigation and corpus-version compare, rendering the same reading-pane
// templates/themes as the daily view. The controls form re-fetches /reader and
// hx-selects #reader-root, so book/chapter/version selects stay in sync.
-func readerHandler(cfg config.Config, tbl *bible.BookTable) http.HandlerFunc {
+func readerHandler(cfg config.Config, tbl *bible.BookTable, bm *bookmarks.Store) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
books := tbl.Books(cfg.SiglaLang())
if len(books) == 0 { // defensive: embedded table always has books
@@ -525,7 +525,18 @@ func readerHandler(cfg config.Config, tbl *bible.BookTable) http.HandlerFunc {
theme = cfg.WebTheme
}
- reading := RenderPassage(info.Canonical, info.Name, chap, versions, display, cfg.UILanguage)
+ // Verses in this book+chapter that carry a bookmark get a red "*".
+ marked := map[string]bool{}
+ if bm != nil {
+ if all, err := bm.List(""); err == nil {
+ for _, b := range all {
+ if b.Book == info.Canonical && b.Chapter == chap {
+ marked[fmt.Sprintf("%d:%d", b.Chapter, b.Verse)] = true
+ }
+ }
+ }
+ }
+ reading := RenderPassage(info.Canonical, info.Name, chap, versions, display, cfg.UILanguage, marked)
bookOpts := make([]bookOpt, 0, len(books))
for _, b := range books {
@@ -807,11 +818,10 @@ func settingsPost(s *server) http.HandlerFunc {
cfg.Versions = r.PostForm["versions"]
cfg.WebVersions = r.PostForm["web_versions"]
cfg.All = r.PostForm.Get("all") != ""
- cfg.Offline = r.PostForm.Get("offline") != ""
cfg.WebMono = r.PostForm.Get("web_mono") != ""
- cfg.Width = atoiOr(r.PostForm.Get("width"), cfg.Width)
cfg.WebPort = atoiOr(r.PostForm.Get("web_port"), cfg.WebPort)
- cfg.Pager = r.PostForm.Get("pager")
+ // offline, width and pager are not web-editable; their config values are
+ // preserved (the form no longer carries those fields).
booksText := r.PostForm.Get("books")