greensock-rails 1.11.5.0 → 1.11.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/greensock/rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/greensock/TimelineLite.js +6 -6
  4. data/vendor/assets/javascripts/greensock/TimelineMax.js +10 -10
  5. data/vendor/assets/javascripts/greensock/TweenLite.js +13 -10
  6. data/vendor/assets/javascripts/greensock/TweenMax.js +56 -31
  7. data/vendor/assets/javascripts/greensock/plugins/BezierPlugin.js +9 -3
  8. data/vendor/assets/javascripts/greensock/plugins/CSSPlugin.js +23 -10
  9. data/vendor/assets/javascripts/greensock/utils/Draggable.js +14 -4
  10. data/vendor/bundle/cache/rake-10.2.2.gem +0 -0
  11. data/vendor/bundle/gems/rake-10.2.2/doc/command_line_usage.rdoc +158 -0
  12. data/vendor/bundle/gems/rake-10.2.2/doc/example/Rakefile1 +38 -0
  13. data/vendor/bundle/gems/rake-10.2.2/doc/example/Rakefile2 +35 -0
  14. data/vendor/bundle/gems/rake-10.2.2/doc/example/a.c +6 -0
  15. data/vendor/bundle/gems/rake-10.2.2/doc/example/b.c +6 -0
  16. data/vendor/bundle/gems/rake-10.2.2/doc/example/main.c +11 -0
  17. data/vendor/bundle/gems/rake-10.2.2/doc/glossary.rdoc +51 -0
  18. data/vendor/bundle/gems/rake-10.2.2/doc/jamis.rb +591 -0
  19. data/vendor/bundle/gems/rake-10.2.2/doc/proto_rake.rdoc +127 -0
  20. data/vendor/bundle/gems/rake-10.2.2/doc/rake.1.gz +0 -0
  21. data/vendor/bundle/gems/rake-10.2.2/doc/rakefile.rdoc +653 -0
  22. data/vendor/bundle/gems/rake-10.2.2/doc/rational.rdoc +151 -0
  23. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.4.14.rdoc +23 -0
  24. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.4.15.rdoc +35 -0
  25. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.5.0.rdoc +53 -0
  26. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.5.3.rdoc +78 -0
  27. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.5.4.rdoc +46 -0
  28. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.6.0.rdoc +141 -0
  29. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.7.0.rdoc +119 -0
  30. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.7.1.rdoc +59 -0
  31. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.7.2.rdoc +121 -0
  32. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.7.3.rdoc +47 -0
  33. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.8.0.rdoc +114 -0
  34. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.8.2.rdoc +165 -0
  35. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.8.3.rdoc +112 -0
  36. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.8.4.rdoc +147 -0
  37. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.8.5.rdoc +53 -0
  38. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.8.6.rdoc +37 -0
  39. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.8.7.rdoc +55 -0
  40. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.9.0.rdoc +112 -0
  41. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.9.1.rdoc +52 -0
  42. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
  43. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.9.2.rdoc +49 -0
  44. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.9.3.rdoc +102 -0
  45. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.9.4.rdoc +60 -0
  46. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.9.5.rdoc +55 -0
  47. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-0.9.6.rdoc +64 -0
  48. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-10.0.0.rdoc +178 -0
  49. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-10.0.1.rdoc +58 -0
  50. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-10.0.2.rdoc +53 -0
  51. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-10.0.3.rdoc +191 -0
  52. data/vendor/bundle/gems/rake-10.2.2/doc/release_notes/rake-10.1.0.rdoc +61 -0
  53. data/vendor/cache/rake-10.2.2.gem +0 -0
  54. metadata +46 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f1d652e6fc6aacf30470eb168e4291bc74b3432
4
- data.tar.gz: 45301aef0811d86b0945577e0c9e3d1a3212ecbe
3
+ metadata.gz: 414016c8637d637cc362bf7b2c6dc55932176457
4
+ data.tar.gz: 6eddaef27ab877fda7781c68b329d10411378965
5
5
  SHA512:
