aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/element.rs
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno.d@partner.samsung.com>2014-06-27 15:25:09 -0400
committerBruno de Oliveira Abinader <bruno.d@partner.samsung.com>2014-08-05 11:01:53 -0400
commit7771350898ae1dd8e81dd1863da431e8cc7486e3 (patch)
treef53c25429020386995afac1ea043211c7616f790 /src/components/script/dom/element.rs
parent40048b791c44a0ef250d09633af38be0a9f257fd (diff)
downloadservo-7771350898ae1dd8e81dd1863da431e8cc7486e3.tar.gz
servo-7771350898ae1dd8e81dd1863da431e8cc7486e3.zip
Implement support for :disabled CSS selector
Diffstat (limited to 'src/components/script/dom/element.rs')
-rw-r--r--src/components/script/dom/element.rs27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs
index 04d9603bdb6..a95d1ff8cc1 100644
--- a/src/components/script/dom/element.rs
+++ b/src/components/script/dom/element.rs
@@ -257,6 +257,8 @@ pub trait AttributeHandlers {
fn set_atomic_attribute(&self, name: &str, value: DOMString);
// http://www.whatwg.org/html/#reflecting-content-attributes-in-idl-attributes
+ fn has_attribute(&self, name: &str) -> bool;
+ fn set_bool_attribute(&self, name: &str, value: bool);
fn get_url_attribute(&self, name: &str) -> DOMString;
fn set_url_attribute(&self, name: &str, value: DOMString);
fn get_string_attribute(&self, name: &str) -> DOMString;
@@ -385,6 +387,25 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
self.set_attribute(name, value);
}
+ fn has_attribute(&self, name: &str) -> bool {
+ let name = match self.html_element_in_html_document() {
+ true => name.to_ascii_lower(),
+ false => name.to_string()
+ };
+ self.deref().attrs.borrow().iter().map(|attr| attr.root()).any(|attr| {
+ name == attr.local_name && attr.namespace == Null
+ })
+ }
+
+ fn set_bool_attribute(&self, name: &str, value: bool) {
+ if self.has_attribute(name) == value { return; }
+ if value {
+ self.set_string_attribute(name, String::new());
+ } else {
+ self.remove_attribute(Null, name);
+ }
+ }
+
fn get_url_attribute(&self, name: &str) -> DOMString {
// XXX Resolve URL.
self.get_string_attribute(name)
@@ -664,7 +685,7 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
// http://dom.spec.whatwg.org/#dom-element-hasattribute
fn HasAttribute(&self,
name: DOMString) -> bool {
- self.GetAttribute(name).is_some()
+ self.has_attribute(name.as_slice())
}
// http://dom.spec.whatwg.org/#dom-element-hasattributens
@@ -925,4 +946,8 @@ impl<'a> style::TElement for JSRef<'a, Element> {
}
})
}
+ fn get_disabled_state(&self) -> bool {
+ let node: &JSRef<Node> = NodeCast::from_ref(self);
+ node.get_disabled_state()
+ }
}