dom tweak

This commit is contained in:
Will McGugan
2021-10-28 11:53:39 +01:00
parent e6b71b035c
commit f0e96b680c
2 changed files with 21 additions and 11 deletions

View File

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

View File

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