ui: Header/Footer/Journal/Dialog überarbeitet + Logo
Header/Masthead: - neuer Wortmark logo.svg; Home als Full-Height-Flex (zwei eigenständig scrollbare Journal-Spalten, Footer klebt unten) - kompakte Masthead; scrollbar-gutter:stable auf html → kein weißer Streifen links und kein Logo/Menü-Versatz zwischen den Seiten Journal-Home: - zwei Spalten, eckige Karten in natürlicher Höhe; Bild als Block (Inline- Whitespace-Lücke behoben) Footer: - Lizenzen AGPL-3.0 / CC BY-SA verlinken auf /lizenz/ (eigene Seite); „Hosted in Lucerne" (Link zur Autor-URL); keine Underlines; flush unten; kein Open-Source-Fließtext mehr, kein Name im Copyright Dialog: - schlichte Foren-Auflistung statt Karten; kompaktes Login; kleinerer „→ Dialog"-Button (nur noch auf Library-Artikeln); einheitliche Fontgrößen; weniger Abstand zum Header, Trennlinien entfernt Config: CODE-Menü → git.openbureau.ch; params.author.url Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,12 +6,10 @@
|
||||
<head>
|
||||
{{ partial "head.html" . }}
|
||||
</head>
|
||||
<body>
|
||||
<body{{ if .IsHome }} class="is-home"{{ end }}>
|
||||
<a href="#main-content" class="skip-link">Skip to content</a>
|
||||
<header role="banner" class="site-header">
|
||||
<a href="{{ "/" | relURL }}" class="wordmark-link" aria-label="openbureau">
|
||||
<span class="wordmark-text">openbureau</span>
|
||||
</a>
|
||||
<a href="{{ "/" | relURL }}" class="wordmark-link" aria-label="openbureau"></a>
|
||||
<nav class="site-nav" aria-label="Site">
|
||||
{{ partial "menu.html" (dict "menuID" "main" "page" .) }}
|
||||
</nav>
|
||||
|
||||
@@ -63,17 +63,19 @@
|
||||
</ul>
|
||||
{{- end }}
|
||||
|
||||
{{/* Dialog liegt auf eigener Seite — der Beitrag bleibt sauber */}}
|
||||
<a class="dialog-link" id="dialog-link" data-thread="{{ .RelPermalink }}" href="/dialog/?thread={{ .RelPermalink }}">→ Dialog</a>
|
||||
<script>
|
||||
(function () {
|
||||
var l = document.getElementById('dialog-link'); if (!l) return;
|
||||
fetch('/api/comments?thread=' + encodeURIComponent(l.dataset.thread))
|
||||
.then(function (r) { return r.ok ? r.json() : []; })
|
||||
.then(function (d) { var n = d.filter(function (c) { return !c.deleted; }).length; if (n) l.textContent = '→ Dialog · ' + n; })
|
||||
.catch(function () {});
|
||||
})();
|
||||
</script>
|
||||
{{/* Dialog nur bei Artikeln (Library), nicht auf Seiten wie Spenden/Manifest. */}}
|
||||
{{ if eq .Section "library" }}
|
||||
<a class="dialog-link" id="dialog-link" data-thread="{{ .RelPermalink }}" href="/dialog/?thread={{ .RelPermalink }}">→ Dialog</a>
|
||||
<script>
|
||||
(function () {
|
||||
var l = document.getElementById('dialog-link'); if (!l) return;
|
||||
fetch('/api/comments?thread=' + encodeURIComponent(l.dataset.thread))
|
||||
.then(function (r) { return r.ok ? r.json() : []; })
|
||||
.then(function (d) { var n = d.filter(function (c) { return !c.deleted; }).length; if (n) l.textContent = '→ Dialog · ' + n; })
|
||||
.catch(function () {});
|
||||
})();
|
||||
</script>
|
||||
{{ end }}
|
||||
</article>
|
||||
|
||||
{{ end }}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
<div class="footer-grid">
|
||||
<div class="footer-mark">OPENBUREAU</div>
|
||||
<nav class="footer-nav" aria-label="Footer">
|
||||
<ul>
|
||||
<li><a href="/manifest/">Manifest</a></li>
|
||||
<li><a href="/colophon/">Colophon</a></li>
|
||||
<li><a href="/dialog/">Dialog</a></li>
|
||||
<li><a href="https://gitea.kgva.ch">Code ↗</a></li>
|
||||
<li><a href="/index.xml">RSS</a></li>
|
||||
</ul>
|
||||
<div class="footer-legal">
|
||||
<p class="footer-licenses">
|
||||
Code <a href="/lizenz/agpl-3.0/">AGPL-3.0</a>
|
||||
· Inhalte <a href="/lizenz/cc-by-sa-4.0/">CC BY-SA 4.0</a>
|
||||
</p>
|
||||
<p class="footer-hosted">
|
||||
{{ with site.Params.author.url }}<a href="{{ . }}">Hosted in Lucerne</a>{{ else }}Hosted in Lucerne{{ end }}
|
||||
</p>
|
||||
</div>
|
||||
<nav class="footer-links" aria-label="Footer">
|
||||
<a href="/colophon/">Colophon</a>
|
||||
<a href="mailto:karim@gabrielevarano.ch">Kontakt</a>
|
||||
<a href="/index.xml">RSS</a>
|
||||
<a href="/spenden/">Spenden</a>
|
||||
</nav>
|
||||
<p class="footer-tagline">
|
||||
Sammlung, Plattform, Praxis.<br>
|
||||
Texte unter <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.
|
||||
</p>
|
||||
<p class="footer-credit">© {{ now.Year }} · Karim Gabriele Varano</p>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
{{/* Eine Journal-Karte. Kontext (.) = die Library-Seite. */}}
|
||||
{{ $section := "" }}
|
||||
{{ with .Parent }}{{ $section = path.Base .RelPermalink }}{{ end }}
|
||||
{{ $author := .Params.author | default site.Params.author.name }}
|
||||
{{ $cover := .Params.cover_image }}
|
||||
{{ $layout := .Params.layout }}
|
||||
{{ if not $layout }}{{ $layout = cond (ne $cover nil) "image" "text" }}{{ end }}
|
||||
<li class="journal-entry journal-entry--layout-{{ $layout }}"
|
||||
data-section="{{ $section }}"
|
||||
{{ with .Params.color }}data-color="{{ . }}"{{ end }}>
|
||||
<a class="journal-entry-link" href="{{ .RelPermalink }}">
|
||||
{{ if and $cover (eq $layout "image") }}
|
||||
<img class="journal-bg-image" src="{{ $cover | relURL }}" alt="" loading="eager" />
|
||||
{{ end }}
|
||||
<div class="journal-entry-body">
|
||||
{{ if and $cover (eq $layout "icon") }}
|
||||
<img class="journal-icon-image" src="{{ $cover | relURL }}" alt="" loading="lazy" />
|
||||
{{ end }}
|
||||
{{ with .Parent }}
|
||||
<p class="journal-rubric"><span class="journal-section">{{ .Title }}</span></p>
|
||||
{{ end }}
|
||||
<h3 class="journal-title">{{ .LinkTitle }}</h3>
|
||||
{{ with .Params.summary }}
|
||||
<p class="journal-summary">{{ . }}</p>
|
||||
{{ end }}
|
||||
<p class="journal-byline">
|
||||
{{- with $author -}}<span class="journal-author">{{ . }}</span>{{- end -}}
|
||||
{{- if and $author .Date -}}, {{ end -}}
|
||||
<time class="journal-date" datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "02.01.2006" }}</time>
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
+10
-41
@@ -10,47 +10,16 @@
|
||||
<p class="text-muted">Was zuletzt geschrieben wurde.</p>
|
||||
</header>
|
||||
|
||||
<ol class="journal-list">
|
||||
{{ range $journal }}
|
||||
{{ $section := "" }}
|
||||
{{ with .Parent }}{{ $section = path.Base .RelPermalink }}{{ end }}
|
||||
{{ $author := .Params.author | default site.Params.author.name }}
|
||||
{{ $cover := .Params.cover_image }}
|
||||
{{/* Layout: explicit `layout:` in front matter, else derive:
|
||||
- cover_image present → image
|
||||
- none → text */}}
|
||||
{{ $layout := .Params.layout }}
|
||||
{{ if not $layout }}
|
||||
{{ $layout = cond (ne $cover nil) "image" "text" }}
|
||||
{{ end }}
|
||||
<li class="journal-entry journal-entry--layout-{{ $layout }}"
|
||||
data-section="{{ $section }}"
|
||||
{{ with .Params.color }}data-color="{{ . }}"{{ end }}>
|
||||
<a class="journal-entry-link" href="{{ .RelPermalink }}">
|
||||
{{ if and $cover (eq $layout "image") }}
|
||||
<img class="journal-bg-image" src="{{ $cover | relURL }}" alt="" loading="eager" />
|
||||
{{ end }}
|
||||
<div class="journal-entry-body">
|
||||
{{ if and $cover (eq $layout "icon") }}
|
||||
<img class="journal-icon-image" src="{{ $cover | relURL }}" alt="" loading="lazy" />
|
||||
{{ end }}
|
||||
{{ with .Parent }}
|
||||
<p class="journal-rubric"><span class="journal-section">{{ .Title }}</span></p>
|
||||
{{ end }}
|
||||
<h3 class="journal-title">{{ .LinkTitle }}</h3>
|
||||
{{ with .Params.summary }}
|
||||
<p class="journal-summary">{{ . }}</p>
|
||||
{{ end }}
|
||||
<p class="journal-byline">
|
||||
{{- with $author -}}<span class="journal-author">{{ . }}</span>{{- end -}}
|
||||
{{- if and $author .Date -}}, {{ end -}}
|
||||
<time class="journal-date" datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "02.01.2006" }}</time>
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ol>
|
||||
{{/* Zwei eigenständig scrollbare Spalten: Einträge abwechselnd verteilt
|
||||
(gerade Indizes links, ungerade rechts) → Lese-Reihenfolge links-rechts. */}}
|
||||
<div class="journal-cols">
|
||||
<ol class="journal-list">
|
||||
{{ range $i, $e := $journal }}{{ if eq (mod $i 2) 0 }}{{ partial "journal-card.html" $e }}{{ end }}{{ end }}
|
||||
</ol>
|
||||
<ol class="journal-list">
|
||||
{{ range $i, $e := $journal }}{{ if eq (mod $i 2) 1 }}{{ partial "journal-card.html" $e }}{{ end }}{{ end }}
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
{{ if gt (len $library) 20 }}
|
||||
<p class="more"><a href="/library/">→ Alle Beiträge in der Library</a></p>
|
||||
|
||||
Reference in New Issue
Block a user