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("")