| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 <!-- |  | 
| 2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. |  | 
| 3 This code may only be used under the BSD style license found at http://polymer.g
     ithub.io/LICENSE.txt |  | 
| 4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |  | 
| 5 The complete set of contributors may be found at http://polymer.github.io/CONTRI
     BUTORS.txt |  | 
| 6 Code distributed by Google as part of the polymer project is also |  | 
| 7 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
     TS.txt |  | 
| 8 --> |  | 
| 9 |  | 
| 10 <link rel="import" href="../polymer/polymer.html"> |  | 
| 11 <link rel="import" href="core-animation.html"> |  | 
| 12 |  | 
| 13 <!-- |  | 
| 14 @group Polymer Core Elements |  | 
| 15 |  | 
| 16 `core-animation-group` combines `core-animation` or `core-animation-group` eleme
     nts to |  | 
| 17 create a grouped web animation. The group may be parallel (type is `par`) or seq
     uential |  | 
| 18 (type is `seq`). Parallel groups play all the children elements simultaneously, 
     and |  | 
| 19 sequential groups play the children one after another. |  | 
| 20 |  | 
| 21 Example of an animation group to rotate and then fade an element: |  | 
| 22 |  | 
| 23     <core-animation-group type="seq"> |  | 
| 24       <core-animation id="fadeout" duration="500"> |  | 
| 25         <core-animation-keyframe> |  | 
| 26           <core-animation-prop name="transform" value="rotate(0deg)"></core-anim
     ation-prop> |  | 
| 27           <core-animation-prop name="transform" value="rotate(45deg)"></core-ani
     mation-prop> |  | 
| 28         </core-animation-keyframe> |  | 
| 29       </core-animation> |  | 
| 30       <core-animation id="fadeout" duration="500"> |  | 
| 31         <core-animation-keyframe> |  | 
| 32           <core-animation-prop name="opacity" value="1"></core-animation-prop> |  | 
| 33         </core-animation-keyframe> |  | 
| 34         <core-animation-keyframe> |  | 
| 35           <core-animation-prop name="opacity" value="0"></core-animation-prop> |  | 
| 36         </core-animation-keyframe> |  | 
| 37       </core-animation> |  | 
| 38     </core-animation-group> |  | 
| 39 |  | 
| 40 @element core-animation-group |  | 
| 41 @status beta |  | 
| 42 @homepage github.io |  | 
| 43 --> |  | 
| 44 <polymer-element name="core-animation-group" constructor="CoreAnimationGroup" ex
     tends="core-animation" attributes="type"> |  | 
