mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
dom tweak
This commit is contained in:
@@ -9,14 +9,26 @@ from ._node_list import NodeList
|
||||
|
||||
@rich.repr.auto
|
||||
class DOMNode(MessagePump):
|
||||
"""A node in a hierarchy of things forming the UI.
|
||||
|
||||
Nodes are mountable and may be styled with CSS.
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, name: str | None = None, id: str | None = None) -> None:
|
||||
self._name = name
|
||||
self._id = id
|
||||
self._class_names: set[str] = set()
|
||||
self.registry = NodeList()
|
||||
self._classes: set[str] = set()
|
||||
self.children = NodeList()
|
||||
self.styles: Styles = Styles()
|
||||
super().__init__()
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "name", self._name, None
|
||||
yield "id", self._id, None
|
||||
if self._classes:
|
||||
yield "classes", self._classes
|
||||
|
||||
@property
|
||||
def id(self) -> str | None:
|
||||
return self._id
|
||||
@@ -26,8 +38,8 @@ class DOMNode(MessagePump):
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def class_names(self) -> frozenset[str]:
|
||||
return frozenset(self._class_names)
|
||||
def classes(self) -> frozenset[str]:
|
||||
return frozenset(self._classes)
|
||||
|
||||
@property
|
||||
def css_type(self) -> str:
|
||||
@@ -38,24 +50,23 @@ class DOMNode(MessagePump):
|
||||
result: list[tuple[DOMNode, list[DOMNode]]] = []
|
||||
append = result.append
|
||||
|
||||
# TODO:
|
||||
node: DOMNode = self
|
||||
while isinstance(node._parent, DOMNode):
|
||||
append((node, node.registry[:]))
|
||||
append((node, node.children[:]))
|
||||
node = node._parent
|
||||
return result[::-1]
|
||||
|
||||
def has_class(self, *class_names: str) -> bool:
|
||||
return self._class_names.issuperset(class_names)
|
||||
return self._classes.issuperset(class_names)
|
||||
|
||||
def add_class(self, *class_names: str) -> None:
|
||||
"""Add class names."""
|
||||
self._class_names.update(class_names)
|
||||
self._classes.update(class_names)
|
||||
|
||||
def remove_class(self, *class_names: str) -> None:
|
||||
"""Remove class names"""
|
||||
self._class_names.difference_update(class_names)
|
||||
self._classes.difference_update(class_names)
|
||||
|
||||
def toggle_class(self, *class_names: str) -> None:
|
||||
"""Toggle class names"""
|
||||
self._class_names.symmetric_difference_update(class_names)
|
||||
self._classes.symmetric_difference_update(class_names)
|
||||
|
||||
@@ -150,7 +150,6 @@ class Widget(DOMNode):
|
||||
if self.padding is not None:
|
||||
renderable = Padding(renderable, self.padding)
|
||||
if self.border not in ("", "none"):
|
||||
1 / 0
|
||||
_border_style = self.console.get_style(self.border_style)
|
||||
renderable = Border(
|
||||
renderable,
|
||||
|
||||
Reference in New Issue
Block a user