Merge "Special:Upload should not crash on failing previews"
[mediawiki.git] / resources / lib / jquery.ui / jquery.ui.effect-shake.js
blob216c08b69bbf67696777a5a11fc5d610b47778e3
1 /*!
2  * jQuery UI Effects Shake 1.9.2
3  * http://jqueryui.com
4  *
5  * Copyright 2012 jQuery Foundation and other contributors
6  * Released under the MIT license.
7  * http://jquery.org/license
8  *
9  * http://api.jqueryui.com/shake-effect/
10  *
11  * Depends:
12  *      jquery.ui.effect.js
13  */
14 (function( $, undefined ) {
16 $.effects.effect.shake = function( o, done ) {
18         var el = $( this ),
19                 props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
20                 mode = $.effects.setMode( el, o.mode || "effect" ),
21                 direction = o.direction || "left",
22                 distance = o.distance || 20,
23                 times = o.times || 3,
24                 anims = times * 2 + 1,
25                 speed = Math.round(o.duration/anims),
26                 ref = (direction === "up" || direction === "down") ? "top" : "left",
27                 positiveMotion = (direction === "up" || direction === "left"),
28                 animation = {},
29                 animation1 = {},
30                 animation2 = {},
31                 i,
33                 // we will need to re-assemble the queue to stack our animations in place
34                 queue = el.queue(),
35                 queuelen = queue.length;
37         $.effects.save( el, props );
38         el.show();
39         $.effects.createWrapper( el );
41         // Animation
42         animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
43         animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
44         animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
46         // Animate
47         el.animate( animation, speed, o.easing );
49         // Shakes
50         for ( i = 1; i < times; i++ ) {
51                 el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
52         }
53         el
54                 .animate( animation1, speed, o.easing )
55                 .animate( animation, speed / 2, o.easing )
56                 .queue(function() {
57                         if ( mode === "hide" ) {
58                                 el.hide();
59                         }
60                         $.effects.restore( el, props );
61                         $.effects.removeWrapper( el );
62                         done();
63                 });
65         // inject all the animations we just queued to be first in line (after "inprogress")
66         if ( queuelen > 1) {
67                 queue.splice.apply( queue,
68                         [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
69         }
70         el.dequeue();
74 })(jQuery);