From: Vincent Vanwaelscappel Date: Fri, 6 Oct 2017 15:38:16 +0000 (+0200) Subject: #1659 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=0ca1863527a48b3de6d29b081d94e5446b18ca6f;p=fluidbook-html5.git #1659 --- diff --git a/js/libs/gsap/TimelineLite.js b/js/libs/gsap/TimelineLite.js deleted file mode 100644 index 5dfe8231..00000000 --- a/js/libs/gsap/TimelineLite.js +++ /dev/null @@ -1,620 +0,0 @@ -/*! - * VERSION: beta 1.10.2 - * DATE: 2013-08-05 - * UPDATES AND DOCS AT: http://www.greensock.com - * - * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. - * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for - * Club GreenSock members, the software agreement that was issued with your membership. - * - * @author: Jack Doyle, jack@greensock.com - */ - -(window._gsQueue || (window._gsQueue = [])).push( function() { - - "use strict"; - - window._gsDefine("TimelineLite", ["core.Animation","core.SimpleTimeline","TweenLite"], function(Animation, SimpleTimeline, TweenLite) { - - var TimelineLite = function(vars) { - SimpleTimeline.call(this, vars); - this._labels = {}; - this.autoRemoveChildren = (this.vars.autoRemoveChildren === true); - this.smoothChildTiming = (this.vars.smoothChildTiming === true); - this._sortChildren = true; - this._onUpdate = this.vars.onUpdate; - var v = this.vars, - val, p; - for (p in v) { - val = v[p]; - if (val instanceof Array) if (val.join("").indexOf("{self}") !== -1) { - v[p] = this._swapSelfInParams(val); - } - } - if (v.tweens instanceof Array) { - this.add(v.tweens, 0, v.align, v.stagger); - } - }, - _blankArray = [], - _copy = function(vars) { - var copy = {}, p; - for (p in vars) { - copy[p] = vars[p]; - } - return copy; - }, - _pauseCallback = function(tween, callback, params, scope) { - tween._timeline.pause(tween._startTime); - if (callback) { - callback.apply(scope || tween._timeline, params || _blankArray); - } - }, - _slice = _blankArray.slice, - p = TimelineLite.prototype = new SimpleTimeline(); - - TimelineLite.version = "1.10.2"; - p.constructor = TimelineLite; - p.kill()._gc = false; - - p.to = function(target, duration, vars, position) { - return duration ? this.add( new TweenLite(target, duration, vars), position) : this.set(target, vars, position); - }; - - p.from = function(target, duration, vars, position) { - return this.add( TweenLite.from(target, duration, vars), position); - }; - - p.fromTo = function(target, duration, fromVars, toVars, position) { - return duration ? this.add( TweenLite.fromTo(target, duration, fromVars, toVars), position) : this.set(target, toVars, position); - }; - - p.staggerTo = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { - var tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, onCompleteScope:onCompleteAllScope}), - i; - if (typeof(targets) === "string") { - targets = TweenLite.selector(targets) || targets; - } - if (!(targets instanceof Array) && targets.length && targets !== window && targets[0] && (targets[0] === window || (targets[0].nodeType && targets[0].style && !targets.nodeType))) { //senses if the targets object is a selector. If it is, we should translate it into an array. - targets = _slice.call(targets, 0); - } - stagger = stagger || 0; - for (i = 0; i < targets.length; i++) { - if (vars.startAt) { - vars.startAt = _copy(vars.startAt); - } - tl.to(targets[i], duration, _copy(vars), i * stagger); - } - return this.add(tl, position); - }; - - p.staggerFrom = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { - vars.immediateRender = (vars.immediateRender != false); - vars.runBackwards = true; - return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope); - }; - - p.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { - toVars.startAt = fromVars; - toVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false); - return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope); - }; - - p.call = function(callback, params, scope, position) { - return this.add( TweenLite.delayedCall(0, callback, params, scope), position); - }; - - p.set = function(target, vars, position) { - position = this._parseTimeOrLabel(position, 0, true); - if (vars.immediateRender == null) { - vars.immediateRender = (position === this._time && !this._paused); - } - return this.add( new TweenLite(target, 0, vars), position); - }; - - TimelineLite.exportRoot = function(vars, ignoreDelayedCalls) { - vars = vars || {}; - if (vars.smoothChildTiming == null) { - vars.smoothChildTiming = true; - } - var tl = new TimelineLite(vars), - root = tl._timeline, - tween, next; - if (ignoreDelayedCalls == null) { - ignoreDelayedCalls = true; - } - root._remove(tl, true); - tl._startTime = 0; - tl._rawPrevTime = tl._time = tl._totalTime = root._time; - tween = root._first; - while (tween) { - next = tween._next; - if (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) { - tl.add(tween, tween._startTime - tween._delay); - } - tween = next; - } - root.add(tl, 0); - return tl; - }; - - p.add = function(value, position, align, stagger) { - var curTime, l, i, child, tl; - if (typeof(position) !== "number") { - position = this._parseTimeOrLabel(position, 0, true, value); - } - if (!(value instanceof Animation)) { - if (value instanceof Array) { - align = align || "normal"; - stagger = stagger || 0; - curTime = position; - l = value.length; - for (i = 0; i < l; i++) { - if ((child = value[i]) instanceof Array) { - child = new TimelineLite({tweens:child}); - } - this.add(child, curTime); - if (typeof(child) !== "string" && typeof(child) !== "function") { - if (align === "sequence") { - curTime = child._startTime + (child.totalDuration() / child._timeScale); - } else if (align === "start") { - child._startTime -= child.delay(); - } - } - curTime += stagger; - } - return this._uncache(true); - } else if (typeof(value) === "string") { - return this.addLabel(value, position); - } else if (typeof(value) === "function") { - value = TweenLite.delayedCall(0, value); - } else { - throw("Cannot add " + value + " into the timeline; it is neither a tween, timeline, function, nor a string."); - } - } - - SimpleTimeline.prototype.add.call(this, value, position); - - //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. - if (this._gc) if (!this._paused) if (this._time === this._duration) if (this._time < this.duration()) { - //in case any of the anscestors had completed but should now be enabled... - tl = this; - while (tl._gc && tl._timeline) { - if (tl._timeline.smoothChildTiming) { - tl.totalTime(tl._totalTime, true); //also enables them - } else { - tl._enabled(true, false); - } - tl = tl._timeline; - } - } - - return this; - }; - - p.remove = function(value) { - if (value instanceof Animation) { - return this._remove(value, false); - } else if (value instanceof Array) { - var i = value.length; - while (--i > -1) { - this.remove(value[i]); - } - return this; - } else if (typeof(value) === "string") { - return this.removeLabel(value); - } - return this.kill(null, value); - }; - - p._remove = function(tween, skipDisable) { - SimpleTimeline.prototype._remove.call(this, tween, skipDisable); - if (!this._last) { - this._time = this._totalTime = 0; - } else if (this._time > this._last._startTime) { - this._time = this.duration(); - this._totalTime = this._totalDuration; - } - return this; - }; - - p.append = function(value, offsetOrLabel) { - return this.add(value, this._parseTimeOrLabel(null, offsetOrLabel, true, value)); - }; - - p.insert = p.insertMultiple = function(value, position, align, stagger) { - return this.add(value, position || 0, align, stagger); - }; - - p.appendMultiple = function(tweens, offsetOrLabel, align, stagger) { - return this.add(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true, tweens), align, stagger); - }; - - p.addLabel = function(label, position) { - this._labels[label] = this._parseTimeOrLabel(position); - return this; - }; - - p.addPause = function(position, callback, params, scope) { - return this.call(_pauseCallback, ["{self}", callback, params, scope], this, position); - }; - - p.removeLabel = function(label) { - delete this._labels[label]; - return this; - }; - - p.getLabelTime = function(label) { - return (this._labels[label] != null) ? this._labels[label] : -1; - }; - - p._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent, ignore) { - var i; - //if we're about to add a tween/timeline (or an array of them) that's already a child of this timeline, we should remove it first so that it doesn't contaminate the duration(). - if (ignore instanceof Animation && ignore.timeline === this) { - this.remove(ignore); - } else if (ignore instanceof Array) { - i = ignore.length; - while (--i > -1) { - if (ignore[i] instanceof Animation && ignore[i].timeline === this) { - this.remove(ignore[i]); - } - } - } - if (typeof(offsetOrLabel) === "string") { - return this._parseTimeOrLabel(offsetOrLabel, (appendIfAbsent && typeof(timeOrLabel) === "number" && this._labels[offsetOrLabel] == null) ? timeOrLabel - this.duration() : 0, appendIfAbsent); - } - offsetOrLabel = offsetOrLabel || 0; - if (typeof(timeOrLabel) === "string" && (isNaN(timeOrLabel) || this._labels[timeOrLabel] != null)) { //if the string is a number like "1", check to see if there's a label with that name, otherwise interpret it as a number (absolute value). - i = timeOrLabel.indexOf("="); - if (i === -1) { - if (this._labels[timeOrLabel] == null) { - return appendIfAbsent ? (this._labels[timeOrLabel] = this.duration() + offsetOrLabel) : offsetOrLabel; - } - return this._labels[timeOrLabel] + offsetOrLabel; - } - offsetOrLabel = parseInt(timeOrLabel.charAt(i-1) + "1", 10) * Number(timeOrLabel.substr(i+1)); - timeOrLabel = (i > 1) ? this._parseTimeOrLabel(timeOrLabel.substr(0, i-1), 0, appendIfAbsent) : this.duration(); - } else if (timeOrLabel == null) { - timeOrLabel = this.duration(); - } - return Number(timeOrLabel) + offsetOrLabel; - }; - - p.seek = function(position, suppressEvents) { - return this.totalTime((typeof(position) === "number") ? position : this._parseTimeOrLabel(position), (suppressEvents !== false)); - }; - - p.stop = function() { - return this.paused(true); - }; - - p.gotoAndPlay = function(position, suppressEvents) { - return this.play(position, suppressEvents); - }; - - p.gotoAndStop = function(position, suppressEvents) { - return this.pause(position, suppressEvents); - }; - - p.render = function(time, suppressEvents, force) { - if (this._gc) { - this._enabled(true, false); - } - var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), - prevTime = this._time, - prevStart = this._startTime, - prevTimeScale = this._timeScale, - prevPaused = this._paused, - tween, isComplete, next, callback, internalForce; - if (time >= totalDur) { - this._totalTime = this._time = totalDur; - if (!this._reversed) if (!this._hasPausedChild()) { - isComplete = true; - callback = "onComplete"; - if (this._duration === 0) if (time === 0 || this._rawPrevTime < 0) if (this._rawPrevTime !== time && this._first) { //In order to accommodate zero-duration timelines, we must discern the momentum/direction of time in order to render values properly when the "playhead" goes past 0 in the forward direction or lands directly on it, and also when it moves past it in the backward direction (from a postitive time to a negative time). - internalForce = true; - if (this._rawPrevTime > 0) { - callback = "onReverseComplete"; - } - } - } - this._rawPrevTime = time; - time = totalDur + 0.000001; //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) - - } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0. - this._totalTime = this._time = 0; - if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime > 0)) { - callback = "onReverseComplete"; - isComplete = this._reversed; - } - if (time < 0) { - this._active = false; - if (this._duration === 0) if (this._rawPrevTime >= 0 && this._first) { //zero-duration timelines 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. - internalForce = true; - } - this._rawPrevTime = time; - } else { - this._rawPrevTime = time; - time = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline) - if (!this._initted) { - internalForce = true; - } - } - - } else { - this._totalTime = this._time = this._rawPrevTime = time; - } - if ((this._time === prevTime || !this._first) && !force && !internalForce) { - return; - } else if (!this._initted) { - this._initted = true; - } - - if (!this._active) if (!this._paused && this._time !== prevTime && time > 0) { - this._active = true; //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example. - } - - if (prevTime === 0) if (this.vars.onStart) if (this._time !== 0) if (!suppressEvents) { - this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); - } - - if (this._time >= prevTime) { - tween = this._first; - while (tween) { - next = tween._next; //record it here because the value could change after rendering... - if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering - break; - } else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) { - - if (!tween._reversed) { - tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force); - } else { - tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force); - } - - } - tween = next; - } - } else { - tween = this._last; - while (tween) { - next = tween._prev; //record it here because the value could change after rendering... - if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering - break; - } else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) { - - if (!tween._reversed) { - tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force); - } else { - tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force); - } - - } - tween = next; - } - } - - if (this._onUpdate) if (!suppressEvents) { - this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); - } - - if (callback) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate - if (isComplete) { - if (this._timeline.autoRemoveChildren) { - this._enabled(false, false); - } - this._active = false; - } - if (!suppressEvents && this.vars[callback]) { - this.vars[callback].apply(this.vars[callback + "Scope"] || this, this.vars[callback + "Params"] || _blankArray); - } - } - }; - - p._hasPausedChild = function() { - var tween = this._first; - while (tween) { - if (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) { - return true; - } - tween = tween._next; - } - return false; - }; - - p.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) { - ignoreBeforeTime = ignoreBeforeTime || -9999999999; - var a = [], - tween = this._first, - cnt = 0; - while (tween) { - if (tween._startTime < ignoreBeforeTime) { - //do nothing - } else if (tween instanceof TweenLite) { - if (tweens !== false) { - a[cnt++] = tween; - } - } else { - if (timelines !== false) { - a[cnt++] = tween; - } - if (nested !== false) { - a = a.concat(tween.getChildren(true, tweens, timelines)); - cnt = a.length; - } - } - tween = tween._next; - } - return a; - }; - - p.getTweensOf = function(target, nested) { - var tweens = TweenLite.getTweensOf(target), - i = tweens.length, - a = [], - cnt = 0; - while (--i > -1) { - if (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) { - a[cnt++] = tweens[i]; - } - } - return a; - }; - - p._contains = function(tween) { - var tl = tween.timeline; - while (tl) { - if (tl === this) { - return true; - } - tl = tl.timeline; - } - return false; - }; - - p.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) { - ignoreBeforeTime = ignoreBeforeTime || 0; - var tween = this._first, - labels = this._labels, - p; - while (tween) { - if (tween._startTime >= ignoreBeforeTime) { - tween._startTime += amount; - } - tween = tween._next; - } - if (adjustLabels) { - for (p in labels) { - if (labels[p] >= ignoreBeforeTime) { - labels[p] += amount; - } - } - } - return this._uncache(true); - }; - - p._kill = function(vars, target) { - if (!vars && !target) { - return this._enabled(false, false); - } - var tweens = (!target) ? this.getChildren(true, true, false) : this.getTweensOf(target), - i = tweens.length, - changed = false; - while (--i > -1) { - if (tweens[i]._kill(vars, target)) { - changed = true; - } - } - return changed; - }; - - p.clear = function(labels) { - var tweens = this.getChildren(false, true, true), - i = tweens.length; - this._time = this._totalTime = 0; - while (--i > -1) { - tweens[i]._enabled(false, false); - } - if (labels !== false) { - this._labels = {}; - } - return this._uncache(true); - }; - - p.invalidate = function() { - var tween = this._first; - while (tween) { - tween.invalidate(); - tween = tween._next; - } - return this; - }; - - p._enabled = function(enabled, ignoreTimeline) { - if (enabled === this._gc) { - var tween = this._first; - while (tween) { - tween._enabled(enabled, true); - tween = tween._next; - } - } - return SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline); - }; - - p.progress = function(value) { - return (!arguments.length) ? this._time / this.duration() : this.totalTime(this.duration() * value, false); - }; - - p.duration = function(value) { - if (!arguments.length) { - if (this._dirty) { - this.totalDuration(); //just triggers recalculation - } - return this._duration; - } - if (this.duration() !== 0 && value !== 0) { - this.timeScale(this._duration / value); - } - return this; - }; - - p.totalDuration = function(value) { - if (!arguments.length) { - if (this._dirty) { - var max = 0, - tween = this._last, - prevStart = 999999999999, - prev, end; - while (tween) { - prev = tween._prev; //record it here in case the tween changes position in the sequence... - if (tween._dirty) { - tween.totalDuration(); //could change the tween._startTime, so make sure the tween's cache is clean before analyzing it. - } - if (tween._startTime > prevStart && this._sortChildren && !tween._paused) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence - this.add(tween, tween._startTime - tween._delay); - } else { - prevStart = tween._startTime; - } - if (tween._startTime < 0 && !tween._paused) { //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found. - max -= tween._startTime; - if (this._timeline.smoothChildTiming) { - this._startTime += tween._startTime / this._timeScale; - } - this.shiftChildren(-tween._startTime, false, -9999999999); - prevStart = 0; - } - end = tween._startTime + (tween._totalDuration / tween._timeScale); - if (end > max) { - max = end; - } - tween = prev; - } - this._duration = this._totalDuration = max; - this._dirty = false; - } - return this._totalDuration; - } - if (this.totalDuration() !== 0) if (value !== 0) { - this.timeScale(this._totalDuration / value); - } - return this; - }; - - p.usesFrames = function() { - var tl = this._timeline; - while (tl._timeline) { - tl = tl._timeline; - } - return (tl === Animation._rootFramesTimeline); - }; - - p.rawTime = function() { - return (this._paused || (this._totalTime !== 0 && this._totalTime !== this._totalDuration)) ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale; - }; - - return TimelineLite; - - }, true); - - -}); if (window._gsDefine) { window._gsQueue.pop()(); } \ No newline at end of file diff --git a/js/libs/gsap/TimelineLite.min.js b/js/libs/gsap/TimelineLite.min.js new file mode 100644 index 00000000..5cba09d4 --- /dev/null +++ b/js/libs/gsap/TimelineLite.min.js @@ -0,0 +1,12 @@ +/*! + * VERSION: 1.20.3 + * DATE: 2017-10-02 + * UPDATES AND DOCS AT: http://greensock.com + * + * @license Copyright (c) 2008-2017, GreenSock. All rights reserved. + * This work is subject to the terms at http://greensock.com/standard-license or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(a,b,c){var d=function(a){b.call(this,a),this._labels={},this.autoRemoveChildren=this.vars.autoRemoveChildren===!0,this.smoothChildTiming=this.vars.smoothChildTiming===!0,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var c,d,e=this.vars;for(d in e)c=e[d],i(c)&&-1!==c.join("").indexOf("{self}")&&(e[d]=this._swapSelfInParams(c));i(e.tweens)&&this.add(e.tweens,0,e.align,e.stagger)},e=1e-10,f=c._internals,g=d._internals={},h=f.isSelector,i=f.isArray,j=f.lazyTweens,k=f.lazyRender,l=_gsScope._gsDefine.globals,m=function(a){var b,c={};for(b in a)c[b]=a[b];return c},n=function(a,b,c){var d,e,f=a.cycle;for(d in f)e=f[d],a[d]="function"==typeof e?e(c,b[c]):e[c%e.length];delete a.cycle},o=g.pauseCallback=function(){},p=function(a){var b,c=[],d=a.length;for(b=0;b!==d;c.push(a[b++]));return c},q=d.prototype=new b;return d.version="1.20.3",q.constructor=d,q.kill()._gc=q._forcingPlayhead=q._hasPause=!1,q.to=function(a,b,d,e){var f=d.repeat&&l.TweenMax||c;return b?this.add(new f(a,b,d),e):this.set(a,d,e)},q.from=function(a,b,d,e){return this.add((d.repeat&&l.TweenMax||c).from(a,b,d),e)},q.fromTo=function(a,b,d,e,f){var g=e.repeat&&l.TweenMax||c;return b?this.add(g.fromTo(a,b,d,e),f):this.set(a,e,f)},q.staggerTo=function(a,b,e,f,g,i,j,k){var l,o,q=new d({onComplete:i,onCompleteParams:j,callbackScope:k,smoothChildTiming:this.smoothChildTiming}),r=e.cycle;for("string"==typeof a&&(a=c.selector(a)||a),a=a||[],h(a)&&(a=p(a)),f=f||0,0>f&&(a=p(a),a.reverse(),f*=-1),o=0;of&&(e=1),i.add(g,f)),g=h;return j.add(i,0),e&&i.totalDuration(),i},q.add=function(e,f,g,h){var j,k,l,m,n,o;if("number"!=typeof f&&(f=this._parseTimeOrLabel(f,0,!0,e)),!(e instanceof a)){if(e instanceof Array||e&&e.push&&i(e)){for(g=g||"normal",h=h||0,j=f,k=e.length,l=0;k>l;l++)i(m=e[l])&&(m=new d({tweens:m})),this.add(m,j),"string"!=typeof m&&"function"!=typeof m&&("sequence"===g?j=m._startTime+m.totalDuration()/m._timeScale:"start"===g&&(m._startTime-=m.delay())),j+=h;return this._uncache(!0)}if("string"==typeof e)return this.addLabel(e,f);if("function"!=typeof e)throw"Cannot add "+e+" into the timeline; it is not a tween, timeline, function, or string.";e=c.delayedCall(0,e)}if(b.prototype.add.call(this,e,f),e._time&&e.render((this.rawTime()-e._startTime)*e._timeScale,!1,!1),(this._gc||this._time===this._duration)&&!this._paused&&this._duratione._startTime;n._timeline;)o&&n._timeline.smoothChildTiming?n.totalTime(n._totalTime,!0):n._gc&&n._enabled(!0,!1),n=n._timeline;return this},q.remove=function(b){if(b instanceof a){this._remove(b,!1);var c=b._timeline=b.vars.useFrames?a._rootFramesTimeline:a._rootTimeline;return b._startTime=(b._paused?b._pauseTime:c._time)-(b._reversed?b.totalDuration()-b._totalTime:b._totalTime)/b._timeScale,this}if(b instanceof Array||b&&b.push&&i(b)){for(var d=b.length;--d>-1;)this.remove(b[d]);return this}return"string"==typeof b?this.removeLabel(b):this.kill(null,b)},q._remove=function(a,c){b.prototype._remove.call(this,a,c);var d=this._last;return d?this._time>this.duration()&&(this._time=this._duration,this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},q.append=function(a,b){return this.add(a,this._parseTimeOrLabel(null,b,!0,a))},q.insert=q.insertMultiple=function(a,b,c,d){return this.add(a,b||0,c,d)},q.appendMultiple=function(a,b,c,d){return this.add(a,this._parseTimeOrLabel(null,b,!0,a),c,d)},q.addLabel=function(a,b){return this._labels[a]=this._parseTimeOrLabel(b),this},q.addPause=function(a,b,d,e){var f=c.delayedCall(0,o,d,e||this);return f.vars.onComplete=f.vars.onReverseComplete=b,f.data="isPause",this._hasPause=!0,this.add(f,a)},q.removeLabel=function(a){return delete this._labels[a],this},q.getLabelTime=function(a){return null!=this._labels[a]?this._labels[a]:-1},q._parseTimeOrLabel=function(b,c,d,e){var f,g;if(e instanceof a&&e.timeline===this)this.remove(e);else if(e&&(e instanceof Array||e.push&&i(e)))for(g=e.length;--g>-1;)e[g]instanceof a&&e[g].timeline===this&&this.remove(e[g]);if(f="number"!=typeof b||c?this.duration()>99999999999?this.recent().endTime(!1):this._duration:0,"string"==typeof c)return this._parseTimeOrLabel(c,d&&"number"==typeof b&&null==this._labels[c]?b-f:0,d);if(c=c||0,"string"!=typeof b||!isNaN(b)&&null==this._labels[b])null==b&&(b=f);else{if(g=b.indexOf("="),-1===g)return null==this._labels[b]?d?this._labels[b]=f+c:c:this._labels[b]+c;c=parseInt(b.charAt(g-1)+"1",10)*Number(b.substr(g+1)),b=g>1?this._parseTimeOrLabel(b.substr(0,g-1),0,d):f}return Number(b)+c},q.seek=function(a,b){return this.totalTime("number"==typeof a?a:this._parseTimeOrLabel(a),b!==!1)},q.stop=function(){return this.paused(!0)},q.gotoAndPlay=function(a,b){return this.play(a,b)},q.gotoAndStop=function(a,b){return this.pause(a,b)},q.render=function(a,b,c){this._gc&&this._enabled(!0,!1);var d,f,g,h,i,l,m,n=this._time,o=this._dirty?this.totalDuration():this._totalDuration,p=this._startTime,q=this._timeScale,r=this._paused;if(n!==this._time&&(a+=this._time-n),a>=o-1e-7&&a>=0)this._totalTime=this._time=o,this._reversed||this._hasPausedChild()||(f=!0,h="onComplete",i=!!this._timeline.autoRemoveChildren,0===this._duration&&(0>=a&&a>=-1e-7||this._rawPrevTime<0||this._rawPrevTime===e)&&this._rawPrevTime!==a&&this._first&&(i=!0,this._rawPrevTime>e&&(h="onReverseComplete"))),this._rawPrevTime=this._duration||!b||a||this._rawPrevTime===a?a:e,a=o+1e-4;else if(1e-7>a)if(this._totalTime=this._time=0,(0!==n||0===this._duration&&this._rawPrevTime!==e&&(this._rawPrevTime>0||0>a&&this._rawPrevTime>=0))&&(h="onReverseComplete",f=this._reversed),0>a)this._active=!1,this._timeline.autoRemoveChildren&&this._reversed?(i=f=!0,h="onReverseComplete"):this._rawPrevTime>=0&&this._first&&(i=!0),this._rawPrevTime=a;else{if(this._rawPrevTime=this._duration||!b||a||this._rawPrevTime===a?a:e,0===a&&f)for(d=this._first;d&&0===d._startTime;)d._duration||(f=!1),d=d._next;a=0,this._initted||(i=!0)}else{if(this._hasPause&&!this._forcingPlayhead&&!b){if(a>=n)for(d=this._first;d&&d._startTime<=a&&!l;)d._duration||"isPause"!==d.data||d.ratio||0===d._startTime&&0===this._rawPrevTime||(l=d),d=d._next;else for(d=this._last;d&&d._startTime>=a&&!l;)d._duration||"isPause"===d.data&&d._rawPrevTime>0&&(l=d),d=d._prev;l&&(this._time=a=l._startTime,this._totalTime=a+this._cycle*(this._totalDuration+this._repeatDelay))}this._totalTime=this._time=this._rawPrevTime=a}if(this._time!==n&&this._first||c||i||l){if(this._initted||(this._initted=!0),this._active||!this._paused&&this._time!==n&&a>0&&(this._active=!0),0===n&&this.vars.onStart&&(0===this._time&&this._duration||b||this._callback("onStart")),m=this._time,m>=n)for(d=this._first;d&&(g=d._next,m===this._time&&(!this._paused||r));)(d._active||d._startTime<=m&&!d._paused&&!d._gc)&&(l===d&&this.pause(),d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)),d=g;else for(d=this._last;d&&(g=d._prev,m===this._time&&(!this._paused||r));){if(d._active||d._startTime<=n&&!d._paused&&!d._gc){if(l===d){for(l=d._prev;l&&l.endTime()>this._time;)l.render(l._reversed?l.totalDuration()-(a-l._startTime)*l._timeScale:(a-l._startTime)*l._timeScale,b,c),l=l._prev;l=null,this.pause()}d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)}d=g}this._onUpdate&&(b||(j.length&&k(),this._callback("onUpdate"))),h&&(this._gc||(p===this._startTime||q!==this._timeScale)&&(0===this._time||o>=this.totalDuration())&&(f&&(j.length&&k(),this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!b&&this.vars[h]&&this._callback(h)))}},q._hasPausedChild=function(){for(var a=this._first;a;){if(a._paused||a instanceof d&&a._hasPausedChild())return!0;a=a._next}return!1},q.getChildren=function(a,b,d,e){e=e||-9999999999;for(var f=[],g=this._first,h=0;g;)g._startTime-1;)(d[e].timeline===this||b&&this._contains(d[e]))&&(g[h++]=d[e]);return f&&this._enabled(!1,!0),g},q.recent=function(){return this._recent},q._contains=function(a){for(var b=a.timeline;b;){if(b===this)return!0;b=b.timeline}return!1},q.shiftChildren=function(a,b,c){c=c||0;for(var d,e=this._first,f=this._labels;e;)e._startTime>=c&&(e._startTime+=a),e=e._next;if(b)for(d in f)f[d]>=c&&(f[d]+=a);return this._uncache(!0)},q._kill=function(a,b){if(!a&&!b)return this._enabled(!1,!1);for(var c=b?this.getTweensOf(b):this.getChildren(!0,!0,!1),d=c.length,e=!1;--d>-1;)c[d]._kill(a,b)&&(e=!0);return e},q.clear=function(a){var b=this.getChildren(!1,!0,!0),c=b.length;for(this._time=this._totalTime=0;--c>-1;)b[c]._enabled(!1,!1);return a!==!1&&(this._labels={}),this._uncache(!0)},q.invalidate=function(){for(var b=this._first;b;)b.invalidate(),b=b._next;return a.prototype.invalidate.call(this)},q._enabled=function(a,c){if(a===this._gc)for(var d=this._first;d;)d._enabled(a,!0),d=d._next;return b.prototype._enabled.call(this,a,c)},q.totalTime=function(b,c,d){this._forcingPlayhead=!0;var e=a.prototype.totalTime.apply(this,arguments);return this._forcingPlayhead=!1,e},q.duration=function(a){return arguments.length?(0!==this.duration()&&0!==a&&this.timeScale(this._duration/a),this):(this._dirty&&this.totalDuration(),this._duration)},q.totalDuration=function(a){if(!arguments.length){if(this._dirty){for(var b,c,d=0,e=this._last,f=999999999999;e;)b=e._prev,e._dirty&&e.totalDuration(),e._startTime>f&&this._sortChildren&&!e._paused&&!this._calculatingDuration?(this._calculatingDuration=1,this.add(e,e._startTime-e._delay),this._calculatingDuration=0):f=e._startTime,e._startTime<0&&!e._paused&&(d-=e._startTime,this._timeline.smoothChildTiming&&(this._startTime+=e._startTime/this._timeScale,this._time-=e._startTime,this._totalTime-=e._startTime,this._rawPrevTime-=e._startTime),this.shiftChildren(-e._startTime,!1,-9999999999),f=0),c=e._startTime+e._totalDuration/e._timeScale,c>d&&(d=c),e=b;this._duration=this._totalDuration=d,this._dirty=!1}return this._totalDuration}return a&&this.totalDuration()?this.timeScale(this._totalDuration/a):this},q.paused=function(b){if(!b)for(var c=this._first,d=this._time;c;)c._startTime===d&&"isPause"===c.data&&(c._rawPrevTime=0),c=c._next;return a.prototype.paused.apply(this,arguments)},q.usesFrames=function(){for(var b=this._timeline;b._timeline;)b=b._timeline;return b===a._rootFramesTimeline},q.rawTime=function(a){return a&&(this._paused||this._repeat&&this.time()>0&&this.totalProgress()<1)?this._totalTime%(this._duration+this._repeatDelay):this._paused?this._totalTime:(this._timeline.rawTime(a)-this._startTime)*this._timeScale},d},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(a){"use strict";var b=function(){return(_gsScope.GreenSockGlobals||_gsScope)[a]};"undefined"!=typeof module&&module.exports?(require("./TweenLite.min.js"),module.exports=b()):"function"==typeof define&&define.amd&&define(["TweenLite"],b)}("TimelineLite"); \ No newline at end of file diff --git a/js/libs/gsap/TimelineMax.js b/js/libs/gsap/TimelineMax.js deleted file mode 100644 index 1144c984..00000000 --- a/js/libs/gsap/TimelineMax.js +++ /dev/null @@ -1,1062 +0,0 @@ -/*! - * VERSION: beta 1.10.2 - * DATE: 2013-08-05 - * UPDATES AND DOCS AT: http://www.greensock.com - * - * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. - * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for - * Club GreenSock members, the software agreement that was issued with your membership. - * - * @author: Jack Doyle, jack@greensock.com - */ - -(window._gsQueue || (window._gsQueue = [])).push( function() { - - "use strict"; - - window._gsDefine("TimelineMax", ["TimelineLite","TweenLite","easing.Ease"], function(TimelineLite, TweenLite, Ease) { - - var TimelineMax = function(vars) { - TimelineLite.call(this, vars); - this._repeat = this.vars.repeat || 0; - this._repeatDelay = this.vars.repeatDelay || 0; - this._cycle = 0; - this._yoyo = (this.vars.yoyo === true); - this._dirty = true; - }, - _blankArray = [], - _easeNone = new Ease(null, null, 1, 0), - _getGlobalPaused = function(tween) { - while (tween) { - if (tween._paused) { - return true; - } - tween = tween._timeline; - } - return false; - }, - p = TimelineMax.prototype = new TimelineLite(); - - p.constructor = TimelineMax; - p.kill()._gc = false; - TimelineMax.version = "1.10.2"; - - p.invalidate = function() { - this._yoyo = (this.vars.yoyo === true); - this._repeat = this.vars.repeat || 0; - this._repeatDelay = this.vars.repeatDelay || 0; - this._uncache(true); - return TimelineLite.prototype.invalidate.call(this); - }; - - p.addCallback = function(callback, position, params, scope) { - return this.add( TweenLite.delayedCall(0, callback, params, scope), position); - }; - - p.removeCallback = function(callback, position) { - if (callback) { - if (position == null) { - this._kill(null, callback); - } else { - var a = this.getTweensOf(callback, false), - i = a.length, - time = this._parseTimeOrLabel(position); - while (--i > -1) { - if (a[i]._startTime === time) { - a[i]._enabled(false, false); - } - } - } - } - return this; - }; - - p.tweenTo = function(position, vars) { - vars = vars || {}; - var copy = {ease:_easeNone, overwrite:2, useFrames:this.usesFrames(), immediateRender:false}, p, t; - for (p in vars) { - copy[p] = vars[p]; - } - copy.time = this._parseTimeOrLabel(position); - t = new TweenLite(this, (Math.abs(Number(copy.time) - this._time) / this._timeScale) || 0.001, copy); - copy.onStart = function() { - t.target.paused(true); - if (t.vars.time !== t.target.time()) { //don't make the duration zero - if it's supposed to be zero, don't worry because it's already initting the tween and will complete immediately, effectively making the duration zero anyway. If we make duration zero, the tween won't run at all. - t.duration( Math.abs( t.vars.time - t.target.time()) / t.target._timeScale ); - } - if (vars.onStart) { //in case the user had an onStart in the vars - we don't want to overwrite it. - vars.onStart.apply(vars.onStartScope || t, vars.onStartParams || _blankArray); - } - }; - return t; - }; - - p.tweenFromTo = function(fromPosition, toPosition, vars) { - vars = vars || {}; - fromPosition = this._parseTimeOrLabel(fromPosition); - vars.startAt = {onComplete:this.seek, onCompleteParams:[fromPosition], onCompleteScope:this}; - vars.immediateRender = (vars.immediateRender !== false); - var t = this.tweenTo(toPosition, vars); - return t.duration((Math.abs( t.vars.time - fromPosition) / this._timeScale) || 0.001); - }; - - p.render = function(time, suppressEvents, force) { - if (this._gc) { - this._enabled(true, false); - } - var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), - dur = this._duration, - prevTime = this._time, - prevTotalTime = this._totalTime, - prevStart = this._startTime, - prevTimeScale = this._timeScale, - prevRawPrevTime = this._rawPrevTime, - prevPaused = this._paused, - prevCycle = this._cycle, - tween, isComplete, next, callback, internalForce, cycleDuration; - if (time >= totalDur) { - if (!this._locked) { - this._totalTime = totalDur; - this._cycle = this._repeat; - } - if (!this._reversed) if (!this._hasPausedChild()) { - isComplete = true; - callback = "onComplete"; - if (dur === 0) if (time === 0 || this._rawPrevTime < 0) if (this._rawPrevTime !== time && this._first) { //In order to accommodate zero-duration timelines, we must discern the momentum/direction of time in order to render values properly when the "playhead" goes past 0 in the forward direction or lands directly on it, and also when it moves past it in the backward direction (from a postitive time to a negative time). - internalForce = true; - if (this._rawPrevTime > 0) { - callback = "onReverseComplete"; - } - } - } - this._rawPrevTime = time; - if (this._yoyo && (this._cycle & 1) !== 0) { - this._time = time = 0; - } else { - this._time = dur; - time = dur + 0.000001; //to avoid occasional floating point rounding errors - } - - } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0. - if (!this._locked) { - this._totalTime = this._cycle = 0; - } - this._time = 0; - if (prevTime !== 0 || (dur === 0 && this._rawPrevTime > 0 && !this._locked)) { - callback = "onReverseComplete"; - isComplete = this._reversed; - } - if (time < 0) { - this._active = false; - if (dur === 0) if (this._rawPrevTime >= 0 && this._first) { //zero-duration timelines 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. - internalForce = true; - } - this._rawPrevTime = time; - } else { - this._rawPrevTime = time; - time = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline) - if (!this._initted) { - internalForce = true; - } - } - - } else { - this._time = this._rawPrevTime = time; - if (!this._locked) { - this._totalTime = time; - if (this._repeat !== 0) { - cycleDuration = dur + this._repeatDelay; - this._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but it gets reported as 0.79999999!) - if (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration) { - this._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning) - } - this._time = this._totalTime - (this._cycle * cycleDuration); - if (this._yoyo) if ((this._cycle & 1) !== 0) { - this._time = dur - this._time; - } - if (this._time > dur) { - this._time = dur; - time = dur + 0.000001; //to avoid occasional floating point rounding error - } else if (this._time < 0) { - this._time = time = 0; - } else { - time = this._time; - } - } - } - } - - if (this._cycle !== prevCycle) if (!this._locked) { - /* - make sure children at the end/beginning of the timeline are rendered properly. If, for example, - a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which - would get transated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there - could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So - we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must - ensure that zero-duration tweens at the very beginning or end of the TimelineMax work. - */ - var backwards = (this._yoyo && (prevCycle & 1) !== 0), - wrap = (backwards === (this._yoyo && (this._cycle & 1) !== 0)), - recTotalTime = this._totalTime, - recCycle = this._cycle, - recRawPrevTime = this._rawPrevTime, - recTime = this._time; - - this._totalTime = prevCycle * dur; - if (this._cycle < prevCycle) { - backwards = !backwards; - } else { - this._totalTime += dur; - } - this._time = prevTime; //temporarily revert _time so that render() renders the children in the correct order. Without this, tweens won't rewind correctly. We could arhictect things in a "cleaner" way by splitting out the rendering queue into a separate method but for performance reasons, we kept it all inside this method. - - this._rawPrevTime = (dur === 0) ? prevRawPrevTime - 0.00001 : prevRawPrevTime; - this._cycle = prevCycle; - this._locked = true; //prevents changes to totalTime and skips repeat/yoyo behavior when we recursively call render() - prevTime = (backwards) ? 0 : dur; - this.render(prevTime, suppressEvents, (dur === 0)); - if (!suppressEvents) if (!this._gc) { - if (this.vars.onRepeat) { - this.vars.onRepeat.apply(this.vars.onRepeatScope || this, this.vars.onRepeatParams || _blankArray); - } - } - if (wrap) { - prevTime = (backwards) ? dur + 0.000001 : -0.000001; - this.render(prevTime, true, false); - } - this._locked = false; - if (this._paused && !prevPaused) { //if the render() triggered callback that paused this timeline, we should abort (very rare, but possible) - return; - } - this._time = recTime; - this._totalTime = recTotalTime; - this._cycle = recCycle; - this._rawPrevTime = recRawPrevTime; - } - - if ((this._time === prevTime || !this._first) && !force && !internalForce) { - if (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate. - this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); - } - return; - } else if (!this._initted) { - this._initted = true; - } - - if (!this._active) if (!this._paused && this._totalTime !== prevTotalTime && time > 0) { - this._active = true; //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example. - } - - if (prevTotalTime === 0) if (this.vars.onStart) if (this._totalTime !== 0) if (!suppressEvents) { - this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); - } - - if (this._time >= prevTime) { - tween = this._first; - while (tween) { - next = tween._next; //record it here because the value could change after rendering... - if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering - break; - } else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) { - if (!tween._reversed) { - tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force); - } else { - tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force); - } - - } - tween = next; - } - } else { - tween = this._last; - while (tween) { - next = tween._prev; //record it here because the value could change after rendering... - if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering - break; - } else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) { - if (!tween._reversed) { - tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force); - } else { - tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force); - } - - } - tween = next; - } - } - - if (this._onUpdate) if (!suppressEvents) { - this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); - } - if (callback) if (!this._locked) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate - if (isComplete) { - if (this._timeline.autoRemoveChildren) { - this._enabled(false, false); - } - this._active = false; - } - if (!suppressEvents && this.vars[callback]) { - this.vars[callback].apply(this.vars[callback + "Scope"] || this, this.vars[callback + "Params"] || _blankArray); - } - } - }; - - p.getActive = function(nested, tweens, timelines) { - if (nested == null) { - nested = true; - } - if (tweens == null) { - tweens = true; - } - if (timelines == null) { - timelines = false; - } - var a = [], - all = this.getChildren(nested, tweens, timelines), - cnt = 0, - l = all.length, - i, tween; - for (i = 0; i < l; i++) { - tween = all[i]; - //note: we cannot just check tween.active because timelines that contain paused children will continue to have "active" set to true even after the playhead passes their end point (technically a timeline can only be considered complete after all of its children have completed too, but paused tweens are...well...just waiting and until they're unpaused we don't know where their end point will be). - if (!tween._paused) if (tween._timeline._time >= tween._startTime) if (tween._timeline._time < tween._startTime + tween._totalDuration / tween._timeScale) if (!_getGlobalPaused(tween._timeline)) { - a[cnt++] = tween; - } - } - return a; - }; - - - p.getLabelAfter = function(time) { - if (!time) if (time !== 0) { //faster than isNan() - time = this._time; - } - var labels = this.getLabelsArray(), - l = labels.length, - i; - for (i = 0; i < l; i++) { - if (labels[i].time > time) { - return labels[i].name; - } - } - return null; - }; - - p.getLabelBefore = function(time) { - if (time == null) { - time = this._time; - } - var labels = this.getLabelsArray(), - i = labels.length; - while (--i > -1) { - if (labels[i].time < time) { - return labels[i].name; - } - } - return null; - }; - - p.getLabelsArray = function() { - var a = [], - cnt = 0, - p; - for (p in this._labels) { - a[cnt++] = {time:this._labels[p], name:p}; - } - a.sort(function(a,b) { - return a.time - b.time; - }); - return a; - }; - - -//---- GETTERS / SETTERS ------------------------------------------------------------------------------------------------------- - - p.progress = function(value) { - return (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), false); - }; - - p.totalProgress = function(value) { - return (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, false); - }; - - p.totalDuration = function(value) { - if (!arguments.length) { - if (this._dirty) { - TimelineLite.prototype.totalDuration.call(this); //just forces refresh - //Instead of Infinity, we use 999999999999 so that we can accommodate reverses. - this._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat); - } - return this._totalDuration; - } - return (this._repeat === -1) ? this : this.duration( (value - (this._repeat * this._repeatDelay)) / (this._repeat + 1) ); - }; - - p.time = function(value, suppressEvents) { - if (!arguments.length) { - return this._time; - } - if (this._dirty) { - this.totalDuration(); - } - if (value > this._duration) { - value = this._duration; - } - if (this._yoyo && (this._cycle & 1) !== 0) { - value = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay)); - } else if (this._repeat !== 0) { - value += this._cycle * (this._duration + this._repeatDelay); - } - return this.totalTime(value, suppressEvents); - }; - - p.repeat = function(value) { - if (!arguments.length) { - return this._repeat; - } - this._repeat = value; - return this._uncache(true); - }; - - p.repeatDelay = function(value) { - if (!arguments.length) { - return this._repeatDelay; - } - this._repeatDelay = value; - return this._uncache(true); - }; - - p.yoyo = function(value) { - if (!arguments.length) { - return this._yoyo; - } - this._yoyo = value; - return this; - }; - - p.currentLabel = function(value) { - if (!arguments.length) { - return this.getLabelBefore(this._time + 0.00000001); - } - return this.seek(value, true); - }; - - return TimelineMax; - - }, true); - - - - - - - -/* - * ---------------------------------------------------------------- - * TimelineLite - * ---------------------------------------------------------------- - */ - - window._gsDefine("TimelineLite", ["core.Animation","core.SimpleTimeline","TweenLite"], function(Animation, SimpleTimeline, TweenLite) { - - var TimelineLite = function(vars) { - SimpleTimeline.call(this, vars); - this._labels = {}; - this.autoRemoveChildren = (this.vars.autoRemoveChildren === true); - this.smoothChildTiming = (this.vars.smoothChildTiming === true); - this._sortChildren = true; - this._onUpdate = this.vars.onUpdate; - var v = this.vars, - val, p; - for (p in v) { - val = v[p]; - if (val instanceof Array) if (val.join("").indexOf("{self}") !== -1) { - v[p] = this._swapSelfInParams(val); - } - } - if (v.tweens instanceof Array) { - this.add(v.tweens, 0, v.align, v.stagger); - } - }, - _blankArray = [], - _copy = function(vars) { - var copy = {}, p; - for (p in vars) { - copy[p] = vars[p]; - } - return copy; - }, - _pauseCallback = function(tween, callback, params, scope) { - tween._timeline.pause(tween._startTime); - if (callback) { - callback.apply(scope || tween._timeline, params || _blankArray); - } - }, - _slice = _blankArray.slice, - p = TimelineLite.prototype = new SimpleTimeline(); - - TimelineLite.version = "1.10.2"; - p.constructor = TimelineLite; - p.kill()._gc = false; - - p.to = function(target, duration, vars, position) { - return duration ? this.add( new TweenLite(target, duration, vars), position) : this.set(target, vars, position); - }; - - p.from = function(target, duration, vars, position) { - return this.add( TweenLite.from(target, duration, vars), position); - }; - - p.fromTo = function(target, duration, fromVars, toVars, position) { - return duration ? this.add( TweenLite.fromTo(target, duration, fromVars, toVars), position) : this.set(target, toVars, position); - }; - - p.staggerTo = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { - var tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, onCompleteScope:onCompleteAllScope}), - i; - if (typeof(targets) === "string") { - targets = TweenLite.selector(targets) || targets; - } - if (!(targets instanceof Array) && targets.length && targets !== window && targets[0] && (targets[0] === window || (targets[0].nodeType && targets[0].style && !targets.nodeType))) { //senses if the targets object is a selector. If it is, we should translate it into an array. - targets = _slice.call(targets, 0); - } - stagger = stagger || 0; - for (i = 0; i < targets.length; i++) { - if (vars.startAt) { - vars.startAt = _copy(vars.startAt); - } - tl.to(targets[i], duration, _copy(vars), i * stagger); - } - return this.add(tl, position); - }; - - p.staggerFrom = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { - vars.immediateRender = (vars.immediateRender != false); - vars.runBackwards = true; - return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope); - }; - - p.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { - toVars.startAt = fromVars; - toVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false); - return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope); - }; - - p.call = function(callback, params, scope, position) { - return this.add( TweenLite.delayedCall(0, callback, params, scope), position); - }; - - p.set = function(target, vars, position) { - position = this._parseTimeOrLabel(position, 0, true); - if (vars.immediateRender == null) { - vars.immediateRender = (position === this._time && !this._paused); - } - return this.add( new TweenLite(target, 0, vars), position); - }; - - TimelineLite.exportRoot = function(vars, ignoreDelayedCalls) { - vars = vars || {}; - if (vars.smoothChildTiming == null) { - vars.smoothChildTiming = true; - } - var tl = new TimelineLite(vars), - root = tl._timeline, - tween, next; - if (ignoreDelayedCalls == null) { - ignoreDelayedCalls = true; - } - root._remove(tl, true); - tl._startTime = 0; - tl._rawPrevTime = tl._time = tl._totalTime = root._time; - tween = root._first; - while (tween) { - next = tween._next; - if (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) { - tl.add(tween, tween._startTime - tween._delay); - } - tween = next; - } - root.add(tl, 0); - return tl; - }; - - p.add = function(value, position, align, stagger) { - var curTime, l, i, child, tl; - if (typeof(position) !== "number") { - position = this._parseTimeOrLabel(position, 0, true, value); - } - if (!(value instanceof Animation)) { - if (value instanceof Array) { - align = align || "normal"; - stagger = stagger || 0; - curTime = position; - l = value.length; - for (i = 0; i < l; i++) { - if ((child = value[i]) instanceof Array) { - child = new TimelineLite({tweens:child}); - } - this.add(child, curTime); - if (typeof(child) !== "string" && typeof(child) !== "function") { - if (align === "sequence") { - curTime = child._startTime + (child.totalDuration() / child._timeScale); - } else if (align === "start") { - child._startTime -= child.delay(); - } - } - curTime += stagger; - } - return this._uncache(true); - } else if (typeof(value) === "string") { - return this.addLabel(value, position); - } else if (typeof(value) === "function") { - value = TweenLite.delayedCall(0, value); - } else { - throw("Cannot add " + value + " into the timeline; it is neither a tween, timeline, function, nor a string."); - } - } - - SimpleTimeline.prototype.add.call(this, value, position); - - //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. - if (this._gc) if (!this._paused) if (this._time === this._duration) if (this._time < this.duration()) { - //in case any of the anscestors had completed but should now be enabled... - tl = this; - while (tl._gc && tl._timeline) { - if (tl._timeline.smoothChildTiming) { - tl.totalTime(tl._totalTime, true); //also enables them - } else { - tl._enabled(true, false); - } - tl = tl._timeline; - } - } - - return this; - }; - - p.remove = function(value) { - if (value instanceof Animation) { - return this._remove(value, false); - } else if (value instanceof Array) { - var i = value.length; - while (--i > -1) { - this.remove(value[i]); - } - return this; - } else if (typeof(value) === "string") { - return this.removeLabel(value); - } - return this.kill(null, value); - }; - - p._remove = function(tween, skipDisable) { - SimpleTimeline.prototype._remove.call(this, tween, skipDisable); - if (!this._last) { - this._time = this._totalTime = 0; - } else if (this._time > this._last._startTime) { - this._time = this.duration(); - this._totalTime = this._totalDuration; - } - return this; - }; - - p.append = function(value, offsetOrLabel) { - return this.add(value, this._parseTimeOrLabel(null, offsetOrLabel, true, value)); - }; - - p.insert = p.insertMultiple = function(value, position, align, stagger) { - return this.add(value, position || 0, align, stagger); - }; - - p.appendMultiple = function(tweens, offsetOrLabel, align, stagger) { - return this.add(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true, tweens), align, stagger); - }; - - p.addLabel = function(label, position) { - this._labels[label] = this._parseTimeOrLabel(position); - return this; - }; - - p.addPause = function(position, callback, params, scope) { - return this.call(_pauseCallback, ["{self}", callback, params, scope], this, position); - }; - - p.removeLabel = function(label) { - delete this._labels[label]; - return this; - }; - - p.getLabelTime = function(label) { - return (this._labels[label] != null) ? this._labels[label] : -1; - }; - - p._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent, ignore) { - var i; - //if we're about to add a tween/timeline (or an array of them) that's already a child of this timeline, we should remove it first so that it doesn't contaminate the duration(). - if (ignore instanceof Animation && ignore.timeline === this) { - this.remove(ignore); - } else if (ignore instanceof Array) { - i = ignore.length; - while (--i > -1) { - if (ignore[i] instanceof Animation && ignore[i].timeline === this) { - this.remove(ignore[i]); - } - } - } - if (typeof(offsetOrLabel) === "string") { - return this._parseTimeOrLabel(offsetOrLabel, (appendIfAbsent && typeof(timeOrLabel) === "number" && this._labels[offsetOrLabel] == null) ? timeOrLabel - this.duration() : 0, appendIfAbsent); - } - offsetOrLabel = offsetOrLabel || 0; - if (typeof(timeOrLabel) === "string" && (isNaN(timeOrLabel) || this._labels[timeOrLabel] != null)) { //if the string is a number like "1", check to see if there's a label with that name, otherwise interpret it as a number (absolute value). - i = timeOrLabel.indexOf("="); - if (i === -1) { - if (this._labels[timeOrLabel] == null) { - return appendIfAbsent ? (this._labels[timeOrLabel] = this.duration() + offsetOrLabel) : offsetOrLabel; - } - return this._labels[timeOrLabel] + offsetOrLabel; - } - offsetOrLabel = parseInt(timeOrLabel.charAt(i-1) + "1", 10) * Number(timeOrLabel.substr(i+1)); - timeOrLabel = (i > 1) ? this._parseTimeOrLabel(timeOrLabel.substr(0, i-1), 0, appendIfAbsent) : this.duration(); - } else if (timeOrLabel == null) { - timeOrLabel = this.duration(); - } - return Number(timeOrLabel) + offsetOrLabel; - }; - - p.seek = function(position, suppressEvents) { - return this.totalTime((typeof(position) === "number") ? position : this._parseTimeOrLabel(position), (suppressEvents !== false)); - }; - - p.stop = function() { - return this.paused(true); - }; - - p.gotoAndPlay = function(position, suppressEvents) { - return this.play(position, suppressEvents); - }; - - p.gotoAndStop = function(position, suppressEvents) { - return this.pause(position, suppressEvents); - }; - - p.render = function(time, suppressEvents, force) { - if (this._gc) { - this._enabled(true, false); - } - var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), - prevTime = this._time, - prevStart = this._startTime, - prevTimeScale = this._timeScale, - prevPaused = this._paused, - tween, isComplete, next, callback, internalForce; - if (time >= totalDur) { - this._totalTime = this._time = totalDur; - if (!this._reversed) if (!this._hasPausedChild()) { - isComplete = true; - callback = "onComplete"; - if (this._duration === 0) if (time === 0 || this._rawPrevTime < 0) if (this._rawPrevTime !== time && this._first) { //In order to accommodate zero-duration timelines, we must discern the momentum/direction of time in order to render values properly when the "playhead" goes past 0 in the forward direction or lands directly on it, and also when it moves past it in the backward direction (from a postitive time to a negative time). - internalForce = true; - if (this._rawPrevTime > 0) { - callback = "onReverseComplete"; - } - } - } - this._rawPrevTime = time; - time = totalDur + 0.000001; //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) - - } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0. - this._totalTime = this._time = 0; - if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime > 0)) { - callback = "onReverseComplete"; - isComplete = this._reversed; - } - if (time < 0) { - this._active = false; - if (this._duration === 0) if (this._rawPrevTime >= 0 && this._first) { //zero-duration timelines 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. - internalForce = true; - } - this._rawPrevTime = time; - } else { - this._rawPrevTime = time; - time = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline) - if (!this._initted) { - internalForce = true; - } - } - - } else { - this._totalTime = this._time = this._rawPrevTime = time; - } - if ((this._time === prevTime || !this._first) && !force && !internalForce) { - return; - } else if (!this._initted) { - this._initted = true; - } - - if (!this._active) if (!this._paused && this._time !== prevTime && time > 0) { - this._active = true; //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example. - } - - if (prevTime === 0) if (this.vars.onStart) if (this._time !== 0) if (!suppressEvents) { - this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); - } - - if (this._time >= prevTime) { - tween = this._first; - while (tween) { - next = tween._next; //record it here because the value could change after rendering... - if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering - break; - } else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) { - - if (!tween._reversed) { - tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force); - } else { - tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force); - } - - } - tween = next; - } - } else { - tween = this._last; - while (tween) { - next = tween._prev; //record it here because the value could change after rendering... - if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering - break; - } else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) { - - if (!tween._reversed) { - tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force); - } else { - tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force); - } - - } - tween = next; - } - } - - if (this._onUpdate) if (!suppressEvents) { - this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); - } - - if (callback) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate - if (isComplete) { - if (this._timeline.autoRemoveChildren) { - this._enabled(false, false); - } - this._active = false; - } - if (!suppressEvents && this.vars[callback]) { - this.vars[callback].apply(this.vars[callback + "Scope"] || this, this.vars[callback + "Params"] || _blankArray); - } - } - }; - - p._hasPausedChild = function() { - var tween = this._first; - while (tween) { - if (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) { - return true; - } - tween = tween._next; - } - return false; - }; - - p.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) { - ignoreBeforeTime = ignoreBeforeTime || -9999999999; - var a = [], - tween = this._first, - cnt = 0; - while (tween) { - if (tween._startTime < ignoreBeforeTime) { - //do nothing - } else if (tween instanceof TweenLite) { - if (tweens !== false) { - a[cnt++] = tween; - } - } else { - if (timelines !== false) { - a[cnt++] = tween; - } - if (nested !== false) { - a = a.concat(tween.getChildren(true, tweens, timelines)); - cnt = a.length; - } - } - tween = tween._next; - } - return a; - }; - - p.getTweensOf = function(target, nested) { - var tweens = TweenLite.getTweensOf(target), - i = tweens.length, - a = [], - cnt = 0; - while (--i > -1) { - if (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) { - a[cnt++] = tweens[i]; - } - } - return a; - }; - - p._contains = function(tween) { - var tl = tween.timeline; - while (tl) { - if (tl === this) { - return true; - } - tl = tl.timeline; - } - return false; - }; - - p.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) { - ignoreBeforeTime = ignoreBeforeTime || 0; - var tween = this._first, - labels = this._labels, - p; - while (tween) { - if (tween._startTime >= ignoreBeforeTime) { - tween._startTime += amount; - } - tween = tween._next; - } - if (adjustLabels) { - for (p in labels) { - if (labels[p] >= ignoreBeforeTime) { - labels[p] += amount; - } - } - } - return this._uncache(true); - }; - - p._kill = function(vars, target) { - if (!vars && !target) { - return this._enabled(false, false); - } - var tweens = (!target) ? this.getChildren(true, true, false) : this.getTweensOf(target), - i = tweens.length, - changed = false; - while (--i > -1) { - if (tweens[i]._kill(vars, target)) { - changed = true; - } - } - return changed; - }; - - p.clear = function(labels) { - var tweens = this.getChildren(false, true, true), - i = tweens.length; - this._time = this._totalTime = 0; - while (--i > -1) { - tweens[i]._enabled(false, false); - } - if (labels !== false) { - this._labels = {}; - } - return this._uncache(true); - }; - - p.invalidate = function() { - var tween = this._first; - while (tween) { - tween.invalidate(); - tween = tween._next; - } - return this; - }; - - p._enabled = function(enabled, ignoreTimeline) { - if (enabled === this._gc) { - var tween = this._first; - while (tween) { - tween._enabled(enabled, true); - tween = tween._next; - } - } - return SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline); - }; - - p.progress = function(value) { - return (!arguments.length) ? this._time / this.duration() : this.totalTime(this.duration() * value, false); - }; - - p.duration = function(value) { - if (!arguments.length) { - if (this._dirty) { - this.totalDuration(); //just triggers recalculation - } - return this._duration; - } - if (this.duration() !== 0 && value !== 0) { - this.timeScale(this._duration / value); - } - return this; - }; - - p.totalDuration = function(value) { - if (!arguments.length) { - if (this._dirty) { - var max = 0, - tween = this._last, - prevStart = 999999999999, - prev, end; - while (tween) { - prev = tween._prev; //record it here in case the tween changes position in the sequence... - if (tween._dirty) { - tween.totalDuration(); //could change the tween._startTime, so make sure the tween's cache is clean before analyzing it. - } - if (tween._startTime > prevStart && this._sortChildren && !tween._paused) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence - this.add(tween, tween._startTime - tween._delay); - } else { - prevStart = tween._startTime; - } - if (tween._startTime < 0 && !tween._paused) { //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found. - max -= tween._startTime; - if (this._timeline.smoothChildTiming) { - this._startTime += tween._startTime / this._timeScale; - } - this.shiftChildren(-tween._startTime, false, -9999999999); - prevStart = 0; - } - end = tween._startTime + (tween._totalDuration / tween._timeScale); - if (end > max) { - max = end; - } - tween = prev; - } - this._duration = this._totalDuration = max; - this._dirty = false; - } - return this._totalDuration; - } - if (this.totalDuration() !== 0) if (value !== 0) { - this.timeScale(this._totalDuration / value); - } - return this; - }; - - p.usesFrames = function() { - var tl = this._timeline; - while (tl._timeline) { - tl = tl._timeline; - } - return (tl === Animation._rootFramesTimeline); - }; - - p.rawTime = function() { - return (this._paused || (this._totalTime !== 0 && this._totalTime !== this._totalDuration)) ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale; - }; - - return TimelineLite; - - }, true); - -}); if (window._gsDefine) { window._gsQueue.pop()(); } \ No newline at end of file diff --git a/js/libs/gsap/TimelineMax.min.js b/js/libs/gsap/TimelineMax.min.js new file mode 100644 index 00000000..621bb55a --- /dev/null +++ b/js/libs/gsap/TimelineMax.min.js @@ -0,0 +1,12 @@ +/*! + * VERSION: 1.20.3 + * DATE: 2017-10-02 + * UPDATES AND DOCS AT: http://greensock.com + * + * @license Copyright (c) 2008-2017, GreenSock. All rights reserved. + * This work is subject to the terms at http://greensock.com/standard-license or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("TimelineMax",["TimelineLite","TweenLite","easing.Ease"],function(a,b,c){var d=function(b){a.call(this,b),this._repeat=this.vars.repeat||0,this._repeatDelay=this.vars.repeatDelay||0,this._cycle=0,this._yoyo=this.vars.yoyo===!0,this._dirty=!0},e=1e-10,f=b._internals,g=f.lazyTweens,h=f.lazyRender,i=_gsScope._gsDefine.globals,j=new c(null,null,1,0),k=d.prototype=new a;return k.constructor=d,k.kill()._gc=!1,d.version="1.20.3",k.invalidate=function(){return this._yoyo=this.vars.yoyo===!0,this._repeat=this.vars.repeat||0,this._repeatDelay=this.vars.repeatDelay||0,this._uncache(!0),a.prototype.invalidate.call(this)},k.addCallback=function(a,c,d,e){return this.add(b.delayedCall(0,a,d,e),c)},k.removeCallback=function(a,b){if(a)if(null==b)this._kill(null,a);else for(var c=this.getTweensOf(a,!1),d=c.length,e=this._parseTimeOrLabel(b);--d>-1;)c[d]._startTime===e&&c[d]._enabled(!1,!1);return this},k.removePause=function(b){return this.removeCallback(a._internals.pauseCallback,b)},k.tweenTo=function(a,c){c=c||{};var d,e,f,g={ease:j,useFrames:this.usesFrames(),immediateRender:!1},h=c.repeat&&i.TweenMax||b;for(e in c)g[e]=c[e];return g.time=this._parseTimeOrLabel(a),d=Math.abs(Number(g.time)-this._time)/this._timeScale||.001,f=new h(this,d,g),g.onStart=function(){f.target.paused(!0),f.vars.time!==f.target.time()&&d===f.duration()&&f.duration(Math.abs(f.vars.time-f.target.time())/f.target._timeScale),c.onStart&&c.onStart.apply(c.onStartScope||c.callbackScope||f,c.onStartParams||[])},f},k.tweenFromTo=function(a,b,c){c=c||{},a=this._parseTimeOrLabel(a),c.startAt={onComplete:this.seek,onCompleteParams:[a],callbackScope:this},c.immediateRender=c.immediateRender!==!1;var d=this.tweenTo(b,c);return d.duration(Math.abs(d.vars.time-a)/this._timeScale||.001)},k.render=function(a,b,c){this._gc&&this._enabled(!0,!1);var d,f,i,j,k,l,m,n,o=this._time,p=this._dirty?this.totalDuration():this._totalDuration,q=this._duration,r=this._totalTime,s=this._startTime,t=this._timeScale,u=this._rawPrevTime,v=this._paused,w=this._cycle;if(o!==this._time&&(a+=this._time-o),a>=p-1e-7&&a>=0)this._locked||(this._totalTime=p,this._cycle=this._repeat),this._reversed||this._hasPausedChild()||(f=!0,j="onComplete",k=!!this._timeline.autoRemoveChildren,0===this._duration&&(0>=a&&a>=-1e-7||0>u||u===e)&&u!==a&&this._first&&(k=!0,u>e&&(j="onReverseComplete"))),this._rawPrevTime=this._duration||!b||a||this._rawPrevTime===a?a:e,this._yoyo&&0!==(1&this._cycle)?this._time=a=0:(this._time=q,a=q+1e-4);else if(1e-7>a)if(this._locked||(this._totalTime=this._cycle=0),this._time=0,(0!==o||0===q&&u!==e&&(u>0||0>a&&u>=0)&&!this._locked)&&(j="onReverseComplete",f=this._reversed),0>a)this._active=!1,this._timeline.autoRemoveChildren&&this._reversed?(k=f=!0,j="onReverseComplete"):u>=0&&this._first&&(k=!0),this._rawPrevTime=a;else{if(this._rawPrevTime=q||!b||a||this._rawPrevTime===a?a:e,0===a&&f)for(d=this._first;d&&0===d._startTime;)d._duration||(f=!1),d=d._next;a=0,this._initted||(k=!0)}else if(0===q&&0>u&&(k=!0),this._time=this._rawPrevTime=a,this._locked||(this._totalTime=a,0!==this._repeat&&(l=q+this._repeatDelay,this._cycle=this._totalTime/l>>0,0!==this._cycle&&this._cycle===this._totalTime/l&&a>=r&&this._cycle--,this._time=this._totalTime-this._cycle*l,this._yoyo&&0!==(1&this._cycle)&&(this._time=q-this._time),this._time>q?(this._time=q,a=q+1e-4):this._time<0?this._time=a=0:a=this._time)),this._hasPause&&!this._forcingPlayhead&&!b){if(a=this._time,a>=o||this._repeat&&w!==this._cycle)for(d=this._first;d&&d._startTime<=a&&!m;)d._duration||"isPause"!==d.data||d.ratio||0===d._startTime&&0===this._rawPrevTime||(m=d),d=d._next;else for(d=this._last;d&&d._startTime>=a&&!m;)d._duration||"isPause"===d.data&&d._rawPrevTime>0&&(m=d),d=d._prev;m&&m._startTime0&&(this._active=!0),0===r&&this.vars.onStart&&(0===this._totalTime&&this._totalDuration||b||this._callback("onStart")),n=this._time,n>=o)for(d=this._first;d&&(i=d._next,n===this._time&&(!this._paused||v));)(d._active||d._startTime<=this._time&&!d._paused&&!d._gc)&&(m===d&&this.pause(),d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)),d=i;else for(d=this._last;d&&(i=d._prev,n===this._time&&(!this._paused||v));){if(d._active||d._startTime<=o&&!d._paused&&!d._gc){if(m===d){for(m=d._prev;m&&m.endTime()>this._time;)m.render(m._reversed?m.totalDuration()-(a-m._startTime)*m._timeScale:(a-m._startTime)*m._timeScale,b,c),m=m._prev;m=null,this.pause()}d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)}d=i}this._onUpdate&&(b||(g.length&&h(),this._callback("onUpdate"))),j&&(this._locked||this._gc||(s===this._startTime||t!==this._timeScale)&&(0===this._time||p>=this.totalDuration())&&(f&&(g.length&&h(),this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!b&&this.vars[j]&&this._callback(j)))},k.getActive=function(a,b,c){null==a&&(a=!0),null==b&&(b=!0),null==c&&(c=!1);var d,e,f=[],g=this.getChildren(a,b,c),h=0,i=g.length;for(d=0;i>d;d++)e=g[d],e.isActive()&&(f[h++]=e);return f},k.getLabelAfter=function(a){a||0!==a&&(a=this._time);var b,c=this.getLabelsArray(),d=c.length;for(b=0;d>b;b++)if(c[b].time>a)return c[b].name;return null},k.getLabelBefore=function(a){null==a&&(a=this._time);for(var b=this.getLabelsArray(),c=b.length;--c>-1;)if(b[c].timethis._duration&&(a=this._duration),this._yoyo&&0!==(1&this._cycle)?a=this._duration-a+this._cycle*(this._duration+this._repeatDelay):0!==this._repeat&&(a+=this._cycle*(this._duration+this._repeatDelay)),this.totalTime(a,b)):this._time},k.repeat=function(a){return arguments.length?(this._repeat=a,this._uncache(!0)):this._repeat},k.repeatDelay=function(a){return arguments.length?(this._repeatDelay=a,this._uncache(!0)):this._repeatDelay},k.yoyo=function(a){return arguments.length?(this._yoyo=a,this):this._yoyo},k.currentLabel=function(a){return arguments.length?this.seek(a,!0):this.getLabelBefore(this._time+1e-8)},d},!0),_gsScope._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(a,b,c){var d=function(a){b.call(this,a),this._labels={},this.autoRemoveChildren=this.vars.autoRemoveChildren===!0,this.smoothChildTiming=this.vars.smoothChildTiming===!0,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var c,d,e=this.vars;for(d in e)c=e[d],i(c)&&-1!==c.join("").indexOf("{self}")&&(e[d]=this._swapSelfInParams(c));i(e.tweens)&&this.add(e.tweens,0,e.align,e.stagger)},e=1e-10,f=c._internals,g=d._internals={},h=f.isSelector,i=f.isArray,j=f.lazyTweens,k=f.lazyRender,l=_gsScope._gsDefine.globals,m=function(a){var b,c={};for(b in a)c[b]=a[b];return c},n=function(a,b,c){var d,e,f=a.cycle;for(d in f)e=f[d],a[d]="function"==typeof e?e(c,b[c]):e[c%e.length];delete a.cycle},o=g.pauseCallback=function(){},p=function(a){var b,c=[],d=a.length;for(b=0;b!==d;c.push(a[b++]));return c},q=d.prototype=new b;return d.version="1.20.3",q.constructor=d,q.kill()._gc=q._forcingPlayhead=q._hasPause=!1,q.to=function(a,b,d,e){var f=d.repeat&&l.TweenMax||c;return b?this.add(new f(a,b,d),e):this.set(a,d,e)},q.from=function(a,b,d,e){return this.add((d.repeat&&l.TweenMax||c).from(a,b,d),e)},q.fromTo=function(a,b,d,e,f){var g=e.repeat&&l.TweenMax||c;return b?this.add(g.fromTo(a,b,d,e),f):this.set(a,e,f)},q.staggerTo=function(a,b,e,f,g,i,j,k){var l,o,q=new d({onComplete:i,onCompleteParams:j,callbackScope:k,smoothChildTiming:this.smoothChildTiming}),r=e.cycle;for("string"==typeof a&&(a=c.selector(a)||a),a=a||[],h(a)&&(a=p(a)),f=f||0,0>f&&(a=p(a),a.reverse(),f*=-1),o=0;of&&(e=1),i.add(g,f)),g=h;return j.add(i,0),e&&i.totalDuration(),i},q.add=function(e,f,g,h){var j,k,l,m,n,o;if("number"!=typeof f&&(f=this._parseTimeOrLabel(f,0,!0,e)),!(e instanceof a)){if(e instanceof Array||e&&e.push&&i(e)){for(g=g||"normal",h=h||0,j=f,k=e.length,l=0;k>l;l++)i(m=e[l])&&(m=new d({tweens:m})),this.add(m,j),"string"!=typeof m&&"function"!=typeof m&&("sequence"===g?j=m._startTime+m.totalDuration()/m._timeScale:"start"===g&&(m._startTime-=m.delay())),j+=h;return this._uncache(!0)}if("string"==typeof e)return this.addLabel(e,f);if("function"!=typeof e)throw"Cannot add "+e+" into the timeline; it is not a tween, timeline, function, or string.";e=c.delayedCall(0,e)}if(b.prototype.add.call(this,e,f),e._time&&e.render((this.rawTime()-e._startTime)*e._timeScale,!1,!1),(this._gc||this._time===this._duration)&&!this._paused&&this._duratione._startTime;n._timeline;)o&&n._timeline.smoothChildTiming?n.totalTime(n._totalTime,!0):n._gc&&n._enabled(!0,!1),n=n._timeline;return this},q.remove=function(b){if(b instanceof a){this._remove(b,!1);var c=b._timeline=b.vars.useFrames?a._rootFramesTimeline:a._rootTimeline;return b._startTime=(b._paused?b._pauseTime:c._time)-(b._reversed?b.totalDuration()-b._totalTime:b._totalTime)/b._timeScale,this}if(b instanceof Array||b&&b.push&&i(b)){for(var d=b.length;--d>-1;)this.remove(b[d]);return this}return"string"==typeof b?this.removeLabel(b):this.kill(null,b)},q._remove=function(a,c){b.prototype._remove.call(this,a,c);var d=this._last;return d?this._time>this.duration()&&(this._time=this._duration,this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},q.append=function(a,b){return this.add(a,this._parseTimeOrLabel(null,b,!0,a))},q.insert=q.insertMultiple=function(a,b,c,d){return this.add(a,b||0,c,d)},q.appendMultiple=function(a,b,c,d){return this.add(a,this._parseTimeOrLabel(null,b,!0,a),c,d)},q.addLabel=function(a,b){return this._labels[a]=this._parseTimeOrLabel(b),this},q.addPause=function(a,b,d,e){var f=c.delayedCall(0,o,d,e||this);return f.vars.onComplete=f.vars.onReverseComplete=b,f.data="isPause",this._hasPause=!0,this.add(f,a)},q.removeLabel=function(a){return delete this._labels[a],this},q.getLabelTime=function(a){return null!=this._labels[a]?this._labels[a]:-1},q._parseTimeOrLabel=function(b,c,d,e){var f,g;if(e instanceof a&&e.timeline===this)this.remove(e);else if(e&&(e instanceof Array||e.push&&i(e)))for(g=e.length;--g>-1;)e[g]instanceof a&&e[g].timeline===this&&this.remove(e[g]);if(f="number"!=typeof b||c?this.duration()>99999999999?this.recent().endTime(!1):this._duration:0,"string"==typeof c)return this._parseTimeOrLabel(c,d&&"number"==typeof b&&null==this._labels[c]?b-f:0,d);if(c=c||0,"string"!=typeof b||!isNaN(b)&&null==this._labels[b])null==b&&(b=f);else{if(g=b.indexOf("="),-1===g)return null==this._labels[b]?d?this._labels[b]=f+c:c:this._labels[b]+c;c=parseInt(b.charAt(g-1)+"1",10)*Number(b.substr(g+1)),b=g>1?this._parseTimeOrLabel(b.substr(0,g-1),0,d):f}return Number(b)+c},q.seek=function(a,b){return this.totalTime("number"==typeof a?a:this._parseTimeOrLabel(a),b!==!1)},q.stop=function(){return this.paused(!0)},q.gotoAndPlay=function(a,b){return this.play(a,b)},q.gotoAndStop=function(a,b){return this.pause(a,b)},q.render=function(a,b,c){this._gc&&this._enabled(!0,!1);var d,f,g,h,i,l,m,n=this._dirty?this.totalDuration():this._totalDuration,o=this._time,p=this._startTime,q=this._timeScale,r=this._paused;if(a>=n-1e-7&&a>=0)this._totalTime=this._time=n,this._reversed||this._hasPausedChild()||(f=!0,h="onComplete",i=!!this._timeline.autoRemoveChildren,0===this._duration&&(0>=a&&a>=-1e-7||this._rawPrevTime<0||this._rawPrevTime===e)&&this._rawPrevTime!==a&&this._first&&(i=!0,this._rawPrevTime>e&&(h="onReverseComplete"))),this._rawPrevTime=this._duration||!b||a||this._rawPrevTime===a?a:e,a=n+1e-4;else if(1e-7>a)if(this._totalTime=this._time=0,(0!==o||0===this._duration&&this._rawPrevTime!==e&&(this._rawPrevTime>0||0>a&&this._rawPrevTime>=0))&&(h="onReverseComplete",f=this._reversed),0>a)this._active=!1,this._timeline.autoRemoveChildren&&this._reversed?(i=f=!0,h="onReverseComplete"):this._rawPrevTime>=0&&this._first&&(i=!0),this._rawPrevTime=a;else{if(this._rawPrevTime=this._duration||!b||a||this._rawPrevTime===a?a:e,0===a&&f)for(d=this._first;d&&0===d._startTime;)d._duration||(f=!1),d=d._next;a=0,this._initted||(i=!0)}else{if(this._hasPause&&!this._forcingPlayhead&&!b){if(a>=o)for(d=this._first;d&&d._startTime<=a&&!l;)d._duration||"isPause"!==d.data||d.ratio||0===d._startTime&&0===this._rawPrevTime||(l=d),d=d._next;else for(d=this._last;d&&d._startTime>=a&&!l;)d._duration||"isPause"===d.data&&d._rawPrevTime>0&&(l=d),d=d._prev;l&&(this._time=a=l._startTime,this._totalTime=a+this._cycle*(this._totalDuration+this._repeatDelay))}this._totalTime=this._time=this._rawPrevTime=a}if(this._time!==o&&this._first||c||i||l){if(this._initted||(this._initted=!0),this._active||!this._paused&&this._time!==o&&a>0&&(this._active=!0),0===o&&this.vars.onStart&&(0===this._time&&this._duration||b||this._callback("onStart")),m=this._time,m>=o)for(d=this._first;d&&(g=d._next,m===this._time&&(!this._paused||r));)(d._active||d._startTime<=m&&!d._paused&&!d._gc)&&(l===d&&this.pause(),d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)),d=g;else for(d=this._last;d&&(g=d._prev,m===this._time&&(!this._paused||r));){if(d._active||d._startTime<=o&&!d._paused&&!d._gc){if(l===d){for(l=d._prev;l&&l.endTime()>this._time;)l.render(l._reversed?l.totalDuration()-(a-l._startTime)*l._timeScale:(a-l._startTime)*l._timeScale,b,c),l=l._prev;l=null,this.pause()}d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)}d=g}this._onUpdate&&(b||(j.length&&k(),this._callback("onUpdate"))),h&&(this._gc||(p===this._startTime||q!==this._timeScale)&&(0===this._time||n>=this.totalDuration())&&(f&&(j.length&&k(),this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!b&&this.vars[h]&&this._callback(h)))}},q._hasPausedChild=function(){for(var a=this._first;a;){if(a._paused||a instanceof d&&a._hasPausedChild())return!0;a=a._next}return!1},q.getChildren=function(a,b,d,e){e=e||-9999999999;for(var f=[],g=this._first,h=0;g;)g._startTime-1;)(d[e].timeline===this||b&&this._contains(d[e]))&&(g[h++]=d[e]);return f&&this._enabled(!1,!0),g},q.recent=function(){return this._recent},q._contains=function(a){for(var b=a.timeline;b;){if(b===this)return!0;b=b.timeline}return!1},q.shiftChildren=function(a,b,c){c=c||0;for(var d,e=this._first,f=this._labels;e;)e._startTime>=c&&(e._startTime+=a),e=e._next;if(b)for(d in f)f[d]>=c&&(f[d]+=a);return this._uncache(!0)},q._kill=function(a,b){if(!a&&!b)return this._enabled(!1,!1);for(var c=b?this.getTweensOf(b):this.getChildren(!0,!0,!1),d=c.length,e=!1;--d>-1;)c[d]._kill(a,b)&&(e=!0);return e},q.clear=function(a){var b=this.getChildren(!1,!0,!0),c=b.length;for(this._time=this._totalTime=0;--c>-1;)b[c]._enabled(!1,!1);return a!==!1&&(this._labels={}),this._uncache(!0)},q.invalidate=function(){for(var b=this._first;b;)b.invalidate(),b=b._next;return a.prototype.invalidate.call(this)},q._enabled=function(a,c){if(a===this._gc)for(var d=this._first;d;)d._enabled(a,!0),d=d._next;return b.prototype._enabled.call(this,a,c)},q.totalTime=function(b,c,d){this._forcingPlayhead=!0;var e=a.prototype.totalTime.apply(this,arguments);return this._forcingPlayhead=!1,e},q.duration=function(a){return arguments.length?(0!==this.duration()&&0!==a&&this.timeScale(this._duration/a),this):(this._dirty&&this.totalDuration(),this._duration)},q.totalDuration=function(a){if(!arguments.length){if(this._dirty){for(var b,c,d=0,e=this._last,f=999999999999;e;)b=e._prev,e._dirty&&e.totalDuration(),e._startTime>f&&this._sortChildren&&!e._paused&&!this._calculatingDuration?(this._calculatingDuration=1,this.add(e,e._startTime-e._delay),this._calculatingDuration=0):f=e._startTime,e._startTime<0&&!e._paused&&(d-=e._startTime,this._timeline.smoothChildTiming&&(this._startTime+=e._startTime/this._timeScale,this._time-=e._startTime,this._totalTime-=e._startTime,this._rawPrevTime-=e._startTime),this.shiftChildren(-e._startTime,!1,-9999999999),f=0),c=e._startTime+e._totalDuration/e._timeScale,c>d&&(d=c),e=b;this._duration=this._totalDuration=d,this._dirty=!1}return this._totalDuration}return a&&this.totalDuration()?this.timeScale(this._totalDuration/a):this},q.paused=function(b){if(!b)for(var c=this._first,d=this._time;c;)c._startTime===d&&"isPause"===c.data&&(c._rawPrevTime=0),c=c._next;return a.prototype.paused.apply(this,arguments)},q.usesFrames=function(){for(var b=this._timeline;b._timeline;)b=b._timeline;return b===a._rootFramesTimeline},q.rawTime=function(a){return a&&(this._paused||this._repeat&&this.time()>0&&this.totalProgress()<1)?this._totalTime%(this._duration+this._repeatDelay):this._paused?this._totalTime:(this._timeline.rawTime(a)-this._startTime)*this._timeScale},d},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(a){"use strict";var b=function(){return(_gsScope.GreenSockGlobals||_gsScope)[a]};"undefined"!=typeof module&&module.exports?(require("./TweenLite.min.js"),module.exports=b()):"function"==typeof define&&define.amd&&define(["TweenLite"],b)}("TimelineMax"); \ No newline at end of file diff --git a/js/libs/gsap/TweenLite.js b/js/libs/gsap/TweenLite.js deleted file mode 100644 index 3fd6e347..00000000 --- a/js/libs/gsap/TweenLite.js +++ /dev/null @@ -1,1624 +0,0 @@ -/*! - * VERSION: beta 1.10.2 - * DATE: 2013-08-05 - * UPDATES AND DOCS AT: http://www.greensock.com - * - * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. - * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for - * Club GreenSock members, the software agreement that was issued with your membership. - * - * @author: Jack Doyle, jack@greensock.com - */ -(function(window) { - - "use strict"; - var _globals = window.GreenSockGlobals || window, - _namespace = function(ns) { - var a = ns.split("."), - p = _globals, i; - for (i = 0; i < a.length; i++) { - p[a[i]] = p = p[a[i]] || {}; - } - return p; - }, - gs = _namespace("com.greensock"), - _slice = [].slice, - _emptyFunc = function() {}, - a, i, p, _ticker, _tickerActive, - _defLookup = {}, - - /** - * @constructor - * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition. - * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is - * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin - * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally. - * - * Every definition will be added to a "com.greensock" global object (typically window, but if a window.GreenSockGlobals object is found, - * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere, - * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so - * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything - * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock - * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could - * sandbox the banner one like: - * - * - * - * - * - * - * - * @param {!string} ns The namespace of the class definition, leaving off "com.greensock." as that's assumed. For example, "TweenLite" or "plugins.CSSPlugin" or "easing.Back". - * @param {!Array.} dependencies An array of dependencies (described as their namespaces minus "com.greensock." prefix). For example ["TweenLite","plugins.TweenPlugin","core.Animation"] - * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition. - * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object) - */ - Definition = function(ns, dependencies, func, global) { - this.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses - _defLookup[ns] = this; - this.gsClass = null; - this.func = func; - var _classes = []; - this.check = function(init) { - var i = dependencies.length, - missing = i, - cur, a, n, cl; - while (--i > -1) { - if ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) { - _classes[i] = cur.gsClass; - missing--; - } else if (init) { - cur.sc.push(this); - } - } - if (missing === 0 && func) { - a = ("com.greensock." + ns).split("."); - n = a.pop(); - cl = _namespace(a.join("."))[n] = this.gsClass = func.apply(func, _classes); - - //exports to multiple environments - if (global) { - _globals[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.) - if (typeof(define) === "function" && define.amd){ //AMD - define((window.GreenSockAMDPath ? window.GreenSockAMDPath + "/" : "") + ns.split(".").join("/"), [], function() { return cl; }); - } else if (typeof(module) !== "undefined" && module.exports){ //node - module.exports = cl; - } - } - for (i = 0; i < this.sc.length; i++) { - this.sc[i].check(); - } - } - }; - this.check(true); - }, - - //used to create Definition instances (which basically registers a class that has dependencies). - _gsDefine = window._gsDefine = function(ns, dependencies, func, global) { - return new Definition(ns, dependencies, func, global); - }, - - //a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class). - _class = gs._class = function(ns, func, global) { - func = func || function() {}; - _gsDefine(ns, [], function(){ return func; }, global); - return func; - }; - - _gsDefine.globals = _globals; - - - -/* - * ---------------------------------------------------------------- - * Ease - * ---------------------------------------------------------------- - */ - var _baseParams = [0, 0, 1, 1], - _blankArray = [], - Ease = _class("easing.Ease", function(func, extraParams, type, power) { - this._func = func; - this._type = type || 0; - this._power = power || 0; - this._params = extraParams ? _baseParams.concat(extraParams) : _baseParams; - }, true), - _easeMap = Ease.map = {}, - _easeReg = Ease.register = function(ease, names, types, create) { - var na = names.split(","), - i = na.length, - ta = (types || "easeIn,easeOut,easeInOut").split(","), - e, name, j, type; - while (--i > -1) { - name = na[i]; - e = create ? _class("easing."+name, null, true) : gs.easing[name] || {}; - j = ta.length; - while (--j > -1) { - type = ta[j]; - _easeMap[name + "." + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease(); - } - } - }; - - p = Ease.prototype; - p._calcEnd = false; - p.getRatio = function(p) { - if (this._func) { - this._params[0] = p; - return this._func.apply(null, this._params); - } - var t = this._type, - pw = this._power, - r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2; - if (pw === 1) { - r *= r; - } else if (pw === 2) { - r *= r * r; - } else if (pw === 3) { - r *= r * r * r; - } else if (pw === 4) { - r *= r * r * r * r; - } - return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2); - }; - - //create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut) - a = ["Linear","Quad","Cubic","Quart","Quint,Strong"]; - i = a.length; - while (--i > -1) { - p = a[i]+",Power"+i; - _easeReg(new Ease(null,null,1,i), p, "easeOut", true); - _easeReg(new Ease(null,null,2,i), p, "easeIn" + ((i === 0) ? ",easeNone" : "")); - _easeReg(new Ease(null,null,3,i), p, "easeInOut"); - } - _easeMap.linear = gs.easing.Linear.easeIn; - _easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks - - -/* - * ---------------------------------------------------------------- - * EventDispatcher - * ---------------------------------------------------------------- - */ - var EventDispatcher = _class("events.EventDispatcher", function(target) { - this._listeners = {}; - this._eventTarget = target || this; - }); - p = EventDispatcher.prototype; - - p.addEventListener = function(type, callback, scope, useParam, priority) { - priority = priority || 0; - var list = this._listeners[type], - index = 0, - listener, i; - if (list == null) { - this._listeners[type] = list = []; - } - i = list.length; - while (--i > -1) { - listener = list[i]; - if (listener.c === callback && listener.s === scope) { - list.splice(i, 1); - } else if (index === 0 && listener.pr < priority) { - index = i + 1; - } - } - list.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority}); - if (this === _ticker && !_tickerActive) { - _ticker.wake(); - } - }; - - p.removeEventListener = function(type, callback) { - var list = this._listeners[type], i; - if (list) { - i = list.length; - while (--i > -1) { - if (list[i].c === callback) { - list.splice(i, 1); - return; - } - } - } - }; - - p.dispatchEvent = function(type) { - var list = this._listeners[type], - i, t, listener; - if (list) { - i = list.length; - t = this._eventTarget; - while (--i > -1) { - listener = list[i]; - if (listener.up) { - listener.c.call(listener.s || t, {type:type, target:t}); - } else { - listener.c.call(listener.s || t); - } - } - } - }; - - -/* - * ---------------------------------------------------------------- - * Ticker - * ---------------------------------------------------------------- - */ - var _reqAnimFrame = window.requestAnimationFrame, - _cancelAnimFrame = window.cancelAnimationFrame, - _getTime = Date.now || function() {return new Date().getTime();}, - _lastUpdate = _getTime(); - - //now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill. - a = ["ms","moz","webkit","o"]; - i = a.length; - while (--i > -1 && !_reqAnimFrame) { - _reqAnimFrame = window[a[i] + "RequestAnimationFrame"]; - _cancelAnimFrame = window[a[i] + "CancelAnimationFrame"] || window[a[i] + "CancelRequestAnimationFrame"]; - } - - _class("Ticker", function(fps, useRAF) { - var _self = this, - _startTime = _getTime(), - _useRAF = (useRAF !== false && _reqAnimFrame), - _fps, _req, _id, _gap, _nextTime, - _tick = function(manual) { - _lastUpdate = _getTime(); - _self.time = (_lastUpdate - _startTime) / 1000; - var overlap = _self.time - _nextTime, - dispatch; - if (!_fps || overlap > 0 || manual === true) { - _self.frame++; - _nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap); - dispatch = true; - } - if (manual !== true) { //make sure the request is made before we dispatch the "tick" event so that timing is maintained. Otherwise, if processing the "tick" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise. - _id = _req(_tick); - } - if (dispatch) { - _self.dispatchEvent("tick"); - } - }; - - EventDispatcher.call(_self); - this.time = this.frame = 0; - this.tick = function() { - _tick(true); - }; - - this.sleep = function() { - if (_id == null) { - return; - } - if (!_useRAF || !_cancelAnimFrame) { - clearTimeout(_id); - } else { - _cancelAnimFrame(_id); - } - _req = _emptyFunc; - _id = null; - if (_self === _ticker) { - _tickerActive = false; - } - }; - - this.wake = function() { - if (_id !== null) { - _self.sleep(); - } - _req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame; - if (_self === _ticker) { - _tickerActive = true; - } - _tick(2); - }; - - this.fps = function(value) { - if (!arguments.length) { - return _fps; - } - _fps = value; - _gap = 1 / (_fps || 60); - _nextTime = this.time + _gap; - _self.wake(); - }; - - this.useRAF = function(value) { - if (!arguments.length) { - return _useRAF; - } - _self.sleep(); - _useRAF = value; - _self.fps(_fps); - }; - _self.fps(fps); - - //a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition. - setTimeout(function() { - if (_useRAF && (!_id || _self.frame < 5)) { - _self.useRAF(false); - } - }, 1500); - }); - - p = gs.Ticker.prototype = new gs.events.EventDispatcher(); - p.constructor = gs.Ticker; - - -/* - * ---------------------------------------------------------------- - * Animation - * ---------------------------------------------------------------- - */ - var Animation = _class("core.Animation", function(duration, vars) { - this.vars = vars = vars || {}; - this._duration = this._totalDuration = duration || 0; - this._delay = Number(vars.delay) || 0; - this._timeScale = 1; - this._active = (vars.immediateRender === true); - this.data = vars.data; - this._reversed = (vars.reversed === true); - - if (!_rootTimeline) { - return; - } - if (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly. - _ticker.wake(); - } - - var tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline; - tl.add(this, tl._time); - - if (this.vars.paused) { - this.paused(true); - } - }); - - _ticker = Animation.ticker = new gs.Ticker(); - p = Animation.prototype; - p._dirty = p._gc = p._initted = p._paused = false; - p._totalTime = p._time = 0; - p._rawPrevTime = -1; - p._next = p._last = p._onUpdate = p._timeline = p.timeline = null; - p._paused = false; - - - //some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker. - var _checkTimeout = function() { - if (_getTime() - _lastUpdate > 2000) { - _ticker.wake(); - } - setTimeout(_checkTimeout, 2000); - }; - _checkTimeout(); - - - p.play = function(from, suppressEvents) { - if (arguments.length) { - this.seek(from, suppressEvents); - } - return this.reversed(false).paused(false); - }; - - p.pause = function(atTime, suppressEvents) { - if (arguments.length) { - this.seek(atTime, suppressEvents); - } - return this.paused(true); - }; - - p.resume = function(from, suppressEvents) { - if (arguments.length) { - this.seek(from, suppressEvents); - } - return this.paused(false); - }; - - p.seek = function(time, suppressEvents) { - return this.totalTime(Number(time), suppressEvents !== false); - }; - - p.restart = function(includeDelay, suppressEvents) { - return this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true); - }; - - p.reverse = function(from, suppressEvents) { - if (arguments.length) { - this.seek((from || this.totalDuration()), suppressEvents); - } - return this.reversed(true).paused(false); - }; - - p.render = function(time, suppressEvents, force) { - //stub - we override this method in subclasses. - }; - - p.invalidate = function() { - return this; - }; - - p._enabled = function (enabled, ignoreTimeline) { - if (!_tickerActive) { - _ticker.wake(); - } - this._gc = !enabled; - this._active = (enabled && !this._paused && this._totalTime > 0 && this._totalTime < this._totalDuration); - if (ignoreTimeline !== true) { - if (enabled && !this.timeline) { - this._timeline.add(this, this._startTime - this._delay); - } else if (!enabled && this.timeline) { - this._timeline._remove(this, true); - } - } - return false; - }; - - - p._kill = function(vars, target) { - return this._enabled(false, false); - }; - - p.kill = function(vars, target) { - this._kill(vars, target); - return this; - }; - - p._uncache = function(includeSelf) { - var tween = includeSelf ? this : this.timeline; - while (tween) { - tween._dirty = true; - tween = tween.timeline; - } - return this; - }; - - p._swapSelfInParams = function(params) { - var i = params.length, - copy = params.concat(); - while (--i > -1) { - if (params[i] === "{self}") { - copy[i] = this; - } - } - return copy; - }; - -//----Animation getters/setters -------------------------------------------------------- - - p.eventCallback = function(type, callback, params, scope) { - if ((type || "").substr(0,2) === "on") { - var v = this.vars; - if (arguments.length === 1) { - return v[type]; - } - if (callback == null) { - delete v[type]; - } else { - v[type] = callback; - v[type + "Params"] = ((params instanceof Array) && params.join("").indexOf("{self}") !== -1) ? this._swapSelfInParams(params) : params; - v[type + "Scope"] = scope; - } - if (type === "onUpdate") { - this._onUpdate = callback; - } - } - return this; - }; - - p.delay = function(value) { - if (!arguments.length) { - return this._delay; - } - if (this._timeline.smoothChildTiming) { - this.startTime( this._startTime + value - this._delay ); - } - this._delay = value; - return this; - }; - - p.duration = function(value) { - if (!arguments.length) { - this._dirty = false; - return this._duration; - } - this._duration = this._totalDuration = value; - this._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration. - if (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) { - this.totalTime(this._totalTime * (value / this._duration), true); - } - return this; - }; - - p.totalDuration = function(value) { - this._dirty = false; - return (!arguments.length) ? this._totalDuration : this.duration(value); - }; - - p.time = function(value, suppressEvents) { - if (!arguments.length) { - return this._time; - } - if (this._dirty) { - this.totalDuration(); - } - return this.totalTime((value > this._duration) ? this._duration : value, suppressEvents); - }; - - p.totalTime = function(time, suppressEvents, uncapped) { - if (!_tickerActive) { - _ticker.wake(); - } - if (!arguments.length) { - return this._totalTime; - } - if (this._timeline) { - if (time < 0 && !uncapped) { - time += this.totalDuration(); - } - if (this._timeline.smoothChildTiming) { - if (this._dirty) { - this.totalDuration(); - } - var totalDuration = this._totalDuration, - tl = this._timeline; - if (time > totalDuration && !uncapped) { - time = totalDuration; - } - this._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale); - if (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here. - this._uncache(false); - } - //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed. - if (tl._timeline) { - while (tl._timeline) { - if (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) { - tl.totalTime(tl._totalTime, true); - } - tl = tl._timeline; - } - } - } - if (this._gc) { - this._enabled(true, false); - } - if (this._totalTime !== time) { - this.render(time, suppressEvents, false); - } - } - return this; - }; - - p.startTime = function(value) { - if (!arguments.length) { - return this._startTime; - } - if (value !== this._startTime) { - this._startTime = value; - if (this.timeline) if (this.timeline._sortChildren) { - this.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct. - } - } - return this; - }; - - p.timeScale = function(value) { - if (!arguments.length) { - return this._timeScale; - } - value = value || 0.000001; //can't allow zero because it'll throw the math off - if (this._timeline && this._timeline.smoothChildTiming) { - var pauseTime = this._pauseTime, - t = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime(); - this._startTime = t - ((t - this._startTime) * this._timeScale / value); - } - this._timeScale = value; - return this._uncache(false); - }; - - p.reversed = function(value) { - if (!arguments.length) { - return this._reversed; - } - if (value != this._reversed) { - this._reversed = value; - this.totalTime(this._totalTime, true); - } - return this; - }; - - p.paused = function(value) { - if (!arguments.length) { - return this._paused; - } - if (value != this._paused) if (this._timeline) { - if (!_tickerActive && !value) { - _ticker.wake(); - } - var tl = this._timeline, - raw = tl.rawTime(), - elapsed = raw - this._pauseTime; - if (!value && tl.smoothChildTiming) { - this._startTime += elapsed; - this._uncache(false); - } - this._pauseTime = value ? raw : null; - this._paused = value; - this._active = (!value && this._totalTime > 0 && this._totalTime < this._totalDuration); - if (!value && elapsed !== 0 && this._duration !== 0) { - this.render((tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale), true, true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render. - } - } - if (this._gc && !value) { - this._enabled(true, false); - } - return this; - }; - - -/* - * ---------------------------------------------------------------- - * SimpleTimeline - * ---------------------------------------------------------------- - */ - var SimpleTimeline = _class("core.SimpleTimeline", function(vars) { - Animation.call(this, 0, vars); - this.autoRemoveChildren = this.smoothChildTiming = true; - }); - - p = SimpleTimeline.prototype = new Animation(); - p.constructor = SimpleTimeline; - p.kill()._gc = false; - p._first = p._last = null; - p._sortChildren = false; - - p.add = p.insert = function(child, position, align, stagger) { - var prevTween, st; - child._startTime = Number(position || 0) + child._delay; - if (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order). - child._pauseTime = child._startTime + ((this.rawTime() - child._startTime) / child._timeScale); - } - if (child.timeline) { - child.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one. - } - child.timeline = child._timeline = this; - if (child._gc) { - child._enabled(true, true); - } - prevTween = this._last; - if (this._sortChildren) { - st = child._startTime; - while (prevTween && prevTween._startTime > st) { - prevTween = prevTween._prev; - } - } - if (prevTween) { - child._next = prevTween._next; - prevTween._next = child; - } else { - child._next = this._first; - this._first = child; - } - if (child._next) { - child._next._prev = child; - } else { - this._last = child; - } - child._prev = prevTween; - if (this._timeline) { - this._uncache(true); - } - return this; - }; - - p._remove = function(tween, skipDisable) { - if (tween.timeline === this) { - if (!skipDisable) { - tween._enabled(false, true); - } - tween.timeline = null; - - if (tween._prev) { - tween._prev._next = tween._next; - } else if (this._first === tween) { - this._first = tween._next; - } - if (tween._next) { - tween._next._prev = tween._prev; - } else if (this._last === tween) { - this._last = tween._prev; - } - - if (this._timeline) { - this._uncache(true); - } - } - return this; - }; - - p.render = function(time, suppressEvents, force) { - var tween = this._first, - next; - this._totalTime = this._time = this._rawPrevTime = time; - while (tween) { - next = tween._next; //record it here because the value could change after rendering... - if (tween._active || (time >= tween._startTime && !tween._paused)) { - if (!tween._reversed) { - tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force); - } else { - tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force); - } - } - tween = next; - } - }; - - p.rawTime = function() { - if (!_tickerActive) { - _ticker.wake(); - } - return this._totalTime; - }; - - -/* - * ---------------------------------------------------------------- - * TweenLite - * ---------------------------------------------------------------- - */ - var TweenLite = _class("TweenLite", function(target, duration, vars) { - Animation.call(this, duration, vars); - this.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this "hot" method) - - if (target == null) { - throw "Cannot tween a null target."; - } - - this.target = target = (typeof(target) !== "string") ? target : TweenLite.selector(target) || target; - - var isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))), - overwrite = this.vars.overwrite, - i, targ, targets; - - this._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === "number") ? overwrite >> 0 : _overwriteLookup[overwrite]; - - if ((isSelector || target instanceof Array) && typeof(target[0]) !== "number") { - this._targets = targets = _slice.call(target, 0); - this._propLookup = []; - this._siblings = []; - for (i = 0; i < targets.length; i++) { - targ = targets[i]; - if (!targ) { - targets.splice(i--, 1); - continue; - } else if (typeof(targ) === "string") { - targ = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings - if (typeof(targ) === "string") { - targets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case) - } - continue; - } else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself. - targets.splice(i--, 1); - this._targets = targets = targets.concat(_slice.call(targ, 0)); - continue; - } - this._siblings[i] = _register(targ, this, false); - if (overwrite === 1) if (this._siblings[i].length > 1) { - _applyOverwrite(targ, this, null, 1, this._siblings[i]); - } - } - - } else { - this._propLookup = {}; - this._siblings = _register(target, this, false); - if (overwrite === 1) if (this._siblings.length > 1) { - _applyOverwrite(target, this, null, 1, this._siblings); - } - } - if (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) { - this.render(-this._delay, false, true); - } - }, true), - _isSelector = function(v) { - return (v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check "nodeType" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox. - }, - _autoCSS = function(vars, target) { - var css = {}, - p; - for (p in vars) { - if (!_reservedProps[p] && (!(p in target) || p === "x" || p === "y" || p === "width" || p === "height" || p === "className" || p === "border") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: elements contain read-only "x" and "y" properties. We should also prioritize editing css width/height rather than the element's properties. - css[p] = vars[p]; - delete vars[p]; - } - } - vars.css = css; - }; - - p = TweenLite.prototype = new Animation(); - p.constructor = TweenLite; - p.kill()._gc = false; - -//----TweenLite defaults, overwrite management, and root updates ---------------------------------------------------- - - p.ratio = 0; - p._firstPT = p._targets = p._overwrittenProps = p._startAt = null; - p._notifyPluginsOfEnabled = false; - - TweenLite.version = "1.10.2"; - TweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1); - TweenLite.defaultOverwrite = "auto"; - TweenLite.ticker = _ticker; - TweenLite.autoSleep = true; - TweenLite.selector = window.$ || window.jQuery || function(e) { if (window.$) { TweenLite.selector = window.$; return window.$(e); } return window.document ? window.document.getElementById((e.charAt(0) === "#") ? e.substr(1) : e) : e; }; - - var _internals = TweenLite._internals = {}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object. - _plugins = TweenLite._plugins = {}, - _tweenLookup = TweenLite._tweenLookup = {}, - _tweenLookupNum = 0, - _reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1}, - _overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, "true":1, "false":0}, - _rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(), - _rootTimeline = Animation._rootTimeline = new SimpleTimeline(); - - _rootTimeline._startTime = _ticker.time; - _rootFramesTimeline._startTime = _ticker.frame; - _rootTimeline._active = _rootFramesTimeline._active = true; - - Animation._updateRoot = function() { - _rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false); - _rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false); - if (!(_ticker.frame % 120)) { //dump garbage every 120 frames... - var i, a, p; - for (p in _tweenLookup) { - a = _tweenLookup[p].tweens; - i = a.length; - while (--i > -1) { - if (a[i]._gc) { - a.splice(i, 1); - } - } - if (a.length === 0) { - delete _tweenLookup[p]; - } - } - //if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly - p = _rootTimeline._first; - if (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) { - while (p && p._paused) { - p = p._next; - } - if (!p) { - _ticker.sleep(); - } - } - } - }; - - _ticker.addEventListener("tick", Animation._updateRoot); - - var _register = function(target, tween, scrub) { - var id = target._gsTweenID, a, i; - if (!_tweenLookup[id || (target._gsTweenID = id = "t" + (_tweenLookupNum++))]) { - _tweenLookup[id] = {target:target, tweens:[]}; - } - if (tween) { - a = _tweenLookup[id].tweens; - a[(i = a.length)] = tween; - if (scrub) { - while (--i > -1) { - if (a[i] === tween) { - a.splice(i, 1); - } - } - } - } - return _tweenLookup[id].tweens; - }, - - _applyOverwrite = function(target, tween, props, mode, siblings) { - var i, changed, curTween, l; - if (mode === 1 || mode >= 4) { - l = siblings.length; - for (i = 0; i < l; i++) { - if ((curTween = siblings[i]) !== tween) { - if (!curTween._gc) if (curTween._enabled(false, false)) { - changed = true; - } - } else if (mode === 5) { - break; - } - } - return changed; - } - //NOTE: Add 0.0000000001 to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example) - var startTime = tween._startTime + 0.0000000001, - overlaps = [], - oCount = 0, - zeroDur = (tween._duration === 0), - globalStart; - i = siblings.length; - while (--i > -1) { - if ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) { - //ignore - } else if (curTween._timeline !== tween._timeline) { - globalStart = globalStart || _checkOverlap(tween, 0, zeroDur); - if (_checkOverlap(curTween, globalStart, zeroDur) === 0) { - overlaps[oCount++] = curTween; - } - } else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale + 0.0000000001 > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= 0.0000000002)) { - overlaps[oCount++] = curTween; - } - } - - i = oCount; - while (--i > -1) { - curTween = overlaps[i]; - if (mode === 2) if (curTween._kill(props, target)) { - changed = true; - } - if (mode !== 2 || (!curTween._firstPT && curTween._initted)) { - if (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween. - changed = true; - } - } - } - return changed; - }, - - _checkOverlap = function(tween, reference, zeroDur) { - var tl = tween._timeline, - ts = tl._timeScale, - t = tween._startTime, - min = 0.0000000001; //we use this to protect from rounding errors. - while (tl._timeline) { - t += tl._startTime; - ts *= tl._timeScale; - if (tl._paused) { - return -100; - } - tl = tl._timeline; - } - t /= ts; - return (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * min)) ? min : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + min) ? 0 : t - reference - min; - }; - - -//---- TweenLite instance methods ----------------------------------------------------------------------------- - - p._init = function() { - var v = this.vars, - op = this._overwrittenProps, - dur = this._duration, - immediate = v.immediateRender, - ease = v.ease, - i, initPlugins, pt, p; - if (v.startAt) { - if (this._startAt) { - this._startAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:"+=100"}, {x:"-=100"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change. - } - v.startAt.overwrite = 0; - v.startAt.immediateRender = true; - this._startAt = TweenLite.to(this.target, 0, v.startAt); - if (immediate) { - if (this._time > 0) { - this._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()). - } else if (dur !== 0) { - return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting. - } - } - } else if (v.runBackwards && v.immediateRender && dur !== 0) { - //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards) - if (this._startAt) { - this._startAt.render(-1, true); - this._startAt = null; - } else if (this._time === 0) { - pt = {}; - for (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through. - if (!_reservedProps[p] || p === "autoCSS") { - pt[p] = v[p]; - } - } - pt.overwrite = 0; - this._startAt = TweenLite.to(this.target, 0, pt); - return; - } - } - if (!ease) { - this._ease = TweenLite.defaultEase; - } else if (ease instanceof Ease) { - this._ease = (v.easeParams instanceof Array) ? ease.config.apply(ease, v.easeParams) : ease; - } else { - this._ease = (typeof(ease) === "function") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase; - } - this._easeType = this._ease._type; - this._easePower = this._ease._power; - this._firstPT = null; - - if (this._targets) { - i = this._targets.length; - while (--i > -1) { - if ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null)) ) { - initPlugins = true; - } - } - } else { - initPlugins = this._initProps(this.target, this._propLookup, this._siblings, op); - } - - if (initPlugins) { - TweenLite._onPluginEvent("_onInitAllProps", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite - } - if (op) if (!this._firstPT) if (typeof(this.target) !== "function") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live. - this._enabled(false, false); - } - if (v.runBackwards) { - pt = this._firstPT; - while (pt) { - pt.s += pt.c; - pt.c = -pt.c; - pt = pt._next; - } - } - this._onUpdate = v.onUpdate; - this._initted = true; - }; - - p._initProps = function(target, propLookup, siblings, overwrittenProps) { - var p, i, initPlugins, plugin, a, pt, v; - if (target == null) { - return false; - } - if (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check "nodeType" on the window inside an iframe. - _autoCSS(this.vars, target); - } - for (p in this.vars) { - v = this.vars[p]; - if (_reservedProps[p]) { - if (v instanceof Array) if (v.join("").indexOf("{self}") !== -1) { - this.vars[p] = v = this._swapSelfInParams(v, this); - } - - } else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this)) { - - //t - target [object] - //p - property [string] - //s - start [number] - //c - change [number] - //f - isFunction [boolean] - //n - name [string] - //pg - isPlugin [boolean] - //pr - priority [number] - this._firstPT = pt = {_next:this._firstPT, t:plugin, p:"setRatio", s:0, c:1, f:true, n:p, pg:true, pr:plugin._priority}; - i = plugin._overwriteProps.length; - while (--i > -1) { - propLookup[plugin._overwriteProps[i]] = this._firstPT; - } - if (plugin._priority || plugin._onInitAllProps) { - initPlugins = true; - } - if (plugin._onDisable || plugin._onEnable) { - this._notifyPluginsOfEnabled = true; - } - - } else { - this._firstPT = propLookup[p] = pt = {_next:this._firstPT, t:target, p:p, f:(typeof(target[p]) === "function"), n:p, pg:false, pr:0}; - pt.s = (!pt.f) ? parseFloat(target[p]) : target[ ((p.indexOf("set") || typeof(target["get" + p.substr(3)]) !== "function") ? p : "get" + p.substr(3)) ](); - pt.c = (typeof(v) === "string" && v.charAt(1) === "=") ? parseInt(v.charAt(0) + "1", 10) * Number(v.substr(2)) : (Number(v) - pt.s) || 0; - } - if (pt) if (pt._next) { - pt._next._prev = pt; - } - } - - if (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first) - return this._initProps(target, propLookup, siblings, overwrittenProps); - } - if (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) { - this._kill(propLookup, target); - return this._initProps(target, propLookup, siblings, overwrittenProps); - } - return initPlugins; - }; - - p.render = function(time, suppressEvents, force) { - var prevTime = this._time, - isComplete, callback, pt; - if (time >= this._duration) { - this._totalTime = this._time = this._duration; - this.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1; - if (!this._reversed) { - isComplete = true; - callback = "onComplete"; - } - if (this._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. - if (time === 0 || this._rawPrevTime < 0) if (this._rawPrevTime !== time) { - force = true; - if (this._rawPrevTime > 0) { - callback = "onReverseComplete"; - if (suppressEvents) { - time = -1; //when a callback is placed at the VERY beginning of a timeline and it repeats (or if timeline.seek(0) is called), events are normally suppressed during those behaviors (repeat or seek()) and without adjusting the _rawPrevTime back slightly, the onComplete wouldn't get called on the next render. This only applies to zero-duration tweens/callbacks of course. - } - } - } - this._rawPrevTime = time; - } - - } else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0. - this._totalTime = this._time = 0; - this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0; - if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime > 0)) { - callback = "onReverseComplete"; - isComplete = this._reversed; - } - if (time < 0) { - this._active = false; - if (this._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. - if (this._rawPrevTime >= 0) { - force = true; - } - this._rawPrevTime = time; - } - } 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. - force = true; - } - - } else { - this._totalTime = this._time = time; - - if (this._easeType) { - var r = time / this._duration, type = this._easeType, pow = this._easePower; - if (type === 1 || (type === 3 && r >= 0.5)) { - r = 1 - r; - } - if (type === 3) { - r *= 2; - } - if (pow === 1) { - r *= r; - } else if (pow === 2) { - r *= r * r; - } else if (pow === 3) { - r *= r * r * r; - } else if (pow === 4) { - r *= r * r * r * r; - } - - if (type === 1) { - this.ratio = 1 - r; - } else if (type === 2) { - this.ratio = r; - } else if (time / this._duration < 0.5) { - this.ratio = r / 2; - } else { - this.ratio = 1 - (r / 2); - } - - } else { - this.ratio = this._ease.getRatio(time / this._duration); - } - - } - - if (this._time === prevTime && !force) { - return; - } else if (!this._initted) { - this._init(); - if (!this._initted) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. - return; - } - //_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently. - if (this._time && !isComplete) { - this.ratio = this._ease.getRatio(this._time / this._duration); - } else if (isComplete && this._ease._calcEnd) { - this.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1); - } - } - - if (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) { - this._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done. - } - - if (prevTime === 0) { - if (this._startAt) { - if (time >= 0) { - this._startAt.render(time, suppressEvents, force); - } else if (!callback) { - callback = "_dummyGS"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area. - } - } - if (this.vars.onStart) if (this._time !== 0 || this._duration === 0) if (!suppressEvents) { - this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); - } - } - - pt = this._firstPT; - while (pt) { - if (pt.f) { - pt.t[pt.p](pt.c * this.ratio + pt.s); - } else { - pt.t[pt.p] = pt.c * this.ratio + pt.s; - } - pt = pt._next; - } - - if (this._onUpdate) { - if (time < 0) if (this._startAt) { - this._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete. - } - if (!suppressEvents) { - this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); - } - } - - if (callback) if (!this._gc) { //check _gc because there's a chance that kill() could be called in an onUpdate - if (time < 0 && this._startAt && !this._onUpdate) { - this._startAt.render(time, suppressEvents, force); - } - if (isComplete) { - if (this._timeline.autoRemoveChildren) { - this._enabled(false, false); - } - this._active = false; - } - if (!suppressEvents && this.vars[callback]) { - this.vars[callback].apply(this.vars[callback + "Scope"] || this, this.vars[callback + "Params"] || _blankArray); - } - } - - }; - - p._kill = function(vars, target) { - if (vars === "all") { - vars = null; - } - if (vars == null) if (target == null || target === this.target) { - return this._enabled(false, false); - } - target = (typeof(target) !== "string") ? (target || this._targets || this.target) : TweenLite.selector(target) || target; - var i, overwrittenProps, p, pt, propLookup, changed, killProps, record; - if ((target instanceof Array || _isSelector(target)) && typeof(target[0]) !== "number") { - i = target.length; - while (--i > -1) { - if (this._kill(vars, target[i])) { - changed = true; - } - } - } else { - if (this._targets) { - i = this._targets.length; - while (--i > -1) { - if (target === this._targets[i]) { - propLookup = this._propLookup[i] || {}; - this._overwrittenProps = this._overwrittenProps || []; - overwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : "all"; - break; - } - } - } else if (target !== this.target) { - return false; - } else { - propLookup = this._propLookup; - overwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : "all"; - } - - if (propLookup) { - killProps = vars || propLookup; - record = (vars !== overwrittenProps && overwrittenProps !== "all" && vars !== propLookup && (vars == null || vars._tempKill !== true)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin) - for (p in killProps) { - if ((pt = propLookup[p])) { - if (pt.pg && pt.t._kill(killProps)) { - changed = true; //some plugins need to be notified so they can perform cleanup tasks first - } - if (!pt.pg || pt.t._overwriteProps.length === 0) { - if (pt._prev) { - pt._prev._next = pt._next; - } else if (pt === this._firstPT) { - this._firstPT = pt._next; - } - if (pt._next) { - pt._next._prev = pt._prev; - } - pt._next = pt._prev = null; - } - delete propLookup[p]; - } - if (record) { - overwrittenProps[p] = 1; - } - } - if (!this._firstPT && this._initted) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening. - this._enabled(false, false); - } - } - } - return changed; - }; - - p.invalidate = function() { - if (this._notifyPluginsOfEnabled) { - TweenLite._onPluginEvent("_onDisable", this); - } - this._firstPT = null; - this._overwrittenProps = null; - this._onUpdate = null; - this._startAt = null; - this._initted = this._active = this._notifyPluginsOfEnabled = false; - this._propLookup = (this._targets) ? {} : []; - return this; - }; - - p._enabled = function(enabled, ignoreTimeline) { - if (!_tickerActive) { - _ticker.wake(); - } - if (enabled && this._gc) { - var targets = this._targets, - i; - if (targets) { - i = targets.length; - while (--i > -1) { - this._siblings[i] = _register(targets[i], this, true); - } - } else { - this._siblings = _register(this.target, this, true); - } - } - Animation.prototype._enabled.call(this, enabled, ignoreTimeline); - if (this._notifyPluginsOfEnabled) if (this._firstPT) { - return TweenLite._onPluginEvent((enabled ? "_onEnable" : "_onDisable"), this); - } - return false; - }; - - -//----TweenLite static methods ----------------------------------------------------- - - TweenLite.to = function(target, duration, vars) { - return new TweenLite(target, duration, vars); - }; - - TweenLite.from = function(target, duration, vars) { - vars.runBackwards = true; - vars.immediateRender = (vars.immediateRender != false); - return new TweenLite(target, duration, vars); - }; - - TweenLite.fromTo = function(target, duration, fromVars, toVars) { - toVars.startAt = fromVars; - toVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false); - return new TweenLite(target, duration, toVars); - }; - - TweenLite.delayedCall = function(delay, callback, params, scope, useFrames) { - 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}); - }; - - TweenLite.set = function(target, vars) { - return new TweenLite(target, 0, vars); - }; - - TweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, vars) { - var a = TweenLite.getTweensOf(target), - i = a.length; - while (--i > -1) { - a[i]._kill(vars, target); - } - }; - - TweenLite.getTweensOf = function(target) { - if (target == null) { return []; } - target = (typeof(target) !== "string") ? target : TweenLite.selector(target) || target; - var i, a, j, t; - if ((target instanceof Array || _isSelector(target)) && typeof(target[0]) !== "number") { - i = target.length; - a = []; - while (--i > -1) { - a = a.concat(TweenLite.getTweensOf(target[i])); - } - i = a.length; - //now get rid of any duplicates (tweens of arrays of objects could cause duplicates) - while (--i > -1) { - t = a[i]; - j = i; - while (--j > -1) { - if (t === a[j]) { - a.splice(i, 1); - } - } - } - } else { - a = _register(target).concat(); - i = a.length; - while (--i > -1) { - if (a[i]._gc) { - a.splice(i, 1); - } - } - } - return a; - }; - - - -/* - * ---------------------------------------------------------------- - * TweenPlugin (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another