diff options
| author | Kumar Damani <me@kumardamani.net> | 2026-08-03 16:38:58 +0000 |
|---|---|---|
| committer | Kumar Damani <me@kumardamani.net> | 2026-08-03 16:38:58 +0000 |
| commit | 7ccfffa85f120026e65d33bbac4b5735b8dd34bf (patch) | |
| tree | beeb4f7e7b91e17a5f5f3a3a47022733c5cf4dd2 | |
| parent | b88879f6b56e5b2465089a50d63d89a7c1ee5dd6 (diff) | |
added prev./next navigation to posts
| -rw-r--r-- | global/common.typ | 22 | ||||
| -rw-r--r-- | global/main.css | 8 |
2 files changed, 30 insertions, 0 deletions
diff --git a/global/common.typ b/global/common.typ index bc5731e..f5f5c6d 100644 --- a/global/common.typ +++ b/global/common.typ @@ -131,6 +131,26 @@ link(label-for(id), _preferred-title(id)) } +// Prev/next links between posts, shown at the bottom of post pages. Posts +// are ordered newest-first in site-info.pages; prev points to the older +// post, next to the newer one. +#let post-nav(pages, current) = { + let posts = pages.keys().filter(k => k.starts-with("post/")) + let i = posts.position(k => k == current) + + let prev = if i + 1 < posts.len() { posts.at(i + 1) } + let next = if i > 0 { posts.at(i - 1) } + + html.elem("nav", attrs: (class: "post-nav"), { + html.elem("span", if prev != none { + link(label-for(prev), [← prev]) + }) + html.elem("span", if next != none { + link(label-for(next), [next →]) + }) + }) +} + #let page( pagename, site-info, @@ -228,4 +248,6 @@ page-date body + + post-nav(site-info.pages, pagename) }) diff --git a/global/main.css b/global/main.css index a533e1f..345641c 100644 --- a/global/main.css +++ b/global/main.css @@ -352,6 +352,14 @@ tr + tr > td { margin-top: 0; } +/* prev/next navigation at the bottom of post pages */ +.post-nav { + display: flex; + justify-content: space-between; + margin-top: calc(2 * var(--elem-spacing)); + font: var(--shell-font); +} + figure { margin: 1em 0; text-align: center; |
