layout anpassungen

This commit is contained in:
florian committed 2026-10-03 12:26:28 +02:00
1 parent 5acf8ad0e7
commit 8295ab8ff9
9 files changed
+232 -10

No files matched your search

+22 -1
View File
@@ -51,6 +51,7 @@ def md_to_html(text, headings=None):
in_list = False
list_tag = None
used_ids = {}
sec_stack = [] # offene Sektionen (pro # mehr eine Ebene, eingerueckt)
def inline(s):
s = re.sub(r"`([^`]+)`", r"<code>\1</code>", s)
@@ -112,8 +113,18 @@ def md_to_html(text, headings=None):
used_ids[hid] = 0
if headings is not None:
headings.append((level, hid, text_h))
# tiefere Sektionen schliessen, bis die Ebene wieder passt
while sec_stack and sec_stack[-1] >= level:
out.append("</div>")
sec_stack.pop()
# ein # mehr als die umgebende Ueberschrift -> Stufe einruecken
if sec_stack:
out.append('<div class="sec">')
else:
out.append('<div class="sec0">')
out.append('<h%d id="%s">%s</h%d>'
% (level, hid, inline(_escape(text_h)), level))
sec_stack.append(level)
i += 1
continue
@@ -164,6 +175,9 @@ def md_to_html(text, headings=None):
i += 1
close_list()
while sec_stack:
out.append("</div>")
sec_stack.pop()
return "\n".join(out)
@@ -276,6 +290,7 @@ def render_page(raw, template, header_html="", footer_html=""):
anker_html = heading_nav(headings)
page = (template
.replace("{{titel}}", _escape(meta.get("titel", "")))
.replace("{{beschreibung}}", _escape(meta.get("beschreibung", "")))
.replace("{{inhalt}}", html))
if "{{anker}}" in template:
page = page.replace("{{anker}}", anker_html)
@@ -318,6 +333,11 @@ def export_site():
if f.endswith(".css"):
shutil.copy2(os.path.join(CSS_DIR, f), os.path.join(OUT_DIR, "css", f))
# Bilder (z.B. Logo/Favicon) nach output/images/ kopieren
img_src = os.path.join(ROOT, "images")
if os.path.isdir(img_src):
shutil.copytree(img_src, os.path.join(OUT_DIR, "images"), dirs_exist_ok=True)
footer_html = block_html(FOOTER_PAGE)
header_html = block_html(HEADER_PAGE)
@@ -443,6 +463,7 @@ ADMIN_HTML = """<!DOCTYPE html>
<div id="msg"></div>
<textarea id="editor" spellcheck="false">---
titel: Neue Seite
beschreibung: Kurze Seitenbeschreibung fuer Suchmaschinen (SEO).
---
Hier den Inhalt schreiben. **fett**, *kursiv*, [Link](seite.html), # Ueberschrift, - Liste.</textarea>
@@ -515,7 +536,7 @@ $("btn-new").onclick = async () => {
if (!slug) return msg("Bitte Namen eingeben.");
const d = await api("/api/page", {
method: "POST", headers: {"Content-Type": "application/json"},
body: JSON.stringify({slug, raw: "---\\ntitel: " + slug + "\\n---\\n\\nNeue Seite.\\n"})
body: JSON.stringify({slug, raw: "---\\ntitel: " + slug + "\\nbeschreibung: \\n---\\n\\nNeue Seite.\\n"})
});
if (d.ok) { $("newslug").value = ""; openPage(slug); }
else msg("Fehler: " + d.error);