aboutsummaryrefslogtreecommitdiff
path: root/internal/web/templates
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-07-24 12:48:05 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-07-24 12:48:05 +0200
commit55a5c793d04b55892fcddfc753d8526bd5748f03 (patch)
treeb045946a62a0b849b5c77a4100294d935ab741dd /internal/web/templates
parented34fd574b4fc2e0a52c655ececddd1be29b271e (diff)
downloadlectio-55a5c793d04b55892fcddfc753d8526bd5748f03.tar.gz
lectio-55a5c793d04b55892fcddfc753d8526bd5748f03.zip
web reader: /reader book picker + chapter nav + version compare, reusing pane templates; v0.9.0
Diffstat (limited to 'internal/web/templates')
-rw-r--r--internal/web/templates/index.html2
-rw-r--r--internal/web/templates/reader.html72
2 files changed, 74 insertions, 0 deletions
diff --git a/internal/web/templates/index.html b/internal/web/templates/index.html
index 780224f..26854a8 100644
--- a/internal/web/templates/index.html
+++ b/internal/web/templates/index.html
@@ -57,6 +57,8 @@
<option value="interlinear" {{if eq .Display "interlinear"}}selected{{end}}>{{.L.OptInterlinear}}</option>
</select>
</label>
+
+ <a class="nav-link" href="/reader">{{.L.NavReader}} &rarr;</a>
</form>
<label class="theme-picker">{{.L.Theme}}
diff --git a/internal/web/templates/reader.html b/internal/web/templates/reader.html
new file mode 100644
index 0000000..c82d08e
--- /dev/null
+++ b/internal/web/templates/reader.html
@@ -0,0 +1,72 @@
+{{/* reader.html — lectio-web Bible reader: pick a book (sigla-dialect names),
+ navigate chapters, compare corpus versions. The controls form re-fetches
+ /reader and hx-selects #reader-root (so the book/chapter/version selects
+ re-render in sync); the theme/mono controls live OUTSIDE #reader-root so
+ they persist across swaps, exactly like index.html. Reuses the same
+ reading-pane templates, role classes and themes as the daily view. */}}
+<!doctype html>
+<html lang="{{.Lang}}">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>lectio — reader</title>
+<link rel="stylesheet" href="/static/base.css">
+<link id="theme" rel="stylesheet" href="/theme.css?name={{.Theme}}">
+<script src="/static/htmx.min.js"></script>
+</head>
+<body{{if .Mono}} class="mono"{{end}}>
+<div class="page">
+ <div id="reader-root">
+ <form class="controls" action="/reader" method="get"
+ hx-get="/reader" hx-target="#reader-root" hx-select="#reader-root" hx-swap="outerHTML" hx-trigger="change">
+ <a class="nav-link" href="/">&larr; {{.L.BannerReadings}}</a>
+
+ <label>{{.L.WebBook}}
+ <select name="book">
+ {{range .BookOpts}}<option value="{{.Value}}" {{if .Selected}}selected{{end}}>{{.Label}}</option>{{end}}
+ </select>
+ </label>
+
+ <span class="chap-nav">
+ <button type="button" hx-get="/reader" hx-target="#reader-root" hx-select="#reader-root"
+ hx-swap="outerHTML" hx-vals='{"chap":"{{.PrevChap}}"}'>&larr;</button>
+ <label>{{.L.WebChapter}}
+ <select name="chap">
+ {{range .ChapOpts}}<option value="{{.N}}" {{if .Selected}}selected{{end}}>{{.N}}</option>{{end}}
+ </select>
+ </label>
+ <button type="button" hx-get="/reader" hx-target="#reader-root" hx-select="#reader-root"
+ hx-swap="outerHTML" hx-vals='{"chap":"{{.NextChap}}"}'>&rarr;</button>
+ </span>
+
+ {{range .VersionOpts}}
+ <label><input type="checkbox" name="v" value="{{.Code}}" {{if .Checked}}checked{{end}}> {{.Code}}</label>
+ {{end}}
+
+ <label>{{.L.Layout}}
+ <select name="display">
+ <option value="vertical" {{if eq .Display "vertical"}}selected{{end}}>{{.L.OptColumns}}</option>
+ <option value="horizontal" {{if eq .Display "horizontal"}}selected{{end}}>{{.L.OptHorizontal}}</option>
+ <option value="interlinear" {{if eq .Display "interlinear"}}selected{{end}}>{{.L.OptInterlinear}}</option>
+ </select>
+ </label>
+
+ <div id="pane">{{.Reading}}</div>
+ </form>
+ </div>
+
+ <label class="theme-picker">{{.L.Theme}}
+ <select id="theme-select"
+ onchange="var o=document.getElementById('theme'),n=o.cloneNode(false);n.setAttribute('href','/theme.css?name='+encodeURIComponent(this.value));o.replaceWith(n);">
+ {{range .ThemeOpts}}
+ <option value="{{.Name}}" {{if .Selected}}selected{{end}}>{{.Name}}</option>
+ {{end}}
+ </select>
+ </label>
+
+ <label class="mono-toggle"><input type="checkbox" {{if .Mono}}checked{{end}}
+ onchange="document.body.classList.toggle('mono', this.checked)"> {{.L.Mono}}</label>
+
+</div>
+</body>
+</html>