diff --git a/.codepainterrc b/.codepainterrc new file mode 100644 index 00000000..d99066c8 --- /dev/null +++ b/.codepainterrc @@ -0,0 +1,12 @@ +{ + "indent_style": "space", + "indent_size": 2, + "insert_final_newline": true, + "quote_type": "single", + "space_after_anonymous_functions": true, + "space_after_control_statements": true, + "spaces_around_operators": true, + "trim_trailing_whitespace": true, + "spaces_in_brackets": false, + "end_of_line": "lf" +} diff --git a/Gruntfile.js b/Gruntfile.js index eacf7307..f12faf00 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -8,6 +8,7 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-bump'); + grunt.loadNpmTasks('grunt-codepainter'); grunt.loadNpmTasks('grunt-dox'); var banner = [ @@ -172,6 +173,19 @@ module.exports = function(grunt) { tagMessage: 'Version %VERSION%', push: false } + }, + codepainter: { + source: { + options: { + json: '.codepainterrc' + }, + files: [{ + expand: true, + cwd: 'src/', + src: ['rekapi.!(intro|outro|const)*.js'], + dest: 'src/' + }] + } } }); diff --git a/dist/doc/src/rekapi.actor.js.html b/dist/doc/src/rekapi.actor.js.html index 0abf1329..5e70d958 100644 --- a/dist/doc/src/rekapi.actor.js.html +++ b/dist/doc/src/rekapi.actor.js.html @@ -300,7 +300,7 @@

Keyframe inheritance

Keyframe 1000 will have a y of 50, and an x of 100, because x was inherited from keyframe 0.

Source

Actor.prototype.keyframe = function keyframe (
-      millisecond, properties, opt_easing) {
+    millisecond, properties, opt_easing) {
 
     opt_easing = opt_easing || DEFAULT_EASING;
     var easing = Tweenable.composeEasingObject(properties, opt_easing);
@@ -308,7 +308,7 @@ 

Keyframe inheritance

// Create and add all of the KeyframeProperties _.each(properties, function (value, name) { var newKeyframeProperty = new Rekapi.KeyframeProperty( - millisecond, name, value, easing[name]); + millisecond, name, value, easing[name]); this._addKeyframeProperty(newKeyframeProperty); }, this); @@ -321,7 +321,7 @@

Keyframe inheritance

fireRekapiEventForActor(this, 'timelineModified'); return this; - };

hasKeyframeAt

method
Actor.prototype.hasKeyframeAt()

Description

Determines if an actor has any properties of a keyframe set at a given millisecond. You can scope this and determine if a property exists on a particular track with opt_trackName.

Source

Actor.prototype.hasKeyframeAt = function(millisecond, opt_trackName) {
+  };

hasKeyframeAt

method
Actor.prototype.hasKeyframeAt()

Description

Determines if an actor has any properties of a keyframe set at a given millisecond. You can scope this and determine if a property exists on a particular track with opt_trackName.

Source

