vendor/assets/javascripts/_animation.js in active_frontend-11.1.0 vs vendor/assets/javascripts/_animation.js in active_frontend-12.0.0

- old
+ new

@@ -1,45 +1,103 @@ -(function ($, window, document, undefined) { ++function ($) { 'use strict'; - $.fn.animateCSS = function (effect, delay, callback) { - return this.each(function () { + // ANIMATION CLASS DEFINITION + // ========================== - var $this = $(this), - animated = "animated animated-", - hidden = "hidden", - transitionEnd = "webkitAnimationEnd oanimationend msAnimationEnd animationend", - visibility = "visibility", - visible = "visible"; + var Animation = function (element, options) { + this.options = $.extend({}, options) + this.$element = $(element) + }; - function run() { - $this.addClass( animated + " " + effect) + Animation.VERSION = '3.3.2' - if ($this.css( visibility ) === hidden) { - $this.css( visibility, visible) + Animation.TRANSITION_END = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend' + + $.fn.extend({ + animation: function(effect, options) { + var addClass, animation, callback, complete, init, removeClass, setDelay, setDuration, settings, unhide; + + settings = { + effect: effect, + delay: '0s', + klass: 'animation animation-', + infinite: false, + callback: options, + duration: '1s', + debug: false + }; + + settings = $.extend(settings, options); + init = function(element) { + return animation(element); + }; + + animation = function(element) { + if (settings.infinite === true) { + settings.klass += ' infinite'; } - if ($this.is(":" + hidden)) { - $this.show() + setDelay(element); + setDuration(element); + unhide(element); + addClass(element); + return complete(element); + }; + + addClass = function(element) { + return element.addClass(settings.klass + settings.effect); + }; + + unhide = function(element) { + if (element.css('visibility') === 'hidden') { + element.css('visibility', 'visible'); } + if (element.is(':hidden')) { + return element.show(); + } + }; - $this.bind( transitionEnd, function () { - $this.removeClass(animated + " " + effect) + removeClass = function(element) { + return element.removeClass(settings.klass + settings.effect); + }; - if (typeof callback === "function") { - callback.call(this) - $this.unbind( transitionEnd ) - } - }) - } + setDelay = function(element) { + return element.css({ + '-webkit-animation-delay': settings.delay, + '-moz-animation-delay': settings.delay, + '-o-animation-delay': settings.delay, + 'animation-delay': settings.delay + }); + }; - if (!delay || typeof delay === "function") { - callback = delay; - run() - } else { - setTimeout(run, delay) - } + setDuration = function(element) { + return element.css({ + '-webkit-animation-duration': settings.duration, + '-moz-animation-duration': settings.duration, + '-o-animation-duration': settings.duration, + 'animation-duration': settings.duration + }); + }; - }) - } + callback = function(element) { + if (settings.infinite === false) { + removeClass(element); + } + if (typeof settings.callback === 'function') { + return settings.callback.call(element); + } + }; -})(jQuery, window, document); + complete = function(element) { + return element.one(Animation.TRANSITION_END, function() { + return callback(element); + }); + }; + + return this.each(function() { + return init($(this)); + }); + } + }); + +}(jQuery); \ No newline at end of file