diff --git a/components/script/dom/domtokenlist.rs b/components/script/dom/domtokenlist.rs index 8d91540ca2f..fc1ed509568 100644 --- a/components/script/dom/domtokenlist.rs +++ b/components/script/dom/domtokenlist.rs @@ -128,4 +128,29 @@ impl<'a> DOMTokenListMethods for JSRef<'a, DOMTokenList> { element.set_atomic_tokenlist_attribute(&self.local_name, atoms); Ok(()) } + + // https://dom.spec.whatwg.org/#dom-domtokenlist-toggle + fn Toggle(self, token: DOMString, force: Option) -> Fallible { + let element = self.element.root(); + let mut atoms = element.get_tokenlist_attribute(&self.local_name); + let token = try!(self.check_token_exceptions(token.as_slice())); + match atoms.iter().position(|atom| *atom == token) { + Some(index) => match force { + Some(true) => Ok(true), + _ => { + atoms.remove(index); + element.set_atomic_tokenlist_attribute(&self.local_name, atoms); + Ok(false) + } + }, + None => match force { + Some(false) => Ok(false), + _ => { + atoms.push(token); + element.set_atomic_tokenlist_attribute(&self.local_name, atoms); + Ok(true) + } + } + } + } } diff --git a/components/script/dom/webidls/DOMTokenList.webidl b/components/script/dom/webidls/DOMTokenList.webidl index 9a10a188310..4cdcea84255 100644 --- a/components/script/dom/webidls/DOMTokenList.webidl +++ b/components/script/dom/webidls/DOMTokenList.webidl @@ -14,7 +14,8 @@ interface DOMTokenList { void add(DOMString... tokens); [Throws] void remove(DOMString... tokens); + [Throws] + boolean toggle(DOMString token, optional boolean force); - //boolean toggle(DOMString token, optional boolean force); //stringifier; };