diff options
author | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-06-27 15:25:09 -0400 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-08-05 11:01:53 -0400 |
commit | 7771350898ae1dd8e81dd1863da431e8cc7486e3 (patch) | |
tree | f53c25429020386995afac1ea043211c7616f790 /src/components/script/dom/element.rs | |
parent | 40048b791c44a0ef250d09633af38be0a9f257fd (diff) | |
download | servo-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.rs | 27 |
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() + } } |