Commit e503a931 authored by Timmy Willison's avatar Timmy Willison

Release 3.0.0-rc1

parent c0185ab7
...@@ -272,7 +272,24 @@ Christian Grete <webmaster@christiangrete.com> ...@@ -272,7 +272,24 @@ Christian Grete <webmaster@christiangrete.com>
Liza Ramo <liza.h.ramo@gmail.com> Liza Ramo <liza.h.ramo@gmail.com>
Julian Alexander Murillo <julian.alexander.murillo@gmail.com> Julian Alexander Murillo <julian.alexander.murillo@gmail.com>
Joelle Fleurantin <joasqueeniebee@gmail.com> Joelle Fleurantin <joasqueeniebee@gmail.com>
Jae Sung Park <alberto.park@gmail.com>
Jun Sun <klsforever@gmail.com> Jun Sun <klsforever@gmail.com>
Josh Soref <apache@soref.com>
Henry Wong <henryw4k@gmail.com>
Jon Dufresne <jon.dufresne@gmail.com>
Martijn W. van der Lee <martijn@vanderlee.com>
Devin Wilson <dwilson6.github@gmail.com> Devin Wilson <dwilson6.github@gmail.com>
Todor Prikumov <tono_pr@abv.bg> Steve Mao <maochenyan@gmail.com>
Zack Hall <zackhall@outlook.com> Zack Hall <zackhall@outlook.com>
Bernhard M. Wiedemann <jquerybmw@lsmod.de>
Todor Prikumov <tono_pr@abv.bg>
Jha Naman <createnaman@gmail.com>
William Robinet <william.robinet@conostix.com>
Alexander Lisianoi <all3fox@gmail.com>
Vitaliy Terziev <vitaliyterziev@gmail.com>
Joe Trumbull <trumbull.j@gmail.com>
Alexander K <xpyro@ya.ru>
Damian Senn <jquery@topaxi.codes>
Ralin Chimev <ralin.chimev@gmail.com>
Felipe Sateler <fsateler@gmail.com>
Christophe Tafani-Dereeper <christophetd@hotmail.fr>
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
"name": "jquery", "name": "jquery",
"title": "jQuery", "title": "jQuery",
"description": "JavaScript library for DOM operations", "description": "JavaScript library for DOM operations",
"version": "2.2.4", "version": "3.0.0-rc1",
"main": "dist/jquery.js", "main": "dist/jquery.js",
"homepage": "http://jquery.com", "homepage": "https://jquery.com",
"author": { "author": {
"name": "jQuery Foundation and other contributors", "name": "jQuery Foundation and other contributors",
"url": "https://github.com/jquery/jquery/blob/2.2.4/AUTHORS.txt" "url": "https://github.com/jquery/jquery/blob/3.0.0-rc1/AUTHORS.txt"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
...@@ -25,41 +25,50 @@ ...@@ -25,41 +25,50 @@
"license": "MIT", "license": "MIT",
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {
"commitplease": "2.0.0", "babel-preset-es2015": "6.6.0",
"core-js": "0.9.17", "commitplease": "2.3.1",
"grunt": "0.4.5", "core-js": "2.2.2",
"grunt-babel": "5.0.1", "cross-spawn": "2.2.3",
"grunt-cli": "0.1.13", "grunt": "1.0.1",
"grunt-compare-size": "0.4.0", "grunt-babel": "6.0.0",
"grunt-contrib-jshint": "0.11.2", "grunt-cli": "1.2.0",
"grunt-contrib-uglify": "0.9.2", "grunt-compare-size": "0.4.2",
"grunt-contrib-watch": "0.6.1", "grunt-contrib-jshint": "1.0.0",
"grunt-git-authors": "2.0.1", "grunt-contrib-uglify": "1.0.1",
"grunt-jscs": "2.1.0", "grunt-contrib-watch": "1.0.0",
"grunt-jsonlint": "1.0.4", "grunt-git-authors": "3.2.0",
"grunt-jscs": "2.8.0",
"grunt-jsonlint": "1.0.7",
"grunt-newer": "1.2.0",
"grunt-npmcopy": "0.1.0", "grunt-npmcopy": "0.1.0",
"gzip-js": "0.3.2", "gzip-js": "0.3.2",
"husky": "0.11.4",
"insight": "0.8.1",
"jsdom": "5.6.1", "jsdom": "5.6.1",
"load-grunt-tasks": "1.0.0", "load-grunt-tasks": "3.5.0",
"qunitjs": "1.17.1", "native-promise-only": "0.8.1",
"promises-aplus-tests": "2.1.1",
"q": "1.4.1",
"qunit-assert-step": "1.0.3", "qunit-assert-step": "1.0.3",
"requirejs": "2.1.17", "qunitjs": "1.23.1",
"sinon": "1.10.3", "requirejs": "2.2.0",
"sizzle": "2.2.1", "sinon": "1.17.3",
"strip-json-comments": "1.0.3", "sizzle": "2.3.0",
"testswarm": "1.1.0", "strip-json-comments": "2.0.1",
"win-spawn": "2.0.0" "testswarm": "1.1.0"
}, },
"scripts": { "scripts": {
"build": "npm install && grunt", "build": "npm install && grunt",
"start": "grunt watch", "start": "grunt watch",
"test": "grunt && grunt test" "test": "grunt && grunt test",
"precommit": "grunt precommit_lint"
}, },
"commitplease": { "commitplease": {
"components": [ "components": [
"Docs", "Docs",
"Tests", "Tests",
"Build", "Build",
"Support",
"Release", "Release",
"Core", "Core",
"Ajax", "Ajax",
......
...@@ -7,12 +7,13 @@ ...@@ -7,12 +7,13 @@
"immed": true, "immed": true,
"noarg": true, "noarg": true,
"quotmark": "double", "quotmark": "double",
"strict": true,
"undef": true, "undef": true,
"unused": true, "unused": true,
"sub": true, "sub": true,
// Support: IE < 10, Android < 4.1 // Support: IE <=9 only, Android <=4.0 only
// The above browsers are failing a lot of tests in the ES5 // The above browsers are failing a lot of tests in the ES5
// test suite at http://test262.ecmascript.org. // test suite at http://test262.ecmascript.org.
"es3": true, "es3": true,
......
...@@ -7,13 +7,16 @@ define( [ ...@@ -7,13 +7,16 @@ define( [
"./ajax/var/rquery", "./ajax/var/rquery",
"./core/init", "./core/init",
"./ajax/parseJSON",
"./ajax/parseXML", "./ajax/parseXML",
"./event/trigger", "./event/trigger",
"./deferred" "./deferred",
"./serialize" // jQuery.param
], function( jQuery, document, rnotwhite, location, nonce, rquery ) { ], function( jQuery, document, rnotwhite, location, nonce, rquery ) {
"use strict";
var var
r20 = /%20/g,
rhash = /#.*$/, rhash = /#.*$/,
rts = /([?&])_=[^&]*/, rts = /([?&])_=[^&]*/,
rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
...@@ -346,7 +349,7 @@ jQuery.extend( { ...@@ -346,7 +349,7 @@ jQuery.extend( {
"text html": true, "text html": true,
// Evaluate text as a json expression // Evaluate text as a json expression
"text json": jQuery.parseJSON, "text json": JSON.parse,
// Parse text as xml // Parse text as xml
"text xml": jQuery.parseXML "text xml": jQuery.parseXML
...@@ -405,12 +408,18 @@ jQuery.extend( { ...@@ -405,12 +408,18 @@ jQuery.extend( {
// Url cleanup var // Url cleanup var
urlAnchor, urlAnchor,
// Request state (becomes false upon send and true upon completion)
completed,
// To know if global events are to be dispatched // To know if global events are to be dispatched
fireGlobals, fireGlobals,
// Loop variable // Loop variable
i, i,
// uncached part of the url
uncached,
// Create the final options object // Create the final options object
s = jQuery.ajaxSetup( {}, options ), s = jQuery.ajaxSetup( {}, options ),
...@@ -434,9 +443,6 @@ jQuery.extend( { ...@@ -434,9 +443,6 @@ jQuery.extend( {
requestHeaders = {}, requestHeaders = {},
requestHeadersNames = {}, requestHeadersNames = {},
// The jqXHR state
state = 0,
// Default abort message // Default abort message
strAbort = "canceled", strAbort = "canceled",
...@@ -447,7 +453,7 @@ jQuery.extend( { ...@@ -447,7 +453,7 @@ jQuery.extend( {
// Builds headers hashtable if needed // Builds headers hashtable if needed
getResponseHeader: function( key ) { getResponseHeader: function( key ) {
var match; var match;
if ( state === 2 ) { if ( completed ) {
if ( !responseHeaders ) { if ( !responseHeaders ) {
responseHeaders = {}; responseHeaders = {};
while ( ( match = rheaders.exec( responseHeadersString ) ) ) { while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
...@@ -461,14 +467,14 @@ jQuery.extend( { ...@@ -461,14 +467,14 @@ jQuery.extend( {
// Raw string // Raw string
getAllResponseHeaders: function() { getAllResponseHeaders: function() {
return state === 2 ? responseHeadersString : null; return completed ? responseHeadersString : null;
}, },
// Caches the header // Caches the header
setRequestHeader: function( name, value ) { setRequestHeader: function( name, value ) {
var lname = name.toLowerCase(); if ( completed == null ) {
if ( !state ) { name = requestHeadersNames[ name.toLowerCase() ] =
name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; requestHeadersNames[ name.toLowerCase() ] || name;
requestHeaders[ name ] = value; requestHeaders[ name ] = value;
} }
return this; return this;
...@@ -476,7 +482,7 @@ jQuery.extend( { ...@@ -476,7 +482,7 @@ jQuery.extend( {
// Overrides response content-type header // Overrides response content-type header
overrideMimeType: function( type ) { overrideMimeType: function( type ) {
if ( !state ) { if ( completed == null ) {
s.mimeType = type; s.mimeType = type;
} }
return this; return this;
...@@ -486,16 +492,16 @@ jQuery.extend( { ...@@ -486,16 +492,16 @@ jQuery.extend( {
statusCode: function( map ) { statusCode: function( map ) {
var code; var code;
if ( map ) { if ( map ) {
if ( state < 2 ) { if ( completed ) {
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 // Execute the appropriate callbacks
jqXHR.always( map[ jqXHR.status ] ); jqXHR.always( map[ jqXHR.status ] );
} else {
// Lazy-add the new callbacks in a way that preserves old ones
for ( code in map ) {
statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
}
} }
} }
return this; return this;
...@@ -513,33 +519,31 @@ jQuery.extend( { ...@@ -513,33 +519,31 @@ jQuery.extend( {
}; };
// Attach deferreds // Attach deferreds
deferred.promise( jqXHR ).complete = completeDeferred.add; deferred.promise( jqXHR );
jqXHR.success = jqXHR.done;
jqXHR.error = jqXHR.fail;
// Remove hash character (#7531: and string promotion)
// Add protocol if not provided (prefilters might expect it) // Add protocol if not provided (prefilters might expect it)
// Handle falsy url in the settings object (#10093: consistency with old signature) // Handle falsy url in the settings object (#10093: consistency with old signature)
// We also use the url parameter if available // We also use the url parameter if available
s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" ) s.url = ( ( url || s.url || location.href ) + "" )
.replace( rprotocol, location.protocol + "//" ); .replace( rprotocol, location.protocol + "//" );
// Alias method option to type as per ticket #12004 // Alias method option to type as per ticket #12004
s.type = options.method || options.type || s.method || s.type; s.type = options.method || options.type || s.method || s.type;
// Extract dataTypes list // Extract dataTypes list
s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
// A cross-domain request is in order when the origin doesn't match the current origin. // A cross-domain request is in order when the origin doesn't match the current origin.
if ( s.crossDomain == null ) { if ( s.crossDomain == null ) {
urlAnchor = document.createElement( "a" ); urlAnchor = document.createElement( "a" );
// Support: IE8-11+ // Support: IE <=8 - 11, Edge 12 - 13
// IE throws exception if url is malformed, e.g. http://example.com:80x/ // IE throws exception on accessing the href property if url is malformed,
// e.g. http://example.com:80x/
try { try {
urlAnchor.href = s.url; urlAnchor.href = s.url;
// Support: IE8-11+ // Support: IE <=8 - 11 only
// Anchor's host property isn't correctly set when s.url is relative // Anchor's host property isn't correctly set when s.url is relative
urlAnchor.href = urlAnchor.href; urlAnchor.href = urlAnchor.href;
s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
...@@ -561,7 +565,7 @@ jQuery.extend( { ...@@ -561,7 +565,7 @@ jQuery.extend( {
inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
// If request was aborted inside a prefilter, stop there // If request was aborted inside a prefilter, stop there
if ( state === 2 ) { if ( completed ) {
return jqXHR; return jqXHR;
} }
...@@ -582,29 +586,36 @@ jQuery.extend( { ...@@ -582,29 +586,36 @@ jQuery.extend( {
// Save the URL in case we're toying with the If-Modified-Since // Save the URL in case we're toying with the If-Modified-Since
// and/or If-None-Match header later on // and/or If-None-Match header later on
cacheURL = s.url; // Remove hash to simplify url manipulation
cacheURL = s.url.replace( rhash, "" );
// More options handling for requests with no content // More options handling for requests with no content
if ( !s.hasContent ) { if ( !s.hasContent ) {
// Remember the hash so we can put it back
uncached = s.url.slice( cacheURL.length );
// If data is available, append data to url // If data is available, append data to url
if ( s.data ) { if ( s.data ) {
cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
// #9682: remove data so that it's not used in an eventual retry // #9682: remove data so that it's not used in an eventual retry
delete s.data; delete s.data;
} }
// Add anti-cache in url if needed // Add anti-cache in uncached url if needed
if ( s.cache === false ) { if ( s.cache === false ) {
s.url = rts.test( cacheURL ) ? cacheURL = cacheURL.replace( rts, "" );
uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
}
// If there is already a '_' parameter, set its value // Put hash and anti-cache on the URL that will be requested (gh-1732)
cacheURL.replace( rts, "$1_=" + nonce++ ) : s.url = cacheURL + uncached;
// Otherwise add one to the end // Change '%20' to '+' if this is encoded form body content (gh-2658)
cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; } else if ( s.data && s.processData &&
} ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
s.data = s.data.replace( r20, "+" );
} }
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
...@@ -638,7 +649,7 @@ jQuery.extend( { ...@@ -638,7 +649,7 @@ jQuery.extend( {
// Allow custom headers/mimetypes and early abort // Allow custom headers/mimetypes and early abort
if ( s.beforeSend && if ( s.beforeSend &&
( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
// Abort if not done already and return // Abort if not done already and return
return jqXHR.abort(); return jqXHR.abort();
...@@ -648,9 +659,9 @@ jQuery.extend( { ...@@ -648,9 +659,9 @@ jQuery.extend( {
strAbort = "abort"; strAbort = "abort";
// Install callbacks on deferreds // Install callbacks on deferreds
for ( i in { success: 1, error: 1, complete: 1 } ) { completeDeferred.add( s.complete );
jqXHR[ i ]( s[ i ] ); jqXHR.done( s.success );
} jqXHR.fail( s.error );
// Get transport // Get transport
transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
...@@ -667,7 +678,7 @@ jQuery.extend( { ...@@ -667,7 +678,7 @@ jQuery.extend( {
} }
// If request was aborted inside ajaxSend, stop there // If request was aborted inside ajaxSend, stop there
if ( state === 2 ) { if ( completed ) {
return jqXHR; return jqXHR;
} }
...@@ -679,18 +690,17 @@ jQuery.extend( { ...@@ -679,18 +690,17 @@ jQuery.extend( {
} }
try { try {
state = 1; completed = false;
transport.send( requestHeaders, done ); transport.send( requestHeaders, done );
} catch ( e ) { } catch ( e ) {
// Propagate exception as error if not done // Rethrow post-completion exceptions
if ( state < 2 ) { if ( completed ) {
done( -1, e );
// Simply rethrow otherwise
} else {
throw e; throw e;
} }
// Propagate others as results
done( -1, e );
} }
} }
...@@ -699,13 +709,12 @@ jQuery.extend( { ...@@ -699,13 +709,12 @@ jQuery.extend( {
var isSuccess, success, error, response, modified, var isSuccess, success, error, response, modified,
statusText = nativeStatusText; statusText = nativeStatusText;
// Called once // Ignore repeat invocations
if ( state === 2 ) { if ( completed ) {
return; return;
} }
// State is "done" now completed = true;
state = 2;
// Clear timeout if it exists // Clear timeout if it exists
if ( timeoutTimer ) { if ( timeoutTimer ) {
......
...@@ -5,6 +5,8 @@ define( [ ...@@ -5,6 +5,8 @@ define( [
"../ajax" "../ajax"
], function( jQuery, nonce, rquery ) { ], function( jQuery, nonce, rquery ) {
"use strict";
var oldCallbacks = [], var oldCallbacks = [],
rjsonp = /(=)\?(?=&|$)|\?\?/; rjsonp = /(=)\?(?=&|$)|\?\?/;
......
...@@ -4,23 +4,15 @@ define( [ ...@@ -4,23 +4,15 @@ define( [
"../ajax", "../ajax",
"../traversing", "../traversing",
"../manipulation", "../manipulation",
"../selector", "../selector"
// Optional event/alias dependency
"../event/alias"
], function( jQuery ) { ], function( jQuery ) {
// Keep a copy of the old load method "use strict";
var _load = jQuery.fn.load;
/** /**
* Load a url into a page * Load a url into a page
*/ */
jQuery.fn.load = function( url, params, callback ) { jQuery.fn.load = function( url, params, callback ) {
if ( typeof url !== "string" && _load ) {
return _load.apply( this, arguments );
}
var selector, type, response, var selector, type, response,
self = this, self = this,
off = url.indexOf( " " ); off = url.indexOf( " " );
......
define( [
"../core"
], function( jQuery ) {
// Support: Android 2.3
// Workaround failure to string-cast null input
jQuery.parseJSON = function( data ) {
return JSON.parse( data + "" );
};
return jQuery.parseJSON;
} );
...@@ -2,6 +2,8 @@ define( [ ...@@ -2,6 +2,8 @@ define( [
"../core" "../core"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
// Cross-browser xml parsing // Cross-browser xml parsing
jQuery.parseXML = function( data ) { jQuery.parseXML = function( data ) {
var xml; var xml;
...@@ -9,7 +11,8 @@ jQuery.parseXML = function( data ) { ...@@ -9,7 +11,8 @@ jQuery.parseXML = function( data ) {
return null; return null;
} }
// Support: IE9 // Support: IE 9 - 11 only
// IE throws on parseFromString with invalid input.
try { try {
xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
} catch ( e ) { } catch ( e ) {
......
...@@ -4,6 +4,15 @@ define( [ ...@@ -4,6 +4,15 @@ define( [
"../ajax" "../ajax"
], function( jQuery, document ) { ], function( jQuery, document ) {
"use strict";
// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
jQuery.ajaxPrefilter( function( s ) {
if ( s.crossDomain ) {
s.contents.script = false;
}
} );
// Install script dataType // Install script dataType
jQuery.ajaxSetup( { jQuery.ajaxSetup( {
accepts: { accepts: {
......
define( function() { define( function() {
"use strict";
return window.location; return window.location;
} ); } );
define( [ define( [
"../../core" "../../core"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
return jQuery.now(); return jQuery.now();
} ); } );
define( function() { define( function() {
"use strict";
return ( /\?/ ); return ( /\?/ );
} ); } );
...@@ -4,6 +4,8 @@ define( [ ...@@ -4,6 +4,8 @@ define( [
"../ajax" "../ajax"
], function( jQuery, support ) { ], function( jQuery, support ) {
"use strict";
jQuery.ajaxSettings.xhr = function() { jQuery.ajaxSettings.xhr = function() {
try { try {
return new window.XMLHttpRequest(); return new window.XMLHttpRequest();
...@@ -15,7 +17,7 @@ var xhrSuccessStatus = { ...@@ -15,7 +17,7 @@ var xhrSuccessStatus = {
// File protocol always yields status code 0, assume 200 // File protocol always yields status code 0, assume 200
0: 200, 0: 200,
// Support: IE9 // Support: IE <=9 only
// #1450: sometimes IE returns 1223 when it should be 204 // #1450: sometimes IE returns 1223 when it should be 204
1223: 204 1223: 204
}, },
...@@ -79,7 +81,7 @@ jQuery.ajaxTransport( function( options ) { ...@@ -79,7 +81,7 @@ jQuery.ajaxTransport( function( options ) {
xhr.abort(); xhr.abort();
} else if ( type === "error" ) { } else if ( type === "error" ) {
// Support: IE9 // Support: IE <=9 only
// On a manual native abort, IE9 throws // On a manual native abort, IE9 throws
// errors on any property access that is not readyState // errors on any property access that is not readyState
if ( typeof xhr.status !== "number" ) { if ( typeof xhr.status !== "number" ) {
...@@ -97,7 +99,7 @@ jQuery.ajaxTransport( function( options ) { ...@@ -97,7 +99,7 @@ jQuery.ajaxTransport( function( options ) {
xhrSuccessStatus[ xhr.status ] || xhr.status, xhrSuccessStatus[ xhr.status ] || xhr.status,
xhr.statusText, xhr.statusText,
// Support: IE9 only // Support: IE <=9 only
// IE9 has no XHR2 but throws on binary (trac-11426) // IE9 has no XHR2 but throws on binary (trac-11426)
// For XHR2 non-text, let the caller handle it (gh-2498) // For XHR2 non-text, let the caller handle it (gh-2498)
( xhr.responseType || "text" ) !== "text" || ( xhr.responseType || "text" ) !== "text" ||
...@@ -115,7 +117,7 @@ jQuery.ajaxTransport( function( options ) { ...@@ -115,7 +117,7 @@ jQuery.ajaxTransport( function( options ) {
xhr.onload = callback(); xhr.onload = callback();
errorCallback = xhr.onerror = callback( "error" ); errorCallback = xhr.onerror = callback( "error" );
// Support: IE9 // Support: IE 9 only
// Use onreadystatechange to replace onabort // Use onreadystatechange to replace onabort
// to handle uncaught aborts // to handle uncaught aborts
if ( xhr.onabort !== undefined ) { if ( xhr.onabort !== undefined ) {
......
...@@ -6,6 +6,8 @@ define( [ ...@@ -6,6 +6,8 @@ define( [
"./attributes/val" "./attributes/val"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
// Return jQuery for attributes-only inclusion // Return jQuery for attributes-only inclusion
return jQuery; return jQuery;
} ); } );
...@@ -6,6 +6,8 @@ define( [ ...@@ -6,6 +6,8 @@ define( [
"../selector" "../selector"
], function( jQuery, access, support, rnotwhite ) { ], function( jQuery, access, support, rnotwhite ) {
"use strict";
var boolHook, var boolHook,
attrHandle = jQuery.expr.attrHandle; attrHandle = jQuery.expr.attrHandle;
...@@ -39,8 +41,7 @@ jQuery.extend( { ...@@ -39,8 +41,7 @@ jQuery.extend( {
// All attributes are lowercase // All attributes are lowercase
// Grab necessary hook if one is defined // Grab necessary hook if one is defined
if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
name = name.toLowerCase(); hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
hooks = jQuery.attrHooks[ name ] ||
( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
} }
...@@ -86,21 +87,12 @@ jQuery.extend( { ...@@ -86,21 +87,12 @@ jQuery.extend( {
}, },
removeAttr: function( elem, value ) { removeAttr: function( elem, value ) {
var name, propName, var name,
i = 0, i = 0,
attrNames = value && value.match( rnotwhite ); attrNames = value && value.match( rnotwhite );
if ( attrNames && elem.nodeType === 1 ) { if ( attrNames && elem.nodeType === 1 ) {
while ( ( name = attrNames[ i++ ] ) ) { while ( ( name = attrNames[ i++ ] ) ) {
propName = jQuery.propFix[ name ] || name;
// Boolean attributes get special treatment (#10870)
if ( jQuery.expr.match.bool.test( name ) ) {
// Set corresponding property to false
elem[ propName ] = false;
}
elem.removeAttribute( name ); elem.removeAttribute( name );
} }
} }
...@@ -120,6 +112,7 @@ boolHook = { ...@@ -120,6 +112,7 @@ boolHook = {
return name; return name;
} }
}; };
jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
var getter = attrHandle[ name ] || jQuery.find.attr; var getter = attrHandle[ name ] || jQuery.find.attr;
......
...@@ -5,6 +5,8 @@ define( [ ...@@ -5,6 +5,8 @@ define( [
"../core/init" "../core/init"
], function( jQuery, rnotwhite, dataPriv ) { ], function( jQuery, rnotwhite, dataPriv ) {
"use strict";
var rclass = /[\t\r\n\f]/g; var rclass = /[\t\r\n\f]/g;
function getClass( elem ) { function getClass( elem ) {
......
...@@ -5,6 +5,8 @@ define( [ ...@@ -5,6 +5,8 @@ define( [
"../selector" "../selector"
], function( jQuery, access, support ) { ], function( jQuery, access, support ) {
"use strict";
var rfocusable = /^(?:input|select|textarea|button)$/i, var rfocusable = /^(?:input|select|textarea|button)$/i,
rclickable = /^(?:a|area)$/i; rclickable = /^(?:a|area)$/i;
...@@ -57,9 +59,10 @@ jQuery.extend( { ...@@ -57,9 +59,10 @@ jQuery.extend( {
tabIndex: { tabIndex: {
get: function( elem ) { get: function( elem ) {
// Support: IE <=9 - 11 only
// elem.tabIndex doesn't always return the // elem.tabIndex doesn't always return the
// correct value when it hasn't been explicitly set // correct value when it hasn't been explicitly set
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
// Use proper attribute retrieval(#12072) // Use proper attribute retrieval(#12072)
var tabindex = jQuery.find.attr( elem, "tabindex" ); var tabindex = jQuery.find.attr( elem, "tabindex" );
......
...@@ -3,6 +3,8 @@ define( [ ...@@ -3,6 +3,8 @@ define( [
"../var/support" "../var/support"
], function( document, support ) { ], function( document, support ) {
"use strict";
( function() { ( function() {
var input = document.createElement( "input" ), var input = document.createElement( "input" ),
select = document.createElement( "select" ), select = document.createElement( "select" ),
...@@ -10,20 +12,15 @@ define( [ ...@@ -10,20 +12,15 @@ define( [
input.type = "checkbox"; input.type = "checkbox";
// Support: iOS<=5.1, Android<=4.2+ // Support: Android <=4.3 only
// Default value for a checkbox should be "on" // Default value for a checkbox should be "on"
support.checkOn = input.value !== ""; support.checkOn = input.value !== "";
// Support: IE<=11+ // Support: IE <=11 only
// Must access selectedIndex to make default options select // Must access selectedIndex to make default options select
support.optSelected = opt.selected; support.optSelected = opt.selected;
// Support: Android<=2.3 // Support: IE <=11 only
// Options inside disabled selects are incorrectly marked as disabled
select.disabled = true;
support.optDisabled = !opt.disabled;
// Support: IE<=11+
// An input loses its value after becoming a radio // An input loses its value after becoming a radio
input = document.createElement( "input" ); input = document.createElement( "input" );
input.value = "t"; input.value = "t";
......
...@@ -4,6 +4,8 @@ define( [ ...@@ -4,6 +4,8 @@ define( [
"../core/init" "../core/init"
], function( jQuery, support ) { ], function( jQuery, support ) {
"use strict";
var rreturn = /\r/g, var rreturn = /\r/g,
rspaces = /[\x20\t\r\n\f]+/g; rspaces = /[\x20\t\r\n\f]+/g;
...@@ -85,7 +87,7 @@ jQuery.extend( { ...@@ -85,7 +87,7 @@ jQuery.extend( {
return val != null ? return val != null ?
val : val :
// Support: IE10-11+ // Support: IE <=10 - 11 only
// option.text throws exceptions (#14686, #14858) // option.text throws exceptions (#14686, #14858)
// Strip and collapse whitespace // Strip and collapse whitespace
// https://html.spec.whatwg.org/#strip-and-collapse-whitespace // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
...@@ -97,7 +99,7 @@ jQuery.extend( { ...@@ -97,7 +99,7 @@ jQuery.extend( {
var value, option, var value, option,
options = elem.options, options = elem.options,
index = elem.selectedIndex, index = elem.selectedIndex,
one = elem.type === "select-one" || index < 0, one = elem.type === "select-one",
values = one ? null : [], values = one ? null : [],
max = one ? index + 1 : options.length, max = one ? index + 1 : options.length,
i = index < 0 ? i = index < 0 ?
...@@ -108,12 +110,12 @@ jQuery.extend( { ...@@ -108,12 +110,12 @@ jQuery.extend( {
for ( ; i < max; i++ ) { for ( ; i < max; i++ ) {
option = options[ i ]; option = options[ i ];
// Support: IE <=9 only
// IE8-9 doesn't update selected after form reset (#2551) // IE8-9 doesn't update selected after form reset (#2551)
if ( ( option.selected || i === index ) && if ( ( option.selected || i === index ) &&
// Don't return options that are disabled or in a disabled optgroup // Don't return options that are disabled or in a disabled optgroup
( support.optDisabled ? !option.disabled &&
!option.disabled : option.getAttribute( "disabled" ) === null ) &&
( !option.parentNode.disabled || ( !option.parentNode.disabled ||
!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
......
...@@ -3,6 +3,8 @@ define( [ ...@@ -3,6 +3,8 @@ define( [
"./var/rnotwhite" "./var/rnotwhite"
], function( jQuery, rnotwhite ) { ], function( jQuery, rnotwhite ) {
"use strict";
// Convert String-formatted options into Object-formatted ones // Convert String-formatted options into Object-formatted ones
function createOptions( options ) { function createOptions( options ) {
var object = {}; var object = {};
...@@ -191,7 +193,7 @@ jQuery.Callbacks = function( options ) { ...@@ -191,7 +193,7 @@ jQuery.Callbacks = function( options ) {
// Abort any pending executions // Abort any pending executions
lock: function() { lock: function() {
locked = queue = []; locked = queue = [];
if ( !memory ) { if ( !memory && !firing ) {
list = memory = ""; list = memory = "";
} }
return this; return this;
......
define( [ define( [
"./var/arr", "./var/arr",
"./var/document", "./var/document",
"./var/getProto",
"./var/slice", "./var/slice",
"./var/concat", "./var/concat",
"./var/push", "./var/push",
...@@ -8,11 +9,18 @@ define( [ ...@@ -8,11 +9,18 @@ define( [
"./var/class2type", "./var/class2type",
"./var/toString", "./var/toString",
"./var/hasOwn", "./var/hasOwn",
"./var/support" "./var/fnToString",
], function( arr, document, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) { "./var/ObjectFunctionString",
"./var/support",
"./core/DOMEval"
], function( arr, document, getProto, slice, concat, push, indexOf,
class2type, toString, hasOwn, fnToString, ObjectFunctionString,
support, DOMEval ) {
"use strict";
var var
version = "@VERSION", version = "3.0.0-rc1",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
...@@ -22,13 +30,13 @@ var ...@@ -22,13 +30,13 @@ var
return new jQuery.fn.init( selector, context ); return new jQuery.fn.init( selector, context );
}, },
// Support: Android<4.1 // Support: Android <=4.0 only
// Make sure we trim BOM and NBSP // Make sure we trim BOM and NBSP
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
// Matches dashed string for camelizing // Matches dashed string for camelizing
rmsPrefix = /^-ms-/, rmsPrefix = /^-ms-/,
rdashAlpha = /-([\da-z])/gi, rdashAlpha = /-([a-z])/g,
// Used by jQuery.camelCase as callback to replace() // Used by jQuery.camelCase as callback to replace()
fcamelCase = function( all, letter ) { fcamelCase = function( all, letter ) {
...@@ -42,9 +50,6 @@ jQuery.fn = jQuery.prototype = { ...@@ -42,9 +50,6 @@ jQuery.fn = jQuery.prototype = {
constructor: jQuery, constructor: jQuery,
// Start with an empty selector
selector: "",
// The default length of a jQuery object is 0 // The default length of a jQuery object is 0
length: 0, length: 0,
...@@ -73,7 +78,6 @@ jQuery.fn = jQuery.prototype = { ...@@ -73,7 +78,6 @@ jQuery.fn = jQuery.prototype = {
// Add the old object onto the stack (as a reference) // Add the old object onto the stack (as a reference)
ret.prevObject = this; ret.prevObject = this;
ret.context = this.context;
// Return the newly-formed element set // Return the newly-formed element set
return ret; return ret;
...@@ -214,37 +218,37 @@ jQuery.extend( { ...@@ -214,37 +218,37 @@ jQuery.extend( {
isNumeric: function( obj ) { isNumeric: function( obj ) {
// parseFloat NaNs numeric-cast false positives (null|true|false|"") // As of jQuery 3.0, isNumeric is limited to
// strings and numbers (primitives or objects)
// that can be coerced to finite numbers (gh-2662)
var type = jQuery.type( obj );
return ( type === "number" || type === "string" ) &&
// parseFloat NaNs numeric-cast false positives ("")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...") // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN // subtraction forces infinities to NaN
// adding 1 corrects loss of precision from parseFloat (#15100) !isNaN( obj - parseFloat( obj ) );
var realStringObj = obj && obj.toString();
return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
}, },
isPlainObject: function( obj ) { isPlainObject: function( obj ) {
var key; var proto, Ctor;
// Not plain objects: // Detect obvious negatives
// - Any object or value whose internal [[Class]] property is not "[object Object]" // Use toString instead of jQuery.type to catch host objects
// - DOM nodes if ( !obj || toString.call( obj ) !== "[object Object]" ) {
// - window
if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false; return false;
} }
// Not own constructor property must be Object proto = getProto( obj );
if ( obj.constructor &&
!hasOwn.call( obj, "constructor" ) &&
!hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) {
return false;
}
// Own properties are enumerated firstly, so to speed up, // Objects with no prototype (e.g., `Object.create( null )`) are plain
// if last one is own, then all properties are own if ( !proto ) {
for ( key in obj ) {} return true;
}
return key === undefined || hasOwn.call( obj, key ); // Objects with prototype are plain iff they were constructed by a global Object function
Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
}, },
isEmptyObject: function( obj ) { isEmptyObject: function( obj ) {
...@@ -260,7 +264,7 @@ jQuery.extend( { ...@@ -260,7 +264,7 @@ jQuery.extend( {
return obj + ""; return obj + "";
} }
// Support: Android<4.0, iOS<6 (functionish RegExp) // Support: Android <=2.3 only (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ? return typeof obj === "object" || typeof obj === "function" ?
class2type[ toString.call( obj ) ] || "object" : class2type[ toString.call( obj ) ] || "object" :
typeof obj; typeof obj;
...@@ -268,32 +272,11 @@ jQuery.extend( { ...@@ -268,32 +272,11 @@ jQuery.extend( {
// Evaluates a script in a global context // Evaluates a script in a global context
globalEval: function( code ) { globalEval: function( code ) {
var script, DOMEval( code );
indirect = eval;
code = jQuery.trim( code );
if ( code ) {
// If the code includes a valid, prologue position
// strict mode pragma, execute code by injecting a
// script tag into the document.
if ( code.indexOf( "use strict" ) === 1 ) {
script = document.createElement( "script" );
script.text = code;
document.head.appendChild( script ).parentNode.removeChild( script );
} else {
// Otherwise, avoid the DOM node creation, insertion
// and removal by using an indirect global eval
indirect( code );
}
}
}, },
// Convert dashed to camelCase; used by the css and data modules // Convert dashed to camelCase; used by the css and data modules
// Support: IE9-11+ // Support: IE <=9 - 11, Edge 12 - 13
// Microsoft forgot to hump their vendor prefix (#9572) // Microsoft forgot to hump their vendor prefix (#9572)
camelCase: function( string ) { camelCase: function( string ) {
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
...@@ -324,7 +307,7 @@ jQuery.extend( { ...@@ -324,7 +307,7 @@ jQuery.extend( {
return obj; return obj;
}, },
// Support: Android<4.1 // Support: Android <=4.0 only
trim: function( text ) { trim: function( text ) {
return text == null ? return text == null ?
"" : "" :
...@@ -353,6 +336,8 @@ jQuery.extend( { ...@@ -353,6 +336,8 @@ jQuery.extend( {
return arr == null ? -1 : indexOf.call( arr, elem, i ); return arr == null ? -1 : indexOf.call( arr, elem, i );
}, },
// Support: Android <=4.0 only, PhantomJS 1 only
// push.apply(_, arraylike) throws on ancient WebKit
merge: function( first, second ) { merge: function( first, second ) {
var len = +second.length, var len = +second.length,
j = 0, j = 0,
...@@ -475,7 +460,7 @@ function( i, name ) { ...@@ -475,7 +460,7 @@ function( i, name ) {
function isArrayLike( obj ) { function isArrayLike( obj ) {
// Support: iOS 8.2 (not reproducible in simulator) // Support: real iOS 8.2 only (not reproducible in simulator)
// `in` check used to prevent JIT error (gh-2145) // `in` check used to prevent JIT error (gh-2145)
// hasOwn isn't used here due to false negatives // hasOwn isn't used here due to false negatives
// regarding Nodelist length in IE // regarding Nodelist length in IE
......
define( [
"../var/document"
], function( document ) {
"use strict";
function DOMEval( code, doc ) {
doc = doc || document;
var script = doc.createElement( "script" );
script.text = code;
doc.head.appendChild( script ).parentNode.removeChild( script );
}
return DOMEval;
} );
...@@ -2,6 +2,8 @@ define( [ ...@@ -2,6 +2,8 @@ define( [
"../core" "../core"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
// Multifunctional method to get and set values of a collection // Multifunctional method to get and set values of a collection
// The value/s can optionally be executed if it's a function // The value/s can optionally be executed if it's a function
var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
......
...@@ -6,13 +6,16 @@ define( [ ...@@ -6,13 +6,16 @@ define( [
"../traversing/findFilter" "../traversing/findFilter"
], function( jQuery, document, rsingleTag ) { ], function( jQuery, document, rsingleTag ) {
"use strict";
// A central reference to the root jQuery(document) // A central reference to the root jQuery(document)
var rootjQuery, var rootjQuery,
// A simple way to check for HTML strings // A simple way to check for HTML strings
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521) // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
// Strict HTML recognition (#11290: must start with <) // Strict HTML recognition (#11290: must start with <)
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, // Shortcut simple #id case for speed
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
init = jQuery.fn.init = function( selector, context, root ) { init = jQuery.fn.init = function( selector, context, root ) {
var match, elem; var match, elem;
...@@ -75,17 +78,12 @@ var rootjQuery, ...@@ -75,17 +78,12 @@ var rootjQuery,
} else { } else {
elem = document.getElementById( match[ 2 ] ); elem = document.getElementById( match[ 2 ] );
// Support: Blackberry 4.6 if ( elem ) {
// gEBID returns nodes no longer in the document (#6963)
if ( elem && elem.parentNode ) {
// Inject the element directly into the jQuery object // Inject the element directly into the jQuery object
this.length = 1;
this[ 0 ] = elem; this[ 0 ] = elem;
this.length = 1;
} }
this.context = document;
this.selector = selector;
return this; return this;
} }
...@@ -101,7 +99,7 @@ var rootjQuery, ...@@ -101,7 +99,7 @@ var rootjQuery,
// HANDLE: $(DOMElement) // HANDLE: $(DOMElement)
} else if ( selector.nodeType ) { } else if ( selector.nodeType ) {
this.context = this[ 0 ] = selector; this[ 0 ] = selector;
this.length = 1; this.length = 1;
return this; return this;
...@@ -115,11 +113,6 @@ var rootjQuery, ...@@ -115,11 +113,6 @@ var rootjQuery,
selector( jQuery ); selector( jQuery );
} }
if ( selector.selector !== undefined ) {
this.selector = selector.selector;
this.context = selector.context;
}
return jQuery.makeArray( selector, this ); return jQuery.makeArray( selector, this );
}; };
......
...@@ -2,24 +2,48 @@ define( [ ...@@ -2,24 +2,48 @@ define( [
"../core", "../core",
"../var/document", "../var/document",
"./var/rsingleTag", "./var/rsingleTag",
"../manipulation/buildFragment" "../manipulation/buildFragment",
], function( jQuery, document, rsingleTag, buildFragment ) {
// This is the only module that needs core/support
"./support"
], function( jQuery, document, rsingleTag, buildFragment, support ) {
"use strict";
// Argument "data" should be string of html // Argument "data" should be string of html
// context (optional): If specified, the fragment will be created in this context, // context (optional): If specified, the fragment will be created in this context,
// defaults to document // defaults to document
// keepScripts (optional): If true, will include scripts passed in the html string // keepScripts (optional): If true, will include scripts passed in the html string
jQuery.parseHTML = function( data, context, keepScripts ) { jQuery.parseHTML = function( data, context, keepScripts ) {
if ( !data || typeof data !== "string" ) { if ( typeof data !== "string" ) {
return null; return [];
} }
if ( typeof context === "boolean" ) { if ( typeof context === "boolean" ) {
keepScripts = context; keepScripts = context;
context = false; context = false;
} }
context = context || document;
var parsed = rsingleTag.exec( data ), var base, parsed, scripts;
if ( !context ) {
// Stop scripts or inline event handlers from being executed immediately
// by using document.implementation
if ( support.createHTMLDocument ) {
context = document.implementation.createHTMLDocument( "" );
// Set the base href for the created document
// so any parsed elements with URLs
// are based on the document's URL (gh-2965)
base = context.createElement( "base" );
base.href = document.location.href;
context.head.appendChild( base );
} else {
context = document;
}
}
parsed = rsingleTag.exec( data );
scripts = !keepScripts && []; scripts = !keepScripts && [];
// Single tag // Single tag
......
define( [
"../core",
"../var/document"
], function( jQuery, document ) {
"use strict";
var readyCallbacks = [],
readyFiring = false,
whenReady = function( fn ) {
readyCallbacks.push( fn );
},
executeReady = function( fn ) {
// Prevent errors from freezing future callback execution (gh-1823)
// Not backwards-compatible as this does not execute sync
window.setTimeout( function() {
fn.call( document, jQuery );
} );
};
jQuery.fn.ready = function( fn ) {
whenReady( fn );
return this;
};
jQuery.extend( {
// Is the DOM ready to be used? Set to true once it occurs.
isReady: false,
// A counter to track how many items to wait for before
// the ready event fires. See #6781
readyWait: 1,
// Hold (or release) the ready event
holdReady: function( hold ) {
if ( hold ) {
jQuery.readyWait++;
} else {
jQuery.ready( true );
}
},
ready: function( wait ) {
// Abort if there are pending holds or we're already ready
if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
return;
}
// Remember that the DOM is ready
jQuery.isReady = true;
// If a normal DOM Ready event fired, decrement, and wait if need be
if ( wait !== true && --jQuery.readyWait > 0 ) {
return;
}
whenReady = function( fn ) {
readyCallbacks.push( fn );
if ( !readyFiring ) {
readyFiring = true;
while ( readyCallbacks.length ) {
fn = readyCallbacks.shift();
if ( jQuery.isFunction( fn ) ) {
executeReady( fn );
}
}
readyFiring = false;
}
};
whenReady();
}
} );
// Make jQuery.ready Promise consumable (gh-1778)
jQuery.ready.then = jQuery.fn.ready;
/**
* The ready event handler and self cleanup method
*/
function completed() {
document.removeEventListener( "DOMContentLoaded", completed );
window.removeEventListener( "load", completed );
jQuery.ready();
}
// Catch cases where $(document).ready() is called
// after the browser event has already occurred.
// Support: IE9-10 only
// Older IE sometimes signals "interactive" too soon
if ( document.readyState === "complete" ||
( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
window.setTimeout( jQuery.ready );
} else {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", completed );
// A fallback to window.onload, that will always work
window.addEventListener( "load", completed );
}
} );
define( [ define( [
"../core", "../core",
"../var/document", "../var/document",
"../core/init",
"../deferred" "../deferred"
], function( jQuery, document ) { ], function( jQuery, document ) {
"use strict";
// The deferred used on DOM ready // The deferred used on DOM ready
var readyList; var readyList = jQuery.Deferred();
jQuery.fn.ready = function( fn ) { jQuery.fn.ready = function( fn ) {
// Add the callback readyList.then( fn );
jQuery.ready.promise().done( fn );
return this; return this;
}; };
...@@ -52,52 +52,35 @@ jQuery.extend( { ...@@ -52,52 +52,35 @@ jQuery.extend( {
// If there are functions bound, to execute // If there are functions bound, to execute
readyList.resolveWith( document, [ jQuery ] ); readyList.resolveWith( document, [ jQuery ] );
// Trigger any bound ready events
if ( jQuery.fn.triggerHandler ) {
jQuery( document ).triggerHandler( "ready" );
jQuery( document ).off( "ready" );
}
} }
} ); } );
/** jQuery.ready.then = readyList.then;
* The ready event handler and self cleanup method
*/ // The ready event handler and self cleanup method
function completed() { function completed() {
document.removeEventListener( "DOMContentLoaded", completed ); document.removeEventListener( "DOMContentLoaded", completed );
window.removeEventListener( "load", completed ); window.removeEventListener( "load", completed );
jQuery.ready(); jQuery.ready();
} }
jQuery.ready.promise = function( obj ) { // Catch cases where $(document).ready() is called
if ( !readyList ) { // after the browser event has already occurred.
// Support: IE <=9 - 10 only
readyList = jQuery.Deferred(); // Older IE sometimes signals "interactive" too soon
if ( document.readyState === "complete" ||
// Catch cases where $(document).ready() is called
// after the browser event has already occurred.
// Support: IE9-10 only
// Older IE sometimes signals "interactive" too soon
if ( document.readyState === "complete" ||
( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready // Handle it asynchronously to allow scripts the opportunity to delay ready
window.setTimeout( jQuery.ready ); window.setTimeout( jQuery.ready );
} else { } else {
// Use the handy event callback // Use the handy event callback
document.addEventListener( "DOMContentLoaded", completed ); document.addEventListener( "DOMContentLoaded", completed );
// A fallback to window.onload, that will always work // A fallback to window.onload, that will always work
window.addEventListener( "load", completed ); window.addEventListener( "load", completed );
} }
}
return readyList.promise( obj );
};
// Kick off the DOM ready check even if the user does not
jQuery.ready.promise();
} ); } );
define( [
"../var/document",
"../var/support"
], function( document, support ) {
"use strict";
// Support: Safari 8 only
// In Safari 8 documents created via document.implementation.createHTMLDocument
// 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() {
var body = document.implementation.createHTMLDocument( "" ).body;
body.innerHTML = "<form></form><form></form>";
return body.childNodes.length === 2;
} )();
return support;
} );
define( function() { define( function() {
"use strict";
// Match a standalone tag // Match a standalone tag
return ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); return ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
} ); } );
...@@ -7,21 +7,20 @@ define( [ ...@@ -7,21 +7,20 @@ define( [
"./var/rcssNum", "./var/rcssNum",
"./css/var/rnumnonpx", "./css/var/rnumnonpx",
"./css/var/cssExpand", "./css/var/cssExpand",
"./css/var/isHidden",
"./css/var/getStyles", "./css/var/getStyles",
"./css/var/swap", "./css/var/swap",
"./css/curCSS", "./css/curCSS",
"./css/adjustCSS", "./css/adjustCSS",
"./css/defaultDisplay",
"./css/addGetHookIf", "./css/addGetHookIf",
"./css/support", "./css/support",
"./data/var/dataPriv",
"./core/init", "./core/init",
"./core/ready", "./core/ready",
"./selector" // contains "./selector" // contains
], function( jQuery, pnum, access, rmargin, document, rcssNum, rnumnonpx, cssExpand, isHidden, ], function( jQuery, pnum, access, rmargin, document, rcssNum, rnumnonpx, cssExpand,
getStyles, swap, curCSS, adjustCSS, defaultDisplay, addGetHookIf, support, dataPriv ) { getStyles, swap, curCSS, adjustCSS, addGetHookIf, support ) {
"use strict";
var var
...@@ -29,14 +28,13 @@ var ...@@ -29,14 +28,13 @@ var
// except "table", "table-cell", or "table-caption" // except "table", "table-cell", or "table-caption"
// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
rdisplayswap = /^(none|table(?!-c[ea]).+)/, rdisplayswap = /^(none|table(?!-c[ea]).+)/,
cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssShow = { position: "absolute", visibility: "hidden", display: "block" },
cssNormalTransform = { cssNormalTransform = {
letterSpacing: "0", letterSpacing: "0",
fontWeight: "400" fontWeight: "400"
}, },
cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], cssPrefixes = [ "Webkit", "Moz", "ms" ],
emptyStyle = document.createElement( "div" ).style; emptyStyle = document.createElement( "div" ).style;
// Return a css property mapped to a potentially vendor prefixed property // Return a css property mapped to a potentially vendor prefixed property
...@@ -118,11 +116,18 @@ function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { ...@@ -118,11 +116,18 @@ function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
function getWidthOrHeight( elem, name, extra ) { function getWidthOrHeight( elem, name, extra ) {
// Start with offset property, which is equivalent to the border-box value // Start with offset property, which is equivalent to the border-box value
var valueIsBorderBox = true, var val,
val = name === "width" ? elem.offsetWidth : elem.offsetHeight, valueIsBorderBox = true,
styles = getStyles( elem ), styles = getStyles( elem ),
isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
// Support: IE <=11 only
// Running getBoundingClientRect on a disconnected node
// in IE throws an error.
if ( elem.getClientRects().length ) {
val = elem.getBoundingClientRect()[ name ];
}
// Some non-html elements return undefined for offsetWidth, so check for null/undefined // Some non-html elements return undefined for offsetWidth, so check for null/undefined
// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
...@@ -160,66 +165,6 @@ function getWidthOrHeight( elem, name, extra ) { ...@@ -160,66 +165,6 @@ function getWidthOrHeight( elem, name, extra ) {
) + "px"; ) + "px";
} }
function showHide( elements, show ) {
var display, elem, hidden,
values = [],
index = 0,
length = elements.length;
for ( ; index < length; index++ ) {
elem = elements[ index ];
if ( !elem.style ) {
continue;
}
values[ index ] = dataPriv.get( elem, "olddisplay" );
display = elem.style.display;
if ( show ) {
// Reset the inline display of this element to learn if it is
// being hidden by cascaded rules or not
if ( !values[ index ] && display === "none" ) {
elem.style.display = "";
}
// Set elements which have been overridden with display: none
// in a stylesheet to whatever the default browser style is
// for such an element
if ( elem.style.display === "" && isHidden( elem ) ) {
values[ index ] = dataPriv.access(
elem,
"olddisplay",
defaultDisplay( elem.nodeName )
);
}
} else {
hidden = isHidden( elem );
if ( display !== "none" || !hidden ) {
dataPriv.set(
elem,
"olddisplay",
hidden ? display : jQuery.css( elem, "display" )
);
}
}
}
// Set the display of most of the elements in a second loop
// to avoid the constant reflow
for ( index = 0; index < length; index++ ) {
elem = elements[ index ];
if ( !elem.style ) {
continue;
}
if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
elem.style.display = show ? values[ index ] || "" : "none";
}
}
return elements;
}
jQuery.extend( { jQuery.extend( {
// Add in style property hooks for overriding the default // Add in style property hooks for overriding the default
...@@ -301,7 +246,6 @@ jQuery.extend( { ...@@ -301,7 +246,6 @@ jQuery.extend( {
value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
} }
// Support: IE9-11+
// background-* props affect original clone's values // background-* props affect original clone's values
if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
style[ name ] = "inherit"; style[ name ] = "inherit";
...@@ -371,7 +315,14 @@ jQuery.each( [ "height", "width" ], function( i, name ) { ...@@ -371,7 +315,14 @@ jQuery.each( [ "height", "width" ], function( i, name ) {
// Certain elements can have dimension info if we invisibly show them // Certain elements can have dimension info if we invisibly show them
// but it must have a current display style that would benefit // but it must have a current display style that would benefit
return rdisplayswap.test( jQuery.css( elem, "display" ) ) && return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
elem.offsetWidth === 0 ?
// Support: Safari 8+
// Table columns in Safari have non-zero offsetWidth & zero
// getBoundingClientRect().width unless display is changed.
// Support: IE <=11 only
// Running getBoundingClientRect on a disconnected node
// in IE throws an error.
( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
swap( elem, cssShow, function() { swap( elem, cssShow, function() {
return getWidthOrHeight( elem, name, extra ); return getWidthOrHeight( elem, name, extra );
} ) : } ) :
...@@ -416,16 +367,6 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, ...@@ -416,16 +367,6 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
} }
); );
// Support: Android 2.3
jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
function( elem, computed ) {
if ( computed ) {
return swap( elem, { "display": "inline-block" },
curCSS, [ elem, "marginRight" ] );
}
}
);
// These hooks are used by animate to expand properties // These hooks are used by animate to expand properties
jQuery.each( { jQuery.each( {
margin: "", margin: "",
...@@ -476,25 +417,6 @@ jQuery.fn.extend( { ...@@ -476,25 +417,6 @@ jQuery.fn.extend( {
jQuery.style( elem, name, value ) : jQuery.style( elem, name, value ) :
jQuery.css( elem, name ); jQuery.css( elem, name );
}, name, value, arguments.length > 1 ); }, name, value, arguments.length > 1 );
},
show: function() {
return showHide( this, true );
},
hide: function() {
return showHide( this );
},
toggle: function( state ) {
if ( typeof state === "boolean" ) {
return state ? this.show() : this.hide();
}
return this.each( function() {
if ( isHidden( this ) ) {
jQuery( this ).show();
} else {
jQuery( this ).hide();
}
} );
} }
} ); } );
......
define( function() { define( function() {
"use strict";
function addGetHookIf( conditionFn, hookFn ) { function addGetHookIf( conditionFn, hookFn ) {
// Define the hook, we'll check on the first run if it's really needed. // Define the hook, we'll check on the first run if it's really needed.
......
...@@ -3,6 +3,8 @@ define( [ ...@@ -3,6 +3,8 @@ define( [
"../var/rcssNum" "../var/rcssNum"
], function( jQuery, rcssNum ) { ], function( jQuery, rcssNum ) {
"use strict";
function adjustCSS( elem, prop, valueParts, tween ) { function adjustCSS( elem, prop, valueParts, tween ) {
var adjusted, var adjusted,
scale = 1, scale = 1,
......
...@@ -7,29 +7,28 @@ define( [ ...@@ -7,29 +7,28 @@ define( [
"../selector" // Get jQuery.contains "../selector" // Get jQuery.contains
], function( jQuery, rnumnonpx, rmargin, getStyles, support ) { ], function( jQuery, rnumnonpx, rmargin, getStyles, support ) {
"use strict";
function curCSS( elem, name, computed ) { function curCSS( elem, name, computed ) {
var width, minWidth, maxWidth, ret, var width, minWidth, maxWidth, ret,
style = elem.style; style = elem.style;
computed = computed || getStyles( elem ); computed = computed || getStyles( elem );
ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
// Support: Opera 12.1x only
// Fall back to style even without computed
// computed is undefined for elems on document fragments
if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
ret = jQuery.style( elem, name );
}
// Support: IE9 // Support: IE <=9 only
// getPropertyValue is only needed for .css('filter') (#12537) // getPropertyValue is only needed for .css('filter') (#12537)
if ( computed ) { if ( computed ) {
ret = computed.getPropertyValue( name ) || computed[ name ];
if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
ret = jQuery.style( elem, name );
}
// A tribute to the "awesome hack by Dean Edwards" // A tribute to the "awesome hack by Dean Edwards"
// Android Browser returns percentage for some values, // Android Browser returns percentage for some values,
// but width seems to be reliably pixels. // but width seems to be reliably pixels.
// This is against the CSSOM draft spec: // This is against the CSSOM draft spec:
// http://dev.w3.org/csswg/cssom/#resolved-values // https://drafts.csswg.org/cssom/#resolved-values
if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
// Remember the original values // Remember the original values
...@@ -50,7 +49,7 @@ function curCSS( elem, name, computed ) { ...@@ -50,7 +49,7 @@ function curCSS( elem, name, computed ) {
return ret !== undefined ? return ret !== undefined ?
// Support: IE9-11+ // Support: IE <=9 - 11 only
// IE returns zIndex value as an integer. // IE returns zIndex value as an integer.
ret + "" : ret + "" :
ret; ret;
......
define( [
"../core",
"../var/document",
"../manipulation" // appendTo
], function( jQuery, document ) {
var iframe,
elemdisplay = {
// Support: Firefox
// We have to pre-define these values for FF (#10227)
HTML: "block",
BODY: "block"
};
/**
* Retrieve the actual display of a element
* @param {String} name nodeName of the element
* @param {Object} doc Document object
*/
// Called only from within defaultDisplay
function actualDisplay( name, doc ) {
var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
display = jQuery.css( elem[ 0 ], "display" );
// We don't have any data stored on the element,
// so use "detach" method as fast way to get rid of the element
elem.detach();
return display;
}
/**
* Try to determine the default display value of an element
* @param {String} nodeName
*/
function defaultDisplay( nodeName ) {
var doc = document,
display = elemdisplay[ nodeName ];
if ( !display ) {
display = actualDisplay( nodeName, doc );
// If the simple way fails, read from inside an iframe
if ( display === "none" || !display ) {
// Use the already-created iframe if possible
iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
.appendTo( doc.documentElement );
// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
doc = iframe[ 0 ].contentDocument;
// Support: IE
doc.write();
doc.close();
display = actualDisplay( nodeName, doc );
iframe.detach();
}
// Store the correct default display
elemdisplay[ nodeName ] = display;
}
return display;
}
return defaultDisplay;
} );
...@@ -3,16 +3,13 @@ define( [ ...@@ -3,16 +3,13 @@ define( [
"../selector" "../selector"
], function( jQuery ) { ], function( jQuery ) {
jQuery.expr.filters.hidden = function( elem ) { "use strict";
return !jQuery.expr.filters.visible( elem );
};
jQuery.expr.filters.visible = function( elem ) {
// Support: Opera <= 12.12 jQuery.expr.pseudos.hidden = function( elem ) {
// Opera reports offsetWidths and offsetHeights less than zero on some elements return !jQuery.expr.pseudos.visible( elem );
// Use OR instead of AND as the element is not visible if either is true };
// See tickets #10406 and #13132 jQuery.expr.pseudos.visible = function( elem ) {
return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
}; };
} ); } );
define( [ define( [
"../data/var/dataPriv" "../core",
], function( dataPriv ) { "../data/var/dataPriv",
"../css/var/isHiddenWithinTree"
], function( jQuery, dataPriv, isHiddenWithinTree ) {
"use strict";
var defaultDisplayMap = {};
function getDefaultDisplay( elem ) {
var temp,
doc = elem.ownerDocument,
nodeName = elem.nodeName,
display = defaultDisplayMap[ nodeName ];
if ( display ) {
return display;
}
temp = doc.body.appendChild( doc.createElement( nodeName ) ),
display = jQuery.css( temp, "display" );
temp.parentNode.removeChild( temp );
if ( display === "none" ) {
display = "block";
}
defaultDisplayMap[ nodeName ] = display;
return display;
}
function showHide( elements, show ) { function showHide( elements, show ) {
var display, elem, var display, elem,
...@@ -17,23 +46,30 @@ function showHide( elements, show ) { ...@@ -17,23 +46,30 @@ function showHide( elements, show ) {
display = elem.style.display; display = elem.style.display;
if ( show ) { if ( show ) {
if ( display === "none" ) {
// Restore a pre-hide() value if we have one // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
values[ index ] = dataPriv.get( elem, "display" ) || ""; // check is required in this first loop unless we have a nonempty display value (either
// inline or about-to-be-restored)
if ( display === "none" ) {
values[ index ] = dataPriv.get( elem, "display" ) || null;
if ( !values[ index ] ) {
elem.style.display = "";
}
}
if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
values[ index ] = getDefaultDisplay( elem );
} }
} else { } else {
if ( display !== "none" ) { if ( display !== "none" ) {
values[ index ] = "none"; values[ index ] = "none";
// Remember the value we're replacing // Remember what we're overwriting
dataPriv.set( elem, "display", display ); dataPriv.set( elem, "display", display );
} }
} }
} }
// Set the display of the elements in a second loop // Set the display of the elements in a second loop to avoid constant reflow
// to avoid the constant reflow
for ( index = 0; index < length; index++ ) { for ( index = 0; index < length; index++ ) {
if ( values[ index ] != null ) { if ( values[ index ] != null ) {
elements[ index ].style.display = values[ index ]; elements[ index ].style.display = values[ index ];
...@@ -43,6 +79,27 @@ function showHide( elements, show ) { ...@@ -43,6 +79,27 @@ function showHide( elements, show ) {
return elements; return elements;
} }
return showHide; jQuery.fn.extend( {
show: function() {
return showHide( this, true );
},
hide: function() {
return showHide( this );
},
toggle: function( state ) {
if ( typeof state === "boolean" ) {
return state ? this.show() : this.hide();
}
return this.each( function() {
if ( isHiddenWithinTree( this ) ) {
jQuery( this ).show();
} else {
jQuery( this ).hide();
}
} );
}
} );
return showHide;
} ); } );
...@@ -5,34 +5,21 @@ define( [ ...@@ -5,34 +5,21 @@ define( [
"../var/support" "../var/support"
], function( jQuery, document, documentElement, support ) { ], function( jQuery, document, documentElement, support ) {
( function() { "use strict";
var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
container = document.createElement( "div" ),
div = document.createElement( "div" );
// Finish early in limited (non-browser) environments
if ( !div.style ) {
return;
}
// Support: IE9-11+
// Style of cloned element affects source element cloned (#8908)
div.style.backgroundClip = "content-box";
div.cloneNode( true ).style.backgroundClip = "";
support.clearCloneStyle = div.style.backgroundClip === "content-box";
container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + ( function() {
"padding:0;margin-top:1px;position:absolute";
container.appendChild( div );
// Executing both pixelPosition & boxSizingReliable tests require only one layout // Executing both pixelPosition & boxSizingReliable tests require only one layout
// so they're executed at the same time to save the second computation. // so they're executed at the same time to save the second computation.
function computeStyleTests() { function computeStyleTests() {
div.style.cssText =
// Support: Firefox<29, Android 2.3 // This is a singleton, we need to execute it only once
// Vendor-prefix box-sizing if ( !div ) {
"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + return;
}
div.style.cssText =
"box-sizing:border-box;" +
"position:relative;display:block;" + "position:relative;display:block;" +
"margin:auto;border:1px;padding:1px;" + "margin:auto;border:1px;padding:1px;" +
"top:1%;width:50%"; "top:1%;width:50%";
...@@ -41,6 +28,8 @@ define( [ ...@@ -41,6 +28,8 @@ define( [
var divStyle = window.getComputedStyle( div ); var divStyle = window.getComputedStyle( div );
pixelPositionVal = divStyle.top !== "1%"; pixelPositionVal = divStyle.top !== "1%";
// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
reliableMarginLeftVal = divStyle.marginLeft === "2px"; reliableMarginLeftVal = divStyle.marginLeft === "2px";
boxSizingReliableVal = divStyle.width === "4px"; boxSizingReliableVal = divStyle.width === "4px";
...@@ -50,68 +39,47 @@ define( [ ...@@ -50,68 +39,47 @@ define( [
pixelMarginRightVal = divStyle.marginRight === "4px"; pixelMarginRightVal = divStyle.marginRight === "4px";
documentElement.removeChild( container ); documentElement.removeChild( container );
// Nullify the div so it wouldn't be stored in the memory and
// it will also be a sign that checks already performed
div = null;
} }
var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
container = document.createElement( "div" ),
div = document.createElement( "div" );
// Finish early in limited (non-browser) environments
if ( !div.style ) {
return;
}
// Support: IE <=9 - 11 only
// Style of cloned element affects source element cloned (#8908)
div.style.backgroundClip = "content-box";
div.cloneNode( true ).style.backgroundClip = "";
support.clearCloneStyle = div.style.backgroundClip === "content-box";
container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
"padding:0;margin-top:1px;position:absolute";
container.appendChild( div );
jQuery.extend( support, { jQuery.extend( support, {
pixelPosition: function() { 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.
computeStyleTests(); computeStyleTests();
return pixelPositionVal; return pixelPositionVal;
}, },
boxSizingReliable: function() { boxSizingReliable: function() {
if ( boxSizingReliableVal == null ) {
computeStyleTests(); computeStyleTests();
}
return boxSizingReliableVal; return boxSizingReliableVal;
}, },
pixelMarginRight: function() { 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.
if ( boxSizingReliableVal == null ) {
computeStyleTests(); computeStyleTests();
}
return pixelMarginRightVal; return pixelMarginRightVal;
}, },
reliableMarginLeft: function() { reliableMarginLeft: function() {
// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
if ( boxSizingReliableVal == null ) {
computeStyleTests(); computeStyleTests();
}
return reliableMarginLeftVal; return reliableMarginLeftVal;
},
reliableMarginRight: function() {
// Support: Android 2.3
// Check if div with explicit width and no margin-right incorrectly
// gets computed margin-right based on width of container. (#3333)
// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
// This support function is only executed once so no memoizing is needed.
var ret,
marginDiv = div.appendChild( document.createElement( "div" ) );
// 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;" +
"display:block;margin:0;border:0;padding:0";
marginDiv.style.marginRight = marginDiv.style.width = "0";
div.style.width = "1px";
documentElement.appendChild( container );
ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );
documentElement.removeChild( container );
div.removeChild( marginDiv );
return ret;
} }
} ); } );
} )(); } )();
......
define( function() { define( function() {
"use strict";
return [ "Top", "Right", "Bottom", "Left" ]; return [ "Top", "Right", "Bottom", "Left" ];
} ); } );
define( function() { define( function() {
"use strict";
return function( elem ) { return function( elem ) {
// Support: IE<=11+, Firefox<=30+ (#15098, #14150) // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
// IE throws on elements created in popups // IE throws on elements created in popups
// FF meanwhile throws on frame elements through "defaultView.getComputedStyle" // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
var view = elem.ownerDocument.defaultView; var view = elem.ownerDocument.defaultView;
......
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 );
};
} );
define( [
"../../core",
"../../selector"
// css is assumed
], function( jQuery ) {
"use strict";
// isHiddenWithinTree reports if an element has a non-"none" display style (inline and/or
// through the CSS cascade), which is useful in deciding whether or not to make it visible.
// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:
// * A hidden ancestor does not force an element to be classified as hidden.
// * Being disconnected from the document does not force an element to be classified as hidden.
// These differences improve the behavior of .toggle() et al. when applied to elements that are
// detached or contained within hidden ancestors (gh-2404, gh-2863).
return function( elem, el ) {
// isHiddenWithinTree might be called from jQuery#filter function;
// in that case, element will be second argument
elem = el || elem;
// Inline style trumps all
return elem.style.display === "none" ||
elem.style.display === "" &&
// Otherwise, check computed style
// Support: Firefox <=43 - 45
// Disconnected elements can have computed display: none, so first confirm that elem is
// in the document.
jQuery.contains( elem.ownerDocument, elem ) &&
jQuery.css( elem, "display" ) === "none";
};
} );
define( function() { define( function() {
"use strict";
return ( /^margin/ ); return ( /^margin/ );
} ); } );
define( [ define( [
"../../var/pnum" "../../var/pnum"
], function( pnum ) { ], function( pnum ) {
"use strict";
return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
} ); } );
define( function() { define( function() {
"use strict";
// A method for quickly swapping in/out CSS properties to get correct calculations. // A method for quickly swapping in/out CSS properties to get correct calculations.
return function( elem, options, callback, args ) { return function( elem, options, callback, args ) {
var ret, name, var ret, name,
......
...@@ -5,6 +5,8 @@ define( [ ...@@ -5,6 +5,8 @@ define( [
"./data/var/dataUser" "./data/var/dataUser"
], function( jQuery, access, dataPriv, dataUser ) { ], function( jQuery, access, dataPriv, dataUser ) {
"use strict";
// Implementation Summary // Implementation Summary
// //
// 1. Enforce API surface and semantic compatibility with 1.9.x branch // 1. Enforce API surface and semantic compatibility with 1.9.x branch
...@@ -35,7 +37,7 @@ function dataAttr( elem, key, data ) { ...@@ -35,7 +37,7 @@ function dataAttr( elem, key, data ) {
// Only convert to a number if it doesn't change the string // Only convert to a number if it doesn't change the string
+data + "" === data ? +data : +data + "" === data ? +data :
rbrace.test( data ) ? jQuery.parseJSON( data ) : rbrace.test( data ) ? JSON.parse( data ) :
data; data;
} catch ( e ) {} } catch ( e ) {}
...@@ -87,7 +89,7 @@ jQuery.fn.extend( { ...@@ -87,7 +89,7 @@ jQuery.fn.extend( {
i = attrs.length; i = attrs.length;
while ( i-- ) { while ( i-- ) {
// Support: IE11+ // Support: IE 11 only
// The attrs elements can be null (#14894) // The attrs elements can be null (#14894)
if ( attrs[ i ] ) { if ( attrs[ i ] ) {
name = attrs[ i ].name; name = attrs[ i ].name;
...@@ -112,7 +114,7 @@ jQuery.fn.extend( { ...@@ -112,7 +114,7 @@ jQuery.fn.extend( {
} }
return access( this, function( value ) { return access( this, function( value ) {
var data, camelKey; var data;
// The calling jQuery object (element matches) is not empty // The calling jQuery object (element matches) is not empty
// (and therefore has an element appears at this[ 0 ]) and the // (and therefore has an element appears at this[ 0 ]) and the
...@@ -122,29 +124,15 @@ jQuery.fn.extend( { ...@@ -122,29 +124,15 @@ jQuery.fn.extend( {
if ( elem && value === undefined ) { if ( elem && value === undefined ) {
// Attempt to get data from the cache // Attempt to get data from the cache
// with the key as-is // The key will always be camelCased in Data
data = dataUser.get( elem, key ) || data = dataUser.get( elem, key );
// Try to find dashed key if it exists (gh-2779)
// This is for 2.2.x only
dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() );
if ( data !== undefined ) {
return data;
}
camelKey = jQuery.camelCase( key );
// Attempt to get data from the cache
// with the key camelized
data = dataUser.get( elem, camelKey );
if ( data !== undefined ) { if ( data !== undefined ) {
return data; return data;
} }
// Attempt to "discover" the data in // Attempt to "discover" the data in
// HTML5 custom data-* attrs // HTML5 custom data-* attrs
data = dataAttr( elem, camelKey, undefined ); data = dataAttr( elem, key );
if ( data !== undefined ) { if ( data !== undefined ) {
return data; return data;
} }
...@@ -154,24 +142,10 @@ jQuery.fn.extend( { ...@@ -154,24 +142,10 @@ jQuery.fn.extend( {
} }
// Set the data... // Set the data...
camelKey = jQuery.camelCase( key );
this.each( function() { this.each( function() {
// First, attempt to store a copy or reference of any // We always store the camelCased key
// data that might've been store with a camelCased key.
var data = dataUser.get( this, camelKey );
// For HTML5 data-* attribute interop, we have to
// store property names with dashes in a camelCase form.
// This might not apply to all properties...*
dataUser.set( this, camelKey, value );
// *... In the case of properties that might _actually_
// have dashes, we need to also store a copy of that
// unchanged property.
if ( key.indexOf( "-" ) > -1 && data !== undefined ) {
dataUser.set( this, key, value ); dataUser.set( this, key, value );
}
} ); } );
}, null, value, arguments.length > 1, null, true ); }, null, value, arguments.length > 1, null, true );
}, },
......
...@@ -4,6 +4,8 @@ define( [ ...@@ -4,6 +4,8 @@ define( [
"./var/acceptData" "./var/acceptData"
], function( jQuery, rnotwhite, acceptData ) { ], function( jQuery, rnotwhite, acceptData ) {
"use strict";
function Data() { function Data() {
this.expando = jQuery.expando + Data.uid++; this.expando = jQuery.expando + Data.uid++;
} }
...@@ -12,35 +14,8 @@ Data.uid = 1; ...@@ -12,35 +14,8 @@ Data.uid = 1;
Data.prototype = { Data.prototype = {
register: function( owner, initial ) {
var value = initial || {};
// If it is a node unlikely to be stringify-ed or looped over
// use plain assignment
if ( owner.nodeType ) {
owner[ this.expando ] = value;
// Otherwise secure it in a non-enumerable, non-writable property
// configurability must be true to allow the property to be
// deleted with the delete operator
} else {
Object.defineProperty( owner, this.expando, {
value: value,
writable: true,
configurable: true
} );
}
return owner[ this.expando ];
},
cache: function( owner ) { cache: function( owner ) {
// We can accept data for non-element nodes in modern browsers,
// but we should not, see #8335.
// Always return an empty object.
if ( !acceptData( owner ) ) {
return {};
}
// Check if the owner object already has a cache // Check if the owner object already has a cache
var value = owner[ this.expando ]; var value = owner[ this.expando ];
...@@ -77,15 +52,16 @@ Data.prototype = { ...@@ -77,15 +52,16 @@ Data.prototype = {
cache = this.cache( owner ); cache = this.cache( owner );
// Handle: [ owner, key, value ] args // Handle: [ owner, key, value ] args
// Always use camelCase key (gh-2257)
if ( typeof data === "string" ) { if ( typeof data === "string" ) {
cache[ data ] = value; cache[ jQuery.camelCase( data ) ] = value;
// Handle: [ owner, { properties } ] args // Handle: [ owner, { properties } ] args
} else { } else {
// Copy the properties one-by-one to the cache object // Copy the properties one-by-one to the cache object
for ( prop in data ) { for ( prop in data ) {
cache[ prop ] = data[ prop ]; cache[ jQuery.camelCase( prop ) ] = data[ prop ];
} }
} }
return cache; return cache;
...@@ -93,10 +69,11 @@ Data.prototype = { ...@@ -93,10 +69,11 @@ Data.prototype = {
get: function( owner, key ) { get: function( owner, key ) {
return key === undefined ? return key === undefined ?
this.cache( owner ) : this.cache( owner ) :
owner[ this.expando ] && owner[ this.expando ][ key ];
// Always use camelCase key (gh-2257)
owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
}, },
access: function( owner, key, value ) { access: function( owner, key, value ) {
var stored;
// In cases where either: // In cases where either:
// //
...@@ -112,10 +89,7 @@ Data.prototype = { ...@@ -112,10 +89,7 @@ Data.prototype = {
if ( key === undefined || if ( key === undefined ||
( ( key && typeof key === "string" ) && value === undefined ) ) { ( ( key && typeof key === "string" ) && value === undefined ) ) {
stored = this.get( owner, key ); return this.get( owner, key );
return stored !== undefined ?
stored : this.get( owner, jQuery.camelCase( 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
...@@ -131,58 +105,45 @@ Data.prototype = { ...@@ -131,58 +105,45 @@ Data.prototype = {
return value !== undefined ? value : key; return value !== undefined ? value : key;
}, },
remove: function( owner, key ) { remove: function( owner, key ) {
var i, name, camel, var i,
cache = owner[ this.expando ]; cache = owner[ this.expando ];
if ( cache === undefined ) { if ( cache === undefined ) {
return; return;
} }
if ( key === undefined ) { if ( key !== undefined ) {
this.register( owner );
} else {
// Support array or space separated string of keys // Support array or space separated string of keys
if ( jQuery.isArray( key ) ) { if ( jQuery.isArray( key ) ) {
// If "name" is an array of keys... // If key is an array of keys...
// When data is initially created, via ("key", "val") signature, // We always set camelCase keys, so remove that.
// keys will be converted to camelCase. key = key.map( jQuery.camelCase );
// Since there is no way to tell _how_ a key was added, remove
// both plain key and camelCase key. #12786
// This will only penalize the array argument path.
name = key.concat( key.map( jQuery.camelCase ) );
} else {
camel = jQuery.camelCase( key );
// Try the string as a key before any manipulation
if ( key in cache ) {
name = [ key, camel ];
} else { } else {
key = jQuery.camelCase( key );
// If a key with the spaces exists, use it. // If a key with the spaces exists, use it.
// Otherwise, create an array by matching non-whitespace // Otherwise, create an array by matching non-whitespace
name = camel; key = key in cache ?
name = name in cache ? [ key ] :
[ name ] : ( name.match( rnotwhite ) || [] ); ( key.match( rnotwhite ) || [] );
}
} }
i = name.length; i = key.length;
while ( i-- ) { while ( i-- ) {
delete cache[ name[ i ] ]; delete cache[ key[ i ] ];
} }
} }
// Remove the expando if there's no more data // Remove the expando if there's no more data
if ( key === undefined || jQuery.isEmptyObject( cache ) ) { if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
// Support: Chrome <= 35-45+ // Support: Chrome <=35 - 45
// Webkit & Blink performance suffers when deleting properties // Webkit & Blink performance suffers when deleting properties
// from DOM nodes, so set to undefined instead // from DOM nodes, so set to undefined instead
// https://code.google.com/p/chromium/issues/detail?id=378607 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
if ( owner.nodeType ) { if ( owner.nodeType ) {
owner[ this.expando ] = undefined; owner[ this.expando ] = undefined;
} else { } else {
......
define( function() { define( function() {
"use strict";
/** /**
* Determines whether an object can have data * Determines whether an object can have data
*/ */
......
define( [ define( [
"../Data" "../Data"
], function( Data ) { ], function( Data ) {
"use strict";
return new Data(); return new Data();
} ); } );
define( [ define( [
"../Data" "../Data"
], function( Data ) { ], function( Data ) {
"use strict";
return new Data(); return new Data();
} ); } );
This diff is collapsed.
define( [
"../core",
"../deferred"
], function( jQuery ) {
"use strict";
// These usually indicate a programmer mistake during development,
// warn about them ASAP rather than swallowing them by default.
var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
jQuery.Deferred.exceptionHook = function( error, stack ) {
// Support: IE 8 - 9 only
// Console exists when dev tools are open, which can happen at any time
if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
}
};
} );
...@@ -2,6 +2,8 @@ define( [ ...@@ -2,6 +2,8 @@ define( [
"./core" "./core"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
jQuery.fn.extend( { jQuery.fn.extend( {
bind: function( types, data, fn ) { bind: function( types, data, fn ) {
...@@ -20,13 +22,9 @@ jQuery.fn.extend( { ...@@ -20,13 +22,9 @@ jQuery.fn.extend( {
return arguments.length === 1 ? return arguments.length === 1 ?
this.off( selector, "**" ) : this.off( selector, "**" ) :
this.off( types, selector || "**", fn ); this.off( types, selector || "**", fn );
},
size: function() {
return this.length;
} }
} ); } );
jQuery.fn.andSelf = jQuery.fn.addBack; jQuery.parseJSON = JSON.parse;
} ); } );
...@@ -4,6 +4,8 @@ define( [ ...@@ -4,6 +4,8 @@ define( [
"./css" "./css"
], function( jQuery, access ) { ], function( jQuery, access ) {
"use strict";
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
...@@ -19,10 +21,10 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { ...@@ -19,10 +21,10 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
if ( jQuery.isWindow( elem ) ) { if ( jQuery.isWindow( elem ) ) {
// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
// isn't a whole lot we can do. See pull request at this URL for discussion: return funcName.indexOf( "outer" ) === 0 ?
// https://github.com/jquery/jquery/pull/764 elem[ "inner" + name ] :
return elem.document.documentElement[ "client" + name ]; elem.document.documentElement[ "client" + name ];
} }
// Get document width or height // Get document width or height
...@@ -45,7 +47,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { ...@@ -45,7 +47,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
// Set width or height on the element // Set width or height on the element
jQuery.style( elem, type, value, extra ); jQuery.style( elem, type, value, extra );
}, type, chainable ? margin : undefined, chainable, null ); }, type, chainable ? margin : undefined, chainable );
}; };
} ); } );
} ); } );
......
...@@ -2,27 +2,38 @@ define( [ ...@@ -2,27 +2,38 @@ define( [
"./core", "./core",
"./var/document", "./var/document",
"./var/rcssNum", "./var/rcssNum",
"./css/var/cssExpand",
"./var/rnotwhite", "./var/rnotwhite",
"./css/var/isHidden", "./css/var/cssExpand",
"./css/var/isHiddenWithinTree",
"./css/var/swap",
"./css/adjustCSS", "./css/adjustCSS",
"./css/defaultDisplay",
"./data/var/dataPriv", "./data/var/dataPriv",
"./css/showHide",
"./core/init", "./core/init",
"./effects/Tween",
"./queue", "./queue",
"./css",
"./deferred", "./deferred",
"./traversing" "./traversing",
], function( jQuery, document, rcssNum, cssExpand, rnotwhite, "./manipulation",
isHidden, adjustCSS, defaultDisplay, dataPriv ) { "./css",
"./effects/Tween"
], function( jQuery, document, rcssNum, rnotwhite, cssExpand, isHiddenWithinTree, swap,
adjustCSS, dataPriv, showHide ) {
"use strict";
var var
fxNow, timerId, fxNow, timerId,
rfxtypes = /^(?:toggle|show|hide)$/, rfxtypes = /^(?:toggle|show|hide)$/,
rrun = /queueHooks$/; rrun = /queueHooks$/;
function raf() {
if ( timerId ) {
window.requestAnimationFrame( raf );
jQuery.fx.tick();
}
}
// Animations created synchronously will run synchronously // Animations created synchronously will run synchronously
function createFxNow() { function createFxNow() {
window.setTimeout( function() { window.setTimeout( function() {
...@@ -68,14 +79,15 @@ function createTween( value, prop, animation ) { ...@@ -68,14 +79,15 @@ function createTween( value, prop, animation ) {
function defaultPrefilter( elem, props, opts ) { function defaultPrefilter( elem, props, opts ) {
/* jshint validthis: true */ /* jshint validthis: true */
var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
isBox = "width" in props || "height" in props,
anim = this, anim = this,
orig = {}, orig = {},
style = elem.style, style = elem.style,
hidden = elem.nodeType && isHidden( elem ), hidden = elem.nodeType && isHiddenWithinTree( elem ),
dataShow = dataPriv.get( elem, "fxshow" ); dataShow = dataPriv.get( elem, "fxshow" );
// Handle queue: false promises // Queue-skipping animations hijack the fx hooks
if ( !opts.queue ) { if ( !opts.queue ) {
hooks = jQuery._queueHooks( elem, "fx" ); hooks = jQuery._queueHooks( elem, "fx" );
if ( hooks.unqueued == null ) { if ( hooks.unqueued == null ) {
...@@ -101,27 +113,79 @@ function defaultPrefilter( elem, props, opts ) { ...@@ -101,27 +113,79 @@ function defaultPrefilter( elem, props, opts ) {
} ); } );
} }
// Height/width overflow pass // Detect show/hide animations
if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { for ( prop in props ) {
value = props[ prop ];
if ( rfxtypes.test( value ) ) {
delete props[ prop ];
toggle = toggle || value === "toggle";
if ( value === ( hidden ? "hide" : "show" ) ) {
// Pretend to be hidden if this is a "show" and
// there is still data from a stopped show/hide
if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
hidden = true;
// Ignore all other no-op show/hide data
} else {
continue;
}
}
orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
}
}
// Bail out if this is a no-op like .hide().hide()
propTween = !jQuery.isEmptyObject( props );
if ( !propTween && jQuery.isEmptyObject( orig ) ) {
return;
}
// Restrict "overflow" and "display" styles during box animations
if ( isBox && elem.nodeType === 1 ) {
// Make sure that nothing sneaks out // Support: IE <=9 - 11, Edge 12 - 13
// Record all 3 overflow attributes because IE9-10 do not // Record all 3 overflow attributes because IE does not infer the shorthand
// change the overflow attribute when overflowX and // from identically-valued overflowX and overflowY
// overflowY are set to the same value
opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
// Set display property to inline-block for height/width // Identify a display type, preferring old show/hide data over the CSS cascade
// animations on inline elements that are having width/height animated restoreDisplay = dataShow && dataShow.display;
if ( restoreDisplay == null ) {
restoreDisplay = dataPriv.get( elem, "display" );
}
display = jQuery.css( elem, "display" ); display = jQuery.css( elem, "display" );
if ( display === "none" ) {
if ( restoreDisplay ) {
display = restoreDisplay;
} else {
// Test default display if display is currently "none" // Get nonempty value(s) by temporarily forcing visibility
checkDisplay = display === "none" ? showHide( [ elem ], true );
dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; restoreDisplay = elem.style.display || restoreDisplay;
display = jQuery.css( elem, "display" );
showHide( [ elem ] );
}
}
if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { // Animate inline elements as inline-block
if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
if ( jQuery.css( elem, "float" ) === "none" ) {
// Restore the original display value at the end of pure show/hide animations
if ( !propTween ) {
anim.done( function() {
style.display = restoreDisplay;
} );
if ( restoreDisplay == null ) {
display = style.display;
restoreDisplay = display === "none" ? "" : display;
}
}
style.display = "inline-block"; style.display = "inline-block";
} }
} }
}
if ( opts.overflow ) { if ( opts.overflow ) {
style.overflow = "hidden"; style.overflow = "hidden";
...@@ -132,73 +196,53 @@ function defaultPrefilter( elem, props, opts ) { ...@@ -132,73 +196,53 @@ function defaultPrefilter( elem, props, opts ) {
} ); } );
} }
// show/hide pass // Implement show/hide animations
for ( prop in props ) { propTween = false;
value = props[ prop ]; for ( prop in orig ) {
if ( rfxtypes.exec( value ) ) {
delete props[ prop ];
toggle = toggle || value === "toggle";
if ( value === ( hidden ? "hide" : "show" ) ) {
// If there is dataShow left over from a stopped hide or show
// and we are going to proceed with show, we should pretend to be hidden
if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
hidden = true;
} else {
continue;
}
}
orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
// Any non-fx value stops us from restoring the original display value
} else {
display = undefined;
}
}
if ( !jQuery.isEmptyObject( orig ) ) { // General show/hide setup for this element animation
if ( !propTween ) {
if ( dataShow ) { if ( dataShow ) {
if ( "hidden" in dataShow ) { if ( "hidden" in dataShow ) {
hidden = dataShow.hidden; hidden = dataShow.hidden;
} }
} else { } else {
dataShow = dataPriv.access( elem, "fxshow", {} ); dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
} }
// Store state if its toggle - enables .stop().toggle() to "reverse" // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
if ( toggle ) { if ( toggle ) {
dataShow.hidden = !hidden; dataShow.hidden = !hidden;
} }
// Show elements before animating them
if ( hidden ) { if ( hidden ) {
jQuery( elem ).show(); showHide( [ elem ], true );
} else {
anim.done( function() {
jQuery( elem ).hide();
} );
} }
/* jshint -W083 */
anim.done( function() { anim.done( function() {
var prop;
// The final step of a "hide" animation is actually hiding the element
if ( !hidden ) {
showHide( [ elem ] );
}
dataPriv.remove( elem, "fxshow" ); dataPriv.remove( elem, "fxshow" );
for ( prop in orig ) { for ( prop in orig ) {
jQuery.style( elem, prop, orig[ prop ] ); jQuery.style( elem, prop, orig[ prop ] );
} }
} ); } );
for ( prop in orig ) { }
tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
// Per-property setup
propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
if ( !( prop in dataShow ) ) { if ( !( prop in dataShow ) ) {
dataShow[ prop ] = tween.start; dataShow[ prop ] = propTween.start;
if ( hidden ) { if ( hidden ) {
tween.end = tween.start; propTween.end = propTween.start;
tween.start = prop === "width" || prop === "height" ? 1 : 0; propTween.start = 0;
}
} }
} }
// If this is a noop like .hide().hide(), restore an overwritten display value
} else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) {
style.display = display;
} }
} }
...@@ -256,7 +300,7 @@ function Animation( elem, properties, options ) { ...@@ -256,7 +300,7 @@ function Animation( elem, properties, options ) {
var currentTime = fxNow || createFxNow(), var currentTime = fxNow || createFxNow(),
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
// Support: Android 2.3 // Support: Android 2.3 only
// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
temp = remaining / animation.duration || 0, temp = remaining / animation.duration || 0,
percent = 1 - temp, percent = 1 - temp,
...@@ -355,6 +399,7 @@ function Animation( elem, properties, options ) { ...@@ -355,6 +399,7 @@ function Animation( elem, properties, options ) {
} }
jQuery.Animation = jQuery.extend( Animation, { jQuery.Animation = jQuery.extend( Animation, {
tweeners: { tweeners: {
"*": [ function( prop, value ) { "*": [ function( prop, value ) {
var tween = this.createTween( prop, value ); var tween = this.createTween( prop, value );
...@@ -401,9 +446,15 @@ jQuery.speed = function( speed, easing, fn ) { ...@@ -401,9 +446,15 @@ jQuery.speed = function( speed, easing, fn ) {
easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
}; };
opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? // Go to the end state if fx are off or if document is hidden
if ( jQuery.fx.off || document.hidden ) {
opt.duration = 0;
} else {
opt.duration = typeof opt.duration === "number" ?
opt.duration : opt.duration in jQuery.fx.speeds ? opt.duration : opt.duration in jQuery.fx.speeds ?
jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
}
// Normalize opt.queue - true/undefined/null -> "fx" // Normalize opt.queue - true/undefined/null -> "fx"
if ( opt.queue == null || opt.queue === true ) { if ( opt.queue == null || opt.queue === true ) {
...@@ -430,7 +481,7 @@ jQuery.fn.extend( { ...@@ -430,7 +481,7 @@ jQuery.fn.extend( {
fadeTo: function( speed, to, easing, callback ) { fadeTo: function( speed, to, easing, callback ) {
// Show any hidden elements after setting opacity to 0 // Show any hidden elements after setting opacity to 0
return this.filter( isHidden ).css( "opacity", 0 ).show() return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
// Animate to the value specified // Animate to the value specified
.end().animate( { opacity: to }, speed, easing, callback ); .end().animate( { opacity: to }, speed, easing, callback );
...@@ -607,12 +658,18 @@ jQuery.fx.timer = function( timer ) { ...@@ -607,12 +658,18 @@ jQuery.fx.timer = function( timer ) {
jQuery.fx.interval = 13; jQuery.fx.interval = 13;
jQuery.fx.start = function() { jQuery.fx.start = function() {
if ( !timerId ) { if ( !timerId ) {
timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); timerId = window.requestAnimationFrame ?
window.requestAnimationFrame( raf ) :
window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
} }
}; };
jQuery.fx.stop = function() { jQuery.fx.stop = function() {
if ( window.cancelAnimationFrame ) {
window.cancelAnimationFrame( timerId );
} else {
window.clearInterval( timerId ); window.clearInterval( timerId );
}
timerId = null; timerId = null;
}; };
......
...@@ -3,6 +3,8 @@ define( [ ...@@ -3,6 +3,8 @@ define( [
"../css" "../css"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
function Tween( elem, options, prop, end, easing ) { function Tween( elem, options, prop, end, easing ) {
return new Tween.prototype.init( elem, options, prop, end, easing ); return new Tween.prototype.init( elem, options, prop, end, easing );
} }
...@@ -93,7 +95,7 @@ Tween.propHooks = { ...@@ -93,7 +95,7 @@ Tween.propHooks = {
} }
}; };
// Support: IE9 // Support: IE <=9 only
// Panic based approach to setting things on disconnected nodes // Panic based approach to setting things on disconnected nodes
Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
set: function( tween ) { set: function( tween ) {
...@@ -115,7 +117,7 @@ jQuery.easing = { ...@@ -115,7 +117,7 @@ jQuery.easing = {
jQuery.fx = Tween.prototype.init; jQuery.fx = Tween.prototype.init;
// Back Compat <1.8 extension point // Back compat <1.8 extension point
jQuery.fx.step = {}; jQuery.fx.step = {};
} ); } );
...@@ -4,7 +4,9 @@ define( [ ...@@ -4,7 +4,9 @@ define( [
"../effects" "../effects"
], function( jQuery ) { ], function( jQuery ) {
jQuery.expr.filters.animated = function( elem ) { "use strict";
jQuery.expr.pseudos.animated = function( elem ) {
return jQuery.grep( jQuery.timers, function( fn ) { return jQuery.grep( jQuery.timers, function( fn ) {
return elem === fn.elem; return elem === fn.elem;
} ).length; } ).length;
......
define( [ define( [
"./core", "./core",
"./var/document", "./var/document",
"./var/documentElement",
"./var/rnotwhite", "./var/rnotwhite",
"./var/slice", "./var/slice",
"./data/var/dataPriv", "./data/var/dataPriv",
"./core/init", "./core/init",
"./selector" "./selector"
], function( jQuery, document, rnotwhite, slice, dataPriv ) { ], function( jQuery, document, documentElement, rnotwhite, slice, dataPriv ) {
"use strict";
var var
rkeyEvent = /^key/, rkeyEvent = /^key/,
...@@ -22,7 +25,7 @@ function returnFalse() { ...@@ -22,7 +25,7 @@ function returnFalse() {
return false; return false;
} }
// Support: IE9 // Support: IE <=9 only
// See #13393 for more info // See #13393 for more info
function safeActiveElement() { function safeActiveElement() {
try { try {
...@@ -118,6 +121,12 @@ jQuery.event = { ...@@ -118,6 +121,12 @@ jQuery.event = {
selector = handleObjIn.selector; selector = handleObjIn.selector;
} }
// Ensure that invalid selectors throw exceptions at attach time
// Evaluate against documentElement in case elem is a non-element node (e.g., document)
if ( selector ) {
jQuery.find.matchesSelector( documentElement, selector );
}
// Make sure that the handler has a unique ID, used to find/remove it later // Make sure that the handler has a unique ID, used to find/remove it later
if ( !handler.guid ) { if ( !handler.guid ) {
handler.guid = jQuery.guid++; handler.guid = jQuery.guid++;
...@@ -281,19 +290,23 @@ jQuery.event = { ...@@ -281,19 +290,23 @@ jQuery.event = {
} }
}, },
dispatch: function( event ) { dispatch: function( nativeEvent ) {
// Make a writable jQuery.Event from the native event object // Make a writable jQuery.Event from the native event object
event = jQuery.event.fix( event ); var event = jQuery.event.fix( nativeEvent );
var i, j, ret, matched, handleObj, var i, j, ret, matched, handleObj, handlerQueue,
handlerQueue = [], args = new Array( arguments.length ),
args = slice.call( arguments ),
handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
special = jQuery.event.special[ event.type ] || {}; special = jQuery.event.special[ event.type ] || {};
// Use the fix-ed jQuery.Event rather than the (read-only) native event // Use the fix-ed jQuery.Event rather than the (read-only) native event
args[ 0 ] = event; args[ 0 ] = event;
for ( i = 1; i < arguments.length; i++ ) {
args[ i ] = arguments[ i ];
}
event.delegateTarget = this; event.delegateTarget = this;
// Call the preDispatch hook for the mapped type, and let it bail if desired // Call the preDispatch hook for the mapped type, and let it bail if desired
...@@ -347,11 +360,11 @@ jQuery.event = { ...@@ -347,11 +360,11 @@ jQuery.event = {
delegateCount = handlers.delegateCount, delegateCount = handlers.delegateCount,
cur = event.target; cur = event.target;
// Support (at least): Chrome, IE9 // Support: IE <=9
// Find delegate handlers // Find delegate handlers
// Black-hole SVG <use> instance trees (#13180) // Black-hole SVG <use> instance trees (#13180)
// //
// Support: Firefox<=42+ // Support: Firefox <=42
// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
if ( delegateCount && cur.nodeType && if ( delegateCount && cur.nodeType &&
( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
...@@ -392,96 +405,38 @@ jQuery.event = { ...@@ -392,96 +405,38 @@ jQuery.event = {
return handlerQueue; return handlerQueue;
}, },
// Includes some event props shared by KeyEvent and MouseEvent addProp: function( name, hook ) {
props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + Object.defineProperty( jQuery.Event.prototype, name, {
"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), enumerable: true,
configurable: true,
fixHooks: {},
keyHooks: { get: jQuery.isFunction( hook ) ?
props: "char charCode key keyCode".split( " " ), function() {
filter: function( event, original ) { if ( this.originalEvent ) {
return hook( this.originalEvent );
// Add which for key events
if ( event.which == null ) {
event.which = original.charCode != null ? original.charCode : original.keyCode;
} }
} :
return event; function() {
if ( this.originalEvent ) {
return this.originalEvent[ name ];
} }
}, },
mouseHooks: { set: function( value ) {
props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + Object.defineProperty( this, name, {
"screenX screenY toElement" ).split( " " ), enumerable: true,
filter: function( event, original ) { configurable: true,
var eventDoc, doc, body, writable: true,
button = original.button; value: value
} );
// Calculate pageX/Y if missing and clientX/Y available
if ( event.pageX == null && original.clientX != null ) {
eventDoc = event.target.ownerDocument || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
event.pageX = original.clientX +
( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
( doc && doc.clientLeft || body && body.clientLeft || 0 );
event.pageY = original.clientY +
( doc && doc.scrollTop || body && body.scrollTop || 0 ) -
( doc && doc.clientTop || body && body.clientTop || 0 );
}
// Add which for click: 1 === left; 2 === middle; 3 === right
// Note: button is not normalized, so don't use it
if ( !event.which && button !== undefined ) {
event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
}
return event;
} }
} );
}, },
fix: function( event ) { fix: function( originalEvent ) {
if ( event[ jQuery.expando ] ) { return originalEvent[ jQuery.expando ] ?
return event; originalEvent :
} new jQuery.Event( originalEvent );
// Create a writable copy of the event object and normalize some properties
var i, prop, copy,
type = event.type,
originalEvent = event,
fixHook = this.fixHooks[ type ];
if ( !fixHook ) {
this.fixHooks[ type ] = fixHook =
rmouseEvent.test( type ) ? this.mouseHooks :
rkeyEvent.test( type ) ? this.keyHooks :
{};
}
copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
event = new jQuery.Event( originalEvent );
i = copy.length;
while ( i-- ) {
prop = copy[ i ];
event[ prop ] = originalEvent[ prop ];
}
// Support: Cordova 2.5 (WebKit) (#13255)
// All events should have a target; Cordova deviceready doesn't
if ( !event.target ) {
event.target = document;
}
// Support: Safari 6.0+, Chrome<28
// Target should not be a text node (#504, #13143)
if ( event.target.nodeType === 3 ) {
event.target = event.target.parentNode;
}
return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
}, },
special: { special: {
...@@ -564,11 +519,21 @@ jQuery.Event = function( src, props ) { ...@@ -564,11 +519,21 @@ jQuery.Event = function( src, props ) {
this.isDefaultPrevented = src.defaultPrevented || this.isDefaultPrevented = src.defaultPrevented ||
src.defaultPrevented === undefined && src.defaultPrevented === undefined &&
// Support: Android<4.0 // Support: Android <=2.3 only
src.returnValue === false ? src.returnValue === false ?
returnTrue : returnTrue :
returnFalse; returnFalse;
// Create target properties
// Support: Safari <=6 - 7 only
// Target should not be a text node (#504, #13143)
this.target = ( src.target.nodeType === 3 ) ?
src.target.parentNode :
src.target;
this.currentTarget = src.currentTarget;
this.relatedTarget = src.relatedTarget;
// Event type // Event type
} else { } else {
this.type = src; this.type = src;
...@@ -587,7 +552,7 @@ jQuery.Event = function( src, props ) { ...@@ -587,7 +552,7 @@ jQuery.Event = function( src, props ) {
}; };
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = { jQuery.Event.prototype = {
constructor: jQuery.Event, constructor: jQuery.Event,
isDefaultPrevented: returnFalse, isDefaultPrevented: returnFalse,
...@@ -626,13 +591,60 @@ jQuery.Event.prototype = { ...@@ -626,13 +591,60 @@ jQuery.Event.prototype = {
} }
}; };
// Includes all common event props including KeyEvent and MouseEvent specific props
jQuery.each( {
altKey: true,
bubbles: true,
cancelable: true,
changedTouches: true,
ctrlKey: true,
detail: true,
eventPhase: true,
metaKey: true,
pageX: true,
pageY: true,
shiftKey: true,
view: true,
"char": true,
charCode: true,
key: true,
keyCode: true,
button: true,
buttons: true,
clientX: true,
clientY: true,
offsetX: true,
offsetY: true,
screenX: true,
screenY: true,
targetTouches: true,
toElement: true,
touches: true,
which: function( event ) {
var button = event.button;
// Add which for key events
if ( event.which == null && rkeyEvent.test( event.type ) ) {
return event.charCode != null ? event.charCode : event.keyCode;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
return ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
}
return event.which;
}
}, jQuery.event.addProp );
// Create mouseenter/leave events using mouseover/out and event-time checks // Create mouseenter/leave events using mouseover/out and event-time checks
// so that event delegation works in jQuery. // so that event delegation works in jQuery.
// Do the same for pointerenter/pointerleave and pointerover/pointerout // Do the same for pointerenter/pointerleave and pointerover/pointerout
// //
// Support: Safari 7 only // Support: Safari 7 only
// Safari sends mouseenter too often; see: // Safari sends mouseenter too often; see:
// https://code.google.com/p/chromium/issues/detail?id=470258 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
// for the description of the bug (it existed in older Chrome versions as well). // for the description of the bug (it existed in older Chrome versions as well).
jQuery.each( { jQuery.each( {
mouseenter: "mouseover", mouseenter: "mouseover",
...@@ -663,6 +675,7 @@ jQuery.each( { ...@@ -663,6 +675,7 @@ jQuery.each( {
} ); } );
jQuery.fn.extend( { jQuery.fn.extend( {
on: function( types, selector, data, fn ) { on: function( types, selector, data, fn ) {
return on( this, types, selector, data, fn ); return on( this, types, selector, data, fn );
}, },
......
...@@ -3,6 +3,8 @@ define( [ ...@@ -3,6 +3,8 @@ define( [
"../event" "../event"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
// Attach a bunch of functions for handling common AJAX events // Attach a bunch of functions for handling common AJAX events
jQuery.each( [ jQuery.each( [
"ajaxStart", "ajaxStart",
......
...@@ -5,9 +5,11 @@ define( [ ...@@ -5,9 +5,11 @@ define( [
"./trigger" "./trigger"
], function( jQuery ) { ], function( jQuery ) {
jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + "use strict";
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error contextmenu" ).split( " " ), "change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( i, name ) { function( i, name ) {
// Handle event binding // Handle event binding
......
...@@ -7,14 +7,16 @@ define( [ ...@@ -7,14 +7,16 @@ define( [
"./trigger" "./trigger"
], function( jQuery, dataPriv, support ) { ], function( jQuery, dataPriv, support ) {
// Support: Firefox "use strict";
// Support: Firefox <=44
// Firefox doesn't have focus(in | out) events // Firefox doesn't have focus(in | out) events
// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
// //
// Support: Chrome, Safari // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
// focus(in | out) events fire after focus & blur events, // focus(in | out) events fire after focus & blur events,
// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order // 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 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
if ( !support.focusin ) { if ( !support.focusin ) {
jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
......
...@@ -2,6 +2,8 @@ define( [ ...@@ -2,6 +2,8 @@ define( [
"../var/support" "../var/support"
], function( support ) { ], function( support ) {
"use strict";
support.focusin = "onfocusin" in window; support.focusin = "onfocusin" in window;
return support; return support;
......
...@@ -8,6 +8,8 @@ define( [ ...@@ -8,6 +8,8 @@ define( [
"../event" "../event"
], function( jQuery, document, dataPriv, acceptData, hasOwn ) { ], function( jQuery, document, dataPriv, acceptData, hasOwn ) {
"use strict";
var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
jQuery.extend( jQuery.event, { jQuery.extend( jQuery.event, {
...@@ -121,7 +123,7 @@ jQuery.extend( jQuery.event, { ...@@ -121,7 +123,7 @@ jQuery.extend( jQuery.event, {
special._default.apply( eventPath.pop(), data ) === false ) && special._default.apply( eventPath.pop(), data ) === false ) &&
acceptData( elem ) ) { acceptData( elem ) ) {
// Call a native DOM method on the target with the same name name as the event. // Call a native DOM method on the target with the same name as the event.
// Don't do default actions on window, that's where global variables be (#6170) // Don't do default actions on window, that's where global variables be (#6170)
if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
......
...@@ -2,6 +2,8 @@ define( [ ...@@ -2,6 +2,8 @@ define( [
"../core" "../core"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
// Register as a named AMD module, since jQuery can be concatenated with other // Register as a named AMD module, since jQuery can be concatenated with other
// files that may use define, but not via a proper concatenation script that // files that may use define, but not via a proper concatenation script that
// understands anonymous AMD modules. A named AMD is safest and most robust // understands anonymous AMD modules. A named AMD is safest and most robust
......
/* ExcludeStart */
// This file is included in a different way from all the others
// so the "use strict" pragma is not needed.
/* jshint strict: false */
/* ExcludeEnd */
var var
// Map over jQuery in case of overwrite // Map over jQuery in case of overwrite
......
/*!
* jQuery JavaScript Library v@VERSION
* http://jquery.com/
*
* Includes Sizzle.js
* http://sizzlejs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: @DATE
*/
(function( global, factory ) {
if ( typeof module === "object" && typeof module.exports === "object" ) {
// For CommonJS and CommonJS-like environments where a proper `window`
// is present, execute the factory and get jQuery.
// For environments that do not have a `window` with a `document`
// (such as Node.js), expose a factory as module.exports.
// This accentuates the need for the creation of a real `window`.
// e.g. var jQuery = require("jquery")(window);
// See ticket #14549 for more info.
module.exports = global.document ?
factory( global, true ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};
} else {
factory( global );
}
// Pass this if window is not defined yet
}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
// Support: Firefox 18+
// Can't be in strict mode, several libs including ASP.NET trace
// the stack via arguments.caller.callee and Firefox dies if
// you try to trace through "use strict" call chains. (#13335)
//"use strict";
...@@ -4,6 +4,7 @@ define( [ ...@@ -4,6 +4,7 @@ define( [
"./traversing", "./traversing",
"./callbacks", "./callbacks",
"./deferred", "./deferred",
"./deferred/exceptionHook",
"./core/ready", "./core/ready",
"./data", "./data",
"./queue", "./queue",
...@@ -32,6 +33,8 @@ define( [ ...@@ -32,6 +33,8 @@ define( [
"./exports/amd" "./exports/amd"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
return ( window.jQuery = window.$ = jQuery ); return ( window.jQuery = window.$ = jQuery );
} ); } );
...@@ -15,6 +15,7 @@ define( [ ...@@ -15,6 +15,7 @@ define( [
"./data/var/dataPriv", "./data/var/dataPriv",
"./data/var/dataUser", "./data/var/dataUser",
"./data/var/acceptData", "./data/var/acceptData",
"./core/DOMEval",
"./core/init", "./core/init",
"./traversing", "./traversing",
...@@ -23,12 +24,14 @@ define( [ ...@@ -23,12 +24,14 @@ define( [
], function( jQuery, concat, push, access, ], function( jQuery, concat, push, access,
rcheckableType, rtagName, rscriptType, rcheckableType, rtagName, rscriptType,
wrapMap, getAll, setGlobalEval, buildFragment, support, wrapMap, getAll, setGlobalEval, buildFragment, support,
dataPriv, dataUser, acceptData ) { dataPriv, dataUser, acceptData, DOMEval ) {
"use strict";
var var
rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
// Support: IE 10-11, Edge 10240+ // Support: IE <=10 - 11, Edge 12 - 13
// In IE/Edge using regex groups here causes severe slowdowns. // In IE/Edge using regex groups here causes severe slowdowns.
// See https://connect.microsoft.com/IE/feedback/details/1736512/ // See https://connect.microsoft.com/IE/feedback/details/1736512/
rnoInnerhtml = /<script|<style|<link/i, rnoInnerhtml = /<script|<style|<link/i,
...@@ -38,14 +41,14 @@ var ...@@ -38,14 +41,14 @@ var
rscriptTypeMasked = /^true\/(.*)/, rscriptTypeMasked = /^true\/(.*)/,
rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
// Manipulating tables requires a tbody
function manipulationTarget( elem, content ) { function manipulationTarget( elem, content ) {
return jQuery.nodeName( elem, "table" ) && if ( jQuery.nodeName( elem, "table" ) &&
jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
}
elem.getElementsByTagName( "tbody" )[ 0 ] || return elem;
elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
elem;
} }
// Replace/restore the type attribute of script elements for safe DOM manipulation // Replace/restore the type attribute of script elements for safe DOM manipulation
...@@ -163,7 +166,7 @@ function domManip( collection, args, callback, ignored ) { ...@@ -163,7 +166,7 @@ function domManip( collection, args, callback, ignored ) {
// Keep references to cloned scripts for later restoration // Keep references to cloned scripts for later restoration
if ( hasScripts ) { if ( hasScripts ) {
// Support: Android<4.1, PhantomJS<2 // Support: Android <=4.0 only, PhantomJS 1 only
// push.apply(_, arraylike) throws on ancient WebKit // push.apply(_, arraylike) throws on ancient WebKit
jQuery.merge( scripts, getAll( node, "script" ) ); jQuery.merge( scripts, getAll( node, "script" ) );
} }
...@@ -192,7 +195,7 @@ function domManip( collection, args, callback, ignored ) { ...@@ -192,7 +195,7 @@ function domManip( collection, args, callback, ignored ) {
jQuery._evalUrl( node.src ); jQuery._evalUrl( node.src );
} }
} else { } else {
jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
} }
} }
} }
...@@ -238,7 +241,7 @@ jQuery.extend( { ...@@ -238,7 +241,7 @@ jQuery.extend( {
if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
!jQuery.isXMLDoc( elem ) ) { !jQuery.isXMLDoc( elem ) ) {
// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
destElements = getAll( clone ); destElements = getAll( clone );
srcElements = getAll( elem ); srcElements = getAll( elem );
...@@ -291,13 +294,13 @@ jQuery.extend( { ...@@ -291,13 +294,13 @@ jQuery.extend( {
} }
} }
// Support: Chrome <= 35-45+ // Support: Chrome <=35 - 45+
// Assign undefined instead of using delete, see Data#remove // Assign undefined instead of using delete, see Data#remove
elem[ dataPriv.expando ] = undefined; elem[ dataPriv.expando ] = undefined;
} }
if ( elem[ dataUser.expando ] ) { if ( elem[ dataUser.expando ] ) {
// Support: Chrome <= 35-45+ // Support: Chrome <=35 - 45+
// Assign undefined instead of using delete, see Data#remove // Assign undefined instead of using delete, see Data#remove
elem[ dataUser.expando ] = undefined; elem[ dataUser.expando ] = undefined;
} }
...@@ -307,10 +310,6 @@ jQuery.extend( { ...@@ -307,10 +310,6 @@ jQuery.extend( {
} ); } );
jQuery.fn.extend( { jQuery.fn.extend( {
// Keep domManip exposed until 3.0 (gh-2225)
domManip: domManip,
detach: function( selector ) { detach: function( selector ) {
return remove( this, selector, true ); return remove( this, selector, true );
}, },
...@@ -468,8 +467,8 @@ jQuery.each( { ...@@ -468,8 +467,8 @@ jQuery.each( {
elems = i === last ? this : this.clone( true ); elems = i === last ? this : this.clone( true );
jQuery( insert[ i ] )[ original ]( elems ); jQuery( insert[ i ] )[ original ]( elems );
// Support: QtWebKit // Support: Android <=4.0 only, PhantomJS 1 only
// .get() because push.apply(_, arraylike) throws // .get() because push.apply(_, arraylike) throws on ancient WebKit
push.apply( ret, elems.get() ); push.apply( ret, elems.get() );
} }
......
...@@ -2,6 +2,8 @@ define( [ ...@@ -2,6 +2,8 @@ define( [
"../ajax" "../ajax"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
jQuery._evalUrl = function( url ) { jQuery._evalUrl = function( url ) {
return jQuery.ajax( { return jQuery.ajax( {
url: url, url: url,
...@@ -9,6 +11,7 @@ jQuery._evalUrl = function( url ) { ...@@ -9,6 +11,7 @@ jQuery._evalUrl = function( url ) {
// Make this explicit, since user can override this through ajaxSetup (#11264) // Make this explicit, since user can override this through ajaxSetup (#11264)
type: "GET", type: "GET",
dataType: "script", dataType: "script",
cache: true,
async: false, async: false,
global: false, global: false,
"throws": true "throws": true
......
...@@ -7,6 +7,8 @@ define( [ ...@@ -7,6 +7,8 @@ define( [
"./setGlobalEval" "./setGlobalEval"
], function( jQuery, rtagName, rscriptType, wrapMap, getAll, setGlobalEval ) { ], function( jQuery, rtagName, rscriptType, wrapMap, getAll, setGlobalEval ) {
"use strict";
var rhtml = /<|&#?\w+;/; var rhtml = /<|&#?\w+;/;
function buildFragment( elems, context, scripts, selection, ignored ) { function buildFragment( elems, context, scripts, selection, ignored ) {
...@@ -24,7 +26,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { ...@@ -24,7 +26,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
// Add nodes directly // Add nodes directly
if ( jQuery.type( elem ) === "object" ) { if ( jQuery.type( elem ) === "object" ) {
// Support: Android<4.1, PhantomJS<2 // Support: Android <=4.0 only, PhantomJS 1 only
// push.apply(_, arraylike) throws on ancient WebKit // push.apply(_, arraylike) throws on ancient WebKit
jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
...@@ -47,7 +49,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { ...@@ -47,7 +49,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
tmp = tmp.lastChild; tmp = tmp.lastChild;
} }
// Support: Android<4.1, PhantomJS<2 // Support: Android <=4.0 only, PhantomJS 1 only
// push.apply(_, arraylike) throws on ancient WebKit // push.apply(_, arraylike) throws on ancient WebKit
jQuery.merge( nodes, tmp.childNodes ); jQuery.merge( nodes, tmp.childNodes );
......
...@@ -2,9 +2,11 @@ define( [ ...@@ -2,9 +2,11 @@ define( [
"../core" "../core"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
function getAll( context, tag ) { function getAll( context, tag ) {
// Support: IE9-11+ // Support: IE <=9 - 11 only
// Use typeof to avoid zero-argument method invocation on host objects (#15151) // Use typeof to avoid zero-argument method invocation on host objects (#15151)
var ret = typeof context.getElementsByTagName !== "undefined" ? var ret = typeof context.getElementsByTagName !== "undefined" ?
context.getElementsByTagName( tag || "*" ) : context.getElementsByTagName( tag || "*" ) :
......
...@@ -2,6 +2,8 @@ define( [ ...@@ -2,6 +2,8 @@ define( [
"../data/var/dataPriv" "../data/var/dataPriv"
], function( dataPriv ) { ], function( dataPriv ) {
"use strict";
// Mark scripts as having already been evaluated // Mark scripts as having already been evaluated
function setGlobalEval( elems, refElements ) { function setGlobalEval( elems, refElements ) {
var i = 0, var i = 0,
......
...@@ -3,12 +3,14 @@ define( [ ...@@ -3,12 +3,14 @@ define( [
"../var/support" "../var/support"
], function( document, support ) { ], function( document, support ) {
"use strict";
( function() { ( function() {
var fragment = document.createDocumentFragment(), var fragment = document.createDocumentFragment(),
div = fragment.appendChild( document.createElement( "div" ) ), div = fragment.appendChild( document.createElement( "div" ) ),
input = document.createElement( "input" ); input = document.createElement( "input" );
// Support: Android 4.0-4.3, Safari<=5.1 // Support: Android 4.0 - 4.3 only
// Check state lost if the name is set (#11217) // Check state lost if the name is set (#11217)
// Support: Windows Web Apps (WWA) // Support: Windows Web Apps (WWA)
// `name` and `type` must use .setAttribute for WWA (#14901) // `name` and `type` must use .setAttribute for WWA (#14901)
...@@ -18,11 +20,11 @@ define( [ ...@@ -18,11 +20,11 @@ define( [
div.appendChild( input ); div.appendChild( input );
// Support: Safari<=5.1, Android<4.2 // Support: Android <=4.1 only
// Older WebKit doesn't clone checked state correctly in fragments // Older WebKit doesn't clone checked state correctly in fragments
support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
// Support: IE<=11+ // Support: IE <=11 only
// Make sure textarea (and checkbox) defaultValue is properly cloned // Make sure textarea (and checkbox) defaultValue is properly cloned
div.innerHTML = "<textarea>x</textarea>"; div.innerHTML = "<textarea>x</textarea>";
support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
......
define( function() { define( function() {
"use strict";
return ( /^(?:checkbox|radio)$/i ); return ( /^(?:checkbox|radio)$/i );
} ); } );
define( function() { define( function() {
"use strict";
return ( /^$|\/(?:java|ecma)script/i ); return ( /^$|\/(?:java|ecma)script/i );
} ); } );
define( function() { define( function() {
return ( /<([\w:-]+)/ ); "use strict";
return ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
} ); } );
define( function() { define( function() {
"use strict";
// We have to close these tags to support XHTML (#13200) // We have to close these tags to support XHTML (#13200)
var wrapMap = { var wrapMap = {
// Support: IE9 // Support: IE <=9 only
option: [ 1, "<select multiple='multiple'>", "</select>" ], option: [ 1, "<select multiple='multiple'>", "</select>" ],
// XHTML parsers do not magically insert elements in the // XHTML parsers do not magically insert elements in the
...@@ -17,7 +19,7 @@ var wrapMap = { ...@@ -17,7 +19,7 @@ var wrapMap = {
_default: [ 0, "", "" ] _default: [ 0, "", "" ]
}; };
// Support: IE9 // Support: IE <=9 only
wrapMap.optgroup = wrapMap.option; wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
......
...@@ -13,6 +13,8 @@ define( [ ...@@ -13,6 +13,8 @@ define( [
"./selector" // contains "./selector" // contains
], function( jQuery, access, document, documentElement, rnumnonpx, curCSS, addGetHookIf, support ) { ], function( jQuery, access, document, documentElement, rnumnonpx, curCSS, addGetHookIf, support ) {
"use strict";
/** /**
* Gets a window from an element * Gets a window from an element
*/ */
...@@ -74,6 +76,8 @@ jQuery.offset = { ...@@ -74,6 +76,8 @@ jQuery.offset = {
jQuery.fn.extend( { jQuery.fn.extend( {
offset: function( options ) { offset: function( options ) {
// Preserve chaining for setter
if ( arguments.length ) { if ( arguments.length ) {
return options === undefined ? return options === undefined ?
this : this :
...@@ -82,28 +86,36 @@ jQuery.fn.extend( { ...@@ -82,28 +86,36 @@ jQuery.fn.extend( {
} ); } );
} }
var docElem, win, var docElem, win, rect, doc,
elem = this[ 0 ], elem = this[ 0 ];
box = { top: 0, left: 0 },
doc = elem && elem.ownerDocument;
if ( !doc ) { if ( !elem ) {
return; return;
} }
docElem = doc.documentElement; // Support: IE <=11 only
// Running getBoundingClientRect on a
// Make sure it's not a disconnected DOM node // disconnected node in IE throws an error
if ( !jQuery.contains( docElem, elem ) ) { if ( !elem.getClientRects().length ) {
return box; return { top: 0, left: 0 };
} }
box = elem.getBoundingClientRect(); rect = elem.getBoundingClientRect();
// Make sure element is not hidden (display: none)
if ( rect.width || rect.height ) {
doc = elem.ownerDocument;
win = getWindow( doc ); win = getWindow( doc );
docElem = doc.documentElement;
return { return {
top: box.top + win.pageYOffset - docElem.clientTop, top: rect.top + win.pageYOffset - docElem.clientTop,
left: box.left + win.pageXOffset - docElem.clientLeft left: rect.left + win.pageXOffset - docElem.clientLeft
}; };
}
// Return zeros for disconnected and hidden elements (gh-2310)
return rect;
}, },
position: function() { position: function() {
...@@ -134,8 +146,10 @@ jQuery.fn.extend( { ...@@ -134,8 +146,10 @@ jQuery.fn.extend( {
} }
// Add offsetParent borders // Add offsetParent borders
parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); parentOffset = {
parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
};
} }
// Subtract parent offsets and element margins // Subtract parent offsets and element margins
...@@ -193,10 +207,10 @@ jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( ...@@ -193,10 +207,10 @@ jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function(
}; };
} ); } );
// Support: Safari<7-8+, Chrome<37-44+ // Support: Safari <=7 - 9.1, Chrome <=37 - 49
// Add the top/left cssHooks using jQuery.fn.position // Add the top/left cssHooks using jQuery.fn.position
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
// getComputedStyle returns percent when specified for top/left/bottom/right; // getComputedStyle returns percent when specified for top/left/bottom/right;
// rather than make the css module depend on the offset module, just check for it here // rather than make the css module depend on the offset module, just check for it here
jQuery.each( [ "top", "left" ], function( i, prop ) { jQuery.each( [ "top", "left" ], function( i, prop ) {
......
return jQuery;
}));
...@@ -5,6 +5,8 @@ define( [ ...@@ -5,6 +5,8 @@ define( [
"./callbacks" "./callbacks"
], function( jQuery, dataPriv ) { ], function( jQuery, dataPriv ) {
"use strict";
jQuery.extend( { jQuery.extend( {
queue: function( elem, type, data ) { queue: function( elem, type, data ) {
var queue; var queue;
......
...@@ -4,8 +4,10 @@ define( [ ...@@ -4,8 +4,10 @@ define( [
"../effects" // Delay is optional because of this dependency "../effects" // Delay is optional because of this dependency
], function( jQuery ) { ], function( jQuery ) {
"use strict";
// Based off of the plugin by Clint Helfers, with permission. // Based off of the plugin by Clint Helfers, with permission.
// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
jQuery.fn.delay = function( time, type ) { jQuery.fn.delay = function( time, type ) {
time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
type = type || "fx"; type = type || "fx";
......
...@@ -6,6 +6,8 @@ define( [ ...@@ -6,6 +6,8 @@ define( [
"./var/indexOf" "./var/indexOf"
], function( jQuery, document, documentElement, hasOwn, indexOf ) { ], function( jQuery, document, documentElement, hasOwn, indexOf ) {
"use strict";
/* /*
* Optional (non-Sizzle) selector module for custom builds. * Optional (non-Sizzle) selector module for custom builds.
* *
...@@ -37,7 +39,26 @@ var hasDuplicate, sortInput, ...@@ -37,7 +39,26 @@ var hasDuplicate, sortInput,
documentElement.webkitMatchesSelector || documentElement.webkitMatchesSelector ||
documentElement.mozMatchesSelector || documentElement.mozMatchesSelector ||
documentElement.oMatchesSelector || documentElement.oMatchesSelector ||
documentElement.msMatchesSelector; documentElement.msMatchesSelector,
// CSS string/identifier serialization
// https://drafts.csswg.org/cssom/#common-serializing-idioms
rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
fcssescape = function( ch, asCodePoint ) {
if ( asCodePoint ) {
// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
if ( ch === "\0" ) {
return "\uFFFD";
}
// Control characters and (dependent upon position) numbers get escaped as code points
return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
}
// Other potentially-special ASCII characters get backslash-escaped
return "\\" + ch;
};
function sortOrder( a, b ) { function sortOrder( a, b ) {
...@@ -110,7 +131,14 @@ function uniqueSort( results ) { ...@@ -110,7 +131,14 @@ function uniqueSort( results ) {
return results; return results;
} }
function escape( sel ) {
return ( sel + "" ).replace( rcssescape, fcssescape );
}
jQuery.extend( { jQuery.extend( {
uniqueSort: uniqueSort,
unique: uniqueSort,
escapeSelector: escape,
find: function( selector, context, results, seed ) { find: function( selector, context, results, seed ) {
var elem, nodeType, var elem, nodeType,
i = 0; i = 0;
...@@ -140,8 +168,6 @@ jQuery.extend( { ...@@ -140,8 +168,6 @@ jQuery.extend( {
return results; return results;
}, },
uniqueSort: uniqueSort,
unique: uniqueSort,
text: function( elem ) { text: function( elem ) {
var node, var node,
ret = "", ret = "",
......
...@@ -3,12 +3,17 @@ define( [ ...@@ -3,12 +3,17 @@ define( [
"../external/sizzle/dist/sizzle" "../external/sizzle/dist/sizzle"
], function( jQuery, Sizzle ) { ], function( jQuery, Sizzle ) {
"use strict";
jQuery.find = Sizzle; jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors; jQuery.expr = Sizzle.selectors;
// Deprecated
jQuery.expr[ ":" ] = jQuery.expr.pseudos; jQuery.expr[ ":" ] = jQuery.expr.pseudos;
jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText; jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML; jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains; jQuery.contains = Sizzle.contains;
jQuery.escapeSelector = Sizzle.escape;
} ); } );
...@@ -6,7 +6,9 @@ define( [ ...@@ -6,7 +6,9 @@ define( [
"./attributes/prop" "./attributes/prop"
], function( jQuery, rcheckableType ) { ], function( jQuery, rcheckableType ) {
var r20 = /%20/g, "use strict";
var
rbracket = /\[\]$/, rbracket = /\[\]$/,
rCRLF = /\r?\n/g, rCRLF = /\r?\n/g,
rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
...@@ -55,17 +57,16 @@ function buildParams( prefix, obj, traditional, add ) { ...@@ -55,17 +57,16 @@ function buildParams( prefix, obj, traditional, add ) {
jQuery.param = function( a, traditional ) { jQuery.param = function( a, traditional ) {
var prefix, var prefix,
s = [], s = [],
add = function( key, value ) { add = function( key, valueOrFunction ) {
// If value is a function, invoke it and return its value // If value is a function, invoke it and use its return value
value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); var value = jQuery.isFunction( valueOrFunction ) ?
s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); valueOrFunction() :
}; valueOrFunction;
// Set traditional to true for jQuery <= 1.3.2 behavior. s[ s.length ] = encodeURIComponent( key ) + "=" +
if ( traditional === undefined ) { encodeURIComponent( value == null ? "" : value );
traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; };
}
// If an array was passed in, assume that it is an array of form elements. // If an array was passed in, assume that it is an array of form elements.
if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
...@@ -85,7 +86,7 @@ jQuery.param = function( a, traditional ) { ...@@ -85,7 +86,7 @@ jQuery.param = function( a, traditional ) {
} }
// Return the resulting serialization // Return the resulting serialization
return s.join( "&" ).replace( r20, "+" ); return s.join( "&" );
}; };
jQuery.fn.extend( { jQuery.fn.extend( {
......
...@@ -9,6 +9,8 @@ define( [ ...@@ -9,6 +9,8 @@ define( [
"./selector" "./selector"
], function( jQuery, indexOf, dir, siblings, rneedsContext ) { ], function( jQuery, indexOf, dir, siblings, rneedsContext ) {
"use strict";
var rparentsprev = /^(?:parents|prev(?:Until|All))/, var rparentsprev = /^(?:parents|prev(?:Until|All))/,
// Methods guaranteed to produce a unique set when starting from a unique set // Methods guaranteed to produce a unique set when starting from a unique set
...@@ -39,16 +41,16 @@ jQuery.fn.extend( { ...@@ -39,16 +41,16 @@ jQuery.fn.extend( {
i = 0, i = 0,
l = this.length, l = this.length,
matched = [], matched = [],
pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? targets = typeof selectors !== "string" && jQuery( selectors );
jQuery( selectors, context || this.context ) :
0;
// Positional selectors never match, since there's no _selection_ context
if ( !rneedsContext.test( selectors ) ) {
for ( ; i < l; i++ ) { 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 // Always skip document fragments
if ( cur.nodeType < 11 && ( pos ? if ( cur.nodeType < 11 && ( targets ?
pos.index( cur ) > -1 : targets.index( cur ) > -1 :
// Don't pass non-elements to Sizzle // Don't pass non-elements to Sizzle
cur.nodeType === 1 && cur.nodeType === 1 &&
...@@ -59,6 +61,7 @@ jQuery.fn.extend( { ...@@ -59,6 +61,7 @@ jQuery.fn.extend( {
} }
} }
} }
}
return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
}, },
......
...@@ -5,6 +5,8 @@ define( [ ...@@ -5,6 +5,8 @@ define( [
"../selector" "../selector"
], function( jQuery, indexOf, rneedsContext ) { ], function( jQuery, indexOf, rneedsContext ) {
"use strict";
var risSimple = /^.[^:#\[\.,]*$/; var risSimple = /^.[^:#\[\.,]*$/;
// Implement the identical functionality for filter and not // Implement the identical functionality for filter and not
...@@ -33,7 +35,7 @@ function winnow( elements, qualifier, not ) { ...@@ -33,7 +35,7 @@ function winnow( elements, qualifier, not ) {
} }
return jQuery.grep( elements, function( elem ) { return jQuery.grep( elements, function( elem ) {
return ( indexOf.call( qualifier, elem ) > -1 ) !== not; return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
} ); } );
} }
...@@ -53,9 +55,8 @@ jQuery.filter = function( expr, elems, not ) { ...@@ -53,9 +55,8 @@ jQuery.filter = function( expr, elems, not ) {
jQuery.fn.extend( { jQuery.fn.extend( {
find: function( selector ) { find: function( selector ) {
var i, var i, ret,
len = this.length, len = this.length,
ret = [],
self = this; self = this;
if ( typeof selector !== "string" ) { if ( typeof selector !== "string" ) {
...@@ -68,14 +69,13 @@ jQuery.fn.extend( { ...@@ -68,14 +69,13 @@ jQuery.fn.extend( {
} ) ); } ) );
} }
ret = this.pushStack( [] );
for ( i = 0; i < len; i++ ) { for ( i = 0; i < len; i++ ) {
jQuery.find( selector, self[ i ], ret ); jQuery.find( selector, self[ i ], ret );
} }
// Needed because $( selector, context ) becomes $( context ).find( selector ) return len > 1 ? jQuery.uniqueSort( ret ) : ret;
ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
ret.selector = this.selector ? this.selector + " " + selector : selector;
return ret;
}, },
filter: function( selector ) { filter: function( selector ) {
return this.pushStack( winnow( this, selector || [], false ) ); return this.pushStack( winnow( this, selector || [], false ) );
......
...@@ -2,6 +2,8 @@ define( [ ...@@ -2,6 +2,8 @@ define( [
"../../core" "../../core"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
return function( elem, dir, until ) { return function( elem, dir, until ) {
var matched = [], var matched = [],
truncate = until !== undefined; truncate = until !== undefined;
......
...@@ -2,5 +2,7 @@ define( [ ...@@ -2,5 +2,7 @@ define( [
"../../core", "../../core",
"../../selector" "../../selector"
], function( jQuery ) { ], function( jQuery ) {
"use strict";
return jQuery.expr.match.needsContext; return jQuery.expr.match.needsContext;
} ); } );
define( function() { define( function() {
"use strict";
return function( n, elem ) { return function( n, elem ) {
var matched = []; var matched = [];
......
define( [
"./fnToString"
], function( fnToString ) {
"use strict";
return fnToString.call( Object );
} );
define( function() { define( function() {
"use strict";
return []; return [];
} ); } );
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment