From e26457dc08de31df4c114b15a6180e0ccdf08fb4 Mon Sep 17 00:00:00 2001 From: jlukic Date: Fri, 14 Mar 2014 13:40:12 -0400 Subject: [PATCH] Fixes #704, Fixes #421. onShow, onHide callback moved to before transition starts, added new callbacks onVisible and noHidden for after animation completes --- server/documents/modules/modal.html.eco | 14 ++++++++++++-- src/modules/modal.js | 12 ++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/server/documents/modules/modal.html.eco b/server/documents/modules/modal.html.eco index 16cd36351..ece802be4 100755 --- a/server/documents/modules/modal.html.eco +++ b/server/documents/modules/modal.html.eco @@ -440,12 +440,22 @@ type : 'UI Module' onShow Modal - Is called after a modal is shown. + Is called when a modal starts to show. + + + onVisible + Modal + Is called after a modal has finished showing animating. onHide Modal - Is called after a modal is hidden. + Is called after a modal starts to hide. + + + onHidden + Modal + Is called after a modal has finished hiding animation. onApprove diff --git a/src/modules/modal.js b/src/modules/modal.js index fdedbb079..d257609c6 100755 --- a/src/modules/modal.js +++ b/src/modules/modal.js @@ -253,10 +253,12 @@ $.fn.modal = function(parameters) { module.hideOthers(module.showModal); } else { + $.proxy(settings.onShow, element)(); if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) { module.debug('Showing modal with css animations'); $module .transition(settings.transition + ' in', settings.duration, function() { + $.proxy(settings.onVisible, element)(); module.set.active(); callback(); }) @@ -266,12 +268,12 @@ $.fn.modal = function(parameters) { module.debug('Showing modal with javascript'); $module .fadeIn(settings.duration, settings.easing, function() { + $.proxy(settings.onVisible, element)(); module.set.active(); callback(); }) ; } - $.proxy(settings.onShow, element)(); } } else { @@ -333,9 +335,11 @@ $.fn.modal = function(parameters) { } module.debug('Hiding modal'); module.remove.keyboardShortcuts(); + $.proxy(settings.onHide, element)(); if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) { $module .transition(settings.transition + ' out', settings.duration, function() { + $.proxy(settings.onHidden, element)(); module.remove.active(); module.restore.focus(); callback(); @@ -345,13 +349,13 @@ $.fn.modal = function(parameters) { else { $module .fadeOut(settings.duration, settings.easing, function() { + $.proxy(settings.onHidden, element)(); module.remove.active(); module.restore.focus(); callback(); }) ; } - $.proxy(settings.onHide, element)(); }, hideAll: function(callback) { @@ -712,6 +716,10 @@ $.fn.modal.settings = { onShow : function(){}, onHide : function(){}, + + onVisible : function(){}, + onHidden : function(){}, + onApprove : function(){ return true; }, onDeny : function(){ return true; },