6
- metadata.gz: a53a6d23b5a6fefa0cdec13f7b3d8541ae4d09fdbe1bf5bd10dcc134bdebc6a22d35330cf8dd9a15b6c4608b94e2f300c148dca6245a3b1d196f506ee8784de2
7
- data.tar.gz: 462982a81bdf0dbe0470cf4248f49efac0709b8def707135d3173c229f1c8d8da5b4b6a3d8fd238f739b814451c1027af5f41ea379d8d4e9669fbb09900022bf
6
+ metadata.gz: 8f01074f944b2742894e8fd062b70c5ef0cb4e71a58b3770eff741d154366493fb381559c14f79557e791681a23d92ce9f279d70ccc586fed678b8b187cceaac
7
+ data.tar.gz: bfba92ca543ca328ad2988781eb6761ce4b8f145997dc51a08d401e7d7ae9924772f0352787c52dc99faf9690970432f8bf9bbfd1433fe7285db19104a5ed23d
@@ -1,5 +1,5 @@
1
1
  module Greensock
2
2
  module Rails
3
- VERSION = "1.11.5.0"
3
+ VERSION = "1.11.6.0"
4
4
  end
5
5
  end
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * VERSION: 1.11.5
3
- * DATE: 2014-02-20
2
+ * VERSION: 1.11.6
3
+ * DATE: 2014-03-26
4
4
  * UPDATES AND DOCS AT: http://www.greensock.com
5
5
  *
6
6
  * @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
@@ -55,7 +55,7 @@
55
55
  _slice = _blankArray.slice,
56
56
  p = TimelineLite.prototype = new SimpleTimeline();
57
57
 
58
- TimelineLite.version = "1.11.5";
58
+ TimelineLite.version = "1.11.6";
59
59
  p.constructor = TimelineLite;
60
60
  p.kill()._gc = false;
61
61
 
@@ -323,12 +323,12 @@
323
323
  }
324
324
  }
325
325
  }
326
- this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
326
+ this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
327
327
  time = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.
328
328
 
329
329
  } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.
330
330
  this._totalTime = this._time = 0;
331
- if (prevTime !== 0 || (this._duration === 0 && (this._rawPrevTime > _tinyNum || (time < 0 && this._rawPrevTime >= 0)))) {
331
+ if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime !== _tinyNum && (this._rawPrevTime > 0 || (time < 0 && this._rawPrevTime >= 0)))) {
332
332
  callback = "onReverseComplete";
333
333
  isComplete = this._reversed;
334
334
  }
@@ -339,7 +339,7 @@
339
339
  }
340
340
  this._rawPrevTime = time;
341
341
  } else {
342
- this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
342
+ this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
343
343
 
344
344
  time = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)
345
345
  if (!this._initted) {
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * VERSION: 1.11.5
3
- * DATE: 2014-02-20
2
+ * VERSION: 1.11.6
3
+ * DATE: 2014-03-26
4
4
  * UPDATES AND DOCS AT: http://www.greensock.com
5
5
  *
6
6
  * @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
@@ -31,7 +31,7 @@
31
31
 
32
32
  p.constructor = TimelineMax;
33
33
  p.kill()._gc = false;
34
- TimelineMax.version = "1.11.5";
34
+ TimelineMax.version = "1.11.6";
35
35
 
36
36
  p.invalidate = function() {
37
37
  this._yoyo = (this.vars.yoyo === true);
@@ -123,7 +123,7 @@
123
123
  }
124
124
  }
125
125
  }
126
- this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
126
+ this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
127
127
  if (this._yoyo && (this._cycle & 1) !== 0) {
128
128
  this._time = time = 0;
129
129
  } else {
@@ -136,7 +136,7 @@
136
136
  this._totalTime = this._cycle = 0;
137
137
  }
138
138
  this._time = 0;
139
- if (prevTime !== 0 || (dur === 0 && (prevRawPrevTime > _tinyNum || (time < 0 && prevRawPrevTime >= 0)) && !this._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)
139
+ if (prevTime !== 0 || (dur === 0 && prevRawPrevTime !== _tinyNum && (prevRawPrevTime > 0 || (time < 0 && prevRawPrevTime >= 0)) && !this._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)
140
140
  callback = "onReverseComplete";
141
141
  isComplete = this._reversed;
142
142
  }
@@ -147,7 +147,7 @@
147
147
  }
