Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(814)

Side by Side Diff: chrome/browser/resources/settings/animation/animation.js

Issue 2072643002: MD Settings: animation interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * @fileoverview Simplified API wrapping native Web Animations with some sugar.
7 * A compromise between the draft spec and Chrome's evolving support. This API
8 * will be changed (or removed) as Chrome support evolves.
9 */
10 cr.define('settings.animation', function() {
11 'use strict';
12
13 /**
14 * Default timing constants.
15 * @const
16 */
17 var Timing = {
18 DURATION: 250,
19 EASING: 'cubic-bezier(0.4, 0, 0.2, 1)', // Fast out, slow in.
20 };
21
22 /**
23 * Offers a small subset of the v1 Animation interface. The underlying
24 * animation can be reversed, canceled or immediately finished.
25 * @see https://www.w3.org/TR/web-animations-1/#animation
26 *
27 * @constructor
28 * @extends {cr.EventTarget}
29 * @param {!Element} el The element to animate.
30 * @param {!Array<!Object>|!Object<!Array>|!Object<string>} keyframes
31 * Keyframes, as in Element.prototype.animate.
32 * @param {number|!KeyframeEffectOptions=} opt_options Duration or options
33 * object, as in Element.prototype.animate.
34 */
35 function Animation(el, keyframes, opt_options) {
36 // Disallow direct usage of the underlying animation.
37 this.animation_ = el.animate(keyframes, opt_options);
38
39 var self = this;
40 /** @type !Promise<!Animation> */
41 this.finished = new Promise(function(resolve, reject) {
42 // If we were implementing the full spec, we'd have to support
43 // removing or resetting these listeners.
44 self.animation_.addEventListener('finish', function(e) {
45 resolve(self.animation_);
Dan Beam 2016/06/17 19:22:42 why are we keeping |animation_| private but passin
michaelpg 2016/06/28 23:17:23 removed from resolve
46 // According to the spec, queue a task to fire the event after
47 // resolving the promise.
48 setTimeout(function() {
49 self.dispatchEvent(e);
50 self.animation_ = undefined;
51 });
Dan Beam 2016/06/17 19:22:42 can you combine this code into: function dispatch
michaelpg 2016/06/28 23:17:23 Done.
52 });
53 self.animation_.addEventListener('cancel', function(e) {
54 reject(new
Dan Beam 2016/06/17 19:22:42 afaict, we should not reject for a cancelled anima
michaelpg 2016/06/28 23:17:23 there is a TODO in the spec to make this "cancel"
55 /**
56 * @see https://heycam.github.io/webidl/#es-DOMException-call
57 * @type {function (new:DOMException, string, string)}
58 **/(
Dan Beam 2016/06/17 19:22:42 **/ -> */
michaelpg 2016/06/28 23:17:23 Done.
59 DOMException
60 )('', 'AbortError'));
61 setTimeout(function() {
62 self.dispatchEvent(e);
63 self.animation_ = undefined;
64 });
65 });
66 });
67 }
68
69 Animation.prototype = {
70 __proto__: cr.EventTarget.prototype,
71
72 finish: function() {
73 assert(this.animation_);
74 this.animation_.finish();
75 },
76
77 cancel: function() {
78 assert(this.animation_);
79 this.animation_.cancel();
80 },
81 };
82
83 return {
84 Animation: Animation,
85 Timing: Timing,
86 };
87 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698