Build: Add jQuery 3.6.1-3.6.3, update Migrate to 3.4.0

This commit is contained in:
Michał Gołębiowski-Owczarek 2023-01-15 21:41:18 +01:00
parent 827abdfccd
commit 3286792ec5
No known key found for this signature in database
15 changed files with 33468 additions and 265 deletions

View File

@ -421,13 +421,22 @@ grunt.initConfig( {
"jquery-3.6.0/jquery.js": "jquery-3.6.0/dist/jquery.js", "jquery-3.6.0/jquery.js": "jquery-3.6.0/dist/jquery.js",
"jquery-3.6.0/LICENSE.txt": "jquery-3.6.0/LICENSE.txt", "jquery-3.6.0/LICENSE.txt": "jquery-3.6.0/LICENSE.txt",
"jquery-3.6.1/jquery.js": "jquery-3.6.1/dist/jquery.js",
"jquery-3.6.1/LICENSE.txt": "jquery-3.6.1/LICENSE.txt",
"jquery-3.6.2/jquery.js": "jquery-3.6.2/dist/jquery.js",
"jquery-3.6.2/LICENSE.txt": "jquery-3.6.2/LICENSE.txt",
"jquery-3.6.3/jquery.js": "jquery-3.6.3/dist/jquery.js",
"jquery-3.6.3/LICENSE.txt": "jquery-3.6.3/LICENSE.txt",
"jquery-migrate-1.4.1/jquery-migrate.js": "jquery-migrate-1.4.1/jquery-migrate.js":
"jquery-migrate-1.4.1/dist/jquery-migrate.js", "jquery-migrate-1.4.1/dist/jquery-migrate.js",
"jquery-migrate-1.4.1/LICENSE.txt": "jquery-migrate-1.4.1/LICENSE.txt", "jquery-migrate-1.4.1/LICENSE.txt": "jquery-migrate-1.4.1/LICENSE.txt",
"jquery-migrate-3.3.2/jquery-migrate.js": "jquery-migrate-3.4.0/jquery-migrate.js":
"jquery-migrate-3.3.2/dist/jquery-migrate.js", "jquery-migrate-3.4.0/dist/jquery-migrate.js",
"jquery-migrate-3.3.2/LICENSE.txt": "jquery-migrate-3.3.2/LICENSE.txt" "jquery-migrate-3.4.0/LICENSE.txt": "jquery-migrate-3.4.0/LICENSE.txt"
} }
} }
}, },

View File

@ -39,7 +39,7 @@
"jquery-1.12.2": "jquery#1.12.2", "jquery-1.12.2": "jquery#1.12.2",
"jquery-1.12.3": "jquery#1.12.3", "jquery-1.12.3": "jquery#1.12.3",
"jquery-1.12.4": "jquery#1.12.4", "jquery-1.12.4": "jquery#1.12.4",
"jquery-3.x": "jquery#3.6.0", "jquery-3.x": "jquery#3.6.3",
"jquery-2.0.0": "jquery#2.0.0", "jquery-2.0.0": "jquery#2.0.0",
"jquery-2.0.1": "jquery#2.0.1", "jquery-2.0.1": "jquery#2.0.1",
"jquery-2.0.2": "jquery#2.0.2", "jquery-2.0.2": "jquery#2.0.2",
@ -66,7 +66,10 @@
"jquery-3.5.0": "jquery#3.5.0", "jquery-3.5.0": "jquery#3.5.0",
"jquery-3.5.1": "jquery#3.5.1", "jquery-3.5.1": "jquery#3.5.1",
"jquery-3.6.0": "jquery#3.6.0", "jquery-3.6.0": "jquery#3.6.0",
"jquery-3.6.1": "jquery#3.6.1",
"jquery-3.6.2": "jquery#3.6.2",
"jquery-3.6.3": "jquery#3.6.3",
"jquery-migrate-1.4.1": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-1.4.1.tgz", "jquery-migrate-1.4.1": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-1.4.1.tgz",
"jquery-migrate-3.3.2": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.3.2.tgz" "jquery-migrate-3.4.0": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.4.0.tgz"
} }
} }

View File

