diff options
Diffstat (limited to 'components/script/dom/cssstyledeclaration.rs')
-rw-r--r-- | components/script/dom/cssstyledeclaration.rs | 81 |
1 files changed, 41 insertions, 40 deletions
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs index b41adcb8b06..c76ccee38fe 100644 --- a/components/script/dom/cssstyledeclaration.rs +++ b/components/script/dom/cssstyledeclaration.rs @@ -4,9 +4,7 @@ use dom::bindings::codegen::Bindings::CSSStyleDeclarationBinding::{self, CSSStyleDeclarationMethods}; use dom::bindings::codegen::InheritTypes::{NodeCast, ElementCast}; -use dom::bindings::error::Error; -use dom::bindings::error::ErrorResult; -use dom::bindings::error::Fallible; +use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::global::GlobalRef; use dom::bindings::js::{JS, JSRef, OptionalRootedRootable, Temporary}; use dom::bindings::utils::{Reflector, reflect_dom_object}; @@ -50,20 +48,14 @@ macro_rules! css_properties( ); fn serialize_list(list: &Vec<PropertyDeclaration>) -> DOMString { - let mut result = String::new(); - for declaration in list.iter() { - result.push_str(serialize_value(declaration).as_slice()); - result.push_str(" "); - } - result -} - -fn serialize_value(declaration: &PropertyDeclaration) -> DOMString { - declaration.value() + list.iter().fold(String::new(), |accum, ref declaration| { + accum + &declaration.value() + " " + }) } impl CSSStyleDeclaration { - pub fn new_inherited(owner: JSRef<HTMLElement>, modification_access: CSSModificationAccess) -> CSSStyleDeclaration { + pub fn new_inherited(owner: JSRef<HTMLElement>, + modification_access: CSSModificationAccess) -> CSSStyleDeclaration { CSSStyleDeclaration { reflector_: Reflector::new(), owner: JS::from_rooted(owner), @@ -71,7 +63,8 @@ impl CSSStyleDeclaration { } } - pub fn new(global: JSRef<Window>, owner: JSRef<HTMLElement>, modification_access: CSSModificationAccess) -> Temporary<CSSStyleDeclaration> { + pub fn new(global: JSRef<Window>, owner: JSRef<HTMLElement>, + modification_access: CSSModificationAccess) -> Temporary<CSSStyleDeclaration> { reflect_dom_object(box CSSStyleDeclaration::new_inherited(owner, modification_access), GlobalRef::Window(global), CSSStyleDeclarationBinding::Wrap) @@ -98,6 +91,7 @@ impl<'a> PrivateCSSStyleDeclarationHelpers for JSRef<'a, CSSStyleDeclaration> { } impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { + // http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-length fn Length(self) -> u32 { let owner = self.owner.root(); let elem: JSRef<Element> = ElementCast::from_ref(owner.r()); @@ -108,6 +102,7 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { len as u32 } + // http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-item fn Item(self, index: u32) -> DOMString { let index = index as usize; let owner = self.owner.root(); @@ -131,10 +126,10 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { // http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-getpropertyvalue fn GetPropertyValue(self, property: DOMString) -> DOMString { // Step 1 - let property = Atom::from_slice(property.as_slice().to_ascii_lowercase().as_slice()); + let property = Atom::from_slice(&property.to_ascii_lowercase()); // Step 2 - let longhand_properties = longhands_from_shorthand(property.as_slice()); + let longhand_properties = longhands_from_shorthand(&property); if let Some(longhand_properties) = longhand_properties { // Step 2.1 let mut list = vec!(); @@ -142,7 +137,7 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { // Step 2.2 for longhand in longhand_properties.iter() { // Step 2.2.1 - let declaration = self.get_declaration(&Atom::from_slice(longhand.as_slice())); + let declaration = self.get_declaration(&Atom::from_slice(&longhand)); // Step 2.2.2 & 2.2.3 match declaration { @@ -157,7 +152,7 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { // Step 3 & 4 if let Some(ref declaration) = self.get_declaration(&property) { - serialize_value(declaration) + declaration.value() } else { "".to_owned() } @@ -166,15 +161,15 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { // http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-getpropertypriority fn GetPropertyPriority(self, property: DOMString) -> DOMString { // Step 1 - let property = Atom::from_slice(property.as_slice().to_ascii_lowercase().as_slice()); + let property = Atom::from_slice(&property.to_ascii_lowercase()); // Step 2 - let longhand_properties = longhands_from_shorthand(property.as_slice()); + let longhand_properties = longhands_from_shorthand(&property); if let Some(longhand_properties) = longhand_properties { // Step 2.1 & 2.2 & 2.3 if longhand_properties.iter() .map(|longhand| self.GetPropertyPriority(longhand.clone())) - .all(|priority| priority.as_slice() == "important") { + .all(|priority| priority == "important") { return "important".to_owned(); } @@ -196,10 +191,10 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { } // Step 2 - let property = property.as_slice().to_ascii_lowercase(); + let property = property.to_ascii_lowercase(); // Step 3 - if !is_supported_property(property.as_slice()) { + if !is_supported_property(&property) { return Ok(()); } @@ -209,20 +204,19 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { } // Step 5 - let priority = priority.as_slice().to_ascii_lowercase(); - if priority.as_slice() != "!important" && !priority.is_empty() { + let priority = priority.to_ascii_lowercase(); + if priority != "!important" && !priority.is_empty() { return Ok(()); } // Step 6 - let mut synthesized_declaration = String::from_str(property.as_slice()); + let mut synthesized_declaration = String::from_str(&property); synthesized_declaration.push_str(": "); - synthesized_declaration.push_str(value.as_slice()); + synthesized_declaration.push_str(&value); let owner = self.owner.root(); let window = window_from_node(owner.r()).root(); - let decl_block = parse_style_attribute(synthesized_declaration.as_slice(), - &window.r().get_url()); + let decl_block = parse_style_attribute(&synthesized_declaration, &window.r().get_url()); // Step 7 if decl_block.normal.len() == 0 { @@ -235,7 +229,11 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { // Step 8 for decl in decl_block.normal.iter() { // Step 9 - let style_priority = if priority.is_empty() { StylePriority::Normal } else { StylePriority::Important }; + let style_priority = if priority.is_empty() { + StylePriority::Normal + } else { + StylePriority::Important + }; element.update_inline_style(decl.clone(), style_priority); } @@ -253,29 +251,32 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { } // Step 2 - let property = property.as_slice().to_ascii_lowercase(); + let property = property.to_ascii_lowercase(); // Step 3 - if !is_supported_property(property.as_slice()) { + if !is_supported_property(&property) { return Ok(()); } // Step 4 - let priority = priority.as_slice().to_ascii_lowercase(); - if priority.as_slice() != "important" && !priority.is_empty() { + let priority = priority.to_ascii_lowercase(); + if priority != "important" && !priority.is_empty() { return Ok(()); } let owner = self.owner.root(); let window = window_from_node(owner.r()).root(); - let decl_block = parse_style_attribute(property.as_slice(), - &window.r().get_url()); + let decl_block = parse_style_attribute(&property, &window.r().get_url()); let element: JSRef<Element> = ElementCast::from_ref(owner.r()); // Step 5 for decl in decl_block.normal.iter() { // Step 6 - let style_priority = if priority.is_empty() { StylePriority::Normal } else { StylePriority::Important }; + let style_priority = if priority.is_empty() { + StylePriority::Normal + } else { + StylePriority::Important + }; element.update_inline_style(decl.clone(), style_priority); } @@ -298,12 +299,12 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { } // Step 2 - let property = property.as_slice().to_ascii_lowercase(); + let property = property.to_ascii_lowercase(); // Step 3 let value = self.GetPropertyValue(property.clone()); - let longhand_properties = longhands_from_shorthand(property.as_slice()); + let longhand_properties = longhands_from_shorthand(&property); match longhand_properties { Some(longhands) => { // Step 4 |