diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..f6cd079 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,79 @@ +{ + "rules": { + "comma-dangle": 2, + "no-cond-assign": 2, + "no-console": 2, + "no-debugger": 2, + "no-dupe-keys": 2, + "no-dupe-args": 2, + "no-empty": 2, + "no-empty-character-class": 2, + "no-ex-assign": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": 2, + "semi": [ 2, "always" ], + "no-extra-semi": 2, + "no-func-assign": 2, + "no-inner-declarations": 2, + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-negated-in-lhs": 2, + "no-obj-calls": 2, + "no-regex-spaces": 2, + "no-sparse-arrays": 2, + "no-unreachable": 2, + "use-isnan": 2, + "valid-typeof": 2, + + "strict": [ 2, "global" ], + + "block-scoped-var": 2, + "eqeqeq": 2, + "dot-notation": 1, + "no-alert": 2, + "no-else-return": 2, + "no-eq-null": 2, + "no-new": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-extra-bind": 1, + "no-invalid-this": 0, + "no-redeclare": 2, + "no-return-assign": 2, + "wrap-iife": [2, "inside"], + + "no-delete-var": 2, + "no-label-var": 2, + "no-undef": 2, + "no-undef-init": 2, + "no-shadow": 1, + "no-unused-vars": 1, + + "no-mixed-requires": 1, + "no-new-require": 2, + "no-path-concat": 2, + "no-sync": 1, + + "quotes": [ 2, "single" ], + "key-spacing": 2, + "no-spaced-func": 2, + "no-mixed-spaces-and-tabs": [ 2 ], + "no-multiple-empty-lines": [ 1, { "max": 2 }], + "operator-linebreak": [2, "after"], + "object-curly-spacing": [ 2, "always" ], + "space-after-keywords": [ 2, "always" ], + "semi-spacing": [2, {"before": false, "after": true}], + "brace-style": [ 2, "1tbs", { "allowSingleLine": true } ], + "space-infix-ops": 2, + "space-unary-ops": [ 2, { "words": true, "nonwords": false } ], + + "arrow-spacing": [ 2, { "before": true, "after": true } ], + "arrow-parens": [ 2 ], + "prefer-const": 1 + }, + "env": { + "es6": true, + "node": true, + "mocha": true + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..88f73b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +*.html diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..ed2be9a --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +docs +src +Gruntfile.js \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..b913b7c --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v4.1.0 diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..958bf33 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +sudo: false +node_js: + - "4.1" diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 772e18c..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,32 +0,0 @@ -module.exports = function(grunt) { - - // Project configuration. - grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - uglify: { - options: { - banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' - }, - dist: { - src: 'src/*.js', - dest: 'dist/snabbt.min.js' - }, - }, - concat: { - options: { - separator: ';', - }, - dist: { - src: 'src/*.js', - dest: 'dist/snabbt.js', - }, - }, - }); - - // Load the plugin that provides the "uglify" task. - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-concat'); - - // Default task(s). - grunt.registerTask('default', ['uglify', 'concat']); -}; diff --git a/LICENSE.txt b/LICENSE.txt index 3a25dea..8dd155e 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014 Daniel Lundin +Copyright (c) 2015 Daniel Lundin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index dbc5879..1bf6f39 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,91 @@ -snabbt.js -========= -Fast animations with Javascript and CSS transforms(Work in progress) +# snabbt.js -- [Docs](http://daniel-lundin.github.io/snabbt.js/) -- [Demo cards](http://daniel-lundin.github.io/snabbt.js/cards.html) -- [Demo sticks](http://daniel-lundin.github.io/snabbt.js/sticks.html) +Fast animations with Javascript and CSS transforms + +[![travis build](https://travis-ci.org/daniel-lundin/snabbt.js.svg?branch=es6)](https://travis-ci.org/daniel-lundin/snabbt.js/builds/) +[![npm version](https://badge.fury.io/js/snabbt.js.svg)](https://badge.fury.io/js/snabbt.js) + +**Docs** + +[Documentation](http://daniel-lundin.github.io/snabbt.js/) + +**Demos** + +- [Card formations](http://daniel-lundin.github.io/snabbt.js/cards.html) +- [Crazy sticks](http://daniel-lundin.github.io/snabbt.js/sticks.html) +- [Periodic table](http://daniel-lundin.github.io/snabbt.js/periodic.html) +- [Laser words](http://daniel-lundin.github.io/snabbt.js/words.html) + +## Releases +The initial release is out. Would love some feedback on things that can be improved. The release(and future ones) can be found in the release section + +- **0.6.4** - Manual mode complete bug fix +- **0.6.3** - IE Bug fix, polyfill for Array.prototype.find +- **0.6.2** - Bug fixes, Added sequencing of animations +- **0.6.1** - Fixed UMD-build +- **0.6.0** - ES6, test suite, life cycle events, new demos +- **0.5.8** - Add new tweenable property scalePost/fromScalePost +- **0.5.7** - Fix issues manual mode and spring easings +- **0.5.6** - Fix issues with duration: 0 +- **0.5.4** - Added allDone-callback, updated docs +- **0.5.3** - Bugfix for manual mode with easings +- **0.5.2** - Compability fixes, polyfill for request animation frame +- **0.5.1** - Performance improvements +- **0.5.0** - Refactoring, show deprecation warnings +- **0.4.0** - Manual mode, function initalizers +- **0.3.0** - Memory optimizations, improved Matrix API, better UMD wrappers +- **0.2.0** - Added support for RequireJS and browserify. Published to npm and bower +- **0.1.0** - Initial beta release + +## Get it +snabbt is available with AMD-support, CommonJS-support and as a global module. + +### Package managers +``` +bower install snabbt.js +npm install snabbt.js +``` + +### CDNs + +``` +https://cdnjs.com/libraries/snabbt.js +http://www.jsdelivr.com/#!snabbt +``` +## Browser Support + + + + + + + + + + + + + + + + + + + +
10+
+ +Note: IE does not support the transform-style: preserve-3d property. This prevents nesting 3D transformed elements. + +## Contributing + +1. Fork it! +2. Create your feature branch: `git checkout -b my-new-feature` +3. Commit your changes: `git commit -m 'Add some feature'` +4. Push to the branch: `git push origin my-new-feature` +5. Submit a pull request :D + +## TODOS + + - Improve documentation + +[MIT License](LICENSE.txt) © 2015 Daniel Lundin (http://twitter.com/danielundin). diff --git a/banner.js b/banner.js new file mode 100644 index 0000000..d3e99b9 --- /dev/null +++ b/banner.js @@ -0,0 +1,6 @@ +const pjson = require('./package.json'); +const moment = require('moment'); +const version = pjson.version +const now = moment().format('YYYY-MM-DD'); + +console.log(`/* snabbt.js Version: ${version} Build date: ${now} (c) 2015 Daniel Lundin @license MIT */`); diff --git a/dist/jquery.snabbt.min.js b/dist/jquery.snabbt.min.js deleted file mode 100644 index df457a5..0000000 --- a/dist/jquery.snabbt.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! snabbt.js 2014-12-17 */ -function snabbt(a,b,c){function d(a){return j.tick(a),j.update_element(e),j.stopped()?void 0:j.completed()?void(f.loop>1&&!j.stopped()?(f.loop-=1,j=snabbtjs.create_animation(i),snabbtjs.requestAnimationFrame(d)):(f.callback&&f.callback(),l.length&&(f=l.pop(),g=snabbtjs.state_from_options(h,f,"from_"),h=snabbtjs.state_from_options(new snabbtjs.State({}),f,""),snabbtjs.setup_animation_options(g,h,f),j=new snabbtjs.Animation(f),snabbtjs.running_animations.push([e,j]),j.tick(a),snabbtjs.requestAnimationFrame(d)))):snabbtjs.requestAnimationFrame(d)}if("scroll"==a)return snabbtjs.setup_scroll_animation(b);if("attention"==b)return snabbtjs.setup_attention_animation(a,c);if("stop"==b)return snabbtjs.stop_animation(a);var e=a,f=b,g=snabbtjs.current_animation_transform(e);g||(g=snabbtjs.state_from_options(g,f,"from_"));var h=new snabbtjs.State({});h=snabbtjs.state_from_options(h,f,"");var i=snabbtjs.setup_animation_options(g,h,f),j=snabbtjs.create_animation(i);if(e.hasOwnProperty("length"))for(var k=0;kthis.delay&&(this.current_time=a-this.delay);var b=Math.min(Math.max(0,this.current_time-this.start_time),this.duration),c=this.duration;this.easing.tick(b,c),this.update_current_transform()}},snabbtjs.Animation.prototype.current_state=function(){return this._current_state},snabbtjs.Animation.prototype.update_current_transform=function(){var a=this.easing.value();snabbtjs.TweenStates(this._start_state,this._end_state,this._current_state,a)},snabbtjs.Animation.prototype.completed=function(){return this._stopped?!0:0===this.start_time?!1:this.easing.completed()},snabbtjs.Animation.prototype.update_element=function(a){var b=this._current_state.as_matrix(),c=this._current_state.properties();snabbtjs.update_element_transform(a,b,this.perspective),snabbtjs.update_element_properties(a,c)},snabbtjs.ValueFeededAnimation=function(a){this.value_feeder=a.value_feeder,this.duration=a.duration||500,this.delay=a.delay||0,this.perspective=a.perspective,this.easing=snabbtjs.create_easer("linear"),a.easing&&(this.easing=snabbtjs.create_easer(a.easing,a)),this._current_state=new snabbtjs.State({}),this.current_matrix=this.value_feeder(0),this.start_time=0,this.current_time=0,this._stopped=!1},snabbtjs.ValueFeededAnimation.prototype.stop=function(){this._stopped=!0},snabbtjs.ValueFeededAnimation.prototype.stopped=function(){return this._stopped},snabbtjs.ValueFeededAnimation.prototype.tick=function(a){if(!this._stopped){this.start_time||(this.start_time=a),a-this.start_time>this.delay&&(this.current_time=a-this.delay);var b=Math.min(Math.max(.001,this.current_time-this.start_time),this.duration),c=this.duration;this.easing.tick(b,c),this.update_current_transform()}},snabbtjs.ValueFeededAnimation.prototype.current_state=function(){return this._current_state},snabbtjs.ValueFeededAnimation.prototype.update_current_transform=function(){var a=this.easing.value();this.current_matrix=this.value_feeder(a)},snabbtjs.ValueFeededAnimation.prototype.completed=function(){return this._stopped?!0:this.easing.completed()},snabbtjs.ValueFeededAnimation.prototype.update_element=function(a){snabbtjs.update_element_transform(a,this.current_matrix,this.perspective)},snabbtjs.ScrollAnimation=function(a){this.start_scroll=window.scrollY,this.end_scroll=a.scroll_pos,this.duration=a.duration||500,this.delay=a.delay||0,this.easing=a.easing||snabbtjs.cos_easing,this.start_time=0,this.current_time=0},snabbtjs.ScrollAnimation.prototype.tick=function(a){this.start_time||(this.start_time=a),a-this.start_time>this.delay&&(this.current_time=a-this.delay),this.update_scrolling()},snabbtjs.ScrollAnimation.prototype.update_scrolling=function(){var a=Math.min(Math.max(.001,this.current_time-this.start_time),this.duration),b=this.duration,c=this.easing(a,b),d=this.end_scroll-this.start_scroll,e=this.start_scroll+c*d;window.scrollTo(0,e)},snabbtjs.ScrollAnimation.prototype.completed=function(){return 0===this.start_time?!1:this.current_time-this.start_time>this.duration},snabbtjs.AttentionAnimation=function(a){this.movement=a.movement,this.current_movement=new snabbtjs.State({}),a.initial_velocity=.1,a.equilibrium_position=0,this.spring=new snabbtjs.SpringEasing(a),this._stopped=!1},snabbtjs.AttentionAnimation.prototype.stop=function(){this._stopped=!0},snabbtjs.AttentionAnimation.prototype.stopped=function(){return this._stopped},snabbtjs.AttentionAnimation.prototype.tick=function(){this._stopped||this.spring.equilibrium||(this.spring.tick(),this.update_movement())},snabbtjs.AttentionAnimation.prototype.update_movement=function(){this.current_movement.x=this.movement.x*this.spring.position,this.current_movement.y=this.movement.y*this.spring.position,this.current_movement.z=this.movement.z*this.spring.position,this.current_movement.ax=this.movement.ax*this.spring.position,this.current_movement.ay=this.movement.ay*this.spring.position,this.current_movement.az=this.movement.az*this.spring.position,this.current_movement.bx=this.movement.bx*this.spring.position,this.current_movement.by=this.movement.by*this.spring.position,this.current_movement.bz=this.movement.bz*this.spring.position},snabbtjs.AttentionAnimation.prototype.update_element=function(a){var b=this.current_movement.as_matrix(),c=this.current_movement.properties();snabbtjs.update_element_transform(a,b),snabbtjs.update_element_properties(a,c)},snabbtjs.AttentionAnimation.prototype.current_state=function(){return this.current_movement},snabbtjs.AttentionAnimation.prototype.completed=function(){return this.spring.equilibrium||this._stopped},snabbtjs.create_animation=function(a){return a.value_feeder?new snabbtjs.ValueFeededAnimation(a):new snabbtjs.Animation(a)};var snabbtjs=snabbtjs||{};snabbtjs.pow2_easing=function(a,b){var c=a/b;return c*c},snabbtjs.linear_easing=function(a,b){return a/b},snabbtjs.cos_easing=function(a,b){return(Math.cos(a/b*Math.PI+Math.PI)+1)/2},snabbtjs.sqrt_easing=function(a,b){var c=a/b;return Math.pow(c,.5)},snabbtjs.sinc_wobbler_easing=function(a,b){var c=a/b,d=5;return(-Math.sin(d*Math.PI*c)/(d*c)+Math.PI)/Math.PI},snabbtjs.sinc2=function(a,b){var c=a/b;return 1-Math.sin(20*Math.PI*c)/(20*Math.PI*c)},snabbtjs.exp_cos=function(a,b){var c=a/b;return 1+Math.exp(-5*c)*Math.cos(4*Math.PI*c)},snabbtjs.exp_cos_bounce=function(a,b){var c=a/b;return 1-Math.abs(Math.exp(-5*c)*Math.cos(4*Math.PI*c))},snabbtjs.SpringEasing=function(a){this.position=snabbtjs.option_or_default(a.start_position,0),this.equilibrium_position=snabbtjs.option_or_default(a.equilibrium_position,1),this.velocity=snabbtjs.option_or_default(a.initial_velocity,0),this.spring_constant=snabbtjs.option_or_default(a.spring_constant,.8),this.deacceleration=snabbtjs.option_or_default(a.deacceleration,.9),this.mass=snabbtjs.option_or_default(a.spring_mass,10),this.equilibrium=!1},snabbtjs.SpringEasing.prototype.tick=function(a){if(0!==a&&!this.equilibrium){var b=-(this.position-this.equilibrium_position)*this.spring_constant,c=b/this.mass;this.velocity+=c,this.position+=this.velocity,this.velocity*=this.deacceleration,Math.abs(this.position-this.equilibrium_position)<.001&&Math.abs(this.velocity)<.001&&(this.equilibrium=!0)}},snabbtjs.SpringEasing.prototype.value=function(){return this.position},snabbtjs.SpringEasing.prototype.completed=function(){return this.equilibrium},snabbtjs.EASING_FUNCS={linear:snabbtjs.linear_easing,square:snabbtjs.pow2_easing,sqrt:snabbtjs.sqrt_easing,cos:snabbtjs.cos_easing,exp_cos_bounce:snabbtjs.exp_cos_bounce,exp_cos:snabbtjs.exp_cos,sinc_wobbler:snabbtjs.sinc_wobbler_easing},snabbtjs.Easer=function(a){this.easer=a,this._value=0},snabbtjs.Easer.prototype.tick=function(a,b){this._value=this.easer(a,b),this.last_value=a/b},snabbtjs.Easer.prototype.value=function(){return this._value},snabbtjs.Easer.prototype.completed=function(){return this.last_value>=1},snabbtjs.create_easer=function(a,b){if("spring"==a)return new snabbtjs.SpringEasing(b);var c=snabbtjs.EASING_FUNCS[a];return new snabbtjs.Easer(c)},window.jQuery&&!function(a){a.fn.snabbt=function(a,b){return snabbt(this.get(),a,b)}}(jQuery);var snabbtjs=snabbtjs||{};snabbtjs.setup_scroll_animation=function(a){function b(a){c.tick(a),c.completed()||snabbtjs.requestAnimationFrame(b)}var c=new snabbtjs.ScrollAnimation(a);snabbtjs.running_animations.push([void 0,c]),snabbtjs.requestAnimationFrame(b)},snabbtjs.setup_attention_animation=function(a,b){function c(b){e.tick(b),e.update_element(a),e.completed()||snabbtjs.requestAnimationFrame(c)}var d=snabbtjs.state_from_options(new snabbtjs.State({}),b,""),e=new snabbtjs.AttentionAnimation({movement:d,spring_constant:b.spring_constant,deacceleration:b.deacceleration,initial_velocity:b.initial_velocity});snabbtjs.running_animations.push([a,e]),snabbtjs.requestAnimationFrame(c)},snabbtjs.stop_animation=function(a){for(var b=0;bc;++c)snabbtjs.tick_requests[c](a);snabbtjs.tick_requests.splice(0,b),window.requestAnimationFrame(snabbtjs.tick_animations),snabbtjs.running_animations=snabbtjs.running_animations.filter(function(a){return!a[1].completed()})},window.requestAnimationFrame(snabbtjs.tick_animations);var snabbtjs=snabbtjs||{};snabbtjs.assigned_matrix_multiplication=function(a,b,c){return c[0]=a[0]*b[0]+a[1]*b[4]+a[2]*b[8]+a[3]*b[12],c[1]=a[0]*b[1]+a[1]*b[5]+a[2]*b[9]+a[3]*b[13],c[2]=a[0]*b[2]+a[1]*b[6]+a[2]*b[10]+a[3]*b[14],c[3]=a[0]*b[3]+a[1]*b[7]+a[2]*b[11]+a[3]*b[15],c[4]=a[4]*b[0]+a[5]*b[4]+a[6]*b[8]+a[7]*b[12],c[5]=a[4]*b[1]+a[5]*b[5]+a[6]*b[9]+a[7]*b[13],c[6]=a[4]*b[2]+a[5]*b[6]+a[6]*b[10]+a[7]*b[14],c[7]=a[4]*b[3]+a[5]*b[7]+a[6]*b[11]+a[7]*b[15],c[8]=a[8]*b[0]+a[9]*b[4]+a[10]*b[8]+a[11]*b[12],c[9]=a[8]*b[1]+a[9]*b[5]+a[10]*b[9]+a[11]*b[13],c[10]=a[8]*b[2]+a[9]*b[6]+a[10]*b[10]+a[11]*b[14],c[11]=a[8]*b[3]+a[9]*b[7]+a[10]*b[11]+a[11]*b[15],c[12]=a[12]*b[0]+a[13]*b[4]+a[14]*b[8]+a[15]*b[12],c[13]=a[12]*b[1]+a[13]*b[5]+a[14]*b[9]+a[15]*b[13],c[14]=a[12]*b[2]+a[13]*b[6]+a[14]*b[10]+a[15]*b[14],c[15]=a[12]*b[3]+a[13]*b[7]+a[14]*b[11]+a[15]*b[15],c},snabbtjs.mat_to_css=function(a){for(var b="matrix3d(",c=0;c1&&!j.stopped()?(f.loop-=1,j=snabbtjs.create_animation(i),snabbtjs.requestAnimationFrame(d)):(f.callback&&f.callback(),l.length&&(f=l.pop(),g=snabbtjs.state_from_options(h,f,"from_"),h=snabbtjs.state_from_options(new snabbtjs.State({}),f,""),snabbtjs.setup_animation_options(g,h,f),j=new snabbtjs.Animation(f),snabbtjs.running_animations.push([e,j]),j.tick(a),snabbtjs.requestAnimationFrame(d)))):snabbtjs.requestAnimationFrame(d)}if("scroll"===a)return snabbtjs.setup_scroll_animation(b);if("attention"===b)return snabbtjs.setup_attention_animation(a,c);if("stop"===b)return snabbtjs.stop_animation(a);var e=a,f=b,g=snabbtjs.current_animation_transform(e);g||(g=snabbtjs.state_from_options(g,f,"from_"));var h=new snabbtjs.State({});h=snabbtjs.state_from_options(h,f,"");var i=snabbtjs.setup_animation_options(g,h,f),j=snabbtjs.create_animation(i);if(e.hasOwnProperty("length"))for(var k=0;kthis.delay&&(this.current_time=a-this.delay);var b=Math.min(Math.max(0,this.current_time-this.start_time),this.duration),c=this.duration;this.easing.tick(b/c),this.update_current_transform()}},snabbtjs.Animation.prototype.current_state=function(){return this._current_state},snabbtjs.Animation.prototype.update_current_transform=function(){var a=this.easing.value();snabbtjs.TweenStates(this._start_state,this._end_state,this._current_state,a)},snabbtjs.Animation.prototype.completed=function(){return this._stopped?!0:0===this.start_time?!1:this.easing.completed()},snabbtjs.Animation.prototype.update_element=function(a){var b=this._current_state.as_matrix(),c=this._current_state.properties();snabbtjs.update_element_transform(a,b,this.perspective),snabbtjs.update_element_properties(a,c)},snabbtjs.ValueFeededAnimation=function(a){this.value_feeder=a.value_feeder,this.duration=a.duration||500,this.delay=a.delay||0,this.perspective=a.perspective,this.easing=snabbtjs.create_easer("linear"),a.easing&&(this.easing=snabbtjs.create_easer(a.easing,a)),this._current_state=new snabbtjs.State({}),this.current_matrix=this.value_feeder(0),this.start_time=0,this.current_time=0,this._stopped=!1},snabbtjs.ValueFeededAnimation.prototype.stop=function(){this._stopped=!0},snabbtjs.ValueFeededAnimation.prototype.stopped=function(){return this._stopped},snabbtjs.ValueFeededAnimation.prototype.tick=function(a){if(!this._stopped){this.start_time||(this.start_time=a),a-this.start_time>this.delay&&(this.current_time=a-this.delay);var b=Math.min(Math.max(.001,this.current_time-this.start_time),this.duration),c=this.duration;this.easing.tick(b/c),this.update_current_transform()}},snabbtjs.ValueFeededAnimation.prototype.current_state=function(){return this._current_state},snabbtjs.ValueFeededAnimation.prototype.update_current_transform=function(){var a=this.easing.value();this.current_matrix=this.value_feeder(a)},snabbtjs.ValueFeededAnimation.prototype.completed=function(){return this._stopped?!0:this.easing.completed()},snabbtjs.ValueFeededAnimation.prototype.update_element=function(a){snabbtjs.update_element_transform(a,this.current_matrix,this.perspective)},snabbtjs.ScrollAnimation=function(a){this.start_scroll=window.scrollY,this.end_scroll=a.scroll_pos,this.duration=a.duration||500,this.delay=a.delay||0,this.easing=a.easing||snabbtjs.cos_easing,this.start_time=0,this.current_time=0},snabbtjs.ScrollAnimation.prototype.tick=function(a){this.start_time||(this.start_time=a),a-this.start_time>this.delay&&(this.current_time=a-this.delay),this.update_scrolling()},snabbtjs.ScrollAnimation.prototype.update_scrolling=function(){var a=Math.min(Math.max(.001,this.current_time-this.start_time),this.duration),b=this.duration,c=this.easing(a,b),d=this.end_scroll-this.start_scroll,e=this.start_scroll+c*d;window.scrollTo(0,e)},snabbtjs.ScrollAnimation.prototype.completed=function(){return 0===this.start_time?!1:this.current_time-this.start_time>this.duration},snabbtjs.AttentionAnimation=function(a){this.movement=a.movement,this.current_movement=new snabbtjs.State({}),a.initial_velocity=.1,a.equilibrium_position=0,this.spring=new snabbtjs.SpringEasing(a),this._stopped=!1},snabbtjs.AttentionAnimation.prototype.stop=function(){this._stopped=!0},snabbtjs.AttentionAnimation.prototype.stopped=function(){return this._stopped},snabbtjs.AttentionAnimation.prototype.tick=function(){this._stopped||this.spring.equilibrium||(this.spring.tick(),this.update_movement())},snabbtjs.AttentionAnimation.prototype.update_movement=function(){this.current_movement.x=this.movement.x*this.spring.position,this.current_movement.y=this.movement.y*this.spring.position,this.current_movement.z=this.movement.z*this.spring.position,this.current_movement.ax=this.movement.ax*this.spring.position,this.current_movement.ay=this.movement.ay*this.spring.position,this.current_movement.az=this.movement.az*this.spring.position,this.current_movement.bx=this.movement.bx*this.spring.position,this.current_movement.by=this.movement.by*this.spring.position,this.current_movement.bz=this.movement.bz*this.spring.position},snabbtjs.AttentionAnimation.prototype.update_element=function(a){var b=this.current_movement.as_matrix(),c=this.current_movement.properties();snabbtjs.update_element_transform(a,b),snabbtjs.update_element_properties(a,c)},snabbtjs.AttentionAnimation.prototype.current_state=function(){return this.current_movement},snabbtjs.AttentionAnimation.prototype.completed=function(){return this.spring.equilibrium||this._stopped},snabbtjs.create_animation=function(a){return a.value_feeder?new snabbtjs.ValueFeededAnimation(a):new snabbtjs.Animation(a)};var snabbtjs=snabbtjs||{};snabbtjs.linear_easing=function(a){return a},snabbtjs.ease=function(a){return(Math.cos(a*Math.PI+Math.PI)+1)/2},snabbtjs.ease_in=function(a){return-Math.pow(a-1,2)+1},snabbtjs.ease_out=function(a){return a*a},snabbtjs.SpringEasing=function(a){this.position=snabbtjs.option_or_default(a.start_position,0),this.equilibrium_position=snabbtjs.option_or_default(a.equilibrium_position,1),this.velocity=snabbtjs.option_or_default(a.initial_velocity,0),this.spring_constant=snabbtjs.option_or_default(a.spring_constant,.8),this.deacceleration=snabbtjs.option_or_default(a.spring_deacceleration,.9),this.mass=snabbtjs.option_or_default(a.spring_mass,10),this.equilibrium=!1},snabbtjs.SpringEasing.prototype.tick=function(a){if(0!==a&&!this.equilibrium){var b=-(this.position-this.equilibrium_position)*this.spring_constant,c=b/this.mass;this.velocity+=c,this.position+=this.velocity,this.velocity*=this.deacceleration,Math.abs(this.position-this.equilibrium_position)<.001&&Math.abs(this.velocity)<.001&&(this.equilibrium=!0)}},snabbtjs.SpringEasing.prototype.value=function(){return this.position},snabbtjs.SpringEasing.prototype.completed=function(){return this.equilibrium},snabbtjs.EASING_FUNCS={linear:snabbtjs.linear_easing,ease:snabbtjs.ease,"ease-in":snabbtjs.ease_in,"ease-out":snabbtjs.ease_out},snabbtjs.Easer=function(a){this.easer=a,this._value=0},snabbtjs.Easer.prototype.tick=function(a){this._value=this.easer(a),this.last_value=a},snabbtjs.Easer.prototype.value=function(){return this._value},snabbtjs.Easer.prototype.completed=function(){return this.last_value>=1},snabbtjs.create_easer=function(a,b){if("spring"==a)return new snabbtjs.SpringEasing(b);var c;return c=snabbtjs.is_function(a)?a:snabbtjs.EASING_FUNCS[a],new snabbtjs.Easer(c)},window.jQuery&&!function(a){a.fn.snabbt=function(a,b){return snabbt(this.get(),a,b)}}(jQuery);var snabbtjs=snabbtjs||{};snabbtjs.setup_scroll_animation=function(a){function b(a){c.tick(a),c.completed()||snabbtjs.requestAnimationFrame(b)}var c=new snabbtjs.ScrollAnimation(a);snabbtjs.running_animations.push([void 0,c]),snabbtjs.requestAnimationFrame(b)},snabbtjs.setup_attention_animation=function(a,b){function c(b){e.tick(b),e.update_element(a),e.completed()||snabbtjs.requestAnimationFrame(c)}var d=snabbtjs.state_from_options(new snabbtjs.State({}),b,"");b.movement=d;var e=new snabbtjs.AttentionAnimation(b);snabbtjs.running_animations.push([a,e]),snabbtjs.requestAnimationFrame(c)},snabbtjs.stop_animation=function(a){for(var b=0;bc;++c)snabbtjs.tick_requests[c](a);snabbtjs.tick_requests.splice(0,b),window.requestAnimationFrame(snabbtjs.tick_animations),snabbtjs.running_animations=snabbtjs.running_animations.filter(function(a){return!a[1].completed()})},window.requestAnimationFrame(snabbtjs.tick_animations);var snabbtjs=snabbtjs||{};snabbtjs.assigned_matrix_multiplication=function(a,b,c){return c[0]=a[0]*b[0]+a[1]*b[4]+a[2]*b[8]+a[3]*b[12],c[1]=a[0]*b[1]+a[1]*b[5]+a[2]*b[9]+a[3]*b[13],c[2]=a[0]*b[2]+a[1]*b[6]+a[2]*b[10]+a[3]*b[14],c[3]=a[0]*b[3]+a[1]*b[7]+a[2]*b[11]+a[3]*b[15],c[4]=a[4]*b[0]+a[5]*b[4]+a[6]*b[8]+a[7]*b[12],c[5]=a[4]*b[1]+a[5]*b[5]+a[6]*b[9]+a[7]*b[13],c[6]=a[4]*b[2]+a[5]*b[6]+a[6]*b[10]+a[7]*b[14],c[7]=a[4]*b[3]+a[5]*b[7]+a[6]*b[11]+a[7]*b[15],c[8]=a[8]*b[0]+a[9]*b[4]+a[10]*b[8]+a[11]*b[12],c[9]=a[8]*b[1]+a[9]*b[5]+a[10]*b[9]+a[11]*b[13],c[10]=a[8]*b[2]+a[9]*b[6]+a[10]*b[10]+a[11]*b[14],c[11]=a[8]*b[3]+a[9]*b[7]+a[10]*b[11]+a[11]*b[15],c[12]=a[12]*b[0]+a[13]*b[4]+a[14]*b[8]+a[15]*b[12],c[13]=a[12]*b[1]+a[13]*b[5]+a[14]*b[9]+a[15]*b[13],c[14]=a[12]*b[2]+a[13]*b[6]+a[14]*b[10]+a[15]*b[14],c[15]=a[12]*b[3]+a[13]*b[7]+a[14]*b[11]+a[15]*b[15],c},snabbtjs.mat_to_css=function(a){for(var b="matrix3d(",c=0;c + + + + + + + + + + + + + snabbt.js - + - - + - - + + @@ -41,6 +51,7 @@
  • Usage
  • Easing
  • Advanced
  • +
  • Module loaders
  • API
  • @@ -57,16 +68,17 @@

    Fast

    Light

    -

    < 4kb minified and gzipped

    +

    ~5kb minified and gzipped

    Simple

    Write less, animate more

    - Download +

    npm install snabbt.js

    +

    bower install snabbt.js

    + Download -

    Warning: snabbt.js is under development, breaking changes could occur. This document should be seen as a draft.

    @@ -84,13 +97,14 @@

    Introduction

    snabbt.js is built to be fast. It will only animate things that modern browsers can animate cheaply: transforms and opacity. The goal is to make a library that will let the user make smooth animations without needing to know too much about browser rendering.

    -

    Note: For convienience, width and height are animatable to, but be aware of those. They may cause page reflows and slow down your animations.

    +

    Note: For convenience, width and height are animatable too, but beware since they may cause page reflows and slow down your animations.

    Limitations

      -
    • All transforms work on pixels or radians. Any unit conversion has to be done fore-hand.
    • -
    • No abritrary propery animations, e.g. colors, padding, margin or line height animations.
    • -
    • For performance reasons, snabbt.js never queries the DOM. This means that in some cases you need to store end transforms yourself.
    • +
    • All transforms work on pixels or radians. Any unit conversion has to be done beforehand.
    • +
    • No arbitrary property animations, e.g. colors, padding, margin or line height animations.
    • +
    • For performance reasons, snabbt never queries the DOM. This means that in some cases you need to transforms yourself.(Specifically when using value feeding)
    • +
    • snabbt.js needs requestAnimationFrame and matrix3d to work, so no IE < 10
    @@ -100,6 +114,8 @@

    Demos

    @@ -107,18 +123,16 @@

    Demos

    Usage

    -

    Animations are started with the snabbt-function call. The function takes an element as first parameter and a configutation-object as second. Example:

    +

    Animations are started with the snabbt-function call. The function takes an element as first parameter(or list there of) and a configutation-object as second. Example:

    -
    snabbt(element, {
    +            
    snabbt(element, {
       position: [100, 0, 0],
       rotation: [Math.PI, 0, 0],
    -  duration: 1000,
    -  delay: 100,
       easing: 'ease'
     });
    @@ -128,52 +142,37 @@

    Usage

    Chaining

    -

    Animation can be chained by using the `then()`-method on the returned animation object. all from_xxx properties will be set to the end state of the previous animation.

    +

    Animation can be chained by using `snabbt()` on the returned animation object. All fromXxx properties will be set to the end state of the previous animation.

    -
    snabbt(element, {
    +            
    snabbt(element, {
       position: [100, 0, 0],
       easing: 'ease'
    -}).then({
    -  from_rotation: [0, 0, -2*Math.PI],
    +}).snabbt({
    +  fromRotation: [0, 0, -2*Math.PI],
    +  position: [0, 0, 0],
       easing: 'spring',
    -  spring_constant: 0.2,
    -  spring_deaccelaration: 0.95,
    -});
    -
    - -
    - -

    jQuery

    -

    snabbt.js works with or without jQuery. If jQuery is detected snabbt.js will be loaded as a jQuery-plugin. When using snabbt.js with jQuery, the first parameter is the animation configuration:

    -
    -
    -
    With jQuery
    -
    $element.snabbt({
    -  position: [150, 0, 0],
    -  rotation: [0, 0, Math.PI],
    -});
    -
    -
    -
    Without jQuery
    -
    snabbt(element, {
    -  position: [150, 0, 0],
    -  rotation: [0, 0, Math.PI],
    +  springConstant: 0.2,
    +  springDeceleration: 0.90,
    +  springMass: 10,
     });
    -
    +

    Make it stop

    +

    Animation can be stopped at any time by replacing the animation configuration with the string literal 'stop':

    +
    snabbt(element, 'stop');
    +

    If a new animation is started with the same element it will start from the stopped position unless the 'from'-properties are used.

    Easing

    -

    snabbt.js includes four easing functions: linear, ease, ease-in and ease-out. You can also use your own easing functions or use the physics based spring easing

    +

    snabbt.js includes four easing functions: linear, ease, easeIn and easeOut. You can also use your own easing functions or use the physics based spring easing

    -
    Linear(default)
    +
    linear(default)
    @@ -187,14 +186,14 @@
    ease
    -
    ease-in
    -
    +
    easeIn
    +
    -
    ease-out
    -
    +
    easeOut
    +
    @@ -206,14 +205,17 @@

    Custom easing function

    Instead of easing name, pass in a function that takes one parameter:

    - +
    -
    snabbt(element, {
    +            
    snabbt(element, {
       position: [200, 0, 0],
       easing: function(value) {
    -    return Math.sin(Math.PI * value);
    +    return value + 0.3 * Math.sin(2*Math.PI * value);
       }
    +}).snabbt({
    +  position: [0, 0, 0],
    +  easing: 'easeOut'
     });
    @@ -223,80 +225,227 @@

    Custom easing function

    Spring easing

    When using spring easing, the duration parameter is not in effect. Instead the animation will progress until equilibrium is reached. When easing is set to spring there are three additional parameters that can be set on the animation configuration:

      -
    • spring_constant - The stiffness of the spring
    • -
    • spring_deaccelaration - Controls how fast the velocity decreases
    • -
    • spring_mass - The 'weight' of the object
    • +
    • springConstant - The stiffness of the spring
    • +
    • springDeceleration - Controls how fast the velocity decreases
    • +
    • springMass - The 'weight' of the object

    Example:

    -
    snabbt(element, {
    +        
    snabbt(element, {
       position: [100, 0, 0],
       rotation: [0, 0, 2*Math.PI],
       easing: 'spring',
    -  spring_constant: 0.3,
    -  spring_deacceleration: 0.8,
    -}).then({
    -  rotation: [0, 0, 2*Math.PI],
    -  easing: 'ease'
    +  springConstant: 0.3,
    +  springDeceleration: 0.8,
    +}).snabbt({
    +  position: [0, 0, 0],
    +  easing: 'spring',
    +  springConstant: 0.3,
    +  springDeceleration: 0.8,
     });
    +

    Advanced concepts

    This section describes some of the more advanced usages.

    +

    Sequence

    +

    Chaining is convenient when animating a single element or group of elements in multiple steps. However, if you want to trigger animations on a different set of element once one animation is completed you often end up with a lot of callbacks. This is where sequencing comes into play. snabbt.sequence is a function call that allows you to specify an array of animations that should run in sequence.

    +
    snabbt.sequence([
    +    [elementTwo, {
    +      position: [100, 0, 0],
    +    }],
    +    [elementOne, {
    +      position: [100, 0, 0],
    +    }],
    +    [elementOne, {
    +      position: [0, 0, 0],
    +    }],
    +    [elementTwo, {
    +      position: [0, 0, 0],
    +    }],
    +  ]
    +);
    + +
    +
    +
    +
    +

    Value feeding

    -

    The animation object is very simple to work with but has it limitations. Sometimes you want to do the transforms in another order. This is where value feeding comes handy. The value_feeder parameter expects a function that takes one parameter which will progress from 0 to 1. Every time it is called you should return a snabbtjs.matrix(see Matrix API) representing the current transform.

    -
    snabbt(element, {
    -  value_feeder: function(i) {
    +        

    The animation object is very simple to work with but has it limitations. Sometimes you want to do the transforms in another order. This is where value feeding comes handy. The valueFeeder parameter expects a function that takes two parameters, one which will progress from 0 to 1 and an identity matrix that you can modify. The function will be called every frame and should return a matrix(see Matrix API) representing the current transform.

    +
    snabbt(element, {
    +  valueFeeder: function(i, matrix) {
         var x = Math.sin(i*Math.PI);
    -    return snabbtjs.mult(snabbtjs.rotZ(Math.sin(6*i*Math.PI)), snabbtjs.trans(x*400, 0, 0));
    +    return matrix.rotateZ(Math.sin(6*i*Math.PI)).translate(x*200, 0, 0);
       },
       duration: 1000
     });
    +

    Transform origin

    +

    By default, rotations are applied around the center of the element. By using transformOrigin rotations can be performed around abritary positions.

    +
    snabbt(element, {
    +  rotation: [0, 2*Math.PI, 0],
    +  transformOrigin: [element.clientWidth/2, 0, 0]
    +});
    + +
    + +
    + +

    Manual mode

    +

    By using manual mode, animations can be fed by user input instead of just being time-based. Define your animations as you normally would but set the manual-property to true. Instead of returning a chainer object, an animation control object is returned. The control object has the following methods:

    +
      +
    • setValue(value) - value should be a number between 0 and 1 where 0 represents the beginning of the animation and 1 represents the end
    • +
    • rollback(callback) - Rollbacks the animation to the start state. The callback is an optional parameter that will be called when the rollback is completed
    • +
    • finish(callback) - Will complete the animation starting at the value last called to setValue
    • +
    +

    Here's silly an example of what this could be used for(powered by the great Hammer.js):

    +
    +
    Peek-a-boo!
    +
    +
    Drag to flip!
    +
    Flip me back!
    +
    +
    +

    Attention animations

    snabbt.js has support for attention animations. This can be useful in form validations when you want to draw attention to a form element for example. Attention animation use spring easings.

    -
    snabbt(element, 'attention', {
    +            
    snabbt(element, 'attention', {
       rotation: [0, 0, Math.PI/2],
    -  spring_constant: 1.9,
    -  spring_deacceleration: 0.9,
    +  springConstant: 1.9,
    +  springDeceleration: 0.9,
     });
    -
    snabbt(element, 'attention', {
    +            
    snabbt(element, 'attention', {
       position: [50, 0, 0],
    -  spring_constant: 2.4,
    -  spring_deacceleration: 0.9,
    +  springConstant: 2.4,
    +  springDeceleration: 0.9,
     });
    + +
    +

    Multi-element animations

    +

    Several elements can be animated with a single snabbt-call by passing a list of elements instead of just one. If you want to set different values for each of the elements you can pass initilization functions for the properties instead of actual values.

    +

    The initialization functions take two parameters, the current index of the element in the collection and the total number of elements. The functions must return a value in the same format as usual, e.g. a position function initializer must return an array of three coordinates.

    +

    This makes it possible to create complex animations with very little code:

    + +
    snabbt(document.querySelectorAll('.multi-example-box'), {
    +  fromRotation: [0, 0, 0],
    +  rotation: function(i, total) {
    +    return [0, 0, (i/(total - 1)) * (Math.PI/2)];
    +  },
    +  delay: function(i) {
    +    return i * 50;
    +  },
    +  easing: 'spring',
    +}).snabbt({
    +  rotation: [0, 0, 0],
    +  delay: function(i, total) {
    +    return (total - i - 1) * 50;
    +  },
    +  easing: 'ease',
    +});
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +

    To see a more elaborate example of this, check out the sticks demo

    +
    +
    +

    Module loaders

    +

    snabbt.js is wrapped in a UMD boilerplate which means it will work with both RequireJS and browserify.

    + CommonJS: +
    var snabbt = require('snabbt.js');
    +
    +snabbt(element, {
    +  position: [200, 0, 0]
    +});
    +
    + + AMD: +
    require(['snabbt.js'], function(snabbt) {
    +  snabbt(element, {
    +    rotation: [2*Math.PI, 0, 0]
    +  });
    +});
    +
    +
    +
    +

    jQuery

    +

    snabbt.js works with or without jQuery. If jQuery is detected snabbt will be loaded as a jQuery-plugin. When using snabbt with jQuery, the first parameter is the animation configuration:

    +
    +
    +
    With jQuery
    +
    $element.snabbt({
    +  position: [150, 0, 0],
    +  rotation: [0, 0, Math.PI],
    +});
    +
    +
    +
    Without jQuery
    +
    snabbt(element, {
    +  position: [150, 0, 0],
    +  rotation: [0, 0, Math.PI],
    +});
    +
    + +
    +
    +

    Matrix API

    -

    The following functions represents the Matrix API:

    +

    Matrix operations are performed using the Matrix class. The class has the following methods:

      -
    • snabbtjs.ident() - Returns the identity matrix
    • -
    • snabbtjs.trans(x, y, z) - Returns a translation matrix
    • -
    • snabbtjs.rotX(radians) - Returns a rotation around the x-axis
    • -
    • snabbtjs.rotY(radians) - Returns a rotation around the y-axis
    • -
    • snabbtjs.rotZ(radians) - Returns a rotation around the z-axis
    • -
    • snabbtjs.scale(x, y) - Returns a scaling matrix
    • -
    • snabbtjs.skew(ax, ay) - Returns a skew matrix
    • -
    • snabbtjs.mult(A, B) - Returns the matrix multiplication product of A * B
    • +
    • Matrix.translate(x, y, z) - Multiplies with a translation matrix
    • +
    • Matrix.rotateX(radians) - Multiplies with a rotation around the x-axis
    • +
    • Matrix.rotateY(radians) - Multiplies with a rotation around the y-axis
    • +
    • Matrix.rotateZ(radians) - Multiplies with a rotation around the z-axis
    • +
    • Matrix.scale(x, y) - Multiplies with a scaling matrix
    • +
    • Matrix.skew(ax, ay) - Multiplies with a skew matrix
    • +
    • Matrix.clear() - Sets the matrix to the identity matrix
    +

    All operations are chainable to make writing matrix multiplications concise, e.g.:

    +
    matrix.translate(100, 0, 0).rotateX(Math.PI);
    + +

    Freeform transforms

    +

    The matrix operations can be used outside of snabbt's animation engine. This could be useful for interactive animations.

    +
    var matrix = snabbt.createMatrix();
    +matrix.translate(100, 0, 0);
    +snabbt.setElementTransform(element, matrix);

    Animation configuration

    -

    The following parameters can on the configuration object:

    +

    The following parameters can be used in the configuration object:

    @@ -326,7 +475,7 @@

    Animation configuration

    - + @@ -335,19 +484,19 @@

    Animation configuration

    - + - + - + @@ -362,16 +511,28 @@

    Animation configuration

    - - - - + + + + + + + + + + + + + + + + - + - +
    Scale in x- and y-direction
    rotation_postrotationPost Array(3) [0, 0, 0] Rotation applied after position and rotation width Scalar UnchangedElement width in pixelsElement width in pixels(fromWidth mandatory if used)
    height Scalar UnchangedElement height in pixelsElement height in pixels(fromHeight mandatory if used)
    opacity Scalar 1Element opacity(0 - 1)Element opacity(0 - 1)(fromOpacity mandatory if used)
    duration Delay before the animation is started in milliseconds
    loopScalar0Number of times to repeat the animationstart(index, total)functionundefinedFunction to be called just before the animation starts. If multiple elements are animated, this function will be called once for every element with two parameters, index of current element and total elements in the animated collection.
    update(i, index, total)functionundefinedFunction to be called on every progress step of the animation. The first parameter is a value between 0 and 1 and indicates the current progress of the animation. If multiple elements are animated, this function will be called for every progress step for every element in the collection. index indicates the current element and total corresponds to the total number of elements in the colletion.
    complete(index, total)functionundefinedFunction to be called when animation is completed. If multiple elements are animated, this function will be called once for every element with two parameters, index of current element and total elements in the animated collection. this will be bound the current element
    callbackallDone function undefinedFunction to be called when animation is completedWill be called once independent of how many elements animated
    @@ -379,17 +540,17 @@

    Animation configuration

  • position - Pixel offsets in each x-, y- and z-direction
  • rotation - Rotation in radians in x-, y- and z-direction
  • scale - Scale in x- and y-direction
  • -
  • rotation_post - Rotation applied after position and rotation
  • -
  • width - Element width in pixels
  • -
  • height - Element height in pixels
  • -
  • opacity - Element opacity(0 - 1)
  • +
  • rotationPost - Rotation applied after position and rotation
  • +
  • width - Element width in pixels(fromWidth mandatory if used)
  • +
  • height - Element height in pixels(fromHeight mandatory if used)
  • +
  • opacity - Element opacity(0 - 1)(fromOpactiy mandatory if used)
  • duration - Animation duration in milliseconds
  • delay - Delay before the animation is started in milliseconds
  • -
  • loop - Number of times to repeat the animation
  • -
  • callback - Function to be called when animation is completed
  • +
  • complete(index, total) - Function to be called when animation is completed. If multiple elements are animated, this function will be called once for every element with two parameters, index of current element and total elements in the animated collection. this will be bound the current element
  • +
  • allDone - Will be called once independent of how many elements animated
  • -

    A from_xxx can be set on most properties:

    +

    A 'from'-property can be set on most properties. Note that 'from' has precedance over the previous end state.

    @@ -400,37 +561,37 @@

    Animation configuration

    - + - + - + - + - + - + - + @@ -438,21 +599,23 @@

    Animation configuration

    from_positionfromPosition Array(3) [0, 0, 0] or previous end state
    from_rotationfromRotation Array(3) [0, 0, 0] or previous end state
    from_scalefromScale Array(2) [1, 1] or previous end state
    from_rotation_postfromRotationPost Array(3) [0, 0, 0] or previous end state
    from_widthfromWidth Scalar Previous end state width
    from_heightfromHeight Scalar Previous end state height
    from_opacityfromOpacity Scalar Previous end state opacity
      -
    • from_position - set to [0, 0, 0] or previous end state
    • -
    • from_scale - set to [0, 0, 0] or previous end state
    • -
    • from_width
    • -
    • from_height
    • -
    • from_opacity
    • +
    • fromPosition - set to [0, 0, 0] or previous end state
    • +
    • fromScale - set to [0, 0, 0] or previous end state
    • +
    • fromWidth - Mandatory if width is used
    • +
    • fromHeight - Mandatory if height is used
    • +
    • fromOpacity - Mandatory if opacity is used
    - + + + diff --git a/docs/jquery-2.1.1.min.js b/docs/jquery-2.1.1.min.js deleted file mode 100644 index e5ace11..0000000 --- a/docs/jquery-2.1.1.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
    ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) -},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("