diff --git a/modules/ui_extensions.py b/modules/ui_extensions.py index 0c141352a..e1e546d9a 100644 --- a/modules/ui_extensions.py +++ b/modules/ui_extensions.py @@ -391,27 +391,27 @@ def create_html(search_text, sort_column): if ext.get('status', None) is None or type(ext['status']) == str: # old format ext['status'] = 0 if ext['url'] is None or ext['url'] == '': - status = f"
{ui_symbols.svg_bullet.color('#00C0FD')}
" + status = f"
{ui_symbols.svg_bullet.style('#00C0FD')}
" elif ext['status'] > 0: if ext['status'] == 1: - status = f"
{ui_symbols.svg_bullet.color('#00FD9C')}
" + status = f"
{ui_symbols.svg_bullet.style('#00FD9C')}
" elif ext['status'] == 2: - status = f"
{ui_symbols.svg_bullet.color('#FFC300')}
" + status = f"
{ui_symbols.svg_bullet.style('#FFC300')}
" elif ext['status'] == 3: - status = f"
{ui_symbols.svg_bullet.color('#FFC300')}
" + status = f"
{ui_symbols.svg_bullet.style('#FFC300')}
" elif ext['status'] == 4: - status = f"
{ui_symbols.svg_bullet.color('#4E22FF')}
" + status = f"
{ui_symbols.svg_bullet.style('#4E22FF')}
" elif ext['status'] == 5: - status = f"
{ui_symbols.svg_bullet.color('#CE0000')}
" + status = f"
{ui_symbols.svg_bullet.style('#CE0000')}
" elif ext['status'] == 6: - status = f"
{ui_symbols.svg_bullet.color('#AEAEAE')}
" + status = f"
{ui_symbols.svg_bullet.style('#AEAEAE')}
" else: - status = f"
{ui_symbols.svg_bullet.color('#008EBC')}
" + status = f"
{ui_symbols.svg_bullet.style('#008EBC')}
" else: if updated < datetime.now(timezone.utc) - timedelta(6*30): # TZ-aware - status = f"
{ui_symbols.svg_bullet.color('#C000CF')}
" + status = f"
{ui_symbols.svg_bullet.style('#C000CF')}
" else: - status = f"
{ui_symbols.svg_bullet.color('#7C7C7C')}
" + status = f"
{ui_symbols.svg_bullet.style('#7C7C7C')}
" code += f""" diff --git a/modules/ui_symbols.py b/modules/ui_symbols.py index ddc16c273..91d5b113c 100644 --- a/modules/ui_symbols.py +++ b/modules/ui_symbols.py @@ -1,3 +1,9 @@ +import re +from functools import lru_cache + + +# Basic symbols + refresh = '⟲' close = '✕' load = '⇧' @@ -41,23 +47,38 @@ sort_time_dsc = '\uf0dd' style_apply = '↶' style_save = '↷' +# Configurable symbols + class SVGSymbol: + __re_display = re.compile(r"(?<=display:\s*?)\w+(?=;)") + + @lru_cache # Class method due to RUF001, but also mostly so the `style` method shows params in IDE + @classmethod + def __stylize(cls, svg: str, color: str | None = None, display: str | None = None): + if color: + svg = re.sub("currentColor", color, svg, count=1) + if display: + svg = cls.__re_display.sub(display, svg, count=1) + return svg + def __init__(self, svg: str): self.svg = svg - self.before = "" - self.after = "" self.supports_color = False + self.supports_display = False if "currentColor" in self.svg: self.supports_color = True - self.before, self.after = self.svg.split("currentColor", maxsplit=1) + if self.__re_display.search(self.svg): + self.supports_display = True - def color(self, color: str): - if self.supports_color: - return self.before + color + self.after - else: - return self.svg + def style(self, color: str | None = None, display: str | None = None) -> str: + style_args = { + "color": color if color and self.supports_color else None, + "display": display if display and self.supports_display else None + } + return self.__stylize(self.svg, **style_args) def __str__(self): return self.svg + svg_bullet = SVGSymbol("")