From 8859286a99f31ca25e516eb23db79a5fedbef980 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Sat, 20 Dec 2014 16:56:19 -0400 Subject: [PATCH] Added AttrValue::from_atomic_tokens & Element::set_atomic_tokenlist_attribute --- components/script/dom/attr.rs | 8 ++++++++ components/script/dom/element.rs | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/components/script/dom/attr.rs b/components/script/dom/attr.rs index a848ca85e0c8..014fa5f53570 100644 --- a/components/script/dom/attr.rs +++ b/components/script/dom/attr.rs @@ -47,6 +47,14 @@ impl AttrValue { AttrValue::TokenList(tokens, atoms) } + pub fn from_atomic_tokens(atoms: Vec) -> AttrValue { + let tokens = { + let slices: Vec<&str> = atoms.iter().map(|atom| atom.as_slice()).collect(); + slices.connect("\x20") + }; + AttrValue::TokenList(tokens, atoms) + } + pub fn from_u32(string: DOMString, default: u32) -> AttrValue { let result: u32 = from_str(string.as_slice()).unwrap_or(default); AttrValue::UInt(string, result) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index ba6e94445a60..8c858c2d3b69 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -656,6 +656,7 @@ pub trait AttributeHandlers { fn get_string_attribute(self, name: &Atom) -> DOMString; fn set_string_attribute(self, name: &Atom, value: DOMString); fn set_tokenlist_attribute(self, name: &Atom, value: DOMString); + fn set_atomic_tokenlist_attribute(self, name: &Atom, tokens: Vec); fn get_uint_attribute(self, name: &Atom) -> u32; fn set_uint_attribute(self, name: &Atom, value: u32); } @@ -851,6 +852,11 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { self.set_attribute(name, AttrValue::from_serialized_tokenlist(value)); } + fn set_atomic_tokenlist_attribute(self, name: &Atom, tokens: Vec) { + assert!(name.as_slice() == name.as_slice().to_ascii_lower().as_slice()); + self.set_attribute(name, AttrValue::from_atomic_tokens(tokens)); + } + fn get_uint_attribute(self, name: &Atom) -> u32 { assert!(name.as_slice().chars().all(|ch| { !ch.is_ascii() || ch.to_ascii().to_lowercase() == ch.to_ascii()