<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lectio.git/internal/web/render.go, branch v0.45.1</title>
<subtitle>offline Catholic daily readings and liturgical calendar in Go, with CLI, TUI and web clients</subtitle>
<id>https://git.labunix.xyz/lectio.git/atom?h=v0.45.1</id>
<link rel='self' href='https://git.labunix.xyz/lectio.git/atom?h=v0.45.1'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/'/>
<updated>2026-07-29T12:24:16Z</updated>
<entry>
<title>web: declutter the UI, fix date arrows, red * for bookmarked verses in reader</title>
<updated>2026-07-29T12:24:16Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-29T12:24:16Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=855859bdaac101e7e87d5cb0237b7c30f4f4b371'/>
<id>urn:sha1:855859bdaac101e7e87d5cb0237b7c30f4f4b371</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>refactor: remove the niedziela/missalemeum scrapers, bt, traditional_lang</title>
<updated>2026-07-28T10:50:31Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T10:50:31Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=7b220084cf3951c8cde0582efdfcf628afc64336'/>
<id>urn:sha1:7b220084cf3951c8cde0582efdfcf628afc64336</id>
<content type='text'>
The daily view now computes entirely offline (previous commit), so retire the
network path and everything that served it:

- Delete internal/tradlit (missalemeum) and the niedziela scraper from
  internal/liturgy (fetch/store/parse + fixtures); keep Section, DayInfo and
  ExtractCitation.
- Remove the "bt" version everywhere (render gatherBT + branches, config,
  i18n, web form, TUI) and bible.ToEnglishRef (Polish citation converter).
  A legacy config carrying "bt" migrates to "wuj" on load (config.migrateBT).
- Remove the traditional_lang config field and the -g/--lang flag from all
  three binaries.
- Drop the now-dead flags -R/--refresh, -o/--offline, -u/--update,
  -C/--clean and the harvest/clean commands.
- New defaults: versions = wuj,vul,grb,drb; default_version = vul.

Update the README (offline-by-design, no harvest/update), help text, and
stale niedziela/bt doc comments. Tests updated for the offline reality;
go test ./... and go vet ./... are clean, all three binaries build and run
offline (OF + EF, compare, web).
</content>
</entry>
<entry>
<title>grb: strip SBLGNT apparatus markers (U+2E00–U+2E0D); render: show scripture ref in traditional headings; v0.12.0</title>
<updated>2026-07-24T12:23:55Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-24T12:23:55Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=a87f2fafbda90cc9eeb32ea856356c34e1d880b0'/>
<id>urn:sha1:a87f2fafbda90cc9eeb32ea856356c34e1d880b0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>web reader: /reader book picker + chapter nav + version compare, reusing pane templates; v0.9.0</title>
<updated>2026-07-24T10:48:05Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-24T10:48:05Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=55a5c793d04b55892fcddfc753d8526bd5748f03'/>
<id>urn:sha1:55a5c793d04b55892fcddfc753d8526bd5748f03</id>
<content type='text'>
</content>
</entry>
<entry>
<title>dayinfo: show feast/day name + colour (modern niedziela + traditional missalemeum) in cli/tui/web; v0.5.0</title>
<updated>2026-07-24T08:32:28Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-24T08:32:28Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=c9f3bf46f0de09edb796e35f3dcff349febf75c9'/>
<id>urn:sha1:c9f3bf46f0de09edb796e35f3dcff349febf75c9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>rename the pl scripture version to bt (Biblia Tysiąclecia); v0.4.0</title>
<updated>2026-07-24T07:55:36Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-24T07:55:36Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=a865374755480a4aef2a6156afccdf08a91422ea'/>
<id>urn:sha1:a865374755480a4aef2a6156afccdf08a91422ea</id>
<content type='text'>
The niedziela.pl scraped Polish paragraph text is the Biblia Tysiąclecia
translation; rename its version code from "pl" to "bt" and its i18n label
to "Biblia Tysiąclecia (niedziela.pl)" everywhere the scripture VERSION is
meant, across config, i18n, render, web, tui, cli and both binaries' help
text. Language-role "pl" (ui_language, traditional_lang, i18n.Get lang,
--lang validation) is untouched. Behavior is identical -- bt is still
dropped for offline/traditional and substituted with wuj.
</content>
</entry>
<entry>
<title>i18n: fix consistency-review gaps in ui_language (en/pl chrome)</title>
<updated>2026-07-23T20:08:56Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-23T20:08:56Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=390f8cb146c69d8d3a0e6e0d76ea3546f30a7611'/>
<id>urn:sha1:390f8cb146c69d8d3a0e6e0d76ea3546f30a7611</id>
<content type='text'>
Closes six findings from review of the ui_language feature so English
mode carries no leftover Polish UI text:

- Web: interlinear "no verses" note and the empty-day error fragment now
  route through i18n instead of being unconditionally Polish.
