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