undefinedbehavior-website/filters.py
2022-08-28 18:56:24 +02:00

55 lines
2.6 KiB
Python

def add_lightboxes(html: str,
lightbox_class: str = "lightbox",
wrapper_class: str = "lightbox-wrapper") -> str:
counter: int = 0
img_start: int = html.find("<img")
while img_start > -1:
counter += 1
img_end: int = html.find(">", img_start + 4)
lightbox: str = f"<span id=\"fig{counter}\"></span>\n" +\
f"<figure id=\"figure{counter}\">\n" +\
f" <a href=\"#figure{counter}\">\n" +\
f" {html[img_start:img_end + 1]}\n" +\
f" </a>\n"
alt_start: int = html.find("alt=\"", img_start + 4)
if alt_start > -1:
alt_end: int = html.find("\"", alt_start + 5)
lightbox = lightbox + f" <figcaption>\n" +\
f" {html[alt_start + 5:alt_end]}\n" +\
f" </figcaption>\n"
lightbox = lightbox + f" <div class=\"{lightbox_class}\">\n" +\
f" <div class=\"{wrapper_class}\">\n" +\
f" <a href=\"#fig{counter}\">\n" +\
f" [close]\n" +\
f" </a>\n" +\
f" {html[img_start:img_end + 1]}\n" +\
f" </div>\n" +\
f" </div>\n" +\
f"</figure>\n"
if html[img_start - 3:img_start] == "<p>" and html[img_end + 1:img_end + 5] == "</p>":
img_start -= 3
img_end += 4
html = html[:img_start] + lightbox + html[img_end + 1:]
img_start = html.find("<img", img_start + len(lightbox))
return html
def add_sidenotes(html: str,
toggle_class: str = "sidenote-toggle",
label_class: str = "sidenote-number",
sidenote_class: str = "sidenote") -> str:
counter: int = 0
start: int = html.find("")
while start > -1:
counter += 1
end: int = html.find("]", start)
text: str = html[start + 2:end]
sidenote: str = f"<label for=\"sn-{counter}\" class=\"{toggle_class} {label_class}\"></label>\n" +\
f"<input type=\"checkbox\" id=\"sn-{counter}\" class=\"{toggle_class}\" />\n" +\
f"<span class=\"{sidenote_class}\">\n" +\
f" {text}\n" +\
f"</span>\n"
html = html[:start] + sidenote + html[end + 1:]
start = html.find("", start + len(sidenote))
return html