diff options
-rw-r--r-- | Cargo.lock | 1 | ||||
-rw-r--r-- | components/layout_2020/Cargo.toml | 1 | ||||
-rw-r--r-- | components/layout_2020/dom_traversal.rs | 33 | ||||
-rw-r--r-- | components/style/values/generics/counters.rs | 4 | ||||
-rw-r--r-- | components/style/values/specified/counters.rs | 4 |
5 files changed, 29 insertions, 14 deletions
diff --git a/Cargo.lock b/Cargo.lock index fc6def6eea8..65c946e497a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2917,6 +2917,7 @@ dependencies = [ "fnv", "gfx", "gfx_traits", + "html5ever", "ipc-channel", "libc", "mitochondria", diff --git a/components/layout_2020/Cargo.toml b/components/layout_2020/Cargo.toml index 8d4a6d62f63..51c08c19e34 100644 --- a/components/layout_2020/Cargo.toml +++ b/components/layout_2020/Cargo.toml @@ -21,6 +21,7 @@ euclid = "0.20" fnv = "1.0" gfx = {path = "../gfx"} gfx_traits = {path = "../gfx_traits"} +html5ever = "0.25" ipc-channel = "0.14" libc = "0.2" msg = {path = "../msg"} diff --git a/components/layout_2020/dom_traversal.rs b/components/layout_2020/dom_traversal.rs index 9d0d25cd5e4..ad58f70c65a 100644 --- a/components/layout_2020/dom_traversal.rs +++ b/components/layout_2020/dom_traversal.rs @@ -9,8 +9,11 @@ use crate::replaced::ReplacedContent; use crate::style_ext::{Display, DisplayGeneratingBox, DisplayInside, DisplayOutside}; use crate::wrapper::GetRawData; use atomic_refcell::{AtomicRefCell, AtomicRefMut}; +use html5ever::LocalName; use net_traits::image::base::Image as NetImage; -use script_layout_interface::wrapper_traits::{LayoutNode, ThreadSafeLayoutNode}; +use script_layout_interface::wrapper_traits::{ + LayoutNode, ThreadSafeLayoutElement, ThreadSafeLayoutNode, +}; use servo_arc::Arc as ServoArc; use std::marker::PhantomData as marker; use std::sync::Arc; @@ -253,24 +256,23 @@ fn pseudo_element_style<'dom, Node>( where Node: NodeExt<'dom>, { - if let Some(pseudo_element) = match which { + match which { WhichPseudoElement::Before => element.to_threadsafe().get_before_pseudo(), WhichPseudoElement::After => element.to_threadsafe().get_after_pseudo(), - } { + } + .and_then(|pseudo_element| { 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, - _element: Node, + element: Node, _context: &LayoutContext, ) -> Vec<PseudoElementContentItem> where @@ -282,14 +284,25 @@ where for item in items.iter() { match item { ContentItem::String(s) => { - vec.push(PseudoElementContentItem::Text(s.to_string())) + vec.push(PseudoElementContentItem::Text(s.to_string())); + }, + ContentItem::Attr(attr) => { + let element = element + .to_threadsafe() + .as_element() + .expect("Expected an element"); + let attr_val = element + .get_attr(&attr.namespace_url, &LocalName::from(&*attr.attribute)); + vec.push(PseudoElementContentItem::Text( + attr_val.map_or("".to_string(), |s| s.to_string()), + )); }, - _ => unimplemented!(), + _ => (), } } vec }, - _ => vec![], + Content::Normal | Content::None => unreachable!(), } } diff --git a/components/style/values/generics/counters.rs b/components/style/values/generics/counters.rs index 05e34703911..fa7e77a8b56 100644 --- a/components/style/values/generics/counters.rs +++ b/components/style/values/generics/counters.rs @@ -8,7 +8,7 @@ use crate::computed_values::list_style_type::T as ListStyleType; #[cfg(feature = "gecko")] use crate::values::generics::CounterStyle; -#[cfg(feature = "gecko")] +#[cfg(any(feature = "gecko", feature = "servo-layout-2020"))] use crate::values::specified::Attr; use crate::values::CustomIdent; use std::ops::Deref; @@ -212,7 +212,7 @@ pub enum GenericContentItem<ImageUrl> { #[cfg(feature = "gecko")] MozAltContent, /// `attr([namespace? `|`]? ident)` - #[cfg(feature = "gecko")] + #[cfg(any(feature = "gecko", feature = "servo-layout-2020"))] Attr(Attr), /// `url(url)` Url(ImageUrl), diff --git a/components/style/values/specified/counters.rs b/components/style/values/specified/counters.rs index 0849cc19116..2b31ccc1a07 100644 --- a/components/style/values/specified/counters.rs +++ b/components/style/values/specified/counters.rs @@ -12,7 +12,7 @@ use crate::values::generics::counters::CounterPair; #[cfg(feature = "gecko")] use crate::values::generics::CounterStyle; use crate::values::specified::url::SpecifiedImageUrl; -#[cfg(feature = "gecko")] +#[cfg(any(feature = "gecko", feature = "servo-layout-2020"))] use crate::values::specified::Attr; use crate::values::specified::Integer; use crate::values::CustomIdent; @@ -163,7 +163,7 @@ impl Parse for Content { let style = Content::parse_counter_style(context, input); Ok(generics::ContentItem::Counters(name, separator, style)) }), - #[cfg(feature = "gecko")] + #[cfg(any(feature = "gecko", feature = "servo-layout-2020"))] "attr" => input.parse_nested_block(|input| { Ok(generics::ContentItem::Attr(Attr::parse_function(context, input)?)) }), |