|
@@ -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
|