Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Binds a loading layer effect to an ajax call
- * @param jqXHR deferred the jqXHR object returned by an $.ajax() call
- * @param function retry function to call to re-lauch the request
- * @return jQuery
- */
- $.fn.ajaxWithEffect = function(deferred, retry)
- {
- // Add effect layer
- this.addEffectLayer({
- message: $.fn.ajaxWithEffect.defaults.message
- });
- // Callbacks
- deferred.done(function()
- {
- // Get the effect layer
- var refElement = getNodeRefElement(this);
- var layer = $(refElement).next('.loading-mask');
- var span = layer.children('span');
- // Remove effect layer
- layer.stop(true);
- span.stop(true);
- var currentMarginTop = parseInt(span.css('margin-top'));
- var marginTop = parseInt(span.css('margin-top', '').css('margin-top'));
- span.css({'marginTop':currentMarginTop+'px'}).animate({'opacity':0, 'marginTop':(marginTop-40)+'px'}, {
- 'complete': function()
- {
- layer.fadeAndRemove();
- }
- });
- });
- deferred.fail(function()
- {
- // Get the effect layer
- var refElement = getNodeRefElement(this);
- var layer = $(refElement).next('.loading-mask');
- var span = layer.children('span');
- // Error layer
- if (retry)
- {
- span.addClass('error').html($.fn.ajaxWithEffect.defaults.errorMessage+'<br><a href="#">'+$.fn.ajaxWithEffect.defaults.retry+'</a> / <a href="#">'+$.fn.ajaxWithEffect.defaults.cancel+'</a>');
- span.children('a:first').click(function(event)
- {
- event.preventDefault();
- // Remove current layer
- layer.stop(true).remove();
- // Relaunch request
- retry();
- });
- }
- else
- {
- span.addClass('error').html($.fn.ajaxWithEffect.defaults.errorMessage+'<br><a href="#">'+$.fn.ajaxWithEffect.defaults.close+'</a>');
- }
- span.children('a:last').click(function(event)
- {
- event.preventDefault();
- // Remove effect layer
- layer.stop(true);
- span.stop(true);
- var currentMarginTop = parseInt(span.css('margin-top'));
- var marginTop = parseInt(span.css('margin-top', '').css('margin-top'));
- span.css({'marginTop':currentMarginTop+'px'}).animate({'opacity':0, 'marginTop':(marginTop-40)+'px'}, {
- 'complete': function()
- {
- layer.fadeAndRemove();
- }
- });
- });
- // Centering
- span.css('margin-left', -Math.round(span.outerWidth()/2));
- });
- return this;
- };
- // Default texts for the loading effect layer
- $.fn.ajaxWithEffect.defaults = {
- message: 'Loading...',
- errorMessage: 'Error while loading',
- retry: 'Retry',
- cancel: 'Cancel',
- close: 'Close'
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement