From 5d02020c377ce6c6283f21d7210a05fd39259cf0 Mon Sep 17 00:00:00 2001 From: jlukic Date: Mon, 13 Oct 2014 18:54:43 -0400 Subject: [PATCH] Fixes #968 and #1138, Transition can now correctly cancel callbacks when interrupted mid animation --- src/definitions/modules/modal.js | 2 +- src/definitions/modules/transition.js | 30 ++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/definitions/modules/modal.js b/src/definitions/modules/modal.js index 9063a39b7..9d10046e7 100755 --- a/src/definitions/modules/modal.js +++ b/src/definitions/modules/modal.js @@ -389,7 +389,7 @@ $.fn.modal = function(parameters) { : function(){} ; if( $otherModals.is(':visible') ) { - module.debug('Hiding other modals'); + module.debug('Hiding other modals', $otherModals); $otherModals .filter(':visible') .modal('hide modal', callback) diff --git a/src/definitions/modules/transition.js b/src/definitions/modules/transition.js index 864b6ebe5..2f1c276a1 100755 --- a/src/definitions/modules/transition.js +++ b/src/definitions/modules/transition.js @@ -131,14 +131,19 @@ $.fn.transition = function() { return false; } module.debug('Preparing animation', settings.animation); - if(module.is.animating() && settings.queue) { - if(!settings.allowRepeats && module.has.direction() && module.is.occuring() && module.queuing !== true) { - module.error(error.repeated); + if(module.is.animating()) { + if(settings.queue) { + if(!settings.allowRepeats && module.has.direction() && module.is.occuring() && module.queuing !== true) { + module.error(error.repeated, settings.animation, $module); + } + else { + module.queue(settings.animation); + } + return false; } else { - module.queue(settings.animation); + } - return false; } if(module.can.animate) { module.set.animating(settings.animation); @@ -212,13 +217,17 @@ $.fn.transition = function() { if(module.can.transition() && !module.has.direction()) { module.set.direction(); } + if(module.is.animating()) { + module.remove.direction(); + $module.off('.complete'); + } module.remove.hidden(); module.set.display(); $module .addClass(className.animating) .addClass(className.transition) .addClass(animation) - .one(animationEnd + eventNamespace, module.complete) + .one(animationEnd + '.complete' + eventNamespace, module.complete) ; module.set.duration(settings.duration); $.proxy(settings.start, this)(); @@ -350,6 +359,12 @@ $.fn.transition = function() { $module.css('display', ''); } }, + direction: function() { + $module + .removeClass(className.inward) + .removeClass(className.outward) + ; + }, duration: function() { $module .css({ @@ -556,7 +571,8 @@ $.fn.transition = function() { }, occuring: function(animation) { animation = animation || settings.animation; - return ( $module.hasClass(animation) ); + animation = animation.replace(' ', '.'); + return ( $module.filter(animation).size() > 0 ); }, visible: function() { return $module.is(':visible');