Skip to content

Commit

Permalink
implement cssText
Browse files Browse the repository at this point in the history
  • Loading branch information
gw3583 authored and g-k committed May 31, 2016
1 parent 40b2d42 commit ff995d7
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 37 deletions.
41 changes: 39 additions & 2 deletions components/script/dom/cssstyledeclaration.rs
Expand Up @@ -2,6 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

use cssparser::ToCss;
use dom::bindings::codegen::Bindings::CSSStyleDeclarationBinding::{self, CSSStyleDeclarationMethods};
use dom::bindings::error::{Error, ErrorResult, Fallible};
use dom::bindings::global::GlobalRef;
Expand All @@ -18,7 +19,7 @@ use std::slice;
use string_cache::Atom;
use style::parser::ParserContextExtraData;
use style::properties::{PropertyDeclaration, Shorthand};
use style::properties::{is_supported_property, parse_one_declaration};
use style::properties::{is_supported_property, parse_one_declaration, parse_style_attribute};
use style::selector_impl::PseudoElement;

// http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface
Expand Down Expand Up @@ -340,6 +341,42 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
rval
}

// https://drafts.csswg.org/cssom/#cssstyledeclaration
// https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-csstext
fn CssText(&self) -> DOMString {
let elem = self.owner.upcast::<Element>();
let style_attribute = elem.style_attribute().borrow();

if let Some(declarations) = style_attribute.as_ref() {
DOMString::from(declarations.to_css_string())
} else {
DOMString::new()
}
}

// https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-csstext
fn SetCssText(&self, value: DOMString) -> ErrorResult {
let window = window_from_node(self.owner.upcast::<Node>());
let element = self.owner.upcast::<Element>();

// Step 1
if self.readonly {
return Err(Error::NoModificationAllowed);
}

// Step 3
let decl_block = parse_style_attribute(&value, &window.get_url(), window.css_error_reporter(),
ParserContextExtraData::default());
*element.style_attribute().borrow_mut() = if decl_block.normal.is_empty() && decl_block.important.is_empty() {
None // Step 2
} else {
Some(decl_block)
};
element.sync_property_with_attrs_style();
let node = element.upcast::<Node>();
node.dirty(NodeDamage::NodeStyleDamaged);
Ok(())
}

// https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-_camel_cased_attribute
css_properties_accessors!(css_properties);
}
2 changes: 1 addition & 1 deletion components/script/dom/element.rs
Expand Up @@ -700,7 +700,7 @@ impl Element {

// this sync method is called upon modification of the style_attribute property,
// therefore, it should not trigger subsequent mutation events
fn sync_property_with_attrs_style(&self) {
pub fn sync_property_with_attrs_style(&self) {
let style_str = if let &Some(ref declarations) = &*self.style_attribute().borrow() {
declarations.to_css_string()
} else {
Expand Down
4 changes: 2 additions & 2 deletions components/script/dom/webidls/CSSStyleDeclaration.webidl
Expand Up @@ -9,8 +9,8 @@
*/

interface CSSStyleDeclaration {
//[SetterThrows]
// attribute DOMString cssText;
[SetterThrows]
attribute DOMString cssText;
readonly attribute unsigned long length;
getter DOMString item(unsigned long index);
DOMString getPropertyValue(DOMString property);
Expand Down

This file was deleted.

@@ -1,17 +1,8 @@
[cssstyledeclaration-csstext.htm]
type: testharness
[uppercase property]
expected: FAIL

[uppercase value]
expected: FAIL

[overwriting with invalid value]
expected: FAIL

[use rgb]
expected: FAIL

[cssText order]
expected: FAIL

Expand Down
@@ -1,8 +1,5 @@
[cssstyledeclaration-mutability.htm]
type: testharness
[HTMLElement's CSSStyleDeclaration is mutable]
expected: FAIL
[StyleSheet's CSSStyleDeclaration is mutable]
expected: FAIL
12 changes: 0 additions & 12 deletions tests/wpt/metadata-css/cssom-1_dev/html/index-002.htm.ini
Expand Up @@ -30,27 +30,15 @@
[border is expected to be border-width: 1px;]
expected: FAIL

[overflow is expected to be overflow: scroll hidden;]
expected: FAIL

[overflow is expected to be overflow: scroll;]
expected: FAIL

[outline is expected to be outline: blue dotted 2px;]
expected: FAIL

[margin is expected to be margin: 1px 2px 3px 4px;]
expected: FAIL

[list is expected to be list-style: circle inside;]
expected: FAIL

[list is expected to be list-style-type: lower-alpha;]
expected: FAIL

[font-family is expected to be font-family: sans-serif; line-height: 2em; font-size: 3em; font-style: italic; font-weight: bold;]
expected: FAIL

[padding is expected to be padding: 1px 2px 3px 4px;]
expected: FAIL

3 changes: 0 additions & 3 deletions tests/wpt/metadata-css/cssom-1_dev/html/interfaces.htm.ini
Expand Up @@ -474,9 +474,6 @@
[CSSNamespaceRule interface: attribute prefix]
expected: FAIL
[CSSStyleDeclaration interface: attribute cssText]
expected: FAIL
[CSSStyleDeclaration interface: attribute parentRule]
expected: FAIL
Expand Down

0 comments on commit ff995d7

Please sign in to comment.