Преглед изворни кода

start with using custom favicon for default route

Rodja Trappe пре 2 година
родитељ
комит
50fdbf39bc
2 измењених фајлова са 14 додато и 7 уклоњено
  1. 8 4
      nicegui/favicon.py
  2. 6 3
      nicegui/nicegui.py

+ 8 - 4
nicegui/favicon.py

@@ -2,6 +2,7 @@ import urllib.parse
 from pathlib import Path
 from typing import TYPE_CHECKING, Optional
 
+from fastapi import Response
 from fastapi.responses import FileResponse
 
 from . import __version__, globals
@@ -26,13 +27,17 @@ def get_favicon_url(page: 'page', prefix: str) -> str:
     elif is_svg(favicon):
         return svg_to_data_url(favicon)
     elif is_char(favicon):
-        return char_to_data_url(favicon)
+        return svg_to_data_url(char_to_svg(favicon))
     elif page.path == '/':
         return f'{prefix}/favicon.ico'
     else:
         return f'{prefix}{page.path}/favicon.ico'
 
 
+def get_favicon_response() -> Response:
+    return Response(char_to_svg(globals.favicon), media_type='image/svg+xml')
+
+
 def is_remote_url(favicon: str) -> bool:
     return favicon.startswith('http://') or favicon.startswith('https://')
 
@@ -49,8 +54,8 @@ def is_data_url(favicon: str) -> bool:
     return favicon.startswith('data:')
 
 
-def char_to_data_url(char: str) -> str:
-    svg = f'''
+def char_to_svg(char: str) -> str:
+    return f'''
         <svg viewBox="0 0 128 128" width="128" height="128" xmlns="http://www.w3.org/2000/svg" >
             <style>
                 @supports (-moz-appearance:none) {{
@@ -66,7 +71,6 @@ 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:

+ 6 - 3
nicegui/nicegui.py

@@ -15,7 +15,7 @@ from fastapi_socketio import SocketManager
 from nicegui import json
 from nicegui.json import NiceGUIJSONResponse
 
-from . import __version__, background_tasks, binding, globals, outbox
+from . import __version__, background_tasks, binding, favicon, globals, outbox
 from .app import App
 from .client import Client
 from .dependencies import js_components, js_dependencies
@@ -66,8 +66,11 @@ def handle_startup(with_welcome_message: bool = True) -> None:
                            'remove the guard or replace it with\n'
                            '   if __name__ in {"__main__", "__mp_main__"}:\n'
                            'to allow for multiprocessing.')
-    if globals.favicon and Path(globals.favicon).exists():
-        globals.app.add_route('/favicon.ico', lambda _: FileResponse(globals.favicon))
+    if globals.favicon:
+        if Path(globals.favicon).exists():
+            globals.app.add_route('/favicon.ico', lambda _: FileResponse(globals.favicon))
+        else:
+            globals.app.add_route('/favicon.ico', lambda _: favicon.get_favicon_response())
     else:
         globals.app.add_route('/favicon.ico', lambda _: FileResponse(Path(__file__).parent / 'static' / 'favicon.ico'))
     globals.state = globals.State.STARTING