148
148
  this._rawPrevTime = time;
149
149
  } else {
150
- this._rawPrevTime = (dur || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
150
+ this._rawPrevTime = (dur || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
151
151
  time = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)
152
152
  if (!this._initted) {
153
153
  internalForce = true;
@@ -494,7 +494,7 @@
494
494
  _slice = _blankArray.slice,
495
495
  p = TimelineLite.prototype = new SimpleTimeline();
496
496
 
497
- TimelineLite.version = "1.11.5";
497
+ TimelineLite.version = "1.11.6";
498
498
  p.constructor = TimelineLite;
499
499
  p.kill()._gc = false;
500
500
 
@@ -762,12 +762,12 @@
762
762
  }
763
763
  }
764
764
  }
765
- this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
765
+ this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
766
766
  time = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.
767
767
 
768
768
  } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.
769
769
  this._totalTime = this._time = 0;
770
- if (prevTime !== 0 || (this._duration === 0 && (this._rawPrevTime > _tinyNum || (time < 0 && this._rawPrevTime >= 0)))) {
770
+ if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime !== _tinyNum && (this._rawPrevTime > 0 || (time < 0 && this._rawPrevTime >= 0)))) {
771
771
  callback = "onReverseComplete";
772
772
  isComplete = this._reversed;
773
773
  }
@@ -778,7 +778,7 @@
778
778
  }
779
779
  this._rawPrevTime = time;
780
780
  } else {
781
- this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
781
+ this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
782
782
 
783
783
  time = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)
784
784
  if (!this._initted) {
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * VERSION: 1.11.5
3
- * DATE: 2014-02-20
2
+ * VERSION: 1.11.6
3
+ * DATE: 2014-03-26
4
4
  * UPDATES AND DOCS AT: http://www.greensock.com
5
5
  *
6
6
  * @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
@@ -412,21 +412,21 @@
412
412
 
413
413
 
414
414
  p.play = function(from, suppressEvents) {
415
- if (arguments.length) {
415
+ if (from != null) {
416
416
  this.seek(from, suppressEvents);
417
417
  }
418
418
  return this.reversed(false).paused(false);
419
419
  };
420
420
 
421
421
  p.pause = function(atTime, suppressEvents) {
422
- if (arguments.length) {
422
+ if (atTime != null) {
423
423
  this.seek(atTime, suppressEvents);
424
424
  }
425
425
  return this.paused(true);
426
426
  };
427
427
 
428
428
  p.resume = function(from, suppressEvents) {
429
- if (arguments.length) {
429
+ if (from != null) {
430
430
  this.seek(from, suppressEvents);
431
431
  }
432
432
  return this.paused(false);
@@ -441,7 +441,7 @@
441
441
  };
442
442
 
443
443
  p.reverse = function(from, suppressEvents) {
444
- if (arguments.length) {
444
+ if (from != null) {
445
445
  this.seek((from || this.totalDuration()), suppressEvents);
446
446
  }
447
447
  return this.reversed(true).paused(false);
@@ -872,7 +872,7 @@
872
872
  p._firstPT = p._targets = p._overwrittenProps = p._startAt = null;
873
873
  p._notifyPluginsOfEnabled = false;
874
874
 
875
- TweenLite.version = "1.11.5";
875
+ TweenLite.version = "1.11.6";
876
876
  TweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);
877
877
  TweenLite.defaultOverwrite = "auto";
878
878
  TweenLite.ticker = _ticker;
@@ -1165,19 +1165,22 @@
1165
1165
  }
1166
1166
  if (duration === 0) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the "playhead" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's "playhead" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.
1167
1167
  rawPrevTime = this._rawPrevTime;
1168
+ if (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.
1169
+ time = 0;
1170
+ }
1168
1171
  if (time === 0 || rawPrevTime < 0 || rawPrevTime === _tinyNum) if (rawPrevTime !== time) {
1169
1172
  force = true;
1170
1173
  if (rawPrevTime > _tinyNum) {
1171
1174
  callback = "onReverseComplete";
1172
1175
  }
1173
1176
  }
1174
- this._rawPrevTime = rawPrevTime = (!suppressEvents || time || rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
1177
+ this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
1175
1178
  }
1176
1179
 
1177
1180
  } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.
1178
1181
  this._totalTime = this._time = 0;
1179
1182
  this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;
1180
- if (prevTime !== 0 || (duration === 0 && this._rawPrevTime > _tinyNum)) {
1183
+ if (prevTime !== 0 || (duration === 0 && this._rawPrevTime > 0 && this._rawPrevTime !== _tinyNum)) {
1181
1184
  callback = "onReverseComplete";
1182
1185
  isComplete = this._reversed;
1183
1186
  }
@@ -1187,7 +1190,7 @@
1187
1190
  if (this._rawPrevTime >= 0) {
1188
1191
  force = true;
1189
1192
  }
1190
- this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
1193
+ this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
1191
1194
  }
1192
1195
  } else if (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.
1193
1196
  force = true;
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * VERSION: 1.11.5
3
- * DATE: 2014-02-20
2
+ * VERSION: 1.11.6
3
+ * DATE: 2014-03-26
4
4
  * UPDATES AND DOCS AT: http://www.greensock.com
5
5
  *
6
6
  * Includes all of the following: TweenLite, TweenMax, TimelineLite, TimelineMax, EasePack, CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin
@@ -34,7 +34,7 @@
34
34
  p = TweenMax.prototype = TweenLite.to({}, 0.1, {}),
35
35
  _blankArray = [];
36
36
 
37
- TweenMax.version = "1.11.5";
37
+ TweenMax.version = "1.11.6";
38
38
  p.constructor = TweenMax;
39
39
  p.kill()._gc = false;
40
40
  TweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf;
@@ -121,19 +121,22 @@
121
121
  }
122
122
  if (duration === 0) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the "playhead" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's "playhead" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.
123
123
  rawPrevTime = this._rawPrevTime;
124
+ if (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.
125
+ time = 0;
126
+ }
124
127
  if (time === 0 || rawPrevTime < 0 || rawPrevTime === _tinyNum) if (rawPrevTime !== time) {
125
128
  force = true;
126
129
  if (rawPrevTime > _tinyNum) {
127
130
  callback = "onReverseComplete";
128
131
  }
129
132
  }
130
- this._rawPrevTime = rawPrevTime = (!suppressEvents || time || rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
133
+ this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
131
134
  }
132
135
 
133
136
  } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.
134
137
  this._totalTime = this._time = this._cycle = 0;
135
138
  this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;
136
- if (prevTotalTime !== 0 || (duration === 0 && this._rawPrevTime > _tinyNum)) {
139
+ if (prevTotalTime !== 0 || (duration === 0 && this._rawPrevTime > 0 && this._rawPrevTime !== _tinyNum)) {
137
140
  callback = "onReverseComplete";
138
141
  isComplete = this._reversed;
139
142
  }
@@ -143,7 +146,7 @@
143
146
  if (this._rawPrevTime >= 0) {
144
147
  force = true;
145
148
  }
146
- this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
149
+ this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
147
150
  }
148
151
  } else if (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.
149
152
  force = true;
@@ -607,7 +610,7 @@
607
610
  _slice = _blankArray.slice,
608
611
  p = TimelineLite.prototype = new SimpleTimeline();
609
612
 
610
- TimelineLite.version = "1.11.5";
613
+ TimelineLite.version = "1.11.6";
611
614
  p.constructor = TimelineLite;
612
615
  p.kill()._gc = false;
613
616
 
@@ -875,12 +878,12 @@
875
878
  }
876
879
  }
877
880
  }
878
- this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
881
+ this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
879
882
  time = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.
880
883
 
881
884
  } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.
882
885
  this._totalTime = this._time = 0;
883
- if (prevTime !== 0 || (this._duration === 0 && (this._rawPrevTime > _tinyNum || (time < 0 && this._rawPrevTime >= 0)))) {
886
+ if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime !== _tinyNum && (this._rawPrevTime > 0 || (time < 0 && this._rawPrevTime >= 0)))) {
884
887
  callback = "onReverseComplete";
885
888
  isComplete = this._reversed;
886
889
  }
@@ -891,7 +894,7 @@
891
894
  }
892
895
  this._rawPrevTime = time;
893
896
  } else {
894
- this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
897
+ this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
895
898
 
896
899
  time = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)
897
900
  if (!this._initted) {
@@ -1204,7 +1207,7 @@
1204
1207
 
1205
1208
  p.constructor = TimelineMax;
1206
1209
  p.kill()._gc = false;
1207
- TimelineMax.version = "1.11.5";
1210
+ TimelineMax.version = "1.11.6";
1208
1211
 
1209
1212
  p.invalidate = function() {
1210
1213
  this._yoyo = (this.vars.yoyo === true);
@@ -1296,7 +1299,7 @@
1296
1299
  }
1297
1300
  }
1298
1301
  }
1299
- this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
1302
+ this._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
1300
1303
  if (this._yoyo && (this._cycle & 1) !== 0) {
1301
1304
  this._time = time = 0;
1302
1305
  } else {
@@ -1309,7 +1312,7 @@
1309
1312
  this._totalTime = this._cycle = 0;
1310
1313
  }
1311
1314
  this._time = 0;
1312
- if (prevTime !== 0 || (dur === 0 && (prevRawPrevTime > _tinyNum || (time < 0 && prevRawPrevTime >= 0)) && !this._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)
1315
+ if (prevTime !== 0 || (dur === 0 && prevRawPrevTime !== _tinyNum && (prevRawPrevTime > 0 || (time < 0 && prevRawPrevTime >= 0)) && !this._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)
1313
1316
  callback = "onReverseComplete";
1314
1317
  isComplete = this._reversed;
1315
1318
  }
@@ -1320,7 +1323,7 @@
1320
1323
  }
1321
1324
  this._rawPrevTime = time;
