New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for animationend event #26362
Merged
+334
−330
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.
Loading status checks…
Add support for animationend event
This is triggered when an animation finishes. This is a high priority because it allows us to start rooting nodes with animations in the script thread. This doesn't yet cause a lot of tests to pass because they rely on the existence of `Document.getAnimations()` and the presence of `animationstart` and animationiteration` events.
- Loading branch information
commit 3903c1fb98373ae08323c36e147f2f041d6f0280
| @@ -0,0 +1,76 @@ | ||
| /* This Source Code Form is subject to the terms of the Mozilla Public | ||
| * License, v. 2.0. If a copy of the MPL was not distributed with this | ||
| * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ | ||
|
|
||
| use crate::dom::bindings::codegen::Bindings::AnimationEventBinding::{ | ||
| AnimationEventInit, AnimationEventMethods, | ||
| }; | ||
| use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods; | ||
| use crate::dom::bindings::inheritance::Castable; | ||
| use crate::dom::bindings::num::Finite; | ||
| use crate::dom::bindings::reflector::reflect_dom_object; | ||
| use crate::dom::bindings::root::DomRoot; | ||
| use crate::dom::bindings::str::DOMString; | ||
| use crate::dom::event::Event; | ||
| use crate::dom::window::Window; | ||
| use dom_struct::dom_struct; | ||
| use servo_atoms::Atom; | ||
|
|
||
| #[dom_struct] | ||
| pub struct AnimationEvent { | ||
| event: Event, | ||
| animation_name: Atom, | ||
| elapsed_time: Finite<f32>, | ||
| pseudo_element: DOMString, | ||
| } | ||
|
|
||
| impl AnimationEvent { | ||
| fn new_inherited(init: &AnimationEventInit) -> AnimationEvent { | ||
| AnimationEvent { | ||
| event: Event::new_inherited(), | ||
| animation_name: Atom::from(init.animationName.clone()), | ||
| elapsed_time: init.elapsedTime.clone(), | ||
| pseudo_element: init.pseudoElement.clone(), | ||
| } | ||
| } | ||
|
|
||
| pub fn new(window: &Window, type_: Atom, init: &AnimationEventInit) -> DomRoot<AnimationEvent> { | ||
| let ev = reflect_dom_object(Box::new(AnimationEvent::new_inherited(init)), window); | ||
| { | ||
| let event = ev.upcast::<Event>(); | ||
| event.init_event(type_, init.parent.bubbles, init.parent.cancelable); | ||
| } | ||
| ev | ||
| } | ||
|
|
||
| #[allow(non_snake_case)] | ||
| pub fn Constructor( | ||
| window: &Window, | ||
| type_: DOMString, | ||
| init: &AnimationEventInit, | ||
| ) -> DomRoot<AnimationEvent> { | ||
| AnimationEvent::new(window, Atom::from(type_), init) | ||
| } | ||
| } | ||
|
|
||
| impl AnimationEventMethods for AnimationEvent { | ||
| // https://drafts.csswg.org/css-animations/#interface-animationevent-attributes | ||
| fn AnimationName(&self) -> DOMString { | ||
| DOMString::from(&*self.animation_name) | ||
| } | ||
|
|
||
| // https://drafts.csswg.org/css-animations/#interface-animationevent-attributes | ||
| fn ElapsedTime(&self) -> Finite<f32> { | ||
| self.elapsed_time.clone() | ||
| } | ||
|
|
||
| // https://drafts.csswg.org/css-animations/#interface-animationevent-attributes | ||
| fn PseudoElement(&self) -> DOMString { | ||
| self.pseudo_element.clone() | ||
| } | ||
|
|
||
| // https://dom.spec.whatwg.org/#dom-event-istrusted | ||
| fn IsTrusted(&self) -> bool { | ||
| self.upcast::<Event>().IsTrusted() | ||
| } | ||
| } |
| @@ -0,0 +1,26 @@ | ||
| /* This Source Code Form is subject to the terms of the Mozilla Public | ||
| * 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/. | ||
| * | ||
| * The origin of this IDL file is | ||
| * http://www.w3.org/TR/css3-animations/#animation-events- | ||
| * http://dev.w3.org/csswg/css3-animations/#animation-events- | ||
| * | ||
| * Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C | ||
| * liability, trademark and document use rules apply. | ||
| */ | ||
|
|
||
| [Exposed=Window] | ||
| interface AnimationEvent : Event { | ||
| constructor(DOMString type, optional AnimationEventInit eventInitDict = {}); | ||
|
|
||
| readonly attribute DOMString animationName; | ||
| readonly attribute float elapsedTime; | ||
| readonly attribute DOMString pseudoElement; | ||
| }; | ||
|
|
||
| dictionary AnimationEventInit : EventInit { | ||
| DOMString animationName = ""; | ||
| float elapsedTime = 0; | ||
| DOMString pseudoElement = ""; | ||
| }; |
| @@ -90,6 +90,11 @@ interface mixin GlobalEventHandlers { | ||
| attribute EventHandler onwaiting; | ||
| }; | ||
|
|
||
| // https://drafts.csswg.org/css-animations/#interface-globaleventhandlers-idl | ||
| partial interface mixin GlobalEventHandlers { | ||
| attribute EventHandler onanimationend; | ||
|
This conversation was marked as resolved
by mrobinson
mrobinson
Author
Member
|
||
| }; | ||
|
|
||
| // https://drafts.csswg.org/css-transitions/#interface-globaleventhandlers-idl | ||
| partial interface mixin GlobalEventHandlers { | ||
| attribute EventHandler ontransitionrun; | ||
Oops, something went wrong.
ProTip!
Use n and p to navigate between commits in a pull request.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Rather odd indentation, but I see other places use it too so...