aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r--components/script/dom/element.rs65
1 files changed, 37 insertions, 28 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 4a94f345b02..d9c2f6907e7 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -22,7 +22,7 @@ use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use dom::bindings::codegen::UnionTypes::NodeOrString;
use dom::bindings::error::{Error, ErrorResult, Fallible};
use dom::bindings::inheritance::{Castable, ElementTypeId, HTMLElementTypeId, NodeTypeId};
-use dom::bindings::js::{JS, LayoutJS, MutNullableHeap};
+use dom::bindings::js::{JS, LayoutJS, MutNullableJS};
use dom::bindings::js::{Root, RootedReference};
use dom::bindings::refcounted::{Trusted, TrustedPromise};
use dom::bindings::reflector::DomObject;
@@ -51,9 +51,11 @@ use dom::htmlimageelement::{HTMLImageElement, LayoutHTMLImageElementHelpers};
use dom::htmlinputelement::{HTMLInputElement, LayoutHTMLInputElementHelpers};
use dom::htmllabelelement::HTMLLabelElement;
use dom::htmllegendelement::HTMLLegendElement;
+use dom::htmllinkelement::HTMLLinkElement;
use dom::htmlobjectelement::HTMLObjectElement;
use dom::htmloptgroupelement::HTMLOptGroupElement;
use dom::htmlselectelement::HTMLSelectElement;
+use dom::htmlstyleelement::HTMLStyleElement;
use dom::htmltablecellelement::{HTMLTableCellElement, HTMLTableCellElementLayoutHelpers};
use dom::htmltableelement::{HTMLTableElement, HTMLTableElementLayoutHelpers};
use dom::htmltablerowelement::{HTMLTableRowElement, HTMLTableRowElementLayoutHelpers};
@@ -75,7 +77,6 @@ use html5ever::serialize;
use html5ever::serialize::SerializeOpts;
use html5ever::serialize::TraversalScope;
use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode};
-use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks};
use html5ever_atoms::{Prefix, LocalName, Namespace, QualName};
use js::jsapi::{HandleValue, JSAutoCompartment};
use parking_lot::RwLock;
@@ -96,8 +97,7 @@ use std::rc::Rc;
use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering};
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
-use style::context::ReflowGoal;
-use style::dom::TRestyleDamage;
+use style::context::{QuirksMode, ReflowGoal};
use style::element_state::*;
use style::matching::{common_style_affecting_attributes, rare_style_affecting_attributes};
use style::parser::ParserContextExtraData;
@@ -110,6 +110,7 @@ use style::sink::Push;
use style::stylist::ApplicableDeclarationBlock;
use style::values::CSSFloat;
use style::values::specified::{self, CSSColor, CSSRGBA, LengthOrPercentage};
+use stylesheet_loader::StylesheetOwner;
// TODO: Update focus state when the top-level browsing context gains or loses system focus,
// and when the element enters or leaves a browsing context container.
@@ -126,8 +127,8 @@ pub struct Element {
id_attribute: DOMRefCell<Option<Atom>>,
#[ignore_heap_size_of = "Arc"]
style_attribute: DOMRefCell<Option<Arc<RwLock<PropertyDeclarationBlock>>>>,
- attr_list: MutNullableHeap<JS<NamedNodeMap>>,
- class_list: MutNullableHeap<JS<DOMTokenList>>,
+ attr_list: MutNullableJS<NamedNodeMap>,
+ class_list: MutNullableJS<DOMTokenList>,
state: Cell<ElementState>,
atomic_flags: AtomicElementFlags,
}
@@ -398,7 +399,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
PropertyDeclaration::BackgroundImage(DeclaredValue::Value(
background_image::SpecifiedValue(vec![
background_image::single_value::SpecifiedValue(Some(
- specified::Image::for_cascade(Some(url.into()), specified::url::UrlExtraData { })
+ specified::Image::for_cascade(url.into(), specified::url::UrlExtraData { })
))
])))));
}
@@ -1095,8 +1096,8 @@ impl Element {
let quirks_mode = document_from_node(self).quirks_mode();
let is_equal = |lhs: &Atom, rhs: &Atom| {
match quirks_mode {
- NoQuirks | LimitedQuirks => lhs == rhs,
- Quirks => lhs.eq_ignore_ascii_case(&rhs),
+ QuirksMode::NoQuirks | QuirksMode::LimitedQuirks => lhs == rhs,
+ QuirksMode::Quirks => lhs.eq_ignore_ascii_case(&rhs),
}
};
self.get_attribute(&ns!(), &local_name!("class"))
@@ -1276,7 +1277,7 @@ impl Element {
// Step 7
if *self.root_element() == *self {
- if doc.quirks_mode() != Quirks {
+ if doc.quirks_mode() != QuirksMode::Quirks {
win.scroll(x, y, behavior);
}
@@ -1285,7 +1286,7 @@ impl Element {
// Step 9
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
win.scroll(x, y, behavior);
return;
@@ -1656,7 +1657,7 @@ impl ElementMethods for Element {
// Step 5
if *self.root_element() == *self {
- if doc.quirks_mode() == Quirks {
+ if doc.quirks_mode() == QuirksMode::Quirks {
return 0.0;
}
@@ -1666,7 +1667,7 @@ impl ElementMethods for Element {
// Step 7
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
return win.ScrollY() as f64;
}
@@ -1707,7 +1708,7 @@ impl ElementMethods for Element {
// Step 7
if *self.root_element() == *self {
- if doc.quirks_mode() != Quirks {
+ if doc.quirks_mode() != QuirksMode::Quirks {
win.scroll(win.ScrollX() as f64, y, behavior);
}
@@ -1716,7 +1717,7 @@ impl ElementMethods for Element {
// Step 9
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
win.scroll(win.ScrollX() as f64, y, behavior);
return;
@@ -1748,7 +1749,7 @@ impl ElementMethods for Element {
// Step 5
if *self.root_element() == *self {
- if doc.quirks_mode() != Quirks {
+ if doc.quirks_mode() != QuirksMode::Quirks {
// Step 6
return win.ScrollX() as f64;
}
@@ -1758,7 +1759,7 @@ impl ElementMethods for Element {
// Step 7
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
return win.ScrollX() as f64;
}
@@ -1799,7 +1800,7 @@ impl ElementMethods for Element {
// Step 7
if *self.root_element() == *self {
- if doc.quirks_mode() == Quirks {
+ if doc.quirks_mode() == QuirksMode::Quirks {
return;
}
@@ -1809,7 +1810,7 @@ impl ElementMethods for Element {
// Step 9
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
win.scroll(x, win.ScrollY() as f64, behavior);
return;
@@ -2421,6 +2422,18 @@ impl Element {
})
}
+ pub fn as_stylesheet_owner(&self) -> Option<&StylesheetOwner> {
+ if let Some(s) = self.downcast::<HTMLStyleElement>() {
+ return Some(s as &StylesheetOwner)
+ }
+
+ if let Some(l) = self.downcast::<HTMLLinkElement>() {
+ return Some(l as &StylesheetOwner)
+ }
+
+ None
+ }
+
// https://html.spec.whatwg.org/multipage/#category-submit
pub fn as_maybe_validatable(&self) -> Option<&Validatable> {
let element = match self.upcast::<Node>().type_id() {
@@ -2663,15 +2676,11 @@ impl Element {
self.set_enabled_state(false);
return;
}
- match ancestor.children()
- .find(|child| child.is::<HTMLLegendElement>()) {
- Some(ref legend) => {
- // XXXabinader: should we save previous ancestor to avoid this iteration?
- if node.ancestors().any(|ancestor| ancestor == *legend) {
- continue;
- }
- },
- None => (),
+ if let Some(ref legend) = ancestor.children().find(|n| n.is::<HTMLLegendElement>()) {
+ // XXXabinader: should we save previous ancestor to avoid this iteration?
+ if node.ancestors().any(|ancestor| ancestor == *legend) {
+ continue;
+ }
}
self.set_disabled_state(true);
self.set_enabled_state(false);