From 5afcf3ef652b71e340363d52cbd28db7c1dc70a4 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Fri, 12 Dec 2014 12:56:48 -0400 Subject: [PATCH] Implement DOMTokenList.toggle --- components/script/dom/domtokenlist.rs | 25 +++++++++++++++++++ .../script/dom/webidls/DOMTokenList.webidl | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) 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; };