angrybeanie_wagtail/env/lib/python3.12/site-packages/wagtail/admin/icons.py

40 lines
1 KiB
Python
Raw Permalink Normal View History

2025-07-25 21:32:16 +10:00
import hashlib
import itertools
import re
from functools import lru_cache
from django.template.loader import render_to_string
from django.urls import reverse
from wagtail import hooks
icon_comment_pattern = re.compile(r"<!--.*?-->", re.DOTALL)
@lru_cache(maxsize=None)
def get_icons():
icon_hooks = hooks.get_hooks("register_icons")
all_icons = sorted(itertools.chain.from_iterable(hook([]) for hook in icon_hooks))
combined_icon_markup = ""
for icon in all_icons:
symbol = (
render_to_string(icon)
.replace('xmlns="http://www.w3.org/2000/svg"', "")
.replace("svg", "symbol")
)
symbol = icon_comment_pattern.sub("", symbol)
combined_icon_markup += symbol
return render_to_string(
"wagtailadmin/shared/icons.html", {"icons": combined_icon_markup}
)
@lru_cache(maxsize=None)
def get_icon_sprite_hash():
return hashlib.sha1(get_icons().encode()).hexdigest()[:8]
def get_icon_sprite_url():
return reverse("wagtailadmin_sprite") + f"?h={get_icon_sprite_hash()}"