Replace posts/001/slug nesting with issue taxonomy

Use Hugo's `issue = "issues"` taxonomy so each post carries
`issues: ["01"]` in frontmatter. Issue pages live at /issues/01/
with a dedicated _index.md holding title, season, and description.
The /issues/ archive page uses data/issues.json for forthcoming
entries that have no posts yet.

Layouts:
- layouts/issues/list.html → plate grid for a single issue term
- layouts/issues/terms.html → issues archive (new)
- _default/single.html → scopes grid to issue term page, back-link to /issues/01/
- baseof.html → ribbon links to /issues/01/, JSON island includes issue field
- partials/header.html → Issues link → /issues/

JS:
- lbClose() navigates to /issues/${issueId}/ on a single-post page
- lightbox meta panel shows linked Issue fact

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-18 17:09:39 +02:00
parent a4463f03e3
commit 0ae8afbf7b
111 changed files with 334 additions and 70 deletions
+5 -3
View File
@@ -91,7 +91,7 @@
const path = location.pathname;
tabs.forEach(btn => {
const cat = btn.dataset.cat;
const active = (cat === 'All' && (path === '/' || path === '/posts/' || path.startsWith('/posts')))
const active = (cat === 'All' && (path === '/' || path.startsWith('/issue') || path === '/posts/'))
|| (cat !== 'All' && path.toLowerCase().includes(cat.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '')));
btn.setAttribute('aria-pressed', active ? 'true' : 'false');
});
@@ -222,9 +222,10 @@
if (!lb) return;
lb.dataset.open = 'false';
document.body.style.overflow = '';
// pop back to gallery if we're on a single-post URL
if (window.__ROUX_OPEN_SLUG) {
navigate('/');
const cur = lbList[lbIdx];
const issueId = (cur && cur.issue) || '01';
navigate(`/issues/${issueId}/`);
}
}
@@ -279,6 +280,7 @@
<p class="lb__desc">${esc(p.description)}</p>
<dl class="lb__factgrid">
<div class="lb__fact"><dt>Plate</dt><dd>№ ${esc(p.id)}</dd></div>
<div class="lb__fact"><dt>Issue</dt><dd><a href="/issues/${esc(p.issue || '01')}/" style="color:inherit;border-bottom:1px solid currentColor">№ ${esc(p.issue || '01')}</a></dd></div>
<div class="lb__fact"><dt>Category</dt><dd>${esc((p.categories||['—'])[0])}</dd></div>
</dl>
<div class="lb__tags">${tags.map(t => {