kinkgarden/kinkgarden

View on GitHub
kinks/templatetags/kink_column_icons.py

Summary

Maintainability
A
25 mins
Test Coverage
B
84%
from django import template
from django.utils.safestring import mark_safe

register = template.Library()


@register.simple_tag
def icon_svg():
    from xml.dom import minidom

    impl = minidom.getDOMImplementation()
    icons = ["heart", "check", "tilde", "no"]
    doc = impl.createDocument("http://www.w3.org/2000/svg", "svg", None)
    doc.documentElement.setAttribute("style", "display:none;")
    for name in icons:
        with minidom.parse(f"kinks/assets/{name}.svg") as orig:
            symbol = doc.createElement("symbol")
            symbol.setAttribute("id", name)
            symbol.setAttribute("viewBox", orig.documentElement.getAttribute("viewBox"))
            orig = orig.getElementsByTagName("g")[0]
            for child in list(orig.childNodes):
                if isinstance(child, minidom.Text):
                    orig.removeChild(child)
            orig.removeAttribute("id")
            orig.firstChild.removeAttribute("id")
            orig.firstChild.removeAttribute("style")
            symbol.appendChild(orig)
            doc.documentElement.appendChild(symbol)
    data = doc.toxml(encoding="UTF-8")
    data = data.replace(b'<?xml version="1.0" encoding="UTF-8"?>', b"")
    return mark_safe(data.decode("utf-8"))