@ -5,7 +5,7 @@ module.exports = function( grunt ) {
var versions = { var versions = {
"git": "git", "git": "git",
"3.x-git": "3.x-git", "3.x-git": "3.x-git",
"3.6": "3.6.0", "3.6": "3.6.3",
"3.5": "3.5.1", "3.5": "3.5.1",
"3.4": "3.4.1", "3.4": "3.4.1",
"3.3": "3.3.1", "3.3": "3.3.1",

20
external/jquery-3.6.1/LICENSE.txt vendored Normal file
View File

@ -0,0 +1,20 @@
Copyright OpenJS Foundation and other contributors, https://openjsf.org/
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

10909
external/jquery-3.6.1/jquery.js vendored Normal file

File diff suppressed because it is too large Load Diff

20
external/jquery-3.6.2/LICENSE.txt vendored Normal file
View File

@ -0,0 +1,20 @@
Copyright OpenJS Foundation and other contributors, https://openjsf.org/
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

10994
external/jquery-3.6.2/jquery.js vendored Normal file

File diff suppressed because it is too large Load Diff

20
external/jquery-3.6.3/LICENSE.txt vendored Normal file
View File

@ -0,0 +1,20 @@
Copyright OpenJS Foundation and other contributors, https://openjsf.org/
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

10993
external/jquery-3.6.3/jquery.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/*! /*!
* jQuery Migrate - v3.3.2 - 2020-11-17T23:22Z * jQuery Migrate - v3.4.0 - 2022-03-24T16:30Z
* Copyright OpenJS Foundation and other contributors * Copyright OpenJS Foundation and other contributors
*/ */
( function( factory ) { ( function( factory ) {
@ -24,7 +24,7 @@
} )( function( jQuery, window ) { } )( function( jQuery, window ) {
"use strict"; "use strict";
jQuery.migrateVersion = "3.3.2"; jQuery.migrateVersion = "3.4.0";
// Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2 // Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2
function compareVersions( v1, v2 ) { function compareVersions( v1, v2 ) {
@ -48,6 +48,40 @@ function jQueryVersionSince( version ) {
return compareVersions( jQuery.fn.jquery, version ) >= 0; return compareVersions( jQuery.fn.jquery, version ) >= 0;
} }
// A map from disabled patch codes to `true`. This should really
// be a `Set` but those are unsupported in IE.
var disabledPatches = Object.create( null );
// Don't apply patches for specified codes. Helpful for code bases
// where some Migrate warnings have been addressed and it's desirable
// to avoid needless patches or false positives.
jQuery.migrateDisablePatches = function() {
var i;
for ( i = 0; i < arguments.length; i++ ) {
disabledPatches[ arguments[ i ] ] = true;
}
};
// Allow enabling patches disabled via `jQuery.migrateDisablePatches`.
// Helpful if you want to disable a patch only for some code that won't
// be updated soon to be able to focus on other warnings - and enable it
// immediately after such a call:
// ```js
// jQuery.migrateDisablePatches( "workaroundA" );
// elem.pluginViolatingWarningA( "pluginMethod" );
// jQuery.migrateEnablePatches( "workaroundA" );
// ```
jQuery.migrateEnablePatches = function() {
var i;
for ( i = 0; i < arguments.length; i++ ) {
delete disabledPatches[ arguments[ i ] ];
}
};
jQuery.migrateIsPatchEnabled = function( patchCode ) {
return !disabledPatches[ patchCode ];
};
( function() { ( function() {
// Support: IE9 only // Support: IE9 only
@ -91,11 +125,12 @@ jQuery.migrateReset = function() {
jQuery.migrateWarnings.length = 0; jQuery.migrateWarnings.length = 0;
}; };
function migrateWarn( msg ) { function migrateWarn( code, msg ) {
var console = window.console; var console = window.console;
if ( !jQuery.migrateDeduplicateWarnings || !warnedAbout[ msg ] ) { if ( jQuery.migrateIsPatchEnabled( code ) &&
( !jQuery.migrateDeduplicateWarnings || !warnedAbout[ msg ] ) ) {
warnedAbout[ msg ] = true; warnedAbout[ msg ] = true;
jQuery.migrateWarnings.push( msg ); jQuery.migrateWarnings.push( msg + " [" + code + "]" );
if ( console && console.warn && !jQuery.migrateMute ) { if ( console && console.warn && !jQuery.migrateMute ) {
console.warn( "JQMIGRATE: " + msg ); console.warn( "JQMIGRATE: " + msg );
if ( jQuery.migrateTrace && console.trace ) { if ( jQuery.migrateTrace && console.trace ) {
@ -105,32 +140,62 @@ function migrateWarn( msg ) {
} }
} }
function migrateWarnProp( obj, prop, value, msg ) { function migrateWarnProp( obj, prop, value, code, msg ) {
Object.defineProperty( obj, prop, { Object.defineProperty( obj, prop, {
configurable: true, configurable: true,
enumerable: true, enumerable: true,
get: function() { get: function() {
migrateWarn( msg ); migrateWarn( code, msg );
return value; return value;
}, },
set: function( newValue ) { set: function( newValue ) {
migrateWarn( msg ); migrateWarn( code, msg );
value = newValue; value = newValue;
} }
} ); } );
} }
function migrateWarnFunc( obj, prop, newFunc, msg ) { function migrateWarnFuncInternal( obj, prop, newFunc, code, msg ) {
var finalFunc,
origFunc = obj[ prop ];
obj[ prop ] = function() { obj[ prop ] = function() {
migrateWarn( msg );
return newFunc.apply( this, arguments ); // If `msg` not provided, do not warn; more sophisticated warnings
// logic is most likely embedded in `newFunc`, in that case here
// we just care about the logic choosing the proper implementation
// based on whether the patch is disabled or not.
if ( msg ) {
migrateWarn( code, msg );
}
// Since patches can be disabled & enabled dynamically, we
// need to decide which implementation to run on each invocation.
finalFunc = jQuery.migrateIsPatchEnabled( code ) ?
newFunc :
// The function may not have existed originally so we need a fallback.
( origFunc || jQuery.noop );
return finalFunc.apply( this, arguments );
}; };
} }
function migratePatchAndWarnFunc( obj, prop, newFunc, code, msg ) {
if ( !msg ) {
throw new Error( "No warning message provided" );
}
return migrateWarnFuncInternal( obj, prop, newFunc, code, msg );
}
function migratePatchFunc( obj, prop, newFunc, code ) {
return migrateWarnFuncInternal( obj, prop, newFunc, code );
}
if ( window.document.compatMode === "BackCompat" ) { if ( window.document.compatMode === "BackCompat" ) {
// JQuery has never supported or tested Quirks Mode // jQuery has never supported or tested Quirks Mode
migrateWarn( "jQuery is not compatible with Quirks Mode" ); migrateWarn( "quirks", "jQuery is not compatible with Quirks Mode" );
} }
var findProp, var findProp,
@ -145,21 +210,27 @@ var findProp,
// 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;
jQuery.fn.init = function( arg1 ) { migratePatchFunc( jQuery.fn, "init", function( arg1 ) {
var args = Array.prototype.slice.call( arguments ); var args = Array.prototype.slice.call( arguments );
if ( typeof arg1 === "string" && arg1 === "#" ) { if ( jQuery.migrateIsPatchEnabled( "selector-empty-id" ) &&
typeof arg1 === "string" && arg1 === "#" ) {
// JQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0 // JQuery( "#" ) is a bogus ID selector, but it returned an empty set
migrateWarn( "jQuery( '#' ) is not a valid selector" ); // before jQuery 3.0
migrateWarn( "selector-empty-id", "jQuery( '#' ) is not a valid selector" );
args[ 0 ] = []; args[ 0 ] = [];
} }
return oldInit.apply( this, args ); return oldInit.apply( this, args );
}; }, "selector-empty-id" );
// This is already done in Core but the above patch will lose this assignment
// so we need to redo it. It doesn't matter whether the patch is enabled or not
// as the method is always going to be a Migrate-created wrapper.
jQuery.fn.init.prototype = jQuery.fn; jQuery.fn.init.prototype = jQuery.fn;
jQuery.find = function( selector ) { migratePatchFunc( jQuery, "find", function( selector ) {
var args = Array.prototype.slice.call( arguments ); var args = Array.prototype.slice.call( arguments );
// Support: PhantomJS 1.x // Support: PhantomJS 1.x
@ -181,16 +252,18 @@ jQuery.find = function( selector ) {
// Note that there may be false alarms if selector uses jQuery extensions // Note that there may be false alarms if selector uses jQuery extensions
try { try {
window.document.querySelector( selector ); window.document.querySelector( selector );
migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] ); migrateWarn( "selector-hash",
"Attribute selector with '#' must be quoted: " + args[ 0 ] );
args[ 0 ] = selector; args[ 0 ] = selector;
} catch ( err2 ) { } catch ( err2 ) {
migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] ); migrateWarn( "selector-hash",
"Attribute selector with '#' was not fixed: " + args[ 0 ] );
} }
} }
} }
return oldFind.apply( this, args ); return oldFind.apply( this, args );
}; }, "selector-hash" );
// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML) // Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)
for ( findProp in oldFind ) { for ( findProp in oldFind ) {
@ -200,53 +273,53 @@ for ( findProp in oldFind ) {
} }
// The number of elements contained in the matched element set // The number of elements contained in the matched element set
migrateWarnFunc( jQuery.fn, "size", function() { migratePatchAndWarnFunc( jQuery.fn, "size", function() {
return this.length; return this.length;
}, }, "size",
"jQuery.fn.size() is deprecated and removed; use the .length property" ); "jQuery.fn.size() is deprecated and removed; use the .length property" );
migrateWarnFunc( jQuery, "parseJSON", function() { migratePatchAndWarnFunc( jQuery, "parseJSON", function() {
return JSON.parse.apply( null, arguments ); return JSON.parse.apply( null, arguments );
}, }, "parseJSON",
"jQuery.parseJSON is deprecated; use JSON.parse" ); "jQuery.parseJSON is deprecated; use JSON.parse" );
migrateWarnFunc( jQuery, "holdReady", jQuery.holdReady, migratePatchAndWarnFunc( jQuery, "holdReady", jQuery.holdReady,
"jQuery.holdReady is deprecated" ); "holdReady", "jQuery.holdReady is deprecated" );
migrateWarnFunc( jQuery, "unique", jQuery.uniqueSort, migratePatchAndWarnFunc( jQuery, "unique", jQuery.uniqueSort,
"jQuery.unique is deprecated; use jQuery.uniqueSort" ); "unique", "jQuery.unique is deprecated; use jQuery.uniqueSort" );
// Now jQuery.expr.pseudos is the standard incantation // Now jQuery.expr.pseudos is the standard incantation
migrateWarnProp( jQuery.expr, "filters", jQuery.expr.pseudos, migrateWarnProp( jQuery.expr, "filters", jQuery.expr.pseudos, "expr-pre-pseudos",
"jQuery.expr.filters is deprecated; use jQuery.expr.pseudos" ); "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos" );
migrateWarnProp( jQuery.expr, ":", jQuery.expr.pseudos, migrateWarnProp( jQuery.expr, ":", jQuery.expr.pseudos, "expr-pre-pseudos",
"jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos" ); "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos" );
// Prior to jQuery 3.1.1 there were internal refs so we don't warn there // Prior to jQuery 3.1.1 there were internal refs so we don't warn there
if ( jQueryVersionSince( "3.1.1" ) ) { if ( jQueryVersionSince( "3.1.1" ) ) {
migrateWarnFunc( jQuery, "trim", function( text ) { migratePatchAndWarnFunc( jQuery, "trim", function( text ) {
return text == null ? return text == null ?
"" : "" :
( text + "" ).replace( rtrim, "" ); ( text + "" ).replace( rtrim, "" );
}, }, "trim",
"jQuery.trim is deprecated; use String.prototype.trim" ); "jQuery.trim is deprecated; use String.prototype.trim" );
} }
// Prior to jQuery 3.2 there were internal refs so we don't warn there // Prior to jQuery 3.2 there were internal refs so we don't warn there
if ( jQueryVersionSince( "3.2.0" ) ) { if ( jQueryVersionSince( "3.2.0" ) ) {
migrateWarnFunc( jQuery, "nodeName", function( elem, name ) { migratePatchAndWarnFunc( jQuery, "nodeName", function( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}, }, "nodeName",
"jQuery.nodeName is deprecated" ); "jQuery.nodeName is deprecated" );
migrateWarnFunc( jQuery, "isArray", Array.isArray, migratePatchAndWarnFunc( jQuery, "isArray", Array.isArray, "isArray",
"jQuery.isArray is deprecated; use Array.isArray" "jQuery.isArray is deprecated; use Array.isArray"
); );
} }
if ( jQueryVersionSince( "3.3.0" ) ) { if ( jQueryVersionSince( "3.3.0" ) ) {
migrateWarnFunc( jQuery, "isNumeric", function( obj ) { migratePatchAndWarnFunc( jQuery, "isNumeric", function( obj ) {
// As of jQuery 3.0, isNumeric is limited to // As of jQuery 3.0, isNumeric is limited to
// strings and numbers (primitives or objects) // strings and numbers (primitives or objects)
@ -258,7 +331,7 @@ if ( jQueryVersionSince( "3.3.0" ) ) {
// ...but misinterprets leading-number strings, e.g. hex literals ("0x...") // ...but misinterprets leading-number strings, e.g. hex literals ("0x...")
// subtraction forces infinities to NaN // subtraction forces infinities to NaN
!isNaN( obj - parseFloat( obj ) ); !isNaN( obj - parseFloat( obj ) );
}, }, "isNumeric",
"jQuery.isNumeric() is deprecated" "jQuery.isNumeric() is deprecated"
); );
@ -269,7 +342,7 @@ if ( jQueryVersionSince( "3.3.0" ) ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase(); class2type[ "[object " + name + "]" ] = name.toLowerCase();
} ); } );
migrateWarnFunc( jQuery, "type", function( obj ) { migratePatchAndWarnFunc( jQuery, "type", function( obj ) {
if ( obj == null ) { if ( obj == null ) {
return obj + ""; return obj + "";
} }
@ -278,19 +351,19 @@ if ( jQueryVersionSince( "3.3.0" ) ) {
return typeof obj === "object" || typeof obj === "function" ? return typeof obj === "object" || typeof obj === "function" ?
class2type[ Object.prototype.toString.call( obj ) ] || "object" : class2type[ Object.prototype.toString.call( obj ) ] || "object" :
typeof obj; typeof obj;
}, }, "type",
"jQuery.type is deprecated" ); "jQuery.type is deprecated" );
migrateWarnFunc( jQuery, "isFunction", migratePatchAndWarnFunc( jQuery, "isFunction",
function( obj ) { function( obj ) {
return typeof obj === "function"; return typeof obj === "function";
}, }, "isFunction",
"jQuery.isFunction() is deprecated" ); "jQuery.isFunction() is deprecated" );
migrateWarnFunc( jQuery, "isWindow", migratePatchAndWarnFunc( jQuery, "isWindow",
function( obj ) { function( obj ) {
return obj != null && obj === obj.window; return obj != null && obj === obj.window;
}, }, "isWindow",
"jQuery.isWindow() is deprecated" "jQuery.isWindow() is deprecated"
); );
} }
@ -301,21 +374,21 @@ if ( jQuery.ajax ) {
var oldAjax = jQuery.ajax, var oldAjax = jQuery.ajax,
rjsonp = /(=)\?(?=&|$)|\?\?/; rjsonp = /(=)\?(?=&|$)|\?\?/;
jQuery.ajax = function( ) { migratePatchFunc( jQuery, "ajax", function() {
var jQXHR = oldAjax.apply( this, arguments ); var jQXHR = oldAjax.apply( this, arguments );
// Be sure we got a jQXHR (e.g., not sync) // Be sure we got a jQXHR (e.g., not sync)
if ( jQXHR.promise ) { if ( jQXHR.promise ) {
migrateWarnFunc( jQXHR, "success", jQXHR.done, migratePatchAndWarnFunc( jQXHR, "success", jQXHR.done, "jqXHR-methods",
"jQXHR.success is deprecated and removed" ); "jQXHR.success is deprecated and removed" );
migrateWarnFunc( jQXHR, "error", jQXHR.fail, migratePatchAndWarnFunc( jQXHR, "error", jQXHR.fail, "jqXHR-methods",
"jQXHR.error is deprecated and removed" ); "jQXHR.error is deprecated and removed" );
migrateWarnFunc( jQXHR, "complete", jQXHR.always, migratePatchAndWarnFunc( jQXHR, "complete", jQXHR.always, "jqXHR-methods",
"jQXHR.complete is deprecated and removed" ); "jQXHR.complete is deprecated and removed" );
} }
return jQXHR; return jQXHR;
}; }, "jqXHR-methods" );
// Only trigger the logic in jQuery <4 as the JSON-to-JSONP auto-promotion // Only trigger the logic in jQuery <4 as the JSON-to-JSONP auto-promotion
// behavior is gone in jQuery 4.0 and as it has security implications, we don't // behavior is gone in jQuery 4.0 and as it has security implications, we don't
@ -334,7 +407,7 @@ if ( !jQueryVersionSince( "4.0.0" ) ) {
.indexOf( "application/x-www-form-urlencoded" ) === 0 && .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
rjsonp.test( s.data ) rjsonp.test( s.data )
) ) { ) ) {
migrateWarn( "JSON-to-JSONP auto-promotion is deprecated" ); migrateWarn( "jsonp-promotion", "JSON-to-JSONP auto-promotion is deprecated" );
} }
} ); } );
} }
@ -345,27 +418,29 @@ var oldRemoveAttr = jQuery.fn.removeAttr,
oldToggleClass = jQuery.fn.toggleClass, oldToggleClass = jQuery.fn.toggleClass,
rmatchNonSpace = /\S+/g; rmatchNonSpace = /\S+/g;
jQuery.fn.removeAttr = function( name ) { migratePatchFunc( jQuery.fn, "removeAttr", function( name ) {
var self = this; var self = this;
jQuery.each( name.match( rmatchNonSpace ), function( _i, attr ) { jQuery.each( name.match( rmatchNonSpace ), function( _i, attr ) {
if ( jQuery.expr.match.bool.test( attr ) ) { if ( jQuery.expr.match.bool.test( attr ) ) {
migrateWarn( "jQuery.fn.removeAttr no longer sets boolean properties: " + attr ); migrateWarn( "removeAttr-bool",
"jQuery.fn.removeAttr no longer sets boolean properties: " + attr );
self.prop( attr, false ); self.prop( attr, false );
} }
} ); } );
return oldRemoveAttr.apply( this, arguments ); return oldRemoveAttr.apply( this, arguments );
}; }, "removeAttr-bool" );
jQuery.fn.toggleClass = function( state ) { migratePatchFunc( jQuery.fn, "toggleClass", function( state ) {
// Only deprecating no-args or single boolean arg // Only deprecating no-args or single boolean arg
if ( state !== undefined && typeof state !== "boolean" ) { if ( state !== undefined && typeof state !== "boolean" ) {
return oldToggleClass.apply( this, arguments ); return oldToggleClass.apply( this, arguments );
} }
migrateWarn( "jQuery.fn.toggleClass( boolean ) is deprecated" ); migrateWarn( "toggleClass-bool", "jQuery.fn.toggleClass( boolean ) is deprecated" );
// Toggle entire class name of each element // Toggle entire class name of each element
return this.each( function() { return this.each( function() {
@ -387,7 +462,7 @@ jQuery.fn.toggleClass = function( state ) {
); );
} }
} ); } );
}; }, "toggleClass-bool" );
function camelCase( string ) { function camelCase( string ) {
return string.replace( /-([a-z])/g, function( _, letter ) { return string.replace( /-([a-z])/g, function( _, letter ) {
@ -395,7 +470,7 @@ function camelCase( string ) {
} ); } );
} }
var oldFnCss, var origFnCss,
internalSwapCall = false, internalSwapCall = false,
ralphaStart = /^[a-z]/, ralphaStart = /^[a-z]/,
@ -440,12 +515,12 @@ if ( jQuery.swap ) {
} ); } );
} }
jQuery.swap = function( elem, options, callback, args ) { migratePatchFunc( jQuery, "swap", function( elem, options, callback, args ) {
var ret, name, var ret, name,
old = {}; old = {};
if ( !internalSwapCall ) { if ( !internalSwapCall ) {
migrateWarn( "jQuery.swap() is undocumented and deprecated" ); migrateWarn( "swap", "jQuery.swap() is undocumented and deprecated" );
} }
// Remember the old values, and insert the new ones // Remember the old values, and insert the new ones
@ -462,22 +537,53 @@ jQuery.swap = function( elem, options, callback, args ) {
} }
return ret; return ret;
}; }, "swap" );
if ( jQueryVersionSince( "3.4.0" ) && typeof Proxy !== "undefined" ) { if ( jQueryVersionSince( "3.4.0" ) && typeof Proxy !== "undefined" ) {
jQuery.cssProps = new Proxy( jQuery.cssProps || {}, { jQuery.cssProps = new Proxy( jQuery.cssProps || {}, {
set: function() { set: function() {
migrateWarn( "JQMIGRATE: jQuery.cssProps is deprecated" ); migrateWarn( "cssProps", "jQuery.cssProps is deprecated" );
return Reflect.set.apply( this, arguments ); return Reflect.set.apply( this, arguments );
} }
} ); } );
} }
// Create a dummy jQuery.cssNumber if missing. It won't be used by jQuery but // In jQuery >=4 where jQuery.cssNumber is missing fill it with the latest 3.x version:
// it will prevent code adding new keys to it unconditionally from crashing. // https://github.com/jquery/jquery/blob/3.6.0/src/css.js#L212-L233
if ( !jQuery.cssNumber ) { // This way, number values for the CSS properties below won't start triggering
jQuery.cssNumber = {}; // Migrate warnings when jQuery gets updated to >=4.0.0 (gh-438).
if ( jQueryVersionSince( "4.0.0" ) && typeof Proxy !== "undefined" ) {
jQuery.cssNumber = new Proxy( {
animationIterationCount: true,
columnCount: true,
fillOpacity: true,
flexGrow: true,
flexShrink: true,
fontWeight: true,
gridArea: true,
gridColumn: true,
gridColumnEnd: true,
gridColumnStart: true,
gridRow: true,
gridRowEnd: true,
gridRowStart: true,
lineHeight: true,
opacity: true,
order: true,
orphans: true,
widows: true,
zIndex: true,
zoom: true
}, {
get: function() {
migrateWarn( "css-number", "jQuery.cssNumber is deprecated" );
return Reflect.get.apply( this, arguments );
},
set: function() {
migrateWarn( "css-number", "jQuery.cssNumber is deprecated" );
return Reflect.set.apply( this, arguments );
}
} );
} }
function isAutoPx( prop ) { function isAutoPx( prop ) {
@ -489,56 +595,63 @@ function isAutoPx( prop ) {
rautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) ); rautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );
} }
oldFnCss = jQuery.fn.css; origFnCss = jQuery.fn.css;
jQuery.fn.css = function( name, value ) { migratePatchFunc( jQuery.fn, "css", function( name, value ) {
var camelName, var camelName,
origThis = this; origThis = this;
if ( name && typeof name === "object" && !Array.isArray( name ) ) { if ( name && typeof name === "object" && !Array.isArray( name ) ) {
jQuery.each( name, function( n, v ) { jQuery.each( name, function( n, v ) {
jQuery.fn.css.call( origThis, n, v ); jQuery.fn.css.call( origThis, n, v );
} ); } );
return this; return this;
} }
if ( typeof value === "number" ) { if ( typeof value === "number" ) {
camelName = camelCase( name ); camelName = camelCase( name );
if ( !isAutoPx( camelName ) && !jQuery.cssNumber[ camelName ] ) { if ( !isAutoPx( camelName ) && !jQuery.cssNumber[ camelName ] ) {
migrateWarn( "Number-typed values are deprecated for jQuery.fn.css( \"" + migrateWarn( "css-number",
"Number-typed values are deprecated for jQuery.fn.css( \"" +
name + "\", value )" ); name + "\", value )" );
} }
} }
return oldFnCss.apply( this, arguments ); return origFnCss.apply( this, arguments );
}; }, "css-number" );
var oldData = jQuery.data; var origData = jQuery.data;
jQuery.data = function( elem, name, value ) { migratePatchFunc( jQuery, "data", function( elem, name, value ) {
var curData, sameKeys, key; var curData, sameKeys, key;
// Name can be an object, and each entry in the object is meant to be set as data // Name can be an object, and each entry in the object is meant to be set as data
if ( name && typeof name === "object" && arguments.length === 2 ) { if ( name && typeof name === "object" && arguments.length === 2 ) {
curData = jQuery.hasData( elem ) && oldData.call( this, elem );
curData = jQuery.hasData( elem ) && origData.call( this, elem );
sameKeys = {}; sameKeys = {};
for ( key in name ) { for ( key in name ) {
if ( key !== camelCase( key ) ) { if ( key !== camelCase( key ) ) {
migrateWarn( "jQuery.data() always sets/gets camelCased names: " + key ); migrateWarn( "data-camelCase",
"jQuery.data() always sets/gets camelCased names: " + key );
curData[ key ] = name[ key ]; curData[ key ] = name[ key ];
} else { } else {
sameKeys[ key ] = name[ key ]; sameKeys[ key ] = name[ key ];
} }
} }
oldData.call( this, elem, sameKeys ); origData.call( this, elem, sameKeys );
return name; return name;
} }
// If the name is transformed, look for the un-transformed name in the data object // If the name is transformed, look for the un-transformed name in the data object
if ( name && typeof name === "string" && name !== camelCase( name ) ) { if ( name && typeof name === "string" && name !== camelCase( name ) ) {
curData = jQuery.hasData( elem ) && oldData.call( this, elem );
curData = jQuery.hasData( elem ) && origData.call( this, elem );
if ( curData && name in curData ) { if ( curData && name in curData ) {
migrateWarn( "jQuery.data() always sets/gets camelCased names: " + name ); migrateWarn( "data-camelCase",
"jQuery.data() always sets/gets camelCased names: " + name );
if ( arguments.length > 2 ) { if ( arguments.length > 2 ) {
curData[ name ] = value; curData[ name ] = value;
} }
@ -546,8 +659,8 @@ jQuery.data = function( elem, name, value ) {
} }
} }
return oldData.apply( this, arguments ); return origData.apply( this, arguments );
}; }, "data-camelCase" );
// Support jQuery slim which excludes the effects module // Support jQuery slim which excludes the effects module
if ( jQuery.fx ) { if ( jQuery.fx ) {
@ -558,9 +671,10 @@ var intervalValue, intervalMsg,
return pct; return pct;
}; };
jQuery.Tween.prototype.run = function( ) { migratePatchFunc( jQuery.Tween.prototype, "run", function( ) {
if ( jQuery.easing[ this.easing ].length > 1 ) { if ( jQuery.easing[ this.easing ].length > 1 ) {
migrateWarn( migrateWarn(
"easing-one-arg",
"'jQuery.easing." + this.easing.toString() + "' should use only one argument" "'jQuery.easing." + this.easing.toString() + "' should use only one argument"
); );
@ -568,9 +682,9 @@ jQuery.Tween.prototype.run = function( ) {
} }
oldTweenRun.apply( this, arguments ); oldTweenRun.apply( this, arguments );
}; }, "easing-one-arg" );
intervalValue = jQuery.fx.interval || 13; intervalValue = jQuery.fx.interval;
intervalMsg = "jQuery.fx.interval is deprecated"; intervalMsg = "jQuery.fx.interval is deprecated";
// Support: IE9, Android <=4.4 // Support: IE9, Android <=4.4
@ -582,12 +696,17 @@ if ( window.requestAnimationFrame ) {
enumerable: true, enumerable: true,
get: function() { get: function() {
if ( !window.document.hidden ) { if ( !window.document.hidden ) {
migrateWarn( intervalMsg ); migrateWarn( "fx-interval", intervalMsg );
} }
return intervalValue;
// Only fallback to the default if patch is enabled
if ( !jQuery.migrateIsPatchEnabled( "fx-interval" ) ) {
return intervalValue;
}
return intervalValue === undefined ? 13 : intervalValue;
}, },
set: function( newValue ) { set: function( newValue ) {
migrateWarn( intervalMsg ); migrateWarn( "fx-interval", intervalMsg );
intervalValue = newValue; intervalValue = newValue;
} }
} ); } );
@ -603,16 +722,18 @@ jQuery.event.props = [];
jQuery.event.fixHooks = {}; jQuery.event.fixHooks = {};
migrateWarnProp( jQuery.event.props, "concat", jQuery.event.props.concat, migrateWarnProp( jQuery.event.props, "concat", jQuery.event.props.concat,
"event-old-patch",
"jQuery.event.props.concat() is deprecated and removed" ); "jQuery.event.props.concat() is deprecated and removed" );
jQuery.event.fix = function( originalEvent ) { migratePatchFunc( jQuery.event, "fix", function( originalEvent ) {
var event, var event,
type = originalEvent.type, type = originalEvent.type,
fixHook = this.fixHooks[ type ], fixHook = this.fixHooks[ type ],
props = jQuery.event.props; props = jQuery.event.props;
if ( props.length ) { if ( props.length ) {
migrateWarn( "jQuery.event.props are deprecated and removed: " + props.join() ); migrateWarn( "event-old-patch",
"jQuery.event.props are deprecated and removed: " + props.join() );
while ( props.length ) { while ( props.length ) {
jQuery.event.addProp( props.pop() ); jQuery.event.addProp( props.pop() );
} }
@ -620,7 +741,8 @@ jQuery.event.fix = function( originalEvent ) {
if ( fixHook && !fixHook._migrated_ ) { if ( fixHook && !fixHook._migrated_ ) {
fixHook._migrated_ = true; fixHook._migrated_ = true;
migrateWarn( "jQuery.event.fixHooks are deprecated and removed: " + type ); migrateWarn( "event-old-patch",
"jQuery.event.fixHooks are deprecated and removed: " + type );
if ( ( props = fixHook.props ) && props.length ) { if ( ( props = fixHook.props ) && props.length ) {
while ( props.length ) { while ( props.length ) {
jQuery.event.addProp( props.pop() ); jQuery.event.addProp( props.pop() );
@ -630,21 +752,24 @@ jQuery.event.fix = function( originalEvent ) {
event = originalFix.call( this, originalEvent ); event = originalFix.call( this, originalEvent );
return fixHook && fixHook.filter ? fixHook.filter( event, originalEvent ) : event; return fixHook && fixHook.filter ?
}; fixHook.filter( event, originalEvent ) :
event;
}, "event-old-patch" );
jQuery.event.add = function( elem, types ) { migratePatchFunc( jQuery.event, "add", function( elem, types ) {
// This misses the multiple-types case but that seems awfully rare // This misses the multiple-types case but that seems awfully rare
if ( elem === window && types === "load" && window.document.readyState === "complete" ) { if ( elem === window && types === "load" && window.document.readyState === "complete" ) {
migrateWarn( "jQuery(window).on('load'...) called after load event occurred" ); migrateWarn( "load-after-event",
"jQuery(window).on('load'...) called after load event occurred" );
} }
return oldEventAdd.apply( this, arguments ); return oldEventAdd.apply( this, arguments );
}; }, "load-after-event" );
jQuery.each( [ "load", "unload", "error" ], function( _, name ) { jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
jQuery.fn[ name ] = function() { migratePatchFunc( jQuery.fn, name, function() {
var args = Array.prototype.slice.call( arguments, 0 ); var args = Array.prototype.slice.call( arguments, 0 );
// If this is an ajax load() the first arg should be the string URL; // If this is an ajax load() the first arg should be the string URL;
@ -655,7 +780,8 @@ jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
return oldLoad.apply( this, args ); return oldLoad.apply( this, args );
} }
migrateWarn( "jQuery.fn." + name + "() is deprecated" ); migrateWarn( "shorthand-removed-v3",
"jQuery.fn." + name + "() is deprecated" );
args.splice( 0, 0, name ); args.splice( 0, 0, name );
if ( arguments.length ) { if ( arguments.length ) {
@ -668,7 +794,7 @@ jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
// See http://bugs.jquery.com/ticket/11820 // See http://bugs.jquery.com/ticket/11820
this.triggerHandler.apply( this, args ); this.triggerHandler.apply( this, args );
return this; return this;
}; }, "shorthand-removed-v3" );
} ); } );
@ -678,12 +804,13 @@ jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
function( _i, name ) { function( _i, name ) {
// Handle event binding // Handle event binding
jQuery.fn[ name ] = function( data, fn ) { migratePatchAndWarnFunc( jQuery.fn, name, function( data, fn ) {
migrateWarn( "jQuery.fn." + name + "() event shorthand is deprecated" );
return arguments.length > 0 ? return arguments.length > 0 ?
this.on( name, null, data, fn ) : this.on( name, null, data, fn ) :
this.trigger( name ); this.trigger( name );
}; },
"shorthand-deprecated-v3",
"jQuery.fn." + name + "() event shorthand is deprecated" );
} ); } );
// Trigger "ready" event only once, on document ready // Trigger "ready" event only once, on document ready
@ -694,39 +821,30 @@ jQuery( function() {
jQuery.event.special.ready = { jQuery.event.special.ready = {
setup: function() { setup: function() {
if ( this === window.document ) { if ( this === window.document ) {
migrateWarn( "'ready' event is deprecated" ); migrateWarn( "ready-event", "'ready' event is deprecated" );
} }
} }
}; };
jQuery.fn.extend( { migratePatchAndWarnFunc( jQuery.fn, "bind", function( types, data, fn ) {
return this.on( types, null, data, fn );
bind: function( types, data, fn ) { }, "pre-on-methods", "jQuery.fn.bind() is deprecated" );
migrateWarn( "jQuery.fn.bind() is deprecated" ); migratePatchAndWarnFunc( jQuery.fn, "unbind", function( types, fn ) {
return this.on( types, null, data, fn ); return this.off( types, null, fn );
}, }, "pre-on-methods", "jQuery.fn.unbind() is deprecated" );
unbind: function( types, fn ) { migratePatchAndWarnFunc( jQuery.fn, "delegate", function( selector, types, data, fn ) {
migrateWarn( "jQuery.fn.unbind() is deprecated" ); return this.on( types, selector, data, fn );
return this.off( types, null, fn ); }, "pre-on-methods", "jQuery.fn.delegate() is deprecated" );
}, migratePatchAndWarnFunc( jQuery.fn, "undelegate", function( selector, types, fn ) {
delegate: function( selector, types, data, fn ) { return arguments.length === 1 ?
migrateWarn( "jQuery.fn.delegate() is deprecated" ); this.off( selector, "**" ) :
return this.on( types, selector, data, fn ); this.off( types, selector || "**", fn );
}, }, "pre-on-methods", "jQuery.fn.undelegate() is deprecated" );
undelegate: function( selector, types, fn ) { migratePatchAndWarnFunc( jQuery.fn, "hover", function( fnOver, fnOut ) {
migrateWarn( "jQuery.fn.undelegate() is deprecated" ); return this.on( "mouseenter", fnOver ).on( "mouseleave", fnOut || fnOver );
return arguments.length === 1 ? }, "pre-on-methods", "jQuery.fn.hover() is deprecated" );
this.off( selector, "**" ) :
this.off( types, selector || "**", fn );
},
hover: function( fnOver, fnOut ) {
migrateWarn( "jQuery.fn.hover() is deprecated" );
return this.on( "mouseenter", fnOver ).on( "mouseleave", fnOut || fnOver );
}
} );
var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
origHtmlPrefilter = jQuery.htmlPrefilter,
makeMarkup = function( html ) { makeMarkup = function( html ) {
var doc = window.document.implementation.createHTMLDocument( "" ); var doc = window.document.implementation.createHTMLDocument( "" );
doc.body.innerHTML = html; doc.body.innerHTML = html;
@ -735,62 +853,65 @@ var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\
warnIfChanged = function( html ) { warnIfChanged = function( html ) {
var changed = html.replace( rxhtmlTag, "<$1></$2>" ); var changed = html.replace( rxhtmlTag, "<$1></$2>" );
if ( changed !== html && makeMarkup( html ) !== makeMarkup( changed ) ) { if ( changed !== html && makeMarkup( html ) !== makeMarkup( changed ) ) {
migrateWarn( "HTML tags must be properly nested and closed: " + html ); migrateWarn( "self-closed-tags",
"HTML tags must be properly nested and closed: " + html );
} }
}; };
/**
* Deprecated, please use `jQuery.migrateDisablePatches( "self-closed-tags" )` instead.
* @deprecated
*/
jQuery.UNSAFE_restoreLegacyHtmlPrefilter = function() { jQuery.UNSAFE_restoreLegacyHtmlPrefilter = function() {
jQuery.htmlPrefilter = function( html ) { jQuery.migrateEnablePatches( "self-closed-tags" );
warnIfChanged( html );
return html.replace( rxhtmlTag, "<$1></$2>" );
};
}; };
jQuery.htmlPrefilter = function( html ) { migratePatchFunc( jQuery, "htmlPrefilter", function( html ) {
warnIfChanged( html ); warnIfChanged( html );
return origHtmlPrefilter( html ); return html.replace( rxhtmlTag, "<$1></$2>" );
}; }, "self-closed-tags" );
var oldOffset = jQuery.fn.offset; // This patch needs to be disabled by default as it re-introduces
// security issues (CVE-2020-11022, CVE-2020-11023).
jQuery.migrateDisablePatches( "self-closed-tags" );
jQuery.fn.offset = function() { var origOffset = jQuery.fn.offset;
migratePatchFunc( jQuery.fn, "offset", function() {
var elem = this[ 0 ]; var elem = this[ 0 ];
if ( elem && ( !elem.nodeType || !elem.getBoundingClientRect ) ) { if ( elem && ( !elem.nodeType || !elem.getBoundingClientRect ) ) {
migrateWarn( "jQuery.fn.offset() requires a valid DOM element" ); migrateWarn( "offset-valid-elem", "jQuery.fn.offset() requires a valid DOM element" );
return arguments.length ? this : undefined; return arguments.length ? this : undefined;
} }
return oldOffset.apply( this, arguments ); return origOffset.apply( this, arguments );
}; }, "offset-valid-elem" );
// Support jQuery slim which excludes the ajax module // Support jQuery slim which excludes the ajax module
// The jQuery.param patch is about respecting `jQuery.ajaxSettings.traditional` // The jQuery.param patch is about respecting `jQuery.ajaxSettings.traditional`
// so it doesn't make sense for the slim build. // so it doesn't make sense for the slim build.
if ( jQuery.ajax ) { if ( jQuery.ajax ) {
var oldParam = jQuery.param; var origParam = jQuery.param;
jQuery.param = function( data, traditional ) { migratePatchFunc( jQuery, "param", function( data, traditional ) {
var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
if ( traditional === undefined && ajaxTraditional ) { if ( traditional === undefined && ajaxTraditional ) {
migrateWarn( "jQuery.param() no longer uses jQuery.ajaxSettings.traditional" ); migrateWarn( "param-ajax-traditional",
"jQuery.param() no longer uses jQuery.ajaxSettings.traditional" );
traditional = ajaxTraditional; traditional = ajaxTraditional;
} }
return oldParam.call( this, data, traditional ); return origParam.call( this, data, traditional );
}; }, "param-ajax-traditional" );
} }
var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack; migratePatchAndWarnFunc( jQuery.fn, "andSelf", jQuery.fn.addBack, "andSelf",
"jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()" );
jQuery.fn.andSelf = function() {
migrateWarn( "jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()" );
return oldSelf.apply( this, arguments );
};
// Support jQuery slim which excludes the deferred module in jQuery 4.0+ // Support jQuery slim which excludes the deferred module in jQuery 4.0+
if ( jQuery.Deferred ) { if ( jQuery.Deferred ) {
@ -807,15 +928,13 @@ var oldDeferred = jQuery.Deferred,
jQuery.Callbacks( "memory" ) ] jQuery.Callbacks( "memory" ) ]
]; ];
jQuery.Deferred = function( func ) { migratePatchFunc( jQuery, "Deferred", function( func ) {
var deferred = oldDeferred(), var deferred = oldDeferred(),
promise = deferred.promise(); promise = deferred.promise();
deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) { function newDeferredPipe( /* fnDone, fnFail, fnProgress */ ) {
var fns = arguments; var fns = arguments;
migrateWarn( "deferred.pipe() is deprecated" );
return jQuery.Deferred( function( newDefer ) { return jQuery.Deferred( function( newDefer ) {
jQuery.each( tuples, function( i, tuple ) { jQuery.each( tuples, function( i, tuple ) {
var fn = typeof fns[ i ] === "function" && fns[ i ]; var fn = typeof fns[ i ] === "function" && fns[ i ];
@ -840,15 +959,19 @@ jQuery.Deferred = function( func ) {
} ); } );
fns = null; fns = null;
} ).promise(); } ).promise();
}
}; migratePatchAndWarnFunc( deferred, "pipe", newDeferredPipe, "deferred-pipe",
"deferred.pipe() is deprecated" );
migratePatchAndWarnFunc( promise, "pipe", newDeferredPipe, "deferred-pipe",
"deferred.pipe() is deprecated" );
if ( func ) { if ( func ) {
func.call( deferred, deferred ); func.call( deferred, deferred );
} }
return deferred; return deferred;
}; }, "deferred-pipe" );
// Preserve handler of uncaught exceptions in promise chains // Preserve handler of uncaught exceptions in promise chains
jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook; jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook;

View File

@ -1,5 +1,5 @@
/*! /*!
* jQuery JavaScript Library v3.6.0 * jQuery JavaScript Library v3.6.3
* https://jquery.com/ * https://jquery.com/
* *
* Includes Sizzle.js * Includes Sizzle.js
@ -9,7 +9,7 @@
* Released under the MIT license * Released under the MIT license
* https://jquery.org/license * https://jquery.org/license
* *
* Date: 2021-03-02T17:08Z * Date: 2022-12-20T21:28Z
*/ */
( function( global, factory ) { ( function( global, factory ) {
@ -23,7 +23,7 @@
// (such as Node.js), expose a factory as module.exports. // (such as Node.js), expose a factory as module.exports.
// This accentuates the need for the creation of a real `window`. // This accentuates the need for the creation of a real `window`.
// e.g. var jQuery = require("jquery")(window); // e.g. var jQuery = require("jquery")(window);
// See ticket #14549 for more info. // See ticket trac-14549 for more info.
module.exports = global.document ? module.exports = global.document ?
factory( global, true ) : factory( global, true ) :
function( w ) { function( w ) {
@ -151,7 +151,7 @@ function toType( obj ) {
var var
version = "3.6.0", version = "3.6.3",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
@ -522,14 +522,14 @@ function isArrayLike( obj ) {
} }
var Sizzle = var Sizzle =
/*! /*!
* Sizzle CSS Selector Engine v2.3.6 * Sizzle CSS Selector Engine v2.3.9
* https://sizzlejs.com/ * https://sizzlejs.com/
* *
* Copyright JS Foundation and other contributors * Copyright JS Foundation and other contributors
* Released under the MIT license * Released under the MIT license
* https://js.foundation/ * https://js.foundation/
* *
* Date: 2021-02-16 * Date: 2022-12-19
*/ */
( function( window ) { ( function( window ) {
var i, var i,
@ -879,6 +879,27 @@ function Sizzle( selector, context, results, seed ) {
} }
try { try {
// `qSA` may not throw for unrecognized parts using forgiving parsing:
// https://drafts.csswg.org/selectors/#forgiving-selector
// like the `:has()` pseudo-class:
// https://drafts.csswg.org/selectors/#relational
// `CSS.supports` is still expected to return `false` then:
// https://drafts.csswg.org/css-conditional-4/#typedef-supports-selector-fn
// https://drafts.csswg.org/css-conditional-4/#dfn-support-selector
if ( support.cssSupportsSelector &&
// eslint-disable-next-line no-undef
!CSS.supports( "selector(:is(" + newSelector + "))" ) ) {
// Support: IE 11+
// Throw to get to the same code path as an error directly in qSA.
// Note: once we only support browser supporting
// `CSS.supports('selector(...)')`, we can most likely drop
// the `try-catch`. IE doesn't implement the API.
throw new Error();
}
push.apply( results, push.apply( results,
newContext.querySelectorAll( newSelector ) newContext.querySelectorAll( newSelector )
); );
@ -1174,6 +1195,31 @@ setDocument = Sizzle.setDocument = function( node ) {
!el.querySelectorAll( ":scope fieldset div" ).length; !el.querySelectorAll( ":scope fieldset div" ).length;
} ); } );
// Support: Chrome 105+, Firefox 104+, Safari 15.4+
// Make sure forgiving mode is not used in `CSS.supports( "selector(...)" )`.
//
// `:is()` uses a forgiving selector list as an argument and is widely
// implemented, so it's a good one to test against.
support.cssSupportsSelector = assert( function() {
/* eslint-disable no-undef */
return CSS.supports( "selector(*)" ) &&
// Support: Firefox 78-81 only
// In old Firefox, `:is()` didn't use forgiving parsing. In that case,
// fail this test as there's no selector to test against that.
// `CSS.supports` uses unforgiving parsing
document.querySelectorAll( ":is(:jqfake)" ) &&
// `*` is needed as Safari & newer Chrome implemented something in between
// for `:has()` - it throws in `qSA` if it only contains an unsupported
// argument but multiple ones, one of which is supported, are fine.
// We want to play safe in case `:is()` gets the same treatment.
!CSS.supports( "selector(:is(*,:jqfake))" );
/* eslint-enable */
} );
/* Attributes /* Attributes
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
@ -1440,6 +1486,17 @@ setDocument = Sizzle.setDocument = function( node ) {
} ); } );
} }
if ( !support.cssSupportsSelector ) {
// Support: Chrome 105+, Safari 15.4+
// `:has()` uses a forgiving selector list as an argument so our regular
// `try-catch` mechanism fails to catch `:has()` with arguments not supported
// natively like `:has(:contains("Foo"))`. Where supported & spec-compliant,
// we now use `CSS.supports("selector(:is(SELECTOR_TO_BE_TESTED))")`, but
// outside that we mark `:has` as buggy.
rbuggyQSA.push( ":has" );
}
rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
@ -1452,7 +1509,14 @@ setDocument = Sizzle.setDocument = function( node ) {
// As in, an element does not contain itself // As in, an element does not contain itself
contains = hasCompare || rnative.test( docElem.contains ) ? contains = hasCompare || rnative.test( docElem.contains ) ?
function( a, b ) { function( a, b ) {
var adown = a.nodeType === 9 ? a.documentElement : a,
// Support: IE <9 only
// IE doesn't have `contains` on `document` so we need to check for
// `documentElement` presence.
// We need to fall back to `a` when `documentElement` is missing
// as `ownerDocument` of elements within `<template/>` may have
// a null one - a default behavior of all modern browsers.
var adown = a.nodeType === 9 && a.documentElement || a,
bup = b && b.parentNode; bup = b && b.parentNode;
return a === bup || !!( bup && bup.nodeType === 1 && ( return a === bup || !!( bup && bup.nodeType === 1 && (
adown.contains ? adown.contains ?
@ -2242,7 +2306,7 @@ Expr = Sizzle.selectors = {
return elem.nodeName.toLowerCase() === "input" && return elem.nodeName.toLowerCase() === "input" &&
elem.type === "text" && elem.type === "text" &&
// Support: IE<8 // Support: IE <10 only
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text" // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
( ( attr = elem.getAttribute( "type" ) ) == null || ( ( attr = elem.getAttribute( "type" ) ) == null ||
attr.toLowerCase() === "text" ); attr.toLowerCase() === "text" );
@ -3129,8 +3193,8 @@ jQuery.fn.extend( {
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 (trac-9521)
// Strict HTML recognition (#11290: must start with <) // Strict HTML recognition (trac-11290: must start with <)
// Shortcut simple #id case for speed // Shortcut simple #id case for speed
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
@ -4087,7 +4151,7 @@ jQuery.extend( {
isReady: false, isReady: false,
// A counter to track how many items to wait for before // A counter to track how many items to wait for before
// the ready event fires. See #6781 // the ready event fires. See trac-6781
readyWait: 1, readyWait: 1,
// Handle when the DOM is ready // Handle when the DOM is ready
@ -4215,7 +4279,7 @@ function fcamelCase( _all, letter ) {
// Convert dashed to camelCase; used by the css and data modules // Convert dashed to camelCase; used by the css and data modules
// Support: IE <=9 - 11, Edge 12 - 15 // Support: IE <=9 - 11, Edge 12 - 15
// Microsoft forgot to hump their vendor prefix (#9572) // Microsoft forgot to hump their vendor prefix (trac-9572)
function camelCase( string ) { function camelCase( string ) {
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
} }
@ -4251,7 +4315,7 @@ Data.prototype = {
value = {}; value = {};
// We can accept data for non-element nodes in modern browsers, // We can accept data for non-element nodes in modern browsers,
// but we should not, see #8335. // but we should not, see trac-8335.
// Always return an empty object. // Always return an empty object.
if ( acceptData( owner ) ) { if ( acceptData( owner ) ) {
@ -4490,7 +4554,7 @@ jQuery.fn.extend( {
while ( i-- ) { while ( i-- ) {
// Support: IE 11 only // Support: IE 11 only
// The attrs elements can be null (#14894) // The attrs elements can be null (trac-14894)
if ( attrs[ i ] ) { if ( attrs[ i ] ) {
name = attrs[ i ].name; name = attrs[ i ].name;
if ( name.indexOf( "data-" ) === 0 ) { if ( name.indexOf( "data-" ) === 0 ) {
@ -4913,9 +4977,9 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
input = document.createElement( "input" ); input = document.createElement( "input" );
// Support: Android 4.0 - 4.3 only // Support: Android 4.0 - 4.3 only
// Check state lost if the name is set (#11217) // Check state lost if the name is set (trac-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 (trac-14901)
input.setAttribute( "type", "radio" ); input.setAttribute( "type", "radio" );
input.setAttribute( "checked", "checked" ); input.setAttribute( "checked", "checked" );
input.setAttribute( "name", "t" ); input.setAttribute( "name", "t" );
@ -4939,7 +5003,7 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
} )(); } )();
// We have to close these tags to support XHTML (#13200) // We have to close these tags to support XHTML (trac-13200)
var wrapMap = { var wrapMap = {
// XHTML parsers do not magically insert elements in the // XHTML parsers do not magically insert elements in the
@ -4965,7 +5029,7 @@ if ( !support.option ) {
function getAll( context, tag ) { function getAll( context, tag ) {
// Support: IE <=9 - 11 only // 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 (trac-15151)
var ret; var ret;
if ( typeof context.getElementsByTagName !== "undefined" ) { if ( typeof context.getElementsByTagName !== "undefined" ) {
@ -5048,7 +5112,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
// Remember the top-level container // Remember the top-level container
tmp = fragment.firstChild; tmp = fragment.firstChild;
// Ensure the created nodes are orphaned (#12392) // Ensure the created nodes are orphaned (trac-12392)
tmp.textContent = ""; tmp.textContent = "";
} }
} }
@ -5469,15 +5533,15 @@ jQuery.event = {
for ( ; cur !== this; cur = cur.parentNode || this ) { for ( ; cur !== this; cur = cur.parentNode || this ) {
// Don't check non-elements (#13208) // Don't check non-elements (trac-13208)
// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
matchedHandlers = []; matchedHandlers = [];
matchedSelectors = {}; matchedSelectors = {};
for ( i = 0; i < delegateCount; i++ ) { for ( i = 0; i < delegateCount; i++ ) {
handleObj = handlers[ i ]; handleObj = handlers[ i ];
// Don't conflict with Object.prototype properties (#13203) // Don't conflict with Object.prototype properties (trac-13203)
sel = handleObj.selector + " "; sel = handleObj.selector + " ";
if ( matchedSelectors[ sel ] === undefined ) { if ( matchedSelectors[ sel ] === undefined ) {
@ -5731,7 +5795,7 @@ jQuery.Event = function( src, props ) {
// Create target properties // Create target properties
// Support: Safari <=6 - 7 only // Support: Safari <=6 - 7 only
// Target should not be a text node (#504, #13143) // Target should not be a text node (trac-504, trac-13143)
this.target = ( src.target && src.target.nodeType === 3 ) ? this.target = ( src.target && src.target.nodeType === 3 ) ?
src.target.parentNode : src.target.parentNode :
src.target; src.target;
@ -5854,10 +5918,10 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
return true; return true;
}, },
// Suppress native focus or blur as it's already being fired // Suppress native focus or blur if we're currently inside
// in leverageNative. // a leveraged native-event stack
_default: function() { _default: function( event ) {
return true; return dataPriv.get( event.target, type );
}, },
delegateType: delegateType delegateType: delegateType
@ -5956,7 +6020,8 @@ var
// checked="checked" or checked // checked="checked" or checked
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
// Prefer a tbody over its parent table for containing new rows // Prefer a tbody over its parent table for containing new rows
function manipulationTarget( elem, content ) { function manipulationTarget( elem, content ) {
@ -6070,7 +6135,7 @@ function domManip( collection, args, callback, ignored ) {
// Use the original fragment for the last item // Use the original fragment for the last item
// instead of the first because it can end up // instead of the first because it can end up
// being emptied incorrectly in certain situations (#8070). // being emptied incorrectly in certain situations (trac-8070).
for ( ; i < l; i++ ) { for ( ; i < l; i++ ) {
node = fragment; node = fragment;
@ -6111,6 +6176,12 @@ function domManip( collection, args, callback, ignored ) {
}, doc ); }, doc );
} }
} else { } else {
// Unwrap a CDATA section containing script contents. This shouldn't be
// needed as in XML documents they're already not visible when
// inspecting element contents and in HTML documents they have no
// meaning but we're preserving that logic for backwards compatibility.
// This will be removed completely in 4.0. See gh-4904.
DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
} }
} }
@ -6393,9 +6464,12 @@ jQuery.each( {
} ); } );
var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
var rcustomProp = /^--/;
var getStyles = function( elem ) { var getStyles = function( elem ) {
// Support: IE <=11 only, Firefox <=30 (#15098, #14150) // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-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;
@ -6430,6 +6504,15 @@ var swap = function( elem, options, callback ) {
var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
var whitespace = "[\\x20\\t\\r\\n\\f]";
var rtrimCSS = new RegExp(
"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
"g"
);
( function() { ( function() {
@ -6495,7 +6578,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
} }
// Support: IE <=9 - 11 only // Support: IE <=9 - 11 only
// Style of cloned element affects source element cloned (#8908) // Style of cloned element affects source element cloned (trac-8908)
div.style.backgroundClip = "content-box"; div.style.backgroundClip = "content-box";
div.cloneNode( true ).style.backgroundClip = ""; div.cloneNode( true ).style.backgroundClip = "";
support.clearCloneStyle = div.style.backgroundClip === "content-box"; support.clearCloneStyle = div.style.backgroundClip === "content-box";
@ -6575,6 +6658,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
function curCSS( elem, name, computed ) { function curCSS( elem, name, computed ) {
var width, minWidth, maxWidth, ret, var width, minWidth, maxWidth, ret,
isCustomProp = rcustomProp.test( name ),
// Support: Firefox 51+ // Support: Firefox 51+
// Retrieving style before computed somehow // Retrieving style before computed somehow
@ -6585,11 +6669,42 @@ function curCSS( elem, name, computed ) {
computed = computed || getStyles( elem ); computed = computed || getStyles( elem );
// getPropertyValue is needed for: // getPropertyValue is needed for:
// .css('filter') (IE 9 only, #12537) // .css('filter') (IE 9 only, trac-12537)
// .css('--customProperty) (#3144) // .css('--customProperty) (gh-3144)
if ( computed ) { if ( computed ) {
// Support: IE <=9 - 11+
// IE only supports `"float"` in `getPropertyValue`; in computed styles
// it's only available as `"cssFloat"`. We no longer modify properties
// sent to `.css()` apart from camelCasing, so we need to check both.
// Normally, this would create difference in behavior: if
// `getPropertyValue` returns an empty string, the value returned
// by `.css()` would be `undefined`. This is usually the case for
// disconnected elements. However, in IE even disconnected elements
// with no styles return `"none"` for `getPropertyValue( "float" )`
ret = computed.getPropertyValue( name ) || computed[ name ]; ret = computed.getPropertyValue( name ) || computed[ name ];
if ( isCustomProp && ret ) {
// Support: Firefox 105+, Chrome <=105+
// Spec requires trimming whitespace for custom properties (gh-4926).
// Firefox only trims leading whitespace. Chrome just collapses
// both leading & trailing whitespace to a single space.
//
// Fall back to `undefined` if empty string returned.
// This collapses a missing definition with property defined
// and set to an empty string but there's no standard API
// allowing us to differentiate them without a performance penalty
// and returning `undefined` aligns with older jQuery.
//
// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
// as whitespace while CSS does not, but this is not a problem
// because CSS preprocessing replaces them with U+000A LINE FEED
// (which *is* CSS whitespace)
// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
ret = ret.replace( rtrimCSS, "$1" ) || undefined;
}
if ( ret === "" && !isAttached( elem ) ) { if ( ret === "" && !isAttached( elem ) ) {
ret = jQuery.style( elem, name ); ret = jQuery.style( elem, name );
} }
@ -6685,7 +6800,6 @@ 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]).+)/,
rcustomProp = /^--/,
cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssShow = { position: "absolute", visibility: "hidden", display: "block" },
cssNormalTransform = { cssNormalTransform = {
letterSpacing: "0", letterSpacing: "0",
@ -6921,15 +7035,15 @@ jQuery.extend( {
if ( value !== undefined ) { if ( value !== undefined ) {
type = typeof value; type = typeof value;
// Convert "+=" or "-=" to relative numbers (#7345) // Convert "+=" or "-=" to relative numbers (trac-7345)
if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
value = adjustCSS( elem, name, ret ); value = adjustCSS( elem, name, ret );
// Fixes bug #9237 // Fixes bug trac-9237
type = "number"; type = "number";
} }
// Make sure that null and NaN values aren't set (#7116) // Make sure that null and NaN values aren't set (trac-7116)
if ( value == null || value !== value ) { if ( value == null || value !== value ) {
return; return;
} }
@ -7553,7 +7667,7 @@ function Animation( elem, properties, options ) {
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
// Support: Android 2.3 only // 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 )` (trac-12497)
temp = remaining / animation.duration || 0, temp = remaining / animation.duration || 0,
percent = 1 - temp, percent = 1 - temp,
index = 0, index = 0,
@ -7943,7 +8057,6 @@ jQuery.fx.speeds = {
// Based off of the plugin by Clint Helfers, with permission. // Based off of the plugin by Clint Helfers, with permission.
// 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";
@ -8168,8 +8281,7 @@ jQuery.extend( {
// Support: IE <=9 - 11 only // 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
// 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 (trac-12072)
// Use proper attribute retrieval(#12072)
var tabindex = jQuery.find.attr( elem, "tabindex" ); var tabindex = jQuery.find.attr( elem, "tabindex" );
if ( tabindex ) { if ( tabindex ) {
@ -8273,8 +8385,7 @@ function classesToArray( value ) {
jQuery.fn.extend( { jQuery.fn.extend( {
addClass: function( value ) { addClass: function( value ) {
var classes, elem, cur, curValue, clazz, j, finalValue, var classNames, cur, curValue, className, i, finalValue;
i = 0;
if ( isFunction( value ) ) { if ( isFunction( value ) ) {
return this.each( function( j ) { return this.each( function( j ) {
@ -8282,36 +8393,35 @@ jQuery.fn.extend( {
} ); } );
} }
classes = classesToArray( value ); classNames = classesToArray( value );
if ( classes.length ) { if ( classNames.length ) {
while ( ( elem = this[ i++ ] ) ) { return this.each( function() {
curValue = getClass( elem ); curValue = getClass( this );
cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
if ( cur ) { if ( cur ) {
j = 0; for ( i = 0; i < classNames.length; i++ ) {
while ( ( clazz = classes[ j++ ] ) ) { className = classNames[ i ];
if ( cur.indexOf( " " + clazz + " " ) < 0 ) { if ( cur.indexOf( " " + className + " " ) < 0 ) {
cur += clazz + " "; cur += className + " ";
} }
} }
// Only assign if different to avoid unneeded rendering. // Only assign if different to avoid unneeded rendering.
finalValue = stripAndCollapse( cur ); finalValue = stripAndCollapse( cur );
if ( curValue !== finalValue ) { if ( curValue !== finalValue ) {
elem.setAttribute( "class", finalValue ); this.setAttribute( "class", finalValue );
} }
} }
} } );
} }
return this; return this;
}, },
removeClass: function( value ) { removeClass: function( value ) {
var classes, elem, cur, curValue, clazz, j, finalValue, var classNames, cur, curValue, className, i, finalValue;
i = 0;
if ( isFunction( value ) ) { if ( isFunction( value ) ) {
return this.each( function( j ) { return this.each( function( j ) {
@ -8323,45 +8433,42 @@ jQuery.fn.extend( {
return this.attr( "class", "" ); return this.attr( "class", "" );
} }
classes = classesToArray( value ); classNames = classesToArray( value );
if ( classes.length ) { if ( classNames.length ) {
while ( ( elem = this[ i++ ] ) ) { return this.each( function() {
curValue = getClass( elem ); curValue = getClass( this );
// This expression is here for better compressibility (see addClass) // This expression is here for better compressibility (see addClass)
cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
if ( cur ) { if ( cur ) {
j = 0; for ( i = 0; i < classNames.length; i++ ) {
while ( ( clazz = classes[ j++ ] ) ) { className = classNames[ i ];
// Remove *all* instances // Remove *all* instances
while ( cur.indexOf( " " + clazz + " " ) > -1 ) { while ( cur.indexOf( " " + className + " " ) > -1 ) {
cur = cur.replace( " " + clazz + " ", " " ); cur = cur.replace( " " + className + " ", " " );
} }
} }
// Only assign if different to avoid unneeded rendering. // Only assign if different to avoid unneeded rendering.
finalValue = stripAndCollapse( cur ); finalValue = stripAndCollapse( cur );
if ( curValue !== finalValue ) { if ( curValue !== finalValue ) {
elem.setAttribute( "class", finalValue ); this.setAttribute( "class", finalValue );
} }
} }
} } );
} }
return this; return this;
}, },
toggleClass: function( value, stateVal ) { toggleClass: function( value, stateVal ) {
var type = typeof value, var classNames, className, i, self,
type = typeof value,
isValidValue = type === "string" || Array.isArray( value ); isValidValue = type === "string" || Array.isArray( value );
if ( typeof stateVal === "boolean" && isValidValue ) {
return stateVal ? this.addClass( value ) : this.removeClass( value );
}
if ( isFunction( value ) ) { if ( isFunction( value ) ) {
return this.each( function( i ) { return this.each( function( i ) {
jQuery( this ).toggleClass( jQuery( this ).toggleClass(
@ -8371,17 +8478,20 @@ jQuery.fn.extend( {
} ); } );
} }
return this.each( function() { if ( typeof stateVal === "boolean" && isValidValue ) {
var className, i, self, classNames; return stateVal ? this.addClass( value ) : this.removeClass( value );
}
classNames = classesToArray( value );
return this.each( function() {
if ( isValidValue ) { if ( isValidValue ) {
// Toggle individual class names // Toggle individual class names
i = 0;
self = jQuery( this ); self = jQuery( this );
classNames = classesToArray( value );
while ( ( className = classNames[ i++ ] ) ) { for ( i = 0; i < classNames.length; i++ ) {
className = classNames[ i ];
// Check each className given, space separated list // Check each className given, space separated list
if ( self.hasClass( className ) ) { if ( self.hasClass( className ) ) {
@ -8515,7 +8625,7 @@ jQuery.extend( {
val : val :
// Support: IE <=10 - 11 only // Support: IE <=10 - 11 only
// option.text throws exceptions (#14686, #14858) // option.text throws exceptions (trac-14686, trac-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
stripAndCollapse( jQuery.text( elem ) ); stripAndCollapse( jQuery.text( elem ) );
@ -8542,7 +8652,7 @@ jQuery.extend( {
option = options[ i ]; option = options[ i ];
// Support: IE <=9 only // Support: IE <=9 only
// IE8-9 doesn't update selected after form reset (#2551) // IE8-9 doesn't update selected after form reset (trac-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
@ -8685,8 +8795,8 @@ jQuery.extend( jQuery.event, {
return; return;
} }
// Determine event propagation path in advance, per W3C events spec (#9951) // Determine event propagation path in advance, per W3C events spec (trac-9951)
// Bubble up to document, then to window; watch for a global ownerDocument var (#9724) // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
bubbleType = special.delegateType || type; bubbleType = special.delegateType || type;
@ -8738,7 +8848,7 @@ jQuery.extend( jQuery.event, {
acceptData( elem ) ) { acceptData( elem ) ) {
// Call a native DOM method on the target with the same 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 (trac-6170)
if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
// Don't re-trigger an onFOO event when we call its FOO() method // Don't re-trigger an onFOO event when we call its FOO() method
@ -9012,7 +9122,7 @@ var
rantiCache = /([?&])_=[^&]*/, rantiCache = /([?&])_=[^&]*/,
rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
// #7653, #8125, #8152: local protocol detection // trac-7653, trac-8125, trac-8152: local protocol detection
rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
rnoContent = /^(?:GET|HEAD)$/, rnoContent = /^(?:GET|HEAD)$/,
rprotocol = /^\/\//, rprotocol = /^\/\//,
@ -9035,7 +9145,7 @@ var
*/ */
transports = {}, transports = {},
// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
allTypes = "*/".concat( "*" ), allTypes = "*/".concat( "*" ),
// Anchor tag for parsing the document origin // Anchor tag for parsing the document origin
@ -9106,7 +9216,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
// A special extend for ajax options // A special extend for ajax options
// that takes "flat" options (not to be deep extended) // that takes "flat" options (not to be deep extended)
// Fixes #9887 // Fixes trac-9887
function ajaxExtend( target, src ) { function ajaxExtend( target, src ) {
var key, deep, var key, deep,
flatOptions = jQuery.ajaxSettings.flatOptions || {}; flatOptions = jQuery.ajaxSettings.flatOptions || {};
@ -9517,12 +9627,12 @@ jQuery.extend( {
deferred.promise( jqXHR ); deferred.promise( jqXHR );
// 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 (trac-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 ) + "" ) 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 trac-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
@ -9565,7 +9675,7 @@ jQuery.extend( {
} }
// We can fire global events as of now if asked to // We can fire global events as of now if asked to
// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
fireGlobals = jQuery.event && s.global; fireGlobals = jQuery.event && s.global;
// Watch for a new set of requests // Watch for a new set of requests
@ -9594,7 +9704,7 @@ jQuery.extend( {
if ( s.data && ( s.processData || typeof s.data === "string" ) ) { if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
// #9682: remove data so that it's not used in an eventual retry // trac-9682: remove data so that it's not used in an eventual retry
delete s.data; delete s.data;
} }
@ -9867,7 +9977,7 @@ jQuery._evalUrl = function( url, options, doc ) {
return jQuery.ajax( { return jQuery.ajax( {
url: url, url: url,
// Make this explicit, since user can override this through ajaxSetup (#11264) // Make this explicit, since user can override this through ajaxSetup (trac-11264)
type: "GET", type: "GET",
dataType: "script", dataType: "script",
cache: true, cache: true,
@ -9976,7 +10086,7 @@ var xhrSuccessStatus = {
0: 200, 0: 200,
// Support: IE <=9 only // Support: IE <=9 only
// #1450: sometimes IE returns 1223 when it should be 204 // trac-1450: sometimes IE returns 1223 when it should be 204
1223: 204 1223: 204
}, },
xhrSupported = jQuery.ajaxSettings.xhr(); xhrSupported = jQuery.ajaxSettings.xhr();
@ -10048,7 +10158,7 @@ jQuery.ajaxTransport( function( options ) {
} else { } else {
complete( complete(
// File: protocol always yields status 0; see #8605, #14207 // File: protocol always yields status 0; see trac-8605, trac-14207
xhr.status, xhr.status,
xhr.statusText xhr.statusText
); );
@ -10109,7 +10219,7 @@ jQuery.ajaxTransport( function( options ) {
xhr.send( options.hasContent && options.data || null ); xhr.send( options.hasContent && options.data || null );
} catch ( e ) { } catch ( e ) {
// #14683: Only rethrow if this hasn't been notified as an error yet // trac-14683: Only rethrow if this hasn't been notified as an error yet
if ( callback ) { if ( callback ) {
throw e; throw e;
} }
@ -10753,7 +10863,9 @@ jQuery.each(
// Support: Android <=4.0 only // Support: Android <=4.0 only
// Make sure we trim BOM and NBSP // Make sure we trim BOM and NBSP
var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; // Require that the "whitespace run" starts from a non-whitespace
// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
// Bind a function to a context, optionally partially applying any // Bind a function to a context, optionally partially applying any
// arguments. // arguments.
@ -10820,7 +10932,7 @@ jQuery.isNumeric = function( obj ) {
jQuery.trim = function( text ) { jQuery.trim = function( text ) {
return text == null ? return text == null ?
"" : "" :
( text + "" ).replace( rtrim, "" ); ( text + "" ).replace( rtrim, "$1" );
}; };
@ -10868,8 +10980,8 @@ jQuery.noConflict = function( deep ) {
}; };
// Expose jQuery and $ identifiers, even in AMD // Expose jQuery and $ identifiers, even in AMD
// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566) // and CommonJS for browser emulators (trac-13566)
if ( typeof noGlobal === "undefined" ) { if ( typeof noGlobal === "undefined" ) {
window.jQuery = window.$ = jQuery; window.jQuery = window.$ = jQuery;
} }

View File

@ -1,7 +1,7 @@
( function() { ( function() {
"use strict"; "use strict";
var DEFAULT_JQUERY_VERSION = "3.6.0"; var DEFAULT_JQUERY_VERSION = "3.6.3";
requirejs.config( { requirejs.config( {
paths: { paths: {
@ -123,7 +123,7 @@ function migrateUrl() {
if ( jqueryVersion === "git" ) { if ( jqueryVersion === "git" ) {
url = "https://releases.jquery.com/git/jquery-migrate-git"; url = "https://releases.jquery.com/git/jquery-migrate-git";
} else if ( jqueryVersion[ 0 ] === "3" ) { } else if ( jqueryVersion[ 0 ] === "3" ) {
url = "../../../external/jquery-migrate-3.3.2/jquery-migrate"; url = "../../../external/jquery-migrate-3.4.0/jquery-migrate";
} else if ( jqueryVersion[ 0 ] === "1" || jqueryVersion[ 0 ] === "2" ) { } else if ( jqueryVersion[ 0 ] === "1" || jqueryVersion[ 0 ] === "2" ) {
url = "../../../external/jquery-migrate-1.4.1/jquery-migrate"; url = "../../../external/jquery-migrate-1.4.1/jquery-migrate";
} else if ( jqueryVersion === "custom" ) { } else if ( jqueryVersion === "custom" ) {

View File

@ -29,7 +29,7 @@ QUnit.config.urlConfig.push( {
"3.3.0", "3.3.1", "3.3.0", "3.3.1",
"3.4.0", "3.4.1", "3.4.0", "3.4.1",
"3.5.0", "3.5.1", "3.5.0", "3.5.1",
"3.6.0", "3.6.0", "3.6.1", "3.6.2", "3.6.3",
"3.x-git", "git", "custom" "3.x-git", "git", "custom"
], ],
tooltip: "Which jQuery Core version to test against" tooltip: "Which jQuery Core version to test against"

View File

@ -16,7 +16,7 @@ var versions = [
"3.3.0", "3.3.1", "3.3.0", "3.3.1",
"3.4.0", "3.4.1", "3.4.0", "3.4.1",
"3.5.0", "3.5.1", "3.5.0", "3.5.1",
"3.6.0", "3.6.0", "3.6.1", "3.6.2", "3.6.3",
"3.x-git", "git", "custom" "3.x-git", "git", "custom"
], ],
additionalTests = { additionalTests = {