ia: Umbenennung — Library→Archiv, Wiki→Library (URLs, Content, Code)

Neue Informationsarchitektur:
- ARCHIV (/archiv) = die fertigen Texte (vormals Library): Essays mit Byline,
  Quellen/Zitieren, Dialog, Versionsverlauf. Section "archiv".
- LIBRARY (/library) = das verlinkte Werkstattwissen (vormals Wiki): zwei-
  spaltig mit Gruppen-Navigation + Filter. Section "library".

Umgesetzt:
- content/ + layouts/ verschoben (git mv), Menü (ARCHIV+LIBRARY, kein WIKI),
  Startseiten-Journal zieht jetzt Section "archiv", Querverweise umgeschrieben
  (/library→/archiv, /wiki→/library).
- CMS: files.js klassifiziert archiv/<sec>→beitrag, library/→biblio;
  stats.js + Admin (Typ "Library-Seite", KIND_LABEL, Pfade) nachgezogen.
- single.html: Byline/Provenance/Dialog an Section "archiv" gebunden.
- Beide Header zentriert (section-header) — einheitlicher Look.
- Interne Dialog-Werte (thread.kind='library', Forum "Beiträge") unverändert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-04 22:13:50 +02:00
parent 54f03270d0
commit 790141bafe
33 changed files with 208 additions and 215 deletions
+7 -6
View File
@@ -26,7 +26,8 @@ async function walk(dir) {
return out;
}
// Beitrag (library/<section>/<slug>.md) | Rubrik (_index.md) | Seite (sonst).
// Beitrag (archiv/<section>/<slug>.md) | Library-Seite (library/<slug>.md)
// | Rubrik (_index.md) | Seite (sonst).
function classify(rel) {
const base = path.basename(rel);
const parts = rel.split('/');
@@ -34,11 +35,11 @@ function classify(rel) {
const section = parts.length >= 2 ? parts[parts.length - 2] : 'home';
return { kind: 'rubrik', section };
}
if (parts[0] === 'library' && parts.length === 3) {
if (parts[0] === 'archiv' && parts.length === 3) {
return { kind: 'beitrag', section: parts[1] };
}
if (parts[0] === 'wiki') {
return { kind: 'wiki', section: 'wiki' };
if (parts[0] === 'library') {
return { kind: 'biblio', section: 'library' };
}
return { kind: 'seite', section: null };
}
@@ -85,8 +86,8 @@ export async function listEntries() {
url: urlFor(rel),
});
}
// Beiträge zuerst, dann Wiki, Seiten, Rubriken; je nach Datum/Titel.
const order = { beitrag: 0, wiki: 1, seite: 2, rubrik: 3 };
// Beiträge zuerst, dann Library, Seiten, Rubriken; je nach Datum/Titel.
const order = { beitrag: 0, biblio: 1, seite: 2, rubrik: 3 };
items.sort((a, b) =>
(order[a.kind] - order[b.kind]) ||
(b.date || '').localeCompare(a.date || '') ||
+2 -2
View File
@@ -9,11 +9,11 @@ stats.use('*', requireAdmin);
stats.get('/', async (c) => {
// Inhalte aus dem Dateisystem zählen.
const content = { beitraege: 0, entwuerfe: 0, wiki: 0, seiten: 0, rubriken: 0 };
const content = { beitraege: 0, entwuerfe: 0, library: 0, seiten: 0, rubriken: 0 };
try {
for (const e of await listEntries()) {
if (e.kind === 'beitrag') { content.beitraege++; if (e.draft) content.entwuerfe++; }
else if (e.kind === 'wiki') content.wiki++;
else if (e.kind === 'biblio') content.library++;
else if (e.kind === 'rubrik') content.rubriken++;
else content.seiten++;
}