diff --git a/cms.py b/cms.py
index 3af7a60..0fe28f3 100755
--- a/cms.py
+++ b/cms.py
@@ -265,10 +265,11 @@ def _slugify(s):
return s or "abschnitt"
-def heading_nav(headings):
+def heading_nav(headings, prefix=""):
"""Baut die Anker-Navigation als verschachtelte ul/li-Liste:
Eine Ueberschrift mit einem # mehr als die vorherige wird als
- Unterpunkt eingerueckt.
+ Unterpunkt eingerueckt. prefix erlaubt Links auf eine andere Seite
+ (z.B. "index.html" -> href="index.html#anker").
headings: Liste von (level, anker, text).
"""
if not headings:
@@ -290,7 +291,7 @@ def heading_nav(headings):
parts.append("")
levels.pop()
parts.append("")
- parts.append('
")
while len(levels) > 1:
parts.append("")
@@ -354,7 +355,7 @@ def block_html(slug):
return ""
-def render_page(raw, template, header_html="", footer_html=""):
+def render_page(raw, template, header_html="", footer_html="", start_anker_html=""):
meta, body = parse_md(raw)
headings = []
html = md_to_html(body, headings)
@@ -363,10 +364,14 @@ def render_page(raw, template, header_html="", footer_html=""):
.replace("{{titel}}", _escape(meta.get("titel", "")))
.replace("{{beschreibung}}", _escape(meta.get("beschreibung", "")))
.replace("{{inhalt}}", html))
+ # {{anker-start}}: Navigation der Startseite, verlinkt auf index.html#anker
+ if "{{anker-start}}" in template:
+ page = page.replace("{{anker-start}}", start_anker_html)
if "{{anker}}" in template:
page = page.replace("{{anker}}", anker_html)
- elif anker_html and "{{header}}" in template:
- # Template ohne {{anker}}-Platzhalter: Anker ans Ende des Headers
+ elif (anker_html and "{{anker-start}}" not in template
+ and "{{header}}" in template):
+ # Template ganz ohne Anker-Platzhalter: eigene Anker ans Header-Ende
page = page.replace("{{header}}",
header_html + '\n")
if "{{header}}" in template:
@@ -384,7 +389,17 @@ def render_page(raw, template, header_html="", footer_html=""):
return page, meta.get("titel", "")
-def load_template():
+def load_template(slug=None):
+ """Template fuer eine Seite: templates/.html wenn vorhanden,
+ sonst default.html, sonst das erste gefundene Template."""
+ candidates = []
+ if slug:
+ candidates.append(os.path.join(TPL_DIR, slug + ".html"))
+ candidates.append(os.path.join(TPL_DIR, "default.html"))
+ for c in candidates:
+ if os.path.exists(c):
+ with open(c, encoding="utf-8") as fh:
+ return fh.read()
files = [f for f in os.listdir(TPL_DIR) if f.endswith(".html")]
if not files:
raise SystemExit("Kein Template in templates/ gefunden (z.B. default.html).")
@@ -394,7 +409,6 @@ def load_template():
def export_site():
"""Baut output/: pro MD-Datei eine HTML-Seite, CSS wird kopiert."""
- template = load_template()
# Output leeren und neu aufbauen
if os.path.isdir(OUT_DIR):
shutil.rmtree(OUT_DIR)
@@ -412,9 +426,19 @@ def export_site():
footer_html = block_html(FOOTER_PAGE)
header_html = block_html(HEADER_PAGE)
+ # Anker-Navigation der Startseite (fuer Templates mit {{anker-start}},
+ # z.B. impressum: Links auf index.html#anker)
+ start_headings = []
+ if os.path.exists(md_path(START_PAGE)):
+ _, s_body = parse_md(load_page(START_PAGE))
+ md_to_html(s_body, start_headings)
+ start_anker = heading_nav(start_headings, prefix="index.html")
+
exported = []
for slug in list_pages():
- page, _ = render_page(load_page(slug), template, header_html, footer_html)
+ template = load_template(slug)
+ page, _ = render_page(load_page(slug), template, header_html, footer_html,
+ start_anker)
# startseite.md wird zur index.html
out_name = "index.html" if slug == START_PAGE else slug + ".html"
with open(os.path.join(OUT_DIR, out_name), "w", encoding="utf-8") as fh:
diff --git a/css/style.css b/css/style.css
index 700bd24..2b425fb 100644
--- a/css/style.css
+++ b/css/style.css
@@ -93,6 +93,14 @@ main {
color: var(--green);
}
+/* Prompt als Link auf die Startseite, ohne Hover-Effekt */
+a.prompt-link,
+a.prompt-link:hover {
+ color: var(--green);
+ text-decoration: none;
+ text-shadow: none;
+}
+
/* Blinkender Terminal-Cursor hinter dem Prompt */
.cursor {
display: inline-block;
@@ -142,7 +150,7 @@ main div.sec0 {
img {
display: block; /* Text startet immer unter dem Bild */
- max-width: 500px; /* Desktop: maximal 500px breit */
+ max-width: 1200px; /* Desktop: maximal 500px breit */
height: auto;
border: 1px solid #333333; /* dunkelgrauer Rand */
margin: .8rem 0;
diff --git a/md/footer.md b/md/footer.md
index cd5fb52..5d9298c 100644
--- a/md/footer.md
+++ b/md/footer.md
@@ -2,5 +2,4 @@
titel: Footer
---
-Dieser Footer-Baustein wird automatisch an das Ende **aller** Seiten gesetzt.
-Zum Beispiel mit Links: [Startseite](index.html)
+[Impressum](impressum.html)
diff --git a/md/startseite.md b/md/startseite.md
index 3672889..47c59f2 100644
--- a/md/startseite.md
+++ b/md/startseite.md
@@ -30,8 +30,8 @@ Alle, die sich für Linux, Open Source und die Förderung von Wissen in Kunst un
Ziel ist es, den Einsatz freier Software in Kunst und Design zu fördern. Durch Workshops, den Aufbau von Wissensdatenbanken, Austausch und Debatten sollen Eigenermächtigung und Verantwortung für Technologie wiederhergestellt werden. Dazu entwickeln wir gemeinsam ein eigenes Linux-basiertes Betriebssystem und unterstützen bei allen Schritten des Wechsels zu freier Software.
# Das hfg_OS_
-
Das hfg_OS ist ein auf Debian 13 (Trixie) basierendes, Linux-basiertes Betriebssystem. Es wurde speziell für die Bedürfnisse von Künstler:innen und Designer:innen angepasst und wird kontinuierlich weiterentwickelt.
+
## Versionen
diff --git a/output/css/style.css b/output/css/style.css
index 700bd24..2b425fb 100644
--- a/output/css/style.css
+++ b/output/css/style.css
@@ -93,6 +93,14 @@ main {
color: var(--green);
}
+/* Prompt als Link auf die Startseite, ohne Hover-Effekt */
+a.prompt-link,
+a.prompt-link:hover {
+ color: var(--green);
+ text-decoration: none;
+ text-shadow: none;
+}
+
/* Blinkender Terminal-Cursor hinter dem Prompt */
.cursor {
display: inline-block;
@@ -142,7 +150,7 @@ main div.sec0 {
img {
display: block; /* Text startet immer unter dem Bild */
- max-width: 500px; /* Desktop: maximal 500px breit */
+ max-width: 1200px; /* Desktop: maximal 500px breit */
height: auto;
border: 1px solid #333333; /* dunkelgrauer Rand */
margin: .8rem 0;
diff --git a/output/impressum.html b/output/impressum.html
index 0767b7d..828b229 100644
--- a/output/impressum.html
+++ b/output/impressum.html
@@ -10,7 +10,7 @@
-