aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorKeith Yeung <kungfukeith11@gmail.com>2016-12-23 11:58:29 -0800
committerKeith Yeung <kungfukeith11@gmail.com>2017-01-07 22:18:04 -0800
commit18567ce7a88aad4ce315f5c277d29d32c702d899 (patch)
tree93d0c3aaf7d4b9879a27c9765fa3a3d1d54adf62 /components/script/dom
parent6d4ccab2b71c8eedcf05ed5402195538d626f8c8 (diff)
downloadservo-18567ce7a88aad4ce315f5c277d29d32c702d899.tar.gz
servo-18567ce7a88aad4ce315f5c277d29d32c702d899.zip
Implement CSSKeyframeRule.style
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/csskeyframerule.rs22
-rw-r--r--components/script/dom/cssstyledeclaration.rs16
-rw-r--r--components/script/dom/cssstylerule.rs2
-rw-r--r--components/script/dom/webidls/CSSKeyframeRule.webidl2
4 files changed, 29 insertions, 13 deletions
diff --git a/components/script/dom/csskeyframerule.rs b/components/script/dom/csskeyframerule.rs
index 78916d339ab..9d245d98343 100644
--- a/components/script/dom/csskeyframerule.rs
+++ b/components/script/dom/csskeyframerule.rs
@@ -2,11 +2,12 @@
* 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 dom::bindings::codegen::Bindings::CSSKeyframeRuleBinding;
-use dom::bindings::js::Root;
-use dom::bindings::reflector::reflect_dom_object;
+use dom::bindings::codegen::Bindings::CSSKeyframeRuleBinding::{self, CSSKeyframeRuleMethods};
+use dom::bindings::js::{JS, MutNullableJS, Root};
+use dom::bindings::reflector::{DomObject, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::cssrule::{CSSRule, SpecificCSSRule};
+use dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration, CSSStyleOwner};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
use parking_lot::RwLock;
@@ -19,6 +20,7 @@ pub struct CSSKeyframeRule {
cssrule: CSSRule,
#[ignore_heap_size_of = "Arc"]
keyframerule: Arc<RwLock<Keyframe>>,
+ style_decl: MutNullableJS<CSSStyleDeclaration>,
}
impl CSSKeyframeRule {
@@ -27,6 +29,7 @@ impl CSSKeyframeRule {
CSSKeyframeRule {
cssrule: CSSRule::new_inherited(parent_stylesheet),
keyframerule: keyframerule,
+ style_decl: Default::default(),
}
}
@@ -39,6 +42,19 @@ impl CSSKeyframeRule {
}
}
+impl CSSKeyframeRuleMethods for CSSKeyframeRule {
+ // https://drafts.csswg.org/css-animations/#dom-csskeyframerule-style
+ fn Style(&self) -> Root<CSSStyleDeclaration> {
+ self.style_decl.or_init(|| {
+ CSSStyleDeclaration::new(self.global().as_window(),
+ CSSStyleOwner::CSSRule(JS::from_ref(self.global().as_window()),
+ self.keyframerule.read().block.clone()),
+ None,
+ CSSModificationAccess::ReadWrite)
+ })
+ }
+}
+
impl SpecificCSSRule for CSSKeyframeRule {
fn ty(&self) -> u16 {
use dom::bindings::codegen::Bindings::CSSRuleBinding::CSSRuleConstants;
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs
index 7cd63aa12b0..7595fe4bfd5 100644
--- a/components/script/dom/cssstyledeclaration.rs
+++ b/components/script/dom/cssstyledeclaration.rs
@@ -34,9 +34,9 @@ pub struct CSSStyleDeclaration {
#[must_root]
pub enum CSSStyleOwner {
Element(JS<Element>),
- CSSStyleRule(JS<Window>,
- #[ignore_heap_size_of = "Arc"]
- Arc<RwLock<PropertyDeclarationBlock>>),
+ CSSRule(JS<Window>,
+ #[ignore_heap_size_of = "Arc"]
+ Arc<RwLock<PropertyDeclarationBlock>>),
}
impl CSSStyleOwner {
@@ -49,7 +49,7 @@ impl CSSStyleOwner {
None
}
}
- CSSStyleOwner::CSSStyleRule(_, ref pdb) => {
+ CSSStyleOwner::CSSRule(_, ref pdb) => {
Some(pdb.clone())
}
}
@@ -58,7 +58,7 @@ impl CSSStyleOwner {
fn window(&self) -> Root<Window> {
match *self {
CSSStyleOwner::Element(ref el) => window_from_node(&**el),
- CSSStyleOwner::CSSStyleRule(ref window, _) => Root::from_ref(&**window),
+ CSSStyleOwner::CSSRule(ref window, _) => Root::from_ref(&**window),
}
}
@@ -72,7 +72,7 @@ impl CSSStyleOwner {
match *self {
CSSStyleOwner::Element(ref el) =>
el.upcast::<Node>().dirty(NodeDamage::NodeStyleDamaged),
- CSSStyleOwner::CSSStyleRule(ref window, _) =>
+ CSSStyleOwner::CSSRule(ref window, _) =>
window.Document().invalidate_stylesheets(),
}
}
@@ -126,8 +126,8 @@ impl CSSStyleDeclaration {
fn get_computed_style(&self, property: PropertyId) -> DOMString {
match self.owner {
- CSSStyleOwner::CSSStyleRule(..) =>
- panic!("get_computed_style called on CSSStyleDeclaration with a CSSStyleRule owner"),
+ CSSStyleOwner::CSSRule(..) =>
+ panic!("get_computed_style called on CSSStyleDeclaration with a CSSRule owner"),
CSSStyleOwner::Element(ref el) => {
let node = el.upcast::<Node>();
if !node.is_in_doc() {
diff --git a/components/script/dom/cssstylerule.rs b/components/script/dom/cssstylerule.rs
index 3e23864ae61..1eb6e74df8b 100644
--- a/components/script/dom/cssstylerule.rs
+++ b/components/script/dom/cssstylerule.rs
@@ -58,7 +58,7 @@ impl CSSStyleRuleMethods for CSSStyleRule {
fn Style(&self) -> Root<CSSStyleDeclaration> {
self.style_decl.or_init(|| {
CSSStyleDeclaration::new(self.global().as_window(),
- CSSStyleOwner::CSSStyleRule(JS::from_ref(self.global().as_window()),
+ CSSStyleOwner::CSSRule(JS::from_ref(self.global().as_window()),
self.stylerule.read().block.clone()),
None,
CSSModificationAccess::ReadWrite)
diff --git a/components/script/dom/webidls/CSSKeyframeRule.webidl b/components/script/dom/webidls/CSSKeyframeRule.webidl
index 5458440be6d..079b88ef231 100644
--- a/components/script/dom/webidls/CSSKeyframeRule.webidl
+++ b/components/script/dom/webidls/CSSKeyframeRule.webidl
@@ -6,5 +6,5 @@
[Exposed=Window]
interface CSSKeyframeRule : CSSRule {
// attribute DOMString keyText;
- // readonly attribute CSSStyleDeclaration style;
+ readonly attribute CSSStyleDeclaration style;
};