Quellcode durchsuchen

#789 allow svg and base64 favicons

Rodja Trappe vor 2 Jahren
Ursprung
Commit
e5a4ab4e2b
1 geänderte Dateien mit 16 neuen und 0 gelöschten Zeilen
  1. 16 0
      nicegui/favicon.py

+ 16 - 0
nicegui/favicon.py

@@ -25,6 +25,10 @@ def get_favicon_url(page: 'page', prefix: str) -> str:
         return favicon
     elif not favicon:
         return f'{prefix}/_nicegui/{__version__}/static/favicon.ico'
+    if is_data_url(favicon):
+        return favicon
+    if is_svg(favicon):
+        return svg_to_data_url(favicon)
     if is_char(favicon):
         return char_to_data_url(favicon)
     elif page.path == '/':
@@ -41,6 +45,14 @@ def is_char(favicon: str) -> bool:
     return len(favicon) == 1
 
 
+def is_svg(favicon: str) -> bool:
+    return favicon.strip().startswith('<svg')
+
+
+def is_data_url(favicon: str) -> bool:
+    return favicon.startswith('data:')
+
+
 def char_to_data_url(char: str) -> str:
     svg = f'''
         <svg viewBox="0 0 128 128" width="128" height="128" xmlns="http://www.w3.org/2000/svg" >
@@ -58,6 +70,10 @@ def char_to_data_url(char: str) -> str:
             <text y=".9em" font-size="128" font-family="Georgia, sans-serif">{char}</text>
         </svg>
     '''
+    return svg_to_data_url(svg)
+
+
+def svg_to_data_url(svg: str) -> str:
     svg_urlencoded = urllib.parse.quote(svg)
     data_url = f"data:image/svg+xml,{svg_urlencoded}"
     return data_url