Index: third_party/polymer/v0_8/components/neon-animation/neon-animation-runner-behavior.html |
diff --git a/third_party/polymer/v0_8/components/neon-animation/neon-animation-runner-behavior.html b/third_party/polymer/v0_8/components/neon-animation/neon-animation-runner-behavior.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ce1211e466b276e5f92adda17d4f921371f000e5 |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components/neon-animation/neon-animation-runner-behavior.html |
@@ -0,0 +1,110 @@ |
+<!-- |
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved. |
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt |
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt |
+Code distributed by Google as part of the polymer project is also |
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt |
+--> |
+<link rel="import" href="../polymer/polymer.html"> |
+<link rel="import" href="../iron-meta/iron-meta.html"> |
+<link rel="import" href="neon-animatable-behavior.html"> |
+ |
+<script> |
+ |
+ /** |
+ * `Polymer.NeonAnimationRunnerBehavior` adds a method to run animations. |
+ * @polymerBehavior |
+ */ |
+ Polymer.NeonAnimationRunnerBehavior = [Polymer.NeonAnimatableBehavior, { |
+ |
+ properties: { |
+ |
+ _animationMeta: { |
+ type: Object, |
+ value: function() { |
+ return new Polymer.IronMeta({type: 'animation'}); |
+ } |
+ }, |
+ |
+ _player: { |
+ type: Object |
+ } |
+ |
+ }, |
+ |
+ _configureAnimationEffects: function(allConfigs) { |
+ var allAnimations = []; |
+ if (allConfigs.length > 0) { |
+ for (var config, index = 0; config = allConfigs[index]; index++) { |
+ var animationConstructor = this._animationMeta.byKey(config.name); |
+ if (animationConstructor) { |
+ var animation = animationConstructor && new animationConstructor(); |
+ var effect = animation.configure(config); |
+ if (effect) { |
+ allAnimations.push({ |
+ animation: animation, |
+ config: config, |
+ effect: effect |
+ }); |
+ } |
+ } else { |
+ console.warn(this.is + ':', config.name, 'not found!'); |
+ } |
+ } |
+ } |
+ return allAnimations; |
+ }, |
+ |
+ _runAnimationEffects: function(allEffects) { |
+ return player = document.timeline.play(new GroupEffect(allEffects)); |
+ }, |
+ |
+ _completeAnimations: function(allAnimations) { |
+ for (var animation, index = 0; animation = allAnimations[index]; index++) { |
+ animation.animation.complete(animation.config); |
+ } |
+ }, |
+ |
+ /** |
+ * Plays an animation with an optional `type`. |
+ */ |
+ playAnimation: function(type, cookie) { |
+ var allConfigs = this.getAnimationConfig(type); |
+ if (!allConfigs) { |
+ return; |
+ } |
+ var allAnimations = this._configureAnimationEffects(allConfigs); |
+ var allEffects = allAnimations.map(function(animation) { |
+ return animation.effect; |
+ }); |
+ |
+ if (allEffects.length > 0) { |
+ this._player = this._runAnimationEffects(allEffects); |
+ this._player.onfinish = function() { |
+ this._completeAnimations(allAnimations); |
+ |
+ if (this._player) { |
+ this._player.cancel(); |
+ this._player = null; |
+ } |
+ |
+ this.fire('neon-animation-finish', cookie, {bubbles: false}); |
+ }.bind(this); |
+ |
+ } else { |
+ this.fire('neon-animation-finish', cookie, {bubbles: false}); |
+ } |
+ }, |
+ |
+ /** |
+ * Cancels the currently running animation. |
+ */ |
+ cancelAnimation: function() { |
+ if (this._player) { |
+ this._player.cancel(); |
+ } |
+ } |
+ |
+ }]; |
+</script> |