- render.GatherVersion/GatherVerses/resolveRef's four lookup/citation-
  failure blocks are now lang-aware (resolveRef gained a lang param).
- i18n.ErrorPrefix/NoReadingsFor lost a stray extra trailing space,
  restoring the pre-i18n single-space TUI concatenation.
- render.LocalizeHeading now matches a heading's actual leading label
  text against all known modern pl labels, rather than trusting the
  label keyed by sec.PartID -- fixes split-feast days where PartID is
  "drugie_czytanie" but the heading still reads "1. czytanie ...".
- cli bannerFor is lang-specific again (pl "na", en "for"), restoring
  pl's exact pre-i18n wording instead of "--" for both languages.
- index.html's &lt;html lang&gt; now follows cfg.UILanguage instead of being
  hardcoded "pl".

gofmt/vet clean, go test ./... green, all three binaries build, no new
go.mod deps. Consistency grep across cli/tui/web/render's live source
turns up only two non-displayed identifiers (a PartID slug list and a
pre-existing incipit-stripping constant on the pl scripture text itself).
</content>
</entry>
<entry>
<title>i18n: ui_language config (default en) for UI chrome across cli/tui/web; version labels localised</title>
<updated>2026-07-23T19:51:40Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-23T19:51:40Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=4c776396115c8120c3e1cb8fda993449fcdcd326'/>
<id>urn:sha1:4c776396115c8120c3e1cb8fda993449fcdcd326</id>
<content type='text'>
</content>
</entry>
<entry>
<title>web: horizontal/vertical/interlinear display modes + web_display config</title>
<updated>2026-07-23T13:00:17Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-23T13:00:17Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=aa6c9dad764089a3f0e287b5f90937e97dde3921'/>
<id>urn:sha1:aa6c9dad764089a3f0e287b5f90937e97dde3921</id>
<content type='text'>
Adds a display-layout option to lectio-web alongside the existing colour
themes:

- config: WebDisplay field (toml web_display), default "horizontal",
  normalized on load via the new exported config.NormalizeDisplay
  (unknown -&gt; "horizontal", same lenient style as the other web_* fields).
- render: extracts the citation/ToEnglishRef resolution shared by
  GatherVersion into an unexported resolveRef helper (GatherVersion's
  signature/behavior unchanged) and adds GatherVerses(version, sec,
  lectionary) returning raw bible.Verse structs plus a versified flag, for
  column/interlinear alignment.
- web/render: RenderReadings gains a display parameter. "horizontal" is
  the original stacked layout, byte-for-byte the same code path as
  before. "vertical" reuses the same per-version column data in a
  .display-vertical/.vcol grid (the CLI compare view, browser-side).
  "interlinear" maps versions through render.OfflineVersions' pl-&gt;wuj
  substitution (pl has no verse numbers), gathers GatherVerses per
  version, and interleaves them by chapter:verse into .ilverse/.illine
  blocks (ordered union of keys, first versified version's order first).
- server: adds a display &lt;select&gt; to the top bar wired into the existing
  #controls HTMX form; a resolveQuery(cfg, r) helper replaces the
  duplicated date/lectionary/all/versions(+now display) resolution in
  indexHandler and readingsHandler.
- fold-in from the B2 review: indexHandler now populates indexData.Lookup
  via a shared renderLookup(ref, versions) helper (also used by
  lookupHandler), so a bookmarked "/?ref=...&amp;v=..." link shows its
  lookup result instead of an empty pane.
- base.css: layout-only rules for the two new modes (no colours; themes
  stay colour-only).

go test ./..., go vet ./..., gofmt clean; go build ./cmd/lectio-web ok.
</content>
</entry>
<entry>
<title>web: HTMX server + lectio-web binary</title>
<updated>2026-07-23T12:39:31Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-23T12:39:31Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=4de7f7dca7485c9a6c94f6f86a53d01a974fce54'/>
<id>urn:sha1:4de7f7dca7485c9a6c94f6f86a53d01a974fce54</id>
<content type='text'>
NewServer wires B1's RenderReadings/Themes/themeCSS/embedded static+
templates FS into an http.ServeMux: GET / (full page), GET /readings
(HTMX reading-pane fragment), GET /lookup (bible.Lookup passage search
fragment), GET /theme.css (theme stylesheet, falling back through
cfg.WebTheme to the built-in default on an unknown name), GET /static/.
Run listens on cfg.WebPort (0 = OS-picked free port), prints the URL,
best-effort opens a browser, then serves. cmd/lectio-web is the binary
entry point (config.Load -&gt; web.Run).

Fold-in from the B1 review: hardened themeCSS's name guard to an
explicit ^[A-Za-z0-9_-]+$ allowlist (the old filepath.Base/ContainsAny
check let ".." through), plus guard-rejection and HTML-escaping
regression tests -- B2 is what makes /theme.css?name=&lt;raw&gt; reachable
from the network, so it owns closing this out.
</content>
</entry>
</feed>
