mirror of
https://github.com/jquery/jquery.git
synced 2024-10-05 11:34:18 +00:00
Selector: Update Sizzle from 2.3.4 to 2.3.5
Fixes gh-4424 Fixes gh-4435 Fixes gh-4441 Fixes gh-4453 Closes gh-4641
This commit is contained in:
parent
7506c9ca62
commit
04bf577e2f
354
external/sizzle/dist/sizzle.js
vendored
354
external/sizzle/dist/sizzle.js
vendored
@ -1,15 +1,14 @@
|
||||
/*!
|
||||
* Sizzle CSS Selector Engine v2.3.4
|
||||
* Sizzle CSS Selector Engine v2.3.5
|
||||
* https://sizzlejs.com/
|
||||
*
|
||||
* Copyright JS Foundation and other contributors
|
||||
* Released under the MIT license
|
||||
* https://js.foundation/
|
||||
*
|
||||
* Date: 2019-04-08
|
||||
* Date: 2020-03-14
|
||||
*/
|
||||
( function( window ) {
|
||||
|
||||
var i,
|
||||
support,
|
||||
Expr,
|
||||
@ -52,9 +51,10 @@ var i,
|
||||
hasOwn = ( {} ).hasOwnProperty,
|
||||
arr = [],
|
||||
pop = arr.pop,
|
||||
push_native = arr.push,
|
||||
pushNative = arr.push,
|
||||
push = arr.push,
|
||||
slice = arr.slice,
|
||||
|
||||
// Use a stripped-down indexOf as it's faster than native
|
||||
// https://jsperf.com/thor-indexof-vs-for/5
|
||||
indexOf = function( list, elem ) {
|
||||
@ -68,40 +68,50 @@ var i,
|
||||
return -1;
|
||||
},
|
||||
|
||||
booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
|
||||
booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
|
||||
"ismap|loop|multiple|open|readonly|required|scoped",
|
||||
|
||||
// Regular expressions
|
||||
|
||||
// http://www.w3.org/TR/css3-selectors/#whitespace
|
||||
whitespace = "[\\x20\\t\\r\\n\\f]",
|
||||
|
||||
// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
|
||||
identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
|
||||
// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
|
||||
identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
|
||||
"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
|
||||
|
||||
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
|
||||
attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
|
||||
|
||||
// Operator (capture 2)
|
||||
"*([*^$|!~]?=)" + whitespace +
|
||||
// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
|
||||
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
|
||||
"*\\]",
|
||||
|
||||
// "Attribute values must be CSS identifiers [capture 5]
|
||||
// or strings [capture 3 or capture 4]"
|
||||
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
|
||||
whitespace + "*\\]",
|
||||
|
||||
pseudos = ":(" + identifier + ")(?:\\((" +
|
||||
|
||||
// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
|
||||
// 1. quoted (capture 3; capture 4 or capture 5)
|
||||
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
|
||||
|
||||
// 2. simple (capture 6)
|
||||
"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
|
||||
|
||||
// 3. anything else (capture 2)
|
||||
".*" +
|
||||
")\\)|)",
|
||||
|
||||
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
|
||||
rwhitespace = new RegExp( whitespace + "+", "g" ),
|
||||
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
|
||||
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
|
||||
whitespace + "+$", "g" ),
|
||||
|
||||
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
||||
rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
|
||||
rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
|
||||
"*" ),
|
||||
rdescend = new RegExp( whitespace + "|>" ),
|
||||
|
||||
rpseudo = new RegExp( pseudos ),
|
||||
@ -113,14 +123,16 @@ var i,
|
||||
"TAG": new RegExp( "^(" + identifier + "|[*])" ),
|
||||
"ATTR": new RegExp( "^" + attributes ),
|
||||
"PSEUDO": new RegExp( "^" + pseudos ),
|
||||
"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
|
||||
"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
|
||||
"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
|
||||
"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
|
||||
whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
|
||||
whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
|
||||
"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
|
||||
|
||||
// For use in libraries implementing .is()
|
||||
// We use this for POS matching in `select`
|
||||
"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
|
||||
whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
|
||||
"needsContext": new RegExp( "^" + whitespace +
|
||||
"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
|
||||
"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
|
||||
},
|
||||
|
||||
rhtml = /HTML$/i,
|
||||
@ -136,18 +148,21 @@ var i,
|
||||
|
||||
// CSS escapes
|
||||
// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
|
||||
runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
|
||||
funescape = function( _, escaped, escapedWhitespace ) {
|
||||
var high = "0x" + escaped - 0x10000;
|
||||
// NaN means non-codepoint
|
||||
// Support: Firefox<24
|
||||
// Workaround erroneous numeric interpretation of +"0x"
|
||||
return high !== high || escapedWhitespace ?
|
||||
escaped :
|
||||
runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
|
||||
funescape = function( escape, nonHex ) {
|
||||
var high = "0x" + escape.slice( 1 ) - 0x10000;
|
||||
|
||||
return nonHex ?
|
||||
|
||||
// Strip the backslash prefix from a non-hex escape sequence
|
||||
nonHex :
|
||||
|
||||
// Replace a hexadecimal escape sequence with the encoded Unicode code point
|
||||
// Support: IE <=11+
|
||||
// For values outside the Basic Multilingual Plane (BMP), manually construct a
|
||||
// surrogate pair
|
||||
high < 0 ?
|
||||
// BMP codepoint
|
||||
String.fromCharCode( high + 0x10000 ) :
|
||||
// Supplemental Plane codepoint (surrogate pair)
|
||||
String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
|
||||
},
|
||||
|
||||
@ -163,7 +178,8 @@ var i,
|
||||
}
|
||||
|
||||
// Control characters and (dependent upon position) numbers get escaped as code points
|
||||
return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
|
||||
return ch.slice( 0, -1 ) + "\\" +
|
||||
ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
|
||||
}
|
||||
|
||||
// Other potentially-special ASCII characters get backslash-escaped
|
||||
@ -191,15 +207,17 @@ try {
|
||||
( arr = slice.call( preferredDoc.childNodes ) ),
|
||||
preferredDoc.childNodes
|
||||
);
|
||||
|
||||
// Support: Android<4.0
|
||||
// Detect silently failing push.apply
|
||||
// eslint-disable-next-line no-unused-expressions
|
||||
arr[ preferredDoc.childNodes.length ].nodeType;
|
||||
} catch ( e ) {
|
||||
push = { apply: arr.length ?
|
||||
|
||||
// Leverage slice if possible
|
||||
function( target, els ) {
|
||||
push_native.apply( target, slice.call(els) );
|
||||
pushNative.apply( target, slice.call( els ) );
|
||||
} :
|
||||
|
||||
// Support: IE<9
|
||||
@ -207,6 +225,7 @@ try {
|
||||
function( target, els ) {
|
||||
var j = target.length,
|
||||
i = 0;
|
||||
|
||||
// Can't trust NodeList.length
|
||||
while ( ( target[ j++ ] = els[ i++ ] ) ) {}
|
||||
target.length = j - 1;
|
||||
@ -232,10 +251,7 @@ function Sizzle( selector, context, results, seed ) {
|
||||
|
||||
// Try to shortcut find operations (as opposed to filters) in HTML documents
|
||||
if ( !seed ) {
|
||||
|
||||
if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
|
||||
setDocument( context );
|
||||
}
|
||||
context = context || document;
|
||||
|
||||
if ( documentIsHTML ) {
|
||||
@ -307,8 +323,19 @@ function Sizzle( selector, context, results, seed ) {
|
||||
// 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.
|
||||
// The technique has to be used as well when a leading combinator is used
|
||||
// as such selectors are not recognized by querySelectorAll.
|
||||
// Thanks to Andrew Dupont for this technique.
|
||||
if ( nodeType === 1 && rdescend.test( selector ) ) {
|
||||
if ( nodeType === 1 &&
|
||||
( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
|
||||
|
||||
// Expand context for sibling selectors
|
||||
newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
|
||||
context;
|
||||
|
||||
// We can use :scope instead of the ID hack if the browser
|
||||
// supports it & if we're not changing the context.
|
||||
if ( newContext !== context || !support.scope ) {
|
||||
|
||||
// Capture the context ID, setting it first if necessary
|
||||
if ( ( nid = context.getAttribute( "id" ) ) ) {
|
||||
@ -316,18 +343,16 @@ function Sizzle( selector, context, results, seed ) {
|
||||
} else {
|
||||
context.setAttribute( "id", ( nid = expando ) );
|
||||
}
|
||||
}
|
||||
|
||||
// Prefix every selector in the list
|
||||
groups = tokenize( selector );
|
||||
i = groups.length;
|
||||
while ( i-- ) {
|
||||
groups[i] = "#" + nid + " " + toSelector( groups[i] );
|
||||
groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
|
||||
toSelector( groups[ i ] );
|
||||
}
|
||||
newSelector = groups.join( "," );
|
||||
|
||||
// Expand context for sibling selectors
|
||||
newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
|
||||
context;
|
||||
}
|
||||
|
||||
try {
|
||||
@ -360,8 +385,10 @@ function createCache() {
|
||||
var keys = [];
|
||||
|
||||
function cache( key, value ) {
|
||||
|
||||
// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
|
||||
if ( keys.push( key + " " ) > Expr.cacheLength ) {
|
||||
|
||||
// Only keep the most recent entries
|
||||
delete cache[ keys.shift() ];
|
||||
}
|
||||
@ -391,10 +418,12 @@ function assert( fn ) {
|
||||
} catch ( e ) {
|
||||
return false;
|
||||
} finally {
|
||||
|
||||
// Remove from its parent by default
|
||||
if ( el.parentNode ) {
|
||||
el.parentNode.removeChild( el );
|
||||
}
|
||||
|
||||
// release memory in IE
|
||||
el = null;
|
||||
}
|
||||
@ -579,7 +608,11 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
doc = node ? node.ownerDocument || node : preferredDoc;
|
||||
|
||||
// Return early if doc is invalid or already selected
|
||||
if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
|
||||
return document;
|
||||
}
|
||||
|
||||
@ -588,9 +621,13 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
docElem = document.documentElement;
|
||||
documentIsHTML = !isXML( document );
|
||||
|
||||
// Support: IE 9-11, Edge
|
||||
// Support: IE 9 - 11+, Edge 12 - 18+
|
||||
// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
|
||||
if ( preferredDoc !== document &&
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
if ( preferredDoc != document &&
|
||||
( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
|
||||
|
||||
// Support: IE 11, Edge
|
||||
@ -603,6 +640,17 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
}
|
||||
}
|
||||
|
||||
// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
|
||||
// Safari 4 - 5 only, Opera <=11.6 - 12.x only
|
||||
// IE/Edge & older browsers don't support the :scope pseudo-class.
|
||||
// Support: Safari 6.0 only
|
||||
// Safari 6.0 supports :scope but it's an alias of :root there.
|
||||
support.scope = assert( function( el ) {
|
||||
docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
|
||||
return typeof el.querySelectorAll !== "undefined" &&
|
||||
!el.querySelectorAll( ":scope fieldset div" ).length;
|
||||
} );
|
||||
|
||||
/* Attributes
|
||||
---------------------------------------------------------------------- */
|
||||
|
||||
@ -706,6 +754,7 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
var elem,
|
||||
tmp = [],
|
||||
i = 0,
|
||||
|
||||
// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
|
||||
results = context.getElementsByTagName( tag );
|
||||
|
||||
@ -745,9 +794,13 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
rbuggyQSA = [];
|
||||
|
||||
if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
|
||||
|
||||
// Build QSA regex
|
||||
// Regex strategy adopted from Diego Perini
|
||||
assert( function( el ) {
|
||||
|
||||
var input;
|
||||
|
||||
// Select is set to empty string on purpose
|
||||
// This is to test IE's treatment of not explicitly
|
||||
// setting a boolean content attribute,
|
||||
@ -776,6 +829,19 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
rbuggyQSA.push( "~=" );
|
||||
}
|
||||
|
||||
// Support: IE 11+, Edge 15 - 18+
|
||||
// IE 11/Edge don't find elements on a `[name='']` query in some cases.
|
||||
// Adding a temporary attribute to the document before the selection works
|
||||
// around the issue.
|
||||
// Interestingly, IE 10 & older don't seem to have the issue.
|
||||
input = document.createElement( "input" );
|
||||
input.setAttribute( "name", "" );
|
||||
el.appendChild( input );
|
||||
if ( !el.querySelectorAll( "[name='']" ).length ) {
|
||||
rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
|
||||
whitespace + "*(?:''|\"\")" );
|
||||
}
|
||||
|
||||
// Webkit/Opera - :checked should return selected option elements
|
||||
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
||||
// IE8 throws error here and will not see later tests
|
||||
@ -789,6 +855,11 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
|
||||
rbuggyQSA.push( ".#.+[+~]" );
|
||||
}
|
||||
|
||||
// Support: Firefox <=3.6 - 5 only
|
||||
// Old Firefox doesn't throw on a badly-escaped identifier.
|
||||
el.querySelectorAll( "\\\f" );
|
||||
rbuggyQSA.push( "[\\r\\n\\f]" );
|
||||
} );
|
||||
|
||||
assert( function( el ) {
|
||||
@ -820,6 +891,7 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
rbuggyQSA.push( ":enabled", ":disabled" );
|
||||
}
|
||||
|
||||
// Support: Opera 10 - 11 only
|
||||
// Opera 10-11 does not throw on post-comma invalid pseudos
|
||||
el.querySelectorAll( "*,:x" );
|
||||
rbuggyQSA.push( ",.*:" );
|
||||
@ -833,6 +905,7 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
docElem.msMatchesSelector ) ) ) ) {
|
||||
|
||||
assert( function( el ) {
|
||||
|
||||
// Check to see if it's possible to do matchesSelector
|
||||
// on a disconnected node (IE 9)
|
||||
support.disconnectedMatch = matches.call( el, "*" );
|
||||
@ -895,7 +968,11 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
}
|
||||
|
||||
// Calculate position if both inputs belong to the same document
|
||||
compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
|
||||
a.compareDocumentPosition( b ) :
|
||||
|
||||
// Otherwise we know they are disconnected
|
||||
@ -906,10 +983,21 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
|
||||
|
||||
// Choose the first element that is related to our preferred document
|
||||
if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
if ( a == document || a.ownerDocument == preferredDoc &&
|
||||
contains( preferredDoc, a ) ) {
|
||||
return -1;
|
||||
}
|
||||
if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
|
||||
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
if ( b == document || b.ownerDocument == preferredDoc &&
|
||||
contains( preferredDoc, b ) ) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -922,6 +1010,7 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
return compare & 4 ? -1 : 1;
|
||||
} :
|
||||
function( a, b ) {
|
||||
|
||||
// Exit early if the nodes are identical
|
||||
if ( a === b ) {
|
||||
hasDuplicate = true;
|
||||
@ -937,8 +1026,14 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
|
||||
// Parentless nodes are either documents or disconnected
|
||||
if ( !aup || !bup ) {
|
||||
return a === document ? -1 :
|
||||
b === document ? 1 :
|
||||
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
/* eslint-disable eqeqeq */
|
||||
return a == document ? -1 :
|
||||
b == document ? 1 :
|
||||
/* eslint-enable eqeqeq */
|
||||
aup ? -1 :
|
||||
bup ? 1 :
|
||||
sortInput ?
|
||||
@ -966,12 +1061,18 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||
}
|
||||
|
||||
return i ?
|
||||
|
||||
// Do a sibling check if the nodes have a common ancestor
|
||||
siblingCheck( ap[ i ], bp[ i ] ) :
|
||||
|
||||
// Otherwise nodes in our document sort first
|
||||
ap[i] === preferredDoc ? -1 :
|
||||
bp[i] === preferredDoc ? 1 :
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
/* eslint-disable eqeqeq */
|
||||
ap[ i ] == preferredDoc ? -1 :
|
||||
bp[ i ] == preferredDoc ? 1 :
|
||||
/* eslint-enable eqeqeq */
|
||||
0;
|
||||
};
|
||||
|
||||
@ -983,10 +1084,7 @@ Sizzle.matches = function( expr, elements ) {
|
||||
};
|
||||
|
||||
Sizzle.matchesSelector = function( elem, expr ) {
|
||||
// Set document vars if needed
|
||||
if ( ( elem.ownerDocument || elem ) !== document ) {
|
||||
setDocument( elem );
|
||||
}
|
||||
|
||||
if ( support.matchesSelector && documentIsHTML &&
|
||||
!nonnativeSelectorCache[ expr + " " ] &&
|
||||
@ -998,6 +1096,7 @@ Sizzle.matchesSelector = function( elem, expr ) {
|
||||
|
||||
// IE 9's matchesSelector returns false on disconnected nodes
|
||||
if ( ret || support.disconnectedMatch ||
|
||||
|
||||
// As well, disconnected nodes are said to be in a document
|
||||
// fragment in IE 9
|
||||
elem.document && elem.document.nodeType !== 11 ) {
|
||||
@ -1012,20 +1111,31 @@ Sizzle.matchesSelector = function( elem, expr ) {
|
||||
};
|
||||
|
||||
Sizzle.contains = function( context, elem ) {
|
||||
|
||||
// Set document vars if needed
|
||||
if ( ( context.ownerDocument || context ) !== document ) {
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
if ( ( context.ownerDocument || context ) != document ) {
|
||||
setDocument( context );
|
||||
}
|
||||
return contains( context, elem );
|
||||
};
|
||||
|
||||
Sizzle.attr = function( elem, name ) {
|
||||
|
||||
// Set document vars if needed
|
||||
if ( ( elem.ownerDocument || elem ) !== document ) {
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
if ( ( elem.ownerDocument || elem ) != document ) {
|
||||
setDocument( elem );
|
||||
}
|
||||
|
||||
var fn = Expr.attrHandle[ name.toLowerCase() ],
|
||||
|
||||
// Don't get fooled by Object.prototype properties (jQuery #13807)
|
||||
val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
|
||||
fn( elem, name, !documentIsHTML ) :
|
||||
@ -1092,17 +1202,21 @@ getText = Sizzle.getText = function( elem ) {
|
||||
nodeType = elem.nodeType;
|
||||
|
||||
if ( !nodeType ) {
|
||||
|
||||
// If no nodeType, this is expected to be an array
|
||||
while ( ( node = elem[ i++ ] ) ) {
|
||||
|
||||
// Do not traverse comment nodes
|
||||
ret += getText( node );
|
||||
}
|
||||
} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
|
||||
|
||||
// Use textContent for elements
|
||||
// innerText usage removed for consistency of new lines (jQuery #11153)
|
||||
if ( typeof elem.textContent === "string" ) {
|
||||
return elem.textContent;
|
||||
} else {
|
||||
|
||||
// Traverse its children
|
||||
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
|
||||
ret += getText( elem );
|
||||
@ -1111,6 +1225,7 @@ getText = Sizzle.getText = function( elem ) {
|
||||
} else if ( nodeType === 3 || nodeType === 4 ) {
|
||||
return elem.nodeValue;
|
||||
}
|
||||
|
||||
// Do not include comment or processing instruction nodes
|
||||
|
||||
return ret;
|
||||
@ -1141,7 +1256,8 @@ Expr = Sizzle.selectors = {
|
||||
match[ 1 ] = match[ 1 ].replace( runescape, funescape );
|
||||
|
||||
// Move the given value to match[3] whether quoted or unquoted
|
||||
match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
|
||||
match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
|
||||
match[ 5 ] || "" ).replace( runescape, funescape );
|
||||
|
||||
if ( match[ 2 ] === "~=" ) {
|
||||
match[ 3 ] = " " + match[ 3 ] + " ";
|
||||
@ -1151,6 +1267,7 @@ Expr = Sizzle.selectors = {
|
||||
},
|
||||
|
||||
"CHILD": function( match ) {
|
||||
|
||||
/* matches from matchExpr["CHILD"]
|
||||
1 type (only|nth|...)
|
||||
2 what (child|of-type)
|
||||
@ -1164,6 +1281,7 @@ Expr = Sizzle.selectors = {
|
||||
match[ 1 ] = match[ 1 ].toLowerCase();
|
||||
|
||||
if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
|
||||
|
||||
// nth-* requires argument
|
||||
if ( !match[ 3 ] ) {
|
||||
Sizzle.error( match[ 0 ] );
|
||||
@ -1171,7 +1289,9 @@ Expr = Sizzle.selectors = {
|
||||
|
||||
// numeric x and y parameters for Expr.filter.CHILD
|
||||
// remember that false/true cast respectively to 0/1
|
||||
match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
|
||||
match[ 4 ] = +( match[ 4 ] ?
|
||||
match[ 5 ] + ( match[ 6 ] || 1 ) :
|
||||
2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
|
||||
match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
|
||||
|
||||
// other types prohibit arguments
|
||||
@ -1196,8 +1316,10 @@ Expr = Sizzle.selectors = {
|
||||
|
||||
// Strip excess characters from unquoted arguments
|
||||
} else if ( unquoted && rpseudo.test( unquoted ) &&
|
||||
|
||||
// Get excess from tokenize (recursively)
|
||||
( excess = tokenize( unquoted, true ) ) &&
|
||||
|
||||
// advance to the next closing parenthesis
|
||||
( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
|
||||
|
||||
@ -1216,7 +1338,9 @@ Expr = Sizzle.selectors = {
|
||||
"TAG": function( nodeNameSelector ) {
|
||||
var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
|
||||
return nodeNameSelector === "*" ?
|
||||
function() { return true; } :
|
||||
function() {
|
||||
return true;
|
||||
} :
|
||||
function( elem ) {
|
||||
return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
|
||||
};
|
||||
@ -1226,9 +1350,15 @@ Expr = Sizzle.selectors = {
|
||||
var pattern = classCache[ className + " " ];
|
||||
|
||||
return pattern ||
|
||||
(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
|
||||
classCache( className, function( elem ) {
|
||||
return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
|
||||
( pattern = new RegExp( "(^|" + whitespace +
|
||||
")" + className + "(" + whitespace + "|$)" ) ) && classCache(
|
||||
className, function( elem ) {
|
||||
return pattern.test(
|
||||
typeof elem.className === "string" && elem.className ||
|
||||
typeof elem.getAttribute !== "undefined" &&
|
||||
elem.getAttribute( "class" ) ||
|
||||
""
|
||||
);
|
||||
} );
|
||||
},
|
||||
|
||||
@ -1245,6 +1375,8 @@ Expr = Sizzle.selectors = {
|
||||
|
||||
result += "";
|
||||
|
||||
/* eslint-disable max-len */
|
||||
|
||||
return operator === "=" ? result === check :
|
||||
operator === "!=" ? result !== check :
|
||||
operator === "^=" ? check && result.indexOf( check ) === 0 :
|
||||
@ -1253,10 +1385,12 @@ Expr = Sizzle.selectors = {
|
||||
operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
|
||||
operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
|
||||
false;
|
||||
/* eslint-enable max-len */
|
||||
|
||||
};
|
||||
},
|
||||
|
||||
"CHILD": function( type, what, argument, first, last ) {
|
||||
"CHILD": function( type, what, _argument, first, last ) {
|
||||
var simple = type.slice( 0, 3 ) !== "nth",
|
||||
forward = type.slice( -4 ) !== "last",
|
||||
ofType = what === "of-type";
|
||||
@ -1268,7 +1402,7 @@ Expr = Sizzle.selectors = {
|
||||
return !!elem.parentNode;
|
||||
} :
|
||||
|
||||
function( elem, context, xml ) {
|
||||
function( elem, _context, xml ) {
|
||||
var cache, uniqueCache, outerCache, node, nodeIndex, start,
|
||||
dir = simple !== forward ? "nextSibling" : "previousSibling",
|
||||
parent = elem.parentNode,
|
||||
@ -1290,6 +1424,7 @@ Expr = Sizzle.selectors = {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Reverse direction for :only-* (if we haven't yet done so)
|
||||
start = dir = type === "only" && !start && "nextSibling";
|
||||
}
|
||||
@ -1330,8 +1465,10 @@ Expr = Sizzle.selectors = {
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// Use previously-cached element index if available
|
||||
if ( useCache ) {
|
||||
|
||||
// ...in a gzip-friendly way
|
||||
node = elem;
|
||||
outerCache = node[ expando ] || ( node[ expando ] = {} );
|
||||
@ -1349,6 +1486,7 @@ Expr = Sizzle.selectors = {
|
||||
// xml :nth-child(...)
|
||||
// or :nth-last-child(...) or :nth(-last)?-of-type(...)
|
||||
if ( diff === false ) {
|
||||
|
||||
// Use the same loop as above to seek `elem` from the start
|
||||
while ( ( node = ++nodeIndex && node && node[ dir ] ||
|
||||
( diff = nodeIndex = 0 ) || start.pop() ) ) {
|
||||
@ -1360,7 +1498,8 @@ Expr = Sizzle.selectors = {
|
||||
|
||||
// Cache the index of each encountered element
|
||||
if ( useCache ) {
|
||||
outerCache = node[ expando ] || (node[ expando ] = {});
|
||||
outerCache = node[ expando ] ||
|
||||
( node[ expando ] = {} );
|
||||
|
||||
// Support: IE <9 only
|
||||
// Defend against cloned attroperties (jQuery gh-1709)
|
||||
@ -1386,6 +1525,7 @@ Expr = Sizzle.selectors = {
|
||||
},
|
||||
|
||||
"PSEUDO": function( pseudo, argument ) {
|
||||
|
||||
// pseudo-class names are case-insensitive
|
||||
// http://www.w3.org/TR/selectors/#pseudo-classes
|
||||
// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
|
||||
@ -1424,8 +1564,10 @@ Expr = Sizzle.selectors = {
|
||||
},
|
||||
|
||||
pseudos: {
|
||||
|
||||
// Potentially complex pseudos
|
||||
"not": markFunction( function( selector ) {
|
||||
|
||||
// Trim the selector passed to compile
|
||||
// to avoid treating leading and trailing
|
||||
// spaces as combinators
|
||||
@ -1434,7 +1576,7 @@ Expr = Sizzle.selectors = {
|
||||
matcher = compile( selector.replace( rtrim, "$1" ) );
|
||||
|
||||
return matcher[ expando ] ?
|
||||
markFunction(function( seed, matches, context, xml ) {
|
||||
markFunction( function( seed, matches, _context, xml ) {
|
||||
var elem,
|
||||
unmatched = matcher( seed, null, xml, [] ),
|
||||
i = seed.length;
|
||||
@ -1446,9 +1588,10 @@ Expr = Sizzle.selectors = {
|
||||
}
|
||||
}
|
||||
} ) :
|
||||
function( elem, context, xml ) {
|
||||
function( elem, _context, xml ) {
|
||||
input[ 0 ] = elem;
|
||||
matcher( input, null, xml, results );
|
||||
|
||||
// Don't keep the element (issue #299)
|
||||
input[ 0 ] = null;
|
||||
return !results.pop();
|
||||
@ -1476,6 +1619,7 @@ Expr = Sizzle.selectors = {
|
||||
// The identifier C does not have to be a valid language name."
|
||||
// http://www.w3.org/TR/selectors/#lang-pseudo
|
||||
"lang": markFunction( function( lang ) {
|
||||
|
||||
// lang value must be a valid identifier
|
||||
if ( !ridentifier.test( lang || "" ) ) {
|
||||
Sizzle.error( "unsupported lang: " + lang );
|
||||
@ -1507,7 +1651,9 @@ Expr = Sizzle.selectors = {
|
||||
},
|
||||
|
||||
"focus": function( elem ) {
|
||||
return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
|
||||
return elem === document.activeElement &&
|
||||
( !document.hasFocus || document.hasFocus() ) &&
|
||||
!!( elem.type || elem.href || ~elem.tabIndex );
|
||||
},
|
||||
|
||||
// Boolean properties
|
||||
@ -1515,16 +1661,20 @@ Expr = Sizzle.selectors = {
|
||||
"disabled": createDisabledPseudo( true ),
|
||||
|
||||
"checked": function( elem ) {
|
||||
|
||||
// In CSS3, :checked should return both checked and selected elements
|
||||
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
||||
var nodeName = elem.nodeName.toLowerCase();
|
||||
return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
|
||||
return ( nodeName === "input" && !!elem.checked ) ||
|
||||
( nodeName === "option" && !!elem.selected );
|
||||
},
|
||||
|
||||
"selected": function( elem ) {
|
||||
|
||||
// Accessing this property makes selected-by-default
|
||||
// options in Safari work properly
|
||||
if ( elem.parentNode ) {
|
||||
// eslint-disable-next-line no-unused-expressions
|
||||
elem.parentNode.selectedIndex;
|
||||
}
|
||||
|
||||
@ -1533,6 +1683,7 @@ Expr = Sizzle.selectors = {
|
||||
|
||||
// Contents
|
||||
"empty": function( elem ) {
|
||||
|
||||
// http://www.w3.org/TR/selectors/#empty-pseudo
|
||||
// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
|
||||
// but not by others (comment: 8; processing instruction: 7; etc.)
|
||||
@ -1570,7 +1721,8 @@ Expr = Sizzle.selectors = {
|
||||
|
||||
// Support: IE<8
|
||||
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
|
||||
( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
|
||||
( ( attr = elem.getAttribute( "type" ) ) == null ||
|
||||
attr.toLowerCase() === "text" );
|
||||
},
|
||||
|
||||
// Position-in-collection
|
||||
@ -1578,11 +1730,11 @@ Expr = Sizzle.selectors = {
|
||||
return [ 0 ];
|
||||
} ),
|
||||
|
||||
"last": createPositionalPseudo(function( matchIndexes, length ) {
|
||||
"last": createPositionalPseudo( function( _matchIndexes, length ) {
|
||||
return [ length - 1 ];
|
||||
} ),
|
||||
|
||||
"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
||||
"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
|
||||
return [ argument < 0 ? argument + length : argument ];
|
||||
} ),
|
||||
|
||||
@ -1657,6 +1809,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
||||
// Comma and first run
|
||||
if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
|
||||
if ( match ) {
|
||||
|
||||
// Don't consume trailing commas as valid
|
||||
soFar = soFar.slice( match[ 0 ].length ) || soFar;
|
||||
}
|
||||
@ -1670,6 +1823,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
||||
matched = match.shift();
|
||||
tokens.push( {
|
||||
value: matched,
|
||||
|
||||
// Cast descendant combinators to space
|
||||
type: match[ 0 ].replace( rtrim, " " )
|
||||
} );
|
||||
@ -1702,6 +1856,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
||||
soFar.length :
|
||||
soFar ?
|
||||
Sizzle.error( selector ) :
|
||||
|
||||
// Cache the tokens
|
||||
tokenCache( selector, groups ).slice( 0 );
|
||||
};
|
||||
@ -1724,6 +1879,7 @@ function addCombinator( matcher, combinator, base ) {
|
||||
doneName = done++;
|
||||
|
||||
return combinator.first ?
|
||||
|
||||
// Check against closest ancestor/preceding element
|
||||
function( elem, context, xml ) {
|
||||
while ( ( elem = elem[ dir ] ) ) {
|
||||
@ -1755,7 +1911,8 @@ function addCombinator( matcher, combinator, base ) {
|
||||
|
||||
// Support: IE <9 only
|
||||
// Defend against cloned attroperties (jQuery gh-1709)
|
||||
uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
|
||||
uniqueCache = outerCache[ elem.uniqueID ] ||
|
||||
( outerCache[ elem.uniqueID ] = {} );
|
||||
|
||||
if ( skip && skip === elem.nodeName.toLowerCase() ) {
|
||||
elem = elem[ dir ] || elem;
|
||||
@ -1765,6 +1922,7 @@ function addCombinator( matcher, combinator, base ) {
|
||||
// Assign to newCache so results back-propagate to previous elements
|
||||
return ( newCache[ 2 ] = oldCache[ 2 ] );
|
||||
} else {
|
||||
|
||||
// Reuse newcache so results back-propagate to previous elements
|
||||
uniqueCache[ key ] = newCache;
|
||||
|
||||
@ -1838,7 +1996,11 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
|
||||
preexisting = results.length,
|
||||
|
||||
// Get initial elements from seed or context
|
||||
elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
|
||||
elems = seed || multipleContexts(
|
||||
selector || "*",
|
||||
context.nodeType ? [ context ] : context,
|
||||
[]
|
||||
),
|
||||
|
||||
// Prefilter to get matcher input, preserving a map for seed-results synchronization
|
||||
matcherIn = preFilter && ( seed || !selector ) ?
|
||||
@ -1846,6 +2008,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
|
||||
elems,
|
||||
|
||||
matcherOut = matcher ?
|
||||
|
||||
// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
|
||||
postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
|
||||
|
||||
@ -1878,11 +2041,13 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
|
||||
if ( seed ) {
|
||||
if ( postFinder || preFilter ) {
|
||||
if ( postFinder ) {
|
||||
|
||||
// Get the final matcherOut by condensing this intermediate into postFinder contexts
|
||||
temp = [];
|
||||
i = matcherOut.length;
|
||||
while ( i-- ) {
|
||||
if ( ( elem = matcherOut[ i ] ) ) {
|
||||
|
||||
// Restore matcherIn since elem is not yet a final match
|
||||
temp.push( ( matcherIn[ i ] = elem ) );
|
||||
}
|
||||
@ -1936,6 +2101,7 @@ function matcherFromTokens( tokens ) {
|
||||
( checkContext = context ).nodeType ?
|
||||
matchContext( elem, context, xml ) :
|
||||
matchAnyContext( elem, context, xml ) );
|
||||
|
||||
// Avoid hanging onto element (issue #299)
|
||||
checkContext = null;
|
||||
return ret;
|
||||
@ -1949,6 +2115,7 @@ function matcherFromTokens( tokens ) {
|
||||
|
||||
// Return special upon seeing a positional matcher
|
||||
if ( matcher[ expando ] ) {
|
||||
|
||||
// Find the next relative operator (if any) for proper handling
|
||||
j = ++i;
|
||||
for ( ; j < len; j++ ) {
|
||||
@ -1959,8 +2126,11 @@ function matcherFromTokens( tokens ) {
|
||||
return setMatcher(
|
||||
i > 1 && elementMatcher( matchers ),
|
||||
i > 1 && toSelector(
|
||||
|
||||
// If the preceding token was a descendant combinator, insert an implicit any-element `*`
|
||||
tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
|
||||
tokens
|
||||
.slice( 0, i - 1 )
|
||||
.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
|
||||
).replace( rtrim, "$1" ),
|
||||
matcher,
|
||||
i < j && matcherFromTokens( tokens.slice( i, j ) ),
|
||||
@ -1985,14 +2155,21 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
||||
unmatched = seed && [],
|
||||
setMatched = [],
|
||||
contextBackup = outermostContext,
|
||||
|
||||
// We must always have either seed elements or outermost context
|
||||
elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
|
||||
|
||||
// Use integer dirruns iff this is the outermost matcher
|
||||
dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
|
||||
len = elems.length;
|
||||
|
||||
if ( outermost ) {
|
||||
outermostContext = context === document || context || outermost;
|
||||
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
outermostContext = context == document || context || outermost;
|
||||
}
|
||||
|
||||
// Add elements passing elementMatchers directly to results
|
||||
@ -2001,7 +2178,12 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
||||
for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
|
||||
if ( byElement && elem ) {
|
||||
j = 0;
|
||||
if ( !context && elem.ownerDocument !== document ) {
|
||||
|
||||
// Support: IE 11+, Edge 17 - 18+
|
||||
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||
// two documents; shallow comparisons work.
|
||||
// eslint-disable-next-line eqeqeq
|
||||
if ( !context && elem.ownerDocument != document ) {
|
||||
setDocument( elem );
|
||||
xml = !documentIsHTML;
|
||||
}
|
||||
@ -2018,6 +2200,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
||||
|
||||
// Track unmatched elements for set filters
|
||||
if ( bySet ) {
|
||||
|
||||
// They will have gone through all possible matchers
|
||||
if ( ( elem = !matcher && elem ) ) {
|
||||
matchedCount--;
|
||||
@ -2048,6 +2231,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
||||
}
|
||||
|
||||
if ( seed ) {
|
||||
|
||||
// Reintegrate element matches to eliminate the need for sorting
|
||||
if ( matchedCount > 0 ) {
|
||||
while ( i-- ) {
|
||||
@ -2093,6 +2277,7 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
|
||||
cached = compilerCache[ selector + " " ];
|
||||
|
||||
if ( !cached ) {
|
||||
|
||||
// Generate a function of recursive functions that can be used to check each element
|
||||
if ( !match ) {
|
||||
match = tokenize( selector );
|
||||
@ -2108,7 +2293,10 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
|
||||
}
|
||||
|
||||
// Cache the compiled function
|
||||
cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
|
||||
cached = compilerCache(
|
||||
selector,
|
||||
matcherFromGroupMatchers( elementMatchers, setMatchers )
|
||||
);
|
||||
|
||||
// Save selector and tokenization
|
||||
cached.selector = selector;
|
||||
@ -2141,7 +2329,8 @@ select = Sizzle.select = function( selector, context, results, seed ) {
|
||||
if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
|
||||
context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
|
||||
|
||||
context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
|
||||
context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
|
||||
.replace( runescape, funescape ), context ) || [] )[ 0 ];
|
||||
if ( !context ) {
|
||||
return results;
|
||||
|
||||
@ -2163,10 +2352,12 @@ select = Sizzle.select = function( selector, context, results, seed ) {
|
||||
break;
|
||||
}
|
||||
if ( ( find = Expr.find[ type ] ) ) {
|
||||
|
||||
// Search, expanding context for leading sibling combinators
|
||||
if ( ( seed = find(
|
||||
token.matches[ 0 ].replace( runescape, funescape ),
|
||||
rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
|
||||
rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
|
||||
context
|
||||
) ) ) {
|
||||
|
||||
// If seed is empty or no tokens remain, we can return early
|
||||
@ -2210,6 +2401,7 @@ setDocument();
|
||||
// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
|
||||
// Detached nodes confoundingly follow *each other*
|
||||
support.sortDetached = assert( function( el ) {
|
||||
|
||||
// Should return 1, but returns 4 (following)
|
||||
return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
|
||||
} );
|
||||
@ -2235,7 +2427,7 @@ if ( !support.attributes || !assert(function( el ) {
|
||||
el.firstChild.setAttribute( "value", "" );
|
||||
return el.firstChild.getAttribute( "value" ) === "";
|
||||
} ) ) {
|
||||
addHandle( "value", function( elem, name, isXML ) {
|
||||
addHandle( "value", function( elem, _name, isXML ) {
|
||||
if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
|
||||
return elem.defaultValue;
|
||||
}
|
||||
@ -2270,13 +2462,17 @@ Sizzle.noConflict = function() {
|
||||
};
|
||||
|
||||
if ( typeof define === "function" && define.amd ) {
|
||||
define(function() { return Sizzle; });
|
||||
define( function() {
|
||||
return Sizzle;
|
||||
} );
|
||||
|
||||
// Sizzle requires that there be a global window in Common-JS like environments
|
||||
} else if ( typeof module !== "undefined" && module.exports ) {
|
||||
module.exports = Sizzle;
|
||||
} else {
|
||||
window.Sizzle = Sizzle;
|
||||
}
|
||||
|
||||
// EXPOSE
|
||||
|
||||
} )( window );
|
||||
|
4
external/sizzle/dist/sizzle.min.js
vendored
4
external/sizzle/dist/sizzle.min.js
vendored
File diff suppressed because one or more lines are too long
2
external/sizzle/dist/sizzle.min.map
vendored
2
external/sizzle/dist/sizzle.min.map
vendored
File diff suppressed because one or more lines are too long
@ -61,7 +61,7 @@
|
||||
"raw-body": "2.3.3",
|
||||
"requirejs": "2.3.6",
|
||||
"sinon": "2.3.7",
|
||||
"sizzle": "2.3.4",
|
||||
"sizzle": "2.3.5",
|
||||
"strip-json-comments": "2.0.1",
|
||||
"testswarm": "1.1.0",
|
||||
"uglify-js": "3.4.7"
|
||||
|
Loading…
Reference in New Issue
Block a user