forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | /** | ||
|  |  * Ajax Queue Plugin | ||
|  |  *  | ||
|  |  * Homepage: http://jquery.com/plugins/project/ajaxqueue
 | ||
|  |  * Documentation: http://docs.jquery.com/AjaxQueue
 | ||
|  |  */ | ||
|  | 
 | ||
|  | /** | ||
|  | 
 | ||
|  | <script> | ||
|  | $(function(){ | ||
|  | 	jQuery.ajaxQueue({ | ||
|  | 		url: "test.php", | ||
|  | 		success: function(html){ jQuery("ul").append(html); } | ||
|  | 	}); | ||
|  | 	jQuery.ajaxQueue({ | ||
|  | 		url: "test.php", | ||
|  | 		success: function(html){ jQuery("ul").append(html); } | ||
|  | 	}); | ||
|  | 	jQuery.ajaxSync({ | ||
|  | 		url: "test.php", | ||
|  | 		success: function(html){ jQuery("ul").append("<b>"+html+"</b>"); } | ||
|  | 	}); | ||
|  | 	jQuery.ajaxSync({ | ||
|  | 		url: "test.php", | ||
|  | 		success: function(html){ jQuery("ul").append("<b>"+html+"</b>"); } | ||
|  | 	}); | ||
|  | }); | ||
|  | </script> | ||
|  | <ul style="position: absolute; top: 5px; right: 5px;"></ul> | ||
|  | 
 | ||
|  |  */ | ||
|  | /* | ||
|  |  * Queued Ajax requests. | ||
|  |  * A new Ajax request won't be started until the previous queued  | ||
|  |  * request has finished. | ||
|  |  */ | ||
|  | 
 | ||
|  | /* | ||
|  |  * Synced Ajax requests. | ||
|  |  * The Ajax request will happen as soon as you call this method, but | ||
|  |  * the callbacks (success/error/complete) won't fire until all previous | ||
|  |  * synced requests have been completed. | ||
|  |  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | (function($) { | ||
|  | 	 | ||
|  | 	var ajax = $.ajax; | ||
|  | 	 | ||
|  | 	var pendingRequests = {}; | ||
|  | 	 | ||
|  | 	var synced = []; | ||
|  | 	var syncedData = []; | ||
|  | 	 | ||
|  | 	$.ajax = function(settings) { | ||
|  | 		// create settings for compatibility with ajaxSetup
 | ||
|  | 		settings = jQuery.extend(settings, jQuery.extend({}, jQuery.ajaxSettings, settings)); | ||
|  | 		 | ||
|  | 		var port = settings.port; | ||
|  | 		 | ||
|  | 		switch(settings.mode) { | ||
|  | 		case "abort":  | ||
|  | 			if ( pendingRequests[port] ) { | ||
|  | 				pendingRequests[port].abort(); | ||
|  | 			} | ||
|  | 			return pendingRequests[port] = ajax.apply(this, arguments); | ||
|  | 		case "queue":  | ||
|  | 			var _old = settings.complete; | ||
|  | 			settings.complete = function(){ | ||
|  | 				if ( _old ) | ||
|  | 					_old.apply( this, arguments ); | ||
|  | 				jQuery([ajax]).dequeue("ajax" + port );; | ||
|  | 			}; | ||
|  | 		 | ||
|  | 			jQuery([ ajax ]).queue("ajax" + port, function(){ | ||
|  | 				ajax( settings ); | ||
|  | 			}); | ||
|  | 			return; | ||
|  | 		case "sync": | ||
|  | 			var pos = synced.length; | ||
|  | 	 | ||
|  | 			synced[ pos ] = { | ||
|  | 				error: settings.error, | ||
|  | 				success: settings.success, | ||
|  | 				complete: settings.complete, | ||
|  | 				done: false | ||
|  | 			}; | ||
|  | 		 | ||
|  | 			syncedData[ pos ] = { | ||
|  | 				error: [], | ||
|  | 				success: [], | ||
|  | 				complete: [] | ||
|  | 			}; | ||
|  | 		 | ||
|  | 			settings.error = function(){ syncedData[ pos ].error = arguments; }; | ||
|  | 			settings.success = function(){ syncedData[ pos ].success = arguments; }; | ||
|  | 			settings.complete = function(){ | ||
|  | 				syncedData[ pos ].complete = arguments; | ||
|  | 				synced[ pos ].done = true; | ||
|  | 		 | ||
|  | 				if ( pos == 0 || !synced[ pos-1 ] ) | ||
|  | 					for ( var i = pos; i < synced.length && synced[i].done; i++ ) { | ||
|  | 						if ( synced[i].error ) synced[i].error.apply( jQuery, syncedData[i].error ); | ||
|  | 						if ( synced[i].success ) synced[i].success.apply( jQuery, syncedData[i].success ); | ||
|  | 						if ( synced[i].complete ) synced[i].complete.apply( jQuery, syncedData[i].complete ); | ||
|  | 		 | ||
|  | 						synced[i] = null; | ||
|  | 						syncedData[i] = null; | ||
|  | 					} | ||
|  | 			}; | ||
|  | 		} | ||
|  | 		return ajax.apply(this, arguments); | ||
|  | 	}; | ||
|  | 	 | ||
|  | })(jQuery); |