mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
Create an utlity function for UA Shadow
Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>
This commit is contained in:
parent
3340e5e786
commit
1c2d292816
7 changed files with 45 additions and 72 deletions
|
@ -666,10 +666,6 @@ impl Element {
|
||||||
.upcast::<Node>()
|
.upcast::<Node>()
|
||||||
.set_containing_shadow_root(Some(&shadow_root));
|
.set_containing_shadow_root(Some(&shadow_root));
|
||||||
|
|
||||||
if is_ua_widget == IsUserAgentWidget::Yes {
|
|
||||||
shadow_root.upcast::<Node>().set_in_ua_widget();
|
|
||||||
}
|
|
||||||
|
|
||||||
let bind_context = BindContext {
|
let bind_context = BindContext {
|
||||||
tree_connected: self.upcast::<Node>().is_connected(),
|
tree_connected: self.upcast::<Node>().is_connected(),
|
||||||
tree_is_in_a_document_tree: self.upcast::<Node>().is_in_a_document_tree(),
|
tree_is_in_a_document_tree: self.upcast::<Node>().is_in_a_document_tree(),
|
||||||
|
@ -684,6 +680,36 @@ impl Element {
|
||||||
Ok(shadow_root)
|
Ok(shadow_root)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Attach a UA widget shadow root with its default parameters.
|
||||||
|
/// Additionally mark ShadowRoot to use styling configuration for a UA widget.
|
||||||
|
///
|
||||||
|
/// TODO: Ideally, all of the UA shadow root should use UA widget styling, but
|
||||||
|
/// some of the UA widget implemented prior to the implementation of Gecko's
|
||||||
|
/// UA widget matching, might need some tweaking.
|
||||||
|
pub(crate) fn attach_ua_shadow_root(
|
||||||
|
&self,
|
||||||
|
use_ua_widget_styling: bool,
|
||||||
|
can_gc: CanGc,
|
||||||
|
) -> DomRoot<ShadowRoot> {
|
||||||
|
let root = self
|
||||||
|
.attach_shadow(
|
||||||
|
IsUserAgentWidget::Yes,
|
||||||
|
ShadowRootMode::Closed,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
SlotAssignmentMode::Manual,
|
||||||
|
can_gc,
|
||||||
|
)
|
||||||
|
.expect("Attaching UA shadow root failed");
|
||||||
|
|
||||||
|
if use_ua_widget_styling {
|
||||||
|
root.upcast::<Node>().set_in_ua_widget();
|
||||||
|
}
|
||||||
|
|
||||||
|
root
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn detach_shadow(&self, can_gc: CanGc) {
|
pub(crate) fn detach_shadow(&self, can_gc: CanGc) {
|
||||||
let Some(ref shadow_root) = self.shadow_root() else {
|
let Some(ref shadow_root) = self.shadow_root() else {
|
||||||
unreachable!("Trying to detach a non-attached shadow root");
|
unreachable!("Trying to detach a non-attached shadow root");
|
||||||
|
|
|
@ -103,18 +103,10 @@ impl HTMLDetailsElement {
|
||||||
|
|
||||||
fn create_shadow_tree(&self, can_gc: CanGc) {
|
fn create_shadow_tree(&self, can_gc: CanGc) {
|
||||||
let document = self.owner_document();
|
let document = self.owner_document();
|
||||||
|
// TODO(stevennovaryo): Reimplement details styling.
|
||||||
let root = self
|
let root = self
|
||||||
.upcast::<Element>()
|
.upcast::<Element>()
|
||||||
.attach_shadow(
|
.attach_ua_shadow_root(false, can_gc);
|
||||||
IsUserAgentWidget::Yes,
|
|
||||||
ShadowRootMode::Closed,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
SlotAssignmentMode::Manual,
|
|
||||||
can_gc,
|
|
||||||
)
|
|
||||||
.expect("Attaching UA shadow root failed");
|
|
||||||
|
|
||||||
let summary = HTMLSlotElement::new(local_name!("slot"), None, &document, None, can_gc);
|
let summary = HTMLSlotElement::new(local_name!("slot"), None, &document, None, can_gc);
|
||||||
root.upcast::<Node>()
|
root.upcast::<Node>()
|
||||||
|
|
|
@ -1090,17 +1090,9 @@ impl HTMLInputElement {
|
||||||
/// or create one if none exists.
|
/// or create one if none exists.
|
||||||
fn shadow_root(&self, can_gc: CanGc) -> DomRoot<ShadowRoot> {
|
fn shadow_root(&self, can_gc: CanGc) -> DomRoot<ShadowRoot> {
|
||||||
self.upcast::<Element>().shadow_root().unwrap_or_else(|| {
|
self.upcast::<Element>().shadow_root().unwrap_or_else(|| {
|
||||||
|
// TODO(stevennovaryo): adjust type=color's styling.
|
||||||
self.upcast::<Element>()
|
self.upcast::<Element>()
|
||||||
.attach_shadow(
|
.attach_ua_shadow_root(self.input_type() == InputType::Text, can_gc)
|
||||||
IsUserAgentWidget::Yes,
|
|
||||||
ShadowRootMode::Closed,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
SlotAssignmentMode::Manual,
|
|
||||||
can_gc,
|
|
||||||
)
|
|
||||||
.expect("Attaching UA shadow root failed")
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1269,7 +1261,7 @@ impl HTMLInputElement {
|
||||||
} else {
|
} else {
|
||||||
value = DOMString::from("#000000");
|
value = DOMString::from("#000000");
|
||||||
}
|
}
|
||||||
let style = format!("background-color: {value}");
|
let style = format!("background-color: {value} !important; z-index: 10000");
|
||||||
color_shadow_tree
|
color_shadow_tree
|
||||||
.color_value
|
.color_value
|
||||||
.upcast::<Element>()
|
.upcast::<Element>()
|
||||||
|
|
|
@ -1996,17 +1996,10 @@ impl HTMLMediaElement {
|
||||||
// if we are already showing the controls.
|
// if we are already showing the controls.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let shadow_root = element
|
// FIXME: Recheck styling for media element
|
||||||
.attach_shadow(
|
let shadow_root = self
|
||||||
IsUserAgentWidget::Yes,
|
.upcast::<Element>()
|
||||||
ShadowRootMode::Closed,
|
.attach_ua_shadow_root(false, can_gc);
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
SlotAssignmentMode::Manual,
|
|
||||||
can_gc,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
let document = self.owner_document();
|
let document = self.owner_document();
|
||||||
let script = HTMLScriptElement::new(
|
let script = HTMLScriptElement::new(
|
||||||
local_name!("script"),
|
local_name!("script"),
|
||||||
|
|
|
@ -79,18 +79,8 @@ impl HTMLMeterElement {
|
||||||
|
|
||||||
fn create_shadow_tree(&self, can_gc: CanGc) {
|
fn create_shadow_tree(&self, can_gc: CanGc) {
|
||||||
let document = self.owner_document();
|
let document = self.owner_document();
|
||||||
let root = self
|
// FIXME: Add servo specific appearence reftest
|
||||||
.upcast::<Element>()
|
let root = self.upcast::<Element>().attach_ua_shadow_root(true, can_gc);
|
||||||
.attach_shadow(
|
|
||||||
IsUserAgentWidget::Yes,
|
|
||||||
ShadowRootMode::Closed,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
SlotAssignmentMode::Manual,
|
|
||||||
can_gc,
|
|
||||||
)
|
|
||||||
.expect("Attaching UA shadow root failed");
|
|
||||||
|
|
||||||
let meter_value = HTMLDivElement::new(local_name!("div"), None, &document, None, can_gc);
|
let meter_value = HTMLDivElement::new(local_name!("div"), None, &document, None, can_gc);
|
||||||
root.upcast::<Node>()
|
root.upcast::<Node>()
|
||||||
|
|
|
@ -77,18 +77,8 @@ impl HTMLProgressElement {
|
||||||
|
|
||||||
fn create_shadow_tree(&self, can_gc: CanGc) {
|
fn create_shadow_tree(&self, can_gc: CanGc) {
|
||||||
let document = self.owner_document();
|
let document = self.owner_document();
|
||||||
let root = self
|
// FIXME: Add servo specific appearence reftest
|
||||||
.upcast::<Element>()
|
let root = self.upcast::<Element>().attach_ua_shadow_root(true, can_gc);
|
||||||
.attach_shadow(
|
|
||||||
IsUserAgentWidget::Yes,
|
|
||||||
ShadowRootMode::Closed,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
SlotAssignmentMode::Manual,
|
|
||||||
can_gc,
|
|
||||||
)
|
|
||||||
.expect("Attaching UA shadow root failed");
|
|
||||||
|
|
||||||
let progress_bar = HTMLDivElement::new(local_name!("div"), None, &document, None, can_gc);
|
let progress_bar = HTMLDivElement::new(local_name!("div"), None, &document, None, can_gc);
|
||||||
// FIXME: This should use ::-moz-progress-bar
|
// FIXME: This should use ::-moz-progress-bar
|
||||||
|
|
|
@ -258,18 +258,8 @@ impl HTMLSelectElement {
|
||||||
|
|
||||||
fn create_shadow_tree(&self, can_gc: CanGc) {
|
fn create_shadow_tree(&self, can_gc: CanGc) {
|
||||||
let document = self.owner_document();
|
let document = self.owner_document();
|
||||||
let root = self
|
// TODO: Adjust <select> element styling considering
|
||||||
.upcast::<Element>()
|
let root = self.upcast::<Element>().attach_ua_shadow_root(true, can_gc);
|
||||||
.attach_shadow(
|
|
||||||
IsUserAgentWidget::Yes,
|
|
||||||
ShadowRootMode::Closed,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
SlotAssignmentMode::Manual,
|
|
||||||
can_gc,
|
|
||||||
)
|
|
||||||
.expect("Attaching UA shadow root failed");
|
|
||||||
|
|
||||||
let select_box = HTMLDivElement::new(local_name!("div"), None, &document, None, can_gc);
|
let select_box = HTMLDivElement::new(local_name!("div"), None, &document, None, can_gc);
|
||||||
select_box.upcast::<Element>().set_string_attribute(
|
select_box.upcast::<Element>().set_string_attribute(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue