mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
fix for virtual nodes css
This commit is contained in:
@@ -28,6 +28,25 @@ from .tokenizer import TokenError
|
||||
from .types import Specificity3, Specificity6
|
||||
|
||||
|
||||
class _VirtualDOMNode(DOMNode):
|
||||
"""A DOM node that exists only to gether styles."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
parent: DOMNode,
|
||||
*,
|
||||
name: str | None = None,
|
||||
id: str | None = None,
|
||||
classes: str | None = None,
|
||||
) -> None:
|
||||
self._virtual_parent = parent
|
||||
super().__init__(name=name, id=id, classes=classes)
|
||||
|
||||
def refresh(self, *, repaint: bool = True, layout: bool = False) -> None:
|
||||
"""Pass the refresh up to the parent, because this object will not exist during render."""
|
||||
self._virtual_parent.refresh(repaint=repaint, layout=layout)
|
||||
|
||||
|
||||
class StylesheetParseError(StylesheetError):
|
||||
def __init__(self, errors: StylesheetErrors) -> None:
|
||||
self.errors = errors
|
||||
@@ -408,7 +427,7 @@ class Stylesheet:
|
||||
|
||||
node._component_styles.clear()
|
||||
for component in node._get_component_classes():
|
||||
virtual_node = DOMNode(classes=component)
|
||||
virtual_node = _VirtualDOMNode(node, classes=component)
|
||||
virtual_node._attach(node)
|
||||
self.apply(virtual_node, animate=False)
|
||||
node._component_styles[component] = virtual_node.styles
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from functools import cache
|
||||
from inspect import getfile
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
@@ -314,7 +315,9 @@ class DOMNode(MessagePump):
|
||||
|
||||
return css_stack
|
||||
|
||||
def _get_component_classes(self) -> set[str]:
|
||||
@classmethod
|
||||
@cache
|
||||
def _get_component_classes(cls) -> set[str]:
|
||||
"""Gets the component classes for this class and inherited from bases.
|
||||
|
||||
Component classes are inherited from base classes, unless
|
||||
@@ -323,14 +326,13 @@ class DOMNode(MessagePump):
|
||||
Returns:
|
||||
A set with all the component classes available.
|
||||
"""
|
||||
|
||||
component_classes: set[str] = set()
|
||||
for base in self._node_bases:
|
||||
for base in cls._css_bases(cls):
|
||||
component_classes.update(base.__dict__.get("COMPONENT_CLASSES", set()))
|
||||
if not base.__dict__.get("_inherit_component_classes", True):
|
||||
break
|
||||
|
||||
return component_classes
|
||||
return frozenset(component_classes)
|
||||
|
||||
@property
|
||||
def parent(self) -> DOMNode | None:
|
||||
|
||||
Reference in New Issue
Block a user