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('
  • %s' % (hid, _escape(text))) + parts.append('
  • %s' % (prefix, hid, _escape(text))) 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_ -![hfg_os_background_1_fullhd](images/hfg_os_background_1_fullhd.jpg) 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. +![hfg_os_background_1_fullhd](images/hfg_os_background_1_fullhd.jpg) ## 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 @@ -
    user@hfg_linux_group:~$ free-software-for-art-and-design
    +
    user@hfg_linux_group:~$ free-software-for-art-and-design
    @@ -18,7 +18,7 @@
    - +
    @@ -60,7 +60,7 @@
    diff --git a/output/index.html b/output/index.html index b3bb924..e796303 100644 --- a/output/index.html +++ b/output/index.html @@ -10,7 +10,7 @@ -
    user@hfg_linux_group:~$ free-software-for-art-and-design
    +
    user@hfg_linux_group:~$ free-software-for-art-and-design
    @@ -56,7 +56,7 @@

    Das hfg_OS_

    -

    hfg_os_background_1_fullhd 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.

    +

    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. hfg_os_background_1_fullhd

    Versionen

    VersionNamePlatformFilesize
    12.10.hfg_OS_FalbellaX864536 MB
    @@ -73,7 +73,7 @@
    -

    Dieser Footer-Baustein wird automatisch an das Ende aller Seiten gesetzt. Zum Beispiel mit Links: Startseite

    +

    Impressum

    diff --git a/templates/default.html b/templates/default.html index 3459431..d4ca33e 100644 --- a/templates/default.html +++ b/templates/default.html @@ -10,7 +10,7 @@ -
    user@hfg_linux_group:~$ free-software-for-art-and-design
    +
    {{header}} diff --git a/templates/impressum.html b/templates/impressum.html new file mode 100644 index 0000000..359b815 --- /dev/null +++ b/templates/impressum.html @@ -0,0 +1,25 @@ + + + + + + {{titel}} + + + + + + + +
    + {{header}} + +
    +
    + {{inhalt}} +
    + + +