diff --git a/libervia/backend/tools/common/template.py b/libervia/backend/tools/common/template.py
index c8ea5a1b..a71a236e 100644
--- a/libervia/backend/tools/common/template.py
+++ b/libervia/backend/tools/common/template.py
@@ -18,27 +18,37 @@
"""Template generation"""
-import os.path
-import time
-import re
-import json
-from datetime import datetime
-from pathlib import Path
from collections import namedtuple
-from typing import Optional, List, Tuple, Union
+from datetime import datetime
+import html
+import json
+import os.path
+from pathlib import Path
+import re
+import time
+from typing import List, Optional, Tuple, Union
from xml.sax.saxutils import quoteattr
+
from babel import support
from babel import Locale
from babel.core import UnknownLocaleError
+from jinja2 import is_undefined
+from jinja2 import utils
+from jinja2 import TemplateNotFound
+from jinja2 import pass_context
+from jinja2.loaders import split_template_path
+from lxml import etree
+from markupsafe import Markup as safe
import pygments
from pygments import lexers
from pygments import formatters
+
+from libervia.backend.core import exceptions
from libervia.backend.core.constants import Const as C
from libervia.backend.core.i18n import _
-from libervia.backend.core import exceptions
+from libervia.backend.core.log import getLogger
from libervia.backend.tools import config
from libervia.backend.tools.common import date_utils
-from libervia.backend.core.log import getLogger
log = getLogger(__name__)
@@ -60,13 +70,7 @@ except:
"pip install jinja2"
)
-from lxml import etree
-from markupsafe import Markup as safe
-from jinja2 import is_undefined
-from jinja2 import utils
-from jinja2 import TemplateNotFound
-from jinja2 import pass_context
-from jinja2.loaders import split_template_path
+
HTML_EXT = ("html", "xhtml")
RE_ATTR_ESCAPE = re.compile(r"[^a-z_-]")
@@ -955,18 +959,19 @@ class Renderer(object):
defs_elt.append(icon_svg_elt)
return safe(etree.tostring(svg_elt, encoding="unicode"))
- def _icon_use(self, name, cls="", id=""):
- if id:
- id = id.replace('"', '_')
- return safe('\n'.format(
- name=name,
- cls=(" " + cls) if cls else "",
- id=f' id="{id}"' if id else ""
- )
- )
+ def _icon_use(self, name: str, cls: str = "", **kwargs: str) -> safe:
+ """Insert a icon previously defined with [_icon_defs]"""
+ extra_attrs = " ".join(f'{k}="{html.escape(str(v))}"' for k, v in kwargs.items())
+ return safe(
+ '\n'.format(
+ name=name,
+ cls=(" " + cls) if cls else "",
+ extra_attrs=" " + extra_attrs if extra_attrs else ""
+ )
+ )
def _icon_from_client(self, client):
"""Get icon name to represent a disco client"""