From 07d37af37e5c12fd1084ecc5714ef46d874baefa Mon Sep 17 00:00:00 2001 From: ProgramFOX Date: Tue, 23 Dec 2014 16:39:24 +0100 Subject: [PATCH] Implemented CSSStyleDeclaration.setPropertyPriority Implemented CSSStyleDeclaration.setPropertyPriority, resolves #4433 --- components/script/dom/cssstyledeclaration.rs | 37 +++++++++++++++++++ .../dom/webidls/CSSStyleDeclaration.webidl | 6 ++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs index 4553f020282d..df3c492d9da0 100644 --- a/components/script/dom/cssstyledeclaration.rs +++ b/components/script/dom/cssstyledeclaration.rs @@ -200,6 +200,43 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> { Ok(()) } + // http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-setpropertypriority + fn SetPropertyPriority(self, property: DOMString, priority: DOMString) -> ErrorResult { + //TODO: disallow modifications if readonly flag is set + + // Step 2 + let property = property.as_slice().to_ascii_lower(); + + // Step 3 + if !is_supported_property(property.as_slice()) { + return Ok(()); + } + + // Step 4 + let priority = priority.as_slice().to_ascii_lower(); + if priority.as_slice() != "important" && !priority.is_empty() { + return Ok(()); + } + + let owner = self.owner.root(); + let window = window_from_node(*owner).root(); + let page = window.page(); + let decl_block = parse_style_attribute(property.as_slice(), + &page.get_url()); + let element: JSRef = ElementCast::from_ref(*owner); + + // Step 5 + for decl in decl_block.normal.iter() { + // Step 6 + element.update_inline_style(decl.clone(), !priority.is_empty()); + } + + let document = document_from_node(element).root(); + let node: JSRef = NodeCast::from_ref(element); + document.content_changed(node, NodeDamage::NodeStyleDamaged); + Ok(()) + } + // http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-setpropertyvalue fn SetPropertyValue(self, property: DOMString, value: DOMString) -> ErrorResult { self.SetProperty(property, value, "".to_string()) diff --git a/components/script/dom/webidls/CSSStyleDeclaration.webidl b/components/script/dom/webidls/CSSStyleDeclaration.webidl index 8ef419df6a54..7b0e2213956a 100644 --- a/components/script/dom/webidls/CSSStyleDeclaration.webidl +++ b/components/script/dom/webidls/CSSStyleDeclaration.webidl @@ -20,8 +20,10 @@ interface CSSStyleDeclaration { [TreatNullAs=EmptyString] optional DOMString priority = ""); [Throws] void setPropertyValue(DOMString property, [TreatNullAs=EmptyString] DOMString value); - //[Throws] - //void setPropertyPriority(DOMString property, [TreatNullAs=EmptyString] DOMString priority); + + [Throws] + void setPropertyPriority(DOMString property, [TreatNullAs=EmptyString] DOMString priority); + DOMString removeProperty(DOMString property); //readonly attribute CSSRule? parentRule; [SetterThrows]