|
@@ -1,11 +1,10 @@
|
|
|
-import urllib.parse
|
|
|
-from collections import deque
|
|
|
from typing import Any, Optional
|
|
|
|
|
|
from ..element import Element
|
|
|
+from .label import Label
|
|
|
|
|
|
|
|
|
-class Log(Element, component='log.js'):
|
|
|
+class Log(Element):
|
|
|
|
|
|
def __init__(self, max_lines: Optional[int] = None) -> None:
|
|
|
"""Log View
|
|
@@ -15,26 +14,16 @@ class Log(Element, component='log.js'):
|
|
|
:param max_lines: maximum number of lines before dropping oldest ones (default: `None`)
|
|
|
"""
|
|
|
super().__init__()
|
|
|
- self._props['max_lines'] = max_lines
|
|
|
- self._props['lines'] = ''
|
|
|
+ self.max_lines = max_lines
|
|
|
self._classes.append('nicegui-log')
|
|
|
- self.lines: deque[str] = deque(maxlen=max_lines)
|
|
|
- self.total_count: int = 0
|
|
|
|
|
|
def push(self, line: Any) -> None:
|
|
|
"""Add a new line to the log.
|
|
|
|
|
|
:param line: the line to add (can contain line breaks)
|
|
|
"""
|
|
|
- new_lines = [urllib.parse.quote(line) for line in str(line).splitlines()]
|
|
|
- self.lines.extend(new_lines)
|
|
|
- self._props['lines'] = '\n'.join(self.lines)
|
|
|
- self.total_count += len(new_lines)
|
|
|
- self.run_method('push', urllib.parse.quote(str(line)), self.total_count)
|
|
|
-
|
|
|
- def clear(self) -> None:
|
|
|
- """Clear the log."""
|
|
|
- super().clear()
|
|
|
- self._props['lines'] = ''
|
|
|
- self.lines.clear()
|
|
|
- self.run_method('clear')
|
|
|
+ for text in str(line).splitlines():
|
|
|
+ with self:
|
|
|
+ Label(text)
|
|
|
+ while self.max_lines is not None and len(self.default_slot.children) > self.max_lines:
|
|
|
+ self.remove(0)
|