|
|
@ -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 @@ |
|
|
|
* Released under the MIT license |
|
|
|
* https://jquery.org/license
|
|
|
|
* |
|
|
|
* Date: 2018-01-20T17:24Z |
|
|
|
* Date: 2019-05-01T21:04Z |
|
|
|
*/ |
|
|
|
( function( global, factory ) { |
|
|
|
|
|
|
@ -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 ) { |
|
|
|
|
|
|
|
|
|
|
|
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() { |
|
|
|
|
|
|
|
// 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( { |
|
|
|
}, |
|
|
|
|
|
|
|
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( { |
|
|
|
}, |
|
|
|
|
|
|
|
// 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 ) { |
|
|
|
} |
|
|
|
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, |
|
|
|
classCache = createCache(), |
|
|
|
tokenCache = createCache(), |
|
|
|
compilerCache = createCache(), |
|
|
|
nonnativeSelectorCache = createCache(), |
|
|
|
sortOrder = function( a, b ) { |
|
|
|
if ( a === b ) { |
|
|
|
hasDuplicate = true; |
|
|
@ -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, |
|
|
|
whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) |
|
|
|
}, |
|
|
|
|
|
|
|
rhtml = /HTML$/i, |
|
|
|
rinputs = /^(?:input|select|textarea|button)$/i, |
|
|
|
rheader = /^h\d$/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 ) { |
|
|
|
|
|
|
|
// 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 ) { |
|
|
|
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 ) { |
|
|
|
// 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 = {}; |
|
|
|
* @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 ) { |
|
|
|
setDocument( elem ); |
|
|
|
} |
|
|
|
|
|
|
|
// Make sure that attribute selectors are quoted
|
|
|
|
expr = expr.replace( rattributeQuotes, "='$1']" ); |
|
|
|
|
|
|
|
if ( support.matchesSelector && documentIsHTML && |
|
|
|
!compilerCache[ expr + " " ] && |
|
|
|
!nonnativeSelectorCache[ expr + " " ] && |
|
|
|
( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && |
|
|
|
( !rbuggyQSA || !rbuggyQSA.test( 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 = { |
|
|
|
"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 = { |
|
|
|
}), |
|
|
|
|
|
|
|
"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( { |
|
|
|
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" ); |
|
|
|
|
|
|
|
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 ) { |
|
|
|
// 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 ) { |
|
|
|
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( { |
|
|
|
} ); |
|
|
|
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 ) { |
|
|
|
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 ) { |
|
|
|
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 ) { |
|
|
|
div.innerHTML = "<textarea>x</textarea>"; |
|
|
|
support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; |
|
|
|
} )(); |
|
|
|
var documentElement = document.documentElement; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var |
|
|
@ -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 = { |
|
|
|
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 = { |
|
|
|
// 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 = { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// 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( { |
|
|
|
shiftKey: true, |
|
|
|
view: true, |
|
|
|
"char": true, |
|
|
|
code: true, |
|
|
|
charCode: true, |
|
|
|
key: true, |
|
|
|
keyCode: true, |
|
|
@ -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 ) { |
|
|
|
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 ) { |
|
|
|
} |
|
|
|
|
|
|
|
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( { |
|
|
|
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" ); |
|
|
|
|
|
|
|
// 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 ) { |
|
|
|
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 ) { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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 ) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 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 |
|
|
|
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 ) { |
|
|
|
|
|
|
|
// 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 ) { |
|
|
|
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( { |
|
|
|
"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( { |
|
|
|
} |
|
|
|
|
|
|
|
// 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 ) { |
|
|
|
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 = { |
|
|
|
// 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.cssProps[ tween.prop ] ] != null || |
|
|
|
jQuery.cssHooks[ tween.prop ] ) ) { |
|
|
|
} else if ( tween.elem.nodeType === 1 && ( |
|
|
|
jQuery.cssHooks[ 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 ) { |
|
|
|
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( { |
|
|
|
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 ) { |
|
|
|
} ); |
|
|
|
|
|
|
|
|
|
|
|
jQuery._evalUrl = function( url ) { |
|
|
|
jQuery._evalUrl = function( url, options ) { |
|
|
|
return jQuery.ajax( { |
|
|
|
url: 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 ) { |
|
|
|
// 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 ] ); |
|
|
|