aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/layout_dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/layout_dom')
-rw-r--r--components/script/layout_dom/element.rs30
-rw-r--r--components/script/layout_dom/node.rs8
2 files changed, 28 insertions, 10 deletions
diff --git a/components/script/layout_dom/element.rs b/components/script/layout_dom/element.rs
index 9b50c9f3a2b..fd34d591f0c 100644
--- a/components/script/layout_dom/element.rs
+++ b/components/script/layout_dom/element.rs
@@ -216,11 +216,15 @@ impl<'dom> style::dom::TElement for ServoLayoutElement<'dom> {
}
fn has_part_attr(&self) -> bool {
- false
+ self.element
+ .get_attr_for_layout(&ns!(), &local_name!("part"))
+ .is_some()
}
fn exports_any_part(&self) -> bool {
- false
+ self.element
+ .get_attr_for_layout(&ns!(), &local_name!("exportparts"))
+ .is_some()
}
fn style_attribute(&self) -> Option<ArcBorrow<StyleLocked<PropertyDeclarationBlock>>> {
@@ -292,6 +296,17 @@ impl<'dom> style::dom::TElement for ServoLayoutElement<'dom> {
}
}
+ fn each_part<F>(&self, mut callback: F)
+ where
+ F: FnMut(&AtomIdent),
+ {
+ if let Some(parts) = self.element.get_parts_for_layout() {
+ for part in parts {
+ callback(AtomIdent::cast(part))
+ }
+ }
+ }
+
fn has_dirty_descendants(&self) -> bool {
unsafe {
self.as_node()
@@ -728,8 +743,12 @@ impl<'dom> ::selectors::Element for ServoLayoutElement<'dom> {
}
#[inline]
- fn is_part(&self, _name: &AtomIdent) -> bool {
- false
+ fn is_part(&self, name: &AtomIdent) -> bool {
+ self.element.has_class_or_part_for_layout(
+ name,
+ &local_name!("part"),
+ CaseSensitivity::CaseSensitive,
+ )
}
fn imported_part(&self, _: &AtomIdent) -> Option<AtomIdent> {
@@ -738,7 +757,8 @@ impl<'dom> ::selectors::Element for ServoLayoutElement<'dom> {
#[inline]
fn has_class(&self, name: &AtomIdent, case_sensitivity: CaseSensitivity) -> bool {
- self.element.has_class_for_layout(name, case_sensitivity)
+ self.element
+ .has_class_or_part_for_layout(name, &local_name!("class"), case_sensitivity)
}
fn is_html_slot_element(&self) -> bool {
diff --git a/components/script/layout_dom/node.rs b/components/script/layout_dom/node.rs
index dfb921b1ded..85b75f0b15f 100644
--- a/components/script/layout_dom/node.rs
+++ b/components/script/layout_dom/node.rs
@@ -119,9 +119,7 @@ impl<'dom> style::dom::TNode for ServoLayoutNode<'dom> {
type ConcreteShadowRoot = ServoShadowRoot<'dom>;
fn parent_node(&self) -> Option<Self> {
- self.node
- .composed_parent_node_ref()
- .map(Self::from_layout_js)
+ self.node.parent_node_ref().map(Self::from_layout_js)
}
fn first_child(&self) -> Option<Self> {
@@ -302,8 +300,8 @@ impl<'dom> ThreadSafeLayoutNode<'dom> for ServoThreadSafeLayoutNode<'dom> {
}
fn parent_style(&self) -> Arc<ComputedValues> {
- let parent = self.node.parent_node().unwrap().as_element().unwrap();
- let parent_data = parent.borrow_data().unwrap();
+ let parent_element = self.node.traversal_parent().unwrap();
+ let parent_data = parent_element.borrow_data().unwrap();
parent_data.styles.primary().clone()
}