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:
+4
-13
@@ -719,19 +719,10 @@ a.byline-author:hover, a.journal-author:hover { color: var(--accent); }
|
|||||||
.dialog-hint { font-size: var(--font-size-small); color: var(--color-text-muted); align-self: center; opacity: 0.7; }
|
.dialog-hint { font-size: var(--font-size-small); color: var(--color-text-muted); align-self: center; opacity: 0.7; }
|
||||||
.dialog-spacer { flex: 1; }
|
.dialog-spacer { flex: 1; }
|
||||||
|
|
||||||
/* ── Wiki: vollbreiter Section-Header (wie Library) + zwei Spalten darunter.
|
/* ── Library/Wiki-Bereich: zentrierter Section-Header (wie Archiv) darüber,
|
||||||
Gleiche max-width/Zentrierung wie der normale Inhalt → Wiki- und Library-
|
zweispaltige Fläche (Seitenleiste + Inhalt) darunter. ── */
|
||||||
Header fluchten exakt. ── */
|
.wiki { display: grid; grid-template-columns: 200px 1fr; gap: 2.6em; align-items: start; }
|
||||||
.wiki {
|
@media (max-width: 760px) { .wiki { grid-template-columns: 1fr; gap: 1.4em; } .wiki-side { position: static; } }
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 200px 1fr;
|
|
||||||
column-gap: 2.6em; row-gap: var(--spacing-sm);
|
|
||||||
align-items: start;
|
|
||||||
max-width: calc(var(--container-width) + 3.5rem);
|
|
||||||
margin-inline: auto;
|
|
||||||
}
|
|
||||||
.wiki > .section-header { grid-column: 1 / -1; margin-top: 0; }
|
|
||||||
@media (max-width: 760px) { .wiki { grid-template-columns: 1fr; column-gap: 0; } .wiki-side { position: static; } }
|
|
||||||
.wiki-side { position: sticky; top: 1em; align-self: start; }
|
.wiki-side { position: sticky; top: 1em; align-self: start; }
|
||||||
.wiki-nav { display: flex; flex-direction: column; gap: 0.35em; font-size: var(--font-size-small); }
|
.wiki-nav { display: flex; flex-direction: column; gap: 0.35em; font-size: var(--font-size-small); }
|
||||||
.wiki-nav-home { text-decoration: none; color: var(--color-text-primary); font-weight: 600; }
|
.wiki-nav-home { text-decoration: none; color: var(--color-text-primary); font-weight: 600; }
|
||||||
|
|||||||
+10
-10
@@ -22,7 +22,7 @@ const hexOf = (name) => (COLORS.find((c) => c[0] === name) || [])[2] || 'transpa
|
|||||||
|
|
||||||
const LAYOUTS = ['', 'text', 'image', 'icon'];
|
const LAYOUTS = ['', 'text', 'image', 'icon'];
|
||||||
const SECTIONS = ['buerofuehrung', 'software', 'theorie'];
|
const SECTIONS = ['buerofuehrung', 'software', 'theorie'];
|
||||||
const KIND_LABEL = { beitrag: 'Beiträge', wiki: 'Wiki', seite: 'Seiten', rubrik: 'Rubriken' };
|
const KIND_LABEL = { beitrag: 'Beiträge', biblio: 'Library', seite: 'Seiten', rubrik: 'Rubriken' };
|
||||||
|
|
||||||
const EMPTY = {
|
const EMPTY = {
|
||||||
isNew: true, path: '', type: 'beitrag', section: 'software', slug: '',
|
isNew: true, path: '', type: 'beitrag', section: 'software', slug: '',
|
||||||
@@ -89,7 +89,7 @@ function Dashboard({ email }) {
|
|||||||
|
|
||||||
const q = query.trim().toLowerCase();
|
const q = query.trim().toLowerCase();
|
||||||
const filtered = q ? entries.filter((e) => e.title.toLowerCase().includes(q) || (e.section || '').includes(q)) : entries;
|
const filtered = q ? entries.filter((e) => e.title.toLowerCase().includes(q) || (e.section || '').includes(q)) : entries;
|
||||||
const groups = { beitrag: [], wiki: [], seite: [], rubrik: [] };
|
const groups = { beitrag: [], biblio: [], seite: [], rubrik: [] };
|
||||||
for (const e of filtered) (groups[e.kind] || groups.seite).push(e);
|
for (const e of filtered) (groups[e.kind] || groups.seite).push(e);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -126,7 +126,7 @@ function Dashboard({ email }) {
|
|||||||
<aside>
|
<aside>
|
||||||
<button className="new" onClick={() => setCurrent({ ...EMPTY })}>+ Neuer Beitrag</button>
|
<button className="new" onClick={() => setCurrent({ ...EMPTY })}>+ Neuer Beitrag</button>
|
||||||
<div className="search"><span>⌕</span><input placeholder="Suchen…" value={query} onChange={(e) => setQuery(e.target.value)} /></div>
|
<div className="search"><span>⌕</span><input placeholder="Suchen…" value={query} onChange={(e) => setQuery(e.target.value)} /></div>
|
||||||
{['beitrag', 'wiki', 'seite', 'rubrik'].map((kind) => groups[kind].length > 0 && (
|
{['beitrag', 'biblio', 'seite', 'rubrik'].map((kind) => groups[kind].length > 0 && (
|
||||||
<div className="group" key={kind}>
|
<div className="group" key={kind}>
|
||||||
<div className="group-title">{KIND_LABEL[kind]} <span>{groups[kind].length}</span></div>
|
<div className="group-title">{KIND_LABEL[kind]} <span>{groups[kind].length}</span></div>
|
||||||
<ul className="list">
|
<ul className="list">
|
||||||
@@ -169,7 +169,7 @@ function Editor({ initial, onSaved, onMsg }) {
|
|||||||
const dragging = useRef(false);
|
const dragging = useRef(false);
|
||||||
const coverIn = useRef(null);
|
const coverIn = useRef(null);
|
||||||
const set = (k) => (e) => setF({ ...f, [k]: e.target.type === 'checkbox' ? e.target.checked : e.target.value });
|
const set = (k) => (e) => setF({ ...f, [k]: e.target.type === 'checkbox' ? e.target.checked : e.target.value });
|
||||||
const isWiki = f.type === 'wiki' || (f.path || '').startsWith('wiki/');
|
const isWiki = f.type === 'biblio' || (f.path || '').startsWith('library/');
|
||||||
|
|
||||||
async function pickCover(ev) {
|
async function pickCover(ev) {
|
||||||
const file = ev.target.files?.[0]; ev.target.value = '';
|
const file = ev.target.files?.[0]; ev.target.value = '';
|
||||||
@@ -198,8 +198,8 @@ function Editor({ initial, onSaved, onMsg }) {
|
|||||||
if (!data.isNew) return data.path;
|
if (!data.isNew) return data.path;
|
||||||
const slug = (data.slug || '').trim();
|
const slug = (data.slug || '').trim();
|
||||||
if (!slug) return '';
|
if (!slug) return '';
|
||||||
if (data.type === 'beitrag') return `library/${data.section}/${slug}.md`;
|
if (data.type === 'beitrag') return `archiv/${data.section}/${slug}.md`;
|
||||||
if (data.type === 'wiki') return `wiki/${slug}.md`;
|
if (data.type === 'biblio') return `library/${slug}.md`;
|
||||||
return `${slug}.md`;
|
return `${slug}.md`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,7 +256,7 @@ function Editor({ initial, onSaved, onMsg }) {
|
|||||||
<label className="sm">Typ
|
<label className="sm">Typ
|
||||||
<select value={f.type} onChange={set('type')}>
|
<select value={f.type} onChange={set('type')}>
|
||||||
<option value="beitrag">Beitrag</option>
|
<option value="beitrag">Beitrag</option>
|
||||||
<option value="wiki">Wiki-Seite</option>
|
<option value="biblio">Library-Seite</option>
|
||||||
<option value="seite">Seite</option>
|
<option value="seite">Seite</option>
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
@@ -423,7 +423,7 @@ function Overview({ onMsg, go }) {
|
|||||||
<h2>Übersicht</h2>
|
<h2>Übersicht</h2>
|
||||||
<div className="stat-grid">
|
<div className="stat-grid">
|
||||||
<Card label="Beiträge" value={s.content.beitraege} hint={`${s.content.entwuerfe} Entwürfe`} to="content" />
|
<Card label="Beiträge" value={s.content.beitraege} hint={`${s.content.entwuerfe} Entwürfe`} to="content" />
|
||||||
<Card label="Wiki-Seiten" value={s.content.wiki} to="content" />
|
<Card label="Library-Seiten" value={s.content.library} to="content" />
|
||||||
<Card label="Seiten" value={s.content.seiten} />
|
<Card label="Seiten" value={s.content.seiten} />
|
||||||
<Card label="Autor:innen" value={s.users.total} hint={`${s.users.admin} Admin · ${s.users.editor} Red.`} to="users" />
|
<Card label="Autor:innen" value={s.users.total} hint={`${s.users.admin} Admin · ${s.users.editor} Red.`} to="users" />
|
||||||
<Card label="Foren" value={s.dialog.forums} to="forums" />
|
<Card label="Foren" value={s.dialog.forums} to="forums" />
|
||||||
@@ -438,7 +438,7 @@ function Overview({ onMsg, go }) {
|
|||||||
<button onClick={() => go('users')}>Autor:innen & Rollen</button>
|
<button onClick={() => go('users')}>Autor:innen & Rollen</button>
|
||||||
<a className="quick-link" href="/" target="_blank" rel="noreferrer">Website ↗</a>
|
<a className="quick-link" href="/" target="_blank" rel="noreferrer">Website ↗</a>
|
||||||
<a className="quick-link" href="/dialog/" target="_blank" rel="noreferrer">Dialog ↗</a>
|
<a className="quick-link" href="/dialog/" target="_blank" rel="noreferrer">Dialog ↗</a>
|
||||||
<a className="quick-link" href="/wiki/" target="_blank" rel="noreferrer">Wiki ↗</a>
|
<a className="quick-link" href="/library/" target="_blank" rel="noreferrer">Library ↗</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -681,7 +681,7 @@ function slugify(s) {
|
|||||||
function fromRead(r) {
|
function fromRead(r) {
|
||||||
const fm = r.frontmatter || {};
|
const fm = r.frontmatter || {};
|
||||||
const p = r.path || '';
|
const p = r.path || '';
|
||||||
const type = p.startsWith('library/') ? 'beitrag' : p.startsWith('wiki/') ? 'wiki' : 'seite';
|
const type = p.startsWith('archiv/') ? 'beitrag' : p.startsWith('library/') ? 'biblio' : 'seite';
|
||||||
return {
|
return {
|
||||||
isNew: false, path: r.path, type, section: '', slug: '',
|
isNew: false, path: r.path, type, section: '', slug: '',
|
||||||
title: fm.title || '', date: fm.date ? String(fm.date).slice(0, 10) : '',
|
title: fm.title || '', date: fm.date ? String(fm.date).slice(0, 10) : '',
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ async function walk(dir) {
|
|||||||
return out;
|
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) {
|
function classify(rel) {
|
||||||
const base = path.basename(rel);
|
const base = path.basename(rel);
|
||||||
const parts = rel.split('/');
|
const parts = rel.split('/');
|
||||||
@@ -34,11 +35,11 @@ function classify(rel) {
|
|||||||
const section = parts.length >= 2 ? parts[parts.length - 2] : 'home';
|
const section = parts.length >= 2 ? parts[parts.length - 2] : 'home';
|
||||||
return { kind: 'rubrik', section };
|
return { kind: 'rubrik', section };
|
||||||
}
|
}
|
||||||
if (parts[0] === 'library' && parts.length === 3) {
|
if (parts[0] === 'archiv' && parts.length === 3) {
|
||||||
return { kind: 'beitrag', section: parts[1] };
|
return { kind: 'beitrag', section: parts[1] };
|
||||||
}
|
}
|
||||||
if (parts[0] === 'wiki') {
|
if (parts[0] === 'library') {
|
||||||
return { kind: 'wiki', section: 'wiki' };
|
return { kind: 'biblio', section: 'library' };
|
||||||
}
|
}
|
||||||
return { kind: 'seite', section: null };
|
return { kind: 'seite', section: null };
|
||||||
}
|
}
|
||||||
@@ -85,8 +86,8 @@ export async function listEntries() {
|
|||||||
url: urlFor(rel),
|
url: urlFor(rel),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Beiträge zuerst, dann Wiki, Seiten, Rubriken; je nach Datum/Titel.
|
// Beiträge zuerst, dann Library, Seiten, Rubriken; je nach Datum/Titel.
|
||||||
const order = { beitrag: 0, wiki: 1, seite: 2, rubrik: 3 };
|
const order = { beitrag: 0, biblio: 1, seite: 2, rubrik: 3 };
|
||||||
items.sort((a, b) =>
|
items.sort((a, b) =>
|
||||||
(order[a.kind] - order[b.kind]) ||
|
(order[a.kind] - order[b.kind]) ||
|
||||||
(b.date || '').localeCompare(a.date || '') ||
|
(b.date || '').localeCompare(a.date || '') ||
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ stats.use('*', requireAdmin);
|
|||||||
|
|
||||||
stats.get('/', async (c) => {
|
stats.get('/', async (c) => {
|
||||||
// Inhalte aus dem Dateisystem zählen.
|
// 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 {
|
try {
|
||||||
for (const e of await listEntries()) {
|
for (const e of await listEntries()) {
|
||||||
if (e.kind === 'beitrag') { content.beitraege++; if (e.draft) content.entwuerfe++; }
|
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 if (e.kind === 'rubrik') content.rubriken++;
|
||||||
else content.seiten++;
|
else content.seiten++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: "Archiv"
|
||||||
|
description: "Das Archiv von OPENBUREAU — fertige Texte, Recherchen, Anleitungen."
|
||||||
|
---
|
||||||
|
|
||||||
|
Das Archiv ist die Sammlung der fertigen Texte. Alles, was gelesen und geschrieben wird, lebt hier — thematisch organisiert; das **Journal** auf der Startseite zeigt dieselben Inhalte chronologisch.
|
||||||
+1
-1
@@ -11,7 +11,7 @@ Offen zu arbeiten heißt nicht, alles zu verschenken. Es heißt, die Grundlagen
|
|||||||
|
|
||||||
Die rechtliche Absicherung dafür sind Lizenzen. Inhalte auf OPENBUREAU stehen unter CC BY-SA,[^ccbysa] der Code überwiegend unter AGPL oder MIT.[^agpl] Beide sorgen dafür, dass Offenheit weitergegeben wird, statt verloren zu gehen.
|
Die rechtliche Absicherung dafür sind Lizenzen. Inhalte auf OPENBUREAU stehen unter CC BY-SA,[^ccbysa] der Code überwiegend unter AGPL oder MIT.[^agpl] Beide sorgen dafür, dass Offenheit weitergegeben wird, statt verloren zu gehen.
|
||||||
|
|
||||||
Verwandt: Der [Werkzeug-Stack](/library/software/stack/) zeigt, womit wir das konkret tun.
|
Verwandt: Der [Werkzeug-Stack](/archiv/software/stack/) zeigt, womit wir das konkret tun.
|
||||||
|
|
||||||
[^ccbysa]: Creative Commons, *Attribution-ShareAlike 4.0 International* (CC BY-SA 4.0), <https://creativecommons.org/licenses/by-sa/4.0/>.
|
[^ccbysa]: Creative Commons, *Attribution-ShareAlike 4.0 International* (CC BY-SA 4.0), <https://creativecommons.org/licenses/by-sa/4.0/>.
|
||||||
[^agpl]: Free Software Foundation, *GNU Affero General Public License v3.0*, 2007.
|
[^agpl]: Free Software Foundation, *GNU Affero General Public License v3.0*, 2007.
|
||||||
+1
-1
@@ -14,4 +14,4 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor i
|
|||||||
|
|
||||||
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
|
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
|
||||||
|
|
||||||
Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet — [Werkzeuge](/library/werkzeuge).
|
Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet — [Werkzeuge](/archiv/werkzeuge).
|
||||||
+1
-1
@@ -7,7 +7,7 @@ color: yuyake
|
|||||||
layout: text
|
layout: text
|
||||||
---
|
---
|
||||||
|
|
||||||
Die Werkzeuge des Büros sind keine Inseln, sondern eine Kette: [DOSSIER](/library/software/dossier/) hält die Projektdaten, [RAPPORT](/library/software/rapport/) erzeugt Berichte daraus, und diese Site veröffentlicht, was öffentlich sein soll.
|
Die Werkzeuge des Büros sind keine Inseln, sondern eine Kette: [DOSSIER](/archiv/software/dossier/) hält die Projektdaten, [RAPPORT](/archiv/software/rapport/) erzeugt Berichte daraus, und diese Site veröffentlicht, was öffentlich sein soll.
|
||||||
|
|
||||||
Der Build ist bewusst banal — ein Befehl:[^hugo]
|
Der Build ist bewusst banal — ein Befehl:[^hugo]
|
||||||
|
|
||||||
+1
-1
@@ -7,7 +7,7 @@ color: kusa
|
|||||||
layout: text
|
layout: text
|
||||||
---
|
---
|
||||||
|
|
||||||
Die Kiste aus dem [ersten Teil](/library/software/server-im-eigenen-haus/) muss man nicht streicheln können, um sie zu verstehen. Es genügt ein Bild: Proxmox macht aus einem Rechner ein Mehrfamilienhaus. Das Haus ist die Maschine, die Wohnungen sind die Container, und in jeder Wohnung lebt genau ein Dienst — die Website, die Zeiterfassung, der Dateispeicher. Niemand stört den anderen, jeder hat seine eigene Tür, und zieht eine Partei aus, bleiben die übrigen, wo sie sind.
|
Die Kiste aus dem [ersten Teil](/archiv/software/server-im-eigenen-haus/) muss man nicht streicheln können, um sie zu verstehen. Es genügt ein Bild: Proxmox macht aus einem Rechner ein Mehrfamilienhaus. Das Haus ist die Maschine, die Wohnungen sind die Container, und in jeder Wohnung lebt genau ein Dienst — die Website, die Zeiterfassung, der Dateispeicher. Niemand stört den anderen, jeder hat seine eigene Tür, und zieht eine Partei aus, bleiben die übrigen, wo sie sind.
|
||||||
|
|
||||||
Dieser Text zeigt, wie man das Haus baut und die erste Wohnung bezieht. Er setzt keine Erfahrung mit Servern voraus, nur die Bereitschaft, einen Befehl abzutippen und zu lesen, was er antwortet.
|
Dieser Text zeigt, wie man das Haus baut und die erste Wohnung bezieht. Er setzt keine Erfahrung mit Servern voraus, nur die Bereitschaft, einen Befehl abzutippen und zu lesen, was er antwortet.
|
||||||
|
|
||||||
+1
-1
@@ -33,4 +33,4 @@ Bleibt die unbequeme Seite, und sie gehört in jeden ehrlichen Text dieser Art:
|
|||||||
|
|
||||||
Tragbar finden wir das aus zwei Gründen. Der Aufwand ist kleiner, als er klingt, sobald die Handgriffe automatisiert sind — einen neuen Dienst aufzusetzen ist bei uns ein einziger Befehl und kein verlorener Nachmittag. Und die Kontrolle ist den Rest wert: Lieber für ein Backup geradestehen, das man versteht, als sich auf eines verlassen, das man nie gesehen hat.
|
Tragbar finden wir das aus zwei Gründen. Der Aufwand ist kleiner, als er klingt, sobald die Handgriffe automatisiert sind — einen neuen Dienst aufzusetzen ist bei uns ein einziger Befehl und kein verlorener Nachmittag. Und die Kontrolle ist den Rest wert: Lieber für ein Backup geradestehen, das man versteht, als sich auf eines verlassen, das man nie gesehen hat.
|
||||||
|
|
||||||
Wie die Kiste im Schrank konkret eingerichtet ist — die Maschine, die Container, die Befehle, mit denen ein Dienst in Minuten steht — steht im zweiten Teil: [Proxmox, Schritt für Schritt](/library/software/proxmox-schritt-fuer-schritt/).
|
Wie die Kiste im Schrank konkret eingerichtet ist — die Maschine, die Container, die Befehle, mit denen ein Dienst in Minuten steht — steht im zweiten Teil: [Proxmox, Schritt für Schritt](/archiv/software/proxmox-schritt-fuer-schritt/).
|
||||||
@@ -28,7 +28,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor i
|
|||||||
|
|
||||||
## Lorem Ipsum IV
|
## Lorem Ipsum IV
|
||||||
|
|
||||||
- **[DOSSIER](/library/software/dossier/)** — lorem ipsum.
|
- **[DOSSIER](/archiv/software/dossier/)** — lorem ipsum.
|
||||||
- **[RAPPORT](/library/software/rapport/)** — dolor sit amet.
|
- **[RAPPORT](/archiv/software/rapport/)** — dolor sit amet.
|
||||||
|
|
||||||
— sed ut perspiciatis unde omnis iste natus error sit voluptatem.
|
— sed ut perspiciatis unde omnis iste natus error sit voluptatem.
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: "Library"
|
title: "Library"
|
||||||
description: "Die Bibliothek von OPENBUREAU — Texte, Notizen, Recherchen."
|
summary: "Das Werkstattwissen des Büros — verlinkte Notizen, die mit der Praxis wachsen."
|
||||||
---
|
---
|
||||||
|
|
||||||
Die Library ist die Sammlung. Alles, was gelesen und geschrieben wird, lebt hier.
|
Das [Archiv](/archiv/) sammelt fertige Texte; die Library sammelt das Dazwischen — Begriffe, Handgriffe, Konventionen, die man im Alltag nachschlägt. Sie ist bewusst unfertig: Eine Seite darf kurz sein, Lücken haben, sich später widersprechen — solange sie wächst, statt in einer Schublade zu verschwinden.
|
||||||
Texte werden thematisch organisiert; das **Journal** auf der Startseite zeigt dieselben Inhalte chronologisch.
|
|
||||||
|
Links findest du alle Seiten nach Bereich gruppiert; das Feld oben filtert sie. Wer einen Eintrag ergänzen oder neu anlegen will, tut das im Redaktions-Editor oder direkt im Repository.
|
||||||
|
|||||||
@@ -8,4 +8,4 @@ Der **Typus** ist nicht das fertige Vorbild, sondern das zugrunde liegende Prinz
|
|||||||
|
|
||||||
Fürs Büro ist der Typus ein Werkzeug der Ökonomie: Wer den Typus einer Aufgabe kennt, beginnt nicht bei null, sondern variiert bewusst — und kann die eigenen Entscheidungen begründen.
|
Fürs Büro ist der Typus ein Werkzeug der Ökonomie: Wer den Typus einer Aufgabe kennt, beginnt nicht bei null, sondern variiert bewusst — und kann die eigenen Entscheidungen begründen.
|
||||||
|
|
||||||
Ausführlicher in der Bibliothek: [Typus und Modell](/library/theorie/muster-typologie-fussnoten/).
|
Ausführlicher in der Bibliothek: [Typus und Modell](/archiv/theorie/muster-typologie-fussnoten/).
|
||||||
+4
-4
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
title: "Wie dieses Wiki funktioniert"
|
title: "Wie die Library funktioniert"
|
||||||
group: "Werkstatt"
|
group: "Werkstatt"
|
||||||
summary: "Kleine Seiten, klare Titel, viele Verweise."
|
summary: "Kleine Seiten, klare Titel, viele Verweise."
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
Dieses Wiki ist kein Lexikon, das jemand fertigstellt, sondern ein gemeinsames Gedächtnis, das beim Arbeiten entsteht. Ein paar Konventionen halten es übersichtlich.
|
Die Library ist kein Lexikon, das jemand fertigstellt, sondern ein gemeinsames Gedächtnis, das beim Arbeiten entsteht. Ein paar Konventionen halten sie übersichtlich.
|
||||||
|
|
||||||
## Eine Seite, ein Begriff
|
## Eine Seite, ein Begriff
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ Lieber viele kleine Seiten als wenige grosse. Eine Seite behandelt einen Begriff
|
|||||||
|
|
||||||
## Verweise
|
## Verweise
|
||||||
|
|
||||||
Seiten verweisen mit gewöhnlichen Markdown-Links aufeinander — `[Typus](/wiki/typus/)` — und gerne auch in die [Bibliothek](/library/), wenn ein Gedanke dort ausführlicher steht. Verlinken ist die eigentliche Arbeit: Eine Notiz, auf die nichts zeigt, findet niemand.
|
Seiten verweisen mit gewöhnlichen Markdown-Links aufeinander — `[Typus](/library/typus/)` — und gerne auch ins [Archiv](/archiv/), wenn ein Gedanke dort ausführlicher steht. Verlinken ist die eigentliche Arbeit: Eine Notiz, auf die nichts zeigt, findet niemand.
|
||||||
|
|
||||||
## Gruppen
|
## Gruppen
|
||||||
|
|
||||||
@@ -21,4 +21,4 @@ Das Feld `group` im Frontmatter sortiert eine Seite in die Navigation links —
|
|||||||
|
|
||||||
## Bearbeiten
|
## Bearbeiten
|
||||||
|
|
||||||
Jede Seite hat unten einen **bearbeiten**-Link, der direkt ins Repository führt. Wer lieber im Redaktions-Editor arbeitet, legt eine Seite vom Typ *Wiki* an und füllt Titel, Gruppe und Text.
|
Jede Seite hat unten einen **bearbeiten**-Link, der direkt ins Repository führt. Wer lieber im Redaktions-Editor arbeitet, legt eine Seite vom Typ *Library* an und füllt Titel, Gruppe und Text.
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Wiki"
|
|
||||||
summary: "Das Werkstattwissen des Büros — verlinkte Notizen, die mit der Praxis wachsen."
|
|
||||||
---
|
|
||||||
|
|
||||||
Die [Bibliothek](/library/) sammelt fertige Texte; das Wiki sammelt das Dazwischen — Begriffe, Handgriffe, Konventionen, die man im Alltag nachschlägt. Es ist bewusst unfertig: Eine Seite darf kurz sein, Lücken haben, sich später widersprechen — solange sie wächst, statt in einer Schublade zu verschwinden.
|
|
||||||
|
|
||||||
Links findest du alle Seiten nach Bereich gruppiert; das Feld oben filtert sie. Wer einen Eintrag ergänzen oder neu anlegen will, tut das im Redaktions-Editor oder direkt im Repository.
|
|
||||||
@@ -69,8 +69,8 @@ menus:
|
|||||||
- name: LIBRARY
|
- name: LIBRARY
|
||||||
pageRef: /library
|
pageRef: /library
|
||||||
weight: 20
|
weight: 20
|
||||||
- name: WIKI
|
- name: ARCHIV
|
||||||
pageRef: /wiki
|
pageRef: /archiv
|
||||||
weight: 25
|
weight: 25
|
||||||
- name: MANIFEST
|
- name: MANIFEST
|
||||||
pageRef: /manifest
|
pageRef: /manifest
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
{{/* Byline + Meta nur bei Library-Beiträgen — Seiten wie Manifest,
|
{{/* Byline + Meta nur bei Library-Beiträgen — Seiten wie Manifest,
|
||||||
Kontakt, Spenden brauchen weder Autor noch „Aktualisiert am". */}}
|
Kontakt, Spenden brauchen weder Autor noch „Aktualisiert am". */}}
|
||||||
{{ if eq .Section "library" }}
|
{{ if eq .Section "archiv" }}
|
||||||
{{ $author := .Params.author | default site.Params.author.name }}
|
{{ $author := .Params.author | default site.Params.author.name }}
|
||||||
{{ $aslug := urlize $author }}
|
{{ $aslug := urlize $author }}
|
||||||
{{ if not .Params.author }}{{ with index site.Data.authors site.Params.author.email }}{{ with .slug }}{{ $aslug = . }}{{ end }}{{ end }}{{ end }}
|
{{ if not .Params.author }}{{ with index site.Data.authors site.Params.author.email }}{{ with .slug }}{{ $aslug = . }}{{ end }}{{ end }}{{ end }}
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
|
|
||||||
{{/* Tags: bei Seiten (nicht-Library) wie bisher unter dem Text. Bei Library
|
{{/* Tags: bei Seiten (nicht-Library) wie bisher unter dem Text. Bei Library
|
||||||
wandern sie in die Aktionsreihe (rechts neben Dialog) im Partial. */}}
|
wandern sie in die Aktionsreihe (rechts neben Dialog) im Partial. */}}
|
||||||
{{ if ne .Section "library" }}
|
{{ if ne .Section "archiv" }}
|
||||||
{{- with .Params.tags }}
|
{{- with .Params.tags }}
|
||||||
<ul class="tag-pills" aria-label="Tags">
|
<ul class="tag-pills" aria-label="Tags">
|
||||||
{{- range . -}}<li><a href="/tags/{{ . | urlize }}/">{{ . }}</a></li>{{- end -}}
|
{{- range . -}}<li><a href="/tags/{{ . | urlize }}/">{{ . }}</a></li>{{- end -}}
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{/* Artikel-Fuß (zitieren, Dialog, Tags, Versionen) — nur bei Library. */}}
|
{{/* Artikel-Fuß (zitieren, Dialog, Tags, Versionen) — nur bei Library. */}}
|
||||||
{{ if eq .Section "library" }}
|
{{ if eq .Section "archiv" }}
|
||||||
{{ partial "provenance.html" . }}
|
{{ partial "provenance.html" . }}
|
||||||
<script src="/version-history.js"></script>
|
<script src="/version-history.js"></script>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{{- /* Wiki-Seitenleiste: alle Wiki-Seiten nach `group` gruppiert, mit Filter.
|
{{- /* Library-Seitenleiste: alle Library-Seiten nach `group` gruppiert, mit Filter.
|
||||||
Seiten ohne `group` landen unter „Allgemein“. */ -}}
|
Seiten ohne `group` landen unter „Allgemein“. */ -}}
|
||||||
{{- $cur := .RelPermalink -}}
|
{{- $cur := .RelPermalink -}}
|
||||||
{{- $pages := where site.RegularPages "Section" "wiki" -}}
|
{{- $pages := where site.RegularPages "Section" "library" -}}
|
||||||
{{- $groups := dict -}}
|
{{- $groups := dict -}}
|
||||||
{{- range $pages -}}
|
{{- range $pages -}}
|
||||||
{{- $g := .Params.group | default "Allgemein" -}}
|
{{- $g := .Params.group | default "Allgemein" -}}
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ .Content }}
|
||||||
|
|
||||||
|
{{ if .IsSection }}
|
||||||
|
{{ if eq .Path "/archiv" }}
|
||||||
|
{{/* Archiv root: Atlas — gruppiert nach Untersection */}}
|
||||||
|
<section class="atlas">
|
||||||
|
{{ range .Sections.ByWeight }}
|
||||||
|
{{ $section := path.Base .RelPermalink }}
|
||||||
|
<article class="atlas-section" data-section="{{ $section }}">
|
||||||
|
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||||
|
{{ with .Params.description }}<p class="text-muted">{{ . }}</p>{{ end }}
|
||||||
|
<ul class="atlas-list">
|
||||||
|
{{ range first 6 .RegularPages.ByDate.Reverse }}
|
||||||
|
<li>
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
||||||
|
<span class="list-meta text-muted"> · {{ partial "date.html" .Date }}</span>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ if gt (len .RegularPages) 6 }}
|
||||||
|
<p class="more"><a href="{{ .RelPermalink }}">alle in {{ .Title }} →</a></p>
|
||||||
|
{{ end }}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{/* Tag-Cloud */}}
|
||||||
|
{{ with site.Taxonomies.tags }}
|
||||||
|
<article class="atlas-tags">
|
||||||
|
<h2>Tags</h2>
|
||||||
|
<ul class="tag-cloud">
|
||||||
|
{{ range $name, $taxonomy := . }}
|
||||||
|
<li><a href="/tags/{{ $name | urlize }}/">{{ $name }} <span class="text-muted">({{ len $taxonomy }})</span></a></li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
</section>
|
||||||
|
{{ else if eq .Path "/archiv/software" }}
|
||||||
|
{{/* Software: kuratierte Landing — Werkzeuge (mit externem Link) getrennt
|
||||||
|
von Texten & Anleitungen. */}}
|
||||||
|
<header class="section-header" data-section="software">
|
||||||
|
<p class="section-rubric">Archiv</p>
|
||||||
|
<h1 class="section-title">{{ .Title }}</h1>
|
||||||
|
{{ with .Params.description }}<p class="section-description">{{ . }}</p>{{ end }}
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{ $tools := where .RegularPages "Params.external" "!=" nil }}
|
||||||
|
{{ $texts := where .RegularPages "Params.external" nil }}
|
||||||
|
|
||||||
|
{{ with $tools }}
|
||||||
|
<section class="software-tools">
|
||||||
|
<h2 class="software-h">Werkzeuge</h2>
|
||||||
|
<ul class="tool-list">
|
||||||
|
{{ range .ByWeight }}
|
||||||
|
<li class="tool-item"{{ with .Params.color }} data-color="{{ . }}"{{ end }}>
|
||||||
|
<a class="tool-main" href="{{ .RelPermalink }}">
|
||||||
|
<span class="tool-name">{{ .LinkTitle }}</span>
|
||||||
|
{{ with .Params.summary }}<span class="tool-sum text-muted">{{ . }}</span>{{ end }}
|
||||||
|
</a>
|
||||||
|
{{ with .Params.external }}<a class="tool-ext" href="{{ . }}" rel="noopener" aria-label="extern öffnen">↗</a>{{ end }}
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<section class="software-texts">
|
||||||
|
<h2 class="software-h">Texte & Anleitungen</h2>
|
||||||
|
<div class="time-list" data-section="software">
|
||||||
|
<ul>
|
||||||
|
{{ range $texts.ByDate.Reverse }}
|
||||||
|
<li class="list-item">
|
||||||
|
<div class="list-title-row">
|
||||||
|
<div class="list-title">
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
||||||
|
{{ with .Params.summary }}<div class="list-summary text-muted">{{ . }}</div>{{ end }}
|
||||||
|
</div>
|
||||||
|
<div class="list-meta">{{ partial "date.html" .Date }}</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{{ else }}
|
||||||
|
{{/* Library subsection: chronologisch */}}
|
||||||
|
{{ $section := path.Base .RelPermalink }}
|
||||||
|
<header class="section-header" data-section="{{ $section }}">
|
||||||
|
<p class="section-rubric">Archiv</p>
|
||||||
|
<h1 class="section-title">{{ .Title }}</h1>
|
||||||
|
{{ with .Params.description }}<p class="section-description">{{ . }}</p>{{ end }}
|
||||||
|
</header>
|
||||||
|
<div class="time-list" data-section="{{ $section }}">
|
||||||
|
<ul>
|
||||||
|
{{ range .RegularPages.ByDate.Reverse }}
|
||||||
|
<li class="list-item">
|
||||||
|
<div class="list-title-row">
|
||||||
|
<div class="list-title">
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
||||||
|
{{ with .Params.summary }}
|
||||||
|
<div class="list-summary text-muted">{{ . }}</div>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
<div class="list-meta">{{ partial "date.html" .Date }}</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
+4
-4
@@ -1,8 +1,8 @@
|
|||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
{{ .Content }}
|
{{ .Content }}
|
||||||
|
|
||||||
{{ $library := where site.RegularPages "Section" "library" }}
|
{{ $archiv := where site.RegularPages "Section" "archiv" }}
|
||||||
{{ $journal := first 20 $library.ByDate.Reverse }}
|
{{ $journal := first 20 $archiv.ByDate.Reverse }}
|
||||||
|
|
||||||
<section class="journal" aria-label="Journal — neueste Beiträge">
|
<section class="journal" aria-label="Journal — neueste Beiträge">
|
||||||
<header class="journal-header">
|
<header class="journal-header">
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{ if gt (len $library) 20 }}
|
{{ if gt (len $archiv) 20 }}
|
||||||
<p class="more"><a href="/library/">→ Alle Beiträge in der Library</a></p>
|
<p class="more"><a href="/archiv/">→ Alle Beiträge im Archiv</a></p>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</section>
|
</section>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
+26
-98
@@ -1,113 +1,41 @@
|
|||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
{{ .Content }}
|
<header class="section-header">
|
||||||
|
<h1 class="section-title">{{ .Title }}</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
{{ if .IsSection }}
|
<div class="wiki">
|
||||||
{{ if eq .Path "/library" }}
|
<aside class="wiki-side">{{ partial "library-nav.html" . }}</aside>
|
||||||
{{/* Library root: Atlas — gruppiert nach Untersection */}}
|
|
||||||
<section class="atlas">
|
<div class="wiki-page">
|
||||||
{{ range .Sections.ByWeight }}
|
<div class="single-content">{{ .Content }}</div>
|
||||||
{{ $section := path.Base .RelPermalink }}
|
|
||||||
<article class="atlas-section" data-section="{{ $section }}">
|
{{ $pages := where site.RegularPages "Section" "library" }}
|
||||||
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
{{ $groups := dict }}
|
||||||
{{ with .Params.description }}<p class="text-muted">{{ . }}</p>{{ end }}
|
{{ range $pages }}
|
||||||
<ul class="atlas-list">
|
{{ $g := .Params.group | default "Allgemein" }}
|
||||||
{{ range first 6 .RegularPages.ByDate.Reverse }}
|
{{ $existing := index $groups $g | default slice }}
|
||||||
|
{{ $groups = merge $groups (dict $g ($existing | append .)) }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if $pages }}
|
||||||
|
<div class="wiki-index">
|
||||||
|
{{ range $g, $ps := $groups }}
|
||||||
|
<section class="wiki-group">
|
||||||
|
<h2>{{ $g }}</h2>
|
||||||
|
<ul>
|
||||||
|
{{ range sort $ps "Title" }}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
||||||
<span class="list-meta text-muted"> · {{ partial "date.html" .Date }}</span>
|
{{ with .Params.summary }}<span class="text-muted"> — {{ . }}</span>{{ end }}
|
||||||
</li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
|
||||||
{{ if gt (len .RegularPages) 6 }}
|
|
||||||
<p class="more"><a href="{{ .RelPermalink }}">alle in {{ .Title }} →</a></p>
|
|
||||||
{{ end }}
|
|
||||||
</article>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{/* Tag-Cloud */}}
|
|
||||||
{{ with site.Taxonomies.tags }}
|
|
||||||
<article class="atlas-tags">
|
|
||||||
<h2>Tags</h2>
|
|
||||||
<ul class="tag-cloud">
|
|
||||||
{{ range $name, $taxonomy := . }}
|
|
||||||
<li><a href="/tags/{{ $name | urlize }}/">{{ $name }} <span class="text-muted">({{ len $taxonomy }})</span></a></li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
|
||||||
</article>
|
|
||||||
{{ end }}
|
|
||||||
</section>
|
|
||||||
{{ else if eq .Path "/library/software" }}
|
|
||||||
{{/* Software: kuratierte Landing — Werkzeuge (mit externem Link) getrennt
|
|
||||||
von Texten & Anleitungen. */}}
|
|
||||||
<header class="section-header" data-section="software">
|
|
||||||
<p class="section-rubric">Library</p>
|
|
||||||
<h1 class="section-title">{{ .Title }}</h1>
|
|
||||||
{{ with .Params.description }}<p class="section-description">{{ . }}</p>{{ end }}
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{{ $tools := where .RegularPages "Params.external" "!=" nil }}
|
|
||||||
{{ $texts := where .RegularPages "Params.external" nil }}
|
|
||||||
|
|
||||||
{{ with $tools }}
|
|
||||||
<section class="software-tools">
|
|
||||||
<h2 class="software-h">Werkzeuge</h2>
|
|
||||||
<ul class="tool-list">
|
|
||||||
{{ range .ByWeight }}
|
|
||||||
<li class="tool-item"{{ with .Params.color }} data-color="{{ . }}"{{ end }}>
|
|
||||||
<a class="tool-main" href="{{ .RelPermalink }}">
|
|
||||||
<span class="tool-name">{{ .LinkTitle }}</span>
|
|
||||||
{{ with .Params.summary }}<span class="tool-sum text-muted">{{ . }}</span>{{ end }}
|
|
||||||
</a>
|
|
||||||
{{ with .Params.external }}<a class="tool-ext" href="{{ . }}" rel="noopener" aria-label="extern öffnen">↗</a>{{ end }}
|
|
||||||
</li>
|
</li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<section class="software-texts">
|
|
||||||
<h2 class="software-h">Texte & Anleitungen</h2>
|
|
||||||
<div class="time-list" data-section="software">
|
|
||||||
<ul>
|
|
||||||
{{ range $texts.ByDate.Reverse }}
|
|
||||||
<li class="list-item">
|
|
||||||
<div class="list-title-row">
|
|
||||||
<div class="list-title">
|
|
||||||
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
|
||||||
{{ with .Params.summary }}<div class="list-summary text-muted">{{ . }}</div>{{ end }}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="list-meta">{{ partial "date.html" .Date }}</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{/* Library subsection: chronologisch */}}
|
<p class="text-muted"><em>Noch keine Einträge — der erste entsteht im Redaktions-Editor.</em></p>
|
||||||
{{ $section := path.Base .RelPermalink }}
|
|
||||||
<header class="section-header" data-section="{{ $section }}">
|
|
||||||
<p class="section-rubric">Library</p>
|
|
||||||
<h1 class="section-title">{{ .Title }}</h1>
|
|
||||||
{{ with .Params.description }}<p class="section-description">{{ . }}</p>{{ end }}
|
|
||||||
</header>
|
|
||||||
<div class="time-list" data-section="{{ $section }}">
|
|
||||||
<ul>
|
|
||||||
{{ range .RegularPages.ByDate.Reverse }}
|
|
||||||
<li class="list-item">
|
|
||||||
<div class="list-title-row">
|
|
||||||
<div class="list-title">
|
|
||||||
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
|
||||||
{{ with .Params.summary }}
|
|
||||||
<div class="list-summary text-muted">{{ . }}</div>
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
<div class="list-meta">{{ partial "date.html" .Date }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
</li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
<div class="wiki">
|
|
||||||
<header class="section-header">
|
<header class="section-header">
|
||||||
<p class="section-rubric">{{ with .Params.group }}{{ . }}{{ else }}Wiki{{ end }}</p>
|
<p class="section-rubric">{{ with .Params.group }}{{ . }}{{ else }}Library{{ end }}</p>
|
||||||
<h1 class="section-title">{{ .Title }}</h1>
|
<h1 class="section-title">{{ .Title }}</h1>
|
||||||
{{ with .Params.summary }}<p class="section-description">{{ . }}</p>{{ end }}
|
{{ with .Params.summary }}<p class="section-description">{{ . }}</p>{{ end }}
|
||||||
</header>
|
</header>
|
||||||
<aside class="wiki-side">{{ partial "wiki-nav.html" . }}</aside>
|
|
||||||
|
<div class="wiki">
|
||||||
|
<aside class="wiki-side">{{ partial "library-nav.html" . }}</aside>
|
||||||
|
|
||||||
<div class="wiki-page">
|
<div class="wiki-page">
|
||||||
{{ $hasToC := .Params.toc | default false }}
|
{{ $hasToC := .Params.toc | default false }}
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{{ define "main" }}
|
|
||||||
<div class="wiki">
|
|
||||||
<header class="section-header">
|
|
||||||
<h1 class="section-title">{{ .Title }}</h1>
|
|
||||||
</header>
|
|
||||||
<aside class="wiki-side">{{ partial "wiki-nav.html" . }}</aside>
|
|
||||||
|
|
||||||
<div class="wiki-page">
|
|
||||||
<div class="single-content">{{ .Content }}</div>
|
|
||||||
|
|
||||||
{{ $pages := where site.RegularPages "Section" "wiki" }}
|
|
||||||
{{ $groups := dict }}
|
|
||||||
{{ range $pages }}
|
|
||||||
{{ $g := .Params.group | default "Allgemein" }}
|
|
||||||
{{ $existing := index $groups $g | default slice }}
|
|
||||||
{{ $groups = merge $groups (dict $g ($existing | append .)) }}
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{ if $pages }}
|
|
||||||
<div class="wiki-index">
|
|
||||||
{{ range $g, $ps := $groups }}
|
|
||||||
<section class="wiki-group">
|
|
||||||
<h2>{{ $g }}</h2>
|
|
||||||
<ul>
|
|
||||||
{{ range sort $ps "Title" }}
|
|
||||||
<li>
|
|
||||||
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
|
||||||
{{ with .Params.summary }}<span class="text-muted"> — {{ . }}</span>{{ end }}
|
|
||||||
</li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
{{ else }}
|
|
||||||
<p class="text-muted"><em>Noch keine Einträge — der erste entsteht im Redaktions-Editor.</em></p>
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
Reference in New Issue
Block a user