diff options
author | Keith Yeung <kungfukeith11@gmail.com> | 2016-12-23 11:58:29 -0800 |
---|---|---|
committer | Keith Yeung <kungfukeith11@gmail.com> | 2017-01-07 22:18:04 -0800 |
commit | 18567ce7a88aad4ce315f5c277d29d32c702d899 (patch) | |
tree | 93d0c3aaf7d4b9879a27c9765fa3a3d1d54adf62 /components/script/dom | |
parent | 6d4ccab2b71c8eedcf05ed5402195538d626f8c8 (diff) | |
download | servo-18567ce7a88aad4ce315f5c277d29d32c702d899.tar.gz servo-18567ce7a88aad4ce315f5c277d29d32c702d899.zip |
Implement CSSKeyframeRule.style
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/csskeyframerule.rs | 22 | ||||
-rw-r--r-- | components/script/dom/cssstyledeclaration.rs | 16 | ||||
-rw-r--r-- | components/script/dom/cssstylerule.rs | 2 | ||||
-rw-r--r-- | components/script/dom/webidls/CSSKeyframeRule.webidl | 2 |
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; }; |