| 45   <script> |  | 
| 46     (function() { |  | 
| 47 |  | 
| 48       var ANIMATION_GROUPS = { |  | 
| 49         'par': AnimationGroup, |  | 
| 50         'seq': AnimationSequence |  | 
| 51       }; |  | 
| 52 |  | 
| 53       Polymer({ |  | 
| 54 |  | 
| 55         publish: { |  | 
| 56           /** |  | 
| 57            * If target is set, any children without a target will be assigned th
     e group's |  | 
| 58            * target when this property is set. |  | 
| 59            * |  | 
| 60            * @property target |  | 
| 61            * @type HTMLElement|Node|Array|Array<HTMLElement|Node> |  | 
| 62            */ |  | 
| 63 |  | 
| 64           /** |  | 
| 65            * For a `core-animation-group`, a duration of "auto" means the durati
     on should |  | 
| 66            * be the specified duration of its children. If set to anything other
      than |  | 
| 67            * "auto", any children without a set duration will be assigned the gr
     oup's duration. |  | 
| 68            * |  | 
| 69            * @property duration |  | 
| 70            * @type number |  | 
| 71            * @default "auto" |  | 
| 72            */ |  | 
| 73           duration: {value: 'auto', reflect: true}, |  | 
| 74 |  | 
| 75           /** |  | 
| 76            * The type of the animation group. 'par' creates a parallel group and
      'seq' creates |  | 
| 77            * a sequential group. |  | 
| 78            * |  | 
| 79            * @property type |  | 
| 80            * @type String |  | 
| 81            * @default 'par' |  | 
| 82            */ |  | 
| 83           type: {value: 'par', reflect: true} |  | 
| 84         }, |  | 
| 85 |  | 
| 86         typeChanged: function() { |  | 
| 87           this.apply(); |  | 
| 88         }, |  | 
| 89 |  | 
| 90         targetChanged: function() { |  | 
| 91           // Only propagate target to children animations if it's defined. |  | 
| 92           if (this.target) { |  | 
| 93             this.doOnChildren(function(c) { |  | 
| 94               c.target = this.target; |  | 
| 95             }.bind(this)); |  | 
| 96           } |  | 
| 97         }, |  | 
| 98 |  | 
| 99         durationChanged: function() { |  | 
| 100           if (this.duration && this.duration !== 'auto') { |  | 
| 101             this.doOnChildren(function(c) { |  | 
| 102               // Propagate to children that is not a group and has no |  | 
| 103               // duration specified. |  | 
| 104               if (!c.type && (!c.duration || c.duration === 'auto')) { |  | 
| 105                 c.duration = this.duration; |  | 
| 106               } |  | 
| 107             }.bind(this)); |  | 
| 108           } |  | 
| 109         }, |  | 
| 110 |  | 
| 111         doOnChildren: function(inFn) { |  | 
| 112           var children = this.children; |  | 
| 113           if (!children.length) { |  | 
| 114             children = this.shadowRoot ? this.shadowRoot.childNodes : []; |  | 
| 115           } |  | 
| 116           Array.prototype.forEach.call(children, function(c) { |  | 
| 117             // TODO <template> in the way |  | 
| 118             c.apply && inFn(c); |  | 
| 119           }, this); |  | 
| 120         }, |  | 
| 121 |  | 
| 122         makeAnimation: function() { |  | 
| 123           return new ANIMATION_GROUPS[this.type](this.childAnimations, this.timi
     ngProps); |  | 
| 124         }, |  | 
| 125 |  | 
| 126         hasTarget: function() { |  | 
| 127           var ht = this.target !== null; |  | 
| 128           if (!ht) { |  | 
| 129             this.doOnChildren(function(c) { |  | 
| 130               ht = ht || c.hasTarget(); |  | 
| 131             }.bind(this)); |  | 
| 132           } |  | 
| 133           return ht; |  | 
| 134         }, |  | 
| 135 |  | 
| 136         apply: function() { |  | 
| 137           // Propagate target and duration to child animations first. |  | 
| 138           this.durationChanged(); |  | 
| 139           this.targetChanged(); |  | 
| 140           this.doOnChildren(function(c) { |  | 
| 141             c.apply(); |  | 
| 142           }); |  | 
| 143           return this.super(); |  | 
| 144         }, |  | 
| 145 |  | 
| 146         get childAnimationElements() { |  | 
| 147           var list = []; |  | 
| 148           this.doOnChildren(function(c) { |  | 
| 149             if (c.makeAnimation) { |  | 
| 150               list.push(c); |  | 
| 151             } |  | 
| 152           }); |  | 
| 153           return list; |  | 
| 154         }, |  | 
| 155 |  | 
| 156         get childAnimations() { |  | 
| 157           var list = []; |  | 
| 158           this.doOnChildren(function(c) { |  | 
| 159             if (c.animation) { |  | 
| 160               list.push(c.animation); |  | 
| 161             } |  | 
| 162           }); |  | 
| 163           return list; |  | 
| 164         } |  | 
| 165       }); |  | 
| 166 |  | 
| 167     })(); |  | 
| 168   </script> |  | 
| 169 </polymer-element> |  | 
| OLD | NEW | 
|---|