Enhances ajaxSetup so that it can take an optional target option, in which case targe...
authorjaubourg <j@ubourg.net>
Sat, 12 Feb 2011 02:59:46 +0000 (03:59 +0100)
committerjaubourg <j@ubourg.net>
Sat, 12 Feb 2011 02:59:46 +0000 (03:59 +0100)
src/ajax.js

index e6c9ac8..7ef8dec 100644 (file)
@@ -279,11 +279,27 @@ jQuery.extend({
                return jQuery.get( url, data, callback, "json" );
        },
 
-       ajaxSetup: function( settings ) {
-               jQuery.extend( true, jQuery.ajaxSettings, settings );
-               if ( settings.context ) {
-                       jQuery.ajaxSettings.context = settings.context;
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function ( target, settings ) {
+               if ( !settings ) {
+                       // Only one parameter, we extend ajaxSettings
+                       settings = target;
+                       target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+               } else {
+                       // target was provided, we extend into it
+                       jQuery.extend( true, target, jQuery.ajaxSettings, settings );
+               }
+               // Flatten fields we don't want deep extended
+               for( var field in { context: 1, url: 1 } ) {
+                       if ( field in settings ) {
+                               target[ field ] = settings[ field ];
+                       } else if( field in jQuery.ajaxSettings ) {
+                               target[ field ] = jQuery.ajaxSettings[ field ];
+                       }
                }
+               return target;
        },
 
        ajaxSettings: {
@@ -360,13 +376,9 @@ jQuery.extend({
                options = options || {};
 
                var // Create the final options object
-                       s = jQuery.extend( true, {}, jQuery.ajaxSettings, options ),
+                       s = jQuery.ajaxSetup( {}, options ),
                        // Callbacks context
-                       // We force the original context if it exists
-                       // or take it from jQuery.ajaxSettings otherwise
-                       // (plain objects used as context get extended)
-                       callbackContext =
-                               ( s.context = ( "context" in options ? options : jQuery.ajaxSettings ).context ) || s,
+                       callbackContext = s.context || s,
                        // Context for global events
                        // It's the callbackContext if one was provided in the options
                        // and if it's a DOM node or a jQuery collection
@@ -586,7 +598,7 @@ jQuery.extend({
                // Remove hash character (#7531: and string promotion)
                // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
                // We also use the url parameter if available
-               s.url = ( "" + ( url || s.url ) ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+               s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
 
                // Extract dataTypes list
                s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );