layout anpassungen
This commit is contained in:
1 parent
5acf8ad0e7
commit
8295ab8ff9
9 files changed
+232
-10
No files matched your search
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user