ul und li navigation build geht

This commit is contained in:
florian committed 2026-10-03 12:03:55 +02:00
1 parent dc1b35f344
commit 5acf8ad0e7
7 files changed
+122 -54

No files matched your search

+30 -4
View File
@@ -111,7 +111,7 @@ def md_to_html(text, headings=None):
else:
used_ids[hid] = 0
if headings is not None:
headings.append((hid, text_h))
headings.append((level, hid, text_h))
out.append('<h%d id="%s">%s</h%d>'
% (level, hid, inline(_escape(text_h)), level))
i += 1
@@ -181,11 +181,37 @@ def _slugify(s):
def heading_nav(headings):
"""Baut die Anker-Linkliste (Text-Links auf die Ueberschriften der Seite)."""
"""Baut die Anker-Navigation als verschachtelte ul/li-Liste:
Eine Ueberschrift mit einem # mehr als die vorherige wird als
Unterpunkt eingerueckt.
headings: Liste von (level, anker, text).
"""
if not headings:
return ""
return "".join('<a href="#%s">%s</a>' % (hid, _escape(text))
for hid, text in headings)
parts = []
levels = []
for level, hid, text in headings:
if not levels:
# erste Ueberschrift: aeusserste Liste oeffnen
parts.append("<ul>")
levels.append(level)
elif level > levels[-1]:
# tiefer -> neue verschachtelte Liste im letzten <li>
parts.append("<ul>")
levels.append(level)
else:
# gleiche oder hoehere Ebene -> Listen schliessen bis Ebene passt
while len(levels) > 1 and levels[-1] > level:
parts.append("</li></ul>")
levels.pop()
parts.append("</li>")
parts.append('<li><a href="#%s">%s</a>' % (hid, _escape(text)))
parts.append("</li>")
while len(levels) > 1:
parts.append("</ul></li>")
levels.pop()
parts.append("</ul>")
return "".join(parts)
# ------------------------------------------------------------------- seiten