From f40fee44e8f256328ca1419863b5441123a1014e Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 10 Apr 2026 10:23:20 +0300 Subject: Release v0.1.0 Splash: skip via ?splash=0 on pagination to index; frosted panel and vignette for readable copy; brighter hint/tag colors. Pagination links only at bottom of each page. Tests updated for prev href to index. Made-with: Cursor --- internal/generator/doc.go | 3 +- internal/generator/generator.go | 11 ++- internal/generator/generator_test.go | 4 +- internal/generator/shared.go | 139 +++++++++++++++++++++++++++++++++- internal/generator/theme_aurora.go | 59 ++++++++++++++- internal/generator/theme_brutalist.go | 49 +++++++++++- internal/generator/theme_glass.go | 68 ++++++++++++++++- internal/generator/theme_matrix.go | 61 ++++++++++++++- internal/generator/theme_minimal.go | 63 ++++++++++++++- internal/generator/theme_neon.go | 67 ++++++++++++++-- internal/generator/theme_ocean.go | 57 +++++++++++++- internal/generator/theme_paper.go | 60 ++++++++++++++- internal/generator/theme_retro.go | 54 ++++++++++++- internal/generator/theme_synthwave.go | 72 +++++++++++++++++- internal/generator/theme_terminal.go | 48 +++++++++++- 15 files changed, 782 insertions(+), 33 deletions(-) (limited to 'internal/generator') diff --git a/internal/generator/doc.go b/internal/generator/doc.go index 55db6cb..b22ede6 100644 --- a/internal/generator/doc.go +++ b/internal/generator/doc.go @@ -9,7 +9,8 @@ // - themes.go — Theme registry (name → template string) and getTheme / // ListThemes for the CLI. // - theme_*.go — One file per visual theme: full-page HTML that invokes -// {{template "navhints" .}}, {{template "navmodal" .}}, {{template "navscript" .}}. +// {{template "splashGate"}}, {{template "navhints" .}}, {{template "navmodal" .}}, +// {{template "navscript" .}}. // - shared.go — navDefs: shared {{define}} blocks merged at parse time with // the chosen theme so a single html/template parse sees every name. // - templates.go — Short pointer: where templates and registry live. diff --git a/internal/generator/generator.go b/internal/generator/generator.go index 9fed673..e880ba3 100644 --- a/internal/generator/generator.go +++ b/internal/generator/generator.go @@ -114,6 +114,11 @@ func pageFilename(index int) string { return fmt.Sprintf("page%d.html", index+1) } +// indexPageNavURL is the href for pagination links to the first page. splash=0 +// is read by splashGate so the splash does not run (referrer is unreliable for +// keyboard / programmatic navigation from page2.html → index.html). +const indexPageNavURL = "index.html?splash=0" + // writePage renders one HTML page and writes it to cfg.OutputDir. func writePage(tmpl *template.Template, posts []*post.Post, pageIndex, totalPages int, cfg *config.Config) error { data := buildPageData(posts, pageIndex, totalPages) @@ -148,7 +153,11 @@ func buildPageData(posts []*post.Post, pageIndex, totalPages int) pageData { // "Prev" means newer — page index decreases. if pageIndex > 0 { - prevPage = pageFilename(pageIndex - 1) + if pageIndex == 1 { + prevPage = indexPageNavURL + } else { + prevPage = pageFilename(pageIndex - 1) + } } // "Next" means older — page index increases. diff --git a/internal/generator/generator_test.go b/internal/generator/generator_test.go index ba0964e..cfab15e 100644 --- a/internal/generator/generator_test.go +++ b/internal/generator/generator_test.go @@ -130,9 +130,9 @@ func TestBuildPageData_navLinks(t *testing.T) { name: "middle", pageIndex: 1, totalPages: 3, - wantPrev: "index.html", + wantPrev: "index.html?splash=0", wantNext: "page3.html", - wantPrevJSON: `"index.html"`, + wantPrevJSON: `"index.html?splash=0"`, wantNextJSON: `"page3.html"`, wantPostsCount: 1, }, diff --git a/internal/generator/shared.go b/internal/generator/shared.go index a34c5a5..583851c 100644 --- a/internal/generator/shared.go +++ b/internal/generator/shared.go @@ -1,15 +1,48 @@ package generator // navDefs is appended to every theme template when parsing. -// It defines three named sub-templates shared across all themes: +// It defines named sub-templates shared across all themes: +// - "splashGate" — synchronous script: first child of ; sets html.sno-splash-skip when +// splash should not run (?splash=0, not index.html, or Referer from same-site index/pageN). // - "navhints" — keyboard shortcut hint bar HTML // - "navmodal" — full-screen expanded-post modal HTML + image-sizing CSS // - "navscript" — keyboard navigation JavaScript with distinct sounds per action // -// Each theme calls {{template "navhints" .}}, {{template "navmodal" .}}, and -// {{template "navscript" .}} at the appropriate points in its HTML. +// Each theme calls {{template "splashGate"}}, {{template "navhints" .}}, {{template "navmodal" .}}, +// and {{template "navscript" .}} at the appropriate points in its HTML. // All theme-specific CSS lives in each theme file so themes stay self-contained. const navDefs = ` +{{define "splashGate"}} + +{{end}} + {{define "navhints"}}