aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* dayinfo: show feast/day name + colour (modern niedziela + traditional ↵Lukasz Kasprzak2026-07-2421-112/+599
| | | | missalemeum) in cli/tui/web; v0.5.0
* rename the pl scripture version to bt (Biblia Tysiąclecia); v0.4.0Lukasz Kasprzak2026-07-2416-86/+86
| | | | | | | | | | 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.
* cli: keep real terminal width when paging; validate -c list before pagerLukasz Kasprzak2026-07-241-3/+19
|
* cli: pager for reading output (-P/--pager, --no-pager, config pager, $PAGER ↵Lukasz Kasprzak2026-07-246-10/+261
| | | | fallback); v0.3.0
* tradlit: offline caching + read; update pre-caches traditional; --clean ↵Lukasz Kasprzak2026-07-2410-48/+314
| | | | prunes it; v0.2.0
* cli-ui,web: real flag parsing for lectio-ui/lectio-web (accept useful flags, ↵Lukasz Kasprzak2026-07-238-41/+518
| | | | reject unknown, -h/-v)
* tui: honor config all; r-key forces refresh (bypass cache); clamp scroll in ↵Lukasz Kasprzak2026-07-231-22/+37
| | | | Update (no over-scroll)
* tui: fix width-wrap garbling + straight-aligned verse column (export ↵Lukasz Kasprzak2026-07-237-21/+73
| | | | render.Wrap, hanging indent); strip niedziela summary subtitle (tui/cli/web); web verse grid alignment; refrain-italic pl-only
* cli,tui,web: share traditional+offline pl-drop via render.EffectiveVersions; ↵Lukasz Kasprzak2026-07-234-18/+31
| | | | -v/--version any position
* cli,liturgy: lectio --clean prunes readings cache older than one yearLukasz Kasprzak2026-07-234-1/+233
|
* i18n: fix consistency-review gaps in ui_language (en/pl chrome)Lukasz Kasprzak2026-07-2312-76/+387
| | | | | | | | | | | | | | | | | | | | | | | | | 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 <html lang> 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).
* i18n: ui_language config (default en) for UI chrome across cli/tui/web; ↵Lukasz Kasprzak2026-07-2315-84/+600
| | | | version labels localised
* web: no-store responses + robust theme-link swap (fixes stale-cache 'theme ↵Lukasz Kasprzak2026-07-232-2/+12
| | | | switch stopped working')
* config,web: web_versions — which version checkboxes start toggled on in ↵Lukasz Kasprzak2026-07-234-0/+14
| | | | lectio-web
* config: parts.new preset to false (uncomment=hide); drop dead ↵Lukasz Kasprzak2026-07-231-21/+12
| | | | parts.traditional; clarify web_theme/web_display are the web defaults
* web: distinct per-theme fonts + bolder accents; memento_mori bare monospaceLukasz Kasprzak2026-07-2317-61/+102
|
* tui: respect terminal colours (ANSI palette + attributes); reverse-video ↵Lukasz Kasprzak2026-07-231-28/+24
| | | | bars for legible header/footer
* cli: flag-driven interface (short+long); -u maximal blip-proof harvestLukasz Kasprzak2026-07-234-232/+362
| | | | | | | | | | | | | | Replace the today/date/show/compare/update subcommands with a single flag-driven interface like the Python predecessor: lectio [DATE] -a/-b/-c/-r/-w/-R/-o/-l/-g/-u, short and long names bound to the same variable, DATE (YYYY-MM-DD) extracted from any position in the args. Fix Harvest's "-u" to walk to the true maximal horizon without a transient network error being mistaken for it: a fetch failure now retries a few times with backoff and, if it still fails, is reported as an error (after saving partial progress via writeSigla), while a Parse failure (the real unpublished-horizon placeholder) still stops cleanly with a nil error.
* web: check boxes for the effective (post-substitution) versions; tidy ↵Lukasz Kasprzak2026-07-232-3/+5
| | | | controls comment
* web: theme control boxes, one default version, drop search bar; traditional ↵Lukasz Kasprzak2026-07-239-128/+67
| | | | drops pl + all=readings-only
* docs(plan): update theme amendment to final 14-theme set + mono toggleLukasz Kasprzak2026-07-231-7/+9
|
* web: remove deus_vult theme; add global monospace toggle (web_mono config + ↵Lukasz Kasprzak2026-07-2311-58/+34
| | | | top-bar 'mono')
* web: deus_vult armor-grey ground; dominicans pure black & whiteLukasz Kasprzak2026-07-234-25/+23
|
* docs(plan): note final 15-theme set + --theme-font amendmentLukasz Kasprzak2026-07-231-0/+13
|
* web: add dominicans/marian/epiphany themes + --theme-font hook (memento_mori ↵Lukasz Kasprzak2026-07-238-14/+184
| | | | monospace)
* web,liturgy: validate date against path traversal; bind lectio-web to localhostLukasz Kasprzak2026-07-234-8/+110
| | | | | | | | | | | | | | | | | An unvalidated ?date= query param flowed straight into liturgy.Load's filepath.Join(dir, date+".json"/".html") before any network call, letting a crafted date (e.g. "../../../../etc/hostname") read an arbitrary file whose JSON, if present, unmarshals into []liturgy.Section and renders back to the client. Fix both layers: resolveQuery now falls back to today() on empty or non-YYYY-MM-DD date (mirroring requestDisplay's normalize-don't-trust pattern), and liturgy.Load itself rejects a non-matching date before building any cache path, protecting every caller even if a future one forgets to validate. Also bind lectio-web's listener to 127.0.0.1 instead of all interfaces: it is a personal tool whose Run already prints http://localhost:<port>, so it should not be reachable from the LAN.
* web: theme revisions — drop camaldolese, add deus_vult (silver/white/red); ↵Lukasz Kasprzak2026-07-236-27/+28
| | | | pentecost -> red/white/gold; darker franciscans
* docs: README; wire lectio-web into build; finalizeLukasz Kasprzak2026-07-233-7/+299
| | | | | | | | | | Add README.md documenting all three binaries (lectio, lectio-ui, lectio-web), config keys, the 12 themes, display modes, offline/update workflow, and both lectionaries, surveyed against the real source. Wire the third binary into Makefile's build/install/uninstall/clean/cross targets (LECTIO_WEB var, ./cmd/lectio-web) and add /lectio-web to .gitignore, matching the existing lectio/lectio-ui style.
* web: default lectio-web to port 1099 with free-port fallbackLukasz Kasprzak2026-07-233-8/+85
| | | | | | | | | | | | | chooseListener(port) factors the listen logic out of Run: port==0 now tries defaultWebPort (1099) first and only falls back to an OS-picked free port if 1099 is taken; a non-zero port is still bound exactly, surfacing its bind error as before. config.Default() keeps WebPort: 0 unchanged (0 still means "auto"). Adds TestChooseListener, robust to sandboxes that can't bind 1099 or :0 (t.Skip instead of failing). Also folds the ?ref= whitespace trim into renderLookup itself so GET / and GET /lookup treat a whitespace-only ref identically (previously only lookupHandler trimmed it).
* web: horizontal/vertical/interlinear display modes + web_display configLukasz Kasprzak2026-07-2314-74/+664
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 -> "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->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 <select> 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=...&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.
* web: rename theme camedules -> camaldoleseLukasz Kasprzak2026-07-235-7/+7
|
* web: HTMX server + lectio-web binaryLukasz Kasprzak2026-07-237-4/+577
| | | | | | | | | | | | | | | | | 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 -> 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=<raw> reachable from the network, so it owns closing this out.
* web: HTML render + embedded themesLukasz Kasprzak2026-07-2318-0/+1138
|
* config: add web_theme/web_port fieldsLukasz Kasprzak2026-07-233-0/+31
| | | | | | | | | | | | Add WebTheme (default: "transfiguration") and WebPort (default: 0) to Config for the upcoming lectio-web binary. WebTheme resolves theme names (built-in or user files) later in internal/web; WebPort 0 means auto-pick a free port. - Updated Config struct with new fields - Set defaults in Default() - Updated embedded seed config.toml with documentation - Added TDD tests: TestWebDefaults and TestWebLoadsFromSeed - Existing tests (TestLoadSeeds, TestLoadOverride) still pass
* Addendum B themes: religious orders + liturgical seasons, colour-only, ↵Łukasz2026-07-232-51/+109
| | | | | | | | | | | | user-extensible Replace dev-palette themes with original ascetic sets: religious orders (desert_fathers, benedictines, franciscans, memento_mori, camedules) and liturgical seasons (advent, nativity, lent, easter, pentecost, ordinary), plus transfiguration (default). Colour-only, no gimmicks (base.css owns all layout/type). Users can drop *.css in ~/.config/lectio/themes/; web_theme accepts any, serve-time fallback. docs/THEMES.md documents the role classes.
* tui: colored reader + version switchLukasz Kasprzak2026-07-236-3/+511
|
* Addendum B: expand to 10 named themes (add ↵Łukasz2026-07-232-9/+24
| | | | dracula/solarized/everforest/rosepine/onedark)
* liturgy: LoadOffline sets PartID (fix offline gospel-only)Lukasz Kasprzak2026-07-232-3/+15
|
* Addendum B themes: named palettes (transfiguration + ↵Łukasz2026-07-232-11/+37
| | | | catppuccin/tokyonight/gruvbox/nord), ascetic
* Spec+plan: Addendum B — lectio-web (HTMX UI, selectable themes)Łukasz2026-07-232-0/+118
| | | | | | | | | Third binary lectio-web: hledger-web-style local server, HTMX partial swaps, embedded templates/CSS/htmx (self-contained). Date/lectionary/ version/all controls + passage lookup, driving the shared readings+render core. Five embedded themes (light/dark/sepia/parchment/nord) switchable live, defaulted via config web_theme; web_port config. Builds after the CLI/TUI/README tasks.
* cli: subcommand dispatchLukasz Kasprzak2026-07-234-1/+556
|
* render: gather versions + compare + dedupLukasz Kasprzak2026-07-232-0/+303
|
* readings: lectionary router + part filteringLukasz Kasprzak2026-07-233-0/+179
|
* tradlit: missalemeum 1962 propers -> sectionsLukasz Kasprzak2026-07-233-0/+157
|
* config: TOML load + seedLukasz Kasprzak2026-07-235-0/+250
|
* liturgy: sigla harvest + offline loadLukasz Kasprzak2026-07-233-4/+233
|
* liturgy: fetch + HTML/JSON cacheLukasz Kasprzak2026-07-232-0/+186
|
* liturgy: Section type + HTML parse (fixtures)Lukasz Kasprzak2026-07-235-0/+5835
| | | | | | | | | | | | | | | | Ports parse_sections, html_to_lines, extract_reference from ewangelia.py. Parse(html) prefers the tabnowy0all lectionary tab (falls back to tabstary0all) and errors loudly if the tab is present-but-empty or absent. ExtractCitation(heading) pulls the parenthetical citation. Section gains a PartID field (Addendum A): set from the heading prefix (1. czytanie -> pierwsze_czytanie, a second same-day 1. czytanie -> drugie_czytanie, Psalm -> psalm, Aklamacja -> aklamacja, Ewangelia -> ewangelia; anything else -> ""). Adds testdata/2026-07-22.html (split-feast day, two 1. czytanie sections) and testdata/2026-06-22.html (normal day), copied from ~/.cache/daily-reading/.
* bible: Polish citation -> English ref (with psalm versification)Lukasz Kasprzak2026-07-232-0/+146
|
* bible: reference grammar + LookupLukasz Kasprzak2026-07-232-0/+109
|