diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/layout_2020/dom_traversal.rs | 46 | ||||
-rw-r--r-- | components/style/properties/longhands/counters.mako.rs | 1 |
2 files changed, 35 insertions, 12 deletions
diff --git a/components/layout_2020/dom_traversal.rs b/components/layout_2020/dom_traversal.rs index 5318a74f62e..9d0d25cd5e4 100644 --- a/components/layout_2020/dom_traversal.rs +++ b/components/layout_2020/dom_traversal.rs @@ -17,8 +17,10 @@ use std::sync::Arc; use style::dom::{OpaqueNode, TNode}; use style::properties::ComputedValues; use style::selector_parser::PseudoElement; +use style::values::generics::counters::Content; +use style::values::generics::counters::ContentItem; -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug)] pub enum WhichPseudoElement { Before, After, @@ -244,29 +246,51 @@ impl NonReplacedContents { } fn pseudo_element_style<'dom, Node>( - _which: WhichPseudoElement, - _element: Node, - _context: &LayoutContext, + which: WhichPseudoElement, + element: Node, + context: &LayoutContext, ) -> Option<ServoArc<ComputedValues>> where Node: NodeExt<'dom>, { - // FIXME: run the cascade, then return None for `content: normal` or `content: none` - // https://drafts.csswg.org/css2/generate.html#content - None + if let Some(pseudo_element) = match which { + WhichPseudoElement::Before => element.to_threadsafe().get_before_pseudo(), + WhichPseudoElement::After => element.to_threadsafe().get_after_pseudo(), + } { + let style = pseudo_element.style(context.shared_context()); + if style.ineffective_content_property() { + None + } else { + Some(style) + } + } else { + None + } } fn generate_pseudo_element_content<'dom, Node>( - _pseudo_element_style: &ComputedValues, + pseudo_element_style: &ComputedValues, _element: Node, _context: &LayoutContext, ) -> Vec<PseudoElementContentItem> where Node: NodeExt<'dom>, { - let _ = PseudoElementContentItem::Text; - let _ = PseudoElementContentItem::Replaced; - unimplemented!() + match &pseudo_element_style.get_counters().content { + Content::Items(ref items) => { + let mut vec = vec![]; + for item in items.iter() { + match item { + ContentItem::String(s) => { + vec.push(PseudoElementContentItem::Text(s.to_string())) + }, + _ => unimplemented!(), + } + } + vec + }, + _ => vec![], + } } pub struct BoxSlot<'dom> { diff --git a/components/style/properties/longhands/counters.mako.rs b/components/style/properties/longhands/counters.mako.rs index 8e91c98ce83..db035568c71 100644 --- a/components/style/properties/longhands/counters.mako.rs +++ b/components/style/properties/longhands/counters.mako.rs @@ -11,7 +11,6 @@ ${helpers.predefined_type( "Content", "computed::Content::normal()", engines="gecko servo-2013 servo-2020", - servo_2020_pref="layout.2020.unimplemented", initial_specified_value="specified::Content::normal()", animation_value_type="discrete", spec="https://drafts.csswg.org/css-content/#propdef-content", |