aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2015-10-31 10:05:45 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2015-10-31 10:05:45 +0530
commit521a87180a85709f8f704df33537f79bd131bf71 (patch)
tree4cac4c0dc50a40f9fa31b745f3ada54e1ee293d9 /components/script/dom
parent7512aa69c034767cfb41206180bec50b020b2b0f (diff)
parent79ac365a68333072d80c41c05e56effbe1335f3d (diff)
downloadservo-521a87180a85709f8f704df33537f79bd131bf71.tar.gz
servo-521a87180a85709f8f704df33537f79bd131bf71.zip
Auto merge of #8162 - bholley:centralize_event_states, r=pcwalton
Centralize event states in rust-selectors This still needs a rev bump on rust-selectors once https://github.com/servo/rust-selectors/pull/55 gets merged. <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8162) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/bindings/trace.rs2
-rw-r--r--components/script/dom/document.rs23
-rw-r--r--components/script/dom/element.rs106
-rw-r--r--components/script/dom/htmlbuttonelement.rs3
-rw-r--r--components/script/dom/htmlelement.rs7
-rw-r--r--components/script/dom/htmlfieldsetelement.rs3
-rw-r--r--components/script/dom/htmlinputelement.rs21
-rw-r--r--components/script/dom/htmloptgroupelement.rs3
-rw-r--r--components/script/dom/htmloptionelement.rs3
-rw-r--r--components/script/dom/htmlselectelement.rs3
-rw-r--r--components/script/dom/htmltextareaelement.rs3
11 files changed, 77 insertions, 100 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index c78429f8368..f18719073fc 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -62,6 +62,7 @@ use profile_traits::time::ProfilerChan as TimeProfilerChan;
use script_task::ScriptChan;
use script_traits::{TimerEventChan, TimerEventId, TimerSource, UntrustedNodeAddress};
use selectors::parser::PseudoElement;
+use selectors::states::*;
use serde::{Deserialize, Serialize};
use smallvec::SmallVec;
use std::boxed::FnBox;
@@ -308,6 +309,7 @@ no_jsmanaged_fields!(TimeProfilerChan);
no_jsmanaged_fields!(MemProfilerChan);
no_jsmanaged_fields!(PseudoElement);
no_jsmanaged_fields!(Length);
+no_jsmanaged_fields!(ElementState);
impl JSTraceable for Box<ScriptChan + Send> {
#[inline]
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 2ad0a12262f..0a94f9f5504 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -32,7 +32,7 @@ use dom::customevent::CustomEvent;
use dom::documentfragment::DocumentFragment;
use dom::documenttype::DocumentType;
use dom::domimplementation::DOMImplementation;
-use dom::element::{Element, ElementCreator, EventState};
+use dom::element::{Element, ElementCreator};
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::eventtarget::{EventTarget};
use dom::htmlanchorelement::HTMLAnchorElement;
@@ -85,6 +85,7 @@ use net_traits::{AsyncResponseTarget, PendingAsyncLoad};
use num::ToPrimitive;
use script_task::{MainThreadScriptMsg, Runnable};
use script_traits::{MouseButton, UntrustedNodeAddress};
+use selectors::states::*;
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
use std::boxed::FnBox;
@@ -174,8 +175,8 @@ pub struct Document {
/// This field is set to the document itself for inert documents.
/// https://html.spec.whatwg.org/multipage/#appropriate-template-contents-owner-document
appropriate_template_contents_owner_document: MutNullableHeap<JS<Document>>,
- // The collection of EventStates that have been changed since the last restyle.
- event_state_changes: DOMRefCell<HashMap<JS<Element>, EventState>>,
+ // The collection of ElementStates that have been changed since the last restyle.
+ element_state_changes: DOMRefCell<HashMap<JS<Element>, ElementState>>,
}
impl PartialEq for Document {
@@ -305,7 +306,7 @@ impl Document {
pub fn needs_reflow(&self) -> bool {
self.GetDocumentElement().is_some() &&
- (self.upcast::<Node>().get_has_dirty_descendants() || !self.event_state_changes.borrow().is_empty())
+ (self.upcast::<Node>().get_has_dirty_descendants() || !self.element_state_changes.borrow().is_empty())
}
/// Returns the first `base` element in the DOM that has an `href` attribute.
@@ -1185,7 +1186,7 @@ pub enum DocumentSource {
#[allow(unsafe_code)]
pub trait LayoutDocumentHelpers {
unsafe fn is_html_document_for_layout(&self) -> bool;
- unsafe fn drain_event_state_changes(&self) -> Vec<(LayoutJS<Element>, EventState)>;
+ unsafe fn drain_element_state_changes(&self) -> Vec<(LayoutJS<Element>, ElementState)>;
}
#[allow(unsafe_code)]
@@ -1197,8 +1198,8 @@ impl LayoutDocumentHelpers for LayoutJS<Document> {
#[inline]
#[allow(unrooted_must_root)]
- unsafe fn drain_event_state_changes(&self) -> Vec<(LayoutJS<Element>, EventState)> {
- let mut changes = (*self.unsafe_get()).event_state_changes.borrow_mut_for_layout();
+ unsafe fn drain_element_state_changes(&self) -> Vec<(LayoutJS<Element>, ElementState)> {
+ let mut changes = (*self.unsafe_get()).element_state_changes.borrow_mut_for_layout();
let drain = changes.drain();
let layout_drain = drain.map(|(k, v)| (k.to_layout(), v));
Vec::from_iter(layout_drain)
@@ -1268,7 +1269,7 @@ impl Document {
reflow_timeout: Cell::new(None),
base_element: Default::default(),
appropriate_template_contents_owner_document: Default::default(),
- event_state_changes: DOMRefCell::new(HashMap::new()),
+ element_state_changes: DOMRefCell::new(HashMap::new()),
}
}
@@ -1334,12 +1335,12 @@ impl Document {
self.idmap.borrow().get(&id).map(|ref elements| (*elements)[0].root())
}
- pub fn record_event_state_change(&self, el: &Element, which: EventState) {
- let mut map = self.event_state_changes.borrow_mut();
+ pub fn record_element_state_change(&self, el: &Element, which: ElementState) {
+ let mut map = self.element_state_changes.borrow_mut();
let empty;
{
let states = map.entry(JS::from_ref(el))
- .or_insert(EventState::empty());
+ .or_insert(ElementState::empty());
states.toggle(which);
empty = states.is_empty();
}
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index d2636820362..46628935bb1 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -26,6 +26,7 @@ use dom::bindings::error::{Error, ErrorResult, Fallible};
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, LayoutJS, MutNullableHeap};
use dom::bindings::js::{Root, RootedReference};
+use dom::bindings::trace::JSTraceable;
use dom::bindings::utils::XMLName::InvalidXMLName;
use dom::bindings::utils::{namespace_from_domstring, validate_and_extract, xml_name_type};
use dom::characterdata::CharacterData;
@@ -63,8 +64,8 @@ use html5ever::serialize::TraversalScope;
use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode};
use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks};
use selectors::matching::{DeclarationBlock, matches};
-use selectors::parser::parse_author_origin_selector_list_from_str;
-use selectors::parser::{AttrSelector, NamespaceConstraint};
+use selectors::parser::{AttrSelector, NamespaceConstraint, parse_author_origin_selector_list_from_str};
+use selectors::states::*;
use smallvec::VecLike;
use std::ascii::AsciiExt;
use std::borrow::{Cow, ToOwned};
@@ -80,26 +81,12 @@ use style::properties::{PropertyDeclaration, PropertyDeclarationBlock, parse_sty
use style::values::CSSFloat;
use style::values::specified::{self, CSSColor, CSSRGBA};
use url::UrlParser;
+use util::mem::HeapSizeOf;
use util::str::{DOMString, LengthOrPercentageOrAuto};
-bitflags! {
- #[doc = "Element Event States."]
- #[derive(JSTraceable, HeapSizeOf)]
- flags EventState: u8 {
- #[doc = "The mouse is down on this element. \
- (https://html.spec.whatwg.org/multipage/#selector-active). \
- FIXME(#7333): set/unset this when appropriate"]
- const IN_ACTIVE_STATE = 0x01,
- #[doc = "This element has focus."]
- const IN_FOCUS_STATE = 0x02,
- #[doc = "The mouse is hovering over this element."]
- const IN_HOVER_STATE = 0x04,
- #[doc = "Content is enabled (and can be disabled)."]
- const IN_ENABLED_STATE = 0x08,
- #[doc = "Content is disabled."]
- const IN_DISABLED_STATE = 0x10,
- }
-}
+// 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.
+// https://html.spec.whatwg.org/multipage/#selector-focus
#[dom_struct]
pub struct Element {
@@ -112,7 +99,7 @@ pub struct Element {
style_attribute: DOMRefCell<Option<PropertyDeclarationBlock>>,
attr_list: MutNullableHeap<JS<NamedNodeMap>>,
class_list: MutNullableHeap<JS<DOMTokenList>>,
- event_state: Cell<EventState>,
+ state: Cell<ElementState>,
}
impl PartialEq for Element {
@@ -141,11 +128,11 @@ impl Element {
pub fn new_inherited(local_name: DOMString,
namespace: Namespace, prefix: Option<DOMString>,
document: &Document) -> Element {
- Element::new_inherited_with_state(EventState::empty(), local_name,
+ Element::new_inherited_with_state(ElementState::empty(), local_name,
namespace, prefix, document)
}
- pub fn new_inherited_with_state(state: EventState, local_name: DOMString,
+ pub fn new_inherited_with_state(state: ElementState, local_name: DOMString,
namespace: Namespace, prefix: Option<DOMString>,
document: &Document)
-> Element {
@@ -159,7 +146,7 @@ impl Element {
style_attribute: DOMRefCell::new(None),
attr_list: Default::default(),
class_list: Default::default(),
- event_state: Cell::new(state),
+ state: Cell::new(state),
}
}
@@ -252,7 +239,7 @@ pub trait LayoutElementHelpers {
fn get_checked_state_for_layout(&self) -> bool;
fn get_indeterminate_state_for_layout(&self) -> bool;
- fn get_event_state_for_layout(&self) -> EventState;
+ fn get_state_for_layout(&self) -> ElementState;
}
impl LayoutElementHelpers for LayoutJS<Element> {
@@ -605,9 +592,9 @@ impl LayoutElementHelpers for LayoutJS<Element> {
#[inline]
#[allow(unsafe_code)]
- fn get_event_state_for_layout(&self) -> EventState {
+ fn get_state_for_layout(&self) -> ElementState {
unsafe {
- (*self.unsafe_get()).event_state.get()
+ (*self.unsafe_get()).state.get()
}
}
}
@@ -1583,6 +1570,16 @@ impl VirtualMethods for Element {
}
}
+macro_rules! state_getter {
+ ($(
+ $(#[$Flag_attr: meta])*
+ state $css: expr => $variant: ident / $method: ident /
+ $flag: ident = $value: expr,
+ )+) => {
+ $( fn $method(&self) -> bool { Element::get_state(self).contains($flag) } )+
+ }
+}
+
impl<'a> ::selectors::Element for Root<Element> {
fn parent_element(&self) -> Option<Root<Element>> {
self.upcast::<Node>().GetParentElement()
@@ -1649,42 +1646,11 @@ impl<'a> ::selectors::Element for Root<Element> {
self.namespace()
}
- fn get_hover_state(&self) -> bool {
- Element::get_hover_state(self)
- }
-
- fn get_active_state(&self) -> bool {
- Element::get_active_state(self)
- }
-
- fn get_focus_state(&self) -> bool {
- // TODO: Also check whether the top-level browsing context has the system focus,
- // and whether this element is a browsing context container.
- // https://html.spec.whatwg.org/multipage/#selector-focus
- Element::get_focus_state(self)
- }
+ state_pseudo_classes!(state_getter);
fn get_id(&self) -> Option<Atom> {
self.id_attribute.borrow().clone()
}
- fn get_disabled_state(&self) -> bool {
- Element::get_disabled_state(self)
- }
- fn get_enabled_state(&self) -> bool {
- Element::get_enabled_state(self)
- }
- fn get_checked_state(&self) -> bool {
- match self.downcast::<HTMLInputElement>() {
- Some(input) => input.Checked(),
- None => false,
- }
- }
- fn get_indeterminate_state(&self) -> bool {
- match self.downcast::<HTMLInputElement>() {
- Some(input) => input.get_indeterminate_state(),
- None => false,
- }
- }
fn has_class(&self, name: &Atom) -> bool {
Element::has_class(&**self, name)
}
@@ -1834,8 +1800,12 @@ impl Element {
self.set_click_in_progress(false);
}
- fn set_state(&self, which: EventState, value: bool) {
- let mut state = self.event_state.get();
+ pub fn get_state(&self) -> ElementState {
+ self.state.get()
+ }
+
+ pub fn set_state(&self, which: ElementState, value: bool) {
+ let mut state = self.state.get();
if state.contains(which) == value {
return
}
@@ -1843,14 +1813,14 @@ impl Element {
true => state.insert(which),
false => state.remove(which),
};
- self.event_state.set(state);
+ self.state.set(state);
let node = self.upcast::<Node>();
- node.owner_doc().record_event_state_change(self, which);
+ node.owner_doc().record_element_state_change(self, which);
}
pub fn get_active_state(&self) -> bool {
- self.event_state.get().contains(IN_ACTIVE_STATE)
+ self.state.get().contains(IN_ACTIVE_STATE)
}
pub fn set_active_state(&self, value: bool) {
@@ -1858,7 +1828,7 @@ impl Element {
}
pub fn get_focus_state(&self) -> bool {
- self.event_state.get().contains(IN_FOCUS_STATE)
+ self.state.get().contains(IN_FOCUS_STATE)
}
pub fn set_focus_state(&self, value: bool) {
@@ -1866,7 +1836,7 @@ impl Element {
}
pub fn get_hover_state(&self) -> bool {
- self.event_state.get().contains(IN_HOVER_STATE)
+ self.state.get().contains(IN_HOVER_STATE)
}
pub fn set_hover_state(&self, value: bool) {
@@ -1874,7 +1844,7 @@ impl Element {
}
pub fn get_enabled_state(&self) -> bool {
- self.event_state.get().contains(IN_ENABLED_STATE)
+ self.state.get().contains(IN_ENABLED_STATE)
}
pub fn set_enabled_state(&self, value: bool) {
@@ -1882,7 +1852,7 @@ impl Element {
}
pub fn get_disabled_state(&self) -> bool {
- self.event_state.get().contains(IN_DISABLED_STATE)
+ self.state.get().contains(IN_DISABLED_STATE)
}
pub fn set_disabled_state(&self, value: bool) {
diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs
index 5146c7e4888..203f04c0009 100644
--- a/components/script/dom/htmlbuttonelement.rs
+++ b/components/script/dom/htmlbuttonelement.rs
@@ -9,7 +9,7 @@ use dom::bindings::codegen::Bindings::HTMLButtonElementBinding::HTMLButtonElemen
use dom::bindings::conversions::Castable;
use dom::bindings::js::Root;
use dom::document::Document;
-use dom::element::{AttributeMutation, Element, IN_ENABLED_STATE};
+use dom::element::{AttributeMutation, Element};
use dom::event::Event;
use dom::eventtarget::EventTarget;
use dom::htmlelement::HTMLElement;
@@ -19,6 +19,7 @@ use dom::htmlformelement::{SubmittedFrom, HTMLFormElement};
use dom::node::{Node, document_from_node, window_from_node};
use dom::validitystate::ValidityState;
use dom::virtualmethods::VirtualMethods;
+use selectors::states::*;
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
use std::cell::Cell;
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index ba2bcdacc16..bb52cbc2402 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -17,7 +17,7 @@ use dom::bindings::utils::Reflectable;
use dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration};
use dom::document::Document;
use dom::domstringmap::DOMStringMap;
-use dom::element::{AttributeMutation, Element, EventState};
+use dom::element::{AttributeMutation, Element};
use dom::eventtarget::EventTarget;
use dom::htmlbodyelement::HTMLBodyElement;
use dom::htmlframesetelement::HTMLFrameSetElement;
@@ -27,6 +27,7 @@ use dom::node::{Node, SEQUENTIALLY_FOCUSABLE};
use dom::node::{document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use msg::constellation_msg::FocusType;
+use selectors::states::*;
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
use std::default::Default;
@@ -51,10 +52,10 @@ impl PartialEq for HTMLElement {
impl HTMLElement {
pub fn new_inherited(tag_name: DOMString, prefix: Option<DOMString>,
document: &Document) -> HTMLElement {
- HTMLElement::new_inherited_with_state(EventState::empty(), tag_name, prefix, document)
+ HTMLElement::new_inherited_with_state(ElementState::empty(), tag_name, prefix, document)
}
- pub fn new_inherited_with_state(state: EventState, tag_name: DOMString,
+ pub fn new_inherited_with_state(state: ElementState, tag_name: DOMString,
prefix: Option<DOMString>, document: &Document)
-> HTMLElement {
HTMLElement {
diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs
index 63c614d308f..98c6b86b5f7 100644
--- a/components/script/dom/htmlfieldsetelement.rs
+++ b/components/script/dom/htmlfieldsetelement.rs
@@ -9,7 +9,7 @@ use dom::bindings::codegen::InheritTypes::{ElementTypeId, HTMLElementTypeId, Nod
use dom::bindings::conversions::Castable;
use dom::bindings::js::{Root, RootedReference};
use dom::document::Document;
-use dom::element::{AttributeMutation, Element, IN_ENABLED_STATE};
+use dom::element::{AttributeMutation, Element};
use dom::htmlcollection::{CollectionFilter, HTMLCollection};
use dom::htmlelement::HTMLElement;
use dom::htmlformelement::{FormControl, HTMLFormElement};
@@ -17,6 +17,7 @@ use dom::htmllegendelement::HTMLLegendElement;
use dom::node::{Node, window_from_node};
use dom::validitystate::ValidityState;
use dom::virtualmethods::VirtualMethods;
+use selectors::states::*;
use util::str::{DOMString, StaticStringVec};
#[dom_struct]
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index b82f96aed63..1adfc56b304 100644
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -15,7 +15,7 @@ use dom::bindings::conversions::Castable;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, LayoutJS, Root, RootedReference};
use dom::document::Document;
-use dom::element::{AttributeMutation, Element, IN_ENABLED_STATE, RawLayoutElementHelpers};
+use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers};
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget;
use dom::htmlelement::HTMLElement;
@@ -27,6 +27,7 @@ use dom::node::{Node, NodeDamage};
use dom::node::{document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use msg::constellation_msg::ConstellationChan;
+use selectors::states::*;
use std::borrow::ToOwned;
use std::cell::Cell;
use string_cache::Atom;
@@ -57,10 +58,8 @@ enum InputType {
pub struct HTMLInputElement {
htmlelement: HTMLElement,
input_type: Cell<InputType>,
- checked: Cell<bool>,
checked_changed: Cell<bool>,
placeholder: DOMRefCell<DOMString>,
- indeterminate: Cell<bool>,
value_changed: Cell<bool>,
size: Cell<u32>,
#[ignore_heap_size_of = "#7193"]
@@ -111,9 +110,7 @@ impl HTMLInputElement {
HTMLElement::new_inherited_with_state(IN_ENABLED_STATE,
localName, prefix, document),
input_type: Cell::new(InputType::InputText),
- checked: Cell::new(false),
placeholder: DOMRefCell::new("".to_owned()),
- indeterminate: Cell::new(false),
checked_changed: Cell::new(false),
value_changed: Cell::new(false),
size: Cell::new(DEFAULT_INPUT_SIZE),
@@ -204,13 +201,13 @@ impl RawLayoutHTMLInputElementHelpers for HTMLInputElement {
#[allow(unrooted_must_root)]
#[allow(unsafe_code)]
unsafe fn get_checked_state_for_layout(&self) -> bool {
- self.checked.get()
+ self.Checked()
}
#[allow(unrooted_must_root)]
#[allow(unsafe_code)]
unsafe fn get_indeterminate_state_for_layout(&self) -> bool {
- self.indeterminate.get()
+ self.Indeterminate()
}
#[allow(unrooted_must_root)]
@@ -240,7 +237,7 @@ impl HTMLInputElementMethods for HTMLInputElement {
// https://html.spec.whatwg.org/multipage/#dom-input-checked
fn Checked(&self) -> bool {
- self.checked.get()
+ self.upcast::<Element>().get_state().contains(IN_CHECKED_STATE)
}
// https://html.spec.whatwg.org/multipage/#dom-input-checked
@@ -329,12 +326,12 @@ impl HTMLInputElementMethods for HTMLInputElement {
// https://html.spec.whatwg.org/multipage/#dom-input-indeterminate
fn Indeterminate(&self) -> bool {
- self.indeterminate.get()
+ self.upcast::<Element>().get_state().contains(IN_INDETERMINATE_STATE)
}
// https://html.spec.whatwg.org/multipage/#dom-input-indeterminate
fn SetIndeterminate(&self, val: bool) {
- self.indeterminate.set(val)
+ self.upcast::<Element>().set_state(IN_INDETERMINATE_STATE, val)
}
}
@@ -443,7 +440,7 @@ impl HTMLInputElement {
}
fn update_checked_state(&self, checked: bool, dirty: bool) {
- self.checked.set(checked);
+ self.upcast::<Element>().set_state(IN_CHECKED_STATE, checked);
if dirty {
self.checked_changed.set(true);
@@ -459,7 +456,7 @@ impl HTMLInputElement {
}
pub fn get_indeterminate_state(&self) -> bool {
- self.indeterminate.get()
+ self.Indeterminate()
}
// https://html.spec.whatwg.org/multipage/#concept-fe-mutable
diff --git a/components/script/dom/htmloptgroupelement.rs b/components/script/dom/htmloptgroupelement.rs
index 4d9ec9b6ca9..cb97991b52b 100644
--- a/components/script/dom/htmloptgroupelement.rs
+++ b/components/script/dom/htmloptgroupelement.rs
@@ -8,11 +8,12 @@ use dom::bindings::codegen::Bindings::HTMLOptGroupElementBinding::HTMLOptGroupEl
use dom::bindings::conversions::Castable;
use dom::bindings::js::Root;
use dom::document::Document;
-use dom::element::{AttributeMutation, Element, IN_ENABLED_STATE};
+use dom::element::{AttributeMutation, Element};
use dom::htmlelement::HTMLElement;
use dom::htmloptionelement::HTMLOptionElement;
use dom::node::Node;
use dom::virtualmethods::VirtualMethods;
+use selectors::states::*;
use util::str::DOMString;
#[dom_struct]
diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs
index 8c7dea8ac1e..b06406c4df5 100644
--- a/components/script/dom/htmloptionelement.rs
+++ b/components/script/dom/htmloptionelement.rs
@@ -11,13 +11,14 @@ use dom::bindings::conversions::Castable;
use dom::bindings::js::Root;
use dom::characterdata::CharacterData;
use dom::document::Document;
-use dom::element::{AttributeMutation, Element, IN_ENABLED_STATE};
+use dom::element::{AttributeMutation, Element};
use dom::htmlelement::HTMLElement;
use dom::htmlscriptelement::HTMLScriptElement;
use dom::htmlselectelement::HTMLSelectElement;
use dom::node::Node;
use dom::text::Text;
use dom::virtualmethods::VirtualMethods;
+use selectors::states::*;
use std::cell::Cell;
use util::str::{DOMString, split_html_space_chars, str_join};
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index d20a6451543..c6e90e12c84 100644
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -11,7 +11,7 @@ use dom::bindings::codegen::UnionTypes::HTMLOptionElementOrHTMLOptGroupElement;
use dom::bindings::conversions::Castable;
use dom::bindings::js::Root;
use dom::document::Document;
-use dom::element::{AttributeMutation, Element, IN_ENABLED_STATE};
+use dom::element::{AttributeMutation, Element};
use dom::htmlelement::HTMLElement;
use dom::htmlfieldsetelement::HTMLFieldSetElement;
use dom::htmlformelement::{FormControl, HTMLFormElement};
@@ -19,6 +19,7 @@ use dom::htmloptionelement::HTMLOptionElement;
use dom::node::{Node, window_from_node};
use dom::validitystate::ValidityState;
use dom::virtualmethods::VirtualMethods;
+use selectors::states::*;
use std::borrow::ToOwned;
use string_cache::Atom;
use util::str::DOMString;
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs
index 5bbde574e19..b057204245f 100644
--- a/components/script/dom/htmltextareaelement.rs
+++ b/components/script/dom/htmltextareaelement.rs
@@ -13,7 +13,7 @@ use dom::bindings::global::GlobalRef;
use dom::bindings::js::{LayoutJS, Root};
use dom::bindings::refcounted::Trusted;
use dom::document::Document;
-use dom::element::{AttributeMutation, IN_ENABLED_STATE, Element};
+use dom::element::{AttributeMutation, Element};
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget;
use dom::htmlelement::HTMLElement;
@@ -26,6 +26,7 @@ use dom::virtualmethods::VirtualMethods;
use msg::constellation_msg::ConstellationChan;
use script_task::ScriptTaskEventCategory::InputEvent;
use script_task::{CommonScriptMsg, Runnable};
+use selectors::states::*;
use std::borrow::ToOwned;
use std::cell::Cell;
use string_cache::Atom;