Actor.prototype.hasKeyframeAt = function (millisecond, opt_trackName) {
     var tracks = this._propertyTracks;
 
     if (opt_trackName) {
@@ -335,7 +335,7 @@ 

Keyframe inheritance

var track; for (track in tracks) { if (tracks.hasOwnProperty(track) - && findPropertyAtMillisecondInTrack(this, track, millisecond)) { + && findPropertyAtMillisecondInTrack(this, track, millisecond)) { return true; } } @@ -363,7 +363,7 @@

Keyframe inheritance

_.each(this._propertyTracks, function (propertyTrack, trackName) { var keyframeProperty = - findPropertyAtMillisecondInTrack(this, trackName, copyFrom); + findPropertyAtMillisecondInTrack(this, trackName, copyFrom); if (keyframeProperty) { sourcePositions[trackName] = keyframeProperty.value; @@ -416,12 +416,12 @@

Keyframe inheritance

Example

Source

Actor.prototype.modifyKeyframe = function (
-      millisecond, stateModification, opt_easingModification) {
+    millisecond, stateModification, opt_easingModification) {
     opt_easingModification = opt_easingModification || {};
 
     _.each(this._propertyTracks, function (propertyTrack, trackName) {
       var property = findPropertyAtMillisecondInTrack(
-          this, trackName, millisecond);
+        this, trackName, millisecond);
 
       if (property) {
         property.modifyWith({
@@ -440,7 +440,7 @@ 

Keyframe inheritance

var propertyTracks = this._propertyTracks; _.each(this._propertyTracks, function (propertyTrack, propertyName) { - var keyframeProperty = _.findWhere(propertyTrack, { millisecond: millisecond }); + var keyframeProperty = _.findWhere(propertyTrack, {millisecond: millisecond}); if (keyframeProperty) { propertyTracks[propertyName] = _.without(propertyTrack, keyframeProperty); @@ -476,12 +476,12 @@

Keyframe inheritance

};

getKeyframeProperty

method
Actor.prototype.getKeyframeProperty()

Description

Get the Rekapi.KeyframeProperty from an actor's property track. Returns undefined if no properties were found.

Source

Actor.prototype.getKeyframeProperty = function (property, millisecond) {
     var propertyTrack = this._propertyTracks[property];
     if (propertyTrack) {
-      return _.findWhere(propertyTrack, { millisecond: millisecond });
+      return _.findWhere(propertyTrack, {millisecond: millisecond});
     }
   };

modifyKeyframeProperty

method
Actor.prototype.modifyKeyframeProperty()

Description

Modify a Rekapi.KeyframeProperty stored on an actor. This calls KeyframeProperty#modifyWith (passing along newProperties) and then performs some cleanup.

Example

Source

Actor.prototype.modifyKeyframeProperty = function (
-      property, millisecond, newProperties) {
+    property, millisecond, newProperties) {
 
     var keyframeProperty = this.getKeyframeProperty(property, millisecond);
     if (keyframeProperty) {
@@ -496,7 +496,7 @@ 

Keyframe inheritance

if (typeof propertyTracks[property] !== 'undefined') { var keyframeProperty = this.getKeyframeProperty(property, millisecond); propertyTracks[property] = - _.without(propertyTracks[property], keyframeProperty); + _.without(propertyTracks[property], keyframeProperty); keyframeProperty.detach(); cleanupAfterKeyframeModification(this); diff --git a/dist/doc/src/rekapi.core.js.html b/dist/doc/src/rekapi.core.js.html index d11eed1e..e3660bf5 100644 --- a/dist/doc/src/rekapi.core.js.html +++ b/dist/doc/src/rekapi.core.js.html @@ -461,7 +461,7 @@ } else { // Remove just the handler specified this._events[eventName] = _.without( - this._events[eventName], opt_handler); + this._events[eventName], opt_handler); } return this; diff --git a/dist/doc/src/rekapi.keyframe-property.js.html b/dist/doc/src/rekapi.keyframe-property.js.html index f28e97ae..12728466 100644 --- a/dist/doc/src/rekapi.keyframe-property.js.html +++ b/dist/doc/src/rekapi.keyframe-property.js.html @@ -255,14 +255,14 @@ if (nextProperty) { correctedMillisecond = - Math.min(correctedMillisecond, nextProperty.millisecond); + Math.min(correctedMillisecond, nextProperty.millisecond); fromObj[this.name] = this.value; toObj[this.name] = nextProperty.value; var delta = nextProperty.millisecond - this.millisecond; var interpolatedPosition = - (correctedMillisecond - this.millisecond) / delta; + (correctedMillisecond - this.millisecond) / delta; value = interpolate(fromObj, toObj, interpolatedPosition, nextProperty.easing)[this.name]; @@ -288,10 +288,10 @@

Example

Source

KeyframeProperty.prototype.exportPropertyData = function () {
     return {
-     'millisecond': this.millisecond
-     ,'name': this.name
-     ,'value': this.value
-     ,'easing': this.easing
+      'millisecond': this.millisecond
+      ,'name': this.name
+      ,'value': this.value
+      ,'easing': this.easing
     };
   };
 
diff --git a/dist/rekapi-underscore-shifty.min.js b/dist/rekapi-underscore-shifty.min.js
index be43cb2c..38c9d16d 100644
--- a/dist/rekapi-underscore-shifty.min.js
+++ b/dist/rekapi-underscore-shifty.min.js
@@ -1,3 +1,3 @@
-/*! rekapi - v1.3.2 - 2014-04-26 - http://rekapi.com */
+/*! rekapi - v1.3.2 - 2014-06-29 - http://rekapi.com */
 (function(){var a=this,b=a._,c={},d=Array.prototype,e=Object.prototype,f=Function.prototype,g=d.push,h=d.slice,i=d.concat,j=e.toString,k=e.hasOwnProperty,l=d.forEach,m=d.map,n=d.reduce,o=d.reduceRight,p=d.filter,q=d.every,r=d.some,s=d.indexOf,t=d.lastIndexOf,u=Array.isArray,v=Object.keys,w=f.bind,x=function(a){return a instanceof x?a:this instanceof x?void(this._wrapped=a):new x(a)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=x),exports._=x):a._=x,x.VERSION="1.5.2";var y=x.each=x.forEach=function(a,b,d){if(null!=a)if(l&&a.forEach===l)a.forEach(b,d);else if(a.length===+a.length){for(var e=0,f=a.length;f>e;e++)if(b.call(d,a[e],e,a)===c)return}else for(var g=x.keys(a),e=0,f=g.length;f>e;e++)if(b.call(d,a[g[e]],g[e],a)===c)return};x.map=x.collect=function(a,b,c){var d=[];return null==a?d:m&&a.map===m?a.map(b,c):(y(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var z="Reduce of empty array with no initial value";x.reduce=x.foldl=x.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),n&&a.reduce===n)return d&&(b=x.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(y(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(z);return c},x.reduceRight=x.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),o&&a.reduceRight===o)return d&&(b=x.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=x.keys(a);f=g.length}if(y(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(z);return c},x.find=x.detect=function(a,b,c){var d;return A(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},x.filter=x.select=function(a,b,c){var d=[];return null==a?d:p&&a.filter===p?a.filter(b,c):(y(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},x.reject=function(a,b,c){return x.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},x.every=x.all=function(a,b,d){b||(b=x.identity);var e=!0;return null==a?e:q&&a.every===q?a.every(b,d):(y(a,function(a,f,g){return(e=e&&b.call(d,a,f,g))?void 0:c}),!!e)};var A=x.some=x.any=function(a,b,d){b||(b=x.identity);var e=!1;return null==a?e:r&&a.some===r?a.some(b,d):(y(a,function(a,f,g){return e||(e=b.call(d,a,f,g))?c:void 0}),!!e)};x.contains=x.include=function(a,b){return null==a?!1:s&&a.indexOf===s?-1!=a.indexOf(b):A(a,function(a){return a===b})},x.invoke=function(a,b){var c=h.call(arguments,2),d=x.isFunction(b);return x.map(a,function(a){return(d?b:a[b]).apply(a,c)})},x.pluck=function(a,b){return x.map(a,function(a){return a[b]})},x.where=function(a,b,c){return x.isEmpty(b)?c?void 0:[]:x[c?"find":"filter"](a,function(a){for(var c in b)if(b[c]!==a[c])return!1;return!0})},x.findWhere=function(a,b){return x.where(a,b,!0)},x.max=function(a,b,c){if(!b&&x.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);if(!b&&x.isEmpty(a))return-1/0;var d={computed:-1/0,value:-1/0};return y(a,function(a,e,f){var g=b?b.call(c,a,e,f):a;g>d.computed&&(d={value:a,computed:g})}),d.value},x.min=function(a,b,c){if(!b&&x.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);if(!b&&x.isEmpty(a))return 1/0;var d={computed:1/0,value:1/0};return y(a,function(a,e,f){var g=b?b.call(c,a,e,f):a;gd||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var C=function(a){return function(b,c,d){var e={},f=null==c?x.identity:B(c);return y(b,function(c,g){var h=f.call(d,c,g,b);a(e,h,c)}),e}};x.groupBy=C(function(a,b,c){(x.has(a,b)?a[b]:a[b]=[]).push(c)}),x.indexBy=C(function(a,b,c){a[b]=c}),x.countBy=C(function(a,b){x.has(a,b)?a[b]++:a[b]=1}),x.sortedIndex=function(a,b,c,d){c=null==c?x.identity:B(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])=0})})},x.difference=function(a){var b=i.apply(d,h.call(arguments,1));return x.filter(a,function(a){return!x.contains(b,a)})},x.zip=function(){for(var a=x.max(x.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=x.pluck(arguments,""+c);return b},x.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},x.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=x.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(s&&a.indexOf===s)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},x.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(t&&a.lastIndexOf===t)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},x.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var E=function(){};x.bind=function(a,b){var c,d;if(w&&a.bind===w)return w.apply(a,h.call(arguments,1));if(!x.isFunction(a))throw new TypeError;return c=h.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(h.call(arguments)));E.prototype=a.prototype;var e=new E;E.prototype=null;var f=a.apply(e,c.concat(h.call(arguments)));return Object(f)===f?f:e}},x.partial=function(a){var b=h.call(arguments,1);return function(){return a.apply(this,b.concat(h.call(arguments)))}},x.bindAll=function(a){var b=h.call(arguments,1);if(0===b.length)throw new Error("bindAll must be passed function names");return y(b,function(b){a[b]=x.bind(a[b],a)}),a},x.memoize=function(a,b){var c={};return b||(b=x.identity),function(){var d=b.apply(this,arguments);return x.has(c,d)?c[d]:c[d]=a.apply(this,arguments)}},x.delay=function(a,b){var c=h.call(arguments,2);return setTimeout(function(){return a.apply(null,c)},b)},x.defer=function(a){return x.delay.apply(x,[a,1].concat(h.call(arguments,1)))},x.throttle=function(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:new Date,g=null,f=a.apply(d,e)};return function(){var j=new Date;h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,0>=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e)):g||c.trailing===!1||(g=setTimeout(i,k)),f}},x.debounce=function(a,b,c){var d,e,f,g,h;return function(){f=this,e=arguments,g=new Date;var i=function(){var j=new Date-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e)))},j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e)),h}},x.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},x.wrap=function(a,b){return function(){var c=[a];return g.apply(c,arguments),b.apply(this,c)}},x.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},x.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},x.keys=v||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[];for(var c in a)x.has(a,c)&&b.push(c);return b},x.values=function(a){for(var b=x.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},x.pairs=function(a){for(var b=x.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},x.invert=function(a){for(var b={},c=x.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},x.functions=x.methods=function(a){var b=[];for(var c in a)x.isFunction(a[c])&&b.push(c);return b.sort()},x.extend=function(a){return y(h.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},x.pick=function(a){var b={},c=i.apply(d,h.call(arguments,1));return y(c,function(c){c in a&&(b[c]=a[c])}),b},x.omit=function(a){var b={},c=i.apply(d,h.call(arguments,1));for(var e in a)x.contains(c,e)||(b[e]=a[e]);return b},x.defaults=function(a){return y(h.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},x.clone=function(a){return x.isObject(a)?x.isArray(a)?a.slice():x.extend({},a):a},x.tap=function(a,b){return b(a),a};var F=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof x&&(a=a._wrapped),b instanceof x&&(b=b._wrapped);var e=j.call(a);if(e!=j.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(x.isFunction(g)&&g instanceof g&&x.isFunction(h)&&h instanceof h))return!1;c.push(a),d.push(b);var i=0,k=!0;if("[object Array]"==e){if(i=a.length,k=i==b.length)for(;i--&&(k=F(a[i],b[i],c,d)););}else{for(var l in a)if(x.has(a,l)&&(i++,!(k=x.has(b,l)&&F(a[l],b[l],c,d))))break;if(k){for(l in b)if(x.has(b,l)&&!i--)break;k=!i}}return c.pop(),d.pop(),k};x.isEqual=function(a,b){return F(a,b,[],[])},x.isEmpty=function(a){if(null==a)return!0;if(x.isArray(a)||x.isString(a))return 0===a.length;for(var b in a)if(x.has(a,b))return!1;return!0},x.isElement=function(a){return!(!a||1!==a.nodeType)},x.isArray=u||function(a){return"[object Array]"==j.call(a)},x.isObject=function(a){return a===Object(a)},y(["Arguments","Function","String","Number","Date","RegExp"],function(a){x["is"+a]=function(b){return j.call(b)=="[object "+a+"]"}}),x.isArguments(arguments)||(x.isArguments=function(a){return!(!a||!x.has(a,"callee"))}),"function"!=typeof/./&&(x.isFunction=function(a){return"function"==typeof a}),x.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},x.isNaN=function(a){return x.isNumber(a)&&a!=+a},x.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==j.call(a)},x.isNull=function(a){return null===a},x.isUndefined=function(a){return void 0===a},x.has=function(a,b){return k.call(a,b)},x.noConflict=function(){return a._=b,this},x.identity=function(a){return a},x.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},x.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))};var G={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};G.unescape=x.invert(G.escape);var H={escape:new RegExp("["+x.keys(G.escape).join("")+"]","g"),unescape:new RegExp("("+x.keys(G.unescape).join("|")+")","g")};x.each(["escape","unescape"],function(a){x[a]=function(b){return null==b?"":(""+b).replace(H[a],function(b){return G[a][b]})}}),x.result=function(a,b){if(null==a)return void 0;var c=a[b];return x.isFunction(c)?c.call(a):c},x.mixin=function(a){y(x.functions(a),function(b){var c=x[b]=a[b];x.prototype[b]=function(){var a=[this._wrapped];return g.apply(a,arguments),M.call(this,c.apply(x,a))}})};var I=0;x.uniqueId=function(a){var b=++I+"";return a?a+b:b},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var J=/(.)^/,K={"'":"'","\\":"\\","\r":"r","\n":"n","	":"t","\u2028":"u2028","\u2029":"u2029"},L=/\\|'|\r|\n|\t|\u2028|\u2029/g;x.template=function(a,b,c){var d;c=x.defaults({},c,x.templateSettings);var e=new RegExp([(c.escape||J).source,(c.interpolate||J).source,(c.evaluate||J).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(L,function(a){return"\\"+K[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,x);var i=function(a){return d.call(this,a,x)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},x.chain=function(a){return x(a).chain()};var M=function(a){return this._chain?x(a).chain():a};x.mixin(x),y(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=d[a];x.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],M.call(this,c)}}),y(["concat","join","slice"],function(a){var b=d[a];x.prototype[a]=function(){return M.call(this,b.apply(this._wrapped,arguments))}}),x.extend(x.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this),function(a){var b=function(){"use strict";function b(){}function c(a,b){var c;for(c in a)Object.hasOwnProperty.call(a,c)&&b(c)}function d(a,b){return c(b,function(c){a[c]=b[c]}),a}function e(a,b){c(b,function(c){void 0===a[c]&&(a[c]=b[c])})}function f(a,b,c,d,e,f,h){var i,j=(a-f)/e;for(i in b)b.hasOwnProperty(i)&&(b[i]=g(c[i],d[i],l[h[i]],j));return b}function g(a,b,c,d){return a+(b-a)*c(d)}function h(a,b){var d=k.prototype.filter,e=a._filterArgs;c(d,function(c){void 0!==d[c][b]&&d[c][b].apply(a,e)})}function i(a,b,c,d,e,g,i,j,k){s=b+c,t=Math.min(r(),s),u=t>=s,a.isPlaying()&&!u?(k(a._timeoutHandler,p),h(a,"beforeTween"),f(t,d,e,g,c,b,i),h(a,"afterTween"),j(d)):u&&(j(g),a.stop(!0))}function j(a,b){var d={};return"string"==typeof b?c(a,function(a){d[a]=b}):c(a,function(a){d[a]||(d[a]=b[a]||n)}),d}function k(a,b){this._currentState=a||{},this._configured=!1,this._scheduleFunction=m,void 0!==b&&this.setConfig(b)}var l,m,n="linear",o=500,p=1e3/60,q=Date.now?Date.now:function(){return+new Date},r=q;m="undefined"!=typeof window?window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||window.mozCancelRequestAnimationFrame&&window.mozRequestAnimationFrame||setTimeout:setTimeout;var s,t,u;return k.prototype.tween=function(a){return this._isTweening?this:(void 0===a&&this._configured||this.setConfig(a),this._start(this.get()),this.resume())},k.prototype.setConfig=function(a){a=a||{},this._configured=!0,this._pausedAtTime=null,this._start=a.start||b,this._step=a.step||b,this._finish=a.finish||b,this._duration=a.duration||o,this._currentState=a.from||this.get(),this._originalState=this.get(),this._targetState=a.to||this.get(),this._timestamp=r();var c=this._currentState,d=this._targetState;return e(d,c),this._easing=j(c,a.easing||n),this._filterArgs=[c,this._originalState,d,this._easing],h(this,"tweenCreated"),this},k.prototype.get=function(){return d({},this._currentState)},k.prototype.set=function(a){this._currentState=a},k.prototype.pause=function(){return this._pausedAtTime=r(),this._isPaused=!0,this},k.prototype.resume=function(){this._isPaused&&(this._timestamp+=r()-this._pausedAtTime),this._isPaused=!1,this._isTweening=!0;var a=this;return this._timeoutHandler=function(){i(a,a._timestamp,a._duration,a._currentState,a._originalState,a._targetState,a._easing,a._step,a._scheduleFunction)},this._timeoutHandler(),this},k.prototype.stop=function(a){return this._isTweening=!1,this._isPaused=!1,this._timeoutHandler=b,a&&(d(this._currentState,this._targetState),h(this,"afterTweenEnd"),this._finish.call(this,this._currentState)),this},k.prototype.isPlaying=function(){return this._isTweening&&!this._isPaused},k.prototype.setScheduleFunction=function(a){this._scheduleFunction=a},k.prototype.dispose=function(){var a;for(a in this)this.hasOwnProperty(a)&&delete this[a]},k.prototype.filter={},k.prototype.formula={linear:function(a){return a}},l=k.prototype.formula,d(k,{now:r,each:c,tweenProps:f,tweenProp:g,applyFilter:h,shallowCopy:d,defaults:e,composeEasingObject:j}),"object"==typeof exports?module.exports=k:"function"==typeof define&&define.amd?define(function(){return k}):void 0===a.Tweenable&&(a.Tweenable=k),k}();!function(){b.shallowCopy(b.prototype.formula,{easeInQuad:function(a){return Math.pow(a,2)},easeOutQuad:function(a){return-(Math.pow(a-1,2)-1)},easeInOutQuad:function(a){return 1>(a/=.5)?.5*Math.pow(a,2):-.5*((a-=2)*a-2)},easeInCubic:function(a){return Math.pow(a,3)},easeOutCubic:function(a){return Math.pow(a-1,3)+1},easeInOutCubic:function(a){return 1>(a/=.5)?.5*Math.pow(a,3):.5*(Math.pow(a-2,3)+2)},easeInQuart:function(a){return Math.pow(a,4)},easeOutQuart:function(a){return-(Math.pow(a-1,4)-1)},easeInOutQuart:function(a){return 1>(a/=.5)?.5*Math.pow(a,4):-.5*((a-=2)*Math.pow(a,3)-2)},easeInQuint:function(a){return Math.pow(a,5)},easeOutQuint:function(a){return Math.pow(a-1,5)+1},easeInOutQuint:function(a){return 1>(a/=.5)?.5*Math.pow(a,5):.5*(Math.pow(a-2,5)+2)},easeInSine:function(a){return-Math.cos(a*(Math.PI/2))+1},easeOutSine:function(a){return Math.sin(a*(Math.PI/2))},easeInOutSine:function(a){return-.5*(Math.cos(Math.PI*a)-1)},easeInExpo:function(a){return 0===a?0:Math.pow(2,10*(a-1))},easeOutExpo:function(a){return 1===a?1:-Math.pow(2,-10*a)+1},easeInOutExpo:function(a){return 0===a?0:1===a?1:1>(a/=.5)?.5*Math.pow(2,10*(a-1)):.5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return-(Math.sqrt(1-a*a)-1)},easeOutCirc:function(a){return Math.sqrt(1-Math.pow(a-1,2))},easeInOutCirc:function(a){return 1>(a/=.5)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)},easeOutBounce:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},easeInBack:function(a){var b=1.70158;return a*a*((b+1)*a-b)},easeOutBack:function(a){var b=1.70158;return(a-=1)*a*((b+1)*a+b)+1},easeInOutBack:function(a){var b=1.70158;return 1>(a/=.5)?.5*a*a*(((b*=1.525)+1)*a-b):.5*((a-=2)*a*(((b*=1.525)+1)*a+b)+2)},elastic:function(a){return-1*Math.pow(4,-8*a)*Math.sin(2*(6*a-1)*Math.PI/2)+1},swingFromTo:function(a){var b=1.70158;return 1>(a/=.5)?.5*a*a*(((b*=1.525)+1)*a-b):.5*((a-=2)*a*(((b*=1.525)+1)*a+b)+2)},swingFrom:function(a){var b=1.70158;return a*a*((b+1)*a-b)},swingTo:function(a){var b=1.70158;return(a-=1)*a*((b+1)*a+b)+1},bounce:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},bouncePast:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?2-(7.5625*(a-=1.5/2.75)*a+.75):2.5/2.75>a?2-(7.5625*(a-=2.25/2.75)*a+.9375):2-(7.5625*(a-=2.625/2.75)*a+.984375)},easeFromTo:function(a){return 1>(a/=.5)?.5*Math.pow(a,4):-.5*((a-=2)*Math.pow(a,3)-2)},easeFrom:function(a){return Math.pow(a,4)},easeTo:function(a){return Math.pow(a,.25)}})}(),function(){function a(a,b,c,d,e,f){function g(a){return((n*a+o)*a+p)*a}function h(a){return((q*a+r)*a+s)*a}function i(a){return(3*n*a+2*o)*a+p}function j(a){return 1/(200*a)}function k(a,b){return h(m(a,b))}function l(a){return a>=0?a:0-a}function m(a,b){var c,d,e,f,h,j;for(e=a,j=0;8>j;j++){if(f=g(e)-a,b>l(f))return e;if(h=i(e),1e-6>l(h))break;e-=f/h}if(c=0,d=1,e=a,c>e)return c;if(e>d)return d;for(;d>c;){if(f=g(e),b>l(f-a))return e;a>f?c=e:d=e,e=.5*(d-c)+c}return e}var n=0,o=0,p=0,q=0,r=0,s=0;return p=3*b,o=3*(d-b)-p,n=1-p-o,s=3*c,r=3*(e-c)-s,q=1-s-r,k(a,j(f))}function c(b,c,d,e){return function(f){return a(f,b,c,d,e,1)}}b.setBezierFunction=function(a,d,e,f,g){var h=c(d,e,f,g);return h.x1=d,h.y1=e,h.x2=f,h.y2=g,b.prototype.formula[a]=h},b.unsetBezierFunction=function(a){delete b.prototype.formula[a]}}(),function(){function a(a,c,d,e,f){return b.tweenProps(e,c,a,d,1,0,f)}var c=new b;c._filterArgs=[],b.interpolate=function(d,e,f,g){var h=b.shallowCopy({},d),i=b.composeEasingObject(d,g||"linear");c.set({});var j=c._filterArgs;j.length=0,j[0]=h,j[1]=d,j[2]=e,j[3]=i,b.applyFilter(c,"tweenCreated"),b.applyFilter(c,"beforeTween");var k=a(d,h,e,f,i);return b.applyFilter(c,"afterTween"),k}}(),function(a){function b(a,b){A.length=0;var c,d=a.length;for(c=0;d>c;c++)A.push("_"+b+"_"+c);return A}function c(a){var b=a.match(u);return b?1===b.length&&b.unshift(""):b=["",""],b.join(z)}function d(b){a.each(b,function(a){var c=b[a];"string"==typeof c&&c.match(y)&&(b[a]=e(c))})}function e(a){return i(y,a,f)}function f(a){var b=g(a);return"rgb("+b[0]+","+b[1]+","+b[2]+")"}function g(a){return a=a.replace(/#/,""),3===a.length&&(a=a.split(""),a=a[0]+a[0]+a[1]+a[1]+a[2]+a[2]),B[0]=h(a.substr(0,2)),B[1]=h(a.substr(2,2)),B[2]=h(a.substr(4,2)),B}function h(a){return parseInt(a,16)}function i(a,b,c){var d=b.match(a),e=b.replace(a,z);if(d)for(var f,g=d.length,h=0;g>h;h++)f=d.shift(),e=e.replace(z,c(f));return e}function j(a){return i(w,a,k)}function k(a){for(var b=a.match(v),c=b.length,d=a.match(x)[0],e=0;c>e;e++)d+=parseInt(b[e],10)+",";return d=d.slice(0,-1)+")"}function l(d){var e={};return a.each(d,function(a){var f=d[a];if("string"==typeof f){var g=r(f);e[a]={formatString:c(f),chunkNames:b(g,a)}}}),e}function m(b,c){a.each(c,function(a){for(var d=b[a],e=r(d),f=e.length,g=0;f>g;g++)b[c[a].chunkNames[g]]=+e[g];delete b[a]})}function n(b,c){a.each(c,function(a){var d=b[a],e=o(b,c[a].chunkNames),f=p(e,c[a].chunkNames);d=q(c[a].formatString,f),b[a]=j(d)})}function o(a,b){for(var c,d={},e=b.length,f=0;e>f;f++)c=b[f],d[c]=a[c],delete a[c];return d}function p(a,b){C.length=0;for(var c=b.length,d=0;c>d;d++)C.push(a[b[d]]);return C}function q(a,b){for(var c=a,d=b.length,e=0;d>e;e++)c=c.replace(z,+b[e].toFixed(4));return c}function r(a){return a.match(v)}function s(b,c){a.each(c,function(a){for(var d=c[a],e=d.chunkNames,f=e.length,g=b[a].split(" "),h=g[g.length-1],i=0;f>i;i++)b[e[i]]=g[i]||h;delete b[a]})}function t(b,c){a.each(c,function(a){for(var d=c[a],e=d.chunkNames,f=e.length,g="",h=0;f>h;h++)g+=" "+b[e[h]],delete b[e[h]];b[a]=g.substr(1)})}var u=/([^\-0-9\.]+)/g,v=/[0-9.\-]+/g,w=RegExp("rgb\\("+v.source+/,\s*/.source+v.source+/,\s*/.source+v.source+"\\)","g"),x=/^.*\(/,y=/#([0-9]|[a-f]){3,6}/gi,z="VAL",A=[],B=[],C=[];a.prototype.filter.token={tweenCreated:function(a,b,c){d(a),d(b),d(c),this._tokenData=l(a)},beforeTween:function(a,b,c,d){s(d,this._tokenData),m(a,this._tokenData),m(b,this._tokenData),m(c,this._tokenData)},afterTween:function(a,b,c,d){n(a,this._tokenData),n(b,this._tokenData),n(c,this._tokenData),t(d,this._tokenData)}}}(b)}(this),function(a){function b(a,b,c,d){c.each(a._events[b],function(b){b(a,d)})}function c(a,b){var c=[];b.each(a._actors,function(a){c.push(a.getEnd())}),a._animationLength=Math.max.apply(Math,c)}function d(){}var e=[],f=function(d,e,f){"use strict";function g(a,b){var c=Math.floor(b/a._animationLength);return c}function h(a){return t()-a._loopTimestamp}function i(a,b){return b>=a._timesToIterate&&-1!==a._timesToIterate}function j(a,c){i(a,c)&&(a.stop(),b(a,"animationComplete",e))}function k(a,b,c){var d;return d=i(a,c)?a._animationLength:b%a._animationLength}function l(a,b){var c=0,d=0;a._animationLength>0&&(d=g(a,b),c=k(a,b,d)),a.update(c),j(a,d)}function m(a){l(a,h(a))}function n(b){b._loopId=b._scheduleUpdate.call?b._scheduleUpdate.call(a,b._updateFn,s):setTimeout(b._updateFn,s)}function o(){return a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||a.mozCancelRequestAnimationFrame&&a.mozRequestAnimationFrame||a.setTimeout}function p(){return a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.oCancelAnimationFrame||a.msCancelAnimationFrame||a.mozCancelRequestAnimationFrame||a.clearTimeout}function q(b){b._cancelUpdate.call?b._cancelUpdate.call(a,b._loopId):clearTimeout(b._loopId)}function r(a){return this.context=a||{},this._actors={},this._playState=u.STOPPED,this._events={animationComplete:[],playStateChange:[],play:[],pause:[],stop:[],beforeUpdate:[],afterUpdate:[],addActor:[],removeActor:[],addKeyframeProperty:[],removeKeyframeProperty:[],addKeyframePropertyTrack:[],timelineModified:[]},this._timesToIterate=-1,this._animationLength=0,this._loopId=null,this._loopTimestamp=null,this._pausedAtTime=null,this._lastUpdatedMillisecond=0,this._scheduleUpdate=o(),this._cancelUpdate=p(),this._updateFn=e.bind(function(){n(this),m(this)},this),e.each(r._rendererInitHook,function(a){a(this)},this),this}var s=1e3/60,t=f.now,u={STOPPED:"stopped",PAUSED:"paused",PLAYING:"playing"};r.Tweenable=f,r._=e,r._rendererInitHook={},r.prototype.addActor=function(a){var d;return d=a instanceof r.Actor?a:new r.Actor(a),e.contains(this._actors,d)||("undefined"==typeof d.context&&(d.context=this.context),d.rekapi=this,this._actors[d.id]=d,c(this,e),d.setup(),b(this,"addActor",e,d)),d},r.prototype.getActor=function(a){return this._actors[a]},r.prototype.getActorIds=function(){return e.pluck(this._actors,"id")},r.prototype.getAllActors=function(){return e.clone(this._actors)},r.prototype.getActorCount=function(){return e.size(this._actors)},r.prototype.removeActor=function(a){return delete this._actors[a.id],delete a.rekapi,a.teardown(),c(this,e),b(this,"removeActor",e,a),a},r.prototype.play=function(a){return q(this),this._playState===u.PAUSED?this._loopTimestamp+=t()-this._pausedAtTime:this._loopTimestamp=t(),this._timesToIterate=a||-1,this._playState=u.PLAYING,n(this),b(this,"playStateChange",e),b(this,"play",e),this},r.prototype.playFrom=function(a,b){return this.play(b),this._loopTimestamp=t()-a,this},r.prototype.playFromCurrent=function(a){return this.playFrom(this._lastUpdatedMillisecond,a)},r.prototype.pause=function(){return this._playState===u.PAUSED?this:(this._playState=u.PAUSED,q(this),this._pausedAtTime=t(),b(this,"playStateChange",e),b(this,"pause",e),this)},r.prototype.stop=function(){return this._playState=u.STOPPED,q(this),e.each(this._actors,function(a){a.stop()}),b(this,"playStateChange",e),b(this,"stop",e),this},r.prototype.isPlaying=function(){return this._playState===u.PLAYING},r.prototype.update=function(a){return void 0===a&&(a=this._lastUpdatedMillisecond),b(this,"beforeUpdate",e),e.each(this._actors,function(b){b._updateState(a),"function"==typeof b.render&&b.render(b.context,b.get())}),this._lastUpdatedMillisecond=a,b(this,"afterUpdate",e),this},r.prototype.getLastPositionUpdated=function(){return this._lastUpdatedMillisecond/this._animationLength},r.prototype.getAnimationLength=function(){return this._animationLength},r.prototype.on=function(a,b){return this._events[a]?(this._events[a].push(b),this):void 0},r.prototype.off=function(a,b){return this._events[a]?(this._events[a]=b?e.without(this._events[a],b):[],this):void 0},r.prototype.exportTimeline=function(){var a={duration:this._animationLength,actors:[]};return e.each(this._actors,function(b){a.actors.push(b.exportTimeline())},this),a},r.prototype.importTimeline=function(a){e.each(a.actors,function(a){var b=new r.Actor;b.importTimeline(a),this.addActor(b)},this)},r.util={},d.Rekapi=r};e.push(function(a){"use strict";function e(a){return a.sort(function(a,b){return a-b})}function f(a,c){a.rekapi&&b(a.rekapi,c,r)}function g(a,b){var c,d=a._timelinePropertyCacheKeys,e=d.length;if(1===e)return 0;for(c=1;e>c;c++)if(d[c]>=b)return c-1;return-1}function h(a){r.each(a._propertyTracks,function(a){a.sort(function(a,b){return a.millisecond-b.millisecond})})}function i(a){r.each(a._timelinePropertyCache,function(b,c){var d=j(a,c);r.defaults(b,d)})}function j(a,b){var c={};return r.each(a._propertyTracks,function(a,d){var e,f=a[0]||null,g=0,h=a.length;for(g;h>g&&(e=a[g],e.millisecond>b?c[d]=f:e.millisecond===b&&(c[d]=e),f=e,!c[d]);g++);if(!c[d]){var i=r.last(a);i&&i.millisecond<=b&&(c[d]=i)}}),c}function k(a){r.each(a._propertyTracks,function(a){r.each(a,function(b,c){b.linkToNext(a[c+1])})})}function l(a,b,c){return r.findWhere(a._propertyTracks[b],{millisecond:c})}function m(a){a._timelinePropertyCache={};var b,c=a._timelinePropertyCache;r.each(a._keyframeProperties,function(a){b=a.millisecond,c[b]||(c[b]={}),c[b][a.name]=a}),a._timelinePropertyCacheKeys=r.map(c,function(a,b){return+b}),e(a._timelinePropertyCacheKeys),i(a),k(a)}function n(a){h(a),m(a),c(a.rekapi,r),f(a,"timelineModified")}var o="linear",p=a.Rekapi,q=p.Tweenable,r=p._;p.Actor=function(a){return a=a||{},q.call(this),r.extend(this,{_propertyTracks:{},_timelinePropertyCache:{},_timelinePropertyCacheKeys:[],_keyframeProperties:{},id:r.uniqueId(),context:a.context,setup:a.setup||d,render:a.render||d,teardown:a.teardown||d,data:{}}),this};var s=p.Actor,t=function(){};t.prototype=q.prototype,s.prototype=new t,s.prototype.keyframe=function(a,b,d){d=d||o;var e=q.composeEasingObject(b,d);return r.each(b,function(b,c){var d=new p.KeyframeProperty(a,c,b,e[c]);this._addKeyframeProperty(d)},this),this.rekapi&&c(this.rekapi,r),m(this),f(this,"timelineModified"),this},s.prototype.hasKeyframeAt=function(a,b){var c=this._propertyTracks;if(b){if(!r.has(c,b))return!1;c=r.pick(c,b)}var d;for(d in c)if(c.hasOwnProperty(d)&&l(this,d,a))return!0;return!1},s.prototype.copyKeyframe=function(a,b){var c={},d={};return r.each(this._propertyTracks,function(a,e){var f=l(this,e,b);f&&(c[e]=f.value,d[e]=f.easing)},this),this.keyframe(a,c,d),this},s.prototype.moveKeyframe=function(a,b){return!this.hasKeyframeAt(a)||this.hasKeyframeAt(b)?!1:(r.each(this._propertyTracks,function(c,d){var e=l(this,d,a);e&&(e.millisecond=b)},this),n(this),!0)},s.prototype.modifyKeyframe=function(a,b,c){return c=c||{},r.each(this._propertyTracks,function(d,e){var f=l(this,e,a);f&&f.modifyWith({value:b[e],easing:c[e]})},this),n(this),this},s.prototype.removeKeyframe=function(a){var b=this._propertyTracks;return r.each(this._propertyTracks,function(c,d){var e=r.findWhere(c,{millisecond:a});e&&(b[d]=r.without(c,e),e.detach())},this),this.rekapi&&c(this.rekapi,r),m(this),f(this,"timelineModified"),this},s.prototype.removeAllKeyframes=function(){return r.each(this._propertyTracks,function(a){a.length=0}),r.each(this._keyframeProperties,function(a){a.detach()},this),this._keyframeProperties={},this.removeKeyframe(0)},s.prototype.getKeyframeProperty=function(a,b){var c=this._propertyTracks[a];return c?r.findWhere(c,{millisecond:b}):void 0},s.prototype.modifyKeyframeProperty=function(a,b,c){var d=this.getKeyframeProperty(a,b);return d&&(d.modifyWith(c),n(this)),this},s.prototype.removeKeyframeProperty=function(a,b){var c=this._propertyTracks;if("undefined"!=typeof c[a]){var d=this.getKeyframeProperty(a,b);return c[a]=r.without(c[a],d),d.detach(),n(this),d}},s.prototype.getTrackNames=function(){return r.keys(this._propertyTracks)},s.prototype.getPropertiesInTrack=function(a){var b=this._propertyTracks[a];return b?b.slice(0):void 0},s.prototype.getStart=function(a){var b=[],c=this._propertyTracks;if(c.hasOwnProperty(a)){var d=c[a][0];d&&b.push(d.millisecond)}else r.each(c,function(a){a.length&&b.push(a[0].millisecond)});0===b.length&&(b=[0]);var e;return e=b.length>0?Math.min.apply(Math,b):0
 },s.prototype.getEnd=function(a){var b=0,c=this._propertyTracks;return a&&(c={},c[a]=this._propertyTracks[a]),r.each(c,function(a){if(a.length){var c=r.last(a).millisecond;c>b&&(b=c)}},this),b},s.prototype.getLength=function(a){return this.getEnd(a)-this.getStart(a)},s.prototype.wait=function(a){var b=this.getEnd();if(b>=a)return this;var c=this.getEnd(),d=j(this,this.getEnd()),e={},f={};return r.each(d,function(a,b){e[b]=a.value,f[b]=a.easing}),this.removeKeyframe(c),this.keyframe(c,e,f),this.keyframe(a,e,f),this},s.prototype._addKeyframeProperty=function(a){a.actor=this,this._keyframeProperties[a.id]=a;var c=a.name,d=this._propertyTracks;return"undefined"==typeof this._propertyTracks[c]?(d[c]=[a],this.rekapi&&b(this.rekapi,"addKeyframePropertyTrack",r,a)):d[c].push(a),h(this),this.rekapi&&b(this.rekapi,"addKeyframeProperty",r,a),this},s.prototype._updateState=function(a){var b=this.getStart(),c=this.getEnd(),e={};a=Math.min(c,a);var f=g(this,a),h=this._timelinePropertyCache[this._timelinePropertyCacheKeys[f]];return b===c?r.each(h,function(a,b){e[b]=a.value}):r.each(h,function(b,c){this._beforeKeyframePropertyInterpolate!==d&&this._beforeKeyframePropertyInterpolate(b),e[c]=b.getValueAt(a),this._afterKeyframePropertyInterpolate!==d&&this._afterKeyframePropertyInterpolate(b,e)},this),this.set(e),this},s.prototype._beforeKeyframePropertyInterpolate=d,s.prototype._afterKeyframePropertyInterpolate=d,s.prototype.exportTimeline=function(){var a={start:this.getStart(),end:this.getEnd(),trackNames:this.getTrackNames(),propertyTracks:{}};return r.each(this._propertyTracks,function(b,c){var d=a.propertyTracks[c]=[];r.each(b,function(a){d.push(a.exportPropertyData())})}),a},s.prototype.importTimeline=function(a){r.each(a.propertyTracks,function(a){r.each(a,function(a){var b={};b[a.name]=a.value,this.keyframe(a.millisecond,b,a.easing)},this)},this)}}),e.push(function(a){"use strict";var c="linear",d=a.Rekapi,e=d.Tweenable,f=d._,g=e.interpolate;d.KeyframeProperty=function(a,b,d,e){return this.id=f.uniqueId("keyframeProperty_"),this.millisecond=a,this.name=b,this.value=d,this.easing=e||c,this.nextProperty=null,this};var h=d.KeyframeProperty;h.prototype.modifyWith=function(a){var b={};f.each(["millisecond","easing","value"],function(c){b[c]="undefined"==typeof a[c]?this[c]:a[c]},this),f.extend(this,b)},h.prototype.getValueAt=function(a){var b,c={},d={},e=this.nextProperty,f=Math.max(a,this.millisecond);if(e){f=Math.min(f,e.millisecond),c[this.name]=this.value,d[this.name]=e.value;var h=e.millisecond-this.millisecond,i=(f-this.millisecond)/h;b=g(c,d,i,e.easing)[this.name]}else b=this.value;return b},h.prototype.linkToNext=function(a){this.nextProperty=a||null},h.prototype.detach=function(){var a=this.actor;return a&&a.rekapi&&(b(a.rekapi,"removeKeyframeProperty",f,this),delete a._keyframeProperties[this.id],this.actor=null),this},h.prototype.exportPropertyData=function(){return{millisecond:this.millisecond,name:this.name,value:this.value,easing:this.easing}}}),e.push(function(a){"use strict";function c(a,b,c){return"undefined"!=typeof c&&(a[b]=c,a.style[b]=c+"px"),a[b]}function d(a){a.clear()}function e(a,c){b(a,"beforeRender",i);var d,e=c._renderOrderSorter,f=c._renderOrder.length;if(e){var g=i.sortBy(c._canvasActors,e);d=i.pluck(g,"id")}else d=c._renderOrder;var h,j,k=c._canvasActors;for(j=0;f>j;j++)h=k[d[j]],h.render(h.context,h.get());return b(a,"afterRender",i),a}function f(a,b){b._renderOrder.push(a.id),b._canvasActors[a.id]=a}function g(a,b){b._renderOrder=i.without(b._renderOrder,a.id),delete b._canvasActors[a.id]}var h=a.Rekapi,i=h._;h._rendererInitHook.canvas=function(a){"undefined"!=typeof CanvasRenderingContext2D&&a.context instanceof CanvasRenderingContext2D&&(a.renderer=new j(a))},h.CanvasRenderer=function(a,b){this.rekapi=a,this.canvasContext=b||a.context,this._renderOrder=[],this._renderOrderSorter=null,this._canvasActors={},i.extend(a._events,{beforeRender:[],afterRender:[]});var c=this;return a.on("afterUpdate",function(){e(a,c)}),a.on("addActor",function(a,b){f(b,c)}),a.on("removeActor",function(a,b){g(b,c)}),a.on("beforeRender",function(){d(c)}),this};var j=h.CanvasRenderer;j.prototype.height=function(a){return c(this.canvasContext.canvas,"height",a)},j.prototype.width=function(a){return c(this.canvasContext.canvas,"width",a)},j.prototype.clear=function(){return this.canvasContext.clearRect(0,0,this.width(),this.height()),this.rekapi},j.prototype.moveActorToLayer=function(a,b){return b-1&&(this._renderOrder=i.without(this._renderOrder,a.id),this._renderOrder.splice(b,0,a.id)),a},j.prototype.setOrderFunction=function(a){return this._renderOrderSorter=a,this.rekapi},j.prototype.unsetOrderFunction=function(){return this._renderOrderSorter=null,this.rekapi}}),e.push(function(a){"use strict";function c(a){return a%1===0}function d(){var a=document.body.style;return"-webkit-animation"in a?"webkit":"-moz-animation"in a?"mozilla":"-ms-animation"in a?"microsoft":"-o-animation"in a?"opera":"animation"in a?"w3":""}function e(a,b){var c=document.createElement("style"),d="rekapi-"+V++;return c.id=d,c.innerHTML=b,document.head.appendChild(c),f(a),c}function f(a){var b=document.createElement("div");P.each(a.getAllActors(),function(a){if(1===a.context.nodeType){var c=a.context,d=c.parentElement;d.replaceChild(b,c),d.replaceChild(c,b)}}),b=null}function g(a,b,c){a.style[b]=c}function h(a){return P.contains(S,a)}function i(a,b){var c=[];return P.each(a,function(a){b[a]&&c.push(a+"("+b[a]+")")}),c.join(" ")}function j(a,b){P.each(R,function(c){g(a,c,b)})}function k(a,b){var c=b.context;if(1===c.nodeType){var d=W.getActorClassName(b);c.className.match(d)||(c.className+=" "+d),b._transformOrder=S.slice(0),b._beforeKeyframePropertyInterpolate=l,b._afterKeyframePropertyInterpolate=m,b.render=P.bind(n,b,b),b.teardown=P.bind(o,b,b)}}function l(a){if("transform"===a.name){var b=a.value,c=a.nextProperty;c&&b.match(/3d\(/g)&&(a.value=b.replace(/3d\(/g,"__THREED__"),c.value=c.value.replace(/3d\(/g,"__THREED__"))}}function m(a,b){if("transform"===a.name){var c=a.value,d=a.nextProperty;if(d&&c.match(/__THREED__/g)){a.value=c.replace(/__THREED__/g,"3d("),d.value=d.value.replace(/__THREED__/g,"3d(");var e=a.name;b[e]=b[e].replace(/__THREED__/g,"3d(")}}}function n(a,b,c){var d=P.keys(c),e=P.filter(d,h),f=P.reject(d,h),k=P.pick(c,f);if(e.length){var l=P.pick(c,e),m=i(a._transformOrder,l);j(b,m)}else c.transform&&j(b,c.transform);P.each(k,function(a,c){g(b,c,a)})}function o(a){var b=a.context,c=b.className.match(/\S+/g),d=P.without(c,W.getActorClassName(a));b.className=d}function p(a,b){b=b||{};var c=[],d=b.name||W.getActorClassName(a),e=b.fps||X,f=Math.ceil(a.rekapi.getAnimationLength()/1e3*e),g=!E(a),h=t(a,d,g,b.vendors,b.iterations,b.isCentered),i=q(a,d,f,g,b.vendors);return c.push(h),c.push(i),c.join("\n")}function q(a,b,c,d,e){var f=a.getTrackNames(),g=[];d?g.push(H(a,c)):P.each(f,function(b){g.push(G(a,c,b))});var h=[];return d?h.push(r(g[0],b,e)):P.each(f,function(a,c){h.push(r(g[c],b+"-"+a,e))}),h=h.join("\n")}function r(a,b,c){c=c||["w3"];var d=[];return P.each(c,function(c){var e=U(ab,[$[c],b,a]),f=s(e,c);d.push(f)}),d.join("\n")}function s(a,b){var c=new RegExp(Y,"g"),d=$[b]+"transform",e=new RegExp(Z,"g"),f=$[b],g=a.replace(e,f).replace(c,d);return g}function t(a,b,c,d,e,f){d=d||["w3"];var g,h=[];P.each(d,function(d){g=u(a,b,d,c,e,f),h.push(g)});var i=U(bb,[b,h.join("\n")]);return i}function u(a,b,c,d,e,f){var g=[],h=$[c];return g.push(v(a,b,h,d)),g.push(w(a,h)),g.push(x(a,h)),g.push(y(h)),g.push(z(h)),g.push(A(a.rekapi,h,e)),f&&g.push(B(h)),g.join("\n")}function v(a,b,c,d){var e=U("  %sanimation-name:",[c]),f=a.getTrackNames();return d?e+=U(" %s-keyframes;",[b]):(P.each(f,function(a){e+=U(" %s-%s-keyframes,",[b,a])}),e=e.slice(0,e.length-1),e+=";"),e}function w(a,b){return U("  %sanimation-duration: %sms;",[b,a.getEnd()-a.getStart()])}function x(a,b){return U("  %sanimation-delay: %sms;",[b,a.getStart()])}function y(a){return U("  %sanimation-fill-mode: forwards;",[a])}function z(a){return U("  %sanimation-timing-function: linear;",[a])}function A(a,b,c){var d;d=c?c:-1===a._timesToIterate?"infinite":a._timesToIterate;var e="  %sanimation-iteration-count: %s;";return U(e,[b,d])}function B(a){return U("  %stransform-origin: 0 0;",[a])}function C(a){var b=!1,c=a.nextProperty;if(c){if(D(a,c))return!0;var d,e=c.easing.split(" "),f=0,g=e.length,h=e[0];for(f;g>f;f++){if(d=e[f],!_[d]||h!==d){b=!1;break}b=!0,h=d}}return b}function D(a,b){return a.name===b.name&&a.value===b.value?!0:!1}function E(a){return P.any(a._keyframeProperties,C)}function F(a,b,d){var e=[],f=a.name;"transform"===a.name&&(f=Y);var g=_[a.nextProperty.easing.split(" ")[0]],h=U("cubic-bezier(%s)",[g]),i=c(b)?b:b.toFixed(2),j=c(d)?d:d.toFixed(2);return e.push(U("  %s% {%s:%s;%sanimation-timing-function: %s;}",[i,f,a.value,Z,h])),e.push(U("  %s% {%s:%s;}",[j,f,a.nextProperty.value])),e.join("\n")}function G(a,b,c){var d=[],e=a.getEnd(),f=a.getStart(),g=a.getLength(),h=I(a,c,f);h&&d.push(h);var i=!1;P.each(a._propertyTracks[c],function(c){var e,h,j,k=K(c,f,g),l=c.nextProperty;if(l){e=K(l,f,g);var m=e-k;h=Math.floor(m/100*b)||1,j=m/h}else e=100,h=1,j=1;var n;if(l&&D(c,l))n=M(a,f,c,l,k,e),i&&n.shift(),i=!1;else if(C(c)){if(n=F(c,k,e),i){var o=d.length,p=d[o-1],q=p.split("\n")[0];d[o-1]=q}i=!0}else n=L(a,h,j,f,k,c),i&&n.shift(),n.length&&(n=n.join("\n")),i=!1;n.length&&d.push(n)});var j=J(a,c,f,e);return j&&d.push(j),d.join("\n")}function H(a,b){return L(a,b+1,100/b,0,0).join("\n")}function I(a,b,c){var d=a._propertyTracks[b][0];if("undefined"!=typeof d&&d.millisecond!==c){var e=L(a,1,1,d.millisecond,0,d);return e.join("\n")}}function J(a,b,c,d){var e=P.last(a._propertyTracks[b]);if("undefined"!=typeof e&&e.millisecond!==d){var f=L(a,1,1,c,100,e);return f.join("\n")}}function K(a,b,c){return(a.millisecond-b)/c*100}function L(a,b,c,d,e,f){var g,h,i,j=[],k=a.getLength();for(g=0;b>g;g++)h=e+g*c,a._updateState(h/100*k+d),i=+h.toFixed(2)+"% ",j.push(f?"  "+i+N(a,f.name):"  "+i+N(a));return j}function M(a,b,c,d,e,f){var g=L(a,1,f-e,b,e,c);return g}function N(a,b){var c,d=["{"];if(b){c={};var e=a.get()[b];"undefined"!=typeof e&&(c[b]=e)}else c=a.get();var f;return P.each(c,function(a,b){f=a;var c=b;"transform"===b&&(c=Y),d.push(c+":"+f+";")}),d.push("}"),d.join("")}var O=a.Rekapi,P=O._,Q=O.Tweenable.now,R=["transform","webkitTransform","MozTransform","oTransform","msTransform"],S=["translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","skewX","skewY"],T=250,U=function(a,b){var c=a;return P.each(b,function(a){c=c.replace("%s",a)}),c};O._rendererInitHook.cssAnimate=function(a){1===a.context.nodeType&&(a.renderer=new W(a))};var V=0;O.DOMRenderer=function(a){return this.rekapi=a,this._playTimestamp=null,this._cachedCSS=null,this._styleElement=null,this._stopSetTimeoutHandle=null,a.on("timelineModified",P.bind(function(){this._cachedCSS=null},this)),a.on("addActor",k),this};var W=O.DOMRenderer;W.prototype.canAnimateWithCSS=function(){return!!d()},W.prototype.play=function(a){this.isPlaying()&&this.stop();var c=this._cachedCSS||this.prerender.apply(this,arguments);if(this._styleElement=e(this.rekapi,c),this._playTimestamp=Q(),a){var d=a*this.rekapi.getAnimationLength();this._stopSetTimeoutHandle=setTimeout(P.bind(this.stop,this,!0),d+T)}b(this.rekapi,"play",P)},W.prototype.stop=function(a){if(this.isPlaying()){clearTimeout(this._stopSetTimeoutHandle),this._styleElement.innerHTML="",document.head.removeChild(this._styleElement),this._styleElement=null;var c;c=a?this.rekapi.getAnimationLength():(Q()-this._playTimestamp)%this.rekapi.getAnimationLength(),this.rekapi.update(c),b(this.rekapi,"stop",P)}},W.prototype.isPlaying=function(){return!!this._styleElement},W.prototype.prerender=function(a,b){return this._cachedCSS=this.toString({vendors:[d()],fps:b,iterations:a})},W.prototype.setActorTransformOrder=function(a,b){var c=P.reject(b,h);if(c.length)throw"Unknown or unsupported transform functions: "+c.join(", ");return a._transformOrder=P.uniq(b),this.rekapi},W.getActorClassName=function(a){return"actor-"+a.id},O.DOMRenderer.prototype.toString=function(a){a=a||{};var b=[];return P.each(this.rekapi.getAllActors(),function(c){1===c.context.nodeType&&b.push(p(c,a))}),b.join("\n")};var X=30,Y="TRANSFORM",Z="VENDOR",$={microsoft:"-ms-",mozilla:"-moz-",opera:"-o-",w3:"",webkit:"-webkit-"},_={linear:".25,.25,.75,.75",easeInQuad:".55,.085,.68,.53",easeInCubic:".55,.055,.675,.19",easeInQuart:".895,.03,.685,.22",easeInQuint:".755,.05,.855,.06",easeInSine:".47,0,.745,.715",easeInExpo:".95,.05,.795,.035",easeInCirc:".6,.04,.98, .335",easeOutQuad:".25,.46,.45,.94",easeOutCubic:".215,.61,.355,1",easeOutQuart:".165,.84,.44,1",easeOutQuint:".23,1,.32,1",easeOutSine:".39,.575,.565,1",easeOutExpo:".19,1,.22,1",easeOutCirc:".075,.82,.165,1",easeInOutQuad:".455,.03,.515,.955",easeInOutCubic:".645,.045,.355,1",easeInOutQuart:".77,0,.175,1",easeInOutQuint:".86,0.07,1",easeInOutSine:".445,.05,.55,.95",easeInOutExpo:"1,0,0,1",easeInOutCirc:".785,.135,.15,.86"},ab=["@%skeyframes %s-keyframes {","%s","}"].join("\n"),bb=[".%s {","%s","}"].join("\n")});var g=function(a,b){"use strict";var c=b?{}:a,d=b&&b.underscore?b.underscore:c._,g=b&&b.Tweenable?b.Tweenable:c.Tweenable;return f(c,d,g),d.each(e,function(a){a(c)}),c.Rekapi};if("function"==typeof define&&define.amd){var h="undefined"!=typeof _;define(["shifty","underscore"],function(a,b){var c=null!=b,d={Tweenable:a,underscore:c?b:_},e=g({},d);return!h&&c&&(this._=void 0),e})}else g(this)}(this);
\ No newline at end of file
diff --git a/dist/rekapi.js b/dist/rekapi.js
index 737f085b..515e8004 100644
--- a/dist/rekapi.js
+++ b/dist/rekapi.js
@@ -1,4 +1,4 @@
-/*! rekapi - v1.3.2 - 2014-04-26 - http://rekapi.com */
+/*! rekapi - v1.3.2 - 2014-06-29 - http://rekapi.com */
 /*!
  * Rekapi - Rewritten Kapi.
  * https://github.com/jeremyckahn/rekapi
@@ -72,7 +72,7 @@ var rekapiCore = function (root, _, Tweenable) {
    */
   function determineCurrentLoopIteration (rekapi, timeSinceStart) {
     var currentIteration = Math.floor(
-        (timeSinceStart) / rekapi._animationLength);
+    (timeSinceStart) / rekapi._animationLength);
     return currentIteration;
   }
 
@@ -93,7 +93,7 @@ var rekapiCore = function (root, _, Tweenable) {
    */
   function isAnimationComplete (rekapi, currentLoopIteration) {
     return currentLoopIteration >= rekapi._timesToIterate
-        && rekapi._timesToIterate !== -1;
+       && rekapi._timesToIterate !== -1;
   }
 
   /*!
@@ -142,9 +142,9 @@ var rekapiCore = function (root, _, Tweenable) {
 
     if (rekapi._animationLength > 0) {
       currentIteration =
-          determineCurrentLoopIteration(rekapi, forMillisecond);
+      determineCurrentLoopIteration(rekapi, forMillisecond);
       loopPosition = calculateLoopPosition(
-          rekapi, forMillisecond, currentIteration);
+        rekapi, forMillisecond, currentIteration);
     }
 
     rekapi.update(loopPosition);
@@ -170,7 +170,7 @@ var rekapiCore = function (root, _, Tweenable) {
     // annotation for cancelLoop for more info.
     if (rekapi._scheduleUpdate.call) {
       rekapi._loopId = rekapi._scheduleUpdate.call(global,
-          rekapi._updateFn, UPDATE_TIME);
+        rekapi._updateFn, UPDATE_TIME);
     } else {
       rekapi._loopId = setTimeout(rekapi._updateFn, UPDATE_TIME);
     }
@@ -183,12 +183,12 @@ var rekapiCore = function (root, _, Tweenable) {
     // requestAnimationFrame() shim by Paul Irish (modified for Rekapi)
     // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
     return global.requestAnimationFrame  ||
-      global.webkitRequestAnimationFrame ||
-      global.oRequestAnimationFrame      ||
-      global.msRequestAnimationFrame     ||
+    global.webkitRequestAnimationFrame ||
+    global.oRequestAnimationFrame      ||
+    global.msRequestAnimationFrame     ||
       (global.mozCancelRequestAnimationFrame
-        && global.mozRequestAnimationFrame) ||
-      global.setTimeout;
+       && global.mozRequestAnimationFrame) ||
+    global.setTimeout;
   }
 
   /*!
@@ -196,11 +196,11 @@ var rekapiCore = function (root, _, Tweenable) {
    */
   function getCancelMethod () {
     return global.cancelAnimationFrame  ||
-      global.webkitCancelAnimationFrame ||
-      global.oCancelAnimationFrame      ||
-      global.msCancelAnimationFrame     ||
-      global.mozCancelRequestAnimationFrame ||
-      global.clearTimeout;
+    global.webkitCancelAnimationFrame ||
+    global.oCancelAnimationFrame      ||
+    global.msCancelAnimationFrame     ||
+    global.mozCancelRequestAnimationFrame ||
+    global.clearTimeout;
   }
 
   /*!
@@ -596,7 +596,7 @@ var rekapiCore = function (root, _, Tweenable) {
     } else {
       // Remove just the handler specified
       this._events[eventName] = _.without(
-          this._events[eventName], opt_handler);
+        this._events[eventName], opt_handler);
     }
 
     return this;
@@ -806,8 +806,8 @@ rekapiModules.push(function (context) {
    */
   function findPropertyAtMillisecondInTrack (actor, trackName, millisecond) {
     return _.findWhere(actor._propertyTracks[trackName], {
-        millisecond: millisecond
-      });
+      millisecond: millisecond
+    });
   }
 
   /*!
@@ -827,11 +827,11 @@ rekapiModules.push(function (context) {
       }
 
       timelinePropertyCache[millisecond][keyframeProperty.name]
-          = keyframeProperty;
+         = keyframeProperty;
     });
 
     actor._timelinePropertyCacheKeys = _.map(timelinePropertyCache,
-        function (val, key) {
+    function (val, key) {
       return +key;
     });
 
@@ -957,7 +957,7 @@ rekapiModules.push(function (context) {
    * @return {Rekapi.Actor}
    */
   Actor.prototype.keyframe = function keyframe (
-      millisecond, properties, opt_easing) {
+    millisecond, properties, opt_easing) {
 
     opt_easing = opt_easing || DEFAULT_EASING;
     var easing = Tweenable.composeEasingObject(properties, opt_easing);
@@ -965,7 +965,7 @@ rekapiModules.push(function (context) {
     // Create and add all of the KeyframeProperties
     _.each(properties, function (value, name) {
       var newKeyframeProperty = new Rekapi.KeyframeProperty(
-          millisecond, name, value, easing[name]);
+        millisecond, name, value, easing[name]);
 
       this._addKeyframeProperty(newKeyframeProperty);
     }, this);
@@ -987,7 +987,7 @@ rekapiModules.push(function (context) {
    * @param {string=} opt_trackName Optional name of a property track.
    * @return {boolean}
    */
-  Actor.prototype.hasKeyframeAt = function(millisecond, opt_trackName) {
+  Actor.prototype.hasKeyframeAt = function (millisecond, opt_trackName) {
     var tracks = this._propertyTracks;
 
     if (opt_trackName) {
@@ -1001,7 +1001,7 @@ rekapiModules.push(function (context) {
     var track;
     for (track in tracks) {
       if (tracks.hasOwnProperty(track)
-          && findPropertyAtMillisecondInTrack(this, track, millisecond)) {
+         && findPropertyAtMillisecondInTrack(this, track, millisecond)) {
         return true;
       }
     }
@@ -1038,7 +1038,7 @@ rekapiModules.push(function (context) {
 
     _.each(this._propertyTracks, function (propertyTrack, trackName) {
       var keyframeProperty =
-          findPropertyAtMillisecondInTrack(this, trackName, copyFrom);
+      findPropertyAtMillisecondInTrack(this, trackName, copyFrom);
 
       if (keyframeProperty) {
         sourcePositions[trackName] = keyframeProperty.value;
@@ -1109,12 +1109,12 @@ rekapiModules.push(function (context) {
    * @return {Rekapi.Actor}
    */
   Actor.prototype.modifyKeyframe = function (
-      millisecond, stateModification, opt_easingModification) {
+    millisecond, stateModification, opt_easingModification) {
     opt_easingModification = opt_easingModification || {};
 
     _.each(this._propertyTracks, function (propertyTrack, trackName) {
       var property = findPropertyAtMillisecondInTrack(
-          this, trackName, millisecond);
+        this, trackName, millisecond);
 
       if (property) {
         property.modifyWith({
@@ -1140,7 +1140,7 @@ rekapiModules.push(function (context) {
     var propertyTracks = this._propertyTracks;
 
     _.each(this._propertyTracks, function (propertyTrack, propertyName) {
-      var keyframeProperty = _.findWhere(propertyTrack, { millisecond: millisecond });
+      var keyframeProperty = _.findWhere(propertyTrack, {millisecond: millisecond});
 
       if (keyframeProperty) {
         propertyTracks[propertyName] = _.without(propertyTrack, keyframeProperty);
@@ -1190,7 +1190,7 @@ rekapiModules.push(function (context) {
   Actor.prototype.getKeyframeProperty = function (property, millisecond) {
     var propertyTrack = this._propertyTracks[property];
     if (propertyTrack) {
-      return _.findWhere(propertyTrack, { millisecond: millisecond });
+      return _.findWhere(propertyTrack, {millisecond: millisecond});
     }
   };
 
@@ -1204,7 +1204,7 @@ rekapiModules.push(function (context) {
    * @return {Rekapi.Actor}
    */
   Actor.prototype.modifyKeyframeProperty = function (
-      property, millisecond, newProperties) {
+    property, millisecond, newProperties) {
 
     var keyframeProperty = this.getKeyframeProperty(property, millisecond);
     if (keyframeProperty) {
@@ -1227,7 +1227,7 @@ rekapiModules.push(function (context) {
     if (typeof propertyTracks[property] !== 'undefined') {
       var keyframeProperty = this.getKeyframeProperty(property, millisecond);
       propertyTracks[property] =
-          _.without(propertyTracks[property], keyframeProperty);
+      _.without(propertyTracks[property], keyframeProperty);
       keyframeProperty.detach();
 
       cleanupAfterKeyframeModification(this);
@@ -1408,8 +1408,8 @@ rekapiModules.push(function (context) {
 
     var latestCacheId = getPropertyCacheIdForMillisecond(this, millisecond);
     var propertiesToInterpolate =
-        this._timelinePropertyCache[this._timelinePropertyCacheKeys[
-        latestCacheId]];
+      this._timelinePropertyCache[this._timelinePropertyCacheKeys[
+          latestCacheId]];
 
     if (startMs === endMs) {
 
@@ -1426,11 +1426,11 @@ rekapiModules.push(function (context) {
         }
 
         interpolatedObject[propName] =
-            keyframeProperty.getValueAt(millisecond);
+        keyframeProperty.getValueAt(millisecond);
 
         if (this._afterKeyframePropertyInterpolate !== noop) {
           this._afterKeyframePropertyInterpolate(
-              keyframeProperty, interpolatedObject);
+            keyframeProperty, interpolatedObject);
         }
       }, this);
     }
@@ -1560,14 +1560,14 @@ rekapiModules.push(function (context) {
 
     if (nextProperty) {
       correctedMillisecond =
-          Math.min(correctedMillisecond, nextProperty.millisecond);
+      Math.min(correctedMillisecond, nextProperty.millisecond);
 
       fromObj[this.name] = this.value;
       toObj[this.name] = nextProperty.value;
 
       var delta = nextProperty.millisecond - this.millisecond;
       var interpolatedPosition =
-          (correctedMillisecond - this.millisecond) / delta;
+      (correctedMillisecond - this.millisecond) / delta;
 
       value = interpolate(fromObj, toObj, interpolatedPosition,
           nextProperty.easing)[this.name];
@@ -1611,10 +1611,10 @@ rekapiModules.push(function (context) {
    */
   KeyframeProperty.prototype.exportPropertyData = function () {
     return {
-     'millisecond': this.millisecond
-     ,'name': this.name
-     ,'value': this.value
-     ,'easing': this.easing
+      'millisecond': this.millisecond
+      ,'name': this.name
+      ,'value': this.value
+      ,'easing': this.easing
     };
   };
 
@@ -3173,10 +3173,10 @@ if (typeof define === 'function' && define.amd) {
   // Example: define(['vendor/rekapi.min'], function(Rekapi) { ... });
   define(['shifty', 'underscore'], function (Tweenable, Underscore) {
     var underscoreSupportsAMD = (Underscore != null);
-    var deps = {  Tweenable: Tweenable,
-                  // Some versions of Underscore.js support AMD, others don't.
-                  // If not, use the `_` global.
-                  underscore: underscoreSupportsAMD ? Underscore : _ };
+    var deps = {Tweenable: Tweenable,
+      // Some versions of Underscore.js support AMD, others don't.
+      // If not, use the `_` global.
+      underscore: underscoreSupportsAMD ? Underscore : _};
     var Rekapi = rekapi({}, deps);
 
     if (REKAPI_DEBUG) {
diff --git a/dist/rekapi.min.js b/dist/rekapi.min.js
index 056a2684..bbad387f 100644
--- a/dist/rekapi.min.js
+++ b/dist/rekapi.min.js
@@ -1,2 +1,2 @@
-/*! rekapi - v1.3.2 - 2014-04-26 - http://rekapi.com */
+/*! rekapi - v1.3.2 - 2014-06-29 - http://rekapi.com */
 !function(a){function b(a,b,c,d){c.each(a._events[b],function(b){b(a,d)})}function c(a,b){var c=[];b.each(a._actors,function(a){c.push(a.getEnd())}),a._animationLength=Math.max.apply(Math,c)}function d(){}var e=[],f=function(d,e,f){"use strict";function g(a,b){var c=Math.floor(b/a._animationLength);return c}function h(a){return t()-a._loopTimestamp}function i(a,b){return b>=a._timesToIterate&&-1!==a._timesToIterate}function j(a,c){i(a,c)&&(a.stop(),b(a,"animationComplete",e))}function k(a,b,c){var d;return d=i(a,c)?a._animationLength:b%a._animationLength}function l(a,b){var c=0,d=0;a._animationLength>0&&(d=g(a,b),c=k(a,b,d)),a.update(c),j(a,d)}function m(a){l(a,h(a))}function n(b){b._loopId=b._scheduleUpdate.call?b._scheduleUpdate.call(a,b._updateFn,s):setTimeout(b._updateFn,s)}function o(){return a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||a.mozCancelRequestAnimationFrame&&a.mozRequestAnimationFrame||a.setTimeout}function p(){return a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.oCancelAnimationFrame||a.msCancelAnimationFrame||a.mozCancelRequestAnimationFrame||a.clearTimeout}function q(b){b._cancelUpdate.call?b._cancelUpdate.call(a,b._loopId):clearTimeout(b._loopId)}function r(a){return this.context=a||{},this._actors={},this._playState=u.STOPPED,this._events={animationComplete:[],playStateChange:[],play:[],pause:[],stop:[],beforeUpdate:[],afterUpdate:[],addActor:[],removeActor:[],addKeyframeProperty:[],removeKeyframeProperty:[],addKeyframePropertyTrack:[],timelineModified:[]},this._timesToIterate=-1,this._animationLength=0,this._loopId=null,this._loopTimestamp=null,this._pausedAtTime=null,this._lastUpdatedMillisecond=0,this._scheduleUpdate=o(),this._cancelUpdate=p(),this._updateFn=e.bind(function(){n(this),m(this)},this),e.each(r._rendererInitHook,function(a){a(this)},this),this}var s=1e3/60,t=f.now,u={STOPPED:"stopped",PAUSED:"paused",PLAYING:"playing"};r.Tweenable=f,r._=e,r._rendererInitHook={},r.prototype.addActor=function(a){var d;return d=a instanceof r.Actor?a:new r.Actor(a),e.contains(this._actors,d)||("undefined"==typeof d.context&&(d.context=this.context),d.rekapi=this,this._actors[d.id]=d,c(this,e),d.setup(),b(this,"addActor",e,d)),d},r.prototype.getActor=function(a){return this._actors[a]},r.prototype.getActorIds=function(){return e.pluck(this._actors,"id")},r.prototype.getAllActors=function(){return e.clone(this._actors)},r.prototype.getActorCount=function(){return e.size(this._actors)},r.prototype.removeActor=function(a){return delete this._actors[a.id],delete a.rekapi,a.teardown(),c(this,e),b(this,"removeActor",e,a),a},r.prototype.play=function(a){return q(this),this._playState===u.PAUSED?this._loopTimestamp+=t()-this._pausedAtTime:this._loopTimestamp=t(),this._timesToIterate=a||-1,this._playState=u.PLAYING,n(this),b(this,"playStateChange",e),b(this,"play",e),this},r.prototype.playFrom=function(a,b){return this.play(b),this._loopTimestamp=t()-a,this},r.prototype.playFromCurrent=function(a){return this.playFrom(this._lastUpdatedMillisecond,a)},r.prototype.pause=function(){return this._playState===u.PAUSED?this:(this._playState=u.PAUSED,q(this),this._pausedAtTime=t(),b(this,"playStateChange",e),b(this,"pause",e),this)},r.prototype.stop=function(){return this._playState=u.STOPPED,q(this),e.each(this._actors,function(a){a.stop()}),b(this,"playStateChange",e),b(this,"stop",e),this},r.prototype.isPlaying=function(){return this._playState===u.PLAYING},r.prototype.update=function(a){return void 0===a&&(a=this._lastUpdatedMillisecond),b(this,"beforeUpdate",e),e.each(this._actors,function(b){b._updateState(a),"function"==typeof b.render&&b.render(b.context,b.get())}),this._lastUpdatedMillisecond=a,b(this,"afterUpdate",e),this},r.prototype.getLastPositionUpdated=function(){return this._lastUpdatedMillisecond/this._animationLength},r.prototype.getAnimationLength=function(){return this._animationLength},r.prototype.on=function(a,b){return this._events[a]?(this._events[a].push(b),this):void 0},r.prototype.off=function(a,b){return this._events[a]?(this._events[a]=b?e.without(this._events[a],b):[],this):void 0},r.prototype.exportTimeline=function(){var a={duration:this._animationLength,actors:[]};return e.each(this._actors,function(b){a.actors.push(b.exportTimeline())},this),a},r.prototype.importTimeline=function(a){e.each(a.actors,function(a){var b=new r.Actor;b.importTimeline(a),this.addActor(b)},this)},r.util={},d.Rekapi=r};e.push(function(a){"use strict";function e(a){return a.sort(function(a,b){return a-b})}function f(a,c){a.rekapi&&b(a.rekapi,c,r)}function g(a,b){var c,d=a._timelinePropertyCacheKeys,e=d.length;if(1===e)return 0;for(c=1;e>c;c++)if(d[c]>=b)return c-1;return-1}function h(a){r.each(a._propertyTracks,function(a){a.sort(function(a,b){return a.millisecond-b.millisecond})})}function i(a){r.each(a._timelinePropertyCache,function(b,c){var d=j(a,c);r.defaults(b,d)})}function j(a,b){var c={};return r.each(a._propertyTracks,function(a,d){var e,f=a[0]||null,g=0,h=a.length;for(g;h>g&&(e=a[g],e.millisecond>b?c[d]=f:e.millisecond===b&&(c[d]=e),f=e,!c[d]);g++);if(!c[d]){var i=r.last(a);i&&i.millisecond<=b&&(c[d]=i)}}),c}function k(a){r.each(a._propertyTracks,function(a){r.each(a,function(b,c){b.linkToNext(a[c+1])})})}function l(a,b,c){return r.findWhere(a._propertyTracks[b],{millisecond:c})}function m(a){a._timelinePropertyCache={};var b,c=a._timelinePropertyCache;r.each(a._keyframeProperties,function(a){b=a.millisecond,c[b]||(c[b]={}),c[b][a.name]=a}),a._timelinePropertyCacheKeys=r.map(c,function(a,b){return+b}),e(a._timelinePropertyCacheKeys),i(a),k(a)}function n(a){h(a),m(a),c(a.rekapi,r),f(a,"timelineModified")}var o="linear",p=a.Rekapi,q=p.Tweenable,r=p._;p.Actor=function(a){return a=a||{},q.call(this),r.extend(this,{_propertyTracks:{},_timelinePropertyCache:{},_timelinePropertyCacheKeys:[],_keyframeProperties:{},id:r.uniqueId(),context:a.context,setup:a.setup||d,render:a.render||d,teardown:a.teardown||d,data:{}}),this};var s=p.Actor,t=function(){};t.prototype=q.prototype,s.prototype=new t,s.prototype.keyframe=function(a,b,d){d=d||o;var e=q.composeEasingObject(b,d);return r.each(b,function(b,c){var d=new p.KeyframeProperty(a,c,b,e[c]);this._addKeyframeProperty(d)},this),this.rekapi&&c(this.rekapi,r),m(this),f(this,"timelineModified"),this},s.prototype.hasKeyframeAt=function(a,b){var c=this._propertyTracks;if(b){if(!r.has(c,b))return!1;c=r.pick(c,b)}var d;for(d in c)if(c.hasOwnProperty(d)&&l(this,d,a))return!0;return!1},s.prototype.copyKeyframe=function(a,b){var c={},d={};return r.each(this._propertyTracks,function(a,e){var f=l(this,e,b);f&&(c[e]=f.value,d[e]=f.easing)},this),this.keyframe(a,c,d),this},s.prototype.moveKeyframe=function(a,b){return!this.hasKeyframeAt(a)||this.hasKeyframeAt(b)?!1:(r.each(this._propertyTracks,function(c,d){var e=l(this,d,a);e&&(e.millisecond=b)},this),n(this),!0)},s.prototype.modifyKeyframe=function(a,b,c){return c=c||{},r.each(this._propertyTracks,function(d,e){var f=l(this,e,a);f&&f.modifyWith({value:b[e],easing:c[e]})},this),n(this),this},s.prototype.removeKeyframe=function(a){var b=this._propertyTracks;return r.each(this._propertyTracks,function(c,d){var e=r.findWhere(c,{millisecond:a});e&&(b[d]=r.without(c,e),e.detach())},this),this.rekapi&&c(this.rekapi,r),m(this),f(this,"timelineModified"),this},s.prototype.removeAllKeyframes=function(){return r.each(this._propertyTracks,function(a){a.length=0}),r.each(this._keyframeProperties,function(a){a.detach()},this),this._keyframeProperties={},this.removeKeyframe(0)},s.prototype.getKeyframeProperty=function(a,b){var c=this._propertyTracks[a];return c?r.findWhere(c,{millisecond:b}):void 0},s.prototype.modifyKeyframeProperty=function(a,b,c){var d=this.getKeyframeProperty(a,b);return d&&(d.modifyWith(c),n(this)),this},s.prototype.removeKeyframeProperty=function(a,b){var c=this._propertyTracks;if("undefined"!=typeof c[a]){var d=this.getKeyframeProperty(a,b);return c[a]=r.without(c[a],d),d.detach(),n(this),d}},s.prototype.getTrackNames=function(){return r.keys(this._propertyTracks)},s.prototype.getPropertiesInTrack=function(a){var b=this._propertyTracks[a];return b?b.slice(0):void 0},s.prototype.getStart=function(a){var b=[],c=this._propertyTracks;if(c.hasOwnProperty(a)){var d=c[a][0];d&&b.push(d.millisecond)}else r.each(c,function(a){a.length&&b.push(a[0].millisecond)});0===b.length&&(b=[0]);var e;return e=b.length>0?Math.min.apply(Math,b):0},s.prototype.getEnd=function(a){var b=0,c=this._propertyTracks;return a&&(c={},c[a]=this._propertyTracks[a]),r.each(c,function(a){if(a.length){var c=r.last(a).millisecond;c>b&&(b=c)}},this),b},s.prototype.getLength=function(a){return this.getEnd(a)-this.getStart(a)},s.prototype.wait=function(a){var b=this.getEnd();if(b>=a)return this;var c=this.getEnd(),d=j(this,this.getEnd()),e={},f={};return r.each(d,function(a,b){e[b]=a.value,f[b]=a.easing}),this.removeKeyframe(c),this.keyframe(c,e,f),this.keyframe(a,e,f),this},s.prototype._addKeyframeProperty=function(a){a.actor=this,this._keyframeProperties[a.id]=a;var c=a.name,d=this._propertyTracks;return"undefined"==typeof this._propertyTracks[c]?(d[c]=[a],this.rekapi&&b(this.rekapi,"addKeyframePropertyTrack",r,a)):d[c].push(a),h(this),this.rekapi&&b(this.rekapi,"addKeyframeProperty",r,a),this},s.prototype._updateState=function(a){var b=this.getStart(),c=this.getEnd(),e={};a=Math.min(c,a);var f=g(this,a),h=this._timelinePropertyCache[this._timelinePropertyCacheKeys[f]];return b===c?r.each(h,function(a,b){e[b]=a.value}):r.each(h,function(b,c){this._beforeKeyframePropertyInterpolate!==d&&this._beforeKeyframePropertyInterpolate(b),e[c]=b.getValueAt(a),this._afterKeyframePropertyInterpolate!==d&&this._afterKeyframePropertyInterpolate(b,e)},this),this.set(e),this},s.prototype._beforeKeyframePropertyInterpolate=d,s.prototype._afterKeyframePropertyInterpolate=d,s.prototype.exportTimeline=function(){var a={start:this.getStart(),end:this.getEnd(),trackNames:this.getTrackNames(),propertyTracks:{}};return r.each(this._propertyTracks,function(b,c){var d=a.propertyTracks[c]=[];r.each(b,function(a){d.push(a.exportPropertyData())})}),a},s.prototype.importTimeline=function(a){r.each(a.propertyTracks,function(a){r.each(a,function(a){var b={};b[a.name]=a.value,this.keyframe(a.millisecond,b,a.easing)},this)},this)}}),e.push(function(a){"use strict";var c="linear",d=a.Rekapi,e=d.Tweenable,f=d._,g=e.interpolate;d.KeyframeProperty=function(a,b,d,e){return this.id=f.uniqueId("keyframeProperty_"),this.millisecond=a,this.name=b,this.value=d,this.easing=e||c,this.nextProperty=null,this};var h=d.KeyframeProperty;h.prototype.modifyWith=function(a){var b={};f.each(["millisecond","easing","value"],function(c){b[c]="undefined"==typeof a[c]?this[c]:a[c]},this),f.extend(this,b)},h.prototype.getValueAt=function(a){var b,c={},d={},e=this.nextProperty,f=Math.max(a,this.millisecond);if(e){f=Math.min(f,e.millisecond),c[this.name]=this.value,d[this.name]=e.value;var h=e.millisecond-this.millisecond,i=(f-this.millisecond)/h;b=g(c,d,i,e.easing)[this.name]}else b=this.value;return b},h.prototype.linkToNext=function(a){this.nextProperty=a||null},h.prototype.detach=function(){var a=this.actor;return a&&a.rekapi&&(b(a.rekapi,"removeKeyframeProperty",f,this),delete a._keyframeProperties[this.id],this.actor=null),this},h.prototype.exportPropertyData=function(){return{millisecond:this.millisecond,name:this.name,value:this.value,easing:this.easing}}}),e.push(function(a){"use strict";function c(a,b,c){return"undefined"!=typeof c&&(a[b]=c,a.style[b]=c+"px"),a[b]}function d(a){a.clear()}function e(a,c){b(a,"beforeRender",i);var d,e=c._renderOrderSorter,f=c._renderOrder.length;if(e){var g=i.sortBy(c._canvasActors,e);d=i.pluck(g,"id")}else d=c._renderOrder;var h,j,k=c._canvasActors;for(j=0;f>j;j++)h=k[d[j]],h.render(h.context,h.get());return b(a,"afterRender",i),a}function f(a,b){b._renderOrder.push(a.id),b._canvasActors[a.id]=a}function g(a,b){b._renderOrder=i.without(b._renderOrder,a.id),delete b._canvasActors[a.id]}var h=a.Rekapi,i=h._;h._rendererInitHook.canvas=function(a){"undefined"!=typeof CanvasRenderingContext2D&&a.context instanceof CanvasRenderingContext2D&&(a.renderer=new j(a))},h.CanvasRenderer=function(a,b){this.rekapi=a,this.canvasContext=b||a.context,this._renderOrder=[],this._renderOrderSorter=null,this._canvasActors={},i.extend(a._events,{beforeRender:[],afterRender:[]});var c=this;return a.on("afterUpdate",function(){e(a,c)}),a.on("addActor",function(a,b){f(b,c)}),a.on("removeActor",function(a,b){g(b,c)}),a.on("beforeRender",function(){d(c)}),this};var j=h.CanvasRenderer;j.prototype.height=function(a){return c(this.canvasContext.canvas,"height",a)},j.prototype.width=function(a){return c(this.canvasContext.canvas,"width",a)},j.prototype.clear=function(){return this.canvasContext.clearRect(0,0,this.width(),this.height()),this.rekapi},j.prototype.moveActorToLayer=function(a,b){return b-1&&(this._renderOrder=i.without(this._renderOrder,a.id),this._renderOrder.splice(b,0,a.id)),a},j.prototype.setOrderFunction=function(a){return this._renderOrderSorter=a,this.rekapi},j.prototype.unsetOrderFunction=function(){return this._renderOrderSorter=null,this.rekapi}}),e.push(function(a){"use strict";function c(a){return a%1===0}function d(){var a=document.body.style;return"-webkit-animation"in a?"webkit":"-moz-animation"in a?"mozilla":"-ms-animation"in a?"microsoft":"-o-animation"in a?"opera":"animation"in a?"w3":""}function e(a,b){var c=document.createElement("style"),d="rekapi-"+V++;return c.id=d,c.innerHTML=b,document.head.appendChild(c),f(a),c}function f(a){var b=document.createElement("div");P.each(a.getAllActors(),function(a){if(1===a.context.nodeType){var c=a.context,d=c.parentElement;d.replaceChild(b,c),d.replaceChild(c,b)}}),b=null}function g(a,b,c){a.style[b]=c}function h(a){return P.contains(S,a)}function i(a,b){var c=[];return P.each(a,function(a){b[a]&&c.push(a+"("+b[a]+")")}),c.join(" ")}function j(a,b){P.each(R,function(c){g(a,c,b)})}function k(a,b){var c=b.context;if(1===c.nodeType){var d=W.getActorClassName(b);c.className.match(d)||(c.className+=" "+d),b._transformOrder=S.slice(0),b._beforeKeyframePropertyInterpolate=l,b._afterKeyframePropertyInterpolate=m,b.render=P.bind(n,b,b),b.teardown=P.bind(o,b,b)}}function l(a){if("transform"===a.name){var b=a.value,c=a.nextProperty;c&&b.match(/3d\(/g)&&(a.value=b.replace(/3d\(/g,"__THREED__"),c.value=c.value.replace(/3d\(/g,"__THREED__"))}}function m(a,b){if("transform"===a.name){var c=a.value,d=a.nextProperty;if(d&&c.match(/__THREED__/g)){a.value=c.replace(/__THREED__/g,"3d("),d.value=d.value.replace(/__THREED__/g,"3d(");var e=a.name;b[e]=b[e].replace(/__THREED__/g,"3d(")}}}function n(a,b,c){var d=P.keys(c),e=P.filter(d,h),f=P.reject(d,h),k=P.pick(c,f);if(e.length){var l=P.pick(c,e),m=i(a._transformOrder,l);j(b,m)}else c.transform&&j(b,c.transform);P.each(k,function(a,c){g(b,c,a)})}function o(a){var b=a.context,c=b.className.match(/\S+/g),d=P.without(c,W.getActorClassName(a));b.className=d}function p(a,b){b=b||{};var c=[],d=b.name||W.getActorClassName(a),e=b.fps||X,f=Math.ceil(a.rekapi.getAnimationLength()/1e3*e),g=!E(a),h=t(a,d,g,b.vendors,b.iterations,b.isCentered),i=q(a,d,f,g,b.vendors);return c.push(h),c.push(i),c.join("\n")}function q(a,b,c,d,e){var f=a.getTrackNames(),g=[];d?g.push(H(a,c)):P.each(f,function(b){g.push(G(a,c,b))});var h=[];return d?h.push(r(g[0],b,e)):P.each(f,function(a,c){h.push(r(g[c],b+"-"+a,e))}),h=h.join("\n")}function r(a,b,c){c=c||["w3"];var d=[];return P.each(c,function(c){var e=U(ab,[$[c],b,a]),f=s(e,c);d.push(f)}),d.join("\n")}function s(a,b){var c=new RegExp(Y,"g"),d=$[b]+"transform",e=new RegExp(Z,"g"),f=$[b],g=a.replace(e,f).replace(c,d);return g}function t(a,b,c,d,e,f){d=d||["w3"];var g,h=[];P.each(d,function(d){g=u(a,b,d,c,e,f),h.push(g)});var i=U(bb,[b,h.join("\n")]);return i}function u(a,b,c,d,e,f){var g=[],h=$[c];return g.push(v(a,b,h,d)),g.push(w(a,h)),g.push(x(a,h)),g.push(y(h)),g.push(z(h)),g.push(A(a.rekapi,h,e)),f&&g.push(B(h)),g.join("\n")}function v(a,b,c,d){var e=U("  %sanimation-name:",[c]),f=a.getTrackNames();return d?e+=U(" %s-keyframes;",[b]):(P.each(f,function(a){e+=U(" %s-%s-keyframes,",[b,a])}),e=e.slice(0,e.length-1),e+=";"),e}function w(a,b){return U("  %sanimation-duration: %sms;",[b,a.getEnd()-a.getStart()])}function x(a,b){return U("  %sanimation-delay: %sms;",[b,a.getStart()])}function y(a){return U("  %sanimation-fill-mode: forwards;",[a])}function z(a){return U("  %sanimation-timing-function: linear;",[a])}function A(a,b,c){var d;d=c?c:-1===a._timesToIterate?"infinite":a._timesToIterate;var e="  %sanimation-iteration-count: %s;";return U(e,[b,d])}function B(a){return U("  %stransform-origin: 0 0;",[a])}function C(a){var b=!1,c=a.nextProperty;if(c){if(D(a,c))return!0;var d,e=c.easing.split(" "),f=0,g=e.length,h=e[0];for(f;g>f;f++){if(d=e[f],!_[d]||h!==d){b=!1;break}b=!0,h=d}}return b}function D(a,b){return a.name===b.name&&a.value===b.value?!0:!1}function E(a){return P.any(a._keyframeProperties,C)}function F(a,b,d){var e=[],f=a.name;"transform"===a.name&&(f=Y);var g=_[a.nextProperty.easing.split(" ")[0]],h=U("cubic-bezier(%s)",[g]),i=c(b)?b:b.toFixed(2),j=c(d)?d:d.toFixed(2);return e.push(U("  %s% {%s:%s;%sanimation-timing-function: %s;}",[i,f,a.value,Z,h])),e.push(U("  %s% {%s:%s;}",[j,f,a.nextProperty.value])),e.join("\n")}function G(a,b,c){var d=[],e=a.getEnd(),f=a.getStart(),g=a.getLength(),h=I(a,c,f);h&&d.push(h);var i=!1;P.each(a._propertyTracks[c],function(c){var e,h,j,k=K(c,f,g),l=c.nextProperty;if(l){e=K(l,f,g);var m=e-k;h=Math.floor(m/100*b)||1,j=m/h}else e=100,h=1,j=1;var n;if(l&&D(c,l))n=M(a,f,c,l,k,e),i&&n.shift(),i=!1;else if(C(c)){if(n=F(c,k,e),i){var o=d.length,p=d[o-1],q=p.split("\n")[0];d[o-1]=q}i=!0}else n=L(a,h,j,f,k,c),i&&n.shift(),n.length&&(n=n.join("\n")),i=!1;n.length&&d.push(n)});var j=J(a,c,f,e);return j&&d.push(j),d.join("\n")}function H(a,b){return L(a,b+1,100/b,0,0).join("\n")}function I(a,b,c){var d=a._propertyTracks[b][0];if("undefined"!=typeof d&&d.millisecond!==c){var e=L(a,1,1,d.millisecond,0,d);return e.join("\n")}}function J(a,b,c,d){var e=P.last(a._propertyTracks[b]);if("undefined"!=typeof e&&e.millisecond!==d){var f=L(a,1,1,c,100,e);return f.join("\n")}}function K(a,b,c){return(a.millisecond-b)/c*100}function L(a,b,c,d,e,f){var g,h,i,j=[],k=a.getLength();for(g=0;b>g;g++)h=e+g*c,a._updateState(h/100*k+d),i=+h.toFixed(2)+"% ",j.push(f?"  "+i+N(a,f.name):"  "+i+N(a));return j}function M(a,b,c,d,e,f){var g=L(a,1,f-e,b,e,c);return g}function N(a,b){var c,d=["{"];if(b){c={};var e=a.get()[b];"undefined"!=typeof e&&(c[b]=e)}else c=a.get();var f;return P.each(c,function(a,b){f=a;var c=b;"transform"===b&&(c=Y),d.push(c+":"+f+";")}),d.push("}"),d.join("")}var O=a.Rekapi,P=O._,Q=O.Tweenable.now,R=["transform","webkitTransform","MozTransform","oTransform","msTransform"],S=["translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","skewX","skewY"],T=250,U=function(a,b){var c=a;return P.each(b,function(a){c=c.replace("%s",a)}),c};O._rendererInitHook.cssAnimate=function(a){1===a.context.nodeType&&(a.renderer=new W(a))};var V=0;O.DOMRenderer=function(a){return this.rekapi=a,this._playTimestamp=null,this._cachedCSS=null,this._styleElement=null,this._stopSetTimeoutHandle=null,a.on("timelineModified",P.bind(function(){this._cachedCSS=null},this)),a.on("addActor",k),this};var W=O.DOMRenderer;W.prototype.canAnimateWithCSS=function(){return!!d()},W.prototype.play=function(a){this.isPlaying()&&this.stop();var c=this._cachedCSS||this.prerender.apply(this,arguments);if(this._styleElement=e(this.rekapi,c),this._playTimestamp=Q(),a){var d=a*this.rekapi.getAnimationLength();this._stopSetTimeoutHandle=setTimeout(P.bind(this.stop,this,!0),d+T)}b(this.rekapi,"play",P)},W.prototype.stop=function(a){if(this.isPlaying()){clearTimeout(this._stopSetTimeoutHandle),this._styleElement.innerHTML="",document.head.removeChild(this._styleElement),this._styleElement=null;var c;c=a?this.rekapi.getAnimationLength():(Q()-this._playTimestamp)%this.rekapi.getAnimationLength(),this.rekapi.update(c),b(this.rekapi,"stop",P)}},W.prototype.isPlaying=function(){return!!this._styleElement},W.prototype.prerender=function(a,b){return this._cachedCSS=this.toString({vendors:[d()],fps:b,iterations:a})},W.prototype.setActorTransformOrder=function(a,b){var c=P.reject(b,h);if(c.length)throw"Unknown or unsupported transform functions: "+c.join(", ");return a._transformOrder=P.uniq(b),this.rekapi},W.getActorClassName=function(a){return"actor-"+a.id},O.DOMRenderer.prototype.toString=function(a){a=a||{};var b=[];return P.each(this.rekapi.getAllActors(),function(c){1===c.context.nodeType&&b.push(p(c,a))}),b.join("\n")};var X=30,Y="TRANSFORM",Z="VENDOR",$={microsoft:"-ms-",mozilla:"-moz-",opera:"-o-",w3:"",webkit:"-webkit-"},_={linear:".25,.25,.75,.75",easeInQuad:".55,.085,.68,.53",easeInCubic:".55,.055,.675,.19",easeInQuart:".895,.03,.685,.22",easeInQuint:".755,.05,.855,.06",easeInSine:".47,0,.745,.715",easeInExpo:".95,.05,.795,.035",easeInCirc:".6,.04,.98, .335",easeOutQuad:".25,.46,.45,.94",easeOutCubic:".215,.61,.355,1",easeOutQuart:".165,.84,.44,1",easeOutQuint:".23,1,.32,1",easeOutSine:".39,.575,.565,1",easeOutExpo:".19,1,.22,1",easeOutCirc:".075,.82,.165,1",easeInOutQuad:".455,.03,.515,.955",easeInOutCubic:".645,.045,.355,1",easeInOutQuart:".77,0,.175,1",easeInOutQuint:".86,0.07,1",easeInOutSine:".445,.05,.55,.95",easeInOutExpo:"1,0,0,1",easeInOutCirc:".785,.135,.15,.86"},ab=["@%skeyframes %s-keyframes {","%s","}"].join("\n"),bb=[".%s {","%s","}"].join("\n")});var g=function(a,b){"use strict";var c=b?{}:a,d=b&&b.underscore?b.underscore:c._,g=b&&b.Tweenable?b.Tweenable:c.Tweenable;return f(c,d,g),d.each(e,function(a){a(c)}),c.Rekapi};if("function"==typeof define&&define.amd){var h="undefined"!=typeof _;define(["shifty","underscore"],function(a,b){var c=null!=b,d={Tweenable:a,underscore:c?b:_},e=g({},d);return!h&&c&&(this._=void 0),e})}else g(this)}(this);
\ No newline at end of file
diff --git a/dist/shifty.min.js b/dist/shifty.min.js
index 89784d39..8dd2efbc 100644
--- a/dist/shifty.min.js
+++ b/dist/shifty.min.js
@@ -1,2 +1,2 @@
-/*! shifty - v1.2.1 - 2014-04-26 - http://jeremyckahn.github.io/shifty */
+/*! shifty - v1.2.1 - 2014-06-29 - http://jeremyckahn.github.io/shifty */
 (function(t){var n=function(){"use strict";function n(){}function e(t,n){var e;for(e in t)Object.hasOwnProperty.call(t,e)&&n(e)}function r(t,n){return e(n,function(e){t[e]=n[e]}),t}function i(t,n){e(n,function(e){t[e]===void 0&&(t[e]=n[e])})}function o(t,n,e,r,i,o,a){var s,c=(t-o)/i;for(s in n)n.hasOwnProperty(s)&&(n[s]=u(e[s],r[s],h[a[s]],c));return n}function u(t,n,e,r){return t+(n-t)*e(r)}function a(t,n){var r=f.prototype.filter,i=t._filterArgs;e(r,function(e){r[e][n]!==void 0&&r[e][n].apply(t,i)})}function s(t,n,e,r,i,u,s,c,f){d=n+e,v=Math.min(m(),d),y=v>=d,t.isPlaying()&&!y?(f(t._timeoutHandler,_),a(t,"beforeTween"),o(v,r,i,u,e,n,s),a(t,"afterTween"),c(r)):y&&(c(u),t.stop(!0))}function c(t,n){var r={};return"string"==typeof n?e(t,function(t){r[t]=n}):e(t,function(t){r[t]||(r[t]=n[t]||l)}),r}function f(t,n){this._currentState=t||{},this._configured=!1,this._scheduleFunction=p,n!==void 0&&this.setConfig(n)}var h,p,l="linear",w=500,_=1e3/60,g=Date.now?Date.now:function(){return+new Date},m=g;p="undefined"!=typeof window?window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||window.mozCancelRequestAnimationFrame&&window.mozRequestAnimationFrame||setTimeout:setTimeout;var d,v,y;return f.prototype.tween=function(t){return this._isTweening?this:(void 0===t&&this._configured||this.setConfig(t),this._start(this.get()),this.resume())},f.prototype.setConfig=function(t){t=t||{},this._configured=!0,this._pausedAtTime=null,this._start=t.start||n,this._step=t.step||n,this._finish=t.finish||n,this._duration=t.duration||w,this._currentState=t.from||this.get(),this._originalState=this.get(),this._targetState=t.to||this.get(),this._timestamp=m();var e=this._currentState,r=this._targetState;return i(r,e),this._easing=c(e,t.easing||l),this._filterArgs=[e,this._originalState,r,this._easing],a(this,"tweenCreated"),this},f.prototype.get=function(){return r({},this._currentState)},f.prototype.set=function(t){this._currentState=t},f.prototype.pause=function(){return this._pausedAtTime=m(),this._isPaused=!0,this},f.prototype.resume=function(){this._isPaused&&(this._timestamp+=m()-this._pausedAtTime),this._isPaused=!1,this._isTweening=!0;var t=this;return this._timeoutHandler=function(){s(t,t._timestamp,t._duration,t._currentState,t._originalState,t._targetState,t._easing,t._step,t._scheduleFunction)},this._timeoutHandler(),this},f.prototype.stop=function(t){return this._isTweening=!1,this._isPaused=!1,this._timeoutHandler=n,t&&(r(this._currentState,this._targetState),a(this,"afterTweenEnd"),this._finish.call(this,this._currentState)),this},f.prototype.isPlaying=function(){return this._isTweening&&!this._isPaused},f.prototype.setScheduleFunction=function(t){this._scheduleFunction=t},f.prototype.dispose=function(){var t;for(t in this)this.hasOwnProperty(t)&&delete this[t]},f.prototype.filter={},f.prototype.formula={linear:function(t){return t}},h=f.prototype.formula,r(f,{now:m,each:e,tweenProps:o,tweenProp:u,applyFilter:a,shallowCopy:r,defaults:i,composeEasingObject:c}),"object"==typeof exports?module.exports=f:"function"==typeof define&&define.amd?define(function(){return f}):t.Tweenable===void 0&&(t.Tweenable=f),f}();(function(){n.shallowCopy(n.prototype.formula,{easeInQuad:function(t){return Math.pow(t,2)},easeOutQuad:function(t){return-(Math.pow(t-1,2)-1)},easeInOutQuad:function(t){return 1>(t/=.5)?.5*Math.pow(t,2):-.5*((t-=2)*t-2)},easeInCubic:function(t){return Math.pow(t,3)},easeOutCubic:function(t){return Math.pow(t-1,3)+1},easeInOutCubic:function(t){return 1>(t/=.5)?.5*Math.pow(t,3):.5*(Math.pow(t-2,3)+2)},easeInQuart:function(t){return Math.pow(t,4)},easeOutQuart:function(t){return-(Math.pow(t-1,4)-1)},easeInOutQuart:function(t){return 1>(t/=.5)?.5*Math.pow(t,4):-.5*((t-=2)*Math.pow(t,3)-2)},easeInQuint:function(t){return Math.pow(t,5)},easeOutQuint:function(t){return Math.pow(t-1,5)+1},easeInOutQuint:function(t){return 1>(t/=.5)?.5*Math.pow(t,5):.5*(Math.pow(t-2,5)+2)},easeInSine:function(t){return-Math.cos(t*(Math.PI/2))+1},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:-Math.pow(2,-10*t)+1},easeInOutExpo:function(t){return 0===t?0:1===t?1:1>(t/=.5)?.5*Math.pow(2,10*(t-1)):.5*(-Math.pow(2,-10*--t)+2)},easeInCirc:function(t){return-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-Math.pow(t-1,2))},easeInOutCirc:function(t){return 1>(t/=.5)?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeOutBounce:function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInBack:function(t){var n=1.70158;return t*t*((n+1)*t-n)},easeOutBack:function(t){var n=1.70158;return(t-=1)*t*((n+1)*t+n)+1},easeInOutBack:function(t){var n=1.70158;return 1>(t/=.5)?.5*t*t*(((n*=1.525)+1)*t-n):.5*((t-=2)*t*(((n*=1.525)+1)*t+n)+2)},elastic:function(t){return-1*Math.pow(4,-8*t)*Math.sin((6*t-1)*2*Math.PI/2)+1},swingFromTo:function(t){var n=1.70158;return 1>(t/=.5)?.5*t*t*(((n*=1.525)+1)*t-n):.5*((t-=2)*t*(((n*=1.525)+1)*t+n)+2)},swingFrom:function(t){var n=1.70158;return t*t*((n+1)*t-n)},swingTo:function(t){var n=1.70158;return(t-=1)*t*((n+1)*t+n)+1},bounce:function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bouncePast:function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?2-(7.5625*(t-=1.5/2.75)*t+.75):2.5/2.75>t?2-(7.5625*(t-=2.25/2.75)*t+.9375):2-(7.5625*(t-=2.625/2.75)*t+.984375)},easeFromTo:function(t){return 1>(t/=.5)?.5*Math.pow(t,4):-.5*((t-=2)*Math.pow(t,3)-2)},easeFrom:function(t){return Math.pow(t,4)},easeTo:function(t){return Math.pow(t,.25)}})})(),function(){function t(t,n,e,r,i,o){function u(t){return((l*t+w)*t+_)*t}function a(t){return((g*t+m)*t+d)*t}function s(t){return(3*l*t+2*w)*t+_}function c(t){return 1/(200*t)}function f(t,n){return a(p(t,n))}function h(t){return t>=0?t:0-t}function p(t,n){var e,r,i,o,a,c;for(i=t,c=0;8>c;c++){if(o=u(i)-t,n>h(o))return i;if(a=s(i),1e-6>h(a))break;i-=o/a}if(e=0,r=1,i=t,e>i)return e;if(i>r)return r;for(;r>e;){if(o=u(i),n>h(o-t))return i;t>o?e=i:r=i,i=.5*(r-e)+e}return i}var l=0,w=0,_=0,g=0,m=0,d=0;return _=3*n,w=3*(r-n)-_,l=1-_-w,d=3*e,m=3*(i-e)-d,g=1-d-m,f(t,c(o))}function e(n,e,r,i){return function(o){return t(o,n,e,r,i,1)}}n.setBezierFunction=function(t,r,i,o,u){var a=e(r,i,o,u);return a.x1=r,a.y1=i,a.x2=o,a.y2=u,n.prototype.formula[t]=a},n.unsetBezierFunction=function(t){delete n.prototype.formula[t]}}(),function(){function t(t,e,r,i,o){return n.tweenProps(i,e,t,r,1,0,o)}var e=new n;e._filterArgs=[],n.interpolate=function(r,i,o,u){var a=n.shallowCopy({},r),s=n.composeEasingObject(r,u||"linear");e.set({});var c=e._filterArgs;c.length=0,c[0]=a,c[1]=r,c[2]=i,c[3]=s,n.applyFilter(e,"tweenCreated"),n.applyFilter(e,"beforeTween");var f=t(r,a,i,o,s);return n.applyFilter(e,"afterTween"),f}}(),function(t){function n(t,n){k.length=0;var e,r=t.length;for(e=0;r>e;e++)k.push("_"+n+"_"+e);return k}function e(t){var n=t.match(y);return n?1===n.length&&n.unshift(""):n=["",""],n.join(T)}function r(n){t.each(n,function(t){var e=n[t];"string"==typeof e&&e.match(I)&&(n[t]=i(e))})}function i(t){return s(I,t,o)}function o(t){var n=u(t);return"rgb("+n[0]+","+n[1]+","+n[2]+")"}function u(t){return t=t.replace(/#/,""),3===t.length&&(t=t.split(""),t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),F[0]=a(t.substr(0,2)),F[1]=a(t.substr(2,2)),F[2]=a(t.substr(4,2)),F}function a(t){return parseInt(t,16)}function s(t,n,e){var r=n.match(t),i=n.replace(t,T);if(r)for(var o,u=r.length,a=0;u>a;a++)o=r.shift(),i=i.replace(T,e(o));return i}function c(t){return s(O,t,f)}function f(t){for(var n=t.match(M),e=n.length,r=t.match(b)[0],i=0;e>i;i++)r+=parseInt(n[i],10)+",";return r=r.slice(0,-1)+")"}function h(r){var i={};return t.each(r,function(t){var o=r[t];if("string"==typeof o){var u=m(o);i[t]={formatString:e(o),chunkNames:n(u,t)}}}),i}function p(n,e){t.each(e,function(t){for(var r=n[t],i=m(r),o=i.length,u=0;o>u;u++)n[e[t].chunkNames[u]]=+i[u];delete n[t]})}function l(n,e){t.each(e,function(t){var r=n[t],i=w(n,e[t].chunkNames),o=_(i,e[t].chunkNames);r=g(e[t].formatString,o),n[t]=c(r)})}function w(t,n){for(var e,r={},i=n.length,o=0;i>o;o++)e=n[o],r[e]=t[e],delete t[e];return r}function _(t,n){S.length=0;for(var e=n.length,r=0;e>r;r++)S.push(t[n[r]]);return S}function g(t,n){for(var e=t,r=n.length,i=0;r>i;i++)e=e.replace(T,+n[i].toFixed(4));return e}function m(t){return t.match(M)}function d(n,e){t.each(e,function(t){for(var r=e[t],i=r.chunkNames,o=i.length,u=n[t].split(" "),a=u[u.length-1],s=0;o>s;s++)n[i[s]]=u[s]||a;delete n[t]})}function v(n,e){t.each(e,function(t){for(var r=e[t],i=r.chunkNames,o=i.length,u="",a=0;o>a;a++)u+=" "+n[i[a]],delete n[i[a]];n[t]=u.substr(1)})}var y=/([^\-0-9\.]+)/g,M=/[0-9.\-]+/g,O=RegExp("rgb\\("+M.source+/,\s*/.source+M.source+/,\s*/.source+M.source+"\\)","g"),b=/^.*\(/,I=/#([0-9]|[a-f]){3,6}/gi,T="VAL",k=[],F=[],S=[];t.prototype.filter.token={tweenCreated:function(t,n,e){r(t),r(n),r(e),this._tokenData=h(t)},beforeTween:function(t,n,e,r){d(r,this._tokenData),p(t,this._tokenData),p(n,this._tokenData),p(e,this._tokenData)},afterTween:function(t,n,e,r){l(t,this._tokenData),l(n,this._tokenData),l(e,this._tokenData),v(r,this._tokenData)}}}(n)})(this);
\ No newline at end of file
diff --git a/package.json b/package.json
index e7a46cf7..747db5ed 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,8 @@
     "grunt-contrib-copy": "0.4.0",
     "grunt-dox": "0.5.0",
     "grunt-contrib-watch": "0.3.1",
-    "grunt-bump": "0.0.13"
+    "grunt-bump": "0.0.13",
+    "grunt-codepainter": "^0.2.0"
   },
   "license": "MIT",
   "dependencies": {
diff --git a/src/rekapi.actor.js b/src/rekapi.actor.js
index ee4371ab..8a077280 100644
--- a/src/rekapi.actor.js
+++ b/src/rekapi.actor.js
@@ -151,8 +151,8 @@ rekapiModules.push(function (context) {
    */
   function findPropertyAtMillisecondInTrack (actor, trackName, millisecond) {
     return _.findWhere(actor._propertyTracks[trackName], {
-        millisecond: millisecond
-      });
+      millisecond: millisecond
+    });
   }
 
   /*!
@@ -172,11 +172,11 @@ rekapiModules.push(function (context) {
       }
 
       timelinePropertyCache[millisecond][keyframeProperty.name]
-          = keyframeProperty;
+         = keyframeProperty;
     });
 
     actor._timelinePropertyCacheKeys = _.map(timelinePropertyCache,
-        function (val, key) {
+    function (val, key) {
       return +key;
     });
 
@@ -302,7 +302,7 @@ rekapiModules.push(function (context) {
    * @return {Rekapi.Actor}
    */
   Actor.prototype.keyframe = function keyframe (
-      millisecond, properties, opt_easing) {
+    millisecond, properties, opt_easing) {
 
     opt_easing = opt_easing || DEFAULT_EASING;
     var easing = Tweenable.composeEasingObject(properties, opt_easing);
@@ -310,7 +310,7 @@ rekapiModules.push(function (context) {
     // Create and add all of the KeyframeProperties
     _.each(properties, function (value, name) {
       var newKeyframeProperty = new Rekapi.KeyframeProperty(
-          millisecond, name, value, easing[name]);
+        millisecond, name, value, easing[name]);
 
       this._addKeyframeProperty(newKeyframeProperty);
     }, this);
@@ -332,7 +332,7 @@ rekapiModules.push(function (context) {
    * @param {string=} opt_trackName Optional name of a property track.
    * @return {boolean}
    */
-  Actor.prototype.hasKeyframeAt = function(millisecond, opt_trackName) {
+  Actor.prototype.hasKeyframeAt = function (millisecond, opt_trackName) {
     var tracks = this._propertyTracks;
 
     if (opt_trackName) {
@@ -346,7 +346,7 @@ rekapiModules.push(function (context) {
     var track;
     for (track in tracks) {
       if (tracks.hasOwnProperty(track)
-          && findPropertyAtMillisecondInTrack(this, track, millisecond)) {
+         && findPropertyAtMillisecondInTrack(this, track, millisecond)) {
         return true;
       }
     }
@@ -383,7 +383,7 @@ rekapiModules.push(function (context) {
 
     _.each(this._propertyTracks, function (propertyTrack, trackName) {
       var keyframeProperty =
-          findPropertyAtMillisecondInTrack(this, trackName, copyFrom);
+      findPropertyAtMillisecondInTrack(this, trackName, copyFrom);
 
       if (keyframeProperty) {
         sourcePositions[trackName] = keyframeProperty.value;
@@ -454,12 +454,12 @@ rekapiModules.push(function (context) {
    * @return {Rekapi.Actor}
    */
   Actor.prototype.modifyKeyframe = function (
-      millisecond, stateModification, opt_easingModification) {
+    millisecond, stateModification, opt_easingModification) {
     opt_easingModification = opt_easingModification || {};
 
     _.each(this._propertyTracks, function (propertyTrack, trackName) {
       var property = findPropertyAtMillisecondInTrack(
-          this, trackName, millisecond);
+        this, trackName, millisecond);
 
       if (property) {
         property.modifyWith({
@@ -485,7 +485,7 @@ rekapiModules.push(function (context) {
     var propertyTracks = this._propertyTracks;
 
     _.each(this._propertyTracks, function (propertyTrack, propertyName) {
-      var keyframeProperty = _.findWhere(propertyTrack, { millisecond: millisecond });
+      var keyframeProperty = _.findWhere(propertyTrack, {millisecond: millisecond});
 
       if (keyframeProperty) {
         propertyTracks[propertyName] = _.without(propertyTrack, keyframeProperty);
@@ -535,7 +535,7 @@ rekapiModules.push(function (context) {
   Actor.prototype.getKeyframeProperty = function (property, millisecond) {
     var propertyTrack = this._propertyTracks[property];
     if (propertyTrack) {
-      return _.findWhere(propertyTrack, { millisecond: millisecond });
+      return _.findWhere(propertyTrack, {millisecond: millisecond});
     }
   };
 
@@ -549,7 +549,7 @@ rekapiModules.push(function (context) {
    * @return {Rekapi.Actor}
    */
   Actor.prototype.modifyKeyframeProperty = function (
-      property, millisecond, newProperties) {
+    property, millisecond, newProperties) {
 
     var keyframeProperty = this.getKeyframeProperty(property, millisecond);
     if (keyframeProperty) {
@@ -572,7 +572,7 @@ rekapiModules.push(function (context) {
     if (typeof propertyTracks[property] !== 'undefined') {
       var keyframeProperty = this.getKeyframeProperty(property, millisecond);
       propertyTracks[property] =
-          _.without(propertyTracks[property], keyframeProperty);
+      _.without(propertyTracks[property], keyframeProperty);
       keyframeProperty.detach();
 
       cleanupAfterKeyframeModification(this);
@@ -753,8 +753,8 @@ rekapiModules.push(function (context) {
 
     var latestCacheId = getPropertyCacheIdForMillisecond(this, millisecond);
     var propertiesToInterpolate =
-        this._timelinePropertyCache[this._timelinePropertyCacheKeys[
-        latestCacheId]];
+      this._timelinePropertyCache[this._timelinePropertyCacheKeys[
+          latestCacheId]];
 
     if (startMs === endMs) {
 
@@ -771,11 +771,11 @@ rekapiModules.push(function (context) {
         }
 
         interpolatedObject[propName] =
-            keyframeProperty.getValueAt(millisecond);
+        keyframeProperty.getValueAt(millisecond);
 
         if (this._afterKeyframePropertyInterpolate !== noop) {
           this._afterKeyframePropertyInterpolate(
-              keyframeProperty, interpolatedObject);
+            keyframeProperty, interpolatedObject);
         }
       }, this);
     }
diff --git a/src/rekapi.core.js b/src/rekapi.core.js
index 45fdfd6a..dec413dd 100644
--- a/src/rekapi.core.js
+++ b/src/rekapi.core.js
@@ -57,7 +57,7 @@ var rekapiCore = function (root, _, Tweenable) {
    */
   function determineCurrentLoopIteration (rekapi, timeSinceStart) {
     var currentIteration = Math.floor(
-        (timeSinceStart) / rekapi._animationLength);
+    (timeSinceStart) / rekapi._animationLength);
     return currentIteration;
   }
 
@@ -78,7 +78,7 @@ var rekapiCore = function (root, _, Tweenable) {
    */
   function isAnimationComplete (rekapi, currentLoopIteration) {
     return currentLoopIteration >= rekapi._timesToIterate
-        && rekapi._timesToIterate !== -1;
+       && rekapi._timesToIterate !== -1;
   }
 
   /*!
@@ -127,9 +127,9 @@ var rekapiCore = function (root, _, Tweenable) {
 
     if (rekapi._animationLength > 0) {
       currentIteration =
-          determineCurrentLoopIteration(rekapi, forMillisecond);
+      determineCurrentLoopIteration(rekapi, forMillisecond);
       loopPosition = calculateLoopPosition(
-          rekapi, forMillisecond, currentIteration);
+        rekapi, forMillisecond, currentIteration);
     }
 
     rekapi.update(loopPosition);
@@ -155,7 +155,7 @@ var rekapiCore = function (root, _, Tweenable) {
     // annotation for cancelLoop for more info.
     if (rekapi._scheduleUpdate.call) {
       rekapi._loopId = rekapi._scheduleUpdate.call(global,
-          rekapi._updateFn, UPDATE_TIME);
+        rekapi._updateFn, UPDATE_TIME);
     } else {
       rekapi._loopId = setTimeout(rekapi._updateFn, UPDATE_TIME);
     }
@@ -168,12 +168,12 @@ var rekapiCore = function (root, _, Tweenable) {
     // requestAnimationFrame() shim by Paul Irish (modified for Rekapi)
     // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
     return global.requestAnimationFrame  ||
-      global.webkitRequestAnimationFrame ||
-      global.oRequestAnimationFrame      ||
-      global.msRequestAnimationFrame     ||
+    global.webkitRequestAnimationFrame ||
+    global.oRequestAnimationFrame      ||
+    global.msRequestAnimationFrame     ||
       (global.mozCancelRequestAnimationFrame
-        && global.mozRequestAnimationFrame) ||
-      global.setTimeout;
+       && global.mozRequestAnimationFrame) ||
+    global.setTimeout;
   }
 
   /*!
@@ -181,11 +181,11 @@ var rekapiCore = function (root, _, Tweenable) {
    */
   function getCancelMethod () {
     return global.cancelAnimationFrame  ||
-      global.webkitCancelAnimationFrame ||
-      global.oCancelAnimationFrame      ||
-      global.msCancelAnimationFrame     ||
-      global.mozCancelRequestAnimationFrame ||
-      global.clearTimeout;
+    global.webkitCancelAnimationFrame ||
+    global.oCancelAnimationFrame      ||
+    global.msCancelAnimationFrame     ||
+    global.mozCancelRequestAnimationFrame ||
+    global.clearTimeout;
   }
 
   /*!
@@ -581,7 +581,7 @@ var rekapiCore = function (root, _, Tweenable) {
     } else {
       // Remove just the handler specified
       this._events[eventName] = _.without(
-          this._events[eventName], opt_handler);
+        this._events[eventName], opt_handler);
     }
 
     return this;
diff --git a/src/rekapi.init.js b/src/rekapi.init.js
index 38198065..72fb1261 100644
--- a/src/rekapi.init.js
+++ b/src/rekapi.init.js
@@ -30,10 +30,10 @@ if (typeof define === 'function' && define.amd) {
   // Example: define(['vendor/rekapi.min'], function(Rekapi) { ... });
   define(['shifty', 'underscore'], function (Tweenable, Underscore) {
     var underscoreSupportsAMD = (Underscore != null);
-    var deps = {  Tweenable: Tweenable,
-                  // Some versions of Underscore.js support AMD, others don't.
-                  // If not, use the `_` global.
-                  underscore: underscoreSupportsAMD ? Underscore : _ };
+    var deps = {Tweenable: Tweenable,
+      // Some versions of Underscore.js support AMD, others don't.
+      // If not, use the `_` global.
+      underscore: underscoreSupportsAMD ? Underscore : _};
     var Rekapi = rekapi({}, deps);
 
     if (REKAPI_DEBUG) {
diff --git a/src/rekapi.keyframe-property.js b/src/rekapi.keyframe-property.js
index 55f2b8ec..7b4b35ec 100644
--- a/src/rekapi.keyframe-property.js
+++ b/src/rekapi.keyframe-property.js
@@ -64,14 +64,14 @@ rekapiModules.push(function (context) {
 
     if (nextProperty) {
       correctedMillisecond =
-          Math.min(correctedMillisecond, nextProperty.millisecond);
+      Math.min(correctedMillisecond, nextProperty.millisecond);
 
       fromObj[this.name] = this.value;
       toObj[this.name] = nextProperty.value;
 
       var delta = nextProperty.millisecond - this.millisecond;
       var interpolatedPosition =
-          (correctedMillisecond - this.millisecond) / delta;
+      (correctedMillisecond - this.millisecond) / delta;
 
       value = interpolate(fromObj, toObj, interpolatedPosition,
           nextProperty.easing)[this.name];
@@ -115,10 +115,10 @@ rekapiModules.push(function (context) {
    */
   KeyframeProperty.prototype.exportPropertyData = function () {
     return {
-     'millisecond': this.millisecond
-     ,'name': this.name
-     ,'value': this.value
-     ,'easing': this.easing
+      'millisecond': this.millisecond
+      ,'name': this.name
+      ,'value': this.value
+      ,'easing': this.easing
     };
   };