@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ * !
* jQuery JavaScript Library v3 . 3 .1
* jQuery JavaScript Library v3 . 4 .1
* https : //jquery.com/
*
* Includes Sizzle . js
@ -9,7 +9,7 @@
@@ -9,7 +9,7 @@
* Released under the MIT license
* https : //jquery.org/license
*
* Date : 2018 - 01 - 20 T17 : 2 4 Z
* Date : 2019 - 05 - 01 T21 : 0 4 Z
* /
( function ( global , factory ) {
@ -91,20 +91,33 @@ var isWindow = function isWindow( obj ) {
@@ -91,20 +91,33 @@ var isWindow = function isWindow( obj ) {
var preservedScriptAttributes = {
type : true ,
src : true ,
nonce : true ,
noModule : true
} ;
function DOMEval ( code , doc , node ) {
function DOMEval ( code , node , doc ) {
doc = doc || document ;
var i ,
var i , val ,
script = doc . createElement ( "script" ) ;
script . text = code ;
if ( node ) {
for ( i in preservedScriptAttributes ) {
if ( node [ i ] ) {
script [ i ] = node [ i ] ;
// Support: Firefox 64+, Edge 18+
// Some browsers don't support the "nonce" property on scripts.
// On the other hand, just using `getAttribute` is not enough as
// the `nonce` attribute is reset to an empty string whenever it
// becomes browsing-context connected.
// See https://github.com/whatwg/html/issues/2369
// See https://html.spec.whatwg.org/#nonce-attributes
// The `node.getAttribute` check was added for the sake of
// `jQuery.globalEval` so that it can fake a nonce-containing node
// via an object.
val = node [ i ] || node . getAttribute && node . getAttribute ( i ) ;
if ( val ) {
script . setAttribute ( i , val ) ;
}
}
}
@ -129,7 +142,7 @@ function toType( obj ) {
@@ -129,7 +142,7 @@ function toType( obj ) {
var
version = "3.3 .1" ,
version = "3.4 .1" ,
// Define a local copy of jQuery
jQuery = function ( selector , context ) {
@ -258,25 +271,28 @@ jQuery.extend = jQuery.fn.extend = function() {
@@ -258,25 +271,28 @@ jQuery.extend = jQuery.fn.extend = function() {
// Extend the base object
for ( name in options ) {
src = target [ name ] ;
copy = options [ name ] ;
// Prevent Object.prototype pollution
// Prevent never-ending loop
if ( target === copy ) {
if ( name === "__proto__" || target === copy ) {
continue ;
}
// Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery . isPlainObject ( copy ) ||
( copyIsArray = Array . isArray ( copy ) ) ) ) {
src = target [ name ] ;
if ( copyIsArray ) {
copyIsArray = false ;
clone = src && Array . isArray ( src ) ? src : [ ] ;
// Ensure proper type for the source value
if ( copyIsArray && ! Array . isArray ( src ) ) {
clone = [ ] ;
} else if ( ! copyIsArray && ! jQuery . isPlainObject ( src ) ) {
clone = { } ;
} else {
clone = src && jQuery . isPlainObject ( src ) ? src : { } ;
clone = src ;
}
copyIsArray = false ;
// Never move original objects, clone them
target [ name ] = jQuery . extend ( deep , clone , copy ) ;
@ -329,9 +345,6 @@ jQuery.extend( {
@@ -329,9 +345,6 @@ jQuery.extend( {
} ,
isEmptyObject : function ( obj ) {
/* eslint-disable no-unused-vars */
// See https://github.com/eslint/eslint/issues/6125
var name ;
for ( name in obj ) {
@ -341,8 +354,8 @@ jQuery.extend( {
@@ -341,8 +354,8 @@ jQuery.extend( {
} ,
// Evaluates a script in a global context
globalEval : function ( code ) {
DOMEval ( code ) ;
globalEval : function ( code , options ) {
DOMEval ( code , { nonce : options && options . nonce } ) ;
} ,
each : function ( obj , callback ) {
@ -498,14 +511,14 @@ function isArrayLike( obj ) {
@@ -498,14 +511,14 @@ function isArrayLike( obj ) {
}
var Sizzle =
/ * !
* Sizzle CSS Selector Engine v2 . 3.3
* Sizzle CSS Selector Engine v2 . 3.4
* https : //sizzlejs.com/
*
* Copyright jQuery Foundation and other contributors
* Copyright JS Foundation and other contributors
* Released under the MIT license
* http : //jquery.org/license
* https : //js.foundation/
*
* Date : 2016 - 08 - 08
* Date : 2019 - 04 - 08
* /
( function ( window ) {
@ -539,6 +552,7 @@ var i,
@@ -539,6 +552,7 @@ var i,
classCache = createCache ( ) ,
tokenCache = createCache ( ) ,
compilerCache = createCache ( ) ,
nonnativeSelectorCache = createCache ( ) ,
sortOrder = function ( a , b ) {
if ( a === b ) {
hasDuplicate = true ;
@ -600,8 +614,7 @@ var i,
@@ -600,8 +614,7 @@ var i,
rcomma = new RegExp ( "^" + whitespace + "*," + whitespace + "*" ) ,
rcombinators = new RegExp ( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ) ,
rattributeQuotes = new RegExp ( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]" , "g" ) ,
rdescend = new RegExp ( whitespace + "|>" ) ,
rpseudo = new RegExp ( pseudos ) ,
ridentifier = new RegExp ( "^" + identifier + "$" ) ,
@ -622,6 +635,7 @@ var i,
@@ -622,6 +635,7 @@ var i,
whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)" , "i" )
} ,
rhtml = /HTML$/i ,
rinputs = /^(?:input|select|textarea|button)$/i ,
rheader = /^h\d$/i ,
@ -676,9 +690,9 @@ var i,
@@ -676,9 +690,9 @@ var i,
setDocument ( ) ;
} ,
disabledAncestor = addCombinator (
inDisabledFieldset = addCombinator (
function ( elem ) {
return elem . disabled === true && ( "form" in elem || "label" in elem ) ;
return elem . disabled === true && elem . nodeName . toLowerCase ( ) === "fieldset" ;
} ,
{ dir : "parentNode" , next : "legend" }
) ;
@ -791,18 +805,22 @@ function Sizzle( selector, context, results, seed ) {
@@ -791,18 +805,22 @@ function Sizzle( selector, context, results, seed ) {
// Take advantage of querySelectorAll
if ( support . qsa &&
! compilerCache [ selector + " " ] &&
( ! rbuggyQSA || ! rbuggyQSA . test ( selector ) ) ) {
if ( nodeType !== 1 ) {
newContext = context ;
newSelector = selector ;
! nonnativeSelectorCache [ selector + " " ] &&
( ! rbuggyQSA || ! rbuggyQSA . test ( selector ) ) &&
// qSA looks outside Element context, which is not what we want
// Thanks to Andrew Dupont for this workaround technique
// Support: IE <=8
// Support: IE 8 only
// Exclude object elements
} else if ( context . nodeName . toLowerCase ( ) !== "object" ) {
( nodeType !== 1 || context . nodeName . toLowerCase ( ) !== "object" ) ) {
newSelector = selector ;
newContext = context ;
// qSA considers elements outside a scoping root when evaluating child or
// descendant combinators, which is not what we want.
// In such cases, we work around the behavior by prefixing every selector in the
// list with an ID selector referencing the scope context.
// Thanks to Andrew Dupont for this technique.
if ( nodeType === 1 && rdescend . test ( selector ) ) {
// Capture the context ID, setting it first if necessary
if ( ( nid = context . getAttribute ( "id" ) ) ) {
@ -824,17 +842,16 @@ function Sizzle( selector, context, results, seed ) {
@@ -824,17 +842,16 @@ function Sizzle( selector, context, results, seed ) {
context ;
}
if ( newSelector ) {
try {
push . apply ( results ,
newContext . querySelectorAll ( newSelector )
) ;
return results ;
} catch ( qsaError ) {
} finally {
if ( nid === expando ) {
context . removeAttribute ( "id" ) ;
}
try {
push . apply ( results ,
newContext . querySelectorAll ( newSelector )
) ;
return results ;
} catch ( qsaError ) {
nonnativeSelectorCache ( selector , true ) ;
} finally {
if ( nid === expando ) {
context . removeAttribute ( "id" ) ;
}
}
}
@ -998,7 +1015,7 @@ function createDisabledPseudo( disabled ) {
@@ -998,7 +1015,7 @@ function createDisabledPseudo( disabled ) {
// Where there is no isDisabled, check manually
/* jshint -W018 */
elem . isDisabled !== ! disabled &&
disabledAncestor ( elem ) === disabled ;
inDisabledFieldset ( elem ) === disabled ;
}
return elem . disabled === disabled ;
@ -1055,10 +1072,13 @@ support = Sizzle.support = {};
@@ -1055,10 +1072,13 @@ support = Sizzle.support = {};
* @ returns { Boolean } True iff elem is a non - HTML XML node
* /
isXML = Sizzle . isXML = function ( elem ) {
// documentElement is verified for cases where it doesn't yet exist
// (such as loading iframes in IE - #4833)
var documentElement = elem && ( elem . ownerDocument || elem ) . documentElement ;
return documentElement ? documentElement . nodeName !== "HTML" : false ;
var namespace = elem . namespaceURI ,
docElem = ( elem . ownerDocument || elem ) . documentElement ;
// Support: IE <=8
// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
// https://bugs.jquery.com/ticket/4833
return ! rhtml . test ( namespace || docElem && docElem . nodeName || "HTML" ) ;
} ;
/ * *
@ -1480,11 +1500,8 @@ Sizzle.matchesSelector = function( elem, expr ) {
@@ -1480,11 +1500,8 @@ Sizzle.matchesSelector = function( elem, expr ) {
setDocument ( elem ) ;
}
// Make sure that attribute selectors are quoted
expr = expr . replace ( rattributeQuotes , "='$1']" ) ;
if ( support . matchesSelector && documentIsHTML &&
! compile rCache[ expr + " " ] &&
! nonnativeSelectorCache [ expr + " " ] &&
( ! rbuggyMatches || ! rbuggyMatches . test ( expr ) ) &&
( ! rbuggyQSA || ! rbuggyQSA . test ( expr ) ) ) {
@ -1498,7 +1515,9 @@ Sizzle.matchesSelector = function( elem, expr ) {
@@ -1498,7 +1515,9 @@ Sizzle.matchesSelector = function( elem, expr ) {
elem . document && elem . document . nodeType !== 11 ) {
return ret ;
}
} catch ( e ) { }
} catch ( e ) {
nonnativeSelectorCache ( expr , true ) ;
}
}
return Sizzle ( expr , document , null , [ elem ] ) . length > 0 ;
@ -1957,7 +1976,7 @@ Expr = Sizzle.selectors = {
@@ -1957,7 +1976,7 @@ Expr = Sizzle.selectors = {
"contains" : markFunction ( function ( text ) {
text = text . replace ( runescape , funescape ) ;
return function ( elem ) {
return ( elem . textContent || elem . innerText || getText ( elem ) ) . indexOf ( text ) > - 1 ;
return ( elem . textContent || getText ( elem ) ) . indexOf ( text ) > - 1 ;
} ;
} ) ,
@ -2096,7 +2115,11 @@ Expr = Sizzle.selectors = {
@@ -2096,7 +2115,11 @@ Expr = Sizzle.selectors = {
} ) ,
"lt" : createPositionalPseudo ( function ( matchIndexes , length , argument ) {
var i = argument < 0 ? argument + length : argument ;
var i = argument < 0 ?
argument + length :
argument > length ?
length :
argument ;
for ( ; -- i >= 0 ; ) {
matchIndexes . push ( i ) ;
}
@ -3146,18 +3169,18 @@ jQuery.each( {
@@ -3146,18 +3169,18 @@ jQuery.each( {
return siblings ( elem . firstChild ) ;
} ,
contents : function ( elem ) {
if ( nodeName ( elem , "iframe" ) ) {
return elem . contentDocument ;
}
if ( typeof elem . contentDocument !== "undefined" ) {
return elem . contentDocument ;
}
// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
// Treat the template element as a regular one in browsers that
// don't support it.
if ( nodeName ( elem , "template" ) ) {
elem = elem . content || elem ;
}
// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
// Treat the template element as a regular one in browsers that
// don't support it.
if ( nodeName ( elem , "template" ) ) {
elem = elem . content || elem ;
}
return jQuery . merge ( [ ] , elem . childNodes ) ;
return jQuery . merge ( [ ] , elem . childNodes ) ;
}
} , function ( name , fn ) {
jQuery . fn [ name ] = function ( until , selector ) {
@ -4466,6 +4489,26 @@ var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
@@ -4466,6 +4489,26 @@ var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
var cssExpand = [ "Top" , "Right" , "Bottom" , "Left" ] ;
var documentElement = document . documentElement ;
var isAttached = function ( elem ) {
return jQuery . contains ( elem . ownerDocument , elem ) ;
} ,
composed = { composed : true } ;
// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
// Check attachment across shadow DOM boundaries when possible (gh-3504)
// Support: iOS 10.0-10.2 only
// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
// leading to errors. We need to check for `getRootNode`.
if ( documentElement . getRootNode ) {
isAttached = function ( elem ) {
return jQuery . contains ( elem . ownerDocument , elem ) ||
elem . getRootNode ( composed ) === elem . ownerDocument ;
} ;
}
var isHiddenWithinTree = function ( elem , el ) {
// isHiddenWithinTree might be called from jQuery#filter function;
@ -4480,7 +4523,7 @@ var isHiddenWithinTree = function( elem, el ) {
@@ -4480,7 +4523,7 @@ var isHiddenWithinTree = function( elem, el ) {
// 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 ) &&
isAttached ( elem ) &&
jQuery . css ( elem , "display" ) === "none" ;
} ;
@ -4522,7 +4565,8 @@ function adjustCSS( elem, prop, valueParts, tween ) {
@@ -4522,7 +4565,8 @@ function adjustCSS( elem, prop, valueParts, tween ) {
unit = valueParts && valueParts [ 3 ] || ( jQuery . cssNumber [ prop ] ? "" : "px" ) ,
// Starting value computation is required for potential unit mismatches
initialInUnit = ( jQuery . cssNumber [ prop ] || unit !== "px" && + initial ) &&
initialInUnit = elem . nodeType &&
( jQuery . cssNumber [ prop ] || unit !== "px" && + initial ) &&
rcssNum . exec ( jQuery . css ( elem , prop ) ) ;
if ( initialInUnit && initialInUnit [ 3 ] !== unit ) {
@ -4669,7 +4713,7 @@ jQuery.fn.extend( {
@@ -4669,7 +4713,7 @@ jQuery.fn.extend( {
} ) ;
var rcheckableType = ( /^(?:checkbox|radio)$/i ) ;
var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+ )/i ) ;
var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]* )/i ) ;
var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ) ;
@ -4741,7 +4785,7 @@ function setGlobalEval( elems, refElements ) {
@@ -4741,7 +4785,7 @@ function setGlobalEval( elems, refElements ) {
var rhtml = /<|&#?\w+;/ ;
function buildFragment ( elems , context , scripts , selection , ignored ) {
var elem , tmp , tag , wrap , contains , j ,
var elem , tmp , tag , wrap , attached , j ,
fragment = context . createDocumentFragment ( ) ,
nodes = [ ] ,
i = 0 ,
@ -4805,13 +4849,13 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
@@ -4805,13 +4849,13 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
continue ;
}
contains = jQuery . contains ( elem . ownerDocument , elem ) ;
attached = isAttached ( elem ) ;
// Append to fragment
tmp = getAll ( fragment . appendChild ( elem ) , "script" ) ;
// Preserve script evaluation history
if ( contains ) {
if ( attached ) {
setGlobalEval ( tmp ) ;
}
@ -4854,8 +4898,6 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
@@ -4854,8 +4898,6 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
div . innerHTML = "<textarea>x</textarea>" ;
support . noCloneChecked = ! ! div . cloneNode ( true ) . lastChild . defaultValue ;
} ) ( ) ;
var documentElement = document . documentElement ;
var
@ -4871,8 +4913,19 @@ function returnFalse() {
@@ -4871,8 +4913,19 @@ function returnFalse() {
return false ;
}
// Support: IE <=9 - 11+
// focus() and blur() are asynchronous, except when they are no-op.
// So expect focus to be synchronous when the element is already active,
// and blur to be synchronous when the element is not already active.
// (focus and blur are always synchronous in other supported browsers,
// this just defines when we can count on it).
function expectSync ( elem , type ) {
return ( elem === safeActiveElement ( ) ) === ( type === "focus" ) ;
}
// Support: IE <=9 only
// See #13393 for more info
// Accessing document.activeElement can throw unexpectedly
// https://bugs.jquery.com/ticket/13393
function safeActiveElement ( ) {
try {
return document . activeElement ;
@ -5172,9 +5225,10 @@ jQuery.event = {
@@ -5172,9 +5225,10 @@ jQuery.event = {
while ( ( handleObj = matched . handlers [ j ++ ] ) &&
! event . isImmediatePropagationStopped ( ) ) {
// Triggered event must either 1) have no namespace, or 2) have namespace(s)
// a subset or equal to those in the bound event (both can have no namespace).
if ( ! event . rnamespace || event . rnamespace . test ( handleObj . namespace ) ) {
// If the event is namespaced, then each handler is only invoked if it is
// specially universal or its namespaces are a superset of the event's.
if ( ! event . rnamespace || handleObj . namespace === false ||
event . rnamespace . test ( handleObj . namespace ) ) {
event . handleObj = handleObj ;
event . data = handleObj . data ;
@ -5298,39 +5352,51 @@ jQuery.event = {
@@ -5298,39 +5352,51 @@ jQuery.event = {
// Prevent triggered image.load events from bubbling to window.load
noBubble : true
} ,
focus : {
click : {
// Fire native event if possible so blur/focus sequence is correct
trigger : function ( ) {
if ( this !== safeActiveElement ( ) && this . focus ) {
this . focus ( ) ;
return false ;
}
} ,
delegateType : "focusin"
} ,
blur : {
trigger : function ( ) {
if ( this === safeActiveElement ( ) && this . blur ) {
this . blur ( ) ;
return false ;
// Utilize native event to ensure correct state for checkable inputs
setup : function ( data ) {
// For mutual compressibility with _default, replace `this` access with a local var.
// `|| data` is dead code meant only to preserve the variable through minification.
var el = this || data ;
// Claim the first handler
if ( rcheckableType . test ( el . type ) &&
el . click && nodeName ( el , "input" ) ) {
// dataPriv.set( el, "click", ... )
leverageNative ( el , "click" , returnTrue ) ;
}
// Return false to allow normal processing in the caller
return false ;
} ,
delegateType : "focusout"
} ,
click : {
trigger : function ( data ) {
// For checkbox, fire native event so checked state will be right
trigger : function ( ) {
if ( this . type === "checkbox" && this . click && nodeName ( this , "input" ) ) {
this . click ( ) ;
return false ;
// For mutual compressibility with _default, replace `this` access with a local var.
// `|| data` is dead code meant only to preserve the variable through minification.
var el = this || data ;
// Force setup before triggering a click
if ( rcheckableType . test ( el . type ) &&
el . click && nodeName ( el , "input" ) ) {
leverageNative ( el , "click" ) ;
}
// Return non-false to allow normal event-path propagation
return true ;
} ,
// For cross-browser consistency, don't fire native .click() on links
// For cross-browser consistency, suppress native .click() on links
// Also prevent it if we're currently inside a leveraged native-event stack
_default : function ( event ) {
return nodeName ( event . target , "a" ) ;
var target = event . target ;
return rcheckableType . test ( target . type ) &&
target . click && nodeName ( target , "input" ) &&
dataPriv . get ( target , "click" ) ||
nodeName ( target , "a" ) ;
}
} ,
@ -5347,6 +5413,93 @@ jQuery.event = {
@@ -5347,6 +5413,93 @@ jQuery.event = {
}
} ;
// Ensure the presence of an event listener that handles manually-triggered
// synthetic events by interrupting progress until reinvoked in response to
// *native* events that it fires directly, ensuring that state changes have
// already occurred before other listeners are invoked.
function leverageNative ( el , type , expectSync ) {
// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
if ( ! expectSync ) {
if ( dataPriv . get ( el , type ) === undefined ) {
jQuery . event . add ( el , type , returnTrue ) ;
}
return ;
}
// Register the controller as a special universal handler for all event namespaces
dataPriv . set ( el , type , false ) ;
jQuery . event . add ( el , type , {
namespace : false ,
handler : function ( event ) {
var notAsync , result ,
saved = dataPriv . get ( this , type ) ;
if ( ( event . isTrigger & 1 ) && this [ type ] ) {
// Interrupt processing of the outer synthetic .trigger()ed event
// Saved data should be false in such cases, but might be a leftover capture object
// from an async native handler (gh-4350)
if ( ! saved . length ) {
// Store arguments for use when handling the inner native event
// There will always be at least one argument (an event object), so this array
// will not be confused with a leftover capture object.
saved = slice . call ( arguments ) ;
dataPriv . set ( this , type , saved ) ;
// Trigger the native event and capture its result
// Support: IE <=9 - 11+
// focus() and blur() are asynchronous
notAsync = expectSync ( this , type ) ;
this [ type ] ( ) ;
result = dataPriv . get ( this , type ) ;
if ( saved !== result || notAsync ) {
dataPriv . set ( this , type , false ) ;
} else {
result = { } ;
}
if ( saved !== result ) {
// Cancel the outer synthetic event
event . stopImmediatePropagation ( ) ;
event . preventDefault ( ) ;
return result . value ;
}
// If this is an inner synthetic event for an event with a bubbling surrogate
// (focus or blur), assume that the surrogate already propagated from triggering the
// native event and prevent that from happening again here.
// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
// bubbling surrogate propagates *after* the non-bubbling base), but that seems
// less bad than duplication.
} else if ( ( jQuery . event . special [ type ] || { } ) . delegateType ) {
event . stopPropagation ( ) ;
}
// If this is a native event triggered above, everything is now in order
// Fire an inner synthetic event with the original arguments
} else if ( saved . length ) {
// ...and capture the result
dataPriv . set ( this , type , {
value : jQuery . event . trigger (
// Support: IE <=9 - 11+
// Extend with the prototype to reset the above stopImmediatePropagation()
jQuery . extend ( saved [ 0 ] , jQuery . Event . prototype ) ,
saved . slice ( 1 ) ,
this
)
} ) ;
// Abort handling of the native event
event . stopImmediatePropagation ( ) ;
}
}
} ) ;
}
jQuery . removeEvent = function ( elem , type , handle ) {
// This "if" is needed for plain objects
@ -5459,6 +5612,7 @@ jQuery.each( {
@@ -5459,6 +5612,7 @@ jQuery.each( {
shiftKey : true ,
view : true ,
"char" : true ,
code : true ,
charCode : true ,
key : true ,
keyCode : true ,
@ -5505,6 +5659,33 @@ jQuery.each( {
@@ -5505,6 +5659,33 @@ jQuery.each( {
}
} , jQuery . event . addProp ) ;
jQuery . each ( { focus : "focusin" , blur : "focusout" } , function ( type , delegateType ) {
jQuery . event . special [ type ] = {
// Utilize native event if possible so blur/focus sequence is correct
setup : function ( ) {
// Claim the first handler
// dataPriv.set( this, "focus", ... )
// dataPriv.set( this, "blur", ... )
leverageNative ( this , type , expectSync ) ;
// Return false to allow normal processing in the caller
return false ;
} ,
trigger : function ( ) {
// Force setup before trigger
leverageNative ( this , type ) ;
// Return non-false to allow normal event-path propagation
return true ;
} ,
delegateType : delegateType
} ;
} ) ;
// Create mouseenter/leave events using mouseover/out and event-time checks
// so that event delegation works in jQuery.
// Do the same for pointerenter/pointerleave and pointerover/pointerout
@ -5755,11 +5936,13 @@ function domManip( collection, args, callback, ignored ) {
@@ -5755,11 +5936,13 @@ function domManip( collection, args, callback, ignored ) {
if ( node . src && ( node . type || "" ) . toLowerCase ( ) !== "module" ) {
// Optional AJAX dependency, but won't run scripts if not present
if ( jQuery . _evalUrl ) {
jQuery . _evalUrl ( node . src ) ;
if ( jQuery . _evalUrl && ! node . noModule ) {
jQuery . _evalUrl ( node . src , {
nonce : node . nonce || node . getAttribute ( "nonce" )
} ) ;
}
} else {
DOMEval ( node . textContent . replace ( rcleanScript , "" ) , doc , node ) ;
DOMEval ( node . textContent . replace ( rcleanScript , "" ) , node , doc ) ;
}
}
}
@ -5781,7 +5964,7 @@ function remove( elem, selector, keepData ) {
@@ -5781,7 +5964,7 @@ function remove( elem, selector, keepData ) {
}
if ( node . parentNode ) {
if ( keepData && jQuery . contains ( node . ownerDocument , node ) ) {
if ( keepData && isAttached ( node ) ) {
setGlobalEval ( getAll ( node , "script" ) ) ;
}
node . parentNode . removeChild ( node ) ;
@ -5799,7 +5982,7 @@ jQuery.extend( {
@@ -5799,7 +5982,7 @@ jQuery.extend( {
clone : function ( elem , dataAndEvents , deepDataAndEvents ) {
var i , l , srcElements , destElements ,
clone = elem . cloneNode ( true ) ,
inPage = jQuery . contains ( elem . ownerDocument , elem ) ;
inPage = isAttached ( elem ) ;
// Fix IE cloning issues
if ( ! support . noCloneChecked && ( elem . nodeType === 1 || elem . nodeType === 11 ) &&
@ -6095,8 +6278,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
@@ -6095,8 +6278,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
// Support: IE 9 only
// Detect overflow:scroll screwiness (gh-3699)
// Support: Chrome <=64
// Don't get tricked when zoom affects offsetWidth (gh-4029)
div . style . position = "absolute" ;
scrollboxSizeVal = div . offsetWidth === 36 || "absolute" ;
scrollboxSizeVal = roundPixelMeasures ( div . offsetWidth / 3 ) === 12 ;
documentElement . removeChild ( container ) ;
@ -6167,7 +6352,7 @@ function curCSS( elem, name, computed ) {
@@ -6167,7 +6352,7 @@ function curCSS( elem, name, computed ) {
if ( computed ) {
ret = computed . getPropertyValue ( name ) || computed [ name ] ;
if ( ret === "" && ! jQuery . contains ( elem . ownerDocument , elem ) ) {
if ( ret === "" && ! isAttached ( elem ) ) {
ret = jQuery . style ( elem , name ) ;
}
@ -6223,30 +6408,13 @@ function addGetHookIf( conditionFn, hookFn ) {
@@ -6223,30 +6408,13 @@ function addGetHookIf( conditionFn, hookFn ) {
}
var
var cssPrefixes = [ "Webkit" , "Moz" , "ms" ] ,
emptyStyle = document . createElement ( "div" ) . style ,
vendorProps = { } ;
// Swappable if display is none or starts with table
// except "table", "table-cell", or "table-caption"
// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
rdisplayswap = /^(none|table(?!-c[ea]).+)/ ,
rcustomProp = /^--/ ,
cssShow = { position : "absolute" , visibility : "hidden" , display : "block" } ,
cssNormalTransform = {
letterSpacing : "0" ,
fontWeight : "400"
} ,
cssPrefixes = [ "Webkit" , "Moz" , "ms" ] ,
emptyStyle = document . createElement ( "div" ) . style ;
// Return a css property mapped to a potentially vendor prefixed property
// Return a vendor-prefixed property or undefined
function vendorPropName ( name ) {
// Shortcut for names that are not vendor prefixed
if ( name in emptyStyle ) {
return name ;
}
// Check for vendor prefixed names
var capName = name [ 0 ] . toUpperCase ( ) + name . slice ( 1 ) ,
i = cssPrefixes . length ;
@ -6259,16 +6427,33 @@ function vendorPropName( name ) {
@@ -6259,16 +6427,33 @@ function vendorPropName( name ) {
}
}
// Return a property mapped along what jQuery.cssProps suggests or to
// a vendor prefixed property.
// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
function finalPropName ( name ) {
var ret = jQuery . cssProps [ name ] ;
if ( ! ret ) {
ret = jQuery . cssProps [ name ] = vendorPropName ( name ) || name ;
var final = jQuery . cssProps [ name ] || vendorProps [ name ] ;
if ( final ) {
return final ;
}
return ret ;
if ( name in emptyStyle ) {
return name ;
}
return vendorProps [ name ] = vendorPropName ( name ) || name ;
}
var
// Swappable if display is none or starts with table
// except "table", "table-cell", or "table-caption"
// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
rdisplayswap = /^(none|table(?!-c[ea]).+)/ ,
rcustomProp = /^--/ ,
cssShow = { position : "absolute" , visibility : "hidden" , display : "block" } ,
cssNormalTransform = {
letterSpacing : "0" ,
fontWeight : "400"
} ;
function setPositiveNumber ( elem , value , subtract ) {
// Any relative (+/-) values have already been
@ -6340,7 +6525,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
@@ -6340,7 +6525,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
delta -
extra -
0.5
) ) ;
// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
// Use an explicit zero to avoid NaN (gh-3964)
) ) || 0 ;
}
return delta ;
@ -6350,9 +6538,16 @@ function getWidthOrHeight( elem, dimension, extra ) {
@@ -6350,9 +6538,16 @@ function getWidthOrHeight( elem, dimension, extra ) {
// Start with computed style
var styles = getStyles ( elem ) ,
// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
// Fake content-box until we know it's needed to know the true value.
boxSizingNeeded = ! support . boxSizingReliable ( ) || extra ,
isBorderBox = boxSizingNeeded &&
jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" ,
valueIsBorderBox = isBorderBox ,
val = curCSS ( elem , dimension , styles ) ,
isBorderBox = jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" ,
valueIsBorderBox = isBorderBox ;
offsetProp = "offset" + dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ;
// Support: Firefox <=54
// Return a confounding non-pixel value or feign ignorance, as appropriate.
@ -6363,22 +6558,29 @@ function getWidthOrHeight( elem, dimension, extra ) {
@@ -6363,22 +6558,29 @@ function getWidthOrHeight( elem, dimension, extra ) {
val = "auto" ;
}
// Check for style in case a browser which returns unreliable values
// for getComputedStyle silently falls back to the reliable elem.style
valueIsBorderBox = valueIsBorderBox &&
( support . boxSizingReliable ( ) || val === elem . style [ dimension ] ) ;
// Fall back to offsetWidth/offsetHeight when value is "auto"
// This happens for inline elements with no explicit setting (gh-3571)
// Support: Android <=4.1 - 4.3 only
// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
if ( val === "auto" ||
! parseFloat ( val ) && jQuery . css ( elem , "display" , false , styles ) === "inline" ) {
// Support: IE 9-11 only
// Also use offsetWidth/offsetHeight for when box sizing is unreliable
// We use getClientRects() to check for hidden/disconnected.
// In those cases, the computed value can be trusted to be border-box
if ( ( ! support . boxSizingReliable ( ) && isBorderBox ||
val === "auto" ||
! parseFloat ( val ) && jQuery . css ( elem , "display" , false , styles ) === "inline" ) &&
elem . getClientRects ( ) . length ) {
val = elem [ "offset" + dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ] ;
isBorderBox = jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" ;
// offsetWidth/offsetHeight provide border-box values
valueIsBorderBox = true ;
// Where available, offsetWidth/offsetHeight approximate border box dimensions.
// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
// retrieved value as a content box dimension.
valueIsBorderBox = offsetProp in elem ;
if ( valueIsBorderBox ) {
val = elem [ offsetProp ] ;
}
}
// Normalize "" and auto
@ -6424,6 +6626,13 @@ jQuery.extend( {
@@ -6424,6 +6626,13 @@ jQuery.extend( {
"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 ,
@ -6479,7 +6688,9 @@ jQuery.extend( {
@@ -6479,7 +6688,9 @@ jQuery.extend( {
}
// If a number was passed in, add the unit (except for certain CSS properties)
if ( type === "number" ) {
// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
// "px" to a few hardcoded values.
if ( type === "number" && ! isCustomProp ) {
value += ret && ret [ 3 ] || ( jQuery . cssNumber [ origName ] ? "" : "px" ) ;
}
@ -6579,18 +6790,29 @@ jQuery.each( [ "height", "width" ], function( i, dimension ) {
@@ -6579,18 +6790,29 @@ jQuery.each( [ "height", "width" ], function( i, dimension ) {
set : function ( elem , value , extra ) {
var matches ,
styles = getStyles ( elem ) ,
isBorderBox = jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" ,
subtract = extra && boxModelAdjustment (
elem ,
dimension ,
extra ,
isBorderBox ,
styles
) ;
// Only read styles.position if the test has a chance to fail
// to avoid forcing a reflow.
scrollboxSizeBuggy = ! support . scrollboxSize ( ) &&
styles . position === "absolute" ,
// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
boxSizingNeeded = scrollboxSizeBuggy || extra ,
isBorderBox = boxSizingNeeded &&
jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" ,
subtract = extra ?
boxModelAdjustment (
elem ,
dimension ,
extra ,
isBorderBox ,
styles
) :
0 ;
// Account for unreliable border-box dimensions by comparing offset* to computed and
// faking a content-box to get border and padding (gh-3699)
if ( isBorderBox && support . scrollboxSize ( ) === styles . position ) {
if ( isBorderBox && scrollboxSizeBuggy ) {
subtract -= Math . ceil (
elem [ "offset" + dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ] -
parseFloat ( styles [ dimension ] ) -
@ -6758,9 +6980,9 @@ Tween.propHooks = {
@@ -6758,9 +6980,9 @@ Tween.propHooks = {
// Use .style if available and use plain properties where available.
if ( jQuery . fx . step [ tween . prop ] ) {
jQuery . fx . step [ tween . prop ] ( tween ) ;
} else if ( tween . elem . nodeType === 1 &&
( tween . elem . style [ jQuery . cssProp s[ tween . prop ] ] != null ||
jQuery . cssHooks [ tween . prop ] ) ) {
} else if ( tween . elem . nodeType === 1 && (
jQuery . cssHook s [ tween . prop ] ||
tween . elem . style [ finalPropName ( tween . prop ) ] != null ) ) {
jQuery . style ( tween . elem , tween . prop , tween . now + tween . unit ) ;
} else {
tween . elem [ tween . prop ] = tween . now ;
@ -8467,6 +8689,10 @@ jQuery.param = function( a, traditional ) {
@@ -8467,6 +8689,10 @@ jQuery.param = function( a, traditional ) {
encodeURIComponent ( value == null ? "" : value ) ;
} ;
if ( a == null ) {
return "" ;
}
// If an array was passed in, assume that it is an array of form elements.
if ( Array . isArray ( a ) || ( a . jquery && ! jQuery . isPlainObject ( a ) ) ) {
@ -8969,12 +9195,14 @@ jQuery.extend( {
@@ -8969,12 +9195,14 @@ jQuery.extend( {
if ( ! responseHeaders ) {
responseHeaders = { } ;
while ( ( match = rheaders . exec ( responseHeadersString ) ) ) {
responseHeaders [ match [ 1 ] . toLowerCase ( ) ] = match [ 2 ] ;
responseHeaders [ match [ 1 ] . toLowerCase ( ) + " " ] =
( responseHeaders [ match [ 1 ] . toLowerCase ( ) + " " ] || [ ] )
. concat ( match [ 2 ] ) ;
}
}
match = responseHeaders [ key . toLowerCase ( ) ] ;
match = responseHeaders [ key . toLowerCase ( ) + " " ] ;
}
return match == null ? null : match ;
return match == null ? null : match . join ( ", " ) ;
} ,
// Raw string
@ -9363,7 +9591,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) {
@@ -9363,7 +9591,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) {
} ) ;
jQuery . _evalUrl = function ( url ) {
jQuery . _evalUrl = function ( url , options ) {
return jQuery . ajax ( {
url : url ,
@ -9373,7 +9601,16 @@ jQuery._evalUrl = function( url ) {
@@ -9373,7 +9601,16 @@ jQuery._evalUrl = function( url ) {
cache : true ,
async : false ,
global : false ,
"throws" : true
// Only evaluate the response if it is successful (gh-4126)
// dataFilter is not invoked for failure responses, so using it instead
// of the default converter is kludgy but it works.
converters : {
"text script" : function ( ) { }
} ,
dataFilter : function ( response ) {
jQuery . globalEval ( response , options ) ;
}
} ) ;
} ;
@ -9656,24 +9893,21 @@ jQuery.ajaxPrefilter( "script", function( s ) {
@@ -9656,24 +9893,21 @@ jQuery.ajaxPrefilter( "script", function( s ) {
// Bind script tag hack transport
jQuery . ajaxTransport ( "script" , function ( s ) {
// This transport only deals with cross domain requests
if ( s . crossDomain ) {
// This transport only deals with cross domain or forced-by-attrs requests
if ( s . crossDomain || s . scriptAttrs ) {
var script , callback ;
return {
send : function ( _ , complete ) {
script = jQuery ( "<script>" ) . prop ( {
charset : s . scriptCharset ,
src : s . url
} ) . on (
"load error" ,
callback = function ( evt ) {
script = jQuery ( "<script>" )
. attr ( s . scriptAttrs || { } )
. prop ( { charset : s . scriptCharset , src : s . url } )
. on ( "load error" , callback = function ( evt ) {
script . remove ( ) ;
callback = null ;
if ( evt ) {
complete ( evt . type === "error" ? 404 : 200 , evt . type ) ;
}
}
) ;
} ) ;
// Use native DOM manipulation to avoid our domManip AJAX trickery
document . head . appendChild ( script [ 0 ] ) ;