mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
style: Add support for the ::marker pseudo element on list items. Alias :-moz-list-bullet/number to that in the parser.
Bug: 205202 Reviewed-by: emilio
This commit is contained in:
parent
ed74e8acbb
commit
ab8c00e41a
5 changed files with 24 additions and 2 deletions
|
@ -441,6 +441,11 @@ pub trait TElement:
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The ::marker pseudo-element of this element, if it exists.
|
||||||
|
fn marker_pseudo_element(&self) -> Option<Self> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
/// Execute `f` for each anonymous content child (apart from ::before and
|
/// Execute `f` for each anonymous content child (apart from ::before and
|
||||||
/// ::after) whose originating element is `self`.
|
/// ::after) whose originating element is `self`.
|
||||||
fn each_anonymous_content_child<F>(&self, _f: F)
|
fn each_anonymous_content_child<F>(&self, _f: F)
|
||||||
|
|
|
@ -33,7 +33,7 @@ impl ::selectors::parser::PseudoElement for PseudoElement {
|
||||||
fn valid_after_slotted(&self) -> bool {
|
fn valid_after_slotted(&self) -> bool {
|
||||||
matches!(
|
matches!(
|
||||||
*self,
|
*self,
|
||||||
PseudoElement::Before | PseudoElement::After | PseudoElement::Placeholder
|
PseudoElement::Before | PseudoElement::After | PseudoElement::Marker | PseudoElement::Placeholder
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,6 +180,8 @@ impl PseudoElement {
|
||||||
/// Whether this pseudo-element should actually exist if it has
|
/// Whether this pseudo-element should actually exist if it has
|
||||||
/// the given styles.
|
/// the given styles.
|
||||||
pub fn should_exist(&self, style: &ComputedValues) -> bool {
|
pub fn should_exist(&self, style: &ComputedValues) -> bool {
|
||||||
|
debug_assert!(self.is_eager());
|
||||||
|
|
||||||
if style.get_box().clone_display() == Display::None {
|
if style.get_box().clone_display() == Display::None {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,13 +195,16 @@ impl PseudoElement {
|
||||||
return Some(${pseudo_element_variant(pseudo)})
|
return Some(${pseudo_element_variant(pseudo)})
|
||||||
}
|
}
|
||||||
% endfor
|
% endfor
|
||||||
// Alias "-moz-selection" to "selection" at parse time.
|
// Alias some legacy prefixed pseudos to their standardized name at parse time:
|
||||||
"-moz-selection" => {
|
"-moz-selection" => {
|
||||||
return Some(PseudoElement::Selection);
|
return Some(PseudoElement::Selection);
|
||||||
}
|
}
|
||||||
"-moz-placeholder" => {
|
"-moz-placeholder" => {
|
||||||
return Some(PseudoElement::Placeholder);
|
return Some(PseudoElement::Placeholder);
|
||||||
}
|
}
|
||||||
|
"-moz-list-bullet" | "-moz-list-number" => {
|
||||||
|
return Some(PseudoElement::Marker);
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
if starts_with_ignore_ascii_case(name, "-moz-tree-") {
|
if starts_with_ignore_ascii_case(name, "-moz-tree-") {
|
||||||
return PseudoElement::tree_pseudo_element(name, Box::new([]))
|
return PseudoElement::tree_pseudo_element(name, Box::new([]))
|
||||||
|
|
|
@ -1137,6 +1137,14 @@ impl<'le> TElement for GeckoElement<'le> {
|
||||||
self.before_or_after_pseudo(/* is_before = */ false)
|
self.before_or_after_pseudo(/* is_before = */ false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn marker_pseudo_element(&self) -> Option<Self> {
|
||||||
|
if !self.has_properties() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe { bindings::Gecko_GetMarkerPseudo(self.0).as_ref().map(GeckoElement) }
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn is_html_element(&self) -> bool {
|
fn is_html_element(&self) -> bool {
|
||||||
self.namespace_id() == structs::kNameSpaceID_XHTML as i32
|
self.namespace_id() == structs::kNameSpaceID_XHTML as i32
|
||||||
|
|
|
@ -542,6 +542,10 @@ where
|
||||||
any_descendant |= self.invalidate_dom_descendants_of(anon_content, invalidations);
|
any_descendant |= self.invalidate_dom_descendants_of(anon_content, invalidations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(marker) = self.element.marker_pseudo_element() {
|
||||||
|
any_descendant |= self.invalidate_pseudo_element_or_nac(marker, invalidations);
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(before) = self.element.before_pseudo_element() {
|
if let Some(before) = self.element.before_pseudo_element() {
|
||||||
any_descendant |= self.invalidate_pseudo_element_or_nac(before, invalidations);
|
any_descendant |= self.invalidate_pseudo_element_or_nac(before, invalidations);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue