greensock-rails 1.14.2.0 → 1.15.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/greensock/rails/version.rb +1 -1
- data/vendor/assets/javascripts/greensock/TimelineLite.js +12 -9
- data/vendor/assets/javascripts/greensock/TimelineMax.js +14 -10
- data/vendor/assets/javascripts/greensock/TweenLite.js +8 -8
- data/vendor/assets/javascripts/greensock/TweenMax.js +142 -130
- data/vendor/assets/javascripts/greensock/plugins/BezierPlugin.js +5 -4
- data/vendor/assets/javascripts/greensock/plugins/CSSPlugin.js +118 -113
- data/vendor/assets/javascripts/greensock/utils/Draggable.js +6 -5
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f730f1a572256766ec5d4e39edde2bd60ad127b
|
4
|
+
data.tar.gz: 2c89a9e90964f1ca93feb92c0e1cbb41c3ad23e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aeee17feeba70f7bf78d13d9eb9f1fad9c6c8055bf62cee8abbcbc0740d83d7c32093d4483d26306452f667049ba6fb50c0ad9764787c4ce4b66cb9416c4a9b8
|
7
|
+
data.tar.gz: c227f044815706dc4dd1f0787a816c792b32a09d32c3cd8de20767849effd166999f8013f504dad23930c197284c04ca3c1a32f7ff08e992aaf7b553eb448d3d
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* VERSION: 1.
|
3
|
-
* DATE: 2014-
|
2
|
+
* VERSION: 1.15.0
|
3
|
+
* DATE: 2014-12-03
|
4
4
|
* UPDATES AND DOCS AT: http://www.greensock.com
|
5
5
|
*
|
6
6
|
* @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
|
@@ -51,14 +51,15 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
51
51
|
return copy;
|
52
52
|
},
|
53
53
|
_pauseCallback = function(tween, callback, params, scope) {
|
54
|
-
var
|
55
|
-
|
56
|
-
|
54
|
+
var tl = tween._timeline,
|
55
|
+
time = tl._totalTime;
|
56
|
+
if ((callback || !this._forcingPlayhead) && tl._rawPrevTime !== tween._startTime) { //if the user calls a method that moves the playhead (like progress() or time()), it should honor that and skip any pauses (although if there's a callback positioned at that pause, it must jump there and make the call to ensure the time is EXACTLY what it is supposed to be, and then proceed to where the playhead is being forced). Otherwise, imagine placing a pause in the middle of a timeline and then doing timeline.progress(0.9) - it would get stuck where the pause is.
|
57
|
+
tl.pause(tween._startTime);
|
57
58
|
if (callback) {
|
58
|
-
callback.apply(scope ||
|
59
|
+
callback.apply(scope || tl, params || _blankArray);
|
59
60
|
}
|
60
61
|
if (this._forcingPlayhead) {
|
61
|
-
|
62
|
+
tl.seek(time);
|
62
63
|
}
|
63
64
|
}
|
64
65
|
},
|
@@ -71,7 +72,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
71
72
|
},
|
72
73
|
p = TimelineLite.prototype = new SimpleTimeline();
|
73
74
|
|
74
|
-
TimelineLite.version = "1.
|
75
|
+
TimelineLite.version = "1.15.0";
|
75
76
|
p.constructor = TimelineLite;
|
76
77
|
p.kill()._gc = p._forcingPlayhead = false;
|
77
78
|
|
@@ -286,7 +287,9 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
286
287
|
};
|
287
288
|
|
288
289
|
p.addPause = function(position, callback, params, scope) {
|
289
|
-
|
290
|
+
var t = TweenLite.delayedCall(0, _pauseCallback, ["{self}", callback, params, scope], this);
|
291
|
+
t.data = "isPause"; // we use this flag in TweenLite's render() method to identify it as a special case that shouldn't be triggered when the virtual playhead is LEAVING the exact position where the pause is, otherwise timeline.addPause(1).play(1) would end up paused on the very next tick.
|
292
|
+
return this.add(t, position);
|
290
293
|
};
|
291
294
|
|
292
295
|
p.removeLabel = function(label) {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* VERSION: 1.
|
3
|
-
* DATE: 2014-
|
2
|
+
* VERSION: 1.15.0
|
3
|
+
* DATE: 2014-12-03
|
4
4
|
* UPDATES AND DOCS AT: http://www.greensock.com
|
5
5
|
*
|
6
6
|
* @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
|
@@ -34,7 +34,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
34
34
|
|
35
35
|
p.constructor = TimelineMax;
|
36
36
|
p.kill()._gc = false;
|
37
|
-
TimelineMax.version = "1.
|
37
|
+
TimelineMax.version = "1.15.0";
|
38
38
|
|
39
39
|
p.invalidate = function() {
|
40
40
|
this._yoyo = (this.vars.yoyo === true);
|
@@ -498,14 +498,15 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
498
498
|
return copy;
|
499
499
|
},
|
500
500
|
_pauseCallback = function(tween, callback, params, scope) {
|
501
|
-
var
|
502
|
-
|
503
|
-
|
501
|
+
var tl = tween._timeline,
|
502
|
+
time = tl._totalTime;
|
503
|
+
if ((callback || !this._forcingPlayhead) && tl._rawPrevTime !== tween._startTime) { //if the user calls a method that moves the playhead (like progress() or time()), it should honor that and skip any pauses (although if there's a callback positioned at that pause, it must jump there and make the call to ensure the time is EXACTLY what it is supposed to be, and then proceed to where the playhead is being forced). Otherwise, imagine placing a pause in the middle of a timeline and then doing timeline.progress(0.9) - it would get stuck where the pause is.
|
504
|
+
tl.pause(tween._startTime);
|
504
505
|
if (callback) {
|
505
|
-
callback.apply(scope ||
|
506
|
+
callback.apply(scope || tl, params || _blankArray);
|
506
507
|
}
|
507
508
|
if (this._forcingPlayhead) {
|
508
|
-
|
509
|
+
tl.seek(time);
|
509
510
|
}
|
510
511
|
}
|
511
512
|
},
|
@@ -518,7 +519,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
518
519
|
},
|
519
520
|
p = TimelineLite.prototype = new SimpleTimeline();
|
520
521
|
|
521
|
-
TimelineLite.version = "1.
|
522
|
+
TimelineLite.version = "1.15.0";
|
522
523
|
p.constructor = TimelineLite;
|
523
524
|
p.kill()._gc = p._forcingPlayhead = false;
|
524
525
|
|
@@ -564,6 +565,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
564
565
|
if (typeof(targets) === "string") {
|
565
566
|
targets = TweenLite.selector(targets) || targets;
|
566
567
|
}
|
568
|
+
targets = targets || [];
|
567
569
|
if (_isSelector(targets)) { //senses if the targets object is a selector. If it is, we should translate it into an array.
|
568
570
|
targets = _slice(targets);
|
569
571
|
}
|
@@ -732,7 +734,9 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
732
734
|
};
|
733
735
|
|
734
736
|
p.addPause = function(position, callback, params, scope) {
|
735
|
-
|
737
|
+
var t = TweenLite.delayedCall(0, _pauseCallback, ["{self}", callback, params, scope], this);
|
738
|
+
t.data = "isPause"; // we use this flag in TweenLite's render() method to identify it as a special case that shouldn't be triggered when the virtual playhead is LEAVING the exact position where the pause is, otherwise timeline.addPause(1).play(1) would end up paused on the very next tick.
|
739
|
+
return this.add(t, position);
|
736
740
|
};
|
737
741
|
|
738
742
|
p.removeLabel = function(label) {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* VERSION: 1.
|
3
|
-
* DATE: 2014-
|
2
|
+
* VERSION: 1.15.0
|
3
|
+
* DATE: 2014-12-03
|
4
4
|
* UPDATES AND DOCS AT: http://www.greensock.com
|
5
5
|
*
|
6
6
|
* @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
|
@@ -289,6 +289,7 @@
|
|
289
289
|
_useRAF = (useRAF !== false && _reqAnimFrame),
|
290
290
|
_lagThreshold = 500,
|
291
291
|
_adjustedLag = 33,
|
292
|
+
_tickWord = "tick", //helps reduce gc burden
|
292
293
|
_fps, _req, _id, _gap, _nextTime,
|
293
294
|
_tick = function(manual) {
|
294
295
|
var elapsed = _getTime() - _lastUpdate,
|
@@ -308,7 +309,7 @@
|
|
308
309
|
_id = _req(_tick);
|
309
310
|
}
|
310
311
|
if (dispatch) {
|
311
|
-
_self.dispatchEvent(
|
312
|
+
_self.dispatchEvent(_tickWord);
|
312
313
|
}
|
313
314
|
};
|
314
315
|
|
@@ -910,7 +911,7 @@
|
|
910
911
|
p._firstPT = p._targets = p._overwrittenProps = p._startAt = null;
|
911
912
|
p._notifyPluginsOfEnabled = p._lazy = false;
|
912
913
|
|
913
|
-
TweenLite.version = "1.
|
914
|
+
TweenLite.version = "1.15.0";
|
914
915
|
TweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);
|
915
916
|
TweenLite.defaultOverwrite = "auto";
|
916
917
|
TweenLite.ticker = _ticker;
|
@@ -1277,7 +1278,7 @@
|
|
1277
1278
|
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.
|
1278
1279
|
time = 0;
|
1279
1280
|
}
|
1280
|
-
if (time === 0 || prevRawPrevTime < 0 || prevRawPrevTime === _tinyNum) if (prevRawPrevTime !== time) {
|
1281
|
+
if (time === 0 || prevRawPrevTime < 0 || (prevRawPrevTime === _tinyNum && this.data !== "isPause")) if (prevRawPrevTime !== time) { //note: when this.data is "isPause", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.
|
1281
1282
|
force = true;
|
1282
1283
|
if (prevRawPrevTime > _tinyNum) {
|
1283
1284
|
callback = "onReverseComplete";
|
@@ -1296,7 +1297,7 @@
|
|
1296
1297
|
if (time < 0) {
|
1297
1298
|
this._active = false;
|
1298
1299
|
if (duration === 0) if (this._initted || !this.vars.lazy || force) { //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.
|
1299
|
-
if (prevRawPrevTime >= 0) {
|
1300
|
+
if (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && this.data === "isPause")) {
|
1300
1301
|
force = true;
|
1301
1302
|
}
|
1302
1303
|
this._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === 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.
|
@@ -1397,7 +1398,6 @@
|
|
1397
1398
|
this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray);
|
1398
1399
|
}
|
1399
1400
|
}
|
1400
|
-
|
1401
1401
|
if (callback) if (!this._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate
|
1402
1402
|
if (time < 0 && this._startAt && !this._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.
|
1403
1403
|
this._startAt.render(time, suppressEvents, force);
|
@@ -1557,7 +1557,7 @@
|
|
1557
1557
|
};
|
1558
1558
|
|
1559
1559
|
TweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {
|
1560
|
-
return new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, onCompleteScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, onReverseCompleteScope:scope, immediateRender:false, useFrames:useFrames, overwrite:0});
|
1560
|
+
return new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, onCompleteScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, onReverseCompleteScope:scope, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});
|
1561
1561
|
};
|
1562
1562
|
|
1563
1563
|
TweenLite.set = function(target, vars) {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* VERSION: 1.
|
3
|
-
* DATE: 2014-
|
2
|
+
* VERSION: 1.15.0
|
3
|
+
* DATE: 2014-12-03
|
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
|
@@ -41,7 +41,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
41
41
|
p = TweenMax.prototype = TweenLite.to({}, 0.1, {}),
|
42
42
|
_blankArray = [];
|
43
43
|
|
44
|
-
TweenMax.version = "1.
|
44
|
+
TweenMax.version = "1.15.0";
|
45
45
|
p.constructor = TweenMax;
|
46
46
|
p.kill()._gc = false;
|
47
47
|
TweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf;
|
@@ -77,6 +77,9 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
77
77
|
if (this._initted || immediate) {
|
78
78
|
if (resetDuration) {
|
79
79
|
this._initted = false;
|
80
|
+
if (immediate) {
|
81
|
+
this.render(0, true, true);
|
82
|
+
}
|
80
83
|
} else {
|
81
84
|
if (this._gc) {
|
82
85
|
this._enabled(true, false);
|
@@ -639,14 +642,15 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
639
642
|
return copy;
|
640
643
|
},
|
641
644
|
_pauseCallback = function(tween, callback, params, scope) {
|
642
|
-
var
|
643
|
-
|
644
|
-
|
645
|
+
var tl = tween._timeline,
|
646
|
+
time = tl._totalTime;
|
647
|
+
if ((callback || !this._forcingPlayhead) && tl._rawPrevTime !== tween._startTime) { //if the user calls a method that moves the playhead (like progress() or time()), it should honor that and skip any pauses (although if there's a callback positioned at that pause, it must jump there and make the call to ensure the time is EXACTLY what it is supposed to be, and then proceed to where the playhead is being forced). Otherwise, imagine placing a pause in the middle of a timeline and then doing timeline.progress(0.9) - it would get stuck where the pause is.
|
648
|
+
tl.pause(tween._startTime);
|
645
649
|
if (callback) {
|
646
|
-
callback.apply(scope ||
|
650
|
+
callback.apply(scope || tl, params || _blankArray);
|
647
651
|
}
|
648
652
|
if (this._forcingPlayhead) {
|
649
|
-
|
653
|
+
tl.seek(time);
|
650
654
|
}
|
651
655
|
}
|
652
656
|
},
|
@@ -659,7 +663,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
659
663
|
},
|
660
664
|
p = TimelineLite.prototype = new SimpleTimeline();
|
661
665
|
|
662
|
-
TimelineLite.version = "1.
|
666
|
+
TimelineLite.version = "1.15.0";
|
663
667
|
p.constructor = TimelineLite;
|
664
668
|
p.kill()._gc = p._forcingPlayhead = false;
|
665
669
|
|
@@ -874,7 +878,9 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
874
878
|
};
|
875
879
|
|
876
880
|
p.addPause = function(position, callback, params, scope) {
|
877
|
-
|
881
|
+
var t = TweenLite.delayedCall(0, _pauseCallback, ["{self}", callback, params, scope], this);
|
882
|
+
t.data = "isPause"; // we use this flag in TweenLite's render() method to identify it as a special case that shouldn't be triggered when the virtual playhead is LEAVING the exact position where the pause is, otherwise timeline.addPause(1).play(1) would end up paused on the very next tick.
|
883
|
+
return this.add(t, position);
|
878
884
|
};
|
879
885
|
|
880
886
|
p.removeLabel = function(label) {
|
@@ -1310,7 +1316,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1310
1316
|
|
1311
1317
|
p.constructor = TimelineMax;
|
1312
1318
|
p.kill()._gc = false;
|
1313
|
-
TimelineMax.version = "1.
|
1319
|
+
TimelineMax.version = "1.15.0";
|
1314
1320
|
|
1315
1321
|
p.invalidate = function() {
|
1316
1322
|
this._yoyo = (this.vars.yoyo === true);
|
@@ -1748,6 +1754,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1748
1754
|
_r2 = [],
|
1749
1755
|
_r3 = [],
|
1750
1756
|
_corProps = {},
|
1757
|
+
_globals = _gsScope._gsDefine.globals,
|
1751
1758
|
Segment = function(a, b, c, d) {
|
1752
1759
|
this.a = a;
|
1753
1760
|
this.b = b;
|
@@ -2036,7 +2043,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
2036
2043
|
BezierPlugin = _gsScope._gsDefine.plugin({
|
2037
2044
|
propName: "bezier",
|
2038
2045
|
priority: -1,
|
2039
|
-
version: "1.3.
|
2046
|
+
version: "1.3.4",
|
2040
2047
|
API: 2,
|
2041
2048
|
global:true,
|
2042
2049
|
|
@@ -2228,7 +2235,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
2228
2235
|
};
|
2229
2236
|
|
2230
2237
|
BezierPlugin._cssRegister = function() {
|
2231
|
-
var CSSPlugin =
|
2238
|
+
var CSSPlugin = _globals.CSSPlugin;
|
2232
2239
|
if (!CSSPlugin) {
|
2233
2240
|
return;
|
2234
2241
|
}
|
@@ -2335,6 +2342,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
2335
2342
|
this._overwriteProps.length = 0;
|
2336
2343
|
this.setRatio = CSSPlugin.prototype.setRatio; //speed optimization (avoid prototype lookup on this "hot" method)
|
2337
2344
|
},
|
2345
|
+
_globals = _gsScope._gsDefine.globals,
|
2338
2346
|
_hasPriority, //turns true whenever a CSSPropTween instance is created that has a priority other than 0. This helps us discern whether or not we should spend the time organizing the linked list or not after a CSSPlugin's _onInitTween() method is called.
|
2339
2347
|
_suffixMap, //we set this in _onInitTween() each time as a way to have a persistent variable we can use in other methods like _parse() without having to pass it around as a parameter and we keep _parse() decoupled from a particular CSSPlugin instance
|
2340
2348
|
_cs, //computed style (we store this in a shared variable to conserve memory and make minification tighter
|
@@ -2343,7 +2351,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
2343
2351
|
p = CSSPlugin.prototype = new TweenPlugin("css");
|
2344
2352
|
|
2345
2353
|
p.constructor = CSSPlugin;
|
2346
|
-
CSSPlugin.version = "1.
|
2354
|
+
CSSPlugin.version = "1.15.0";
|
2347
2355
|
CSSPlugin.API = 2;
|
2348
2356
|
CSSPlugin.defaultTransformPerspective = 0;
|
2349
2357
|
CSSPlugin.defaultSkewType = "compensated";
|
@@ -2354,7 +2362,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
2354
2362
|
var _numExp = /(?:\d|\-\d|\.\d|\-\.\d)+/g,
|
2355
2363
|
_relNumExp = /(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g,
|
2356
2364
|
_valuesExp = /(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like "1px 5px 20px rgb(255,102,51)"
|
2357
|
-
_NaNExp = /(?![+-]?\d*\.?\d+|e[+-]\d+)[^0-9]/g, //also allows scientific notation
|
2365
|
+
_NaNExp = /(?![+-]?\d*\.?\d+|[+-]|e[+-]\d+)[^0-9]/g, //also allows scientific notation and doesn't kill the leading -/+ in -= and +=
|
2358
2366
|
_suffixExp = /(?:\d|\-|\+|=|#|\.)*/g,
|
2359
2367
|
_opacityExp = /opacity *= *([^)]*)/i,
|
2360
2368
|
_opacityValExp = /opacity:([^;]*)/i,
|
@@ -2372,8 +2380,11 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
2372
2380
|
_RAD2DEG = 180 / Math.PI,
|
2373
2381
|
_forcePT = {},
|
2374
2382
|
_doc = document,
|
2375
|
-
|
2376
|
-
|
2383
|
+
_createElement = function(type) {
|
2384
|
+
return _doc.createElementNS ? _doc.createElementNS("http://www.w3.org/1999/xhtml", type) : _doc.createElement(type);
|
2385
|
+
},
|
2386
|
+
_tempDiv = _createElement("div"),
|
2387
|
+
_tempImg = _createElement("img"),
|
2377
2388
|
_internals = CSSPlugin._internals = {_specialProps:_specialProps}, //provides a hook to a few internal methods that we need to access from inside other plugins
|
2378
2389
|
_agent = navigator.userAgent,
|
2379
2390
|
_autoRound,
|
@@ -2385,17 +2396,18 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
2385
2396
|
_ieVers,
|
2386
2397
|
_supportsOpacity = (function() { //we set _isSafari, _ieVers, _isFirefox, and _supportsOpacity all in one function here to reduce file size slightly, especially in the minified version.
|
2387
2398
|
var i = _agent.indexOf("Android"),
|
2388
|
-
|
2389
|
-
|
2399
|
+
a = _createElement("a");
|
2390
2400
|
_isSafari = (_agent.indexOf("Safari") !== -1 && _agent.indexOf("Chrome") === -1 && (i === -1 || Number(_agent.substr(i+8, 1)) > 3));
|
2391
2401
|
_isSafariLT6 = (_isSafari && (Number(_agent.substr(_agent.indexOf("Version/")+8, 1)) < 6));
|
2392
2402
|
_isFirefox = (_agent.indexOf("Firefox") !== -1);
|
2393
2403
|
if ((/MSIE ([0-9]{1,}[\.0-9]{0,})/).exec(_agent) || (/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/).exec(_agent)) {
|
2394
2404
|
_ieVers = parseFloat( RegExp.$1 );
|
2395
2405
|
}
|
2396
|
-
|
2397
|
-
|
2398
|
-
|
2406
|
+
if (!a) {
|
2407
|
+
return false;
|
2408
|
+
}
|
2409
|
+
a.style.cssText = "top:1px;opacity:.55;";
|
2410
|
+
return /^0.55/.test(a.style.opacity);
|
2399
2411
|
}()),
|
2400
2412
|
_getIEOpacity = function(v) {
|
2401
2413
|
return (_opacityExp.test( ((typeof(v) === "string") ? v : (v.currentStyle ? v.currentStyle.filter : v.style.filter) || "") ) ? ( parseFloat( RegExp.$1 ) / 100 ) : 1);
|
@@ -3245,7 +3257,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3245
3257
|
if (!_specialProps[p]) {
|
3246
3258
|
var pluginName = p.charAt(0).toUpperCase() + p.substr(1) + "Plugin";
|
3247
3259
|
_registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) {
|
3248
|
-
var pluginClass =
|
3260
|
+
var pluginClass = _globals.com.greensock.plugins[pluginName];
|
3249
3261
|
if (!pluginClass) {
|
3250
3262
|
_log("Error: " + pluginName + " js file not loaded.");
|
3251
3263
|
return pt;
|
@@ -3365,7 +3377,8 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3365
3377
|
_transformOriginProp = _checkPropPrefix("transformOrigin"),
|
3366
3378
|
_supports3D = (_checkPropPrefix("perspective") !== null),
|
3367
3379
|
Transform = _internals.Transform = function() {
|
3368
|
-
this.
|
3380
|
+
this.perspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0;
|
3381
|
+
this.force3D = (CSSPlugin.defaultForce3D === false || !_supports3D) ? false : CSSPlugin.defaultForce3D || "auto";
|
3369
3382
|
},
|
3370
3383
|
_SVGElement = window.SVGElement,
|
3371
3384
|
_useSVGTransformAttr,
|
@@ -3385,14 +3398,14 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3385
3398
|
_forceSVGTransformAttr = (function() {
|
3386
3399
|
//IE and Android stock don't support CSS transforms on SVG elements, so we must write them to the "transform" attribute. We populate this variable in the _parseTransform() method, and only if/when we come across an SVG element
|
3387
3400
|
var force = _ieVers || (/Android/i.test(_agent) && !window.chrome),
|
3388
|
-
svg, rect,
|
3401
|
+
svg, rect, width;
|
3389
3402
|
if (_doc.createElementNS && !force) { //IE8 and earlier doesn't support SVG anyway
|
3390
3403
|
svg = _createSVG("svg", _docElement);
|
3391
3404
|
rect = _createSVG("rect", svg, {width:100, height:50, x:100});
|
3392
|
-
|
3405
|
+
width = rect.getBoundingClientRect().width;
|
3393
3406
|
rect.style[_transformOriginProp] = "50% 50%";
|
3394
|
-
rect.style[_transformProp] = "
|
3395
|
-
force = (
|
3407
|
+
rect.style[_transformProp] = "scaleX(0.5)";
|
3408
|
+
force = (width === rect.getBoundingClientRect().width);
|
3396
3409
|
_docElement.removeChild(svg);
|
3397
3410
|
}
|
3398
3411
|
return force;
|
@@ -3424,7 +3437,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3424
3437
|
minPI = minAngle * _DEG2RAD,
|
3425
3438
|
zOrigin = _supports3D ? parseFloat(_getStyle(t, _transformOriginProp, cs, false, "0 0 0").split(" ")[2]) || tm.zOrigin || 0 : 0,
|
3426
3439
|
defaultTransformPerspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0,
|
3427
|
-
s, m, i, n, dec, scaleX, scaleY, rotation, skewX
|
3440
|
+
isDefault, s, m, i, n, dec, scaleX, scaleY, rotation, skewX;
|
3428
3441
|
if (_transformProp) {
|
3429
3442
|
s = _getStyle(t, _transformPropCSS, cs, true);
|
3430
3443
|
} else if (t.currentStyle) {
|
@@ -3432,9 +3445,18 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3432
3445
|
s = t.currentStyle.filter.match(_ieGetMatrixExp);
|
3433
3446
|
s = (s && s.length === 4) ? [s[0].substr(4), Number(s[2].substr(4)), Number(s[1].substr(4)), s[3].substr(4), (tm.x || 0), (tm.y || 0)].join(",") : "";
|
3434
3447
|
}
|
3435
|
-
|
3436
|
-
|
3437
|
-
|
3448
|
+
isDefault = (!s || s === "none" || s === "matrix(1, 0, 0, 1, 0, 0)");
|
3449
|
+
tm.svg = !!(_SVGElement && typeof(t.getBBox) === "function" && t.getCTM && (!t.parentNode || (t.parentNode.getBBox && t.parentNode.getCTM))); //don't just rely on "instanceof _SVGElement" because if the SVG is embedded via an object tag, it won't work (SVGElement is mapped to a different object)
|
3450
|
+
if (tm.svg) {
|
3451
|
+
_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, _cs, false, "50% 50%") + "", tm);
|
3452
|
+
_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;
|
3453
|
+
m = t.getAttribute("transform");
|
3454
|
+
if (isDefault && m && m.indexOf("matrix") !== -1) { //just in case there's a "transfom" value specified as an attribute instead of CSS style. Only accept a matrix, though.
|
3455
|
+
s = m;
|
3456
|
+
isDefault = 0;
|
3457
|
+
}
|
3458
|
+
}
|
3459
|
+
if (!isDefault) {
|
3438
3460
|
//split the matrix values out into an array (m for matrix)
|
3439
3461
|
m = (s || "").match(/(?:\-|\b)[\d\-\.e]+\b/gi) || [];
|
3440
3462
|
i = m.length;
|
@@ -3455,80 +3477,68 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3455
3477
|
a24 = a23*a34-m[13];
|
3456
3478
|
a34 = a33*a34+tm.zOrigin-m[14];
|
3457
3479
|
}
|
3480
|
+
var a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3],
|
3481
|
+
a12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7],
|
3482
|
+
a43 = m[11],
|
3483
|
+
angle = Math.atan2(a21, a22),
|
3484
|
+
t1, t2, t3, cos, sin;
|
3485
|
+
|
3486
|
+
//rotation
|
3487
|
+
tm.rotation = angle * _RAD2DEG;
|
3488
|
+
if (angle) {
|
3489
|
+
cos = Math.cos(-angle);
|
3490
|
+
sin = Math.sin(-angle);
|
3491
|
+
a11 = a11*cos+a12*sin;
|
3492
|
+
t2 = a21*cos+a22*sin;
|
3493
|
+
a22 = a21*-sin+a22*cos;
|
3494
|
+
a32 = a31*-sin+a32*cos;
|
3495
|
+
a21 = t2;
|
3496
|
+
}
|
3458
3497
|
|
3459
|
-
//
|
3460
|
-
|
3461
|
-
|
3462
|
-
|
3463
|
-
|
3464
|
-
|
3465
|
-
|
3466
|
-
|
3467
|
-
|
3468
|
-
|
3469
|
-
|
3470
|
-
|
3471
|
-
|
3472
|
-
|
3473
|
-
|
3474
|
-
|
3475
|
-
a13 = a12*-sin+a13*cos;
|
3476
|
-
a23 = a22*-sin+a23*cos;
|
3477
|
-
a33 = a32*-sin+a33*cos;
|
3478
|
-
a43 = a42*-sin+a43*cos;
|
3479
|
-
a12 = t1;
|
3480
|
-
a22 = t2;
|
3481
|
-
a32 = t3;
|
3482
|
-
}
|
3483
|
-
//rotationY
|
3484
|
-
angle = Math.atan2(a13, a11);
|
3485
|
-
tm.rotationY = angle * _RAD2DEG;
|
3486
|
-
if (angle) {
|
3487
|
-
yFlip = (angle < -minPI || angle > minPI);
|
3488
|
-
cos = Math.cos(-angle);
|
3489
|
-
sin = Math.sin(-angle);
|
3490
|
-
t1 = a11*cos-a13*sin;
|
3491
|
-
t2 = a21*cos-a23*sin;
|
3492
|
-
t3 = a31*cos-a33*sin;
|
3493
|
-
a23 = a21*sin+a23*cos;
|
3494
|
-
a33 = a31*sin+a33*cos;
|
3495
|
-
a43 = a41*sin+a43*cos;
|
3496
|
-
a11 = t1;
|
3497
|
-
a21 = t2;
|
3498
|
-
a31 = t3;
|
3499
|
-
}
|
3500
|
-
//rotationZ
|
3501
|
-
angle = Math.atan2(a21, a22);
|
3502
|
-
tm.rotation = angle * _RAD2DEG;
|
3503
|
-
if (angle) {
|
3504
|
-
zFlip = (angle < -minPI || angle > minPI);
|
3505
|
-
cos = Math.cos(-angle);
|
3506
|
-
sin = Math.sin(-angle);
|
3507
|
-
a11 = a11*cos+a12*sin;
|
3508
|
-
t2 = a21*cos+a22*sin;
|
3509
|
-
a22 = a21*-sin+a22*cos;
|
3510
|
-
a32 = a31*-sin+a32*cos;
|
3511
|
-
a21 = t2;
|
3512
|
-
}
|
3513
|
-
|
3514
|
-
if (zFlip && xFlip) {
|
3515
|
-
tm.rotation = tm.rotationX = 0;
|
3516
|
-
} else if (zFlip && yFlip) {
|
3517
|
-
tm.rotation = tm.rotationY = 0;
|
3518
|
-
} else if (yFlip && xFlip) {
|
3519
|
-
tm.rotationY = tm.rotationX = 0;
|
3520
|
-
}
|
3498
|
+
//rotationY
|
3499
|
+
angle = Math.atan2(a13, a11);
|
3500
|
+
tm.rotationY = angle * _RAD2DEG;
|
3501
|
+
if (angle) {
|
3502
|
+
cos = Math.cos(-angle);
|
3503
|
+
sin = Math.sin(-angle);
|
3504
|
+
t1 = a11*cos-a13*sin;
|
3505
|
+
t2 = a21*cos-a23*sin;
|
3506
|
+
t3 = a31*cos-a33*sin;
|
3507
|
+
a23 = a21*sin+a23*cos;
|
3508
|
+
a33 = a31*sin+a33*cos;
|
3509
|
+
a43 = a41*sin+a43*cos;
|
3510
|
+
a11 = t1;
|
3511
|
+
a21 = t2;
|
3512
|
+
a31 = t3;
|
3513
|
+
}
|
3521
3514
|
|
3522
|
-
|
3523
|
-
|
3524
|
-
|
3525
|
-
|
3526
|
-
|
3527
|
-
|
3528
|
-
|
3529
|
-
|
3515
|
+
//rotationX
|
3516
|
+
angle = Math.atan2(a32, a33);
|
3517
|
+
tm.rotationX = angle * _RAD2DEG;
|
3518
|
+
if (angle) {
|
3519
|
+
cos = Math.cos(-angle);
|
3520
|
+
sin = Math.sin(-angle);
|
3521
|
+
t1 = a12*cos+a13*sin;
|
3522
|
+
t2 = a22*cos+a23*sin;
|
3523
|
+
t3 = a32*cos+a33*sin;
|
3524
|
+
a13 = a12*-sin+a13*cos;
|
3525
|
+
a23 = a22*-sin+a23*cos;
|
3526
|
+
a33 = a32*-sin+a33*cos;
|
3527
|
+
a43 = a42*-sin+a43*cos;
|
3528
|
+
a12 = t1;
|
3529
|
+
a22 = t2;
|
3530
|
+
a32 = t3;
|
3530
3531
|
}
|
3531
3532
|
|
3533
|
+
tm.scaleX = ((Math.sqrt(a11 * a11 + a21 * a21) * rnd + 0.5) | 0) / rnd;
|
3534
|
+
tm.scaleY = ((Math.sqrt(a22 * a22 + a23 * a23) * rnd + 0.5) | 0) / rnd;
|
3535
|
+
tm.scaleZ = ((Math.sqrt(a32 * a32 + a33 * a33) * rnd + 0.5) | 0) / rnd;
|
3536
|
+
tm.skewX = 0;
|
3537
|
+
tm.perspective = a43 ? 1 / ((a43 < 0) ? -a43 : a43) : 0;
|
3538
|
+
tm.x = a14;
|
3539
|
+
tm.y = a24;
|
3540
|
+
tm.z = a34;
|
3541
|
+
|
3532
3542
|
} else if ((!_supports3D || parse || !m.length || tm.x !== m[4] || tm.y !== m[5] || (!tm.rotationX && !tm.rotationY)) && !(tm.x !== undefined && _getStyle(t, "display", cs) === "none")) { //sometimes a 6-element matrix is returned even when we performed 3D transforms, like if rotationX and rotationY are 180. In cases like this, we still need to honor the 3D transforms. If we just rely on the 2D info, it could affect how the data is interpreted, like scaleY might get set to -1 or rotation could get offset by 180 degrees. For example, do a TweenLite.to(element, 1, {css:{rotationX:180, rotationY:180}}) and then later, TweenLite.to(element, 1, {css:{rotationX:0}}) and without this conditional logic in place, it'd jump to a state of being unrotated when the 2nd tween starts. Then again, we need to honor the fact that the user COULD alter the transforms outside of CSSPlugin, like by manually applying new css, so we try to sense that by looking at x and y because if those changed, we know the changes were made outside CSSPlugin and we force a reinterpretation of the matrix values. Also, in Webkit browsers, if the element's "display" is "none", its calculated style value will always return empty, so if we've already recorded the values in the _gsTransform object, we'll just rely on those.
|
3533
3543
|
var k = (m.length >= 6),
|
3534
3544
|
a = k ? m[0] : 1,
|
@@ -3541,8 +3551,6 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3541
3551
|
scaleY = Math.sqrt(d * d + c * c);
|
3542
3552
|
rotation = (a || b) ? Math.atan2(b, a) * _RAD2DEG : tm.rotation || 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).
|
3543
3553
|
skewX = (c || d) ? Math.atan2(c, d) * _RAD2DEG + rotation : tm.skewX || 0;
|
3544
|
-
difX = scaleX - Math.abs(tm.scaleX || 0);
|
3545
|
-
difY = scaleY - Math.abs(tm.scaleY || 0);
|
3546
3554
|
if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {
|
3547
3555
|
if (invX) {
|
3548
3556
|
scaleX *= -1;
|
@@ -3553,15 +3561,10 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3553
3561
|
skewX += (skewX <= 0) ? 180 : -180;
|
3554
3562
|
}
|
3555
3563
|
}
|
3556
|
-
|
3557
|
-
|
3558
|
-
|
3559
|
-
|
3560
|
-
tm.scaleX = scaleX;
|
3561
|
-
tm.scaleY = scaleY;
|
3562
|
-
tm.rotation = rotation;
|
3563
|
-
tm.skewX = skewX;
|
3564
|
-
}
|
3564
|
+
tm.scaleX = scaleX;
|
3565
|
+
tm.scaleY = scaleY;
|
3566
|
+
tm.rotation = rotation;
|
3567
|
+
tm.skewX = skewX;
|
3565
3568
|
if (_supports3D) {
|
3566
3569
|
tm.rotationX = tm.rotationY = tm.z = 0;
|
3567
3570
|
tm.perspective = defaultTransformPerspective;
|
@@ -3569,7 +3572,6 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3569
3572
|
}
|
3570
3573
|
}
|
3571
3574
|
tm.zOrigin = zOrigin;
|
3572
|
-
|
3573
3575
|
//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the "e-" towards the end) and would render the object slightly off. So we round to 0 in these cases. The conditional logic here is faster than calling Math.abs(). Also, browsers tend to render a SLIGHTLY rotated object in a fuzzy way, so we need to snap to exactly 0 when appropriate.
|
3574
3576
|
for (i in tm) {
|
3575
3577
|
if (tm[i] < min) if (tm[i] > -min) {
|
@@ -3581,12 +3583,6 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3581
3583
|
if (rec) {
|
3582
3584
|
t._gsTransform = tm; //record to the object's _gsTransform which we use so that tweens can control individual properties independently (we need all the properties to accurately recompose the matrix in the setRatio() method)
|
3583
3585
|
}
|
3584
|
-
tm.svg = (_SVGElement && (t instanceof _SVGElement) && (t.parentNode instanceof _SVGElement));
|
3585
|
-
if (tm.svg) {
|
3586
|
-
_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, _cs, false, "50% 50%") + "", tm);
|
3587
|
-
_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;
|
3588
|
-
}
|
3589
|
-
tm.xPercent = tm.yPercent = 0;
|
3590
3586
|
return tm;
|
3591
3587
|
},
|
3592
3588
|
|
@@ -3681,7 +3677,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3681
3677
|
z = t.z,
|
3682
3678
|
perspective = t.perspective,
|
3683
3679
|
a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43,
|
3684
|
-
zOrigin, rnd, cos, sin, t1, t2, t3, t4;
|
3680
|
+
zOrigin, rnd, cos, sin, t1, t2, t3, t4, transform, comma;
|
3685
3681
|
if (v === 1 || v === 0) if (t.force3D === "auto") if (!t.rotationY && !t.rotationX && sz === 1 && !perspective && !z) { //on the final render (which could be 0 for a from tween), if there are no 3D aspects, render in 2D to free up memory and improve performance especially on mobile devices
|
3686
3682
|
_set2DTransformRatio.call(this, v);
|
3687
3683
|
return;
|
@@ -3729,6 +3725,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3729
3725
|
a43 = (perspective) ? -1 / perspective : 0;
|
3730
3726
|
zOrigin = t.zOrigin;
|
3731
3727
|
rnd = 100000;
|
3728
|
+
comma = ",";
|
3732
3729
|
angle = t.rotationY * _DEG2RAD;
|
3733
3730
|
if (angle) {
|
3734
3731
|
cos = Math.cos(angle);
|
@@ -3791,7 +3788,17 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3791
3788
|
a14 = (t1 = (a14 += x) - (a14 |= 0)) ? ((t1 * rnd + (t1 < 0 ? -0.5 : 0.5)) | 0) / rnd + a14 : a14;
|
3792
3789
|
a24 = (t1 = (a24 += y) - (a24 |= 0)) ? ((t1 * rnd + (t1 < 0 ? -0.5 : 0.5)) | 0) / rnd + a24 : a24;
|
3793
3790
|
a34 = (t1 = (a34 += z) - (a34 |= 0)) ? ((t1 * rnd + (t1 < 0 ? -0.5 : 0.5)) | 0) / rnd + a34 : a34;
|
3794
|
-
|
3791
|
+
|
3792
|
+
//optimized way of concatenating all the values into a string. If we do it all in one shot, it's slower because of the way browsers have to create temp strings and the way it affects memory. If we do it piece-by-piece with +=, it's a bit slower too. We found that doing it in these sized chunks works best overall:
|
3793
|
+
transform = ((t.xPercent || t.yPercent) ? "translate(" + t.xPercent + "%," + t.yPercent + "%) matrix3d(" : "matrix3d(");
|
3794
|
+
transform += ((a11 * rnd) | 0) / rnd + comma + ((a21 * rnd) | 0) / rnd + comma + ((a31 * rnd) | 0) / rnd;
|
3795
|
+
transform += comma + ((a41 * rnd) | 0) / rnd + comma + ((a12 * rnd) | 0) / rnd + comma + ((a22 * rnd) | 0) / rnd;
|
3796
|
+
transform += comma + ((a32 * rnd) | 0) / rnd + comma + ((a42 * rnd) | 0) / rnd + comma + ((a13 * rnd) | 0) / rnd;
|
3797
|
+
transform += comma + ((a23 * rnd) | 0) / rnd + comma + ((a33 * rnd) | 0) / rnd + comma + ((a43 * rnd) | 0) / rnd;
|
3798
|
+
transform += comma + a14 + comma + a24 + comma + a34 + comma + (perspective ? (1 + (-a34 / perspective)) : 1) + ")";
|
3799
|
+
style[_transformProp] = transform;
|
3800
|
+
|
3801
|
+
//OLD (slower on most devices): style[_transformProp] = ((t.xPercent || t.yPercent) ? "translate(" + t.xPercent + "%," + t.yPercent + "%) matrix3d(" : "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(",") + ")";
|
3795
3802
|
},
|
3796
3803
|
|
3797
3804
|
_set2DTransformRatio = _internals.set2DTransformRatio = function(v) {
|
@@ -3839,8 +3846,13 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
3839
3846
|
}
|
3840
3847
|
};
|
3841
3848
|
|
3849
|
+
p = Transform.prototype;
|
3850
|
+
p.x = p.y = p.z = p.skewX = p.skewY = p.rotation = p.rotationX = p.rotationY = p.zOrigin = p.xPercent = p.yPercent = 0;
|
3851
|
+
p.scaleX = p.scaleY = p.scaleZ = 1;
|
3852
|
+
|
3842
3853
|
_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,xPercent,yPercent", {parser:function(t, e, p, cssp, pt, plugin, vars) {
|
3843
|
-
if (cssp.
|
3854
|
+
if (cssp._lastParsedTransform === vars) { return pt; } //only need to parse the transform once, and only if the browser supports it.
|
3855
|
+
cssp._lastParsedTransform = vars;
|
3844
3856
|
var m1 = cssp._transform = _getTransform(t, _cs, true, vars.parseTransform),
|
3845
3857
|
style = t.style,
|
3846
3858
|
min = 0.000001,
|
@@ -4274,7 +4286,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
4274
4286
|
|
4275
4287
|
|
4276
4288
|
p = CSSPlugin.prototype;
|
4277
|
-
p._firstPT = null;
|
4289
|
+
p._firstPT = p._lastParsedTransform = p._transform = null;
|
4278
4290
|
|
4279
4291
|
//gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc.
|
4280
4292
|
p._onInitTween = function(target, vars, tween) {
|
@@ -5554,6 +5566,7 @@ if (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case Tween
|
|
5554
5566
|
_useRAF = (useRAF !== false && _reqAnimFrame),
|
5555
5567
|
_lagThreshold = 500,
|
5556
5568
|
_adjustedLag = 33,
|
5569
|
+
_tickWord = "tick", //helps reduce gc burden
|
5557
5570
|
_fps, _req, _id, _gap, _nextTime,
|
5558
5571
|
_tick = function(manual) {
|
5559
5572
|
var elapsed = _getTime() - _lastUpdate,
|
@@ -5573,7 +5586,7 @@ if (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case Tween
|
|
5573
5586
|
_id = _req(_tick);
|
5574
5587
|
}
|
5575
5588
|
if (dispatch) {
|
5576
|
-
_self.dispatchEvent(
|
5589
|
+
_self.dispatchEvent(_tickWord);
|
5577
5590
|
}
|
5578
5591
|
};
|
5579
5592
|
|
@@ -6175,7 +6188,7 @@ if (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case Tween
|
|
6175
6188
|
p._firstPT = p._targets = p._overwrittenProps = p._startAt = null;
|
6176
6189
|
p._notifyPluginsOfEnabled = p._lazy = false;
|
6177
6190
|
|
6178
|
-
TweenLite.version = "1.
|
6191
|
+
TweenLite.version = "1.15.0";
|
6179
6192
|
TweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);
|
6180
6193
|
TweenLite.defaultOverwrite = "auto";
|
6181
6194
|
TweenLite.ticker = _ticker;
|
@@ -6542,7 +6555,7 @@ if (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case Tween
|
|
6542
6555
|
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.
|
6543
6556
|
time = 0;
|
6544
6557
|
}
|
6545
|
-
if (time === 0 || prevRawPrevTime < 0 || prevRawPrevTime === _tinyNum) if (prevRawPrevTime !== time) {
|
6558
|
+
if (time === 0 || prevRawPrevTime < 0 || (prevRawPrevTime === _tinyNum && this.data !== "isPause")) if (prevRawPrevTime !== time) { //note: when this.data is "isPause", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.
|
6546
6559
|
force = true;
|
6547
6560
|
if (prevRawPrevTime > _tinyNum) {
|
6548
6561
|
callback = "onReverseComplete";
|
@@ -6561,7 +6574,7 @@ if (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case Tween
|
|
6561
6574
|
if (time < 0) {
|
6562
6575
|
this._active = false;
|
6563
6576
|
if (duration === 0) if (this._initted || !this.vars.lazy || force) { //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.
|
6564
|
-
if (prevRawPrevTime >= 0) {
|
6577
|
+
if (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && this.data === "isPause")) {
|
6565
6578
|
force = true;
|
6566
6579
|
}
|
6567
6580
|
this._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === 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.
|
@@ -6662,7 +6675,6 @@ if (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case Tween
|
|
6662
6675
|
this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray);
|
6663
6676
|
}
|
6664
6677
|
}
|
6665
|
-
|
6666
6678
|
if (callback) if (!this._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate
|
6667
6679
|
if (time < 0 && this._startAt && !this._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.
|
6668
6680
|
this._startAt.render(time, suppressEvents, force);
|
@@ -6822,7 +6834,7 @@ if (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case Tween
|
|
6822
6834
|
};
|
6823
6835
|
|
6824
6836
|
TweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {
|
6825
|
-
return new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, onCompleteScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, onReverseCompleteScope:scope, immediateRender:false, useFrames:useFrames, overwrite:0});
|
6837
|
+
return new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, onCompleteScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, onReverseCompleteScope:scope, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});
|
6826
6838
|
};
|
6827
6839
|
|
6828
6840
|
TweenLite.set = function(target, vars) {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* VERSION: beta 1.3.
|
3
|
-
* DATE: 2014-
|
2
|
+
* VERSION: beta 1.3.4
|
3
|
+
* DATE: 2014-11-15
|
4
4
|
* UPDATES AND DOCS AT: http://www.greensock.com
|
5
5
|
*
|
6
6
|
* @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
|
@@ -19,6 +19,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
19
19
|
_r2 = [],
|
20
20
|
_r3 = [],
|
21
21
|
_corProps = {},
|
22
|
+
_globals = _gsScope._gsDefine.globals,
|
22
23
|
Segment = function(a, b, c, d) {
|
23
24
|
this.a = a;
|
24
25
|
this.b = b;
|
@@ -307,7 +308,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
307
308
|
BezierPlugin = _gsScope._gsDefine.plugin({
|
308
309
|
propName: "bezier",
|
309
310
|
priority: -1,
|
310
|
-
version: "1.3.
|
311
|
+
version: "1.3.4",
|
311
312
|
API: 2,
|
312
313
|
global:true,
|
313
314
|
|
@@ -499,7 +500,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
499
500
|
};
|
500
501
|
|
501
502
|
BezierPlugin._cssRegister = function() {
|
502
|
-
var CSSPlugin =
|
503
|
+
var CSSPlugin = _globals.CSSPlugin;
|
503
504
|
if (!CSSPlugin) {
|
504
505
|
return;
|
505
506
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* VERSION: 1.
|
3
|
-
* DATE: 2014-
|
2
|
+
* VERSION: 1.15.0
|
3
|
+
* DATE: 2014-12-03
|
4
4
|
* UPDATES AND DOCS AT: http://www.greensock.com
|
5
5
|
*
|
6
6
|
* @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
|
@@ -22,6 +22,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
22
22
|
this._overwriteProps.length = 0;
|
23
23
|
this.setRatio = CSSPlugin.prototype.setRatio; //speed optimization (avoid prototype lookup on this "hot" method)
|
24
24
|
},
|
25
|
+
_globals = _gsScope._gsDefine.globals,
|
25
26
|
_hasPriority, //turns true whenever a CSSPropTween instance is created that has a priority other than 0. This helps us discern whether or not we should spend the time organizing the linked list or not after a CSSPlugin's _onInitTween() method is called.
|
26
27
|
_suffixMap, //we set this in _onInitTween() each time as a way to have a persistent variable we can use in other methods like _parse() without having to pass it around as a parameter and we keep _parse() decoupled from a particular CSSPlugin instance
|
27
28
|
_cs, //computed style (we store this in a shared variable to conserve memory and make minification tighter
|
@@ -30,7 +31,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
30
31
|
p = CSSPlugin.prototype = new TweenPlugin("css");
|
31
32
|
|
32
33
|
p.constructor = CSSPlugin;
|
33
|
-
CSSPlugin.version = "1.
|
34
|
+
CSSPlugin.version = "1.15.0";
|
34
35
|
CSSPlugin.API = 2;
|
35
36
|
CSSPlugin.defaultTransformPerspective = 0;
|
36
37
|
CSSPlugin.defaultSkewType = "compensated";
|
@@ -41,7 +42,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
41
42
|
var _numExp = /(?:\d|\-\d|\.\d|\-\.\d)+/g,
|
42
43
|
_relNumExp = /(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g,
|
43
44
|
_valuesExp = /(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like "1px 5px 20px rgb(255,102,51)"
|
44
|
-
_NaNExp = /(?![+-]?\d*\.?\d+|e[+-]\d+)[^0-9]/g, //also allows scientific notation
|
45
|
+
_NaNExp = /(?![+-]?\d*\.?\d+|[+-]|e[+-]\d+)[^0-9]/g, //also allows scientific notation and doesn't kill the leading -/+ in -= and +=
|
45
46
|
_suffixExp = /(?:\d|\-|\+|=|#|\.)*/g,
|
46
47
|
_opacityExp = /opacity *= *([^)]*)/i,
|
47
48
|
_opacityValExp = /opacity:([^;]*)/i,
|
@@ -59,8 +60,11 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
59
60
|
_RAD2DEG = 180 / Math.PI,
|
60
61
|
_forcePT = {},
|
61
62
|
_doc = document,
|
62
|
-
|
63
|
-
|
63
|
+
_createElement = function(type) {
|
64
|
+
return _doc.createElementNS ? _doc.createElementNS("http://www.w3.org/1999/xhtml", type) : _doc.createElement(type);
|
65
|
+
},
|
66
|
+
_tempDiv = _createElement("div"),
|
67
|
+
_tempImg = _createElement("img"),
|
64
68
|
_internals = CSSPlugin._internals = {_specialProps:_specialProps}, //provides a hook to a few internal methods that we need to access from inside other plugins
|
65
69
|
_agent = navigator.userAgent,
|
66
70
|
_autoRound,
|
@@ -72,17 +76,18 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
72
76
|
_ieVers,
|
73
77
|
_supportsOpacity = (function() { //we set _isSafari, _ieVers, _isFirefox, and _supportsOpacity all in one function here to reduce file size slightly, especially in the minified version.
|
74
78
|
var i = _agent.indexOf("Android"),
|
75
|
-
|
76
|
-
|
79
|
+
a = _createElement("a");
|
77
80
|
_isSafari = (_agent.indexOf("Safari") !== -1 && _agent.indexOf("Chrome") === -1 && (i === -1 || Number(_agent.substr(i+8, 1)) > 3));
|
78
81
|
_isSafariLT6 = (_isSafari && (Number(_agent.substr(_agent.indexOf("Version/")+8, 1)) < 6));
|
79
82
|
_isFirefox = (_agent.indexOf("Firefox") !== -1);
|
80
83
|
if ((/MSIE ([0-9]{1,}[\.0-9]{0,})/).exec(_agent) || (/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/).exec(_agent)) {
|
81
84
|
_ieVers = parseFloat( RegExp.$1 );
|
82
85
|
}
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
+
if (!a) {
|
87
|
+
return false;
|
88
|
+
}
|
89
|
+
a.style.cssText = "top:1px;opacity:.55;";
|
90
|
+
return /^0.55/.test(a.style.opacity);
|
86
91
|
}()),
|
87
92
|
_getIEOpacity = function(v) {
|
88
93
|
return (_opacityExp.test( ((typeof(v) === "string") ? v : (v.currentStyle ? v.currentStyle.filter : v.style.filter) || "") ) ? ( parseFloat( RegExp.$1 ) / 100 ) : 1);
|
@@ -932,7 +937,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
932
937
|
if (!_specialProps[p]) {
|
933
938
|
var pluginName = p.charAt(0).toUpperCase() + p.substr(1) + "Plugin";
|
934
939
|
_registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) {
|
935
|
-
var pluginClass =
|
940
|
+
var pluginClass = _globals.com.greensock.plugins[pluginName];
|
936
941
|
if (!pluginClass) {
|
937
942
|
_log("Error: " + pluginName + " js file not loaded.");
|
938
943
|
return pt;
|
@@ -1052,7 +1057,8 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1052
1057
|
_transformOriginProp = _checkPropPrefix("transformOrigin"),
|
1053
1058
|
_supports3D = (_checkPropPrefix("perspective") !== null),
|
1054
1059
|
Transform = _internals.Transform = function() {
|
1055
|
-
this.
|
1060
|
+
this.perspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0;
|
1061
|
+
this.force3D = (CSSPlugin.defaultForce3D === false || !_supports3D) ? false : CSSPlugin.defaultForce3D || "auto";
|
1056
1062
|
},
|
1057
1063
|
_SVGElement = window.SVGElement,
|
1058
1064
|
_useSVGTransformAttr,
|
@@ -1072,14 +1078,14 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1072
1078
|
_forceSVGTransformAttr = (function() {
|
1073
1079
|
//IE and Android stock don't support CSS transforms on SVG elements, so we must write them to the "transform" attribute. We populate this variable in the _parseTransform() method, and only if/when we come across an SVG element
|
1074
1080
|
var force = _ieVers || (/Android/i.test(_agent) && !window.chrome),
|
1075
|
-
svg, rect,
|
1081
|
+
svg, rect, width;
|
1076
1082
|
if (_doc.createElementNS && !force) { //IE8 and earlier doesn't support SVG anyway
|
1077
1083
|
svg = _createSVG("svg", _docElement);
|
1078
1084
|
rect = _createSVG("rect", svg, {width:100, height:50, x:100});
|
1079
|
-
|
1085
|
+
width = rect.getBoundingClientRect().width;
|
1080
1086
|
rect.style[_transformOriginProp] = "50% 50%";
|
1081
|
-
rect.style[_transformProp] = "
|
1082
|
-
force = (
|
1087
|
+
rect.style[_transformProp] = "scaleX(0.5)";
|
1088
|
+
force = (width === rect.getBoundingClientRect().width);
|
1083
1089
|
_docElement.removeChild(svg);
|
1084
1090
|
}
|
1085
1091
|
return force;
|
@@ -1111,7 +1117,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1111
1117
|
minPI = minAngle * _DEG2RAD,
|
1112
1118
|
zOrigin = _supports3D ? parseFloat(_getStyle(t, _transformOriginProp, cs, false, "0 0 0").split(" ")[2]) || tm.zOrigin || 0 : 0,
|
1113
1119
|
defaultTransformPerspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0,
|
1114
|
-
s, m, i, n, dec, scaleX, scaleY, rotation, skewX
|
1120
|
+
isDefault, s, m, i, n, dec, scaleX, scaleY, rotation, skewX;
|
1115
1121
|
if (_transformProp) {
|
1116
1122
|
s = _getStyle(t, _transformPropCSS, cs, true);
|
1117
1123
|
} else if (t.currentStyle) {
|
@@ -1119,9 +1125,18 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1119
1125
|
s = t.currentStyle.filter.match(_ieGetMatrixExp);
|
1120
1126
|
s = (s && s.length === 4) ? [s[0].substr(4), Number(s[2].substr(4)), Number(s[1].substr(4)), s[3].substr(4), (tm.x || 0), (tm.y || 0)].join(",") : "";
|
1121
1127
|
}
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1128
|
+
isDefault = (!s || s === "none" || s === "matrix(1, 0, 0, 1, 0, 0)");
|
1129
|
+
tm.svg = !!(_SVGElement && typeof(t.getBBox) === "function" && t.getCTM && (!t.parentNode || (t.parentNode.getBBox && t.parentNode.getCTM))); //don't just rely on "instanceof _SVGElement" because if the SVG is embedded via an object tag, it won't work (SVGElement is mapped to a different object)
|
1130
|
+
if (tm.svg) {
|
1131
|
+
_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, _cs, false, "50% 50%") + "", tm);
|
1132
|
+
_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;
|
1133
|
+
m = t.getAttribute("transform");
|
1134
|
+
if (isDefault && m && m.indexOf("matrix") !== -1) { //just in case there's a "transfom" value specified as an attribute instead of CSS style. Only accept a matrix, though.
|
1135
|
+
s = m;
|
1136
|
+
isDefault = 0;
|
1137
|
+
}
|
1138
|
+
}
|
1139
|
+
if (!isDefault) {
|
1125
1140
|
//split the matrix values out into an array (m for matrix)
|
1126
1141
|
m = (s || "").match(/(?:\-|\b)[\d\-\.e]+\b/gi) || [];
|
1127
1142
|
i = m.length;
|
@@ -1142,80 +1157,68 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1142
1157
|
a24 = a23*a34-m[13];
|
1143
1158
|
a34 = a33*a34+tm.zOrigin-m[14];
|
1144
1159
|
}
|
1160
|
+
var a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3],
|
1161
|
+
a12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7],
|
1162
|
+
a43 = m[11],
|
1163
|
+
angle = Math.atan2(a21, a22),
|
1164
|
+
t1, t2, t3, cos, sin;
|
1165
|
+
|
1166
|
+
//rotation
|
1167
|
+
tm.rotation = angle * _RAD2DEG;
|
1168
|
+
if (angle) {
|
1169
|
+
cos = Math.cos(-angle);
|
1170
|
+
sin = Math.sin(-angle);
|
1171
|
+
a11 = a11*cos+a12*sin;
|
1172
|
+
t2 = a21*cos+a22*sin;
|
1173
|
+
a22 = a21*-sin+a22*cos;
|
1174
|
+
a32 = a31*-sin+a32*cos;
|
1175
|
+
a21 = t2;
|
1176
|
+
}
|
1145
1177
|
|
1146
|
-
//
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
a13 = a12*-sin+a13*cos;
|
1163
|
-
a23 = a22*-sin+a23*cos;
|
1164
|
-
a33 = a32*-sin+a33*cos;
|
1165
|
-
a43 = a42*-sin+a43*cos;
|
1166
|
-
a12 = t1;
|
1167
|
-
a22 = t2;
|
1168
|
-
a32 = t3;
|
1169
|
-
}
|
1170
|
-
//rotationY
|
1171
|
-
angle = Math.atan2(a13, a11);
|
1172
|
-
tm.rotationY = angle * _RAD2DEG;
|
1173
|
-
if (angle) {
|
1174
|
-
yFlip = (angle < -minPI || angle > minPI);
|
1175
|
-
cos = Math.cos(-angle);
|
1176
|
-
sin = Math.sin(-angle);
|
1177
|
-
t1 = a11*cos-a13*sin;
|
1178
|
-
t2 = a21*cos-a23*sin;
|
1179
|
-
t3 = a31*cos-a33*sin;
|
1180
|
-
a23 = a21*sin+a23*cos;
|
1181
|
-
a33 = a31*sin+a33*cos;
|
1182
|
-
a43 = a41*sin+a43*cos;
|
1183
|
-
a11 = t1;
|
1184
|
-
a21 = t2;
|
1185
|
-
a31 = t3;
|
1186
|
-
}
|
1187
|
-
//rotationZ
|
1188
|
-
angle = Math.atan2(a21, a22);
|
1189
|
-
tm.rotation = angle * _RAD2DEG;
|
1190
|
-
if (angle) {
|
1191
|
-
zFlip = (angle < -minPI || angle > minPI);
|
1192
|
-
cos = Math.cos(-angle);
|
1193
|
-
sin = Math.sin(-angle);
|
1194
|
-
a11 = a11*cos+a12*sin;
|
1195
|
-
t2 = a21*cos+a22*sin;
|
1196
|
-
a22 = a21*-sin+a22*cos;
|
1197
|
-
a32 = a31*-sin+a32*cos;
|
1198
|
-
a21 = t2;
|
1199
|
-
}
|
1200
|
-
|
1201
|
-
if (zFlip && xFlip) {
|
1202
|
-
tm.rotation = tm.rotationX = 0;
|
1203
|
-
} else if (zFlip && yFlip) {
|
1204
|
-
tm.rotation = tm.rotationY = 0;
|
1205
|
-
} else if (yFlip && xFlip) {
|
1206
|
-
tm.rotationY = tm.rotationX = 0;
|
1207
|
-
}
|
1178
|
+
//rotationY
|
1179
|
+
angle = Math.atan2(a13, a11);
|
1180
|
+
tm.rotationY = angle * _RAD2DEG;
|
1181
|
+
if (angle) {
|
1182
|
+
cos = Math.cos(-angle);
|
1183
|
+
sin = Math.sin(-angle);
|
1184
|
+
t1 = a11*cos-a13*sin;
|
1185
|
+
t2 = a21*cos-a23*sin;
|
1186
|
+
t3 = a31*cos-a33*sin;
|
1187
|
+
a23 = a21*sin+a23*cos;
|
1188
|
+
a33 = a31*sin+a33*cos;
|
1189
|
+
a43 = a41*sin+a43*cos;
|
1190
|
+
a11 = t1;
|
1191
|
+
a21 = t2;
|
1192
|
+
a31 = t3;
|
1193
|
+
}
|
1208
1194
|
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1195
|
+
//rotationX
|
1196
|
+
angle = Math.atan2(a32, a33);
|
1197
|
+
tm.rotationX = angle * _RAD2DEG;
|
1198
|
+
if (angle) {
|
1199
|
+
cos = Math.cos(-angle);
|
1200
|
+
sin = Math.sin(-angle);
|
1201
|
+
t1 = a12*cos+a13*sin;
|
1202
|
+
t2 = a22*cos+a23*sin;
|
1203
|
+
t3 = a32*cos+a33*sin;
|
1204
|
+
a13 = a12*-sin+a13*cos;
|
1205
|
+
a23 = a22*-sin+a23*cos;
|
1206
|
+
a33 = a32*-sin+a33*cos;
|
1207
|
+
a43 = a42*-sin+a43*cos;
|
1208
|
+
a12 = t1;
|
1209
|
+
a22 = t2;
|
1210
|
+
a32 = t3;
|
1217
1211
|
}
|
1218
1212
|
|
1213
|
+
tm.scaleX = ((Math.sqrt(a11 * a11 + a21 * a21) * rnd + 0.5) | 0) / rnd;
|
1214
|
+
tm.scaleY = ((Math.sqrt(a22 * a22 + a23 * a23) * rnd + 0.5) | 0) / rnd;
|
1215
|
+
tm.scaleZ = ((Math.sqrt(a32 * a32 + a33 * a33) * rnd + 0.5) | 0) / rnd;
|
1216
|
+
tm.skewX = 0;
|
1217
|
+
tm.perspective = a43 ? 1 / ((a43 < 0) ? -a43 : a43) : 0;
|
1218
|
+
tm.x = a14;
|
1219
|
+
tm.y = a24;
|
1220
|
+
tm.z = a34;
|
1221
|
+
|
1219
1222
|
} else if ((!_supports3D || parse || !m.length || tm.x !== m[4] || tm.y !== m[5] || (!tm.rotationX && !tm.rotationY)) && !(tm.x !== undefined && _getStyle(t, "display", cs) === "none")) { //sometimes a 6-element matrix is returned even when we performed 3D transforms, like if rotationX and rotationY are 180. In cases like this, we still need to honor the 3D transforms. If we just rely on the 2D info, it could affect how the data is interpreted, like scaleY might get set to -1 or rotation could get offset by 180 degrees. For example, do a TweenLite.to(element, 1, {css:{rotationX:180, rotationY:180}}) and then later, TweenLite.to(element, 1, {css:{rotationX:0}}) and without this conditional logic in place, it'd jump to a state of being unrotated when the 2nd tween starts. Then again, we need to honor the fact that the user COULD alter the transforms outside of CSSPlugin, like by manually applying new css, so we try to sense that by looking at x and y because if those changed, we know the changes were made outside CSSPlugin and we force a reinterpretation of the matrix values. Also, in Webkit browsers, if the element's "display" is "none", its calculated style value will always return empty, so if we've already recorded the values in the _gsTransform object, we'll just rely on those.
|
1220
1223
|
var k = (m.length >= 6),
|
1221
1224
|
a = k ? m[0] : 1,
|
@@ -1228,8 +1231,6 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1228
1231
|
scaleY = Math.sqrt(d * d + c * c);
|
1229
1232
|
rotation = (a || b) ? Math.atan2(b, a) * _RAD2DEG : tm.rotation || 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).
|
1230
1233
|
skewX = (c || d) ? Math.atan2(c, d) * _RAD2DEG + rotation : tm.skewX || 0;
|
1231
|
-
difX = scaleX - Math.abs(tm.scaleX || 0);
|
1232
|
-
difY = scaleY - Math.abs(tm.scaleY || 0);
|
1233
1234
|
if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {
|
1234
1235
|
if (invX) {
|
1235
1236
|
scaleX *= -1;
|
@@ -1240,15 +1241,10 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1240
1241
|
skewX += (skewX <= 0) ? 180 : -180;
|
1241
1242
|
}
|
1242
1243
|
}
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
tm.scaleX = scaleX;
|
1248
|
-
tm.scaleY = scaleY;
|
1249
|
-
tm.rotation = rotation;
|
1250
|
-
tm.skewX = skewX;
|
1251
|
-
}
|
1244
|
+
tm.scaleX = scaleX;
|
1245
|
+
tm.scaleY = scaleY;
|
1246
|
+
tm.rotation = rotation;
|
1247
|
+
tm.skewX = skewX;
|
1252
1248
|
if (_supports3D) {
|
1253
1249
|
tm.rotationX = tm.rotationY = tm.z = 0;
|
1254
1250
|
tm.perspective = defaultTransformPerspective;
|
@@ -1256,7 +1252,6 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1256
1252
|
}
|
1257
1253
|
}
|
1258
1254
|
tm.zOrigin = zOrigin;
|
1259
|
-
|
1260
1255
|
//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the "e-" towards the end) and would render the object slightly off. So we round to 0 in these cases. The conditional logic here is faster than calling Math.abs(). Also, browsers tend to render a SLIGHTLY rotated object in a fuzzy way, so we need to snap to exactly 0 when appropriate.
|
1261
1256
|
for (i in tm) {
|
1262
1257
|
if (tm[i] < min) if (tm[i] > -min) {
|
@@ -1268,12 +1263,6 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1268
1263
|
if (rec) {
|
1269
1264
|
t._gsTransform = tm; //record to the object's _gsTransform which we use so that tweens can control individual properties independently (we need all the properties to accurately recompose the matrix in the setRatio() method)
|
1270
1265
|
}
|
1271
|
-
tm.svg = (_SVGElement && (t instanceof _SVGElement) && (t.parentNode instanceof _SVGElement));
|
1272
|
-
if (tm.svg) {
|
1273
|
-
_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, _cs, false, "50% 50%") + "", tm);
|
1274
|
-
_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;
|
1275
|
-
}
|
1276
|
-
tm.xPercent = tm.yPercent = 0;
|
1277
1266
|
return tm;
|
1278
1267
|
},
|
1279
1268
|
|
@@ -1368,7 +1357,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1368
1357
|
z = t.z,
|
1369
1358
|
perspective = t.perspective,
|
1370
1359
|
a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43,
|
1371
|
-
zOrigin, rnd, cos, sin, t1, t2, t3, t4;
|
1360
|
+
zOrigin, rnd, cos, sin, t1, t2, t3, t4, transform, comma;
|
1372
1361
|
if (v === 1 || v === 0) if (t.force3D === "auto") if (!t.rotationY && !t.rotationX && sz === 1 && !perspective && !z) { //on the final render (which could be 0 for a from tween), if there are no 3D aspects, render in 2D to free up memory and improve performance especially on mobile devices
|
1373
1362
|
_set2DTransformRatio.call(this, v);
|
1374
1363
|
return;
|
@@ -1416,6 +1405,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1416
1405
|
a43 = (perspective) ? -1 / perspective : 0;
|
1417
1406
|
zOrigin = t.zOrigin;
|
1418
1407
|
rnd = 100000;
|
1408
|
+
comma = ",";
|
1419
1409
|
angle = t.rotationY * _DEG2RAD;
|
1420
1410
|
if (angle) {
|
1421
1411
|
cos = Math.cos(angle);
|
@@ -1478,7 +1468,17 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1478
1468
|
a14 = (t1 = (a14 += x) - (a14 |= 0)) ? ((t1 * rnd + (t1 < 0 ? -0.5 : 0.5)) | 0) / rnd + a14 : a14;
|
1479
1469
|
a24 = (t1 = (a24 += y) - (a24 |= 0)) ? ((t1 * rnd + (t1 < 0 ? -0.5 : 0.5)) | 0) / rnd + a24 : a24;
|
1480
1470
|
a34 = (t1 = (a34 += z) - (a34 |= 0)) ? ((t1 * rnd + (t1 < 0 ? -0.5 : 0.5)) | 0) / rnd + a34 : a34;
|
1481
|
-
|
1471
|
+
|
1472
|
+
//optimized way of concatenating all the values into a string. If we do it all in one shot, it's slower because of the way browsers have to create temp strings and the way it affects memory. If we do it piece-by-piece with +=, it's a bit slower too. We found that doing it in these sized chunks works best overall:
|
1473
|
+
transform = ((t.xPercent || t.yPercent) ? "translate(" + t.xPercent + "%," + t.yPercent + "%) matrix3d(" : "matrix3d(");
|
1474
|
+
transform += ((a11 * rnd) | 0) / rnd + comma + ((a21 * rnd) | 0) / rnd + comma + ((a31 * rnd) | 0) / rnd;
|
1475
|
+
transform += comma + ((a41 * rnd) | 0) / rnd + comma + ((a12 * rnd) | 0) / rnd + comma + ((a22 * rnd) | 0) / rnd;
|
1476
|
+
transform += comma + ((a32 * rnd) | 0) / rnd + comma + ((a42 * rnd) | 0) / rnd + comma + ((a13 * rnd) | 0) / rnd;
|
1477
|
+
transform += comma + ((a23 * rnd) | 0) / rnd + comma + ((a33 * rnd) | 0) / rnd + comma + ((a43 * rnd) | 0) / rnd;
|
1478
|
+
transform += comma + a14 + comma + a24 + comma + a34 + comma + (perspective ? (1 + (-a34 / perspective)) : 1) + ")";
|
1479
|
+
style[_transformProp] = transform;
|
1480
|
+
|
1481
|
+
//OLD (slower on most devices): style[_transformProp] = ((t.xPercent || t.yPercent) ? "translate(" + t.xPercent + "%," + t.yPercent + "%) matrix3d(" : "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(",") + ")";
|
1482
1482
|
},
|
1483
1483
|
|
1484
1484
|
_set2DTransformRatio = _internals.set2DTransformRatio = function(v) {
|
@@ -1526,8 +1526,13 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1526
1526
|
}
|
1527
1527
|
};
|
1528
1528
|
|
1529
|
+
p = Transform.prototype;
|
1530
|
+
p.x = p.y = p.z = p.skewX = p.skewY = p.rotation = p.rotationX = p.rotationY = p.zOrigin = p.xPercent = p.yPercent = 0;
|
1531
|
+
p.scaleX = p.scaleY = p.scaleZ = 1;
|
1532
|
+
|
1529
1533
|
_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,xPercent,yPercent", {parser:function(t, e, p, cssp, pt, plugin, vars) {
|
1530
|
-
if (cssp.
|
1534
|
+
if (cssp._lastParsedTransform === vars) { return pt; } //only need to parse the transform once, and only if the browser supports it.
|
1535
|
+
cssp._lastParsedTransform = vars;
|
1531
1536
|
var m1 = cssp._transform = _getTransform(t, _cs, true, vars.parseTransform),
|
1532
1537
|
style = t.style,
|
1533
1538
|
min = 0.000001,
|
@@ -1961,7 +1966,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1961
1966
|
|
1962
1967
|
|
1963
1968
|
p = CSSPlugin.prototype;
|
1964
|
-
p._firstPT = null;
|
1969
|
+
p._firstPT = p._lastParsedTransform = p._transform = null;
|
1965
1970
|
|
1966
1971
|
//gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc.
|
1967
1972
|
p._onInitTween = function(target, vars, tween) {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* VERSION: 0.10.
|
3
|
-
* DATE: 2014-
|
2
|
+
* VERSION: 0.10.8
|
3
|
+
* DATE: 2014-11-14
|
4
4
|
* UPDATES AND DOCS AT: http://www.greensock.com
|
5
5
|
*
|
6
6
|
* Requires TweenLite and CSSPlugin version 1.11.0 or later (TweenMax contains both TweenLite and CSSPlugin). ThrowPropsPlugin is required for momentum-based continuation of movement after the mouse/touch is released (ThrowPropsPlugin is a membership benefit of Club GreenSock - http://www.greensock.com/club/).
|
@@ -22,6 +22,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
22
22
|
_tempVarsX = {css:{}},
|
23
23
|
_tempVarsY = {css:{}},
|
24
24
|
_tempVarsRotation = {css:{}},
|
25
|
+
_globals = _gsScope._gsDefine.globals,
|
25
26
|
_tempEvent = {}, //for populating with pageX/pageY in old versions of IE
|
26
27
|
_doc = document,
|
27
28
|
_docElement = _doc.documentElement || {},
|
@@ -792,7 +793,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
792
793
|
EventDispatcher.call(this, target);
|
793
794
|
target = _unwrapElement(target); //in case the target is a selector object or selector text
|
794
795
|
if (!ThrowPropsPlugin) {
|
795
|
-
ThrowPropsPlugin =
|
796
|
+
ThrowPropsPlugin = _globals.com.greensock.plugins.ThrowPropsPlugin;
|
796
797
|
}
|
797
798
|
this.vars = vars = vars || {};
|
798
799
|
this.target = target;
|
@@ -988,7 +989,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
988
989
|
}
|
989
990
|
}
|
990
991
|
}
|
991
|
-
self.tween = tween = ThrowPropsPlugin.to(scrollProxy || target, {throwProps:throwProps, ease:(vars.ease || Power3.easeOut), onComplete:vars.onThrowComplete, onCompleteParams:vars.onThrowCompleteParams, onCompleteScope:(vars.onThrowCompleteScope || self), onUpdate:(vars.fastMode ? vars.onThrowUpdate : syncXY), onUpdateParams:(vars.fastMode ? vars.onThrowUpdateParams : null), onUpdateScope:(vars.onThrowUpdateScope || self)}, (isNaN(vars.maxDuration) ? 2 : vars.maxDuration), (isNaN(vars.minDuration) ? 0.5 : vars.minDuration), (isNaN(vars.overshootTolerance) ? (1 - self.edgeResistance) + 0.2 : vars.overshootTolerance));
|
992
|
+
self.tween = tween = ThrowPropsPlugin.to(scrollProxy || target, {throwProps:throwProps, ease:(vars.ease || _globals.Power3.easeOut), onComplete:vars.onThrowComplete, onCompleteParams:vars.onThrowCompleteParams, onCompleteScope:(vars.onThrowCompleteScope || self), onUpdate:(vars.fastMode ? vars.onThrowUpdate : syncXY), onUpdateParams:(vars.fastMode ? vars.onThrowUpdateParams : null), onUpdateScope:(vars.onThrowUpdateScope || self)}, (isNaN(vars.maxDuration) ? 2 : vars.maxDuration), (isNaN(vars.minDuration) ? 0.5 : vars.minDuration), (isNaN(vars.overshootTolerance) ? (1 - self.edgeResistance) + 0.2 : vars.overshootTolerance));
|
992
993
|
if (!vars.fastMode) {
|
993
994
|
//to populate the end values, we just scrub the tween to the end, record the values, and then jump back to the beginning.
|
994
995
|
if (scrollProxy) {
|
@@ -1579,7 +1580,7 @@ var _gsScope = (typeof(module) !== "undefined" && module.exports && typeof(globa
|
|
1579
1580
|
p.constructor = Draggable;
|
1580
1581
|
p.pointerX = p.pointerY = 0;
|
1581
1582
|
p.isDragging = p.isPressed = false;
|
1582
|
-
Draggable.version = "0.10.
|
1583
|
+
Draggable.version = "0.10.8";
|
1583
1584
|
Draggable.zIndex = 1000;
|
1584
1585
|
|
1585
1586
|
_addListener(_doc, "touchcancel", function() {
|