1322
1325
  } else {
1323
- this._rawPrevTime = (dur || !suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
1326
+ this._rawPrevTime = (dur || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
1324
1327
  time = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)
1325
1328
  if (!this._initted) {
1326
1329
  internalForce = true;
@@ -1925,6 +1928,7 @@
1925
1928
  BezierPlugin = window._gsDefine.plugin({
1926
1929
  propName: "bezier",
1927
1930
  priority: -1,
1931
+ version: "1.3.1",
1928
1932
  API: 2,
1929
1933
  global:true,
1930
1934
 
@@ -1976,6 +1980,7 @@
1976
1980
  }
1977
1981
 
1978
1982
  if ((autoRotate = this._autoRotate)) {
1983
+ this._initialRotations = [];
1979
1984
  if (!(autoRotate[0] instanceof Array)) {
1980
1985
  this._autoRotate = autoRotate = [autoRotate];
1981
1986
  }
@@ -1985,8 +1990,11 @@
1985
1990
  p = autoRotate[i][j];
1986
1991
  this._func[p] = (typeof(target[p]) === "function") ? target[ ((p.indexOf("set") || typeof(target["get" + p.substr(3)]) !== "function") ? p : "get" + p.substr(3)) ] : false;
1987
1992
  }
1993
+ p = autoRotate[i][2];
1994
+ this._initialRotations[i] = this._func[p] ? this._func[p].call(this._target) : this._target[p];
1988
1995
  }
1989
1996
  }
1997
+ this._startRatio = tween.vars.runBackwards ? 1 : 0; //we determine the starting ratio when the tween inits which is always 0 unless the tween has runBackwards:true (indicating it's a from() tween) in which case it's 1.
1990
1998
  return true;
1991
1999
  },
1992
2000
 
@@ -1995,6 +2003,7 @@
1995
2003
  var segments = this._segCount,
1996
2004
  func = this._func,
1997
2005
  target = this._target,
2006
+ notStart = (v !== this._startRatio),
1998
2007
  curIndex, inv, i, p, b, t, val, l, lengths, curSeg;
1999
2008
  if (!this._timeRes) {
2000
2009
  curIndex = (v < 0) ? 0 : (v >= 1) ? segments - 1 : (segments * v) >> 0;
@@ -2088,7 +2097,7 @@
2088
2097
  y1 += (y2 - y1) * t;
2089
2098
  y2 += ((b2.c + (b2.d - b2.c) * t) - y2) * t;
2090
2099
 
2091
- val = Math.atan2(y2 - y1, x2 - x1) * conv + add;
2100
+ val = notStart ? Math.atan2(y2 - y1, x2 - x1) * conv + add : this._initialRotations[i];
2092
2101
 
2093
2102
  if (func[p]) {
2094
2103
  target[p](val);
@@ -2226,9 +2235,10 @@
2226
2235
  p = CSSPlugin.prototype = new TweenPlugin("css");
2227
2236
 
2228
2237
  p.constructor = CSSPlugin;
2229
- CSSPlugin.version = "1.11.5";
2238
+ CSSPlugin.version = "1.11.6";
2230
2239
  CSSPlugin.API = 2;
2231
2240
  CSSPlugin.defaultTransformPerspective = 0;
2241
+ CSSPlugin.defaultSkewType = "compensated";
2232
2242
  p = "px"; //we'll reuse the "p" variable to keep file size down
2233
2243
  CSSPlugin.suffixMap = {top:p, right:p, bottom:p, left:p, width:p, height:p, fontSize:p, padding:p, margin:p, perspective:p, lineHeight:""};
2234
2244
 
@@ -2350,7 +2360,7 @@
2350
2360
  * @param {boolean=} recurse If true, the call is a recursive one. In some browsers (like IE7/8), occasionally the value isn't accurately reported initially, but if we run the function again it will take effect.
2351
2361
  * @return {number} value in pixels
2352
2362
  */
2353
- _convertToPixels = function(t, p, v, sfx, recurse) {
2363
+ _convertToPixels = _internals.convertToPixels = function(t, p, v, sfx, recurse) {
2354
2364
  if (sfx === "px" || !sfx) { return v; }
2355
2365
  if (sfx === "auto" || !v) { return 0; }
2356
2366
  var horiz = _horizExp.test(p),
@@ -2380,7 +2390,7 @@
2380
2390
  }
2381
2391
  return neg ? -pix : pix;
2382
2392
  },
2383
- _calculateOffset = function(t, p, cs) { //for figuring out "top" or "left" in px when it's "auto". We need to factor in margin with the offsetLeft/offsetTop
2393
+ _calculateOffset = _internals.calculateOffset = function(t, p, cs) { //for figuring out "top" or "left" in px when it's "auto". We need to factor in margin with the offsetLeft/offsetTop
2384
2394
  if (_getStyle(t, "position", cs) !== "absolute") { return 0; }
2385
2395
  var dim = ((p === "left") ? "Left" : "Top"),
2386
2396
  v = _getStyle(t, "margin" + dim, cs);
@@ -3239,6 +3249,9 @@
3239
3249
  _transformPropCSS = _prefixCSS + "transform",
3240
3250
  _transformOriginProp = _checkPropPrefix("transformOrigin"),
3241
3251
  _supports3D = (_checkPropPrefix("perspective") !== null),
3252
+ Transform = _internals.Transform = function() {
3253
+ this.skewY = 0;
3254
+ },
3242
3255
 
3243
3256
  /**
3244
3257
  * Parses the transform values for an element, returning an object with x, y, z, scaleX, scaleY, scaleZ, rotation, rotationX, rotationY, skewX, and skewY properties. Note: by default (for performance reasons), all skewing is combined into skewX and rotation but skewY still has a place in the transform object so that we can record how much of the skew is attributed to skewX vs skewY. Remember, a skewY of 10 looks the same as a rotation of 10 and skewX of -10.
@@ -3248,11 +3261,11 @@
3248
3261
  * @param {boolean=} parse if true, we'll ignore any _gsTransform values that already exist on the element, and force a reparsing of the css (calculated style)
3249
3262
  * @return {object} object containing all of the transform properties/values like {x:0, y:0, z:0, scaleX:1...}
3250
3263
  */
3251
- _getTransform = function(t, cs, rec, parse) {
3264
+ _getTransform = _internals.getTransform = function(t, cs, rec, parse) {
3252
3265
  if (t._gsTransform && rec && !parse) {
3253
3266
  return t._gsTransform; //if the element already has a _gsTransform, use that. Note: some browsers don't accurately return the calculated style for the transform (particularly for SVG), so it's almost always safest to just use the values we've already applied rather than re-parsing things.
3254
3267
  }
3255
- var tm = rec ? t._gsTransform || {skewY:0} : {skewY:0},
3268
+ var tm = rec ? t._gsTransform || new Transform() : new Transform(),
3256
3269
  invX = (tm.scaleX < 0), //in order to interpret things properly, we need to know if the user applied a negative scaleX previously so that we can adjust the rotation and skewX accordingly. Otherwise, if we always interpret a flipped matrix as affecting scaleY and the user only wants to tween the scaleX on multiple sequential tweens, it would keep the negative scaleY without that being the user's intent.
3257
3270
  min = 0.00002,
3258
3271
  rnd = 100000,
@@ -3494,7 +3507,7 @@
3494
3507
  }
3495
3508
  },
3496
3509
 
3497
- _set3DTransformRatio = function(v) {
3510
+ _set3DTransformRatio = _internals.set3DTransformRatio = function(v) {
3498
3511
  var t = this.data, //refers to the element's _gsTransform object
3499
3512
  style = this.t.style,
3500
3513
  angle = t.rotation * _DEG2RAD,
@@ -3525,9 +3538,16 @@
3525
3538
  angle -= t.skewX * _DEG2RAD;
3526
3539
  cos = Math.cos(angle);
3527
3540
  sin = Math.sin(angle);
3541
+ if (t.skewType === "simple") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to "simple" to use the uncompensated skewing that CSS does
3542
+ t1 = Math.tan(t.skewX * _DEG2RAD);
3543
+ t1 = Math.sqrt(1 + t1 * t1);
3544
+ cos *= t1;
3545
+ sin *= t1;
3546
+ }
3528
3547
  }
3529
3548
  a12 = -sin;
3530
3549
  a22 = cos;
3550
+
3531
3551
  } else if (!t.rotationY && !t.rotationX && sz === 1 && !perspective) { //if we're only translating and/or 2D scaling, this is faster...
3532
3552
  style[_transformProp] = "translate3d(" + t.x + "px," + t.y + "px," + t.z +"px)" + ((sx !== 1 || sy !== 1) ? " scale(" + sx + "," + sy + ")" : "");
3533
3553
  return;
@@ -3601,7 +3621,7 @@
3601
3621
  style[_transformProp] = "matrix3d(" + [ (((a11 * rnd) | 0) / rnd), (((a21 * rnd) | 0) / rnd), (((a31 * rnd) | 0) / rnd), (((a41 * rnd) | 0) / rnd), (((a12 * rnd) | 0) / rnd), (((a22 * rnd) | 0) / rnd), (((a32 * rnd) | 0) / rnd), (((a42 * rnd) | 0) / rnd), (((a13 * rnd) | 0) / rnd), (((a23 * rnd) | 0) / rnd), (((a33 * rnd) | 0) / rnd), (((a43 * rnd) | 0) / rnd), a14, a24, a34, (perspective ? (1 + (-a34 / perspective)) : 1) ].join(",") + ")";
3602
3622
  },
3603
3623
 
3604
- _set2DTransformRatio = function(v) {
3624
+ _set2DTransformRatio = _internals.set2DTransformRatio = function(v) {
3605
3625
  var t = this.data, //refers to the element's _gsTransform object
3606
3626
  targ = this.t,
3607
3627
  style = targ.style,
@@ -3624,7 +3644,7 @@
3624
3644
  }
3625
3645
  };
3626
3646
 
3627
- _registerComplexSpecialProp("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D", {parser:function(t, e, p, cssp, pt, plugin, vars) {
3647
+ _registerComplexSpecialProp("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType", {parser:function(t, e, p, cssp, pt, plugin, vars) {
3628
3648
  if (cssp._transform) { return pt; } //only need to parse the transform once, and only if the browser supports it.
3629
3649
  var m1 = cssp._transform = _getTransform(t, _cs, true, vars.parseTransform),
3630
3650
  style = t.style,
@@ -3678,6 +3698,8 @@
3678
3698
  hasChange = true;
3679
3699
  }
3680
3700
 
3701
+ m1.skewType = v.skewType || m1.skewType || CSSPlugin.defaultSkewType;
3702
+
3681
3703
  has3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective);
3682
3704
  if (!has3D && v.scale != null) {
3683
3705
  m2.scaleZ = 1; //no need to tween scaleZ.
@@ -5420,21 +5442,21 @@
5420
5442
 
5421
5443
 
5422
5444
  p.play = function(from, suppressEvents) {
5423
- if (arguments.length) {
5445
+ if (from != null) {
5424
5446
  this.seek(from, suppressEvents);
5425
5447
  }
5426
5448
  return this.reversed(false).paused(false);
5427
5449
  };
5428
5450
 
5429
5451
  p.pause = function(atTime, suppressEvents) {
5430
- if (arguments.length) {
5452
+ if (atTime != null) {
5431
5453
  this.seek(atTime, suppressEvents);
5432
5454
  }
5433
5455
  return this.paused(true);
5434
5456
  };
5435
5457
 
5436
5458
  p.resume = function(from, suppressEvents) {
5437
- if (arguments.length) {
5459
+ if (from != null) {
5438
5460
  this.seek(from, suppressEvents);
5439
5461
  }
5440
5462
  return this.paused(false);
@@ -5449,7 +5471,7 @@
5449
5471
  };
5450
5472
 
5451
5473
  p.reverse = function(from, suppressEvents) {
5452
- if (arguments.length) {
5474
+ if (from != null) {
5453
5475
  this.seek((from || this.totalDuration()), suppressEvents);
5454
5476
  }
5455
5477
  return this.reversed(true).paused(false);
@@ -5880,7 +5902,7 @@
5880
5902
  p._firstPT = p._targets = p._overwrittenProps = p._startAt = null;
5881
5903
  p._notifyPluginsOfEnabled = false;
5882
5904
 
5883
- TweenLite.version = "1.11.5";
5905
+ TweenLite.version = "1.11.6";
5884
5906
  TweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);
5885
5907
  TweenLite.defaultOverwrite = "auto";
5886
5908
  TweenLite.ticker = _ticker;
@@ -6173,19 +6195,22 @@
6173
6195
  }
6174
6196
  if (duration === 0) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the "playhead" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's "playhead" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.
6175
6197
  rawPrevTime = this._rawPrevTime;
6198
+ if (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.
6199
+ time = 0;
6200
+ }
6176
6201
  if (time === 0 || rawPrevTime < 0 || rawPrevTime === _tinyNum) if (rawPrevTime !== time) {
6177
6202
  force = true;
6178
6203
  if (rawPrevTime > _tinyNum) {
6179
6204
  callback = "onReverseComplete";
6180
6205
  }
6181
6206
  }
6182
- this._rawPrevTime = rawPrevTime = (!suppressEvents || time || rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
6207
+ this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
6183
6208
  }
6184
6209
 
6185
6210
  } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.
6186
6211
  this._totalTime = this._time = 0;
6187
6212
  this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;
6188
- if (prevTime !== 0 || (duration === 0 && this._rawPrevTime > _tinyNum)) {
6213
+ if (prevTime !== 0 || (duration === 0 && this._rawPrevTime > 0 && this._rawPrevTime !== _tinyNum)) {
6189
6214
  callback = "onReverseComplete";
6190
6215
  isComplete = this._reversed;
6191
6216
  }
@@ -6195,7 +6220,7 @@
6195
6220
  if (this._rawPrevTime >= 0) {
6196
6221
  force = true;
6197
6222
  }
6198
- this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === 0) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
6223
+ this._rawPrevTime = rawPrevTime = (!suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.
6199
6224
  }
6200
6225
  } else if (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.
6201
6226
  force = true;