diff options
author | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-08-25 13:35:44 -0400 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-08-25 13:58:42 -0400 |
commit | caa55bf9edd425abe58336248a45a89c10d81eb0 (patch) | |
tree | 21d5eb716a589a14fb557e472ff7428fc8f7dd2e /src/components/script/dom | |
parent | d17450106c3c55c42cbfc78fe7b13dc5e46c9060 (diff) | |
download | servo-caa55bf9edd425abe58336248a45a89c10d81eb0.tar.gz servo-caa55bf9edd425abe58336248a45a89c10d81eb0.zip |
Implement DOMTokenList.contains
Diffstat (limited to 'src/components/script/dom')
-rw-r--r-- | src/components/script/dom/domtokenlist.rs | 23 | ||||
-rw-r--r-- | src/components/script/dom/webidls/DOMTokenList.webidl | 5 |
2 files changed, 26 insertions, 2 deletions
diff --git a/src/components/script/dom/domtokenlist.rs b/src/components/script/dom/domtokenlist.rs index cf44d5f7abc..3d252d36731 100644 --- a/src/components/script/dom/domtokenlist.rs +++ b/src/components/script/dom/domtokenlist.rs @@ -5,14 +5,16 @@ use dom::attr::{Attr, TokenListAttrValue}; use dom::bindings::codegen::Bindings::DOMTokenListBinding; use dom::bindings::codegen::Bindings::DOMTokenListBinding::DOMTokenListMethods; +use dom::bindings::error::{Fallible, InvalidCharacter, Syntax}; use dom::bindings::global::Window; use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootable}; use dom::bindings::utils::{Reflector, Reflectable, reflect_dom_object}; use dom::element::{Element, AttributeHandlers}; use dom::node::window_from_node; +use servo_util::atom::Atom; use servo_util::namespace::Null; -use servo_util::str::DOMString; +use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS}; #[deriving(Encodable)] pub struct DOMTokenList { @@ -47,6 +49,7 @@ impl Reflectable for DOMTokenList { trait PrivateDOMTokenListHelpers { fn attribute(&self) -> Option<Temporary<Attr>>; + fn check_token_exceptions<'a>(&self, token: &'a str) -> Fallible<&'a str>; } impl<'a> PrivateDOMTokenListHelpers for JSRef<'a, DOMTokenList> { @@ -54,6 +57,14 @@ impl<'a> PrivateDOMTokenListHelpers for JSRef<'a, DOMTokenList> { let element = self.element.root(); element.deref().get_attribute(Null, self.local_name) } + + fn check_token_exceptions<'a>(&self, token: &'a str) -> Fallible<&'a str> { + match token { + "" => Err(Syntax), + token if token.find(HTML_SPACE_CHARACTERS).is_some() => Err(InvalidCharacter), + token => Ok(token) + } + } } // http://dom.spec.whatwg.org/#domtokenlist @@ -92,4 +103,14 @@ impl<'a> DOMTokenListMethods for JSRef<'a, DOMTokenList> { *found = item.is_some(); item } + + // http://dom.spec.whatwg.org/#dom-domtokenlist-contains + fn Contains(&self, token: DOMString) -> Fallible<bool> { + self.check_token_exceptions(token.as_slice()).map(|slice| { + self.attribute().root().and_then(|attr| attr.value().tokens().map(|mut tokens| { + let atom = Atom::from_slice(slice); + tokens.any(|token| *token == atom) + })).unwrap_or(false) + }) + } } diff --git a/src/components/script/dom/webidls/DOMTokenList.webidl b/src/components/script/dom/webidls/DOMTokenList.webidl index 650d8abf6c6..bc32f4bf256 100644 --- a/src/components/script/dom/webidls/DOMTokenList.webidl +++ b/src/components/script/dom/webidls/DOMTokenList.webidl @@ -7,7 +7,10 @@ interface DOMTokenList { readonly attribute unsigned long length; getter DOMString? item(unsigned long index); - //boolean contains(DOMString token); + + [Throws] + boolean contains(DOMString token); + //void add(DOMString... tokens); //void remove(DOMString... tokens); //boolean toggle(DOMString token, optional boolean force); |