apply rule

This commit is contained in:
Will McGugan
2021-11-08 10:18:35 +00:00
parent 99c87e5519
commit fd6381fddc
3 changed files with 10 additions and 36 deletions

View File

@@ -1,23 +0,0 @@
view.buttons {
layout: dock;
}
.buttons .button {
dock: top;
size: 10px;
}
#widget {
visibility: visible;
text-style: bold;
border: dashed !important;
border-top: dashed green;
border-bottom: red;
padding: 1 0;
margin: 1;
layout: dock;
dock-edge: left;
}

View File

@@ -43,7 +43,6 @@ class Styles:
_rule_visibility: Visibility | None = None
_rule_layout: str | None = None
# _rule_text: Style | None = None
_rule_text_color: Color | None = None
_rule_text_bgcolor: Color | None = None
_rule_text_style: str | None = None

View File

@@ -47,11 +47,15 @@ class Stylesheet:
raise StylesheetError(f"failed to parse css; {error}")
self.rules.extend(rules)
def apply(self, node: DOMNode) -> None:
@classmethod
def _check_rule(cls, rule: RuleSet, node: DOMNode) -> Iterable[Specificity3]:
for selector_set in rule.selector_set:
if _check_selectors(selector_set.selectors, node):
yield selector_set.specificity
rule_attributes: dict[str, list[tuple[Specificity4, object]]] = defaultdict(
list
)
def apply(self, node: DOMNode) -> None:
rule_attributes: dict[str, list[tuple[Specificity4, object]]]
rule_attributes = defaultdict(list)
for rule in self.rules:
for specificity in self._check_rule(rule, node):
@@ -60,19 +64,13 @@ class Stylesheet:
):
rule_attributes[key].append((rule_specificity, value))
print(rule_attributes)
get_first_item = itemgetter(0)
node_rules = [
(name, max(specificity_rules, key=itemgetter(0))[1])
(name, max(specificity_rules, key=get_first_item)[1])
for name, specificity_rules in rule_attributes.items()
]
print(node_rules)
node.styles.apply_rules(node_rules)
def _check_rule(self, rule: RuleSet, node: DOMNode) -> Iterable[Specificity3]:
for selector_set in rule.selector_set:
if _check_selectors(selector_set.selectors, node):
yield selector_set.specificity
if __name__ == "__main__":