aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock1
-rw-r--r--components/layout_2020/Cargo.toml1
-rw-r--r--components/layout_2020/dom_traversal.rs33
-rw-r--r--components/style/values/generics/counters.rs4
-rw-r--r--components/style/values/specified/counters.rs4
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)?))
}),