diff options
Diffstat (limited to 'js/vendor/jquery/src/ajax')
-rw-r--r-- | js/vendor/jquery/src/ajax/jsonp.js | 39 | ||||
-rw-r--r-- | js/vendor/jquery/src/ajax/load.js | 32 | ||||
-rw-r--r-- | js/vendor/jquery/src/ajax/parseJSON.js | 4 | ||||
-rw-r--r-- | js/vendor/jquery/src/ajax/parseXML.js | 9 | ||||
-rw-r--r-- | js/vendor/jquery/src/ajax/script.js | 28 | ||||
-rw-r--r-- | js/vendor/jquery/src/ajax/var/location.js | 3 | ||||
-rw-r--r-- | js/vendor/jquery/src/ajax/var/nonce.js | 4 | ||||
-rw-r--r-- | js/vendor/jquery/src/ajax/var/rquery.js | 6 | ||||
-rw-r--r-- | js/vendor/jquery/src/ajax/xhr.js | 115 |
9 files changed, 148 insertions, 92 deletions
diff --git a/js/vendor/jquery/src/ajax/jsonp.js b/js/vendor/jquery/src/ajax/jsonp.js index ff0d53899..666e5d1e6 100644 --- a/js/vendor/jquery/src/ajax/jsonp.js +++ b/js/vendor/jquery/src/ajax/jsonp.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "./var/nonce", "./var/rquery", @@ -9,14 +9,14 @@ var oldCallbacks = [], rjsonp = /(=)\?(?=&|$)|\?\?/; // Default jsonp settings -jQuery.ajaxSetup({ +jQuery.ajaxSetup( { jsonp: "callback", jsonpCallback: function() { var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); this[ callback ] = true; return callback; } -}); +} ); // Detect, normalize options and install callbacks for jsonp requests jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { @@ -24,7 +24,10 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" ); // Handle iff the expected data type is "jsonp" or we have a parameter to set @@ -43,14 +46,14 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { } // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { + s.converters[ "script json" ] = function() { if ( !responseContainer ) { jQuery.error( callbackName + " was not called" ); } return responseContainer[ 0 ]; }; - // force json dataType + // Force json dataType s.dataTypes[ 0 ] = "json"; // Install callback @@ -60,16 +63,24 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { }; // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } // Save back as free if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around + + // Make sure that re-using the options doesn't screw things around s.jsonpCallback = originalSettings.jsonpCallback; - // save the callback name for future use + // Save the callback name for future use oldCallbacks.push( callbackName ); } @@ -79,11 +90,11 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { } responseContainer = overwritten = undefined; - }); + } ); // Delegate to script return "script"; } -}); +} ); -}); +} ); diff --git a/js/vendor/jquery/src/ajax/load.js b/js/vendor/jquery/src/ajax/load.js index bff25b1a4..9f1599f91 100644 --- a/js/vendor/jquery/src/ajax/load.js +++ b/js/vendor/jquery/src/ajax/load.js @@ -1,10 +1,11 @@ -define([ +define( [ "../core", "../core/parseHTML", "../ajax", "../traversing", "../manipulation", "../selector", + // Optional event/alias dependency "../event/alias" ], function( jQuery ) { @@ -22,9 +23,9 @@ jQuery.fn.load = function( url, params, callback ) { var selector, type, response, self = this, - off = url.indexOf(" "); + off = url.indexOf( " " ); - if ( off >= 0 ) { + if ( off > -1 ) { selector = jQuery.trim( url.slice( off ) ); url = url.slice( 0, off ); } @@ -43,14 +44,16 @@ jQuery.fn.load = function( url, params, callback ) { // If we have elements to modify, make the request if ( self.length > 0 ) { - jQuery.ajax({ + jQuery.ajax( { url: url, - // if "type" variable is undefined, then "GET" method will be used - type: type, + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", dataType: "html", data: params - }).done(function( responseText ) { + } ).done( function( responseText ) { // Save response for use in complete callback response = arguments; @@ -59,17 +62,22 @@ jQuery.fn.load = function( url, params, callback ) { // If a selector was specified, locate the right elements in a dummy div // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : // Otherwise use the full result responseText ); - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); } return this; }; -}); +} ); diff --git a/js/vendor/jquery/src/ajax/parseJSON.js b/js/vendor/jquery/src/ajax/parseJSON.js index 3a96d15b9..11918b06d 100644 --- a/js/vendor/jquery/src/ajax/parseJSON.js +++ b/js/vendor/jquery/src/ajax/parseJSON.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core" ], function( jQuery ) { @@ -10,4 +10,4 @@ jQuery.parseJSON = function( data ) { return jQuery.parseJSON; -}); +} ); diff --git a/js/vendor/jquery/src/ajax/parseXML.js b/js/vendor/jquery/src/ajax/parseXML.js index 9eeb625ff..6599aaf5b 100644 --- a/js/vendor/jquery/src/ajax/parseXML.js +++ b/js/vendor/jquery/src/ajax/parseXML.js @@ -1,18 +1,17 @@ -define([ +define( [ "../core" ], function( jQuery ) { // Cross-browser xml parsing jQuery.parseXML = function( data ) { - var xml, tmp; + var xml; if ( !data || typeof data !== "string" ) { return null; } // Support: IE9 try { - tmp = new DOMParser(); - xml = tmp.parseFromString( data, "text/xml" ); + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); } catch ( e ) { xml = undefined; } @@ -25,4 +24,4 @@ jQuery.parseXML = function( data ) { return jQuery.parseXML; -}); +} ); diff --git a/js/vendor/jquery/src/ajax/script.js b/js/vendor/jquery/src/ajax/script.js index f44329d4e..945bea9da 100644 --- a/js/vendor/jquery/src/ajax/script.js +++ b/js/vendor/jquery/src/ajax/script.js @@ -1,15 +1,17 @@ -define([ +define( [ "../core", + "../var/document", "../ajax" -], function( jQuery ) { +], function( jQuery, document ) { // Install script dataType -jQuery.ajaxSetup({ +jQuery.ajaxSetup( { accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" }, contents: { - script: /(?:java|ecma)script/ + script: /\b(?:java|ecma)script\b/ }, converters: { "text script": function( text ) { @@ -17,7 +19,7 @@ jQuery.ajaxSetup({ return text; } } -}); +} ); // Handle cache's special case and crossDomain jQuery.ajaxPrefilter( "script", function( s ) { @@ -27,20 +29,20 @@ jQuery.ajaxPrefilter( "script", function( s ) { if ( s.crossDomain ) { s.type = "GET"; } -}); +} ); // Bind script tag hack transport jQuery.ajaxTransport( "script", function( s ) { + // This transport only deals with cross domain requests if ( s.crossDomain ) { var script, callback; return { send: function( _, complete ) { - script = jQuery("<script>").prop({ - async: true, + script = jQuery( "<script>" ).prop( { charset: s.scriptCharset, src: s.url - }).on( + } ).on( "load error", callback = function( evt ) { script.remove(); @@ -50,6 +52,8 @@ jQuery.ajaxTransport( "script", function( s ) { } } ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery document.head.appendChild( script[ 0 ] ); }, abort: function() { @@ -59,6 +63,6 @@ jQuery.ajaxTransport( "script", function( s ) { } }; } -}); +} ); -}); +} ); diff --git a/js/vendor/jquery/src/ajax/var/location.js b/js/vendor/jquery/src/ajax/var/location.js new file mode 100644 index 000000000..ff9578e99 --- /dev/null +++ b/js/vendor/jquery/src/ajax/var/location.js @@ -0,0 +1,3 @@ +define( function() { + return window.location; +} ); diff --git a/js/vendor/jquery/src/ajax/var/nonce.js b/js/vendor/jquery/src/ajax/var/nonce.js index 0871aae88..83fd557c8 100644 --- a/js/vendor/jquery/src/ajax/var/nonce.js +++ b/js/vendor/jquery/src/ajax/var/nonce.js @@ -1,5 +1,5 @@ -define([ +define( [ "../../core" ], function( jQuery ) { return jQuery.now(); -}); +} ); diff --git a/js/vendor/jquery/src/ajax/var/rquery.js b/js/vendor/jquery/src/ajax/var/rquery.js index 500a77a08..0502146ca 100644 --- a/js/vendor/jquery/src/ajax/var/rquery.js +++ b/js/vendor/jquery/src/ajax/var/rquery.js @@ -1,3 +1,3 @@ -define(function() { - return (/\?/); -}); +define( function() { + return ( /\?/ ); +} ); diff --git a/js/vendor/jquery/src/ajax/xhr.js b/js/vendor/jquery/src/ajax/xhr.js index c2b43c921..db670ff15 100644 --- a/js/vendor/jquery/src/ajax/xhr.js +++ b/js/vendor/jquery/src/ajax/xhr.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../var/support", "../ajax" @@ -6,47 +6,41 @@ define([ jQuery.ajaxSettings.xhr = function() { try { - return new XMLHttpRequest(); - } catch( e ) {} + return new window.XMLHttpRequest(); + } catch ( e ) {} }; -var xhrId = 0, - xhrCallbacks = {}, - xhrSuccessStatus = { - // file protocol always yields status code 0, assume 200 +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 0: 200, + // Support: IE9 // #1450: sometimes IE returns 1223 when it should be 204 1223: 204 }, xhrSupported = jQuery.ajaxSettings.xhr(); -// Support: IE9 -// Open requests must be manually aborted on unload (#5280) -// See https://support.microsoft.com/kb/2856746 for more info -if ( window.attachEvent ) { - window.attachEvent( "onunload", function() { - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ](); - } - }); -} - support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); support.ajax = xhrSupported = !!xhrSupported; -jQuery.ajaxTransport(function( options ) { - var callback; +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest if ( support.cors || xhrSupported && !options.crossDomain ) { return { send: function( headers, complete ) { var i, - xhr = options.xhr(), - id = ++xhrId; + xhr = options.xhr(); - xhr.open( options.type, options.url, options.async, options.username, options.password ); + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); // Apply custom fields if provided if ( options.xhrFields ) { @@ -65,8 +59,8 @@ jQuery.ajaxTransport(function( options ) { // akin to a jigsaw puzzle, we simply never set it to be sure. // (it can always be set on a per-request basis or even using ajaxSetup) // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; } // Set headers @@ -78,27 +72,38 @@ jQuery.ajaxTransport(function( options ) { callback = function( type ) { return function() { if ( callback ) { - delete xhrCallbacks[ id ]; - callback = xhr.onload = xhr.onerror = null; + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; if ( type === "abort" ) { xhr.abort(); } else if ( type === "error" ) { - complete( - // file: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); + + // Support: IE9 + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } } else { complete( xhrSuccessStatus[ xhr.status ] || xhr.status, xhr.statusText, - // Support: IE9 - // Accessing binary-data responseText throws an exception - // (#11426) - typeof xhr.responseText === "string" ? { - text: xhr.responseText - } : undefined, + + // Support: IE9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, xhr.getAllResponseHeaders() ); } @@ -108,15 +113,41 @@ jQuery.ajaxTransport(function( options ) { // Listen to events xhr.onload = callback(); - xhr.onerror = callback("error"); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE9 + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } // Create the abort callback - callback = xhrCallbacks[ id ] = callback("abort"); + callback = callback( "abort" ); try { + // Do send the request (this may raise an exception) xhr.send( options.hasContent && options.data || null ); } catch ( e ) { + // #14683: Only rethrow if this hasn't been notified as an error yet if ( callback ) { throw e; @@ -131,6 +162,6 @@ jQuery.ajaxTransport(function( options ) { } }; } -}); +} ); -}); +} ); |