Browse Source

code review

Falko Schindler 3 năm trước cách đây
mục cha
commit
90697cef55

+ 2 - 2
main.py

@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
-from nicegui import ui, initial_page
+from nicegui import ui
 from contextlib import contextmanager
 from contextlib import contextmanager
 import inspect
 import inspect
 from nicegui.elements.markdown import Markdown
 from nicegui.elements.markdown import Markdown
@@ -11,7 +11,7 @@ import re
 import asyncio
 import asyncio
 
 
 # add docutils css to webpage
 # add docutils css to webpage
-initial_page.head_html += docutils.core.publish_parts('', writer_name='html')['stylesheet']
+Element.wp_stack[0].head_html += docutils.core.publish_parts('', writer_name='html')['stylesheet']
 
 
 @contextmanager
 @contextmanager
 def example(content: Union[Element, str]):
 def example(content: Union[Element, str]):

+ 1 - 1
nicegui/__init__.py

@@ -1,2 +1,2 @@
-from nicegui.nicegui import app, ui, initial_page
+from nicegui.nicegui import app, ui
 from nicegui import elements
 from nicegui import elements

+ 2 - 1
nicegui/elements/element.py

@@ -14,8 +14,9 @@ class Element:
 
 
         self.parent_view = self.view_stack[-1]
         self.parent_view = self.view_stack[-1]
         self.parent_view.add(view)
         self.parent_view.add(view)
-        view.add_page(self.wp_stack[-1])
         self.view = view
         self.view = view
+        self.page = self.wp_stack[-1]
+        self.view.add_page(self.page)
 
 
         self.visible = True
         self.visible = True
 
 

+ 1 - 1
nicegui/elements/link.py

@@ -8,6 +8,6 @@ class Link(Element):
                  href: str = '#',
                  href: str = '#',
                  ):
                  ):
 
 
-        view = jp.A(text=text, href=href)
+        view = jp.A(text=text, href=href, classes='underline text-blue')
 
 
         super().__init__(view)
         super().__init__(view)

+ 1 - 1
nicegui/elements/log.py

@@ -28,7 +28,7 @@ class Log(Element):
 
 
         await asyncio.gather(*[
         await asyncio.gather(*[
             self.view.run_method(f'push("{urllib.parse.quote(line)}")', socket)
             self.view.run_method(f'push("{urllib.parse.quote(line)}")', socket)
-            for socket in WebPage.sockets[Element.wp_stack[-1].page_id].values()
+            for socket in WebPage.sockets[self.page.page_id].values()
         ])
         ])
 
 
     def push(self, line: str):
     def push(self, line: str):

+ 9 - 7
nicegui/elements/page.py

@@ -1,23 +1,25 @@
 import justpy as jp
 import justpy as jp
-
-from .element import Element
+from typing import Optional
 from pygments.formatters import HtmlFormatter
 from pygments.formatters import HtmlFormatter
-
+from .element import Element
 
 
 class Page(jp.QuasarPage):
 class Page(jp.QuasarPage):
 
 
-    def __init__(self, route: str = '', title: str = 'NiceGUI', favicon: str = 'favicon.ico', **kwargs):
+    default_title: str
+    default_favicon: str
+
+    def __init__(self, route: str, title: Optional[str] = None, favicon: Optional[str] = None):
         """Page
         """Page
 
 
         Creates a new page at the given path.
         Creates a new page at the given path.
 
 
         :param route: the route of the new page. All paths must start with '/', otherwise an error occurs.
         :param route: the route of the new page. All paths must start with '/', otherwise an error occurs.
         """
         """
-        super().__init__(**kwargs)
+        super().__init__()
 
 
         self.delete_flag = False
         self.delete_flag = False
-        self.title = title
-        self.favicon = favicon
+        self.title = title if title is not None else self.default_title
+        self.favicon = favicon if favicon is not None else self.default_favicon
 
 
         self.tailwind = True  # use Tailwind classes instead of Quasars
         self.tailwind = True  # use Tailwind classes instead of Quasars
         self.css = HtmlFormatter().get_style_defs('.codehilite')
         self.css = HtmlFormatter().get_style_defs('.codehilite')

+ 4 - 2
nicegui/elements/scene.py

@@ -2,6 +2,7 @@ from typing import Callable
 import traceback
 import traceback
 from .element import Element
 from .element import Element
 from .custom_view import CustomView
 from .custom_view import CustomView
+from .page import Page
 from .scene_object3d import Object3D
 from .scene_object3d import Object3D
 
 
 class SceneView(CustomView):
 class SceneView(CustomView):
@@ -59,7 +60,7 @@ class Scene(Element):
 
 
     def __enter__(self):
     def __enter__(self):
         self.view_stack.append(self.view)
         self.view_stack.append(self.view)
-        scene = self.view.objects.get('scene', SceneObject(self.view))
+        scene = self.view.objects.get('scene', SceneObject(self.view, self.page))
         Object3D.stack.clear()
         Object3D.stack.clear()
         Object3D.stack.append(scene)
         Object3D.stack.append(scene)
         return self
         return self
@@ -69,6 +70,7 @@ class Scene(Element):
 
 
 class SceneObject:
 class SceneObject:
 
 
-    def __init__(self, view: SceneView):
+    def __init__(self, view: SceneView, page: Page):
         self.id = 'scene'
         self.id = 'scene'
         self.view = view
         self.view = view
+        self.page = page

+ 2 - 2
nicegui/elements/scene_object3d.py

@@ -4,7 +4,6 @@ from typing import Optional
 import uuid
 import uuid
 import numpy as np
 import numpy as np
 from justpy.htmlcomponents import WebPage
 from justpy.htmlcomponents import WebPage
-from .element import Element
 
 
 class Object3D:
 class Object3D:
 
 
@@ -16,6 +15,7 @@ class Object3D:
         self.name = None
         self.name = None
         self.parent = self.stack[-1]
         self.parent = self.stack[-1]
         self.view = self.parent.view
         self.view = self.parent.view
+        self.page = self.parent.page
         self.args = args
         self.args = args
         self.color = '#ffffff'
         self.color = '#ffffff'
         self.opacity = 1.0
         self.opacity = 1.0
@@ -34,7 +34,7 @@ class Object3D:
         return self
         return self
 
 
     def run_command(self, command: str, socket=None):
     def run_command(self, command: str, socket=None):
-        sockets = [socket] if socket else WebPage.sockets.get(Element.wp_stack[-1].page_id, {}).values()
+        sockets = [socket] if socket else WebPage.sockets.get(self.page.page_id, {}).values()
         for socket in sockets:
         for socket in sockets:
             asyncio.get_event_loop().create_task(self.view.run_method(command, socket))
             asyncio.get_event_loop().create_task(self.view.run_method(command, socket))
 
 

+ 5 - 4
nicegui/nicegui.py

@@ -36,7 +36,8 @@ def shutdown():
 app = jp.app
 app = jp.app
 ui = Ui()
 ui = Ui()
 
 
-initial_page = ui.page('/', ui.config.title, ui.config.favicon)
-initial_page.__enter__()
-jp.justpy(lambda: initial_page, start_server=False)
-
+ui.page.default_title = ui.config.title
+ui.page.default_favicon = ui.config.favicon
+page = ui.page('/')
+page.__enter__()
+jp.justpy(lambda: page, start_server=False)

+ 1 - 2
nicegui/run.py

@@ -2,7 +2,6 @@ import inspect
 import sys
 import sys
 import webbrowser
 import webbrowser
 import uvicorn
 import uvicorn
-from .elements.element import Element
 from .config import config  # NOTE: before justpy
 from .config import config  # NOTE: before justpy
 import justpy as jp
 import justpy as jp
 
 
@@ -13,7 +12,7 @@ if not config.interactive and config.reload and not inspect.stack()[-2].filename
     uvicorn.run('nicegui:app', host=config.host, port=config.port, lifespan='on', reload=True)
     uvicorn.run('nicegui:app', host=config.host, port=config.port, lifespan='on', reload=True)
     sys.exit()
     sys.exit()
 
 
-def run(self, *, host='0.0.0.0', port=80, reload=True, show=True):
+def run(self, *, host='0.0.0.0', port=80, title='NiceGUI', favicon='favicon.ico', reload=True, show=True):
 
 
     if config.interactive or reload == False:  # NOTE: if reload == True we already started uvicorn above
     if config.interactive or reload == False:  # NOTE: if reload == True we already started uvicorn above
         if show:
         if show: