aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/cssstyledeclaration.rs
diff options
context:
space:
mode:
authorProgramFOX <programfox@hotmail.be>2014-12-23 16:39:24 +0100
committerProgramFOX <programfox@hotmail.be>2014-12-23 17:14:45 +0100
commit07d37af37e5c12fd1084ecc5714ef46d874baefa (patch)
treef3dd491c5a5c1886c32a645cd457b0042e5047e7 /components/script/dom/cssstyledeclaration.rs
parent0109cc3ffc6e58a5e294ff469b37a636c98cff70 (diff)
downloadservo-07d37af37e5c12fd1084ecc5714ef46d874baefa.tar.gz
servo-07d37af37e5c12fd1084ecc5714ef46d874baefa.zip
Implemented CSSStyleDeclaration.setPropertyPriority
Implemented CSSStyleDeclaration.setPropertyPriority, resolves #4433
Diffstat (limited to 'components/script/dom/cssstyledeclaration.rs')
-rw-r--r--components/script/dom/cssstyledeclaration.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs
index 4553f020282..df3c492d9da 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<Element> = 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<Node> = 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())