/*! * jQuery UI Effects Shake - v1.10.4 * http://jqueryui.com * * Copyright 2014 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/shake-effect/ */ define([ 'jquery', 'jquery-ui-modules/effect' ], function ($, undefined) { $.effects.effect.shake = function (o, done) { var el = $(this), props = ["position", "top", "bottom", "left", "right", "height", "width"], mode = $.effects.setMode(el, o.mode || "effect"), direction = o.direction || "left", distance = o.distance || 20, times = o.times || 3, anims = times * 2 + 1, speed = Math.round(o.duration / anims), ref = (direction === "up" || direction === "down") ? "top" : "left", positiveMotion = (direction === "up" || direction === "left"), animation = {}, animation1 = {}, animation2 = {}, i, // we will need to re-assemble the queue to stack our animations in place queue = el.queue(), queuelen = queue.length; $.effects.save(el, props); el.show(); $.effects.createWrapper(el); // Animation animation[ref] = (positiveMotion ? "-=" : "+=") + distance; animation1[ref] = (positiveMotion ? "+=" : "-=") + distance * 2; animation2[ref] = (positiveMotion ? "-=" : "+=") + distance * 2; // Animate el.animate(animation, speed, o.easing); // Shakes for (i = 1; i < times; i++) { el.animate(animation1, speed, o.easing).animate(animation2, speed, o.easing); } el .animate(animation1, speed, o.easing) .animate(animation, speed / 2, o.easing) .queue(function () { if (mode === "hide") { el.hide(); } $.effects.restore(el, props); $.effects.removeWrapper(el); done(); }); // inject all the animations we just queued to be first in line (after "inprogress") if (queuelen > 1) { queue.splice.apply(queue, [1, 0].concat(queue.splice(queuelen, anims + 1))); } el.dequeue(); }; });