diff options
author | Oleg Gaidarenko <markelog@gmail.com> | 2015-08-16 09:59:58 +0300 |
---|---|---|
committer | Oleg Gaidarenko <markelog@gmail.com> | 2015-09-07 20:03:50 +0300 |
commit | 10fdad742a2a6aa9f0e00b3e04fc5264797c53c7 (patch) | |
tree | 6b6d7b1375ff88f4bebbfa0703f7b595eb485df9 /src | |
parent | 7aa46e0df8a673e6b00550bbbbed21eed50108b7 (diff) | |
download | jquery-10fdad742a2a6aa9f0e00b3e04fc5264797c53c7.tar.gz jquery-10fdad742a2a6aa9f0e00b3e04fc5264797c53c7.zip |
Build: Update jscs and lint files
Fixes gh-2056
Diffstat (limited to 'src')
90 files changed, 786 insertions, 603 deletions
diff --git a/src/ajax.js b/src/ajax.js index 9c1d6ca85..84ddc304a 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/document", "./var/rnotwhite", @@ -15,6 +15,7 @@ var rhash = /#.*$/, rts = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + // #7653, #8125, #8152: local protocol detection rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, @@ -61,16 +62,18 @@ function addToPrefiltersOrTransports( structure ) { dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { + while ( ( dataType = dataTypes[ i++ ] ) ) { + // Prepend if requested - if ( dataType[0] === "+" ) { + if ( dataType[ 0 ] === "+" ) { dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); // Otherwise append } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); } } } @@ -97,7 +100,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX } else if ( seekingTransport ) { return !( selected = dataTypeOrTransport ); } - }); + } ); return selected; } @@ -113,7 +116,7 @@ function ajaxExtend( target, src ) { for ( key in src ) { if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; } } if ( deep ) { @@ -137,7 +140,7 @@ function ajaxHandleResponses( s, jqXHR, responses ) { while ( dataTypes[ 0 ] === "*" ) { dataTypes.shift(); if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); } } @@ -155,9 +158,10 @@ function ajaxHandleResponses( s, jqXHR, responses ) { if ( dataTypes[ 0 ] in responses ) { finalDataType = dataTypes[ 0 ]; } else { + // Try convertible dataTypes for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { finalDataType = type; break; } @@ -165,6 +169,7 @@ function ajaxHandleResponses( s, jqXHR, responses ) { firstDataType = type; } } + // Or just use first one finalDataType = finalDataType || firstDataType; } @@ -186,6 +191,7 @@ function ajaxHandleResponses( s, jqXHR, responses ) { function ajaxConvert( s, response, jqXHR, isSuccess ) { var conv2, current, conv, tmp, prev, converters = {}, + // Work with a copy of dataTypes in case we need to modify it for conversion dataTypes = s.dataTypes.slice(); @@ -238,6 +244,7 @@ function ajaxConvert( s, response, jqXHR, isSuccess ) { conv = converters[ prev + " " + tmp[ 0 ] ] || converters[ "* " + tmp[ 0 ] ]; if ( conv ) { + // Condense equivalence converters if ( conv === true ) { conv = converters[ conv2 ]; @@ -257,7 +264,7 @@ function ajaxConvert( s, response, jqXHR, isSuccess ) { if ( conv !== true ) { // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { + if ( conv && s[ "throws" ] ) { // jscs:ignore requireDotNotation response = conv( response ); } else { try { @@ -277,7 +284,7 @@ function ajaxConvert( s, response, jqXHR, isSuccess ) { return { state: "success", data: response }; } -jQuery.extend({ +jQuery.extend( { // Counter for holding the number of active queries active: 0, @@ -382,40 +389,55 @@ jQuery.extend({ options = options || {}; var transport, + // URL without anti-cache param cacheURL, + // Response headers responseHeadersString, responseHeaders, + // timeout handle timeoutTimer, + // Url cleanup var urlAnchor, + // To know if global events are to be dispatched fireGlobals, + // Loop variable i, + // Create the final options object s = jQuery.ajaxSetup( {}, options ), + // Callbacks context callbackContext = s.context || s, + // Context for global events is callbackContext if it is a DOM node or jQuery collection globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? jQuery( callbackContext ) : jQuery.event, + // Deferreds deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), + completeDeferred = jQuery.Callbacks( "once memory" ), + // Status-dependent callbacks statusCode = s.statusCode || {}, + // Headers (they are sent all at once) requestHeaders = {}, requestHeadersNames = {}, + // The jqXHR state state = 0, + // Default abort message strAbort = "canceled", + // Fake xhr jqXHR = { readyState: 0, @@ -426,8 +448,8 @@ jQuery.extend({ if ( state === 2 ) { if ( !responseHeaders ) { responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; } } match = responseHeaders[ key.toLowerCase() ]; @@ -464,10 +486,12 @@ jQuery.extend({ if ( map ) { if ( state < 2 ) { for ( code in map ) { + // Lazy-add the new callback in a way that preserves old ones statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; } } else { + // Execute the appropriate callbacks jqXHR.always( map[ jqXHR.status ] ); } @@ -510,12 +534,14 @@ jQuery.extend({ // IE throws exception if url is malformed, e.g. http://example.com:80x/ try { urlAnchor.href = s.url; + // Support: IE8-11+ // Anchor's host property isn't correctly set when s.url is relative urlAnchor.href = urlAnchor.href; s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host; } catch ( e ) { + // If there is an error parsing the URL, assume it is crossDomain, // it can be rejected by the transport if it is invalid s.crossDomain = true; @@ -541,7 +567,7 @@ jQuery.extend({ // Watch for a new set of requests if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); + jQuery.event.trigger( "ajaxStart" ); } // Uppercase the type @@ -560,6 +586,7 @@ jQuery.extend({ // If data is available, append data to url if ( s.data ) { cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + // #9682: remove data so that it's not used in an eventual retry delete s.data; } @@ -594,8 +621,8 @@ jQuery.extend({ // Set the Accepts header for the server, depending on the dataType jqXHR.setRequestHeader( "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : s.accepts[ "*" ] ); @@ -642,8 +669,8 @@ jQuery.extend({ // Timeout if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout(function() { - jqXHR.abort("timeout"); + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); }, s.timeout ); } @@ -651,9 +678,11 @@ jQuery.extend({ state = 1; transport.send( requestHeaders, done ); } catch ( e ) { + // Propagate exception as error if not done if ( state < 2 ) { done( -1, e ); + // Simply rethrow otherwise } else { throw e; @@ -705,11 +734,11 @@ jQuery.extend({ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); + modified = jqXHR.getResponseHeader( "Last-Modified" ); if ( modified ) { jQuery.lastModified[ cacheURL ] = modified; } - modified = jqXHR.getResponseHeader("etag"); + modified = jqXHR.getResponseHeader( "etag" ); if ( modified ) { jQuery.etag[ cacheURL ] = modified; } @@ -731,6 +760,7 @@ jQuery.extend({ isSuccess = !error; } } else { + // Extract error from statusText and normalize for non-aborts error = statusText; if ( status || !statusText ) { @@ -766,9 +796,10 @@ jQuery.extend({ if ( fireGlobals ) { globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); + jQuery.event.trigger( "ajaxStop" ); } } } @@ -783,10 +814,11 @@ jQuery.extend({ getScript: function( url, callback ) { return jQuery.get( url, undefined, callback, "script" ); } -}); +} ); jQuery.each( [ "get", "post" ], function( i, method ) { jQuery[ method ] = function( url, data, callback, type ) { + // Shift arguments if data argument was omitted if ( jQuery.isFunction( data ) ) { type = type || callback; @@ -795,7 +827,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) { } // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend({ + return jQuery.ajax( jQuery.extend( { url: url, type: method, dataType: type, @@ -803,7 +835,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) { success: callback }, jQuery.isPlainObject( url ) && url ) ); }; -}); +} ); return jQuery; -}); +} ); diff --git a/src/ajax/jsonp.js b/src/ajax/jsonp.js index f469344e0..666e5d1e6 100644 --- a/src/ajax/jsonp.js +++ b/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 ) { @@ -26,7 +26,7 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { "url" : typeof s.data === "string" && ( s.contentType || "" ) - .indexOf("application/x-www-form-urlencoded") === 0 && + .indexOf( "application/x-www-form-urlencoded" ) === 0 && rjsonp.test( s.data ) && "data" ); @@ -46,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 @@ -63,7 +63,8 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { }; // Clean-up function (fires after converters) - jqXHR.always(function() { + jqXHR.always( function() { + // If previous value didn't exist - remove it if ( overwritten === undefined ) { jQuery( window ).removeProp( callbackName ); @@ -75,10 +76,11 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { // 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 ); } @@ -88,11 +90,11 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { } responseContainer = overwritten = undefined; - }); + } ); // Delegate to script return "script"; } -}); +} ); -}); +} ); diff --git a/src/ajax/load.js b/src/ajax/load.js index 8326e9287..82f0cf308 100644 --- a/src/ajax/load.js +++ b/src/ajax/load.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../core/parseHTML", "../ajax", @@ -13,7 +13,7 @@ define([ jQuery.fn.load = function( url, params, callback ) { var selector, type, response, self = this, - off = url.indexOf(" "); + off = url.indexOf( " " ); if ( off > -1 ) { selector = jQuery.trim( url.slice( off ) ); @@ -34,7 +34,7 @@ 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. @@ -43,7 +43,7 @@ jQuery.fn.load = function( url, params, callback ) { type: type || "GET", dataType: "html", data: params - }).done(function( responseText ) { + } ).done( function( responseText ) { // Save response for use in complete callback response = arguments; @@ -52,7 +52,7 @@ 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 ); @@ -60,14 +60,14 @@ jQuery.fn.load = function( url, params, callback ) { // 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 ) { + } ).always( callback && function( jqXHR, status ) { self.each( function() { callback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - }); + } ); + } ); } return this; }; -}); +} ); diff --git a/src/ajax/parseJSON.js b/src/ajax/parseJSON.js index 3a96d15b9..11918b06d 100644 --- a/src/ajax/parseJSON.js +++ b/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/src/ajax/parseXML.js b/src/ajax/parseXML.js index 962dc8887..6599aaf5b 100644 --- a/src/ajax/parseXML.js +++ b/src/ajax/parseXML.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core" ], function( jQuery ) { @@ -24,4 +24,4 @@ jQuery.parseXML = function( data ) { return jQuery.parseXML; -}); +} ); diff --git a/src/ajax/script.js b/src/ajax/script.js index ede551708..60b1fb6b0 100644 --- a/src/ajax/script.js +++ b/src/ajax/script.js @@ -1,11 +1,11 @@ -define([ +define( [ "../core", "../var/document", "../ajax" ], function( jQuery, document ) { // Install script dataType -jQuery.ajaxSetup({ +jQuery.ajaxSetup( { accepts: { script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript" @@ -19,7 +19,7 @@ jQuery.ajaxSetup({ return text; } } -}); +} ); // Handle cache's special case and crossDomain jQuery.ajaxPrefilter( "script", function( s ) { @@ -29,19 +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({ + script = jQuery( "<script>" ).prop( { charset: s.scriptCharset, src: s.url - }).on( + } ).on( "load error", callback = function( evt ) { script.remove(); @@ -62,6 +63,6 @@ jQuery.ajaxTransport( "script", function( s ) { } }; } -}); +} ); -}); +} ); diff --git a/src/ajax/var/location.js b/src/ajax/var/location.js index 4c9cf4a4c..ff9578e99 100644 --- a/src/ajax/var/location.js +++ b/src/ajax/var/location.js @@ -1,3 +1,3 @@ -define(function() { +define( function() { return window.location; -}); +} ); diff --git a/src/ajax/var/nonce.js b/src/ajax/var/nonce.js index 0871aae88..83fd557c8 100644 --- a/src/ajax/var/nonce.js +++ b/src/ajax/var/nonce.js @@ -1,5 +1,5 @@ -define([ +define( [ "../../core" ], function( jQuery ) { return jQuery.now(); -}); +} ); diff --git a/src/ajax/var/rquery.js b/src/ajax/var/rquery.js index 500a77a08..0502146ca 100644 --- a/src/ajax/var/rquery.js +++ b/src/ajax/var/rquery.js @@ -1,3 +1,3 @@ -define(function() { - return (/\?/); -}); +define( function() { + return ( /\?/ ); +} ); diff --git a/src/ajax/xhr.js b/src/ajax/xhr.js index 545bb26c9..7ac141e64 100644 --- a/src/ajax/xhr.js +++ b/src/ajax/xhr.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../var/support", "../ajax" @@ -11,8 +11,10 @@ jQuery.ajaxSettings.xhr = function() { }; var xhrSuccessStatus = { - // file protocol always yields status code 0, assume 200 + + // 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 @@ -22,7 +24,7 @@ var xhrSuccessStatus = { support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); support.ajax = xhrSupported = !!xhrSupported; -jQuery.ajaxTransport(function( options ) { +jQuery.ajaxTransport( function( options ) { var callback; // Cross domain only allowed if supported through XMLHttpRequest @@ -57,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 @@ -76,7 +78,8 @@ jQuery.ajaxTransport(function( options ) { xhr.abort(); } else if ( type === "error" ) { complete( - // file: protocol always yields status 0; see #8605, #14207 + + // File: protocol always yields status 0; see #8605, #14207 xhr.status, xhr.statusText ); @@ -84,6 +87,7 @@ jQuery.ajaxTransport(function( options ) { complete( xhrSuccessStatus[ xhr.status ] || xhr.status, xhr.statusText, + // Support: IE9 // Accessing binary-data responseText throws an exception // (#11426) @@ -99,15 +103,17 @@ jQuery.ajaxTransport(function( options ) { // Listen to events xhr.onload = callback(); - xhr.onerror = callback("error"); + xhr.onerror = callback( "error" ); // Create the abort callback - callback = 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; @@ -122,6 +128,6 @@ jQuery.ajaxTransport(function( options ) { } }; } -}); +} ); -}); +} ); diff --git a/src/attributes.js b/src/attributes.js index fa2ef1ede..691e0c034 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./attributes/attr", "./attributes/prop", @@ -8,4 +8,4 @@ define([ // Return jQuery for attributes-only inclusion return jQuery; -}); +} ); diff --git a/src/attributes/attr.js b/src/attributes/attr.js index 07576738a..f88808324 100644 --- a/src/attributes/attr.js +++ b/src/attributes/attr.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../core/access", "./support", @@ -9,19 +9,19 @@ define([ var boolHook, attrHandle = jQuery.expr.attrHandle; -jQuery.fn.extend({ +jQuery.fn.extend( { attr: function( name, value ) { return access( this, jQuery.attr, name, value, arguments.length > 1 ); }, removeAttr: function( name ) { - return this.each(function() { + return this.each( function() { jQuery.removeAttr( this, name ); - }); + } ); } -}); +} ); -jQuery.extend({ +jQuery.extend( { attr: function( elem, name, value ) { var ret, hooks, nType = elem.nodeType; @@ -91,7 +91,7 @@ jQuery.extend({ attrNames = value && value.match( rnotwhite ); if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[i++] ) ) { + while ( ( name = attrNames[ i++ ] ) ) { propName = jQuery.propFix[ name ] || name; // Boolean attributes get special treatment (#10870) @@ -105,12 +105,13 @@ jQuery.extend({ } } } -}); +} ); // Hooks for boolean attributes boolHook = { set: function( elem, value, name ) { if ( value === false ) { + // Remove boolean attributes when set to false jQuery.removeAttr( elem, name ); } else { @@ -125,6 +126,7 @@ jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) attrHandle[ name ] = function( elem, name, isXML ) { var ret, handle; if ( !isXML ) { + // Avoid an infinite loop by temporarily removing this function from the getter handle = attrHandle[ name ]; attrHandle[ name ] = ret; @@ -135,6 +137,6 @@ jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) } return ret; }; -}); +} ); -}); +} ); diff --git a/src/attributes/classes.js b/src/attributes/classes.js index d0d1d989f..0ba7b86af 100644 --- a/src/attributes/classes.js +++ b/src/attributes/classes.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../var/rnotwhite", "../data/var/dataPriv", @@ -11,7 +11,7 @@ function getClass( elem ) { return elem.getAttribute && elem.getAttribute( "class" ) || ""; } -jQuery.fn.extend({ +jQuery.fn.extend( { addClass: function( value ) { var classes, elem, cur, curValue, clazz, j, finalValue, proceed = typeof value === "string" && value, @@ -19,12 +19,13 @@ jQuery.fn.extend({ len = this.length; if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { + return this.each( function( j ) { jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - }); + } ); } if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) classes = ( value || "" ).match( rnotwhite ) || []; @@ -36,13 +37,13 @@ jQuery.fn.extend({ if ( cur ) { j = 0; - while ( (clazz = classes[j++]) ) { + while ( ( clazz = classes[ j++ ] ) ) { if ( cur.indexOf( " " + clazz + " " ) < 0 ) { cur += clazz + " "; } } - // only assign if different to avoid unneeded rendering. + // Only assign if different to avoid unneeded rendering. finalValue = jQuery.trim( cur ); if ( curValue !== finalValue ) { elem.setAttribute( "class", finalValue ); @@ -61,9 +62,9 @@ jQuery.fn.extend({ len = this.length; if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { + return this.each( function( j ) { jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - }); + } ); } if ( proceed ) { classes = ( value || "" ).match( rnotwhite ) || []; @@ -78,7 +79,8 @@ jQuery.fn.extend({ if ( cur ) { j = 0; - while ( (clazz = classes[j++]) ) { + while ( ( clazz = classes[ j++ ] ) ) { + // Remove *all* instances while ( cur.indexOf( " " + clazz + " " ) > -1 ) { cur = cur.replace( " " + clazz + " ", " " ); @@ -105,15 +107,15 @@ jQuery.fn.extend({ } if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { + return this.each( function( i ) { jQuery( this ).toggleClass( value.call( this, i, getClass( this ), stateVal ), stateVal ); - }); + } ); } - return this.each(function() { + return this.each( function() { var className, i, self, classNames; if ( type === "string" ) { @@ -138,7 +140,7 @@ jQuery.fn.extend({ className = getClass( this ); if ( className ) { - // store className if set + // Store className if set dataPriv.set( this, "__className__", className ); } @@ -154,7 +156,7 @@ jQuery.fn.extend({ ); } } - }); + } ); }, hasClass: function( selector ) { @@ -162,8 +164,8 @@ jQuery.fn.extend({ i = 0, l = this.length; for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && - ( " " + getClass( this[i] ) + " " ).replace( rclass, " " ) + if ( this[ i ].nodeType === 1 && + ( " " + getClass( this[ i ] ) + " " ).replace( rclass, " " ) .indexOf( className ) > -1 ) { return true; @@ -172,6 +174,6 @@ jQuery.fn.extend({ return false; } -}); +} ); -}); +} ); diff --git a/src/attributes/prop.js b/src/attributes/prop.js index 4c7b51e8c..06528b0a5 100644 --- a/src/attributes/prop.js +++ b/src/attributes/prop.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../core/access", "./support", @@ -7,19 +7,19 @@ define([ var rfocusable = /^(?:input|select|textarea|button)$/i; -jQuery.fn.extend({ +jQuery.fn.extend( { prop: function( name, value ) { return access( this, jQuery.prop, name, value, arguments.length > 1 ); }, removeProp: function( name ) { - return this.each(function() { + return this.each( function() { delete this[ jQuery.propFix[ name ] || name ]; - }); + } ); } -}); +} ); -jQuery.extend({ +jQuery.extend( { prop: function( elem, name, value ) { var ret, hooks, nType = elem.nodeType; @@ -67,7 +67,7 @@ jQuery.extend({ "for": "htmlFor", "class": "className" } -}); +} ); if ( !support.optSelected ) { jQuery.propHooks.selected = { @@ -81,7 +81,7 @@ if ( !support.optSelected ) { }; } -jQuery.each([ +jQuery.each( [ "tabIndex", "readOnly", "maxLength", @@ -94,6 +94,6 @@ jQuery.each([ "contentEditable" ], function() { jQuery.propFix[ this.toLowerCase() ] = this; -}); +} ); -}); +} ); diff --git a/src/attributes/support.js b/src/attributes/support.js index 68c96492c..13bcd4572 100644 --- a/src/attributes/support.js +++ b/src/attributes/support.js @@ -1,9 +1,9 @@ -define([ +define( [ "../var/document", "../var/support" ], function( document, support ) { -(function() { +( function() { var input = document.createElement( "input" ), select = document.createElement( "select" ), opt = select.appendChild( document.createElement( "option" ) ); @@ -29,8 +29,8 @@ define([ input.value = "t"; input.type = "radio"; support.radioValue = input.value === "t"; -})(); +} )(); return support; -}); +} ); diff --git a/src/attributes/val.js b/src/attributes/val.js index 1bb9072e6..9999d985b 100644 --- a/src/attributes/val.js +++ b/src/attributes/val.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "./support", "../core/init" @@ -6,25 +6,30 @@ define([ var rreturn = /\r/g; -jQuery.fn.extend({ +jQuery.fn.extend( { val: function( value ) { var hooks, ret, isFunction, - elem = this[0]; + elem = this[ 0 ]; if ( !arguments.length ) { if ( elem ) { hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { return ret; } ret = elem.value; return typeof ret === "string" ? + // Handle most common string cases - ret.replace(rreturn, "") : + ret.replace( rreturn, "" ) : + // Handle cases where value is null/undef or number ret == null ? "" : ret; } @@ -34,7 +39,7 @@ jQuery.fn.extend({ isFunction = jQuery.isFunction( value ); - return this.each(function( i ) { + return this.each( function( i ) { var val; if ( this.nodeType !== 1 ) { @@ -57,23 +62,24 @@ jQuery.fn.extend({ } else if ( jQuery.isArray( val ) ) { val = jQuery.map( val, function( value ) { return value == null ? "" : value + ""; - }); + } ); } hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } - }); + } ); } -}); +} ); -jQuery.extend({ +jQuery.extend( { valHooks: { option: { get: function( elem ) { + // Support: IE<11 // option.value not trimmed (#14858) return jQuery.trim( elem.value ); @@ -97,6 +103,7 @@ jQuery.extend({ // IE8-9 doesn't update selected after form reset (#2551) if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && @@ -127,8 +134,9 @@ jQuery.extend({ while ( i-- ) { option = options[ i ]; - if ( (option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1) ) { + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { optionSet = true; } } @@ -141,22 +149,22 @@ jQuery.extend({ } } } -}); +} ); // Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { +jQuery.each( [ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = { set: function( elem, value ) { if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) > -1 ); + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); } } }; if ( !support.checkOn ) { jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute("value") === null ? "on" : elem.value; + return elem.getAttribute( "value" ) === null ? "on" : elem.value; }; } -}); +} ); -}); +} ); diff --git a/src/callbacks.js b/src/callbacks.js index bec37ef54..b032c8f1c 100644 --- a/src/callbacks.js +++ b/src/callbacks.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/rnotwhite" ], function( jQuery, rnotwhite ) { @@ -8,7 +8,7 @@ function createOptions( options ) { var object = {}; jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; - }); + } ); return object; } @@ -44,18 +44,25 @@ jQuery.Callbacks = function( options ) { var // Flag to know if list is currently firing firing, + // Last fire value for non-forgettable lists memory, + // Flag to know if list was already fired fired, + // Flag to prevent firing locked, + // Actual callback list list = [], + // Queue of execution data for repeatable lists queue = [], + // Index of currently firing callback (modified by add/remove as needed) firingIndex = -1, + // Fire callbacks fire = function() { @@ -114,18 +121,19 @@ jQuery.Callbacks = function( options ) { queue.push( memory ); } - (function add( args ) { + ( function add( args ) { jQuery.each( args, function( _, arg ) { if ( jQuery.isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + // Inspect recursively add( arg ); } - }); - })( arguments ); + } ); + } )( arguments ); if ( memory && !firing ) { fire(); @@ -146,7 +154,7 @@ jQuery.Callbacks = function( options ) { firingIndex--; } } - }); + } ); return this; }, @@ -221,4 +229,4 @@ jQuery.Callbacks = function( options ) { }; return jQuery; -}); +} ); diff --git a/src/core.js b/src/core.js index e8024aaf1..3fec8f1cb 100644 --- a/src/core.js +++ b/src/core.js @@ -1,4 +1,4 @@ -define([ +define( [ "./var/arr", "./var/document", "./var/slice", @@ -16,6 +16,7 @@ var // Define a local copy of jQuery jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); @@ -35,6 +36,7 @@ var }; jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used jquery: version, @@ -79,9 +81,9 @@ jQuery.fn = jQuery.prototype = { }, map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { return callback.call( elem, i, elem ); - })); + } ) ); }, slice: function() { @@ -99,11 +101,11 @@ jQuery.fn = jQuery.prototype = { eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); }, end: function() { - return this.prevObject || this.constructor(null); + return this.prevObject || this.constructor( null ); }, // For internal use only. @@ -115,7 +117,7 @@ jQuery.fn = jQuery.prototype = { jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, + target = arguments[ 0 ] || {}, i = 1, length = arguments.length, deep = false; @@ -130,7 +132,7 @@ jQuery.extend = jQuery.fn.extend = function() { } // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { target = {}; } @@ -141,8 +143,10 @@ jQuery.extend = jQuery.fn.extend = function() { } for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { + if ( ( options = arguments[ i ] ) != null ) { + // Extend the base object for ( name in options ) { src = target[ name ]; @@ -154,15 +158,15 @@ jQuery.extend = jQuery.fn.extend = function() { } // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || - (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { if ( copyIsArray ) { copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; + clone = src && jQuery.isArray( src ) ? src : []; } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; + clone = src && jQuery.isPlainObject( src ) ? src : {}; } // Never move original objects, clone them @@ -180,7 +184,8 @@ jQuery.extend = jQuery.fn.extend = function() { return target; }; -jQuery.extend({ +jQuery.extend( { + // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), @@ -194,7 +199,7 @@ jQuery.extend({ noop: function() {}, isFunction: function( obj ) { - return jQuery.type(obj) === "function"; + return jQuery.type( obj ) === "function"; }, isArray: Array.isArray, @@ -204,14 +209,16 @@ jQuery.extend({ }, isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN // adding 1 corrects loss of precision from parseFloat (#15100) - return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; + return !jQuery.isArray( obj ) && ( obj - parseFloat( obj ) + 1 ) >= 0; }, isPlainObject: function( obj ) { + // Not plain objects: // - Any object or value whose internal [[Class]] property is not "[object Object]" // - DOM nodes @@ -242,9 +249,10 @@ jQuery.extend({ if ( obj == null ) { return obj + ""; } + // Support: Android<4.0 (functionish RegExp) return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : + class2type[ toString.call( obj ) ] || "object" : typeof obj; }, @@ -421,7 +429,7 @@ jQuery.extend({ // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support -}); +} ); // JSHint would error on this code due to the Symbol not being defined in ES5. // Defining this global in .jshintrc would create a danger of using the global @@ -434,10 +442,10 @@ if ( typeof Symbol === "function" ) { /* jshint ignore: end */ // Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), -function(i, name) { +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error".split( " " ), +function( i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); +} ); function isArrayLike( obj ) { @@ -457,4 +465,4 @@ function isArrayLike( obj ) { } return jQuery; -}); +} ); diff --git a/src/core/access.js b/src/core/access.js index a006ed919..19f79efa4 100644 --- a/src/core/access.js +++ b/src/core/access.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core" ], function( jQuery ) { @@ -13,7 +13,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { - access( elems, fn, i, key[i], true, emptyGet, raw ); + access( elems, fn, i, key[ i ], true, emptyGet, raw ); } // Sets one value @@ -25,6 +25,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { } if ( bulk ) { + // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); @@ -41,7 +42,11 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { if ( fn ) { for ( ; i < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); } } } @@ -52,9 +57,9 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { // Gets bulk ? fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; + len ? fn( elems[ 0 ], key ) : emptyGet; }; return access; -}); +} ); diff --git a/src/core/init.js b/src/core/init.js index 861cb8351..a00d58791 100644 --- a/src/core/init.js +++ b/src/core/init.js @@ -1,5 +1,5 @@ // Initialize a jQuery object -define([ +define( [ "../core", "../var/document", "./var/rsingleTag", @@ -23,13 +23,13 @@ var rootjQuery, return this; } - // init accepts an alternate rootjQuery + // Method init() accepts an alternate rootjQuery // so migrate can support jQuery.sub (gh-2101) root = root || rootjQuery; // Handle HTML strings if ( typeof selector === "string" ) { - if ( selector[0] === "<" && + if ( selector[ 0 ] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { @@ -41,23 +41,24 @@ var rootjQuery, } // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { + if ( match && ( match[ 1 ] || !context ) ) { // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; // Option to run scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( - match[1], + match[ 1 ], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { + // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); @@ -73,11 +74,12 @@ var rootjQuery, // HANDLE: $(#id) } else { - elem = document.getElementById( match[2] ); + elem = document.getElementById( match[ 2 ] ); if ( elem ) { + // Inject the element directly into the jQuery object - this[0] = elem; + this[ 0 ] = elem; this.length = 1; } return this; @@ -95,7 +97,7 @@ var rootjQuery, // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { - this[0] = selector; + this[ 0 ] = selector; this.length = 1; return this; @@ -104,6 +106,7 @@ var rootjQuery, } else if ( jQuery.isFunction( selector ) ) { return root.ready !== undefined ? root.ready( selector ) : + // Execute immediately if ready is not present selector( jQuery ); } @@ -119,4 +122,4 @@ rootjQuery = jQuery( document ); return init; -}); +} ); diff --git a/src/core/parseHTML.js b/src/core/parseHTML.js index e7d7c63c8..30405363c 100644 --- a/src/core/parseHTML.js +++ b/src/core/parseHTML.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../var/document", "./var/rsingleTag", @@ -8,7 +8,7 @@ define([ "./support" ], function( jQuery, document, rsingleTag, buildFragment, support ) { -// data: string of html +// Argument "data" should be string of html // context (optional): If specified, the fragment will be created in this context, // defaults to document // keepScripts (optional): If true, will include scripts passed in the html string @@ -20,8 +20,9 @@ jQuery.parseHTML = function( data, context, keepScripts ) { keepScripts = context; context = false; } - // document.implementation stops scripts or inline event handlers from - // being executed immediately + + // Stop scripts or inline event handlers from being executed immediately + // by using document.implementation context = context || ( support.createHTMLDocument ? document.implementation.createHTMLDocument( "" ) : document ); @@ -31,7 +32,7 @@ jQuery.parseHTML = function( data, context, keepScripts ) { // Single tag if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; + return [ context.createElement( parsed[ 1 ] ) ]; } parsed = buildFragment( [ data ], context, scripts ); @@ -45,4 +46,4 @@ jQuery.parseHTML = function( data, context, keepScripts ) { return jQuery.parseHTML; -}); +} ); diff --git a/src/core/ready.js b/src/core/ready.js index 085d19a93..7a7ef5869 100644 --- a/src/core/ready.js +++ b/src/core/ready.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../var/document", "../deferred" @@ -8,13 +8,15 @@ define([ var readyList; jQuery.fn.ready = function( fn ) { + // Add the callback jQuery.ready.promise().done( fn ); return this; }; -jQuery.extend({ +jQuery.extend( { + // Is the DOM ready to be used? Set to true once it occurs. isReady: false, @@ -50,7 +52,7 @@ jQuery.extend({ // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); } -}); +} ); /** * The ready event handler and self cleanup method @@ -72,6 +74,7 @@ jQuery.ready.promise = function( obj ) { // but it caused issues like the one // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready window.setTimeout( jQuery.ready ); @@ -90,4 +93,4 @@ jQuery.ready.promise = function( obj ) { // Kick off the DOM ready check even if the user does not jQuery.ready.promise(); -}); +} ); diff --git a/src/core/support.js b/src/core/support.js index 68d20e353..0609a700b 100644 --- a/src/core/support.js +++ b/src/core/support.js @@ -1,4 +1,4 @@ -define([ +define( [ "../var/document", "../var/support" ], function( document, support ) { @@ -8,11 +8,11 @@ define([ // collapse sibling forms: the second one becomes a child of the first one. // Because of that, this security measure has to be disabled in Safari 8. // https://bugs.webkit.org/show_bug.cgi?id=137337 -support.createHTMLDocument = (function() { +support.createHTMLDocument = ( function() { var body = document.implementation.createHTMLDocument( "" ).body; body.innerHTML = "<form></form><form></form>"; return body.childNodes.length === 2; -})(); +} )(); return support; -}); +} ); diff --git a/src/core/var/rsingleTag.js b/src/core/var/rsingleTag.js index a8176dc64..1a55ee39d 100644 --- a/src/core/var/rsingleTag.js +++ b/src/core/var/rsingleTag.js @@ -1,4 +1,5 @@ -define(function() { +define( function() { + // Match a standalone tag - return (/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/); -}); + return ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); +} ); diff --git a/src/css.js b/src/css.js index 859985f9d..8a86ef55c 100644 --- a/src/css.js +++ b/src/css.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/pnum", "./core/access", @@ -23,6 +23,7 @@ define([ isHidden, getStyles, swap, curCSS, adjustCSS, addGetHookIf, support, showHide ) { var + // Swappable if display is none or starts with table // except "table", "table-cell", or "table-caption" // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display @@ -47,7 +48,7 @@ function vendorPropName( name ) { } // Check for vendor prefixed names - var capName = name[0].toUpperCase() + name.slice(1), + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), i = cssPrefixes.length; while ( i-- ) { @@ -61,6 +62,7 @@ function vendorPropName( name ) { function setPositiveNumber( elem, value, subtract ) { var matches = rnumsplit.exec( value ); return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : value; @@ -68,20 +70,24 @@ function setPositiveNumber( elem, value, subtract ) { function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation 4 : + // Otherwise initialize for horizontal or vertical properties name === "width" ? 1 : 0, val = 0; for ( ; i < 4; i += 2 ) { + // Both box models exclude margin, so add it if we want it if ( extra === "margin" ) { val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); } if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content if ( extra === "content" ) { val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); @@ -92,6 +98,7 @@ function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } else { + // At this point, extra isn't content, so add padding val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); @@ -131,6 +138,7 @@ function getWidthOrHeight( elem, name, extra ) { // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary val = curCSS( elem, name, styles ); if ( val < 0 || val == null ) { @@ -138,7 +146,7 @@ function getWidthOrHeight( elem, name, extra ) { } // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { + if ( rnumnonpx.test( val ) ) { return val; } @@ -163,7 +171,7 @@ function getWidthOrHeight( elem, name, extra ) { ) + "px"; } -jQuery.extend({ +jQuery.extend( { // Add in style property hooks for overriding the default // behavior of getting and setting a style property @@ -226,8 +234,9 @@ jQuery.extend({ type = typeof value; // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && (ret = rcssNum.exec( value )) && ret[ 1 ] ) { + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { value = adjustCSS( elem, name, ret ); + // Fixes bug #9237 type = "number"; } @@ -249,16 +258,17 @@ jQuery.extend({ } // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || - (value = hooks.set( elem, value, extra )) !== undefined ) { + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { style[ name ] = value; } } else { + // If a hook was provided get the non-computed value from there if ( hooks && "get" in hooks && - (ret = hooks.get( elem, false, extra )) !== undefined ) { + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { return ret; } @@ -301,9 +311,9 @@ jQuery.extend({ } return val; } -}); +} ); -jQuery.each([ "height", "width" ], function( i, name ) { +jQuery.each( [ "height", "width" ], function( i, name ) { jQuery.cssHooks[ name ] = { get: function( elem, computed, extra ) { if ( computed ) { @@ -311,6 +321,7 @@ jQuery.each([ "height", "width" ], function( i, name ) { // Certain elements can have dimension info if we invisibly show them // but it must have a current display style that would benefit return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + // Support: Safari 8+ // Table columns in Safari have non-zero offsetWidth & zero // getBoundingClientRect().width unless display is changed. @@ -320,7 +331,7 @@ jQuery.each([ "height", "width" ], function( i, name ) { ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? swap( elem, cssShow, function() { return getWidthOrHeight( elem, name, extra ); - }) : + } ) : getWidthOrHeight( elem, name, extra ); } }, @@ -338,7 +349,7 @@ jQuery.each([ "height", "width" ], function( i, name ) { ); } }; -}); +} ); // Support: Android 2.3 jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, @@ -351,7 +362,7 @@ jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, ); // These hooks are used by animate to expand properties -jQuery.each({ +jQuery.each( { margin: "", padding: "", border: "Width" @@ -362,7 +373,7 @@ jQuery.each({ expanded = {}, // Assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; + parts = typeof value === "string" ? value.split( " " ) : [ value ]; for ( ; i < 4; i++ ) { expanded[ prefix + cssExpand[ i ] + suffix ] = @@ -376,9 +387,9 @@ jQuery.each({ if ( !rmargin.test( prefix ) ) { jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; } -}); +} ); -jQuery.fn.extend({ +jQuery.fn.extend( { css: function( name, value ) { return access( this, function( elem, name, value ) { var styles, len, @@ -412,15 +423,15 @@ jQuery.fn.extend({ return state ? this.show() : this.hide(); } - return this.each(function() { + return this.each( function() { if ( isHidden( this ) ) { jQuery( this ).show(); } else { jQuery( this ).hide(); } - }); + } ); } -}); +} ); return jQuery; -}); +} ); diff --git a/src/css/addGetHookIf.js b/src/css/addGetHookIf.js index e12f3598d..9cd21f683 100644 --- a/src/css/addGetHookIf.js +++ b/src/css/addGetHookIf.js @@ -1,10 +1,12 @@ -define(function() { +define( function() { function addGetHookIf( conditionFn, hookFn ) { + // Define the hook, we'll check on the first run if it's really needed. return { get: function() { if ( conditionFn() ) { + // Hook not needed (or it's not possible to use it due // to missing dependency), remove it. delete this.get; @@ -12,11 +14,11 @@ function addGetHookIf( conditionFn, hookFn ) { } // Hook needed; redefine it so that the support test is not executed again. - return (this.get = hookFn).apply( this, arguments ); + return ( this.get = hookFn ).apply( this, arguments ); } }; } return addGetHookIf; -}); +} ); diff --git a/src/css/adjustCSS.js b/src/css/adjustCSS.js index 05fddd15b..48fcfec05 100644 --- a/src/css/adjustCSS.js +++ b/src/css/adjustCSS.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../var/rcssNum" ], function( jQuery, rcssNum ) { @@ -12,11 +12,13 @@ function adjustCSS( elem, prop, valueParts, tween ) { function() { return jQuery.css( elem, prop, "" ); }, initial = currentValue(), unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + // Starting value computation is required for potential unit mismatches initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && rcssNum.exec( jQuery.css( elem, prop ) ); if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + // Trust units reported by jQuery.css unit = unit || initialInUnit[ 3 ]; @@ -27,6 +29,7 @@ function adjustCSS( elem, prop, valueParts, tween ) { initialInUnit = +initial || 1; do { + // If previous iteration zeroed out, double until we get *something*. // Use string for doubling so we don't accidentally see scale as unchanged below scale = scale || ".5"; @@ -38,12 +41,13 @@ function adjustCSS( elem, prop, valueParts, tween ) { // Update scale, tolerating zero or NaN from tween.cur() // Break the loop if scale is unchanged or perfect, or if we've just had enough. } while ( - scale !== (scale = currentValue() / initial) && scale !== 1 && --maxIterations + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations ); } if ( valueParts ) { initialInUnit = +initialInUnit || +initial || 0; + // Apply relative offset (+=/-=) if specified adjusted = valueParts[ 1 ] ? initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : @@ -58,4 +62,4 @@ function adjustCSS( elem, prop, valueParts, tween ) { } return adjustCSS; -}); +} ); diff --git a/src/css/curCSS.js b/src/css/curCSS.js index f60ab94de..be643ab54 100644 --- a/src/css/curCSS.js +++ b/src/css/curCSS.js @@ -1,10 +1,10 @@ -define([ +define( [ "../core", "./var/rnumnonpx", "./var/rmargin", "./var/getStyles", "./support", - "../selector" // contains + "../selector" // Get jQuery.contains ], function( jQuery, rnumnonpx, rmargin, getStyles, support ) { function curCSS( elem, name, computed ) { @@ -46,6 +46,7 @@ function curCSS( elem, name, computed ) { } return ret !== undefined ? + // Support: IE9-11+ // IE returns zIndex value as an integer. ret + "" : @@ -53,4 +54,4 @@ function curCSS( elem, name, computed ) { } return curCSS; -}); +} ); diff --git a/src/css/hiddenVisibleSelectors.js b/src/css/hiddenVisibleSelectors.js index b4d7482e8..9a8a28cf8 100644 --- a/src/css/hiddenVisibleSelectors.js +++ b/src/css/hiddenVisibleSelectors.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../selector" ], function( jQuery ) { @@ -10,4 +10,4 @@ jQuery.expr.filters.visible = function( elem ) { return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); }; -}); +} ); diff --git a/src/css/showHide.js b/src/css/showHide.js index d0cca589b..35e15bde8 100644 --- a/src/css/showHide.js +++ b/src/css/showHide.js @@ -1,4 +1,4 @@ -define([ +define( [ "../data/var/dataPriv" ], function( dataPriv ) { @@ -18,6 +18,7 @@ function showHide( elements, show ) { display = elem.style.display; if ( show ) { if ( display === "none" ) { + // Restore a pre-hide() value if we have one values[ index ] = dataPriv.get( elem, "display" ) || ""; } @@ -44,4 +45,4 @@ function showHide( elements, show ) { return showHide; -}); +} ); diff --git a/src/css/support.js b/src/css/support.js index 522406943..0758fa8a4 100644 --- a/src/css/support.js +++ b/src/css/support.js @@ -1,11 +1,11 @@ -define([ +define( [ "../core", "../var/document", "../var/documentElement", "../var/support" ], function( jQuery, document, documentElement, support ) { -(function() { +( function() { var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, container = document.createElement( "div" ), div = document.createElement( "div" ); @@ -29,6 +29,7 @@ define([ // so they're executed at the same time to save the second computation. function computeStyleTests() { div.style.cssText = + // Support: Android 2.3 // Vendor-prefix box-sizing "-webkit-box-sizing:border-box;box-sizing:border-box;" + @@ -49,6 +50,7 @@ define([ jQuery.extend( support, { pixelPosition: function() { + // This test is executed only once but we still do memoizing // since we can use the boxSizingReliable pre-computing. // No need to check if the test was already performed, though. @@ -62,6 +64,7 @@ define([ return boxSizingReliableVal; }, pixelMarginRight: function() { + // Support: Android 4.0-4.3 // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal // since that compresses better and they're computed together anyway. @@ -82,6 +85,7 @@ define([ // Reset CSS: box-sizing; display; margin; border; padding marginDiv.style.cssText = div.style.cssText = + // Support: Android 2.3 // Vendor-prefix box-sizing "-webkit-box-sizing:content-box;box-sizing:content-box;" + @@ -97,9 +101,9 @@ define([ return ret; } - }); -})(); + } ); +} )(); return support; -}); +} ); diff --git a/src/css/var/cssExpand.js b/src/css/var/cssExpand.js index 91e90a88a..9f8194dc8 100644 --- a/src/css/var/cssExpand.js +++ b/src/css/var/cssExpand.js @@ -1,3 +1,3 @@ -define(function() { +define( function() { return [ "Top", "Right", "Bottom", "Left" ]; -}); +} ); diff --git a/src/css/var/getStyles.js b/src/css/var/getStyles.js index 31dfc298e..1fa915d58 100644 --- a/src/css/var/getStyles.js +++ b/src/css/var/getStyles.js @@ -1,4 +1,4 @@ -define(function() { +define( function() { return function( elem ) { // Support: IE<=11+, Firefox<=30+ (#15098, #14150) @@ -12,4 +12,4 @@ define(function() { return view.getComputedStyle( elem ); }; -}); +} ); diff --git a/src/css/var/isHidden.js b/src/css/var/isHidden.js index c29f527ae..7997efff1 100644 --- a/src/css/var/isHidden.js +++ b/src/css/var/isHidden.js @@ -1,14 +1,16 @@ -define([ +define( [ "../../core", "../../selector" + // css is assumed ], function( jQuery ) { return function( elem, el ) { + // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); }; -}); +} ); diff --git a/src/css/var/rmargin.js b/src/css/var/rmargin.js index da0438db6..9be221243 100644 --- a/src/css/var/rmargin.js +++ b/src/css/var/rmargin.js @@ -1,3 +1,3 @@ -define(function() { - return (/^margin/); -}); +define( function() { + return ( /^margin/ ); +} ); diff --git a/src/css/var/rnumnonpx.js b/src/css/var/rnumnonpx.js index c93be2850..ed13f0b98 100644 --- a/src/css/var/rnumnonpx.js +++ b/src/css/var/rnumnonpx.js @@ -1,5 +1,5 @@ -define([ +define( [ "../../var/pnum" ], function( pnum ) { return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); -}); +} ); diff --git a/src/css/var/swap.js b/src/css/var/swap.js index dbf639729..b6d3b679f 100644 --- a/src/css/var/swap.js +++ b/src/css/var/swap.js @@ -1,4 +1,4 @@ -define(function() { +define( function() { // A method for quickly swapping in/out CSS properties to get correct calculations. return function( elem, options, callback, args ) { @@ -21,4 +21,4 @@ return function( elem, options, callback, args ) { return ret; }; -}); +} ); diff --git a/src/data.js b/src/data.js index 80117d12e..d2855dde1 100644 --- a/src/data.js +++ b/src/data.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./core/access", "./data/var/dataPriv", @@ -32,6 +32,7 @@ function dataAttr( elem, key, data ) { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : + // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : @@ -47,7 +48,7 @@ function dataAttr( elem, key, data ) { return data; } -jQuery.extend({ +jQuery.extend( { hasData: function( elem ) { return dataUser.hasData( elem ) || dataPriv.hasData( elem ); }, @@ -69,9 +70,9 @@ jQuery.extend({ _removeData: function( elem, name ) { dataPriv.remove( elem, name ); } -}); +} ); -jQuery.fn.extend({ +jQuery.fn.extend( { data: function( key, value ) { var i, name, data, elem = this[ 0 ], @@ -91,7 +92,7 @@ jQuery.fn.extend({ if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); + name = jQuery.camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } @@ -105,9 +106,9 @@ jQuery.fn.extend({ // Sets multiple values if ( typeof key === "object" ) { - return this.each(function() { + return this.each( function() { dataUser.set( this, key ); - }); + } ); } return access( this, function( value ) { @@ -139,20 +140,20 @@ jQuery.fn.extend({ } // Set the data... - this.each(function() { + this.each( function() { // We always store the camelCased key dataUser.set( this, key, value ); - }); + } ); }, null, value, arguments.length > 1, null, true ); }, removeData: function( key ) { - return this.each(function() { + return this.each( function() { dataUser.remove( this, key ); - }); + } ); } -}); +} ); return jQuery; -}); +} ); diff --git a/src/data/Data.js b/src/data/Data.js index 5268f3f2c..476b3e1e2 100644 --- a/src/data/Data.js +++ b/src/data/Data.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../var/rnotwhite", "./accepts" @@ -29,7 +29,7 @@ Data.prototype = { value: value, writable: true, configurable: true - }); + } ); } return owner[ this.expando ]; }, @@ -100,7 +100,7 @@ Data.prototype = { return this.get( owner, key ); } - // [*]When the key is not a string, or both a key and value + // When the key is not a string, or both a key and value // are specified, set or extend (existing objects) with either: // // 1. An object of properties @@ -157,4 +157,4 @@ Data.prototype = { }; return Data; -}); +} ); diff --git a/src/data/accepts.js b/src/data/accepts.js index 291c7b475..24e2f0ef0 100644 --- a/src/data/accepts.js +++ b/src/data/accepts.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core" ], function( jQuery ) { @@ -6,6 +6,7 @@ define([ * Determines whether an object can have data */ jQuery.acceptData = function( owner ) { + // Accepts only: // - Node // - Node.ELEMENT_NODE @@ -17,4 +18,4 @@ jQuery.acceptData = function( owner ) { }; return jQuery.acceptData; -}); +} ); diff --git a/src/data/var/dataPriv.js b/src/data/var/dataPriv.js index 24399e468..9a1343ce1 100644 --- a/src/data/var/dataPriv.js +++ b/src/data/var/dataPriv.js @@ -1,5 +1,5 @@ -define([ +define( [ "../Data" ], function( Data ) { return new Data(); -}); +} ); diff --git a/src/data/var/dataUser.js b/src/data/var/dataUser.js index 24399e468..9a1343ce1 100644 --- a/src/data/var/dataUser.js +++ b/src/data/var/dataUser.js @@ -1,5 +1,5 @@ -define([ +define( [ "../Data" ], function( Data ) { return new Data(); -}); +} ); diff --git a/src/deferred.js b/src/deferred.js index 216baabb0..e1af425d4 100644 --- a/src/deferred.js +++ b/src/deferred.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/slice", "./callbacks" @@ -11,18 +11,19 @@ function Thrower( ex ) { throw ex; } -jQuery.extend({ +jQuery.extend( { Deferred: function( func ) { var tuples = [ + // action, add listener, callbacks, // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks("memory"), - jQuery.Callbacks("memory"), 2 ], - [ "resolve", "done", jQuery.Callbacks("once memory"), - jQuery.Callbacks("once memory"), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), - jQuery.Callbacks("once memory"), 1, "rejected" ] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] ], state = "pending", promise = { @@ -36,19 +37,21 @@ jQuery.extend({ "catch": function( fn ) { return promise.then( null, fn ); }, + // Keep pipe for back-compat pipe: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; - return jQuery.Deferred(function( newDefer ) { + return jQuery.Deferred( function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { + // Map tuples (progress, done, fail) to arguments (done, fail, progress) var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; // deferred.progress(function() { bind to newDefer or newDefer.notify }) // deferred.done(function() { bind to newDefer or newDefer.resolve }) // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[1] ](function() { + deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() @@ -61,10 +64,10 @@ jQuery.extend({ fn ? [ returned ] : arguments ); } - }); - }); + } ); + } ); fns = null; - }).promise(); + } ).promise(); }, then: function( onFulfilled, onRejected, onProgress ) { var maxDepth = 0; @@ -105,6 +108,7 @@ jQuery.extend({ // Handle a returned thenable if ( jQuery.isFunction( then ) ) { + // Special processors (notify) just wait for resolution if ( special ) { then.call( @@ -130,6 +134,7 @@ jQuery.extend({ // Handle all other returned values } else { + // Only substitue handlers pass on context // and multiple values (non-spec behavior) if ( handler !== Identity ) { @@ -156,6 +161,7 @@ jQuery.extend({ // https://promisesaplus.com/#point-61 // Ignore post-resolution exceptions if ( depth + 1 >= maxDepth ) { + // Only substitue handlers pass on context // and multiple values (non-spec behavior) if ( handler !== Thrower ) { @@ -181,7 +187,8 @@ jQuery.extend({ }; } - return jQuery.Deferred(function( newDefer ) { + return jQuery.Deferred( function( newDefer ) { + // progress_handlers.add( ... ) tuples[ 0 ][ 3 ].add( resolve( @@ -215,8 +222,9 @@ jQuery.extend({ Thrower ) ); - }).promise(); + } ).promise(); }, + // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { @@ -233,12 +241,13 @@ jQuery.extend({ // promise.progress = list.add // promise.done = list.add // promise.fail = list.add - promise[ tuple[1] ] = list.add; + promise[ tuple[ 1 ] ] = list.add; // Handle state if ( stateString ) { list.add( function() { + // state = "resolved" (i.e., fulfilled) // state = "rejected" state = stateString; @@ -261,16 +270,16 @@ jQuery.extend({ // deferred.notify = function() { deferred.notifyWith(...) } // deferred.resolve = function() { deferred.resolveWith(...) } // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; // deferred.notifyWith = list.fireWith // deferred.resolveWith = list.fireWith // deferred.rejectWith = list.fireWith - deferred[ tuple[0] + "With" ] = list.fireWith; - }); + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); // Make the deferred a promise promise.promise( deferred ); @@ -320,14 +329,14 @@ jQuery.extend({ resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && - jQuery.isFunction( (method = resolveValues[ i ].promise) ) ) { + jQuery.isFunction( ( method = resolveValues[ i ].promise ) ) ) { method.call( resolveValues[ i ] ) .progress( updateFunc( i, progressContexts, progressValues ) ) .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( master.reject ); } else if ( resolveValues[ i ] && - jQuery.isFunction( (method = resolveValues[ i ].then) ) ) { + jQuery.isFunction( ( method = resolveValues[ i ].then ) ) ) { method.call( resolveValues[ i ], @@ -348,7 +357,7 @@ jQuery.extend({ return master.promise(); } -}); +} ); return jQuery; -}); +} ); diff --git a/src/deprecated.js b/src/deprecated.js index 994b22848..dfb13e4ae 100644 --- a/src/deprecated.js +++ b/src/deprecated.js @@ -1,2 +1,2 @@ -define(function() { -}); +define( function() { +} ); diff --git a/src/dimensions.js b/src/dimensions.js index fa389bccf..30b55fbc0 100644 --- a/src/dimensions.js +++ b/src/dimensions.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./core/access", "./css" @@ -18,6 +18,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { var doc; if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there // isn't a whole lot we can do. See pull request at this URL for discussion: // https://github.com/jquery/jquery/pull/764 @@ -38,6 +39,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { } return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat jQuery.css( elem, type, extra ) : @@ -45,8 +47,8 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { jQuery.style( elem, type, value, extra ); }, type, chainable ? margin : undefined, chainable, null ); }; - }); -}); + } ); +} ); return jQuery; -}); +} ); diff --git a/src/effects.js b/src/effects.js index 40da88705..90ac4b1e6 100644 --- a/src/effects.js +++ b/src/effects.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/document", "./var/rcssNum", @@ -34,9 +34,9 @@ function raf() { // Animations created synchronously will run synchronously function createFxNow() { - window.setTimeout(function() { + window.setTimeout( function() { fxNow = undefined; - }); + } ); return ( fxNow = jQuery.now() ); } @@ -67,7 +67,7 @@ function createTween( value, prop, animation ) { index = 0, length = collection.length; for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { // We're done with this property return tween; @@ -99,15 +99,16 @@ function defaultPrefilter( elem, props, opts ) { } hooks.unqueued++; - anim.always(function() { + anim.always( function() { + // Ensure the complete handler is called before this completes - anim.always(function() { + anim.always( function() { hooks.unqueued--; if ( !jQuery.queue( elem, "fx" ).length ) { hooks.empty.fire(); } - }); - }); + } ); + } ); } // Detect show/hide animations @@ -140,6 +141,7 @@ function defaultPrefilter( elem, props, opts ) { // Restrict "overflow" and "display" styles during box animations if ( isBox && elem.nodeType === 1 ) { + // Support: IE 9 - 11 // Record all 3 overflow attributes because IE does not infer the shorthand // from identically-valued overflowX and overflowY @@ -163,9 +165,9 @@ function defaultPrefilter( elem, props, opts ) { // Restore the original display value at the end of pure show/hide animations if ( !propTween ) { - anim.done(function() { + anim.done( function() { style.display = restoreDisplay; - }); + } ); if ( restoreDisplay == null ) { display = style.display; restoreDisplay = display === "none" ? "" : display; @@ -178,11 +180,11 @@ function defaultPrefilter( elem, props, opts ) { if ( opts.overflow ) { style.overflow = "hidden"; - anim.always(function() { + anim.always( function() { style.overflow = opts.overflow[ 0 ]; style.overflowX = opts.overflow[ 1 ]; style.overflowY = opts.overflow[ 2 ]; - }); + } ); } // Implement show/hide animations @@ -210,7 +212,8 @@ function defaultPrefilter( elem, props, opts ) { } /* jshint -W083 */ - anim.done(function() { + anim.done( function() { + // The final step of a "hide" animation is actually hiding the element if ( !hidden ) { showHide( [ elem ] ); @@ -219,7 +222,7 @@ function defaultPrefilter( elem, props, opts ) { for ( prop in orig ) { jQuery.style( elem, prop, orig[ prop ] ); } - }); + } ); } // Per-property setup @@ -277,15 +280,17 @@ function Animation( elem, properties, options ) { index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always( function() { + // Don't match elem in the :animated selector delete tick.elem; - }), + } ), tick = function() { if ( stopped ) { return false; } var currentTime = fxNow || createFxNow(), remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // Support: Android 2.3 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) temp = remaining / animation.duration || 0, @@ -297,7 +302,7 @@ function Animation( elem, properties, options ) { animation.tweens[ index ].run( percent ); } - deferred.notifyWith( elem, [ animation, percent, remaining ]); + deferred.notifyWith( elem, [ animation, percent, remaining ] ); if ( percent < 1 && length ) { return remaining; @@ -306,7 +311,7 @@ function Animation( elem, properties, options ) { return false; } }, - animation = deferred.promise({ + animation = deferred.promise( { elem: elem, props: jQuery.extend( {}, properties ), opts: jQuery.extend( true, { @@ -326,6 +331,7 @@ function Animation( elem, properties, options ) { }, stop: function( gotoEnd ) { var index = 0, + // If we are going to the end, we want to run all the tweens // otherwise we skip this part length = gotoEnd ? animation.tweens.length : 0; @@ -345,7 +351,7 @@ function Animation( elem, properties, options ) { } return this; } - }), + } ), props = animation.props; propFilter( props, animation.opts.specialEasing ); @@ -372,7 +378,7 @@ function Animation( elem, properties, options ) { elem: elem, anim: animation, queue: animation.opts.queue - }) + } ) ); // attach callbacks from options @@ -420,7 +426,7 @@ jQuery.Animation = jQuery.extend( Animation, { Animation.prefilters.push( callback ); } } -}); +} ); jQuery.speed = function( speed, easing, fn ) { var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { @@ -461,19 +467,20 @@ jQuery.speed = function( speed, easing, fn ) { return opt; }; -jQuery.fn.extend({ +jQuery.fn.extend( { fadeTo: function( speed, to, easing, callback ) { // Show any hidden elements after setting opacity to 0 return this.filter( isHidden ).css( "opacity", 0 ).show() // Animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); + .end().animate( { opacity: to }, speed, easing, callback ); }, animate: function( prop, speed, easing, callback ) { var empty = jQuery.isEmptyObject( prop ), optall = jQuery.speed( speed, easing, callback ), doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost var anim = Animation( this, jQuery.extend( {}, prop ), optall ); @@ -504,7 +511,7 @@ jQuery.fn.extend({ this.queue( type || "fx", [] ); } - return this.each(function() { + return this.each( function() { var dequeue = true, index = type != null && type + "queueHooks", timers = jQuery.timers, @@ -524,7 +531,7 @@ jQuery.fn.extend({ for ( index = timers.length; index--; ) { if ( timers[ index ].elem === this && - (type == null || timers[ index ].queue === type) ) { + ( type == null || timers[ index ].queue === type ) ) { timers[ index ].anim.stop( gotoEnd ); dequeue = false; @@ -538,13 +545,13 @@ jQuery.fn.extend({ if ( dequeue || !gotoEnd ) { jQuery.dequeue( this, type ); } - }); + } ); }, finish: function( type ) { if ( type !== false ) { type = type || "fx"; } - return this.each(function() { + return this.each( function() { var index, data = dataPriv.get( this ), queue = data[ type + "queue" ], @@ -579,24 +586,24 @@ jQuery.fn.extend({ // Turn off finishing flag delete data.finish; - }); + } ); } -}); +} ); -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { var cssFn = jQuery.fn[ name ]; jQuery.fn[ name ] = function( speed, easing, callback ) { return speed == null || typeof speed === "boolean" ? cssFn.apply( this, arguments ) : this.animate( genFx( name, true ), speed, easing, callback ); }; -}); +} ); // Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } @@ -604,7 +611,7 @@ jQuery.each({ jQuery.fn[ name ] = function( speed, easing, callback ) { return this.animate( props, speed, easing, callback ); }; -}); +} ); jQuery.timers = []; jQuery.fx.tick = function() { @@ -616,6 +623,7 @@ jQuery.fx.tick = function() { for ( ; i < timers.length; i++ ) { timer = timers[ i ]; + // Checks the timer has not already been removed if ( !timer() && timers[ i ] === timer ) { timers.splice( i--, 1 ); @@ -659,9 +667,10 @@ jQuery.fx.stop = function() { jQuery.fx.speeds = { slow: 600, fast: 200, + // Default speed _default: 400 }; return jQuery; -}); +} ); diff --git a/src/effects/Tween.js b/src/effects/Tween.js index d7cd8e606..d26ddd918 100644 --- a/src/effects/Tween.js +++ b/src/effects/Tween.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../css" ], function( jQuery ) { @@ -71,10 +71,12 @@ Tween.propHooks = { // Simple values such as "10px" are parsed to Float; // complex values such as "rotate(1rad)" are returned as-is. result = jQuery.css( tween.elem, tween.prop, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. return !result || result === "auto" ? 0 : result; }, set: function( tween ) { + // Use step hook for back compat. // Use cssHook if its there. // Use .style if available and use plain properties where available. @@ -116,4 +118,4 @@ jQuery.fx = Tween.prototype.init; // Back Compat <1.8 extension point jQuery.fx.step = {}; -}); +} ); diff --git a/src/effects/animatedSelector.js b/src/effects/animatedSelector.js index bc5a3d6c1..d84c9c703 100644 --- a/src/effects/animatedSelector.js +++ b/src/effects/animatedSelector.js @@ -1,13 +1,13 @@ -define([ +define( [ "../core", "../selector", "../effects" ], function( jQuery ) { jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { + return jQuery.grep( jQuery.timers, function( fn ) { return elem === fn.elem; - }).length; + } ).length; }; -}); +} ); diff --git a/src/event.js b/src/event.js index 156bc016a..8a059ca8a 100644 --- a/src/event.js +++ b/src/event.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/document", "./var/rnotwhite", @@ -39,8 +39,10 @@ function on( elem, types, selector, data, fn, one ) { // Types can be a map of types/handlers if ( typeof types === "object" ) { + // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { + // ( types-Object, data ) data = data || selector; selector = undefined; @@ -52,15 +54,18 @@ function on( elem, types, selector, data, fn, one ) { } if ( data == null && fn == null ) { + // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { + // ( types, selector, fn ) fn = data; data = undefined; } else { + // ( types, data, fn ) fn = data; data = selector; @@ -74,16 +79,18 @@ function on( elem, types, selector, data, fn, one ) { if ( one === 1 ) { origFn = fn; fn = function( event ) { + // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; + // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return elem.each( function() { jQuery.event.add( this, types, fn, data, selector ); - }); + } ); } /* @@ -119,11 +126,12 @@ jQuery.event = { } // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { + if ( !( events = elemData.events ) ) { events = elemData.events = {}; } - if ( !(eventHandle = elemData.handle) ) { + if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? @@ -135,9 +143,9 @@ jQuery.event = { types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { @@ -154,7 +162,7 @@ jQuery.event = { special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers - handleObj = jQuery.extend({ + handleObj = jQuery.extend( { type: type, origType: origType, data: data, @@ -162,11 +170,11 @@ jQuery.event = { guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") + namespace: namespaces.join( "." ) }, handleObjIn ); // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { + if ( !( handlers = events[ type ] ) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; @@ -209,7 +217,7 @@ jQuery.event = { special, handlers, type, namespaces, origType, elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - if ( !elemData || !(events = elemData.events) ) { + if ( !elemData || !( events = elemData.events ) ) { return; } @@ -217,9 +225,9 @@ jQuery.event = { types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { @@ -232,7 +240,8 @@ jQuery.event = { special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; @@ -279,7 +288,7 @@ jQuery.event = { var i, cur, tmp, bubbleType, ontype, handle, special, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; cur = tmp = elem = elem || document; @@ -293,13 +302,14 @@ jQuery.event = { return; } - if ( type.indexOf(".") > -1 ) { + if ( type.indexOf( "." ) > -1 ) { + // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); + namespaces = type.split( "." ); type = namespaces.shift(); namespaces.sort(); } - ontype = type.indexOf(":") < 0 && "on" + type; + ontype = type.indexOf( ":" ) < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? @@ -308,9 +318,9 @@ jQuery.event = { // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); + event.namespace = namespaces.join( "." ); event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null; // Clean up the event in case it is being reused @@ -344,14 +354,14 @@ jQuery.event = { } // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { + if ( tmp === ( elem.ownerDocument || document ) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : @@ -378,7 +388,8 @@ jQuery.event = { // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. @@ -419,7 +430,7 @@ jQuery.event = { special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; + args[ 0 ] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired @@ -432,11 +443,11 @@ jQuery.event = { // Run delegates first; they may want to stop propagation beneath us i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && + while ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or 2) have namespace(s) @@ -446,11 +457,11 @@ jQuery.event = { event.handleObj = handleObj; event.data = handleObj.data; - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || handleObj.handler ).apply( matched.elem, args ); if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { + if ( ( event.result = ret ) === false ) { event.preventDefault(); event.stopPropagation(); } @@ -479,13 +490,13 @@ jQuery.event = { // // Support: Firefox // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + if ( delegateCount && cur.nodeType && ( !event.button || event.type !== "click" ) ) { for ( ; cur !== this; cur = cur.parentNode || this ) { // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; @@ -503,7 +514,7 @@ jQuery.event = { } } if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); + handlerQueue.push( { elem: cur, handlers: matches } ); } } } @@ -511,7 +522,7 @@ jQuery.event = { // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); } return handlerQueue; @@ -519,12 +530,12 @@ jQuery.event = { // Includes some event props shared by KeyEvent and MouseEvent props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + - "metaKey relatedTarget shiftKey target timeStamp view which" ).split(" "), + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), fixHooks: {}, keyHooks: { - props: "char charCode key keyCode".split(" "), + props: "char charCode key keyCode".split( " " ), filter: function( event, original ) { // Add which for key events @@ -538,7 +549,7 @@ jQuery.event = { mouseHooks: { props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + - "screenX screenY toElement" ).split(" "), + "screenX screenY toElement" ).split( " " ), filter: function( event, original ) { var eventDoc, doc, body, button = original.button; @@ -605,10 +616,12 @@ jQuery.event = { special: { load: { + // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { + // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { @@ -628,6 +641,7 @@ jQuery.event = { delegateType: "focusout" }, click: { + // For checkbox, fire native event so checked state will be right trigger: function() { if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { @@ -662,6 +676,7 @@ jQuery.event = { { type: type, isSimulated: true + // Previously, `originalEvent: {}` was set here, so stopPropagation call // would not be triggered on donor event, since in our own // jQuery.event.stopPropagation function we had a check for existence of @@ -694,8 +709,9 @@ jQuery.removeEvent = function( elem, type, handle ) { }; jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { + if ( !( this instanceof jQuery.Event ) ) { return new jQuery.Event( src, props ); } @@ -708,6 +724,7 @@ jQuery.Event = function( src, props ) { // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && + // Support: Android<4.0 src.returnValue === false ? returnTrue : @@ -777,7 +794,7 @@ jQuery.Event.prototype = { // Safari sends mouseenter too often; see: // https://code.google.com/p/chromium/issues/detail?id=470258 // for the description of the bug (it existed in older Chrome versions as well). -jQuery.each({ +jQuery.each( { mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", @@ -795,7 +812,7 @@ jQuery.each({ // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; @@ -803,7 +820,7 @@ jQuery.each({ return ret; } }; -}); +} ); // Support: Firefox // Firefox doesn't have focus(in | out) events @@ -814,7 +831,7 @@ jQuery.each({ // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 if ( !support.focusin ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler on the document while someone wants focusin/focusout var handler = function( event ) { @@ -844,10 +861,10 @@ if ( !support.focusin ) { } } }; - }); + } ); } -jQuery.fn.extend({ +jQuery.fn.extend( { on: function( types, selector, data, fn ) { return on( this, types, selector, data, fn ); @@ -858,6 +875,7 @@ jQuery.fn.extend({ off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( @@ -870,6 +888,7 @@ jQuery.fn.extend({ return this; } if ( typeof types === "object" ) { + // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); @@ -877,6 +896,7 @@ jQuery.fn.extend({ return this; } if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) fn = selector; selector = undefined; @@ -884,23 +904,23 @@ jQuery.fn.extend({ if ( fn === false ) { fn = returnFalse; } - return this.each(function() { + return this.each( function() { jQuery.event.remove( this, types, fn, selector ); - }); + } ); }, trigger: function( type, data ) { - return this.each(function() { + return this.each( function() { jQuery.event.trigger( type, data, this ); - }); + } ); }, triggerHandler: function( type, data ) { - var elem = this[0]; + var elem = this[ 0 ]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } -}); +} ); return jQuery; -}); +} ); diff --git a/src/event/ajax.js b/src/event/ajax.js index c808b583e..98e194bf0 100644 --- a/src/event/ajax.js +++ b/src/event/ajax.js @@ -1,10 +1,10 @@ -define([ +define( [ "../core", "../event" ], function( jQuery ) { // Attach a bunch of functions for handling common AJAX events -jQuery.each([ +jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", @@ -15,6 +15,6 @@ jQuery.each([ jQuery.fn[ type ] = function( fn ) { return this.on( type, fn ); }; -}); +} ); -}); +} ); diff --git a/src/event/alias.js b/src/event/alias.js index eb43537ff..d2bdc5bb8 100644 --- a/src/event/alias.js +++ b/src/event/alias.js @@ -1,11 +1,11 @@ -define([ +define( [ "../core", "../event" ], function( jQuery ) { -jQuery.each( ("blur focus focusin focusout resize scroll click dblclick " + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu").split(" "), + "change select submit keydown keypress keyup contextmenu" ).split( " " ), function( i, name ) { // Handle event binding @@ -14,9 +14,9 @@ jQuery.each( ("blur focus focusin focusout resize scroll click dblclick " + this.on( name, null, data, fn ) : this.trigger( name ); }; -}); +} ); -jQuery.fn.extend({ +jQuery.fn.extend( { hover: function( fnOver, fnOut ) { return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); }, @@ -32,11 +32,12 @@ jQuery.fn.extend({ return this.on( types, selector, data, fn ); }, undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); } -}); +} ); -}); +} ); diff --git a/src/event/support.js b/src/event/support.js index 7ddca6a8d..1c4d416e5 100644 --- a/src/event/support.js +++ b/src/event/support.js @@ -1,4 +1,4 @@ -define([ +define( [ "../var/support" ], function( support ) { @@ -6,4 +6,4 @@ support.focusin = "onfocusin" in window; return support; -}); +} ); diff --git a/src/exports/amd.js b/src/exports/amd.js index 9a9846f9f..add6eb9bd 100644 --- a/src/exports/amd.js +++ b/src/exports/amd.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core" ], function( jQuery ) { @@ -18,7 +18,7 @@ define([ if ( typeof define === "function" && define.amd ) { define( "jquery", [], function() { return jQuery; - }); + } ); } -}); +} ); diff --git a/src/exports/global.js b/src/exports/global.js index 5d4d050fe..be9cbfb3a 100644 --- a/src/exports/global.js +++ b/src/exports/global.js @@ -1,4 +1,5 @@ var + // Map over jQuery in case of overwrite _jQuery = window.jQuery, diff --git a/src/jquery.js b/src/jquery.js index 1d56c4b15..66a42808e 100644 --- a/src/jquery.js +++ b/src/jquery.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./selector", "./traversing", @@ -31,6 +31,6 @@ define([ "./exports/amd" ], function( jQuery ) { -return (window.jQuery = window.$ = jQuery); +return ( window.jQuery = window.$ = jQuery ); -}); +} ); diff --git a/src/manipulation.js b/src/manipulation.js index 00d65de5a..55a77f4e8 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/concat", "./var/push", @@ -28,6 +28,7 @@ define([ var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, rnoInnerhtml = /<(?:script|style|link)/i, + // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptTypeMasked = /^true\/(.*)/, @@ -45,7 +46,7 @@ function manipulationTarget( elem, content ) { // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; return elem; } function restoreScript( elem ) { @@ -54,7 +55,7 @@ function restoreScript( elem ) { if ( match ) { elem.type = match[ 1 ]; } else { - elem.removeAttribute("type"); + elem.removeAttribute( "type" ); } return elem; @@ -124,13 +125,13 @@ function domManip( collection, args, callback, ignored ) { if ( isFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { - return collection.each(function( index ) { + return collection.each( function( index ) { var self = collection.eq( index ); if ( isFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } domManip( self, args, callback, ignored ); - }); + } ); } if ( l ) { @@ -157,6 +158,7 @@ function domManip( collection, args, callback, ignored ) { // Keep references to cloned scripts for later restoration if ( hasScripts ) { + // Support: Android<4.1, PhantomJS<2 // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( scripts, getAll( node, "script" ) ); @@ -180,6 +182,7 @@ function domManip( collection, args, callback, ignored ) { jQuery.contains( doc, node ) ) { if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); @@ -201,7 +204,7 @@ function remove( elem, selector, keepData ) { nodes = selector ? jQuery.filter( selector, elem ) : elem, i = 0; - for ( ; (node = nodes[i]) != null; i++ ) { + for ( ; ( node = nodes[ i ] ) != null; i++ ) { if ( !keepData && node.nodeType === 1 ) { jQuery.cleanData( getAll( node ) ); } @@ -217,7 +220,7 @@ function remove( elem, selector, keepData ) { return elem; } -jQuery.extend({ +jQuery.extend( { htmlPrefilter: function( html ) { return html.replace( rxhtmlTag, "<$1></$2>" ); }, @@ -269,9 +272,9 @@ jQuery.extend({ special = jQuery.event.special, i = 0; - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { if ( jQuery.acceptData( elem ) ) { - if ( (data = elem[ dataPriv.expando ] ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { @@ -291,9 +294,9 @@ jQuery.extend({ } } } -}); +} ); -jQuery.fn.extend({ +jQuery.fn.extend( { detach: function( selector ) { return remove( this, selector, true ); }, @@ -306,11 +309,11 @@ jQuery.fn.extend({ return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : - this.empty().each(function() { + this.empty().each( function() { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { this.textContent = value; } - }); + } ); }, null, value, arguments.length ); }, @@ -320,7 +323,7 @@ jQuery.fn.extend({ var target = manipulationTarget( this, elem ); target.appendChild( elem ); } - }); + } ); }, prepend: function() { @@ -329,7 +332,7 @@ jQuery.fn.extend({ var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } - }); + } ); }, before: function() { @@ -337,7 +340,7 @@ jQuery.fn.extend({ if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } - }); + } ); }, after: function() { @@ -345,14 +348,14 @@ jQuery.fn.extend({ if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } - }); + } ); }, empty: function() { var elem, i = 0; - for ( ; (elem = this[i]) != null; i++ ) { + for ( ; ( elem = this[ i ] ) != null; i++ ) { if ( elem.nodeType === 1 ) { // Prevent memory leaks @@ -370,9 +373,9 @@ jQuery.fn.extend({ dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - return this.map(function() { + return this.map( function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); + } ); }, html: function( value ) { @@ -431,9 +434,9 @@ jQuery.fn.extend({ // Force callback invocation }, ignored ); } -}); +} ); -jQuery.each({ +jQuery.each( { appendTo: "append", prependTo: "prepend", insertBefore: "before", @@ -458,7 +461,7 @@ jQuery.each({ return this.pushStack( ret ); }; -}); +} ); return jQuery; -}); +} ); diff --git a/src/manipulation/_evalUrl.js b/src/manipulation/_evalUrl.js index 59464bcd9..572fe30c7 100644 --- a/src/manipulation/_evalUrl.js +++ b/src/manipulation/_evalUrl.js @@ -1,9 +1,9 @@ -define([ +define( [ "../ajax" ], function( jQuery ) { jQuery._evalUrl = function( url ) { - return jQuery.ajax({ + return jQuery.ajax( { url: url, // Make this explicit, since user can override this through ajaxSetup (#11264) @@ -13,9 +13,9 @@ jQuery._evalUrl = function( url ) { async: false, global: false, "throws": true - }); + } ); }; return jQuery._evalUrl; -}); +} ); diff --git a/src/manipulation/buildFragment.js b/src/manipulation/buildFragment.js index d5cb4062a..cfdd1c0e6 100644 --- a/src/manipulation/buildFragment.js +++ b/src/manipulation/buildFragment.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "./var/rtagName", "./var/rscriptType", @@ -23,6 +23,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { // Add nodes directly if ( jQuery.type( elem ) === "object" ) { + // Support: Android<4.1, PhantomJS<2 // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); @@ -98,4 +99,4 @@ function buildFragment( elems, context, scripts, selection, ignored ) { } return buildFragment; -}); +} ); diff --git a/src/manipulation/getAll.js b/src/manipulation/getAll.js index d08470b48..cc913f29e 100644 --- a/src/manipulation/getAll.js +++ b/src/manipulation/getAll.js @@ -1,8 +1,9 @@ -define([ +define( [ "../core" ], function( jQuery ) { function getAll( context, tag ) { + // Support: IE9-11+ // Use typeof to avoid zero-argument method invocation on host objects (#15151) var ret = typeof context.getElementsByTagName !== "undefined" ? @@ -17,4 +18,4 @@ function getAll( context, tag ) { } return getAll; -}); +} ); diff --git a/src/manipulation/setGlobalEval.js b/src/manipulation/setGlobalEval.js index 2eab9cf53..8ca69a03a 100644 --- a/src/manipulation/setGlobalEval.js +++ b/src/manipulation/setGlobalEval.js @@ -1,4 +1,4 @@ -define([ +define( [ "../data/var/dataPriv" ], function( dataPriv ) { @@ -17,4 +17,4 @@ function setGlobalEval( elems, refElements ) { } return setGlobalEval; -}); +} ); diff --git a/src/manipulation/support.js b/src/manipulation/support.js index ddea2ff98..4f6b9de87 100644 --- a/src/manipulation/support.js +++ b/src/manipulation/support.js @@ -1,9 +1,9 @@ -define([ +define( [ "../var/document", "../var/support" ], function( document, support ) { -(function() { +( function() { var fragment = document.createDocumentFragment(), div = fragment.appendChild( document.createElement( "div" ) ), input = document.createElement( "input" ); @@ -26,8 +26,8 @@ define([ // Make sure textarea (and checkbox) defaultValue is properly cloned div.innerHTML = "<textarea>x</textarea>"; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); +} )(); return support; -}); +} ); diff --git a/src/manipulation/var/rcheckableType.js b/src/manipulation/var/rcheckableType.js index c27a15dc4..4c95394ac 100644 --- a/src/manipulation/var/rcheckableType.js +++ b/src/manipulation/var/rcheckableType.js @@ -1,3 +1,3 @@ -define(function() { - return (/^(?:checkbox|radio)$/i); -}); +define( function() { + return ( /^(?:checkbox|radio)$/i ); +} ); diff --git a/src/manipulation/var/rscriptType.js b/src/manipulation/var/rscriptType.js index 60ef70ac8..0c77c8a58 100644 --- a/src/manipulation/var/rscriptType.js +++ b/src/manipulation/var/rscriptType.js @@ -1,3 +1,3 @@ -define(function() { +define( function() { return ( /^$|\/(?:java|ecma)script/i ); -}); +} ); diff --git a/src/manipulation/var/rtagName.js b/src/manipulation/var/rtagName.js index cd0b768e0..9e542694a 100644 --- a/src/manipulation/var/rtagName.js +++ b/src/manipulation/var/rtagName.js @@ -1,3 +1,3 @@ -define(function() { +define( function() { return ( /<([\w:-]+)/ ); -}); +} ); diff --git a/src/manipulation/wrapMap.js b/src/manipulation/wrapMap.js index 7080bf996..3fa5f913e 100644 --- a/src/manipulation/wrapMap.js +++ b/src/manipulation/wrapMap.js @@ -1,4 +1,4 @@ -define(function() { +define( function() { // We have to close these tags to support XHTML (#13200) var wrapMap = { @@ -32,4 +32,4 @@ wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.the wrapMap.th = wrapMap.td; return wrapMap; -}); +} ); diff --git a/src/offset.js b/src/offset.js index 23a4b2a18..bef2a8fa0 100644 --- a/src/offset.js +++ b/src/offset.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./core/access", "./var/document", @@ -36,7 +36,7 @@ jQuery.offset = { curCSSTop = jQuery.css( elem, "top" ); curCSSLeft = jQuery.css( elem, "left" ); calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; // Need to be able to calculate position if either // top or left is auto and position is either absolute or fixed @@ -72,15 +72,16 @@ jQuery.offset = { } }; -jQuery.fn.extend({ +jQuery.fn.extend( { offset: function( options ) { + // Preserve chaining for setter if ( arguments.length ) { return options === undefined ? this : - this.each(function( i ) { + this.each( function( i ) { jQuery.offset.setOffset( this, options, i ); - }); + } ); } var docElem, win, rect, doc, @@ -127,10 +128,12 @@ jQuery.fn.extend({ // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, // because it is its only offset parent if ( jQuery.css( elem, "position" ) === "fixed" ) { + // Assume getBoundingClientRect is there when computed position is fixed offset = elem.getBoundingClientRect(); } else { + // Get *real* offsetParent offsetParent = this.offsetParent(); @@ -166,7 +169,7 @@ jQuery.fn.extend({ // // This logic, however, is not guaranteed and can change at any point in the future offsetParent: function() { - return this.map(function() { + return this.map( function() { var offsetParent = this.offsetParent; while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { @@ -174,9 +177,9 @@ jQuery.fn.extend({ } return offsetParent || documentElement; - }); + } ); } -}); +} ); // Create scrollLeft and scrollTop methods jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { @@ -201,7 +204,7 @@ jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( } }, method, val, arguments.length, null ); }; -}); +} ); // Support: Safari<7-8+, Chrome<37-44+ // Add the top/left cssHooks using jQuery.fn.position @@ -214,6 +217,7 @@ jQuery.each( [ "top", "left" ], function( i, prop ) { function( elem, computed ) { if ( computed ) { computed = curCSS( elem, prop ); + // If curCSS returns percentage, fallback to offset return rnumnonpx.test( computed ) ? jQuery( elem ).position()[ prop ] + "px" : @@ -221,7 +225,7 @@ jQuery.each( [ "top", "left" ], function( i, prop ) { } } ); -}); +} ); return jQuery; -}); +} ); diff --git a/src/queue.js b/src/queue.js index 235439fa6..813c41cd3 100644 --- a/src/queue.js +++ b/src/queue.js @@ -1,11 +1,11 @@ -define([ +define( [ "./core", "./data/var/dataPriv", "./deferred", "./callbacks" ], function( jQuery, dataPriv ) { -jQuery.extend({ +jQuery.extend( { queue: function( elem, type, data ) { var queue; @@ -16,7 +16,7 @@ jQuery.extend({ // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray(data) ); + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); } else { queue.push( data ); } @@ -64,14 +64,14 @@ jQuery.extend({ _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { + empty: jQuery.Callbacks( "once memory" ).add( function() { dataPriv.remove( elem, [ type + "queue", key ] ); - }) - }); + } ) + } ); } -}); +} ); -jQuery.fn.extend({ +jQuery.fn.extend( { queue: function( type, data ) { var setter = 2; @@ -82,30 +82,31 @@ jQuery.fn.extend({ } if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); + return jQuery.queue( this[ 0 ], type ); } return data === undefined ? this : - this.each(function() { + this.each( function() { var queue = jQuery.queue( this, type, data ); // Ensure a hooks for this queue jQuery._queueHooks( this, type ); - if ( type === "fx" && queue[0] !== "inprogress" ) { + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { jQuery.dequeue( this, type ); } - }); + } ); }, dequeue: function( type ) { - return this.each(function() { + return this.each( function() { jQuery.dequeue( this, type ); - }); + } ); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, + // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { @@ -136,7 +137,7 @@ jQuery.fn.extend({ resolve(); return defer.promise( obj ); } -}); +} ); return jQuery; -}); +} ); diff --git a/src/queue/delay.js b/src/queue/delay.js index 93abd0bf2..8d5844d6b 100644 --- a/src/queue/delay.js +++ b/src/queue/delay.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../queue", "../effects" // Delay is optional because of this dependency @@ -15,8 +15,8 @@ jQuery.fn.delay = function( time, type ) { hooks.stop = function() { window.clearTimeout( timeout ); }; - }); + } ); }; return jQuery.fn.delay; -}); +} ); diff --git a/src/selector-native.js b/src/selector-native.js index 2d5cb3026..121a6a603 100644 --- a/src/selector-native.js +++ b/src/selector-native.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/document", "./var/documentElement" @@ -36,6 +36,7 @@ var hasDuplicate, documentElement.oMatchesSelector || documentElement.msMatchesSelector, sortOrder = function( a, b ) { + // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; @@ -47,14 +48,15 @@ var hasDuplicate, a.compareDocumentPosition( b ); if ( compare ) { + // Disconnected nodes if ( compare & 1 ) { // Choose the first element that is related to our document - if ( a === document || jQuery.contains(document, a) ) { + if ( a === document || jQuery.contains( document, a ) ) { return -1; } - if ( b === document || jQuery.contains(document, b) ) { + if ( b === document || jQuery.contains( document, b ) ) { return 1; } @@ -78,7 +80,7 @@ var hasDuplicate, results.sort( sortOrder ); if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { + while ( ( elem = results[ i++ ] ) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } @@ -91,7 +93,7 @@ var hasDuplicate, return results; }; -jQuery.extend({ +jQuery.extend( { find: function( selector, context, results, seed ) { var elem, nodeType, i = 0; @@ -105,18 +107,18 @@ jQuery.extend({ } // Early return if context is not an element or document - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + if ( ( nodeType = context.nodeType ) !== 1 && nodeType !== 9 ) { return []; } if ( seed ) { - while ( (elem = seed[i++]) ) { - if ( jQuery.find.matchesSelector(elem, selector) ) { + while ( ( elem = seed[ i++ ] ) ) { + if ( jQuery.find.matchesSelector( elem, selector ) ) { results.push( elem ); } } } else { - jQuery.merge( results, context.querySelectorAll(selector) ); + jQuery.merge( results, context.querySelectorAll( selector ) ); } return results; @@ -130,17 +132,21 @@ jQuery.extend({ nodeType = elem.nodeType; if ( !nodeType ) { + // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { + while ( ( node = elem[ i++ ] ) ) { + // Do not traverse comment nodes ret += jQuery.text( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements return elem.textContent; } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } + // Do not include comment or processing instruction nodes return ret; @@ -148,10 +154,10 @@ jQuery.extend({ contains: function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && adown.contains(bup) ); + return a === bup || !!( bup && bup.nodeType === 1 && adown.contains( bup ) ); }, isXMLDoc: function( elem ) { - return (elem.ownerDocument || elem).documentElement.nodeName !== "HTML"; + return ( elem.ownerDocument || elem ).documentElement.nodeName !== "HTML"; }, expr: { attrHandle: {}, @@ -161,7 +167,7 @@ jQuery.extend({ needsContext: /^[\x20\t\r\n\f]*[>+~]/ } } -}); +} ); jQuery.extend( jQuery.find, { matches: function( expr, elements ) { @@ -173,6 +179,6 @@ jQuery.extend( jQuery.find, { attr: function( elem, name ) { return elem.getAttribute( name ); } -}); +} ); -}); +} ); diff --git a/src/selector-sizzle.js b/src/selector-sizzle.js index c091f1821..dcee45f37 100644 --- a/src/selector-sizzle.js +++ b/src/selector-sizzle.js @@ -1,14 +1,14 @@ -define([ +define( [ "./core", "sizzle" ], function( jQuery, Sizzle ) { jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; -}); +} ); diff --git a/src/selector.js b/src/selector.js index ea71c33e6..e13f585ae 100644 --- a/src/selector.js +++ b/src/selector.js @@ -1 +1 @@ -define([ "./selector-sizzle" ], function() {}); +define( [ "./selector-sizzle" ], function() {} ); diff --git a/src/serialize.js b/src/serialize.js index d6fedb6a1..76c43ea15 100644 --- a/src/serialize.js +++ b/src/serialize.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./manipulation/var/rcheckableType", "./core/init", @@ -16,13 +16,16 @@ function buildParams( prefix, obj, traditional, add ) { var name; if ( jQuery.isArray( obj ) ) { + // Serialize array item. jQuery.each( obj, function( i, v ) { if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. add( prefix, v ); } else { + // Item is non-scalar (array or object), encode its numeric index. buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", @@ -31,15 +34,17 @@ function buildParams( prefix, obj, traditional, add ) { add ); } - }); + } ); } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. for ( name in obj ) { buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); } } else { + // Serialize scalar item. add( prefix, obj ); } @@ -51,6 +56,7 @@ jQuery.param = function( a, traditional ) { var prefix, s = [], add = function( key, value ) { + // If value is a function, invoke it and return its value value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); @@ -63,12 +69,14 @@ jQuery.param = function( a, traditional ) { // If an array was passed in, assume that it is an array of form elements. if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); - }); + } ); } else { + // If traditional, encode the "old" way (the way 1.3.2 or older // did it), otherwise encode params recursively. for ( prefix in a ) { @@ -80,25 +88,26 @@ jQuery.param = function( a, traditional ) { return s.join( "&" ).replace( r20, "+" ); }; -jQuery.fn.extend({ +jQuery.fn.extend( { serialize: function() { return jQuery.param( this.serializeArray() ); }, serializeArray: function() { - return this.map(function() { + return this.map( function() { + // Can add propHook for "elements" to filter or add form elements var elements = jQuery.prop( this, "elements" ); return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function() { + } ) + .filter( function() { var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works return this.name && !jQuery( this ).is( ":disabled" ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); - }) - .map(function( i, elem ) { + } ) + .map( function( i, elem ) { var val = jQuery( this ).val(); return val == null ? @@ -106,11 +115,11 @@ jQuery.fn.extend({ jQuery.isArray( val ) ? jQuery.map( val, function( val ) { return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : + } ) : { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); + } ).get(); } -}); +} ); return jQuery; -}); +} ); diff --git a/src/traversing.js b/src/traversing.js index 19f8d24e7..a47b048ba 100644 --- a/src/traversing.js +++ b/src/traversing.js @@ -1,4 +1,4 @@ -define([ +define( [ "./core", "./var/indexOf", "./traversing/var/rneedsContext", @@ -8,6 +8,7 @@ define([ ], function( jQuery, indexOf, rneedsContext ) { var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // Methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, @@ -16,12 +17,12 @@ var rparentsprev = /^(?:parents|prev(?:Until|All))/, prev: true }; -jQuery.extend({ +jQuery.extend( { dir: function( elem, dir, until ) { var matched = [], truncate = until !== undefined; - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { if ( elem.nodeType === 1 ) { if ( truncate && jQuery( elem ).is( until ) ) { break; @@ -43,21 +44,21 @@ jQuery.extend({ return matched; } -}); +} ); -jQuery.fn.extend({ +jQuery.fn.extend( { has: function( target ) { var targets = jQuery( target, this ), l = targets.length; - return this.filter(function() { + return this.filter( function() { var i = 0; for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { + if ( jQuery.contains( this, targets[ i ] ) ) { return true; } } - }); + } ); }, closest: function( selectors, context ) { @@ -70,14 +71,15 @@ jQuery.fn.extend({ 0; for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { + jQuery.find.matchesSelector( cur, selectors ) ) ) { matched.push( cur ); break; @@ -119,17 +121,17 @@ jQuery.fn.extend({ addBack: function( selector ) { return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) + this.prevObject : this.prevObject.filter( selector ) ); } -}); +} ); function sibling( cur, dir ) { - while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} return cur; } -jQuery.each({ +jQuery.each( { parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; @@ -180,6 +182,7 @@ jQuery.each({ } if ( this.length > 1 ) { + // Remove duplicates if ( !guaranteedUnique[ name ] ) { jQuery.uniqueSort( matched ); @@ -193,7 +196,7 @@ jQuery.each({ return this.pushStack( matched ); }; -}); +} ); return jQuery; -}); +} ); diff --git a/src/traversing/findFilter.js b/src/traversing/findFilter.js index 128df2cb4..ee76a57a7 100644 --- a/src/traversing/findFilter.js +++ b/src/traversing/findFilter.js @@ -1,4 +1,4 @@ -define([ +define( [ "../core", "../var/indexOf", "./var/rneedsContext", @@ -13,14 +13,14 @@ function winnow( elements, qualifier, not ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; - }); + } ); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; - }); + } ); } @@ -34,7 +34,7 @@ function winnow( elements, qualifier, not ) { return jQuery.grep( elements, function( elem ) { return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - }); + } ); } jQuery.filter = function( expr, elems, not ) { @@ -48,10 +48,10 @@ jQuery.filter = function( expr, elems, not ) { jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; - })); + } ) ); }; -jQuery.fn.extend({ +jQuery.fn.extend( { find: function( selector ) { var i, len = this.length, @@ -59,13 +59,13 @@ jQuery.fn.extend({ self = this; if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { + return this.pushStack( jQuery( selector ).filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } - }) ); + } ) ); } for ( i = 0; i < len; i++ ) { @@ -75,10 +75,10 @@ jQuery.fn.extend({ return this.pushStack( len > 1 ? jQuery.uniqueSort( ret ) : ret ); }, filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); + return this.pushStack( winnow( this, selector || [], false ) ); }, not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); + return this.pushStack( winnow( this, selector || [], true ) ); }, is: function( selector ) { return !!winnow( @@ -92,6 +92,6 @@ jQuery.fn.extend({ false ).length; } -}); +} ); -}); +} ); diff --git a/src/traversing/var/rneedsContext.js b/src/traversing/var/rneedsContext.js index 3d6ae4038..f57fd9de2 100644 --- a/src/traversing/var/rneedsContext.js +++ b/src/traversing/var/rneedsContext.js @@ -1,6 +1,6 @@ -define([ +define( [ "../../core", "../../selector" ], function( jQuery ) { return jQuery.expr.match.needsContext; -}); +} ); diff --git a/src/var/arr.js b/src/var/arr.js index b18fc9ce0..3fd364000 100644 --- a/src/var/arr.js +++ b/src/var/arr.js @@ -1,3 +1,3 @@ -define(function() { +define( function() { return []; -}); +} ); diff --git a/src/var/class2type.js b/src/var/class2type.js index e674c3ba6..3a6932e11 100644 --- a/src/var/class2type.js +++ b/src/var/class2type.js @@ -1,4 +1,5 @@ -define(function() { +define( function() { + // [[Class]] -> type pairs return {}; -}); +} ); diff --git a/src/var/concat.js b/src/var/concat.js index 7dcf77e3c..9787bead6 100644 --- a/src/var/concat.js +++ b/src/var/concat.js @@ -1,5 +1,5 @@ -define([ +define( [ "./arr" ], function( arr ) { return arr.concat; -}); +} ); diff --git a/src/var/document.js b/src/var/document.js index ded014f1a..bb9428484 100644 --- a/src/var/document.js +++ b/src/var/document.js @@ -1,3 +1,3 @@ -define(function() { +define( function() { return window.document; -}); +} ); diff --git a/src/var/documentElement.js b/src/var/documentElement.js index c639670f1..e0c0aea6b 100644 --- a/src/var/documentElement.js +++ b/src/var/documentElement.js @@ -1,5 +1,5 @@ -define([ +define( [ "./document" ], function( document ) { return document.documentElement; -}); +} ); diff --git a/src/var/hasOwn.js b/src/var/hasOwn.js index 32c002aff..92f323e04 100644 --- a/src/var/hasOwn.js +++ b/src/var/hasOwn.js @@ -1,5 +1,5 @@ -define([ +define( [ "./class2type" ], function( class2type ) { return class2type.hasOwnProperty; -}); +} ); diff --git a/src/var/indexOf.js b/src/var/indexOf.js index cdbe3c742..5283841b2 100644 --- a/src/var/indexOf.js +++ b/src/var/indexOf.js @@ -1,5 +1,5 @@ -define([ +define( [ "./arr" ], function( arr ) { return arr.indexOf; -}); +} ); diff --git a/src/var/pnum.js b/src/var/pnum.js index 407044724..7fd9f6677 100644 --- a/src/var/pnum.js +++ b/src/var/pnum.js @@ -1,3 +1,3 @@ -define(function() { - return (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; -}); +define( function() { + return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; +} ); diff --git a/src/var/push.js b/src/var/push.js index ad6f0a179..bca1a58ed 100644 --- a/src/var/push.js +++ b/src/var/push.js @@ -1,5 +1,5 @@ -define([ +define( [ "./arr" ], function( arr ) { return arr.push; -}); +} ); diff --git a/src/var/rcssNum.js b/src/var/rcssNum.js index 2fc3938a5..408f5e26d 100644 --- a/src/var/rcssNum.js +++ b/src/var/rcssNum.js @@ -1,7 +1,7 @@ -define([ +define( [ "../var/pnum" ], function( pnum ) { return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); -}); +} ); diff --git a/src/var/rnotwhite.js b/src/var/rnotwhite.js index 7c69bec53..6067728ee 100644 --- a/src/var/rnotwhite.js +++ b/src/var/rnotwhite.js @@ -1,3 +1,3 @@ -define(function() { - return (/\S+/g); -}); +define( function() { + return ( /\S+/g ); +} ); diff --git a/src/var/slice.js b/src/var/slice.js index 614d46ca5..d8206d30a 100644 --- a/src/var/slice.js +++ b/src/var/slice.js @@ -1,5 +1,5 @@ -define([ +define( [ "./arr" ], function( arr ) { return arr.slice; -}); +} ); diff --git a/src/var/support.js b/src/var/support.js index b25dbc74b..3db9b67bc 100644 --- a/src/var/support.js +++ b/src/var/support.js @@ -1,4 +1,5 @@ -define(function() { +define( function() { + // All support tests are defined in their respective modules. return {}; -}); +} ); diff --git a/src/var/toString.js b/src/var/toString.js index ca92d2222..80ac7f13f 100644 --- a/src/var/toString.js +++ b/src/var/toString.js @@ -1,5 +1,5 @@ -define([ +define( [ "./class2type" ], function( class2type ) { return class2type.toString; -}); +} ); diff --git a/src/wrap.js b/src/wrap.js index 0d9bf0f2e..69c7cbf23 100644 --- a/src/wrap.js +++ b/src/wrap.js @@ -1,11 +1,11 @@ -define([ +define( [ "./core", "./core/init", "./manipulation", // clone "./traversing" // parent, contents ], function( jQuery ) { -jQuery.fn.extend({ +jQuery.fn.extend( { wrapAll: function( html ) { var wrap; @@ -21,7 +21,7 @@ jQuery.fn.extend({ wrap.insertBefore( this[ 0 ] ); } - wrap.map(function() { + wrap.map( function() { var elem = this; while ( elem.firstElementChild ) { @@ -29,7 +29,7 @@ jQuery.fn.extend({ } return elem; - }).append( this ); + } ).append( this ); } return this; @@ -37,12 +37,12 @@ jQuery.fn.extend({ wrapInner: function( html ) { if ( jQuery.isFunction( html ) ) { - return this.each(function( i ) { - jQuery( this ).wrapInner( html.call(this, i) ); - }); + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); } - return this.each(function() { + return this.each( function() { var self = jQuery( this ), contents = self.contents(); @@ -52,24 +52,24 @@ jQuery.fn.extend({ } else { self.append( html ); } - }); + } ); }, wrap: function( html ) { var isFunction = jQuery.isFunction( html ); - return this.each(function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); }, unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each(function() { + this.parent( selector ).not( "body" ).each( function() { jQuery( this ).replaceWith( this.childNodes ); - }); + } ); return this; } -}); +} ); return jQuery; -}); +} ); |