From 855859bdaac101e7e87d5cb0237b7c30f4f4b371 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 29 Jul 2026 14:24:16 +0200 Subject: web: declutter the UI, fix date arrows, red * for bookmarked verses in reader Daily page (index.html): - Date arrows now step the date input client-side and dispatch its change, so they move relative to the CURRENT day and update the shown date (they were stuck one step from the initial date, computed server-side). - Theme picker removed (theme lives only in /settings now); bookmarks link removed (bookmarks belong to the reader, not the daily readings). - reader/settings nav + the download links move to a right-aligned .controls-side cluster; essential controls (date, lectionary, versions, parts, layout, mono) stay on the left. mono stops its change bubbling so it no longer refetches. Reader (reader.html + RenderPassage): a bookmarked verse now shows a red "*" (end of line in columns, after the verse number interlinear). Threaded a marked set (keyed "chap:verse") through the reader render path only; the daily RenderReadings path is untouched. Settings (settings.html): Save button moved to the top; removed offline (dead), width and pager (CLI/TUI-only, no web effect) -- their config values are preserved since the handler no longer reads/zeroes them. Footer: source/licence centred. Web tests + full suite green both build modes. --- internal/web/render_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'internal/web/render_test.go') diff --git a/internal/web/render_test.go b/internal/web/render_test.go index 94d5e6e..4cd1301 100644 --- a/internal/web/render_test.go +++ b/internal/web/render_test.go @@ -200,7 +200,7 @@ func TestRenderReadingsLocalizesEN(t *testing.T) { } func TestRenderPassageColumns(t *testing.T) { - html := string(RenderPassage("John", "John", 3, []string{"wuj"}, "vertical", "en")) + html := string(RenderPassage("John", "John", 3, []string{"wuj"}, "vertical", "en", nil)) if !strings.Contains(html, "John 3") { // passage heading, independent of the corpus t.Errorf("passage columns missing heading:\n%s", html) } @@ -213,7 +213,7 @@ func TestRenderPassageColumns(t *testing.T) { } func TestRenderPassageInterlinear(t *testing.T) { - html := string(RenderPassage("John", "John", 3, []string{"wuj", "vul"}, "interlinear", "en")) + html := string(RenderPassage("John", "John", 3, []string{"wuj", "vul"}, "interlinear", "en", nil)) if !strings.Contains(html, "3:16") { t.Errorf("interlinear missing verse:\n%s", html) } @@ -222,7 +222,7 @@ func TestRenderPassageInterlinear(t *testing.T) { func TestRenderPassageMissingVersion(t *testing.T) { // A non-existent chapter yields no verses: the column must carry the // "(not in wuj)" note, never a panic or an empty column. - html := string(RenderPassage("John", "John", 999, []string{"wuj"}, "vertical", "en")) + html := string(RenderPassage("John", "John", 999, []string{"wuj"}, "vertical", "en", nil)) if !strings.Contains(html, "wuj") { t.Errorf("missing-passage note absent:\n%s", html) } -- cgit v1.3