mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Use id instead of name for matching
Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>
This commit is contained in:
parent
3da5ef2cd4
commit
a824b2781f
3 changed files with 29 additions and 18 deletions
|
@ -1,18 +1,18 @@
|
||||||
/* We should use `content-visibility` but it is yet to be implemented.
|
/* We should use `content-visibility` but it is yet to be implemented.
|
||||||
* These rule would not comply with ::details-content and should be removed
|
* These rule would not comply with ::details-content and should be removed
|
||||||
* with it's implementation */
|
* with it's implementation */
|
||||||
slot:not([name]) {
|
slot[id="internal-contents-slot"] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
:host([open]) slot:not([name]) {
|
:host([open]) slot[id="internal-contents-slot"] {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
summary[name=internal-fallback-summary] {
|
summary[id="internal-fallback-summary"] {
|
||||||
display: list-item;
|
display: list-item;
|
||||||
counter-increment: list-item 0;
|
counter-increment: list-item 0;
|
||||||
list-style: disclosure-closed inside;
|
list-style: disclosure-closed inside;
|
||||||
}
|
}
|
||||||
:host([open]) summary[name=internal-fallback-summary] {
|
:host([open]) summary[id="internal-fallback-summary"] {
|
||||||
list-style-type: disclosure-open;
|
list-style-type: disclosure-open;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,8 +47,6 @@ const DEFAULT_SUMMARY: &str = "Details";
|
||||||
struct ShadowTree {
|
struct ShadowTree {
|
||||||
summary: Dom<HTMLSlotElement>,
|
summary: Dom<HTMLSlotElement>,
|
||||||
descendants: Dom<HTMLSlotElement>,
|
descendants: Dom<HTMLSlotElement>,
|
||||||
/// The summary that is displayed if no other summary exists
|
|
||||||
implicit_summary: Dom<HTMLElement>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
|
@ -145,40 +143,45 @@ impl HTMLDetailsElement {
|
||||||
);
|
);
|
||||||
link_element.set_stylesheet(details_stylesheet.unwrap());
|
link_element.set_stylesheet(details_stylesheet.unwrap());
|
||||||
|
|
||||||
let summary = HTMLSlotElement::new(local_name!("slot"), None, &document, None, can_gc);
|
let summary_slot = HTMLSlotElement::new(local_name!("slot"), None, &document, None, can_gc);
|
||||||
summary.upcast::<Element>().set_attribute(
|
summary_slot.upcast::<Element>().set_attribute(
|
||||||
&local_name!("name"),
|
&local_name!("id"),
|
||||||
AttrValue::from_atomic("internal-main-summary".to_owned()),
|
AttrValue::from_atomic("internal-summary-slot".to_owned()),
|
||||||
can_gc,
|
can_gc,
|
||||||
);
|
);
|
||||||
root.upcast::<Node>()
|
root.upcast::<Node>()
|
||||||
.AppendChild(summary.upcast::<Node>(), can_gc)
|
.AppendChild(summary_slot.upcast::<Node>(), can_gc)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let fallback_summary =
|
let fallback_summary =
|
||||||
HTMLElement::new(local_name!("summary"), None, &document, None, can_gc);
|
HTMLElement::new(local_name!("summary"), None, &document, None, can_gc);
|
||||||
fallback_summary.upcast::<Element>().set_attribute(
|
fallback_summary.upcast::<Element>().set_attribute(
|
||||||
&local_name!("name"),
|
&local_name!("id"),
|
||||||
AttrValue::from_atomic("internal-fallback-summary".to_owned()),
|
AttrValue::from_atomic("internal-fallback-summary".to_owned()),
|
||||||
can_gc,
|
can_gc,
|
||||||
);
|
);
|
||||||
fallback_summary
|
fallback_summary
|
||||||
.upcast::<Node>()
|
.upcast::<Node>()
|
||||||
.SetTextContent(Some(DEFAULT_SUMMARY.into()), can_gc);
|
.SetTextContent(Some(DEFAULT_SUMMARY.into()), can_gc);
|
||||||
summary
|
summary_slot
|
||||||
.upcast::<Node>()
|
.upcast::<Node>()
|
||||||
.AppendChild(fallback_summary.upcast::<Node>(), can_gc)
|
.AppendChild(fallback_summary.upcast::<Node>(), can_gc)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let descendants = HTMLSlotElement::new(local_name!("slot"), None, &document, None, can_gc);
|
let descendants_slot =
|
||||||
|
HTMLSlotElement::new(local_name!("slot"), None, &document, None, can_gc);
|
||||||
|
descendants_slot.upcast::<Element>().set_attribute(
|
||||||
|
&local_name!("id"),
|
||||||
|
AttrValue::from_atomic("internal-contents-slot".to_owned()),
|
||||||
|
can_gc,
|
||||||
|
);
|
||||||
root.upcast::<Node>()
|
root.upcast::<Node>()
|
||||||
.AppendChild(descendants.upcast::<Node>(), can_gc)
|
.AppendChild(descendants_slot.upcast::<Node>(), can_gc)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let _ = self.shadow_tree.borrow_mut().insert(ShadowTree {
|
let _ = self.shadow_tree.borrow_mut().insert(ShadowTree {
|
||||||
summary: summary.as_traced(),
|
summary: summary_slot.as_traced(),
|
||||||
descendants: descendants.as_traced(),
|
descendants: descendants_slot.as_traced(),
|
||||||
implicit_summary: fallback_summary.as_traced(),
|
|
||||||
});
|
});
|
||||||
self.upcast::<Node>()
|
self.upcast::<Node>()
|
||||||
.dirty(crate::dom::node::NodeDamage::OtherNodeDamage);
|
.dirty(crate::dom::node::NodeDamage::OtherNodeDamage);
|
||||||
|
|
|
@ -673,8 +673,16 @@ pub fn parse_ua_stylesheet(
|
||||||
.map(DocumentStyleSheet)
|
.map(DocumentStyleSheet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Parse stylesheet for <details> element to insert its UA shadow DOM.
|
||||||
|
///
|
||||||
|
/// TODO(stevennovaryo): The more approriate way to handle this is to use UA stylesheet.
|
||||||
|
/// But this element's styles needs to be in shadow-scoped stylesheet.
|
||||||
|
/// This could be done if an UA shadow-scoped UA sheet is introduced.
|
||||||
pub fn parse_details_stylesheet(
|
pub fn parse_details_stylesheet(
|
||||||
shared_lock: &SharedRwLock,
|
shared_lock: &SharedRwLock,
|
||||||
) -> Result<ServoArc<Stylesheet>, &'static str> {
|
) -> Result<ServoArc<Stylesheet>, &'static str> {
|
||||||
|
// FIXME: We are parsing it as a Author stylesheet, but according to, it's nature
|
||||||
|
// it should be an user agent stylesheet. This is because we are only allowing
|
||||||
|
// the actual UA stylesheet to have that origin.
|
||||||
parse_stylesheet_as_origin(shared_lock, "details.css", DETAILS_CSS, Origin::Author)
|
parse_stylesheet_as_origin(shared_lock, "details.css", DETAILS_CSS, Origin::Author)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue