hof 21.0.19-axios-beta → 21.0.20-axios-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21222,17 +21222,14 @@ $('.typeahead').each(function applyTypeahead() {
21222
21222
 
21223
21223
  },{"../../../frontend/themes/gov-uk/client-js":3,"jquery":17,"typeahead-aria":20}],17:[function(require,module,exports){
21224
21224
  /*!
21225
- * jQuery JavaScript Library v3.6.0
21225
+ * jQuery JavaScript Library v3.7.1
21226
21226
  * https://jquery.com/
21227
21227
  *
21228
- * Includes Sizzle.js
21229
- * https://sizzlejs.com/
21230
- *
21231
21228
  * Copyright OpenJS Foundation and other contributors
21232
21229
  * Released under the MIT license
21233
21230
  * https://jquery.org/license
21234
21231
  *
21235
- * Date: 2021-03-02T17:08Z
21232
+ * Date: 2023-08-28T13:37Z
21236
21233
  */
21237
21234
  ( function( global, factory ) {
21238
21235
 
@@ -21246,7 +21243,7 @@ $('.typeahead').each(function applyTypeahead() {
21246
21243
  // (such as Node.js), expose a factory as module.exports.
21247
21244
  // This accentuates the need for the creation of a real `window`.
21248
21245
  // e.g. var jQuery = require("jquery")(window);
21249
- // See ticket #14549 for more info.
21246
+ // See ticket trac-14549 for more info.
21250
21247
  module.exports = global.document ?
21251
21248
  factory( global, true ) :
21252
21249
  function( w ) {
@@ -21373,8 +21370,9 @@ function toType( obj ) {
21373
21370
 
21374
21371
 
21375
21372
 
21376
- var
21377
- version = "3.6.0",
21373
+ var version = "3.7.1",
21374
+
21375
+ rhtmlSuffix = /HTML$/i,
21378
21376
 
21379
21377
  // Define a local copy of jQuery
21380
21378
  jQuery = function( selector, context ) {
@@ -21620,6 +21618,38 @@ jQuery.extend( {
21620
21618
  return obj;
21621
21619
  },
21622
21620
 
21621
+
21622
+ // Retrieve the text value of an array of DOM nodes
21623
+ text: function( elem ) {
21624
+ var node,
21625
+ ret = "",
21626
+ i = 0,
21627
+ nodeType = elem.nodeType;
21628
+
21629
+ if ( !nodeType ) {
21630
+
21631
+ // If no nodeType, this is expected to be an array
21632
+ while ( ( node = elem[ i++ ] ) ) {
21633
+
21634
+ // Do not traverse comment nodes
21635
+ ret += jQuery.text( node );
21636
+ }
21637
+ }
21638
+ if ( nodeType === 1 || nodeType === 11 ) {
21639
+ return elem.textContent;
21640
+ }
21641
+ if ( nodeType === 9 ) {
21642
+ return elem.documentElement.textContent;
21643
+ }
21644
+ if ( nodeType === 3 || nodeType === 4 ) {
21645
+ return elem.nodeValue;
21646
+ }
21647
+
21648
+ // Do not include comment or processing instruction nodes
21649
+
21650
+ return ret;
21651
+ },
21652
+
21623
21653
  // results is for internal usage only
21624
21654
  makeArray: function( arr, results ) {
21625
21655
  var ret = results || [];
@@ -21642,6 +21672,15 @@ jQuery.extend( {
21642
21672
  return arr == null ? -1 : indexOf.call( arr, elem, i );
21643
21673
  },
21644
21674
 
21675
+ isXMLDoc: function( elem ) {
21676
+ var namespace = elem && elem.namespaceURI,
21677
+ docElem = elem && ( elem.ownerDocument || elem ).documentElement;
21678
+
21679
+ // Assume HTML when documentElement doesn't yet exist, such as inside
21680
+ // document fragments.
21681
+ return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
21682
+ },
21683
+
21645
21684
  // Support: Android <=4.0 only, PhantomJS 1 only
21646
21685
  // push.apply(_, arraylike) throws on ancient WebKit
21647
21686
  merge: function( first, second ) {
@@ -21743,43 +21782,98 @@ function isArrayLike( obj ) {
21743
21782
  return type === "array" || length === 0 ||
21744
21783
  typeof length === "number" && length > 0 && ( length - 1 ) in obj;
21745
21784
  }
21746
- var Sizzle =
21747
- /*!
21748
- * Sizzle CSS Selector Engine v2.3.6
21749
- * https://sizzlejs.com/
21750
- *
21751
- * Copyright JS Foundation and other contributors
21752
- * Released under the MIT license
21753
- * https://js.foundation/
21754
- *
21755
- * Date: 2021-02-16
21756
- */
21757
- ( function( window ) {
21785
+
21786
+
21787
+ function nodeName( elem, name ) {
21788
+
21789
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
21790
+
21791
+ }
21792
+ var pop = arr.pop;
21793
+
21794
+
21795
+ var sort = arr.sort;
21796
+
21797
+
21798
+ var splice = arr.splice;
21799
+
21800
+
21801
+ var whitespace = "[\\x20\\t\\r\\n\\f]";
21802
+
21803
+
21804
+ var rtrimCSS = new RegExp(
21805
+ "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
21806
+ "g"
21807
+ );
21808
+
21809
+
21810
+
21811
+
21812
+ // Note: an element does not contain itself
21813
+ jQuery.contains = function( a, b ) {
21814
+ var bup = b && b.parentNode;
21815
+
21816
+ return a === bup || !!( bup && bup.nodeType === 1 && (
21817
+
21818
+ // Support: IE 9 - 11+
21819
+ // IE doesn't have `contains` on SVG.
21820
+ a.contains ?
21821
+ a.contains( bup ) :
21822
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
21823
+ ) );
21824
+ };
21825
+
21826
+
21827
+
21828
+
21829
+ // CSS string/identifier serialization
21830
+ // https://drafts.csswg.org/cssom/#common-serializing-idioms
21831
+ var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
21832
+
21833
+ function fcssescape( ch, asCodePoint ) {
21834
+ if ( asCodePoint ) {
21835
+
21836
+ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
21837
+ if ( ch === "\0" ) {
21838
+ return "\uFFFD";
21839
+ }
21840
+
21841
+ // Control characters and (dependent upon position) numbers get escaped as code points
21842
+ return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
21843
+ }
21844
+
21845
+ // Other potentially-special ASCII characters get backslash-escaped
21846
+ return "\\" + ch;
21847
+ }
21848
+
21849
+ jQuery.escapeSelector = function( sel ) {
21850
+ return ( sel + "" ).replace( rcssescape, fcssescape );
21851
+ };
21852
+
21853
+
21854
+
21855
+
21856
+ var preferredDoc = document,
21857
+ pushNative = push;
21858
+
21859
+ ( function() {
21860
+
21758
21861
  var i,
21759
- support,
21760
21862
  Expr,
21761
- getText,
21762
- isXML,
21763
- tokenize,
21764
- compile,
21765
- select,
21766
21863
  outermostContext,
21767
21864
  sortInput,
21768
21865
  hasDuplicate,
21866
+ push = pushNative,
21769
21867
 
21770
21868
  // Local document vars
21771
- setDocument,
21772
21869
  document,
21773
- docElem,
21870
+ documentElement,
21774
21871
  documentIsHTML,
21775
21872
  rbuggyQSA,
21776
- rbuggyMatches,
21777
21873
  matches,
21778
- contains,
21779
21874
 
21780
21875
  // Instance-specific data
21781
- expando = "sizzle" + 1 * new Date(),
21782
- preferredDoc = window.document,
21876
+ expando = jQuery.expando,
21783
21877
  dirruns = 0,
21784
21878
  done = 0,
21785
21879
  classCache = createCache(),
@@ -21793,47 +21887,22 @@ var i,
21793
21887
  return 0;
21794
21888
  },
21795
21889
 
21796
- // Instance methods
21797
- hasOwn = ( {} ).hasOwnProperty,
21798
- arr = [],
21799
- pop = arr.pop,
21800
- pushNative = arr.push,
21801
- push = arr.push,
21802
- slice = arr.slice,
21803
-
21804
- // Use a stripped-down indexOf as it's faster than native
21805
- // https://jsperf.com/thor-indexof-vs-for/5
21806
- indexOf = function( list, elem ) {
21807
- var i = 0,
21808
- len = list.length;
21809
- for ( ; i < len; i++ ) {
21810
- if ( list[ i ] === elem ) {
21811
- return i;
21812
- }
21813
- }
21814
- return -1;
21815
- },
21816
-
21817
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
21818
- "ismap|loop|multiple|open|readonly|required|scoped",
21890
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
21891
+ "loop|multiple|open|readonly|required|scoped",
21819
21892
 
21820
21893
  // Regular expressions
21821
21894
 
21822
- // http://www.w3.org/TR/css3-selectors/#whitespace
21823
- whitespace = "[\\x20\\t\\r\\n\\f]",
21824
-
21825
21895
  // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
21826
21896
  identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
21827
21897
  "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
21828
21898
 
21829
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
21899
+ // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
21830
21900
  attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
21831
21901
 
21832
21902
  // Operator (capture 2)
21833
21903
  "*([*^$|!~]?=)" + whitespace +
21834
21904
 
21835
- // "Attribute values must be CSS identifiers [capture 5]
21836
- // or strings [capture 3 or capture 4]"
21905
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
21837
21906
  "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
21838
21907
  whitespace + "*\\]",
21839
21908
 
@@ -21852,101 +21921,88 @@ var i,
21852
21921
 
21853
21922
  // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
21854
21923
  rwhitespace = new RegExp( whitespace + "+", "g" ),
21855
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
21856
- whitespace + "+$", "g" ),
21857
21924
 
21858
21925
  rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
21859
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
21860
- "*" ),
21926
+ rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
21927
+ whitespace + "*" ),
21861
21928
  rdescend = new RegExp( whitespace + "|>" ),
21862
21929
 
21863
21930
  rpseudo = new RegExp( pseudos ),
21864
21931
  ridentifier = new RegExp( "^" + identifier + "$" ),
21865
21932
 
21866
21933
  matchExpr = {
21867
- "ID": new RegExp( "^#(" + identifier + ")" ),
21868
- "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
21869
- "TAG": new RegExp( "^(" + identifier + "|[*])" ),
21870
- "ATTR": new RegExp( "^" + attributes ),
21871
- "PSEUDO": new RegExp( "^" + pseudos ),
21872
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
21873
- whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
21874
- whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
21875
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
21934
+ ID: new RegExp( "^#(" + identifier + ")" ),
21935
+ CLASS: new RegExp( "^\\.(" + identifier + ")" ),
21936
+ TAG: new RegExp( "^(" + identifier + "|[*])" ),
21937
+ ATTR: new RegExp( "^" + attributes ),
21938
+ PSEUDO: new RegExp( "^" + pseudos ),
21939
+ CHILD: new RegExp(
21940
+ "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
21941
+ whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
21942
+ whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
21943
+ bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
21876
21944
 
21877
21945
  // For use in libraries implementing .is()
21878
21946
  // We use this for POS matching in `select`
21879
- "needsContext": new RegExp( "^" + whitespace +
21947
+ needsContext: new RegExp( "^" + whitespace +
21880
21948
  "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
21881
21949
  "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
21882
21950
  },
21883
21951
 
21884
- rhtml = /HTML$/i,
21885
21952
  rinputs = /^(?:input|select|textarea|button)$/i,
21886
21953
  rheader = /^h\d$/i,
21887
21954
 
21888
- rnative = /^[^{]+\{\s*\[native \w/,
21889
-
21890
21955
  // Easily-parseable/retrievable ID or TAG or CLASS selectors
21891
21956
  rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
21892
21957
 
21893
21958
  rsibling = /[+~]/,
21894
21959
 
21895
21960
  // CSS escapes
21896
- // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
21897
- runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
21961
+ // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
21962
+ runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
21963
+ "?|\\\\([^\\r\\n\\f])", "g" ),
21898
21964
  funescape = function( escape, nonHex ) {
21899
21965
  var high = "0x" + escape.slice( 1 ) - 0x10000;
21900
21966
 
21901
- return nonHex ?
21967
+ if ( nonHex ) {
21902
21968
 
21903
21969
  // Strip the backslash prefix from a non-hex escape sequence
21904
- nonHex :
21905
-
21906
- // Replace a hexadecimal escape sequence with the encoded Unicode code point
21907
- // Support: IE <=11+
21908
- // For values outside the Basic Multilingual Plane (BMP), manually construct a
21909
- // surrogate pair
21910
- high < 0 ?
21911
- String.fromCharCode( high + 0x10000 ) :
21912
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
21913
- },
21914
-
21915
- // CSS string/identifier serialization
21916
- // https://drafts.csswg.org/cssom/#common-serializing-idioms
21917
- rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
21918
- fcssescape = function( ch, asCodePoint ) {
21919
- if ( asCodePoint ) {
21920
-
21921
- // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
21922
- if ( ch === "\0" ) {
21923
- return "\uFFFD";
21924
- }
21925
-
21926
- // Control characters and (dependent upon position) numbers get escaped as code points
21927
- return ch.slice( 0, -1 ) + "\\" +
21928
- ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
21970
+ return nonHex;
21929
21971
  }
21930
21972
 
21931
- // Other potentially-special ASCII characters get backslash-escaped
21932
- return "\\" + ch;
21973
+ // Replace a hexadecimal escape sequence with the encoded Unicode code point
21974
+ // Support: IE <=11+
21975
+ // For values outside the Basic Multilingual Plane (BMP), manually construct a
21976
+ // surrogate pair
21977
+ return high < 0 ?
21978
+ String.fromCharCode( high + 0x10000 ) :
21979
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
21933
21980
  },
21934
21981
 
21935
- // Used for iframes
21936
- // See setDocument()
21982
+ // Used for iframes; see `setDocument`.
21983
+ // Support: IE 9 - 11+, Edge 12 - 18+
21937
21984
  // Removing the function wrapper causes a "Permission Denied"
21938
- // error in IE
21985
+ // error in IE/Edge.
21939
21986
  unloadHandler = function() {
21940
21987
  setDocument();
21941
21988
  },
21942
21989
 
21943
21990
  inDisabledFieldset = addCombinator(
21944
21991
  function( elem ) {
21945
- return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
21992
+ return elem.disabled === true && nodeName( elem, "fieldset" );
21946
21993
  },
21947
21994
  { dir: "parentNode", next: "legend" }
21948
21995
  );
21949
21996
 
21997
+ // Support: IE <=9 only
21998
+ // Accessing document.activeElement can throw unexpectedly
21999
+ // https://bugs.jquery.com/ticket/13393
22000
+ function safeActiveElement() {
22001
+ try {
22002
+ return document.activeElement;
22003
+ } catch ( err ) { }
22004
+ }
22005
+
21950
22006
  // Optimize for push.apply( _, NodeList )
21951
22007
  try {
21952
22008
  push.apply(
@@ -21954,32 +22010,22 @@ try {
21954
22010
  preferredDoc.childNodes
21955
22011
  );
21956
22012
 
21957
- // Support: Android<4.0
22013
+ // Support: Android <=4.0
21958
22014
  // Detect silently failing push.apply
21959
22015
  // eslint-disable-next-line no-unused-expressions
21960
22016
  arr[ preferredDoc.childNodes.length ].nodeType;
21961
22017
  } catch ( e ) {
21962
- push = { apply: arr.length ?
21963
-
21964
- // Leverage slice if possible
21965
- function( target, els ) {
22018
+ push = {
22019
+ apply: function( target, els ) {
21966
22020
  pushNative.apply( target, slice.call( els ) );
21967
- } :
21968
-
21969
- // Support: IE<9
21970
- // Otherwise append directly
21971
- function( target, els ) {
21972
- var j = target.length,
21973
- i = 0;
21974
-
21975
- // Can't trust NodeList.length
21976
- while ( ( target[ j++ ] = els[ i++ ] ) ) {}
21977
- target.length = j - 1;
22021
+ },
22022
+ call: function( target ) {
22023
+ pushNative.apply( target, slice.call( arguments, 1 ) );
21978
22024
  }
21979
22025
  };
21980
22026
  }
21981
22027
 
21982
- function Sizzle( selector, context, results, seed ) {
22028
+ function find( selector, context, results, seed ) {
21983
22029
  var m, i, elem, nid, match, groups, newSelector,
21984
22030
  newContext = context && context.ownerDocument,
21985
22031
 
@@ -22013,11 +22059,10 @@ function Sizzle( selector, context, results, seed ) {
22013
22059
  if ( nodeType === 9 ) {
22014
22060
  if ( ( elem = context.getElementById( m ) ) ) {
22015
22061
 
22016
- // Support: IE, Opera, Webkit
22017
- // TODO: identify versions
22062
+ // Support: IE 9 only
22018
22063
  // getElementById can match elements by name instead of ID
22019
22064
  if ( elem.id === m ) {
22020
- results.push( elem );
22065
+ push.call( results, elem );
22021
22066
  return results;
22022
22067
  }
22023
22068
  } else {
@@ -22027,14 +22072,13 @@ function Sizzle( selector, context, results, seed ) {
22027
22072
  // Element context
22028
22073
  } else {
22029
22074
 
22030
- // Support: IE, Opera, Webkit
22031
- // TODO: identify versions
22075
+ // Support: IE 9 only
22032
22076
  // getElementById can match elements by name instead of ID
22033
22077
  if ( newContext && ( elem = newContext.getElementById( m ) ) &&
22034
- contains( context, elem ) &&
22078
+ find.contains( context, elem ) &&
22035
22079
  elem.id === m ) {
22036
22080
 
22037
- results.push( elem );
22081
+ push.call( results, elem );
22038
22082
  return results;
22039
22083
  }
22040
22084
  }
@@ -22045,22 +22089,15 @@ function Sizzle( selector, context, results, seed ) {
22045
22089
  return results;
22046
22090
 
22047
22091
  // Class selector
22048
- } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
22049
- context.getElementsByClassName ) {
22050
-
22092
+ } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
22051
22093
  push.apply( results, context.getElementsByClassName( m ) );
22052
22094
  return results;
22053
22095
  }
22054
22096
  }
22055
22097
 
22056
22098
  // Take advantage of querySelectorAll
22057
- if ( support.qsa &&
22058
- !nonnativeSelectorCache[ selector + " " ] &&
22059
- ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
22060
-
22061
- // Support: IE 8 only
22062
- // Exclude object elements
22063
- ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
22099
+ if ( !nonnativeSelectorCache[ selector + " " ] &&
22100
+ ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
22064
22101
 
22065
22102
  newSelector = selector;
22066
22103
  newContext = context;
@@ -22073,7 +22110,7 @@ function Sizzle( selector, context, results, seed ) {
22073
22110
  // as such selectors are not recognized by querySelectorAll.
22074
22111
  // Thanks to Andrew Dupont for this technique.
22075
22112
  if ( nodeType === 1 &&
22076
- ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
22113
+ ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
22077
22114
 
22078
22115
  // Expand context for sibling selectors
22079
22116
  newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
@@ -22081,11 +22118,15 @@ function Sizzle( selector, context, results, seed ) {
22081
22118
 
22082
22119
  // We can use :scope instead of the ID hack if the browser
22083
22120
  // supports it & if we're not changing the context.
22084
- if ( newContext !== context || !support.scope ) {
22121
+ // Support: IE 11+, Edge 17 - 18+
22122
+ // IE/Edge sometimes throw a "Permission denied" error when
22123
+ // strict-comparing two documents; shallow comparisons work.
22124
+ // eslint-disable-next-line eqeqeq
22125
+ if ( newContext != context || !support.scope ) {
22085
22126
 
22086
22127
  // Capture the context ID, setting it first if necessary
22087
22128
  if ( ( nid = context.getAttribute( "id" ) ) ) {
22088
- nid = nid.replace( rcssescape, fcssescape );
22129
+ nid = jQuery.escapeSelector( nid );
22089
22130
  } else {
22090
22131
  context.setAttribute( "id", ( nid = expando ) );
22091
22132
  }
@@ -22118,7 +22159,7 @@ function Sizzle( selector, context, results, seed ) {
22118
22159
  }
22119
22160
 
22120
22161
  // All others
22121
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
22162
+ return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
22122
22163
  }
22123
22164
 
22124
22165
  /**
@@ -22132,7 +22173,8 @@ function createCache() {
22132
22173
 
22133
22174
  function cache( key, value ) {
22134
22175
 
22135
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
22176
+ // Use (key + " ") to avoid collision with native prototype properties
22177
+ // (see https://github.com/jquery/sizzle/issues/157)
22136
22178
  if ( keys.push( key + " " ) > Expr.cacheLength ) {
22137
22179
 
22138
22180
  // Only keep the most recent entries
@@ -22144,7 +22186,7 @@ function createCache() {
22144
22186
  }
22145
22187
 
22146
22188
  /**
22147
- * Mark a function for special use by Sizzle
22189
+ * Mark a function for special use by jQuery selector module
22148
22190
  * @param {Function} fn The function to mark
22149
22191
  */
22150
22192
  function markFunction( fn ) {
@@ -22175,56 +22217,13 @@ function assert( fn ) {
22175
22217
  }
22176
22218
  }
22177
22219
 
22178
- /**
22179
- * Adds the same handler for all of the specified attrs
22180
- * @param {String} attrs Pipe-separated list of attributes
22181
- * @param {Function} handler The method that will be applied
22182
- */
22183
- function addHandle( attrs, handler ) {
22184
- var arr = attrs.split( "|" ),
22185
- i = arr.length;
22186
-
22187
- while ( i-- ) {
22188
- Expr.attrHandle[ arr[ i ] ] = handler;
22189
- }
22190
- }
22191
-
22192
- /**
22193
- * Checks document order of two siblings
22194
- * @param {Element} a
22195
- * @param {Element} b
22196
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
22197
- */
22198
- function siblingCheck( a, b ) {
22199
- var cur = b && a,
22200
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
22201
- a.sourceIndex - b.sourceIndex;
22202
-
22203
- // Use IE sourceIndex if available on both nodes
22204
- if ( diff ) {
22205
- return diff;
22206
- }
22207
-
22208
- // Check if b follows a
22209
- if ( cur ) {
22210
- while ( ( cur = cur.nextSibling ) ) {
22211
- if ( cur === b ) {
22212
- return -1;
22213
- }
22214
- }
22215
- }
22216
-
22217
- return a ? 1 : -1;
22218
- }
22219
-
22220
22220
  /**
22221
22221
  * Returns a function to use in pseudos for input types
22222
22222
  * @param {String} type
22223
22223
  */
22224
22224
  function createInputPseudo( type ) {
22225
22225
  return function( elem ) {
22226
- var name = elem.nodeName.toLowerCase();
22227
- return name === "input" && elem.type === type;
22226
+ return nodeName( elem, "input" ) && elem.type === type;
22228
22227
  };
22229
22228
  }
22230
22229
 
@@ -22234,8 +22233,8 @@ function createInputPseudo( type ) {
22234
22233
  */
22235
22234
  function createButtonPseudo( type ) {
22236
22235
  return function( elem ) {
22237
- var name = elem.nodeName.toLowerCase();
22238
- return ( name === "input" || name === "button" ) && elem.type === type;
22236
+ return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
22237
+ elem.type === type;
22239
22238
  };
22240
22239
  }
22241
22240
 
@@ -22271,14 +22270,13 @@ function createDisabledPseudo( disabled ) {
22271
22270
  }
22272
22271
  }
22273
22272
 
22274
- // Support: IE 6 - 11
22273
+ // Support: IE 6 - 11+
22275
22274
  // Use the isDisabled shortcut property to check for disabled fieldset ancestors
22276
22275
  return elem.isDisabled === disabled ||
22277
22276
 
22278
22277
  // Where there is no isDisabled, check manually
22279
- /* jshint -W018 */
22280
22278
  elem.isDisabled !== !disabled &&
22281
- inDisabledFieldset( elem ) === disabled;
22279
+ inDisabledFieldset( elem ) === disabled;
22282
22280
  }
22283
22281
 
22284
22282
  return elem.disabled === disabled;
@@ -22318,7 +22316,7 @@ function createPositionalPseudo( fn ) {
22318
22316
  }
22319
22317
 
22320
22318
  /**
22321
- * Checks a node for validity as a Sizzle context
22319
+ * Checks a node for validity as a jQuery selector context
22322
22320
  * @param {Element|Object=} context
22323
22321
  * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
22324
22322
  */
@@ -22326,31 +22324,13 @@ function testContext( context ) {
22326
22324
  return context && typeof context.getElementsByTagName !== "undefined" && context;
22327
22325
  }
22328
22326
 
22329
- // Expose support vars for convenience
22330
- support = Sizzle.support = {};
22331
-
22332
- /**
22333
- * Detects XML nodes
22334
- * @param {Element|Object} elem An element or a document
22335
- * @returns {Boolean} True iff elem is a non-HTML XML node
22336
- */
22337
- isXML = Sizzle.isXML = function( elem ) {
22338
- var namespace = elem && elem.namespaceURI,
22339
- docElem = elem && ( elem.ownerDocument || elem ).documentElement;
22340
-
22341
- // Support: IE <=8
22342
- // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
22343
- // https://bugs.jquery.com/ticket/4833
22344
- return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
22345
- };
22346
-
22347
22327
  /**
22348
22328
  * Sets document-related variables once based on the current document
22349
- * @param {Element|Object} [doc] An element or document object to use to set the document
22329
+ * @param {Element|Object} [node] An element or document object to use to set the document
22350
22330
  * @returns {Object} Returns the current document
22351
22331
  */
22352
- setDocument = Sizzle.setDocument = function( node ) {
22353
- var hasCompare, subWindow,
22332
+ function setDocument( node ) {
22333
+ var subWindow,
22354
22334
  doc = node ? node.ownerDocument || node : preferredDoc;
22355
22335
 
22356
22336
  // Return early if doc is invalid or already selected
@@ -22364,87 +22344,90 @@ setDocument = Sizzle.setDocument = function( node ) {
22364
22344
 
22365
22345
  // Update global variables
22366
22346
  document = doc;
22367
- docElem = document.documentElement;
22368
- documentIsHTML = !isXML( document );
22347
+ documentElement = document.documentElement;
22348
+ documentIsHTML = !jQuery.isXMLDoc( document );
22349
+
22350
+ // Support: iOS 7 only, IE 9 - 11+
22351
+ // Older browsers didn't support unprefixed `matches`.
22352
+ matches = documentElement.matches ||
22353
+ documentElement.webkitMatchesSelector ||
22354
+ documentElement.msMatchesSelector;
22369
22355
 
22370
22356
  // Support: IE 9 - 11+, Edge 12 - 18+
22371
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
22372
- // Support: IE 11+, Edge 17 - 18+
22373
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
22374
- // two documents; shallow comparisons work.
22375
- // eslint-disable-next-line eqeqeq
22376
- if ( preferredDoc != document &&
22377
- ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
22357
+ // Accessing iframe documents after unload throws "permission denied" errors
22358
+ // (see trac-13936).
22359
+ // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
22360
+ // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
22361
+ if ( documentElement.msMatchesSelector &&
22378
22362
 
22379
- // Support: IE 11, Edge
22380
- if ( subWindow.addEventListener ) {
22381
- subWindow.addEventListener( "unload", unloadHandler, false );
22363
+ // Support: IE 11+, Edge 17 - 18+
22364
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
22365
+ // two documents; shallow comparisons work.
22366
+ // eslint-disable-next-line eqeqeq
22367
+ preferredDoc != document &&
22368
+ ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
22382
22369
 
22383
- // Support: IE 9 - 10 only
22384
- } else if ( subWindow.attachEvent ) {
22385
- subWindow.attachEvent( "onunload", unloadHandler );
22386
- }
22370
+ // Support: IE 9 - 11+, Edge 12 - 18+
22371
+ subWindow.addEventListener( "unload", unloadHandler );
22387
22372
  }
22388
22373
 
22389
- // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
22390
- // Safari 4 - 5 only, Opera <=11.6 - 12.x only
22391
- // IE/Edge & older browsers don't support the :scope pseudo-class.
22392
- // Support: Safari 6.0 only
22393
- // Safari 6.0 supports :scope but it's an alias of :root there.
22394
- support.scope = assert( function( el ) {
22395
- docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
22396
- return typeof el.querySelectorAll !== "undefined" &&
22397
- !el.querySelectorAll( ":scope fieldset div" ).length;
22374
+ // Support: IE <10
22375
+ // Check if getElementById returns elements by name
22376
+ // The broken getElementById methods don't pick up programmatically-set names,
22377
+ // so use a roundabout getElementsByName test
22378
+ support.getById = assert( function( el ) {
22379
+ documentElement.appendChild( el ).id = jQuery.expando;
22380
+ return !document.getElementsByName ||
22381
+ !document.getElementsByName( jQuery.expando ).length;
22398
22382
  } );
22399
22383
 
22400
- /* Attributes
22401
- ---------------------------------------------------------------------- */
22402
-
22403
- // Support: IE<8
22404
- // Verify that getAttribute really returns attributes and not properties
22405
- // (excepting IE8 booleans)
22406
- support.attributes = assert( function( el ) {
22407
- el.className = "i";
22408
- return !el.getAttribute( "className" );
22384
+ // Support: IE 9 only
22385
+ // Check to see if it's possible to do matchesSelector
22386
+ // on a disconnected node.
22387
+ support.disconnectedMatch = assert( function( el ) {
22388
+ return matches.call( el, "*" );
22409
22389
  } );
22410
22390
 
22411
- /* getElement(s)By*
22412
- ---------------------------------------------------------------------- */
22413
-
22414
- // Check if getElementsByTagName("*") returns only elements
22415
- support.getElementsByTagName = assert( function( el ) {
22416
- el.appendChild( document.createComment( "" ) );
22417
- return !el.getElementsByTagName( "*" ).length;
22391
+ // Support: IE 9 - 11+, Edge 12 - 18+
22392
+ // IE/Edge don't support the :scope pseudo-class.
22393
+ support.scope = assert( function() {
22394
+ return document.querySelectorAll( ":scope" );
22418
22395
  } );
22419
22396
 
22420
- // Support: IE<9
22421
- support.getElementsByClassName = rnative.test( document.getElementsByClassName );
22422
-
22423
- // Support: IE<10
22424
- // Check if getElementById returns elements by name
22425
- // The broken getElementById methods don't pick up programmatically-set names,
22426
- // so use a roundabout getElementsByName test
22427
- support.getById = assert( function( el ) {
22428
- docElem.appendChild( el ).id = expando;
22429
- return !document.getElementsByName || !document.getElementsByName( expando ).length;
22397
+ // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
22398
+ // Make sure the `:has()` argument is parsed unforgivingly.
22399
+ // We include `*` in the test to detect buggy implementations that are
22400
+ // _selectively_ forgiving (specifically when the list includes at least
22401
+ // one valid selector).
22402
+ // Note that we treat complete lack of support for `:has()` as if it were
22403
+ // spec-compliant support, which is fine because use of `:has()` in such
22404
+ // environments will fail in the qSA path and fall back to jQuery traversal
22405
+ // anyway.
22406
+ support.cssHas = assert( function() {
22407
+ try {
22408
+ document.querySelector( ":has(*,:jqfake)" );
22409
+ return false;
22410
+ } catch ( e ) {
22411
+ return true;
22412
+ }
22430
22413
  } );
22431
22414
 
22432
22415
  // ID filter and find
22433
22416
  if ( support.getById ) {
22434
- Expr.filter[ "ID" ] = function( id ) {
22417
+ Expr.filter.ID = function( id ) {
22435
22418
  var attrId = id.replace( runescape, funescape );
22436
22419
  return function( elem ) {
22437
22420
  return elem.getAttribute( "id" ) === attrId;
22438
22421
  };
22439
22422
  };
22440
- Expr.find[ "ID" ] = function( id, context ) {
22423
+ Expr.find.ID = function( id, context ) {
22441
22424
  if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
22442
22425
  var elem = context.getElementById( id );
22443
22426
  return elem ? [ elem ] : [];
22444
22427
  }
22445
22428
  };
22446
22429
  } else {
22447
- Expr.filter[ "ID" ] = function( id ) {
22430
+ Expr.filter.ID = function( id ) {
22448
22431
  var attrId = id.replace( runescape, funescape );
22449
22432
  return function( elem ) {
22450
22433
  var node = typeof elem.getAttributeNode !== "undefined" &&
@@ -22455,7 +22438,7 @@ setDocument = Sizzle.setDocument = function( node ) {
22455
22438
 
22456
22439
  // Support: IE 6 - 7 only
22457
22440
  // getElementById is not reliable as a find shortcut
22458
- Expr.find[ "ID" ] = function( id, context ) {
22441
+ Expr.find.ID = function( id, context ) {
22459
22442
  if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
22460
22443
  var node, i, elems,
22461
22444
  elem = context.getElementById( id );
@@ -22485,40 +22468,18 @@ setDocument = Sizzle.setDocument = function( node ) {
22485
22468
  }
22486
22469
 
22487
22470
  // Tag
22488
- Expr.find[ "TAG" ] = support.getElementsByTagName ?
22489
- function( tag, context ) {
22490
- if ( typeof context.getElementsByTagName !== "undefined" ) {
22491
- return context.getElementsByTagName( tag );
22492
-
22493
- // DocumentFragment nodes don't have gEBTN
22494
- } else if ( support.qsa ) {
22495
- return context.querySelectorAll( tag );
22496
- }
22497
- } :
22498
-
22499
- function( tag, context ) {
22500
- var elem,
22501
- tmp = [],
22502
- i = 0,
22503
-
22504
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
22505
- results = context.getElementsByTagName( tag );
22471
+ Expr.find.TAG = function( tag, context ) {
22472
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
22473
+ return context.getElementsByTagName( tag );
22506
22474
 
22507
- // Filter out possible comments
22508
- if ( tag === "*" ) {
22509
- while ( ( elem = results[ i++ ] ) ) {
22510
- if ( elem.nodeType === 1 ) {
22511
- tmp.push( elem );
22512
- }
22513
- }
22514
-
22515
- return tmp;
22516
- }
22517
- return results;
22518
- };
22475
+ // DocumentFragment nodes don't have gEBTN
22476
+ } else {
22477
+ return context.querySelectorAll( tag );
22478
+ }
22479
+ };
22519
22480
 
22520
22481
  // Class
22521
- Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
22482
+ Expr.find.CLASS = function( className, context ) {
22522
22483
  if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
22523
22484
  return context.getElementsByClassName( className );
22524
22485
  }
@@ -22529,177 +22490,94 @@ setDocument = Sizzle.setDocument = function( node ) {
22529
22490
 
22530
22491
  // QSA and matchesSelector support
22531
22492
 
22532
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
22533
- rbuggyMatches = [];
22534
-
22535
- // qSa(:focus) reports false when true (Chrome 21)
22536
- // We allow this because of a bug in IE8/9 that throws an error
22537
- // whenever `document.activeElement` is accessed on an iframe
22538
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
22539
- // See https://bugs.jquery.com/ticket/13378
22540
22493
  rbuggyQSA = [];
22541
22494
 
22542
- if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
22543
-
22544
- // Build QSA regex
22545
- // Regex strategy adopted from Diego Perini
22546
- assert( function( el ) {
22547
-
22548
- var input;
22549
-
22550
- // Select is set to empty string on purpose
22551
- // This is to test IE's treatment of not explicitly
22552
- // setting a boolean content attribute,
22553
- // since its presence should be enough
22554
- // https://bugs.jquery.com/ticket/12359
22555
- docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
22556
- "<select id='" + expando + "-\r\\' msallowcapture=''>" +
22557
- "<option selected=''></option></select>";
22558
-
22559
- // Support: IE8, Opera 11-12.16
22560
- // Nothing should be selected when empty strings follow ^= or $= or *=
22561
- // The test attribute must be unknown in Opera but "safe" for WinRT
22562
- // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
22563
- if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
22564
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
22565
- }
22566
-
22567
- // Support: IE8
22568
- // Boolean attributes and "value" are not treated correctly
22569
- if ( !el.querySelectorAll( "[selected]" ).length ) {
22570
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
22571
- }
22572
-
22573
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
22574
- if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
22575
- rbuggyQSA.push( "~=" );
22576
- }
22577
-
22578
- // Support: IE 11+, Edge 15 - 18+
22579
- // IE 11/Edge don't find elements on a `[name='']` query in some cases.
22580
- // Adding a temporary attribute to the document before the selection works
22581
- // around the issue.
22582
- // Interestingly, IE 10 & older don't seem to have the issue.
22583
- input = document.createElement( "input" );
22584
- input.setAttribute( "name", "" );
22585
- el.appendChild( input );
22586
- if ( !el.querySelectorAll( "[name='']" ).length ) {
22587
- rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
22588
- whitespace + "*(?:''|\"\")" );
22589
- }
22590
-
22591
- // Webkit/Opera - :checked should return selected option elements
22592
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
22593
- // IE8 throws error here and will not see later tests
22594
- if ( !el.querySelectorAll( ":checked" ).length ) {
22595
- rbuggyQSA.push( ":checked" );
22596
- }
22597
-
22598
- // Support: Safari 8+, iOS 8+
22599
- // https://bugs.webkit.org/show_bug.cgi?id=136851
22600
- // In-page `selector#id sibling-combinator selector` fails
22601
- if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
22602
- rbuggyQSA.push( ".#.+[+~]" );
22603
- }
22604
-
22605
- // Support: Firefox <=3.6 - 5 only
22606
- // Old Firefox doesn't throw on a badly-escaped identifier.
22607
- el.querySelectorAll( "\\\f" );
22608
- rbuggyQSA.push( "[\\r\\n\\f]" );
22609
- } );
22610
-
22611
- assert( function( el ) {
22612
- el.innerHTML = "<a href='' disabled='disabled'></a>" +
22613
- "<select disabled='disabled'><option/></select>";
22495
+ // Build QSA regex
22496
+ // Regex strategy adopted from Diego Perini
22497
+ assert( function( el ) {
22614
22498
 
22615
- // Support: Windows 8 Native Apps
22616
- // The type and name attributes are restricted during .innerHTML assignment
22617
- var input = document.createElement( "input" );
22618
- input.setAttribute( "type", "hidden" );
22619
- el.appendChild( input ).setAttribute( "name", "D" );
22499
+ var input;
22620
22500
 
22621
- // Support: IE8
22622
- // Enforce case-sensitivity of name attribute
22623
- if ( el.querySelectorAll( "[name=d]" ).length ) {
22624
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
22625
- }
22501
+ documentElement.appendChild( el ).innerHTML =
22502
+ "<a id='" + expando + "' href='' disabled='disabled'></a>" +
22503
+ "<select id='" + expando + "-\r\\' disabled='disabled'>" +
22504
+ "<option selected=''></option></select>";
22626
22505
 
22627
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
22628
- // IE8 throws error here and will not see later tests
22629
- if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
22630
- rbuggyQSA.push( ":enabled", ":disabled" );
22631
- }
22506
+ // Support: iOS <=7 - 8 only
22507
+ // Boolean attributes and "value" are not treated correctly in some XML documents
22508
+ if ( !el.querySelectorAll( "[selected]" ).length ) {
22509
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
22510
+ }
22632
22511
 
22633
- // Support: IE9-11+
22634
- // IE's :disabled selector does not pick up the children of disabled fieldsets
22635
- docElem.appendChild( el ).disabled = true;
22636
- if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
22637
- rbuggyQSA.push( ":enabled", ":disabled" );
22638
- }
22512
+ // Support: iOS <=7 - 8 only
22513
+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
22514
+ rbuggyQSA.push( "~=" );
22515
+ }
22639
22516
 
22640
- // Support: Opera 10 - 11 only
22641
- // Opera 10-11 does not throw on post-comma invalid pseudos
22642
- el.querySelectorAll( "*,:x" );
22643
- rbuggyQSA.push( ",.*:" );
22644
- } );
22645
- }
22517
+ // Support: iOS 8 only
22518
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
22519
+ // In-page `selector#id sibling-combinator selector` fails
22520
+ if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
22521
+ rbuggyQSA.push( ".#.+[+~]" );
22522
+ }
22646
22523
 
22647
- if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
22648
- docElem.webkitMatchesSelector ||
22649
- docElem.mozMatchesSelector ||
22650
- docElem.oMatchesSelector ||
22651
- docElem.msMatchesSelector ) ) ) ) {
22524
+ // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
22525
+ // In some of the document kinds, these selectors wouldn't work natively.
22526
+ // This is probably OK but for backwards compatibility we want to maintain
22527
+ // handling them through jQuery traversal in jQuery 3.x.
22528
+ if ( !el.querySelectorAll( ":checked" ).length ) {
22529
+ rbuggyQSA.push( ":checked" );
22530
+ }
22652
22531
 
22653
- assert( function( el ) {
22532
+ // Support: Windows 8 Native Apps
22533
+ // The type and name attributes are restricted during .innerHTML assignment
22534
+ input = document.createElement( "input" );
22535
+ input.setAttribute( "type", "hidden" );
22536
+ el.appendChild( input ).setAttribute( "name", "D" );
22537
+
22538
+ // Support: IE 9 - 11+
22539
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
22540
+ // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
22541
+ // In some of the document kinds, these selectors wouldn't work natively.
22542
+ // This is probably OK but for backwards compatibility we want to maintain
22543
+ // handling them through jQuery traversal in jQuery 3.x.
22544
+ documentElement.appendChild( el ).disabled = true;
22545
+ if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
22546
+ rbuggyQSA.push( ":enabled", ":disabled" );
22547
+ }
22548
+
22549
+ // Support: IE 11+, Edge 15 - 18+
22550
+ // IE 11/Edge don't find elements on a `[name='']` query in some cases.
22551
+ // Adding a temporary attribute to the document before the selection works
22552
+ // around the issue.
22553
+ // Interestingly, IE 10 & older don't seem to have the issue.
22554
+ input = document.createElement( "input" );
22555
+ input.setAttribute( "name", "" );
22556
+ el.appendChild( input );
22557
+ if ( !el.querySelectorAll( "[name='']" ).length ) {
22558
+ rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
22559
+ whitespace + "*(?:''|\"\")" );
22560
+ }
22561
+ } );
22654
22562
 
22655
- // Check to see if it's possible to do matchesSelector
22656
- // on a disconnected node (IE 9)
22657
- support.disconnectedMatch = matches.call( el, "*" );
22563
+ if ( !support.cssHas ) {
22658
22564
 
22659
- // This should fail with an exception
22660
- // Gecko does not error, returns false instead
22661
- matches.call( el, "[s!='']:x" );
22662
- rbuggyMatches.push( "!=", pseudos );
22663
- } );
22565
+ // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
22566
+ // Our regular `try-catch` mechanism fails to detect natively-unsupported
22567
+ // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
22568
+ // in browsers that parse the `:has()` argument as a forgiving selector list.
22569
+ // https://drafts.csswg.org/selectors/#relational now requires the argument
22570
+ // to be parsed unforgivingly, but browsers have not yet fully adjusted.
22571
+ rbuggyQSA.push( ":has" );
22664
22572
  }
22665
22573
 
22666
22574
  rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
22667
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
22668
-
22669
- /* Contains
22670
- ---------------------------------------------------------------------- */
22671
- hasCompare = rnative.test( docElem.compareDocumentPosition );
22672
-
22673
- // Element contains another
22674
- // Purposefully self-exclusive
22675
- // As in, an element does not contain itself
22676
- contains = hasCompare || rnative.test( docElem.contains ) ?
22677
- function( a, b ) {
22678
- var adown = a.nodeType === 9 ? a.documentElement : a,
22679
- bup = b && b.parentNode;
22680
- return a === bup || !!( bup && bup.nodeType === 1 && (
22681
- adown.contains ?
22682
- adown.contains( bup ) :
22683
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
22684
- ) );
22685
- } :
22686
- function( a, b ) {
22687
- if ( b ) {
22688
- while ( ( b = b.parentNode ) ) {
22689
- if ( b === a ) {
22690
- return true;
22691
- }
22692
- }
22693
- }
22694
- return false;
22695
- };
22696
22575
 
22697
22576
  /* Sorting
22698
22577
  ---------------------------------------------------------------------- */
22699
22578
 
22700
22579
  // Document order sorting
22701
- sortOrder = hasCompare ?
22702
- function( a, b ) {
22580
+ sortOrder = function( a, b ) {
22703
22581
 
22704
22582
  // Flag for duplicate removal
22705
22583
  if ( a === b ) {
@@ -22733,8 +22611,8 @@ setDocument = Sizzle.setDocument = function( node ) {
22733
22611
  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
22734
22612
  // two documents; shallow comparisons work.
22735
22613
  // eslint-disable-next-line eqeqeq
22736
- if ( a == document || a.ownerDocument == preferredDoc &&
22737
- contains( preferredDoc, a ) ) {
22614
+ if ( a === document || a.ownerDocument == preferredDoc &&
22615
+ find.contains( preferredDoc, a ) ) {
22738
22616
  return -1;
22739
22617
  }
22740
22618
 
@@ -22742,100 +22620,33 @@ setDocument = Sizzle.setDocument = function( node ) {
22742
22620
  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
22743
22621
  // two documents; shallow comparisons work.
22744
22622
  // eslint-disable-next-line eqeqeq
22745
- if ( b == document || b.ownerDocument == preferredDoc &&
22746
- contains( preferredDoc, b ) ) {
22623
+ if ( b === document || b.ownerDocument == preferredDoc &&
22624
+ find.contains( preferredDoc, b ) ) {
22747
22625
  return 1;
22748
22626
  }
22749
22627
 
22750
22628
  // Maintain original order
22751
22629
  return sortInput ?
22752
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
22630
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
22753
22631
  0;
22754
22632
  }
22755
22633
 
22756
22634
  return compare & 4 ? -1 : 1;
22757
- } :
22758
- function( a, b ) {
22759
-
22760
- // Exit early if the nodes are identical
22761
- if ( a === b ) {
22762
- hasDuplicate = true;
22763
- return 0;
22764
- }
22765
-
22766
- var cur,
22767
- i = 0,
22768
- aup = a.parentNode,
22769
- bup = b.parentNode,
22770
- ap = [ a ],
22771
- bp = [ b ];
22772
-
22773
- // Parentless nodes are either documents or disconnected
22774
- if ( !aup || !bup ) {
22775
-
22776
- // Support: IE 11+, Edge 17 - 18+
22777
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
22778
- // two documents; shallow comparisons work.
22779
- /* eslint-disable eqeqeq */
22780
- return a == document ? -1 :
22781
- b == document ? 1 :
22782
- /* eslint-enable eqeqeq */
22783
- aup ? -1 :
22784
- bup ? 1 :
22785
- sortInput ?
22786
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
22787
- 0;
22788
-
22789
- // If the nodes are siblings, we can do a quick check
22790
- } else if ( aup === bup ) {
22791
- return siblingCheck( a, b );
22792
- }
22793
-
22794
- // Otherwise we need full lists of their ancestors for comparison
22795
- cur = a;
22796
- while ( ( cur = cur.parentNode ) ) {
22797
- ap.unshift( cur );
22798
- }
22799
- cur = b;
22800
- while ( ( cur = cur.parentNode ) ) {
22801
- bp.unshift( cur );
22802
- }
22803
-
22804
- // Walk down the tree looking for a discrepancy
22805
- while ( ap[ i ] === bp[ i ] ) {
22806
- i++;
22807
- }
22808
-
22809
- return i ?
22810
-
22811
- // Do a sibling check if the nodes have a common ancestor
22812
- siblingCheck( ap[ i ], bp[ i ] ) :
22813
-
22814
- // Otherwise nodes in our document sort first
22815
- // Support: IE 11+, Edge 17 - 18+
22816
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
22817
- // two documents; shallow comparisons work.
22818
- /* eslint-disable eqeqeq */
22819
- ap[ i ] == preferredDoc ? -1 :
22820
- bp[ i ] == preferredDoc ? 1 :
22821
- /* eslint-enable eqeqeq */
22822
- 0;
22823
22635
  };
22824
22636
 
22825
22637
  return document;
22826
- };
22638
+ }
22827
22639
 
22828
- Sizzle.matches = function( expr, elements ) {
22829
- return Sizzle( expr, null, null, elements );
22640
+ find.matches = function( expr, elements ) {
22641
+ return find( expr, null, null, elements );
22830
22642
  };
22831
22643
 
22832
- Sizzle.matchesSelector = function( elem, expr ) {
22644
+ find.matchesSelector = function( elem, expr ) {
22833
22645
  setDocument( elem );
22834
22646
 
22835
- if ( support.matchesSelector && documentIsHTML &&
22647
+ if ( documentIsHTML &&
22836
22648
  !nonnativeSelectorCache[ expr + " " ] &&
22837
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
22838
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
22649
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
22839
22650
 
22840
22651
  try {
22841
22652
  var ret = matches.call( elem, expr );
@@ -22843,9 +22654,9 @@ Sizzle.matchesSelector = function( elem, expr ) {
22843
22654
  // IE 9's matchesSelector returns false on disconnected nodes
22844
22655
  if ( ret || support.disconnectedMatch ||
22845
22656
 
22846
- // As well, disconnected nodes are said to be in a document
22847
- // fragment in IE 9
22848
- elem.document && elem.document.nodeType !== 11 ) {
22657
+ // As well, disconnected nodes are said to be in a document
22658
+ // fragment in IE 9
22659
+ elem.document && elem.document.nodeType !== 11 ) {
22849
22660
  return ret;
22850
22661
  }
22851
22662
  } catch ( e ) {
@@ -22853,10 +22664,10 @@ Sizzle.matchesSelector = function( elem, expr ) {
22853
22664
  }
22854
22665
  }
22855
22666
 
22856
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
22667
+ return find( expr, document, null, [ elem ] ).length > 0;
22857
22668
  };
22858
22669
 
22859
- Sizzle.contains = function( context, elem ) {
22670
+ find.contains = function( context, elem ) {
22860
22671
 
22861
22672
  // Set document vars if needed
22862
22673
  // Support: IE 11+, Edge 17 - 18+
@@ -22866,10 +22677,11 @@ Sizzle.contains = function( context, elem ) {
22866
22677
  if ( ( context.ownerDocument || context ) != document ) {
22867
22678
  setDocument( context );
22868
22679
  }
22869
- return contains( context, elem );
22680
+ return jQuery.contains( context, elem );
22870
22681
  };
22871
22682
 
22872
- Sizzle.attr = function( elem, name ) {
22683
+
22684
+ find.attr = function( elem, name ) {
22873
22685
 
22874
22686
  // Set document vars if needed
22875
22687
  // Support: IE 11+, Edge 17 - 18+
@@ -22882,25 +22694,19 @@ Sizzle.attr = function( elem, name ) {
22882
22694
 
22883
22695
  var fn = Expr.attrHandle[ name.toLowerCase() ],
22884
22696
 
22885
- // Don't get fooled by Object.prototype properties (jQuery #13807)
22697
+ // Don't get fooled by Object.prototype properties (see trac-13807)
22886
22698
  val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
22887
22699
  fn( elem, name, !documentIsHTML ) :
22888
22700
  undefined;
22889
22701
 
22890
- return val !== undefined ?
22891
- val :
22892
- support.attributes || !documentIsHTML ?
22893
- elem.getAttribute( name ) :
22894
- ( val = elem.getAttributeNode( name ) ) && val.specified ?
22895
- val.value :
22896
- null;
22897
- };
22702
+ if ( val !== undefined ) {
22703
+ return val;
22704
+ }
22898
22705
 
22899
- Sizzle.escape = function( sel ) {
22900
- return ( sel + "" ).replace( rcssescape, fcssescape );
22706
+ return elem.getAttribute( name );
22901
22707
  };
22902
22708
 
22903
- Sizzle.error = function( msg ) {
22709
+ find.error = function( msg ) {
22904
22710
  throw new Error( "Syntax error, unrecognized expression: " + msg );
22905
22711
  };
22906
22712
 
@@ -22908,16 +22714,20 @@ Sizzle.error = function( msg ) {
22908
22714
  * Document sorting and removing duplicates
22909
22715
  * @param {ArrayLike} results
22910
22716
  */
22911
- Sizzle.uniqueSort = function( results ) {
22717
+ jQuery.uniqueSort = function( results ) {
22912
22718
  var elem,
22913
22719
  duplicates = [],
22914
22720
  j = 0,
22915
22721
  i = 0;
22916
22722
 
22917
22723
  // Unless we *know* we can detect duplicates, assume their presence
22918
- hasDuplicate = !support.detectDuplicates;
22919
- sortInput = !support.sortStable && results.slice( 0 );
22920
- results.sort( sortOrder );
22724
+ //
22725
+ // Support: Android <=4.0+
22726
+ // Testing for detecting duplicates is unpredictable so instead assume we can't
22727
+ // depend on duplicate detection in all browsers without a stable sort.
22728
+ hasDuplicate = !support.sortStable;
22729
+ sortInput = !support.sortStable && slice.call( results, 0 );
22730
+ sort.call( results, sortOrder );
22921
22731
 
22922
22732
  if ( hasDuplicate ) {
22923
22733
  while ( ( elem = results[ i++ ] ) ) {
@@ -22926,7 +22736,7 @@ Sizzle.uniqueSort = function( results ) {
22926
22736
  }
22927
22737
  }
22928
22738
  while ( j-- ) {
22929
- results.splice( duplicates[ j ], 1 );
22739
+ splice.call( results, duplicates[ j ], 1 );
22930
22740
  }
22931
22741
  }
22932
22742
 
@@ -22937,47 +22747,11 @@ Sizzle.uniqueSort = function( results ) {
22937
22747
  return results;
22938
22748
  };
22939
22749
 
22940
- /**
22941
- * Utility function for retrieving the text value of an array of DOM nodes
22942
- * @param {Array|Element} elem
22943
- */
22944
- getText = Sizzle.getText = function( elem ) {
22945
- var node,
22946
- ret = "",
22947
- i = 0,
22948
- nodeType = elem.nodeType;
22949
-
22950
- if ( !nodeType ) {
22951
-
22952
- // If no nodeType, this is expected to be an array
22953
- while ( ( node = elem[ i++ ] ) ) {
22954
-
22955
- // Do not traverse comment nodes
22956
- ret += getText( node );
22957
- }
22958
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
22959
-
22960
- // Use textContent for elements
22961
- // innerText usage removed for consistency of new lines (jQuery #11153)
22962
- if ( typeof elem.textContent === "string" ) {
22963
- return elem.textContent;
22964
- } else {
22965
-
22966
- // Traverse its children
22967
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
22968
- ret += getText( elem );
22969
- }
22970
- }
22971
- } else if ( nodeType === 3 || nodeType === 4 ) {
22972
- return elem.nodeValue;
22973
- }
22974
-
22975
- // Do not include comment or processing instruction nodes
22976
-
22977
- return ret;
22750
+ jQuery.fn.uniqueSort = function() {
22751
+ return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
22978
22752
  };
22979
22753
 
22980
- Expr = Sizzle.selectors = {
22754
+ Expr = jQuery.expr = {
22981
22755
 
22982
22756
  // Can be adjusted by the user
22983
22757
  cacheLength: 50,
@@ -22998,12 +22772,12 @@ Expr = Sizzle.selectors = {
22998
22772
  },
22999
22773
 
23000
22774
  preFilter: {
23001
- "ATTR": function( match ) {
22775
+ ATTR: function( match ) {
23002
22776
  match[ 1 ] = match[ 1 ].replace( runescape, funescape );
23003
22777
 
23004
22778
  // Move the given value to match[3] whether quoted or unquoted
23005
- match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
23006
- match[ 5 ] || "" ).replace( runescape, funescape );
22779
+ match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
22780
+ .replace( runescape, funescape );
23007
22781
 
23008
22782
  if ( match[ 2 ] === "~=" ) {
23009
22783
  match[ 3 ] = " " + match[ 3 ] + " ";
@@ -23012,7 +22786,7 @@ Expr = Sizzle.selectors = {
23012
22786
  return match.slice( 0, 4 );
23013
22787
  },
23014
22788
 
23015
- "CHILD": function( match ) {
22789
+ CHILD: function( match ) {
23016
22790
 
23017
22791
  /* matches from matchExpr["CHILD"]
23018
22792
  1 type (only|nth|...)
@@ -23030,29 +22804,30 @@ Expr = Sizzle.selectors = {
23030
22804
 
23031
22805
  // nth-* requires argument
23032
22806
  if ( !match[ 3 ] ) {
23033
- Sizzle.error( match[ 0 ] );
22807
+ find.error( match[ 0 ] );
23034
22808
  }
23035
22809
 
23036
22810
  // numeric x and y parameters for Expr.filter.CHILD
23037
22811
  // remember that false/true cast respectively to 0/1
23038
22812
  match[ 4 ] = +( match[ 4 ] ?
23039
22813
  match[ 5 ] + ( match[ 6 ] || 1 ) :
23040
- 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
22814
+ 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
22815
+ );
23041
22816
  match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
23042
22817
 
23043
- // other types prohibit arguments
22818
+ // other types prohibit arguments
23044
22819
  } else if ( match[ 3 ] ) {
23045
- Sizzle.error( match[ 0 ] );
22820
+ find.error( match[ 0 ] );
23046
22821
  }
23047
22822
 
23048
22823
  return match;
23049
22824
  },
23050
22825
 
23051
- "PSEUDO": function( match ) {
22826
+ PSEUDO: function( match ) {
23052
22827
  var excess,
23053
22828
  unquoted = !match[ 6 ] && match[ 2 ];
23054
22829
 
23055
- if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
22830
+ if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
23056
22831
  return null;
23057
22832
  }
23058
22833
 
@@ -23081,36 +22856,36 @@ Expr = Sizzle.selectors = {
23081
22856
 
23082
22857
  filter: {
23083
22858
 
23084
- "TAG": function( nodeNameSelector ) {
23085
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
22859
+ TAG: function( nodeNameSelector ) {
22860
+ var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
23086
22861
  return nodeNameSelector === "*" ?
23087
22862
  function() {
23088
22863
  return true;
23089
22864
  } :
23090
22865
  function( elem ) {
23091
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
22866
+ return nodeName( elem, expectedNodeName );
23092
22867
  };
23093
22868
  },
23094
22869
 
23095
- "CLASS": function( className ) {
22870
+ CLASS: function( className ) {
23096
22871
  var pattern = classCache[ className + " " ];
23097
22872
 
23098
22873
  return pattern ||
23099
- ( pattern = new RegExp( "(^|" + whitespace +
23100
- ")" + className + "(" + whitespace + "|$)" ) ) && classCache(
23101
- className, function( elem ) {
23102
- return pattern.test(
23103
- typeof elem.className === "string" && elem.className ||
23104
- typeof elem.getAttribute !== "undefined" &&
23105
- elem.getAttribute( "class" ) ||
23106
- ""
23107
- );
22874
+ ( pattern = new RegExp( "(^|" + whitespace + ")" + className +
22875
+ "(" + whitespace + "|$)" ) ) &&
22876
+ classCache( className, function( elem ) {
22877
+ return pattern.test(
22878
+ typeof elem.className === "string" && elem.className ||
22879
+ typeof elem.getAttribute !== "undefined" &&
22880
+ elem.getAttribute( "class" ) ||
22881
+ ""
22882
+ );
23108
22883
  } );
23109
22884
  },
23110
22885
 
23111
- "ATTR": function( name, operator, check ) {
22886
+ ATTR: function( name, operator, check ) {
23112
22887
  return function( elem ) {
23113
- var result = Sizzle.attr( elem, name );
22888
+ var result = find.attr( elem, name );
23114
22889
 
23115
22890
  if ( result == null ) {
23116
22891
  return operator === "!=";
@@ -23121,22 +22896,34 @@ Expr = Sizzle.selectors = {
23121
22896
 
23122
22897
  result += "";
23123
22898
 
23124
- /* eslint-disable max-len */
23125
-
23126
- return operator === "=" ? result === check :
23127
- operator === "!=" ? result !== check :
23128
- operator === "^=" ? check && result.indexOf( check ) === 0 :
23129
- operator === "*=" ? check && result.indexOf( check ) > -1 :
23130
- operator === "$=" ? check && result.slice( -check.length ) === check :
23131
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
23132
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
23133
- false;
23134
- /* eslint-enable max-len */
22899
+ if ( operator === "=" ) {
22900
+ return result === check;
22901
+ }
22902
+ if ( operator === "!=" ) {
22903
+ return result !== check;
22904
+ }
22905
+ if ( operator === "^=" ) {
22906
+ return check && result.indexOf( check ) === 0;
22907
+ }
22908
+ if ( operator === "*=" ) {
22909
+ return check && result.indexOf( check ) > -1;
22910
+ }
22911
+ if ( operator === "$=" ) {
22912
+ return check && result.slice( -check.length ) === check;
22913
+ }
22914
+ if ( operator === "~=" ) {
22915
+ return ( " " + result.replace( rwhitespace, " " ) + " " )
22916
+ .indexOf( check ) > -1;
22917
+ }
22918
+ if ( operator === "|=" ) {
22919
+ return result === check || result.slice( 0, check.length + 1 ) === check + "-";
22920
+ }
23135
22921
 
22922
+ return false;
23136
22923
  };
23137
22924
  },
23138
22925
 
23139
- "CHILD": function( type, what, _argument, first, last ) {
22926
+ CHILD: function( type, what, _argument, first, last ) {
23140
22927
  var simple = type.slice( 0, 3 ) !== "nth",
23141
22928
  forward = type.slice( -4 ) !== "last",
23142
22929
  ofType = what === "of-type";
@@ -23149,7 +22936,7 @@ Expr = Sizzle.selectors = {
23149
22936
  } :
23150
22937
 
23151
22938
  function( elem, _context, xml ) {
23152
- var cache, uniqueCache, outerCache, node, nodeIndex, start,
22939
+ var cache, outerCache, node, nodeIndex, start,
23153
22940
  dir = simple !== forward ? "nextSibling" : "previousSibling",
23154
22941
  parent = elem.parentNode,
23155
22942
  name = ofType && elem.nodeName.toLowerCase(),
@@ -23164,7 +22951,7 @@ Expr = Sizzle.selectors = {
23164
22951
  node = elem;
23165
22952
  while ( ( node = node[ dir ] ) ) {
23166
22953
  if ( ofType ?
23167
- node.nodeName.toLowerCase() === name :
22954
+ nodeName( node, name ) :
23168
22955
  node.nodeType === 1 ) {
23169
22956
 
23170
22957
  return false;
@@ -23183,17 +22970,8 @@ Expr = Sizzle.selectors = {
23183
22970
  if ( forward && useCache ) {
23184
22971
 
23185
22972
  // Seek `elem` from a previously-cached index
23186
-
23187
- // ...in a gzip-friendly way
23188
- node = parent;
23189
- outerCache = node[ expando ] || ( node[ expando ] = {} );
23190
-
23191
- // Support: IE <9 only
23192
- // Defend against cloned attroperties (jQuery gh-1709)
23193
- uniqueCache = outerCache[ node.uniqueID ] ||
23194
- ( outerCache[ node.uniqueID ] = {} );
23195
-
23196
- cache = uniqueCache[ type ] || [];
22973
+ outerCache = parent[ expando ] || ( parent[ expando ] = {} );
22974
+ cache = outerCache[ type ] || [];
23197
22975
  nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
23198
22976
  diff = nodeIndex && cache[ 2 ];
23199
22977
  node = nodeIndex && parent.childNodes[ nodeIndex ];
@@ -23205,7 +22983,7 @@ Expr = Sizzle.selectors = {
23205
22983
 
23206
22984
  // When found, cache indexes on `parent` and break
23207
22985
  if ( node.nodeType === 1 && ++diff && node === elem ) {
23208
- uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
22986
+ outerCache[ type ] = [ dirruns, nodeIndex, diff ];
23209
22987
  break;
23210
22988
  }
23211
22989
  }
@@ -23214,17 +22992,8 @@ Expr = Sizzle.selectors = {
23214
22992
 
23215
22993
  // Use previously-cached element index if available
23216
22994
  if ( useCache ) {
23217
-
23218
- // ...in a gzip-friendly way
23219
- node = elem;
23220
- outerCache = node[ expando ] || ( node[ expando ] = {} );
23221
-
23222
- // Support: IE <9 only
23223
- // Defend against cloned attroperties (jQuery gh-1709)
23224
- uniqueCache = outerCache[ node.uniqueID ] ||
23225
- ( outerCache[ node.uniqueID ] = {} );
23226
-
23227
- cache = uniqueCache[ type ] || [];
22995
+ outerCache = elem[ expando ] || ( elem[ expando ] = {} );
22996
+ cache = outerCache[ type ] || [];
23228
22997
  nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
23229
22998
  diff = nodeIndex;
23230
22999
  }
@@ -23238,7 +23007,7 @@ Expr = Sizzle.selectors = {
23238
23007
  ( diff = nodeIndex = 0 ) || start.pop() ) ) {
23239
23008
 
23240
23009
  if ( ( ofType ?
23241
- node.nodeName.toLowerCase() === name :
23010
+ nodeName( node, name ) :
23242
23011
  node.nodeType === 1 ) &&
23243
23012
  ++diff ) {
23244
23013
 
@@ -23246,13 +23015,7 @@ Expr = Sizzle.selectors = {
23246
23015
  if ( useCache ) {
23247
23016
  outerCache = node[ expando ] ||
23248
23017
  ( node[ expando ] = {} );
23249
-
23250
- // Support: IE <9 only
23251
- // Defend against cloned attroperties (jQuery gh-1709)
23252
- uniqueCache = outerCache[ node.uniqueID ] ||
23253
- ( outerCache[ node.uniqueID ] = {} );
23254
-
23255
- uniqueCache[ type ] = [ dirruns, diff ];
23018
+ outerCache[ type ] = [ dirruns, diff ];
23256
23019
  }
23257
23020
 
23258
23021
  if ( node === elem ) {
@@ -23270,19 +23033,19 @@ Expr = Sizzle.selectors = {
23270
23033
  };
23271
23034
  },
23272
23035
 
23273
- "PSEUDO": function( pseudo, argument ) {
23036
+ PSEUDO: function( pseudo, argument ) {
23274
23037
 
23275
23038
  // pseudo-class names are case-insensitive
23276
- // http://www.w3.org/TR/selectors/#pseudo-classes
23039
+ // https://www.w3.org/TR/selectors/#pseudo-classes
23277
23040
  // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
23278
23041
  // Remember that setFilters inherits from pseudos
23279
23042
  var args,
23280
23043
  fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
23281
- Sizzle.error( "unsupported pseudo: " + pseudo );
23044
+ find.error( "unsupported pseudo: " + pseudo );
23282
23045
 
23283
23046
  // The user may use createPseudo to indicate that
23284
23047
  // arguments are needed to create the filter function
23285
- // just as Sizzle does
23048
+ // just as jQuery does
23286
23049
  if ( fn[ expando ] ) {
23287
23050
  return fn( argument );
23288
23051
  }
@@ -23296,7 +23059,7 @@ Expr = Sizzle.selectors = {
23296
23059
  matched = fn( seed, argument ),
23297
23060
  i = matched.length;
23298
23061
  while ( i-- ) {
23299
- idx = indexOf( seed, matched[ i ] );
23062
+ idx = indexOf.call( seed, matched[ i ] );
23300
23063
  seed[ idx ] = !( matches[ idx ] = matched[ i ] );
23301
23064
  }
23302
23065
  } ) :
@@ -23312,14 +23075,14 @@ Expr = Sizzle.selectors = {
23312
23075
  pseudos: {
23313
23076
 
23314
23077
  // Potentially complex pseudos
23315
- "not": markFunction( function( selector ) {
23078
+ not: markFunction( function( selector ) {
23316
23079
 
23317
23080
  // Trim the selector passed to compile
23318
23081
  // to avoid treating leading and trailing
23319
23082
  // spaces as combinators
23320
23083
  var input = [],
23321
23084
  results = [],
23322
- matcher = compile( selector.replace( rtrim, "$1" ) );
23085
+ matcher = compile( selector.replace( rtrimCSS, "$1" ) );
23323
23086
 
23324
23087
  return matcher[ expando ] ?
23325
23088
  markFunction( function( seed, matches, _context, xml ) {
@@ -23338,22 +23101,23 @@ Expr = Sizzle.selectors = {
23338
23101
  input[ 0 ] = elem;
23339
23102
  matcher( input, null, xml, results );
23340
23103
 
23341
- // Don't keep the element (issue #299)
23104
+ // Don't keep the element
23105
+ // (see https://github.com/jquery/sizzle/issues/299)
23342
23106
  input[ 0 ] = null;
23343
23107
  return !results.pop();
23344
23108
  };
23345
23109
  } ),
23346
23110
 
23347
- "has": markFunction( function( selector ) {
23111
+ has: markFunction( function( selector ) {
23348
23112
  return function( elem ) {
23349
- return Sizzle( selector, elem ).length > 0;
23113
+ return find( selector, elem ).length > 0;
23350
23114
  };
23351
23115
  } ),
23352
23116
 
23353
- "contains": markFunction( function( text ) {
23117
+ contains: markFunction( function( text ) {
23354
23118
  text = text.replace( runescape, funescape );
23355
23119
  return function( elem ) {
23356
- return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
23120
+ return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
23357
23121
  };
23358
23122
  } ),
23359
23123
 
@@ -23363,12 +23127,12 @@ Expr = Sizzle.selectors = {
23363
23127
  // or beginning with the identifier C immediately followed by "-".
23364
23128
  // The matching of C against the element's language value is performed case-insensitively.
23365
23129
  // The identifier C does not have to be a valid language name."
23366
- // http://www.w3.org/TR/selectors/#lang-pseudo
23367
- "lang": markFunction( function( lang ) {
23130
+ // https://www.w3.org/TR/selectors/#lang-pseudo
23131
+ lang: markFunction( function( lang ) {
23368
23132
 
23369
23133
  // lang value must be a valid identifier
23370
23134
  if ( !ridentifier.test( lang || "" ) ) {
23371
- Sizzle.error( "unsupported lang: " + lang );
23135
+ find.error( "unsupported lang: " + lang );
23372
23136
  }
23373
23137
  lang = lang.replace( runescape, funescape ).toLowerCase();
23374
23138
  return function( elem ) {
@@ -23387,38 +23151,39 @@ Expr = Sizzle.selectors = {
23387
23151
  } ),
23388
23152
 
23389
23153
  // Miscellaneous
23390
- "target": function( elem ) {
23154
+ target: function( elem ) {
23391
23155
  var hash = window.location && window.location.hash;
23392
23156
  return hash && hash.slice( 1 ) === elem.id;
23393
23157
  },
23394
23158
 
23395
- "root": function( elem ) {
23396
- return elem === docElem;
23159
+ root: function( elem ) {
23160
+ return elem === documentElement;
23397
23161
  },
23398
23162
 
23399
- "focus": function( elem ) {
23400
- return elem === document.activeElement &&
23401
- ( !document.hasFocus || document.hasFocus() ) &&
23163
+ focus: function( elem ) {
23164
+ return elem === safeActiveElement() &&
23165
+ document.hasFocus() &&
23402
23166
  !!( elem.type || elem.href || ~elem.tabIndex );
23403
23167
  },
23404
23168
 
23405
23169
  // Boolean properties
23406
- "enabled": createDisabledPseudo( false ),
23407
- "disabled": createDisabledPseudo( true ),
23170
+ enabled: createDisabledPseudo( false ),
23171
+ disabled: createDisabledPseudo( true ),
23408
23172
 
23409
- "checked": function( elem ) {
23173
+ checked: function( elem ) {
23410
23174
 
23411
23175
  // In CSS3, :checked should return both checked and selected elements
23412
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
23413
- var nodeName = elem.nodeName.toLowerCase();
23414
- return ( nodeName === "input" && !!elem.checked ) ||
23415
- ( nodeName === "option" && !!elem.selected );
23176
+ // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
23177
+ return ( nodeName( elem, "input" ) && !!elem.checked ) ||
23178
+ ( nodeName( elem, "option" ) && !!elem.selected );
23416
23179
  },
23417
23180
 
23418
- "selected": function( elem ) {
23181
+ selected: function( elem ) {
23419
23182
 
23420
- // Accessing this property makes selected-by-default
23421
- // options in Safari work properly
23183
+ // Support: IE <=11+
23184
+ // Accessing the selectedIndex property
23185
+ // forces the browser to treat the default option as
23186
+ // selected when in an optgroup.
23422
23187
  if ( elem.parentNode ) {
23423
23188
  // eslint-disable-next-line no-unused-expressions
23424
23189
  elem.parentNode.selectedIndex;
@@ -23428,9 +23193,9 @@ Expr = Sizzle.selectors = {
23428
23193
  },
23429
23194
 
23430
23195
  // Contents
23431
- "empty": function( elem ) {
23196
+ empty: function( elem ) {
23432
23197
 
23433
- // http://www.w3.org/TR/selectors/#empty-pseudo
23198
+ // https://www.w3.org/TR/selectors/#empty-pseudo
23434
23199
  // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
23435
23200
  // but not by others (comment: 8; processing instruction: 7; etc.)
23436
23201
  // nodeType < 6 works because attributes (2) do not appear as children
@@ -23442,49 +23207,49 @@ Expr = Sizzle.selectors = {
23442
23207
  return true;
23443
23208
  },
23444
23209
 
23445
- "parent": function( elem ) {
23446
- return !Expr.pseudos[ "empty" ]( elem );
23210
+ parent: function( elem ) {
23211
+ return !Expr.pseudos.empty( elem );
23447
23212
  },
23448
23213
 
23449
23214
  // Element/input types
23450
- "header": function( elem ) {
23215
+ header: function( elem ) {
23451
23216
  return rheader.test( elem.nodeName );
23452
23217
  },
23453
23218
 
23454
- "input": function( elem ) {
23219
+ input: function( elem ) {
23455
23220
  return rinputs.test( elem.nodeName );
23456
23221
  },
23457
23222
 
23458
- "button": function( elem ) {
23459
- var name = elem.nodeName.toLowerCase();
23460
- return name === "input" && elem.type === "button" || name === "button";
23223
+ button: function( elem ) {
23224
+ return nodeName( elem, "input" ) && elem.type === "button" ||
23225
+ nodeName( elem, "button" );
23461
23226
  },
23462
23227
 
23463
- "text": function( elem ) {
23228
+ text: function( elem ) {
23464
23229
  var attr;
23465
- return elem.nodeName.toLowerCase() === "input" &&
23466
- elem.type === "text" &&
23230
+ return nodeName( elem, "input" ) && elem.type === "text" &&
23467
23231
 
23468
- // Support: IE<8
23469
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
23232
+ // Support: IE <10 only
23233
+ // New HTML5 attribute values (e.g., "search") appear
23234
+ // with elem.type === "text"
23470
23235
  ( ( attr = elem.getAttribute( "type" ) ) == null ||
23471
23236
  attr.toLowerCase() === "text" );
23472
23237
  },
23473
23238
 
23474
23239
  // Position-in-collection
23475
- "first": createPositionalPseudo( function() {
23240
+ first: createPositionalPseudo( function() {
23476
23241
  return [ 0 ];
23477
23242
  } ),
23478
23243
 
23479
- "last": createPositionalPseudo( function( _matchIndexes, length ) {
23244
+ last: createPositionalPseudo( function( _matchIndexes, length ) {
23480
23245
  return [ length - 1 ];
23481
23246
  } ),
23482
23247
 
23483
- "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
23248
+ eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
23484
23249
  return [ argument < 0 ? argument + length : argument ];
23485
23250
  } ),
23486
23251
 
23487
- "even": createPositionalPseudo( function( matchIndexes, length ) {
23252
+ even: createPositionalPseudo( function( matchIndexes, length ) {
23488
23253
  var i = 0;
23489
23254
  for ( ; i < length; i += 2 ) {
23490
23255
  matchIndexes.push( i );
@@ -23492,7 +23257,7 @@ Expr = Sizzle.selectors = {
23492
23257
  return matchIndexes;
23493
23258
  } ),
23494
23259
 
23495
- "odd": createPositionalPseudo( function( matchIndexes, length ) {
23260
+ odd: createPositionalPseudo( function( matchIndexes, length ) {
23496
23261
  var i = 1;
23497
23262
  for ( ; i < length; i += 2 ) {
23498
23263
  matchIndexes.push( i );
@@ -23500,19 +23265,24 @@ Expr = Sizzle.selectors = {
23500
23265
  return matchIndexes;
23501
23266
  } ),
23502
23267
 
23503
- "lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
23504
- var i = argument < 0 ?
23505
- argument + length :
23506
- argument > length ?
23507
- length :
23508
- argument;
23268
+ lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
23269
+ var i;
23270
+
23271
+ if ( argument < 0 ) {
23272
+ i = argument + length;
23273
+ } else if ( argument > length ) {
23274
+ i = length;
23275
+ } else {
23276
+ i = argument;
23277
+ }
23278
+
23509
23279
  for ( ; --i >= 0; ) {
23510
23280
  matchIndexes.push( i );
23511
23281
  }
23512
23282
  return matchIndexes;
23513
23283
  } ),
23514
23284
 
23515
- "gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
23285
+ gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
23516
23286
  var i = argument < 0 ? argument + length : argument;
23517
23287
  for ( ; ++i < length; ) {
23518
23288
  matchIndexes.push( i );
@@ -23522,7 +23292,7 @@ Expr = Sizzle.selectors = {
23522
23292
  }
23523
23293
  };
23524
23294
 
23525
- Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
23295
+ Expr.pseudos.nth = Expr.pseudos.eq;
23526
23296
 
23527
23297
  // Add button/input type pseudos
23528
23298
  for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
@@ -23537,7 +23307,7 @@ function setFilters() {}
23537
23307
  setFilters.prototype = Expr.filters = Expr.pseudos;
23538
23308
  Expr.setFilters = new setFilters();
23539
23309
 
23540
- tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
23310
+ function tokenize( selector, parseOnly ) {
23541
23311
  var matched, match, tokens, type,
23542
23312
  soFar, groups, preFilters,
23543
23313
  cached = tokenCache[ selector + " " ];
@@ -23565,13 +23335,13 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
23565
23335
  matched = false;
23566
23336
 
23567
23337
  // Combinators
23568
- if ( ( match = rcombinators.exec( soFar ) ) ) {
23338
+ if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
23569
23339
  matched = match.shift();
23570
23340
  tokens.push( {
23571
23341
  value: matched,
23572
23342
 
23573
23343
  // Cast descendant combinators to space
23574
- type: match[ 0 ].replace( rtrim, " " )
23344
+ type: match[ 0 ].replace( rtrimCSS, " " )
23575
23345
  } );
23576
23346
  soFar = soFar.slice( matched.length );
23577
23347
  }
@@ -23598,14 +23368,16 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
23598
23368
  // Return the length of the invalid excess
23599
23369
  // if we're just parsing
23600
23370
  // Otherwise, throw an error or return tokens
23601
- return parseOnly ?
23602
- soFar.length :
23603
- soFar ?
23604
- Sizzle.error( selector ) :
23371
+ if ( parseOnly ) {
23372
+ return soFar.length;
23373
+ }
23605
23374
 
23606
- // Cache the tokens
23607
- tokenCache( selector, groups ).slice( 0 );
23608
- };
23375
+ return soFar ?
23376
+ find.error( selector ) :
23377
+
23378
+ // Cache the tokens
23379
+ tokenCache( selector, groups ).slice( 0 );
23380
+ }
23609
23381
 
23610
23382
  function toSelector( tokens ) {
23611
23383
  var i = 0,
@@ -23638,7 +23410,7 @@ function addCombinator( matcher, combinator, base ) {
23638
23410
 
23639
23411
  // Check against all ancestor/preceding elements
23640
23412
  function( elem, context, xml ) {
23641
- var oldCache, uniqueCache, outerCache,
23413
+ var oldCache, outerCache,
23642
23414
  newCache = [ dirruns, doneName ];
23643
23415
 
23644
23416
  // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
@@ -23655,14 +23427,9 @@ function addCombinator( matcher, combinator, base ) {
23655
23427
  if ( elem.nodeType === 1 || checkNonElements ) {
23656
23428
  outerCache = elem[ expando ] || ( elem[ expando ] = {} );
23657
23429
 
23658
- // Support: IE <9 only
23659
- // Defend against cloned attroperties (jQuery gh-1709)
23660
- uniqueCache = outerCache[ elem.uniqueID ] ||
23661
- ( outerCache[ elem.uniqueID ] = {} );
23662
-
23663
- if ( skip && skip === elem.nodeName.toLowerCase() ) {
23430
+ if ( skip && nodeName( elem, skip ) ) {
23664
23431
  elem = elem[ dir ] || elem;
23665
- } else if ( ( oldCache = uniqueCache[ key ] ) &&
23432
+ } else if ( ( oldCache = outerCache[ key ] ) &&
23666
23433
  oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
23667
23434
 
23668
23435
  // Assign to newCache so results back-propagate to previous elements
@@ -23670,7 +23437,7 @@ function addCombinator( matcher, combinator, base ) {
23670
23437
  } else {
23671
23438
 
23672
23439
  // Reuse newcache so results back-propagate to previous elements
23673
- uniqueCache[ key ] = newCache;
23440
+ outerCache[ key ] = newCache;
23674
23441
 
23675
23442
  // A match means we're done; a fail means we have to keep checking
23676
23443
  if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
@@ -23702,7 +23469,7 @@ function multipleContexts( selector, contexts, results ) {
23702
23469
  var i = 0,
23703
23470
  len = contexts.length;
23704
23471
  for ( ; i < len; i++ ) {
23705
- Sizzle( selector, contexts[ i ], results );
23472
+ find( selector, contexts[ i ], results );
23706
23473
  }
23707
23474
  return results;
23708
23475
  }
@@ -23736,38 +23503,37 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
23736
23503
  postFinder = setMatcher( postFinder, postSelector );
23737
23504
  }
23738
23505
  return markFunction( function( seed, results, context, xml ) {
23739
- var temp, i, elem,
23506
+ var temp, i, elem, matcherOut,
23740
23507
  preMap = [],
23741
23508
  postMap = [],
23742
23509
  preexisting = results.length,
23743
23510
 
23744
23511
  // Get initial elements from seed or context
23745
- elems = seed || multipleContexts(
23746
- selector || "*",
23747
- context.nodeType ? [ context ] : context,
23748
- []
23749
- ),
23512
+ elems = seed ||
23513
+ multipleContexts( selector || "*",
23514
+ context.nodeType ? [ context ] : context, [] ),
23750
23515
 
23751
23516
  // Prefilter to get matcher input, preserving a map for seed-results synchronization
23752
23517
  matcherIn = preFilter && ( seed || !selector ) ?
23753
23518
  condense( elems, preMap, preFilter, context, xml ) :
23754
- elems,
23519
+ elems;
23755
23520
 
23756
- matcherOut = matcher ?
23521
+ if ( matcher ) {
23757
23522
 
23758
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
23759
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
23523
+ // If we have a postFinder, or filtered seed, or non-seed postFilter
23524
+ // or preexisting results,
23525
+ matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
23760
23526
 
23761
- // ...intermediate processing is necessary
23762
- [] :
23527
+ // ...intermediate processing is necessary
23528
+ [] :
23763
23529
 
23764
- // ...otherwise use results directly
23765
- results :
23766
- matcherIn;
23530
+ // ...otherwise use results directly
23531
+ results;
23767
23532
 
23768
- // Find primary matches
23769
- if ( matcher ) {
23533
+ // Find primary matches
23770
23534
  matcher( matcherIn, matcherOut, context, xml );
23535
+ } else {
23536
+ matcherOut = matcherIn;
23771
23537
  }
23772
23538
 
23773
23539
  // Apply postFilter
@@ -23805,7 +23571,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
23805
23571
  i = matcherOut.length;
23806
23572
  while ( i-- ) {
23807
23573
  if ( ( elem = matcherOut[ i ] ) &&
23808
- ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
23574
+ ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
23809
23575
 
23810
23576
  seed[ temp ] = !( results[ temp ] = elem );
23811
23577
  }
@@ -23840,15 +23606,21 @@ function matcherFromTokens( tokens ) {
23840
23606
  return elem === checkContext;
23841
23607
  }, implicitRelative, true ),
23842
23608
  matchAnyContext = addCombinator( function( elem ) {
23843
- return indexOf( checkContext, elem ) > -1;
23609
+ return indexOf.call( checkContext, elem ) > -1;
23844
23610
  }, implicitRelative, true ),
23845
23611
  matchers = [ function( elem, context, xml ) {
23846
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
23612
+
23613
+ // Support: IE 11+, Edge 17 - 18+
23614
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
23615
+ // two documents; shallow comparisons work.
23616
+ // eslint-disable-next-line eqeqeq
23617
+ var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
23847
23618
  ( checkContext = context ).nodeType ?
23848
23619
  matchContext( elem, context, xml ) :
23849
23620
  matchAnyContext( elem, context, xml ) );
23850
23621
 
23851
- // Avoid hanging onto element (issue #299)
23622
+ // Avoid hanging onto element
23623
+ // (see https://github.com/jquery/sizzle/issues/299)
23852
23624
  checkContext = null;
23853
23625
  return ret;
23854
23626
  } ];
@@ -23873,11 +23645,10 @@ function matcherFromTokens( tokens ) {
23873
23645
  i > 1 && elementMatcher( matchers ),
23874
23646
  i > 1 && toSelector(
23875
23647
 
23876
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
23877
- tokens
23878
- .slice( 0, i - 1 )
23879
- .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
23880
- ).replace( rtrim, "$1" ),
23648
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
23649
+ tokens.slice( 0, i - 1 )
23650
+ .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
23651
+ ).replace( rtrimCSS, "$1" ),
23881
23652
  matcher,
23882
23653
  i < j && matcherFromTokens( tokens.slice( i, j ) ),
23883
23654
  j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
@@ -23903,7 +23674,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23903
23674
  contextBackup = outermostContext,
23904
23675
 
23905
23676
  // We must always have either seed elements or outermost context
23906
- elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
23677
+ elems = seed || byElement && Expr.find.TAG( "*", outermost ),
23907
23678
 
23908
23679
  // Use integer dirruns iff this is the outermost matcher
23909
23680
  dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
@@ -23919,8 +23690,9 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23919
23690
  }
23920
23691
 
23921
23692
  // Add elements passing elementMatchers directly to results
23922
- // Support: IE<9, Safari
23923
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
23693
+ // Support: iOS <=7 - 9 only
23694
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
23695
+ // elements by id. (see trac-14142)
23924
23696
  for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
23925
23697
  if ( byElement && elem ) {
23926
23698
  j = 0;
@@ -23935,7 +23707,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23935
23707
  }
23936
23708
  while ( ( matcher = elementMatchers[ j++ ] ) ) {
23937
23709
  if ( matcher( elem, context || document, xml ) ) {
23938
- results.push( elem );
23710
+ push.call( results, elem );
23939
23711
  break;
23940
23712
  }
23941
23713
  }
@@ -23998,7 +23770,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23998
23770
  if ( outermost && !seed && setMatched.length > 0 &&
23999
23771
  ( matchedCount + setMatchers.length ) > 1 ) {
24000
23772
 
24001
- Sizzle.uniqueSort( results );
23773
+ jQuery.uniqueSort( results );
24002
23774
  }
24003
23775
  }
24004
23776
 
@@ -24016,7 +23788,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
24016
23788
  superMatcher;
24017
23789
  }
24018
23790
 
24019
- compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
23791
+ function compile( selector, match /* Internal Use Only */ ) {
24020
23792
  var i,
24021
23793
  setMatchers = [],
24022
23794
  elementMatchers = [],
@@ -24039,27 +23811,25 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
24039
23811
  }
24040
23812
 
24041
23813
  // Cache the compiled function
24042
- cached = compilerCache(
24043
- selector,
24044
- matcherFromGroupMatchers( elementMatchers, setMatchers )
24045
- );
23814
+ cached = compilerCache( selector,
23815
+ matcherFromGroupMatchers( elementMatchers, setMatchers ) );
24046
23816
 
24047
23817
  // Save selector and tokenization
24048
23818
  cached.selector = selector;
24049
23819
  }
24050
23820
  return cached;
24051
- };
23821
+ }
24052
23822
 
24053
23823
  /**
24054
- * A low-level selection function that works with Sizzle's compiled
23824
+ * A low-level selection function that works with jQuery's compiled
24055
23825
  * selector functions
24056
23826
  * @param {String|Function} selector A selector or a pre-compiled
24057
- * selector function built with Sizzle.compile
23827
+ * selector function built with jQuery selector compile
24058
23828
  * @param {Element} context
24059
23829
  * @param {Array} [results]
24060
23830
  * @param {Array} [seed] A set of elements to match against
24061
23831
  */
24062
- select = Sizzle.select = function( selector, context, results, seed ) {
23832
+ function select( selector, context, results, seed ) {
24063
23833
  var i, tokens, token, type, find,
24064
23834
  compiled = typeof selector === "function" && selector,
24065
23835
  match = !seed && tokenize( ( selector = compiled.selector || selector ) );
@@ -24073,10 +23843,12 @@ select = Sizzle.select = function( selector, context, results, seed ) {
24073
23843
  // Reduce context if the leading compound selector is an ID
24074
23844
  tokens = match[ 0 ] = match[ 0 ].slice( 0 );
24075
23845
  if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
24076
- context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
23846
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
24077
23847
 
24078
- context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
24079
- .replace( runescape, funescape ), context ) || [] )[ 0 ];
23848
+ context = ( Expr.find.ID(
23849
+ token.matches[ 0 ].replace( runescape, funescape ),
23850
+ context
23851
+ ) || [] )[ 0 ];
24080
23852
  if ( !context ) {
24081
23853
  return results;
24082
23854
 
@@ -24089,7 +23861,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
24089
23861
  }
24090
23862
 
24091
23863
  // Fetch a seed set for right-to-left matching
24092
- i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
23864
+ i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
24093
23865
  while ( i-- ) {
24094
23866
  token = tokens[ i ];
24095
23867
 
@@ -24102,8 +23874,8 @@ select = Sizzle.select = function( selector, context, results, seed ) {
24102
23874
  // Search, expanding context for leading sibling combinators
24103
23875
  if ( ( seed = find(
24104
23876
  token.matches[ 0 ].replace( runescape, funescape ),
24105
- rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
24106
- context
23877
+ rsibling.test( tokens[ 0 ].type ) &&
23878
+ testContext( context.parentNode ) || context
24107
23879
  ) ) ) {
24108
23880
 
24109
23881
  // If seed is empty or no tokens remain, we can return early
@@ -24130,21 +23902,18 @@ select = Sizzle.select = function( selector, context, results, seed ) {
24130
23902
  !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
24131
23903
  );
24132
23904
  return results;
24133
- };
23905
+ }
24134
23906
 
24135
23907
  // One-time assignments
24136
23908
 
23909
+ // Support: Android <=4.0 - 4.1+
24137
23910
  // Sort stability
24138
23911
  support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
24139
23912
 
24140
- // Support: Chrome 14-35+
24141
- // Always assume duplicates if they aren't passed to the comparison function
24142
- support.detectDuplicates = !!hasDuplicate;
24143
-
24144
23913
  // Initialize against the default document
24145
23914
  setDocument();
24146
23915
 
24147
- // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
23916
+ // Support: Android <=4.0 - 4.1+
24148
23917
  // Detached nodes confoundingly follow *each other*
24149
23918
  support.sortDetached = assert( function( el ) {
24150
23919
 
@@ -24152,68 +23921,29 @@ support.sortDetached = assert( function( el ) {
24152
23921
  return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
24153
23922
  } );
24154
23923
 
24155
- // Support: IE<8
24156
- // Prevent attribute/property "interpolation"
24157
- // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
24158
- if ( !assert( function( el ) {
24159
- el.innerHTML = "<a href='#'></a>";
24160
- return el.firstChild.getAttribute( "href" ) === "#";
24161
- } ) ) {
24162
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
24163
- if ( !isXML ) {
24164
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
24165
- }
24166
- } );
24167
- }
24168
-
24169
- // Support: IE<9
24170
- // Use defaultValue in place of getAttribute("value")
24171
- if ( !support.attributes || !assert( function( el ) {
24172
- el.innerHTML = "<input/>";
24173
- el.firstChild.setAttribute( "value", "" );
24174
- return el.firstChild.getAttribute( "value" ) === "";
24175
- } ) ) {
24176
- addHandle( "value", function( elem, _name, isXML ) {
24177
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
24178
- return elem.defaultValue;
24179
- }
24180
- } );
24181
- }
24182
-
24183
- // Support: IE<9
24184
- // Use getAttributeNode to fetch booleans when getAttribute lies
24185
- if ( !assert( function( el ) {
24186
- return el.getAttribute( "disabled" ) == null;
24187
- } ) ) {
24188
- addHandle( booleans, function( elem, name, isXML ) {
24189
- var val;
24190
- if ( !isXML ) {
24191
- return elem[ name ] === true ? name.toLowerCase() :
24192
- ( val = elem.getAttributeNode( name ) ) && val.specified ?
24193
- val.value :
24194
- null;
24195
- }
24196
- } );
24197
- }
24198
-
24199
- return Sizzle;
24200
-
24201
- } )( window );
24202
-
24203
-
24204
-
24205
- jQuery.find = Sizzle;
24206
- jQuery.expr = Sizzle.selectors;
23924
+ jQuery.find = find;
24207
23925
 
24208
23926
  // Deprecated
24209
23927
  jQuery.expr[ ":" ] = jQuery.expr.pseudos;
24210
- jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
24211
- jQuery.text = Sizzle.getText;
24212
- jQuery.isXMLDoc = Sizzle.isXML;
24213
- jQuery.contains = Sizzle.contains;
24214
- jQuery.escapeSelector = Sizzle.escape;
23928
+ jQuery.unique = jQuery.uniqueSort;
23929
+
23930
+ // These have always been private, but they used to be documented as part of
23931
+ // Sizzle so let's maintain them for now for backwards compatibility purposes.
23932
+ find.compile = compile;
23933
+ find.select = select;
23934
+ find.setDocument = setDocument;
23935
+ find.tokenize = tokenize;
24215
23936
 
23937
+ find.escape = jQuery.escapeSelector;
23938
+ find.getText = jQuery.text;
23939
+ find.isXML = jQuery.isXMLDoc;
23940
+ find.selectors = jQuery.expr;
23941
+ find.support = jQuery.support;
23942
+ find.uniqueSort = jQuery.uniqueSort;
24216
23943
 
23944
+ /* eslint-enable */
23945
+
23946
+ } )();
24217
23947
 
24218
23948
 
24219
23949
  var dir = function( elem, dir, until ) {
@@ -24247,13 +23977,6 @@ var siblings = function( n, elem ) {
24247
23977
 
24248
23978
  var rneedsContext = jQuery.expr.match.needsContext;
24249
23979
 
24250
-
24251
-
24252
- function nodeName( elem, name ) {
24253
-
24254
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
24255
-
24256
- }
24257
23980
  var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
24258
23981
 
24259
23982
 
@@ -24352,8 +24075,8 @@ jQuery.fn.extend( {
24352
24075
  var rootjQuery,
24353
24076
 
24354
24077
  // A simple way to check for HTML strings
24355
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
24356
- // Strict HTML recognition (#11290: must start with <)
24078
+ // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
24079
+ // Strict HTML recognition (trac-11290: must start with <)
24357
24080
  // Shortcut simple #id case for speed
24358
24081
  rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
24359
24082
 
@@ -24504,7 +24227,7 @@ jQuery.fn.extend( {
24504
24227
  if ( cur.nodeType < 11 && ( targets ?
24505
24228
  targets.index( cur ) > -1 :
24506
24229
 
24507
- // Don't pass non-elements to Sizzle
24230
+ // Don't pass non-elements to jQuery#find
24508
24231
  cur.nodeType === 1 &&
24509
24232
  jQuery.find.matchesSelector( cur, selectors ) ) ) {
24510
24233
 
@@ -25059,7 +24782,7 @@ jQuery.extend( {
25059
24782
 
25060
24783
  if ( jQuery.Deferred.exceptionHook ) {
25061
24784
  jQuery.Deferred.exceptionHook( e,
25062
- process.stackTrace );
24785
+ process.error );
25063
24786
  }
25064
24787
 
25065
24788
  // Support: Promises/A+ section 2.3.3.3.4.1
@@ -25087,10 +24810,17 @@ jQuery.extend( {
25087
24810
  process();
25088
24811
  } else {
25089
24812
 
25090
- // Call an optional hook to record the stack, in case of exception
24813
+ // Call an optional hook to record the error, in case of exception
25091
24814
  // since it's otherwise lost when execution goes async
25092
- if ( jQuery.Deferred.getStackHook ) {
25093
- process.stackTrace = jQuery.Deferred.getStackHook();
24815
+ if ( jQuery.Deferred.getErrorHook ) {
24816
+ process.error = jQuery.Deferred.getErrorHook();
24817
+
24818
+ // The deprecated alias of the above. While the name suggests
24819
+ // returning the stack, not an error instance, jQuery just passes
24820
+ // it directly to `console.warn` so both will work; an instance
24821
+ // just better cooperates with source maps.
24822
+ } else if ( jQuery.Deferred.getStackHook ) {
24823
+ process.error = jQuery.Deferred.getStackHook();
25094
24824
  }
25095
24825
  window.setTimeout( process );
25096
24826
  }
@@ -25265,12 +24995,16 @@ jQuery.extend( {
25265
24995
  // warn about them ASAP rather than swallowing them by default.
25266
24996
  var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
25267
24997
 
25268
- jQuery.Deferred.exceptionHook = function( error, stack ) {
24998
+ // If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
24999
+ // captured before the async barrier to get the original error cause
25000
+ // which may otherwise be hidden.
25001
+ jQuery.Deferred.exceptionHook = function( error, asyncError ) {
25269
25002
 
25270
25003
  // Support: IE 8 - 9 only
25271
25004
  // Console exists when dev tools are open, which can happen at any time
25272
25005
  if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
25273
- window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
25006
+ window.console.warn( "jQuery.Deferred exception: " + error.message,
25007
+ error.stack, asyncError );
25274
25008
  }
25275
25009
  };
25276
25010
 
@@ -25310,7 +25044,7 @@ jQuery.extend( {
25310
25044
  isReady: false,
25311
25045
 
25312
25046
  // A counter to track how many items to wait for before
25313
- // the ready event fires. See #6781
25047
+ // the ready event fires. See trac-6781
25314
25048
  readyWait: 1,
25315
25049
 
25316
25050
  // Handle when the DOM is ready
@@ -25438,7 +25172,7 @@ function fcamelCase( _all, letter ) {
25438
25172
 
25439
25173
  // Convert dashed to camelCase; used by the css and data modules
25440
25174
  // Support: IE <=9 - 11, Edge 12 - 15
25441
- // Microsoft forgot to hump their vendor prefix (#9572)
25175
+ // Microsoft forgot to hump their vendor prefix (trac-9572)
25442
25176
  function camelCase( string ) {
25443
25177
  return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
25444
25178
  }
@@ -25474,7 +25208,7 @@ Data.prototype = {
25474
25208
  value = {};
25475
25209
 
25476
25210
  // We can accept data for non-element nodes in modern browsers,
25477
- // but we should not, see #8335.
25211
+ // but we should not, see trac-8335.
25478
25212
  // Always return an empty object.
25479
25213
  if ( acceptData( owner ) ) {
25480
25214
 
@@ -25713,7 +25447,7 @@ jQuery.fn.extend( {
25713
25447
  while ( i-- ) {
25714
25448
 
25715
25449
  // Support: IE 11 only
25716
- // The attrs elements can be null (#14894)
25450
+ // The attrs elements can be null (trac-14894)
25717
25451
  if ( attrs[ i ] ) {
25718
25452
  name = attrs[ i ].name;
25719
25453
  if ( name.indexOf( "data-" ) === 0 ) {
@@ -26136,9 +25870,9 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
26136
25870
  input = document.createElement( "input" );
26137
25871
 
26138
25872
  // Support: Android 4.0 - 4.3 only
26139
- // Check state lost if the name is set (#11217)
25873
+ // Check state lost if the name is set (trac-11217)
26140
25874
  // Support: Windows Web Apps (WWA)
26141
- // `name` and `type` must use .setAttribute for WWA (#14901)
25875
+ // `name` and `type` must use .setAttribute for WWA (trac-14901)
26142
25876
  input.setAttribute( "type", "radio" );
26143
25877
  input.setAttribute( "checked", "checked" );
26144
25878
  input.setAttribute( "name", "t" );
@@ -26162,7 +25896,7 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
26162
25896
  } )();
26163
25897
 
26164
25898
 
26165
- // We have to close these tags to support XHTML (#13200)
25899
+ // We have to close these tags to support XHTML (trac-13200)
26166
25900
  var wrapMap = {
26167
25901
 
26168
25902
  // XHTML parsers do not magically insert elements in the
@@ -26188,7 +25922,7 @@ if ( !support.option ) {
26188
25922
  function getAll( context, tag ) {
26189
25923
 
26190
25924
  // Support: IE <=9 - 11 only
26191
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
25925
+ // Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
26192
25926
  var ret;
26193
25927
 
26194
25928
  if ( typeof context.getElementsByTagName !== "undefined" ) {
@@ -26271,7 +26005,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
26271
26005
  // Remember the top-level container
26272
26006
  tmp = fragment.firstChild;
26273
26007
 
26274
- // Ensure the created nodes are orphaned (#12392)
26008
+ // Ensure the created nodes are orphaned (trac-12392)
26275
26009
  tmp.textContent = "";
26276
26010
  }
26277
26011
  }
@@ -26326,25 +26060,6 @@ function returnFalse() {
26326
26060
  return false;
26327
26061
  }
26328
26062
 
26329
- // Support: IE <=9 - 11+
26330
- // focus() and blur() are asynchronous, except when they are no-op.
26331
- // So expect focus to be synchronous when the element is already active,
26332
- // and blur to be synchronous when the element is not already active.
26333
- // (focus and blur are always synchronous in other supported browsers,
26334
- // this just defines when we can count on it).
26335
- function expectSync( elem, type ) {
26336
- return ( elem === safeActiveElement() ) === ( type === "focus" );
26337
- }
26338
-
26339
- // Support: IE <=9 only
26340
- // Accessing document.activeElement can throw unexpectedly
26341
- // https://bugs.jquery.com/ticket/13393
26342
- function safeActiveElement() {
26343
- try {
26344
- return document.activeElement;
26345
- } catch ( err ) { }
26346
- }
26347
-
26348
26063
  function on( elem, types, selector, data, fn, one ) {
26349
26064
  var origFn, type;
26350
26065
 
@@ -26692,15 +26407,15 @@ jQuery.event = {
26692
26407
 
26693
26408
  for ( ; cur !== this; cur = cur.parentNode || this ) {
26694
26409
 
26695
- // Don't check non-elements (#13208)
26696
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
26410
+ // Don't check non-elements (trac-13208)
26411
+ // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
26697
26412
  if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
26698
26413
  matchedHandlers = [];
26699
26414
  matchedSelectors = {};
26700
26415
  for ( i = 0; i < delegateCount; i++ ) {
26701
26416
  handleObj = handlers[ i ];
26702
26417
 
26703
- // Don't conflict with Object.prototype properties (#13203)
26418
+ // Don't conflict with Object.prototype properties (trac-13203)
26704
26419
  sel = handleObj.selector + " ";
26705
26420
 
26706
26421
  if ( matchedSelectors[ sel ] === undefined ) {
@@ -26782,7 +26497,7 @@ jQuery.event = {
26782
26497
  el.click && nodeName( el, "input" ) ) {
26783
26498
 
26784
26499
  // dataPriv.set( el, "click", ... )
26785
- leverageNative( el, "click", returnTrue );
26500
+ leverageNative( el, "click", true );
26786
26501
  }
26787
26502
 
26788
26503
  // Return false to allow normal processing in the caller
@@ -26833,10 +26548,10 @@ jQuery.event = {
26833
26548
  // synthetic events by interrupting progress until reinvoked in response to
26834
26549
  // *native* events that it fires directly, ensuring that state changes have
26835
26550
  // already occurred before other listeners are invoked.
26836
- function leverageNative( el, type, expectSync ) {
26551
+ function leverageNative( el, type, isSetup ) {
26837
26552
 
26838
- // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
26839
- if ( !expectSync ) {
26553
+ // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
26554
+ if ( !isSetup ) {
26840
26555
  if ( dataPriv.get( el, type ) === undefined ) {
26841
26556
  jQuery.event.add( el, type, returnTrue );
26842
26557
  }
@@ -26848,15 +26563,13 @@ function leverageNative( el, type, expectSync ) {
26848
26563
  jQuery.event.add( el, type, {
26849
26564
  namespace: false,
26850
26565
  handler: function( event ) {
26851
- var notAsync, result,
26566
+ var result,
26852
26567
  saved = dataPriv.get( this, type );
26853
26568
 
26854
26569
  if ( ( event.isTrigger & 1 ) && this[ type ] ) {
26855
26570
 
26856
26571
  // Interrupt processing of the outer synthetic .trigger()ed event
26857
- // Saved data should be false in such cases, but might be a leftover capture object
26858
- // from an async native handler (gh-4350)
26859
- if ( !saved.length ) {
26572
+ if ( !saved ) {
26860
26573
 
26861
26574
  // Store arguments for use when handling the inner native event
26862
26575
  // There will always be at least one argument (an event object), so this array
@@ -26865,33 +26578,22 @@ function leverageNative( el, type, expectSync ) {
26865
26578
  dataPriv.set( this, type, saved );
26866
26579
 
26867
26580
  // Trigger the native event and capture its result
26868
- // Support: IE <=9 - 11+
26869
- // focus() and blur() are asynchronous
26870
- notAsync = expectSync( this, type );
26871
26581
  this[ type ]();
26872
26582
  result = dataPriv.get( this, type );
26873
- if ( saved !== result || notAsync ) {
26874
- dataPriv.set( this, type, false );
26875
- } else {
26876
- result = {};
26877
- }
26583
+ dataPriv.set( this, type, false );
26584
+
26878
26585
  if ( saved !== result ) {
26879
26586
 
26880
26587
  // Cancel the outer synthetic event
26881
26588
  event.stopImmediatePropagation();
26882
26589
  event.preventDefault();
26883
26590
 
26884
- // Support: Chrome 86+
26885
- // In Chrome, if an element having a focusout handler is blurred by
26886
- // clicking outside of it, it invokes the handler synchronously. If
26887
- // that handler calls `.remove()` on the element, the data is cleared,
26888
- // leaving `result` undefined. We need to guard against this.
26889
- return result && result.value;
26591
+ return result;
26890
26592
  }
26891
26593
 
26892
26594
  // If this is an inner synthetic event for an event with a bubbling surrogate
26893
- // (focus or blur), assume that the surrogate already propagated from triggering the
26894
- // native event and prevent that from happening again here.
26595
+ // (focus or blur), assume that the surrogate already propagated from triggering
26596
+ // the native event and prevent that from happening again here.
26895
26597
  // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
26896
26598
  // bubbling surrogate propagates *after* the non-bubbling base), but that seems
26897
26599
  // less bad than duplication.
@@ -26901,22 +26603,25 @@ function leverageNative( el, type, expectSync ) {
26901
26603
 
26902
26604
  // If this is a native event triggered above, everything is now in order
26903
26605
  // Fire an inner synthetic event with the original arguments
26904
- } else if ( saved.length ) {
26606
+ } else if ( saved ) {
26905
26607
 
26906
26608
  // ...and capture the result
26907
- dataPriv.set( this, type, {
26908
- value: jQuery.event.trigger(
26909
-
26910
- // Support: IE <=9 - 11+
26911
- // Extend with the prototype to reset the above stopImmediatePropagation()
26912
- jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
26913
- saved.slice( 1 ),
26914
- this
26915
- )
26916
- } );
26917
-
26918
- // Abort handling of the native event
26919
- event.stopImmediatePropagation();
26609
+ dataPriv.set( this, type, jQuery.event.trigger(
26610
+ saved[ 0 ],
26611
+ saved.slice( 1 ),
26612
+ this
26613
+ ) );
26614
+
26615
+ // Abort handling of the native event by all jQuery handlers while allowing
26616
+ // native handlers on the same element to run. On target, this is achieved
26617
+ // by stopping immediate propagation just on the jQuery event. However,
26618
+ // the native event is re-wrapped by a jQuery one on each level of the
26619
+ // propagation so the only way to stop it for jQuery is to stop it for
26620
+ // everyone via native `stopPropagation()`. This is not a problem for
26621
+ // focus/blur which don't bubble, but it does also stop click on checkboxes
26622
+ // and radios. We accept this limitation.
26623
+ event.stopPropagation();
26624
+ event.isImmediatePropagationStopped = returnTrue;
26920
26625
  }
26921
26626
  }
26922
26627
  } );
@@ -26954,7 +26659,7 @@ jQuery.Event = function( src, props ) {
26954
26659
 
26955
26660
  // Create target properties
26956
26661
  // Support: Safari <=6 - 7 only
26957
- // Target should not be a text node (#504, #13143)
26662
+ // Target should not be a text node (trac-504, trac-13143)
26958
26663
  this.target = ( src.target && src.target.nodeType === 3 ) ?
26959
26664
  src.target.parentNode :
26960
26665
  src.target;
@@ -27055,18 +26760,73 @@ jQuery.each( {
27055
26760
  }, jQuery.event.addProp );
27056
26761
 
27057
26762
  jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
26763
+
26764
+ function focusMappedHandler( nativeEvent ) {
26765
+ if ( document.documentMode ) {
26766
+
26767
+ // Support: IE 11+
26768
+ // Attach a single focusin/focusout handler on the document while someone wants
26769
+ // focus/blur. This is because the former are synchronous in IE while the latter
26770
+ // are async. In other browsers, all those handlers are invoked synchronously.
26771
+
26772
+ // `handle` from private data would already wrap the event, but we need
26773
+ // to change the `type` here.
26774
+ var handle = dataPriv.get( this, "handle" ),
26775
+ event = jQuery.event.fix( nativeEvent );
26776
+ event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
26777
+ event.isSimulated = true;
26778
+
26779
+ // First, handle focusin/focusout
26780
+ handle( nativeEvent );
26781
+
26782
+ // ...then, handle focus/blur
26783
+ //
26784
+ // focus/blur don't bubble while focusin/focusout do; simulate the former by only
26785
+ // invoking the handler at the lower level.
26786
+ if ( event.target === event.currentTarget ) {
26787
+
26788
+ // The setup part calls `leverageNative`, which, in turn, calls
26789
+ // `jQuery.event.add`, so event handle will already have been set
26790
+ // by this point.
26791
+ handle( event );
26792
+ }
26793
+ } else {
26794
+
26795
+ // For non-IE browsers, attach a single capturing handler on the document
26796
+ // while someone wants focusin/focusout.
26797
+ jQuery.event.simulate( delegateType, nativeEvent.target,
26798
+ jQuery.event.fix( nativeEvent ) );
26799
+ }
26800
+ }
26801
+
27058
26802
  jQuery.event.special[ type ] = {
27059
26803
 
27060
26804
  // Utilize native event if possible so blur/focus sequence is correct
27061
26805
  setup: function() {
27062
26806
 
26807
+ var attaches;
26808
+
27063
26809
  // Claim the first handler
27064
26810
  // dataPriv.set( this, "focus", ... )
27065
26811
  // dataPriv.set( this, "blur", ... )
27066
- leverageNative( this, type, expectSync );
26812
+ leverageNative( this, type, true );
27067
26813
 
27068
- // Return false to allow normal processing in the caller
27069
- return false;
26814
+ if ( document.documentMode ) {
26815
+
26816
+ // Support: IE 9 - 11+
26817
+ // We use the same native handler for focusin & focus (and focusout & blur)
26818
+ // so we need to coordinate setup & teardown parts between those events.
26819
+ // Use `delegateType` as the key as `type` is already used by `leverageNative`.
26820
+ attaches = dataPriv.get( this, delegateType );
26821
+ if ( !attaches ) {
26822
+ this.addEventListener( delegateType, focusMappedHandler );
26823
+ }
26824
+ dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
26825
+ } else {
26826
+
26827
+ // Return false to allow normal processing in the caller
26828
+ return false;
26829
+ }
27070
26830
  },
27071
26831
  trigger: function() {
27072
26832
 
@@ -27077,14 +26837,84 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
27077
26837
  return true;
27078
26838
  },
27079
26839
 
27080
- // Suppress native focus or blur as it's already being fired
27081
- // in leverageNative.
27082
- _default: function() {
27083
- return true;
26840
+ teardown: function() {
26841
+ var attaches;
26842
+
26843
+ if ( document.documentMode ) {
26844
+ attaches = dataPriv.get( this, delegateType ) - 1;
26845
+ if ( !attaches ) {
26846
+ this.removeEventListener( delegateType, focusMappedHandler );
26847
+ dataPriv.remove( this, delegateType );
26848
+ } else {
26849
+ dataPriv.set( this, delegateType, attaches );
26850
+ }
26851
+ } else {
26852
+
26853
+ // Return false to indicate standard teardown should be applied
26854
+ return false;
26855
+ }
26856
+ },
26857
+
26858
+ // Suppress native focus or blur if we're currently inside
26859
+ // a leveraged native-event stack
26860
+ _default: function( event ) {
26861
+ return dataPriv.get( event.target, type );
27084
26862
  },
27085
26863
 
27086
26864
  delegateType: delegateType
27087
26865
  };
26866
+
26867
+ // Support: Firefox <=44
26868
+ // Firefox doesn't have focus(in | out) events
26869
+ // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
26870
+ //
26871
+ // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
26872
+ // focus(in | out) events fire after focus & blur events,
26873
+ // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
26874
+ // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
26875
+ //
26876
+ // Support: IE 9 - 11+
26877
+ // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
26878
+ // attach a single handler for both events in IE.
26879
+ jQuery.event.special[ delegateType ] = {
26880
+ setup: function() {
26881
+
26882
+ // Handle: regular nodes (via `this.ownerDocument`), window
26883
+ // (via `this.document`) & document (via `this`).
26884
+ var doc = this.ownerDocument || this.document || this,
26885
+ dataHolder = document.documentMode ? this : doc,
26886
+ attaches = dataPriv.get( dataHolder, delegateType );
26887
+
26888
+ // Support: IE 9 - 11+
26889
+ // We use the same native handler for focusin & focus (and focusout & blur)
26890
+ // so we need to coordinate setup & teardown parts between those events.
26891
+ // Use `delegateType` as the key as `type` is already used by `leverageNative`.
26892
+ if ( !attaches ) {
26893
+ if ( document.documentMode ) {
26894
+ this.addEventListener( delegateType, focusMappedHandler );
26895
+ } else {
26896
+ doc.addEventListener( type, focusMappedHandler, true );
26897
+ }
26898
+ }
26899
+ dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
26900
+ },
26901
+ teardown: function() {
26902
+ var doc = this.ownerDocument || this.document || this,
26903
+ dataHolder = document.documentMode ? this : doc,
26904
+ attaches = dataPriv.get( dataHolder, delegateType ) - 1;
26905
+
26906
+ if ( !attaches ) {
26907
+ if ( document.documentMode ) {
26908
+ this.removeEventListener( delegateType, focusMappedHandler );
26909
+ } else {
26910
+ doc.removeEventListener( type, focusMappedHandler, true );
26911
+ }
26912
+ dataPriv.remove( dataHolder, delegateType );
26913
+ } else {
26914
+ dataPriv.set( dataHolder, delegateType, attaches );
26915
+ }
26916
+ }
26917
+ };
27088
26918
  } );
27089
26919
 
27090
26920
  // Create mouseenter/leave events using mouseover/out and event-time checks
@@ -27179,7 +27009,8 @@ var
27179
27009
 
27180
27010
  // checked="checked" or checked
27181
27011
  rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
27182
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
27012
+
27013
+ rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
27183
27014
 
27184
27015
  // Prefer a tbody over its parent table for containing new rows
27185
27016
  function manipulationTarget( elem, content ) {
@@ -27293,7 +27124,7 @@ function domManip( collection, args, callback, ignored ) {
27293
27124
 
27294
27125
  // Use the original fragment for the last item
27295
27126
  // instead of the first because it can end up
27296
- // being emptied incorrectly in certain situations (#8070).
27127
+ // being emptied incorrectly in certain situations (trac-8070).
27297
27128
  for ( ; i < l; i++ ) {
27298
27129
  node = fragment;
27299
27130
 
@@ -27315,7 +27146,7 @@ function domManip( collection, args, callback, ignored ) {
27315
27146
  if ( hasScripts ) {
27316
27147
  doc = scripts[ scripts.length - 1 ].ownerDocument;
27317
27148
 
27318
- // Reenable scripts
27149
+ // Re-enable scripts
27319
27150
  jQuery.map( scripts, restoreScript );
27320
27151
 
27321
27152
  // Evaluate executable scripts on first document insertion
@@ -27334,6 +27165,12 @@ function domManip( collection, args, callback, ignored ) {
27334
27165
  }, doc );
27335
27166
  }
27336
27167
  } else {
27168
+
27169
+ // Unwrap a CDATA section containing script contents. This shouldn't be
27170
+ // needed as in XML documents they're already not visible when
27171
+ // inspecting element contents and in HTML documents they have no
27172
+ // meaning but we're preserving that logic for backwards compatibility.
27173
+ // This will be removed completely in 4.0. See gh-4904.
27337
27174
  DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
27338
27175
  }
27339
27176
  }
@@ -27380,7 +27217,8 @@ jQuery.extend( {
27380
27217
  if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
27381
27218
  !jQuery.isXMLDoc( elem ) ) {
27382
27219
 
27383
- // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
27220
+ // We eschew jQuery#find here for performance reasons:
27221
+ // https://jsperf.com/getall-vs-sizzle/2
27384
27222
  destElements = getAll( clone );
27385
27223
  srcElements = getAll( elem );
27386
27224
 
@@ -27616,9 +27454,12 @@ jQuery.each( {
27616
27454
  } );
27617
27455
  var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
27618
27456
 
27457
+ var rcustomProp = /^--/;
27458
+
27459
+
27619
27460
  var getStyles = function( elem ) {
27620
27461
 
27621
- // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
27462
+ // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
27622
27463
  // IE throws on elements created in popups
27623
27464
  // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
27624
27465
  var view = elem.ownerDocument.defaultView;
@@ -27718,7 +27559,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
27718
27559
  }
27719
27560
 
27720
27561
  // Support: IE <=9 - 11 only
27721
- // Style of cloned element affects source element cloned (#8908)
27562
+ // Style of cloned element affects source element cloned (trac-8908)
27722
27563
  div.style.backgroundClip = "content-box";
27723
27564
  div.cloneNode( true ).style.backgroundClip = "";
27724
27565
  support.clearCloneStyle = div.style.backgroundClip === "content-box";
@@ -27762,7 +27603,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
27762
27603
  trChild = document.createElement( "div" );
27763
27604
 
27764
27605
  table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
27765
- tr.style.cssText = "border:1px solid";
27606
+ tr.style.cssText = "box-sizing:content-box;border:1px solid";
27766
27607
 
27767
27608
  // Support: Chrome 86+
27768
27609
  // Height set through cssText does not get applied.
@@ -27774,7 +27615,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
27774
27615
  // In our bodyBackground.html iframe,
27775
27616
  // display for all div elements is set to "inline",
27776
27617
  // which causes a problem only in Android 8 Chrome 86.
27777
- // Ensuring the div is display: block
27618
+ // Ensuring the div is `display: block`
27778
27619
  // gets around this issue.
27779
27620
  trChild.style.display = "block";
27780
27621
 
@@ -27798,6 +27639,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
27798
27639
 
27799
27640
  function curCSS( elem, name, computed ) {
27800
27641
  var width, minWidth, maxWidth, ret,
27642
+ isCustomProp = rcustomProp.test( name ),
27801
27643
 
27802
27644
  // Support: Firefox 51+
27803
27645
  // Retrieving style before computed somehow
@@ -27808,11 +27650,42 @@ function curCSS( elem, name, computed ) {
27808
27650
  computed = computed || getStyles( elem );
27809
27651
 
27810
27652
  // getPropertyValue is needed for:
27811
- // .css('filter') (IE 9 only, #12537)
27812
- // .css('--customProperty) (#3144)
27653
+ // .css('filter') (IE 9 only, trac-12537)
27654
+ // .css('--customProperty) (gh-3144)
27813
27655
  if ( computed ) {
27656
+
27657
+ // Support: IE <=9 - 11+
27658
+ // IE only supports `"float"` in `getPropertyValue`; in computed styles
27659
+ // it's only available as `"cssFloat"`. We no longer modify properties
27660
+ // sent to `.css()` apart from camelCasing, so we need to check both.
27661
+ // Normally, this would create difference in behavior: if
27662
+ // `getPropertyValue` returns an empty string, the value returned
27663
+ // by `.css()` would be `undefined`. This is usually the case for
27664
+ // disconnected elements. However, in IE even disconnected elements
27665
+ // with no styles return `"none"` for `getPropertyValue( "float" )`
27814
27666
  ret = computed.getPropertyValue( name ) || computed[ name ];
27815
27667
 
27668
+ if ( isCustomProp && ret ) {
27669
+
27670
+ // Support: Firefox 105+, Chrome <=105+
27671
+ // Spec requires trimming whitespace for custom properties (gh-4926).
27672
+ // Firefox only trims leading whitespace. Chrome just collapses
27673
+ // both leading & trailing whitespace to a single space.
27674
+ //
27675
+ // Fall back to `undefined` if empty string returned.
27676
+ // This collapses a missing definition with property defined
27677
+ // and set to an empty string but there's no standard API
27678
+ // allowing us to differentiate them without a performance penalty
27679
+ // and returning `undefined` aligns with older jQuery.
27680
+ //
27681
+ // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
27682
+ // as whitespace while CSS does not, but this is not a problem
27683
+ // because CSS preprocessing replaces them with U+000A LINE FEED
27684
+ // (which *is* CSS whitespace)
27685
+ // https://www.w3.org/TR/css-syntax-3/#input-preprocessing
27686
+ ret = ret.replace( rtrimCSS, "$1" ) || undefined;
27687
+ }
27688
+
27816
27689
  if ( ret === "" && !isAttached( elem ) ) {
27817
27690
  ret = jQuery.style( elem, name );
27818
27691
  }
@@ -27908,7 +27781,6 @@ var
27908
27781
  // except "table", "table-cell", or "table-caption"
27909
27782
  // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
27910
27783
  rdisplayswap = /^(none|table(?!-c[ea]).+)/,
27911
- rcustomProp = /^--/,
27912
27784
  cssShow = { position: "absolute", visibility: "hidden", display: "block" },
27913
27785
  cssNormalTransform = {
27914
27786
  letterSpacing: "0",
@@ -27930,7 +27802,8 @@ function setPositiveNumber( _elem, value, subtract ) {
27930
27802
  function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
27931
27803
  var i = dimension === "width" ? 1 : 0,
27932
27804
  extra = 0,
27933
- delta = 0;
27805
+ delta = 0,
27806
+ marginDelta = 0;
27934
27807
 
27935
27808
  // Adjustment may not be necessary
27936
27809
  if ( box === ( isBorderBox ? "border" : "content" ) ) {
@@ -27940,8 +27813,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
27940
27813
  for ( ; i < 4; i += 2 ) {
27941
27814
 
27942
27815
  // Both box models exclude margin
27816
+ // Count margin delta separately to only add it after scroll gutter adjustment.
27817
+ // This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
27943
27818
  if ( box === "margin" ) {
27944
- delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
27819
+ marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
27945
27820
  }
27946
27821
 
27947
27822
  // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
@@ -27992,7 +27867,7 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
27992
27867
  ) ) || 0;
27993
27868
  }
27994
27869
 
27995
- return delta;
27870
+ return delta + marginDelta;
27996
27871
  }
27997
27872
 
27998
27873
  function getWidthOrHeight( elem, dimension, extra ) {
@@ -28090,26 +27965,35 @@ jQuery.extend( {
28090
27965
 
28091
27966
  // Don't automatically add "px" to these possibly-unitless properties
28092
27967
  cssNumber: {
28093
- "animationIterationCount": true,
28094
- "columnCount": true,
28095
- "fillOpacity": true,
28096
- "flexGrow": true,
28097
- "flexShrink": true,
28098
- "fontWeight": true,
28099
- "gridArea": true,
28100
- "gridColumn": true,
28101
- "gridColumnEnd": true,
28102
- "gridColumnStart": true,
28103
- "gridRow": true,
28104
- "gridRowEnd": true,
28105
- "gridRowStart": true,
28106
- "lineHeight": true,
28107
- "opacity": true,
28108
- "order": true,
28109
- "orphans": true,
28110
- "widows": true,
28111
- "zIndex": true,
28112
- "zoom": true
27968
+ animationIterationCount: true,
27969
+ aspectRatio: true,
27970
+ borderImageSlice: true,
27971
+ columnCount: true,
27972
+ flexGrow: true,
27973
+ flexShrink: true,
27974
+ fontWeight: true,
27975
+ gridArea: true,
27976
+ gridColumn: true,
27977
+ gridColumnEnd: true,
27978
+ gridColumnStart: true,
27979
+ gridRow: true,
27980
+ gridRowEnd: true,
27981
+ gridRowStart: true,
27982
+ lineHeight: true,
27983
+ opacity: true,
27984
+ order: true,
27985
+ orphans: true,
27986
+ scale: true,
27987
+ widows: true,
27988
+ zIndex: true,
27989
+ zoom: true,
27990
+
27991
+ // SVG-related
27992
+ fillOpacity: true,
27993
+ floodOpacity: true,
27994
+ stopOpacity: true,
27995
+ strokeMiterlimit: true,
27996
+ strokeOpacity: true
28113
27997
  },
28114
27998
 
28115
27999
  // Add in properties whose names you wish to fix before
@@ -28144,15 +28028,15 @@ jQuery.extend( {
28144
28028
  if ( value !== undefined ) {
28145
28029
  type = typeof value;
28146
28030
 
28147
- // Convert "+=" or "-=" to relative numbers (#7345)
28031
+ // Convert "+=" or "-=" to relative numbers (trac-7345)
28148
28032
  if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
28149
28033
  value = adjustCSS( elem, name, ret );
28150
28034
 
28151
- // Fixes bug #9237
28035
+ // Fixes bug trac-9237
28152
28036
  type = "number";
28153
28037
  }
28154
28038
 
28155
- // Make sure that null and NaN values aren't set (#7116)
28039
+ // Make sure that null and NaN values aren't set (trac-7116)
28156
28040
  if ( value == null || value !== value ) {
28157
28041
  return;
28158
28042
  }
@@ -28776,7 +28660,7 @@ function Animation( elem, properties, options ) {
28776
28660
  remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
28777
28661
 
28778
28662
  // Support: Android 2.3 only
28779
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
28663
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
28780
28664
  temp = remaining / animation.duration || 0,
28781
28665
  percent = 1 - temp,
28782
28666
  index = 0,
@@ -29166,7 +29050,6 @@ jQuery.fx.speeds = {
29166
29050
 
29167
29051
 
29168
29052
  // Based off of the plugin by Clint Helfers, with permission.
29169
- // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
29170
29053
  jQuery.fn.delay = function( time, type ) {
29171
29054
  time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
29172
29055
  type = type || "fx";
@@ -29391,8 +29274,7 @@ jQuery.extend( {
29391
29274
  // Support: IE <=9 - 11 only
29392
29275
  // elem.tabIndex doesn't always return the
29393
29276
  // correct value when it hasn't been explicitly set
29394
- // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
29395
- // Use proper attribute retrieval(#12072)
29277
+ // Use proper attribute retrieval (trac-12072)
29396
29278
  var tabindex = jQuery.find.attr( elem, "tabindex" );
29397
29279
 
29398
29280
  if ( tabindex ) {
@@ -29496,8 +29378,7 @@ function classesToArray( value ) {
29496
29378
 
29497
29379
  jQuery.fn.extend( {
29498
29380
  addClass: function( value ) {
29499
- var classes, elem, cur, curValue, clazz, j, finalValue,
29500
- i = 0;
29381
+ var classNames, cur, curValue, className, i, finalValue;
29501
29382
 
29502
29383
  if ( isFunction( value ) ) {
29503
29384
  return this.each( function( j ) {
@@ -29505,36 +29386,35 @@ jQuery.fn.extend( {
29505
29386
  } );
29506
29387
  }
29507
29388
 
29508
- classes = classesToArray( value );
29389
+ classNames = classesToArray( value );
29509
29390
 
29510
- if ( classes.length ) {
29511
- while ( ( elem = this[ i++ ] ) ) {
29512
- curValue = getClass( elem );
29513
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
29391
+ if ( classNames.length ) {
29392
+ return this.each( function() {
29393
+ curValue = getClass( this );
29394
+ cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
29514
29395
 
29515
29396
  if ( cur ) {
29516
- j = 0;
29517
- while ( ( clazz = classes[ j++ ] ) ) {
29518
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
29519
- cur += clazz + " ";
29397
+ for ( i = 0; i < classNames.length; i++ ) {
29398
+ className = classNames[ i ];
29399
+ if ( cur.indexOf( " " + className + " " ) < 0 ) {
29400
+ cur += className + " ";
29520
29401
  }
29521
29402
  }
29522
29403
 
29523
29404
  // Only assign if different to avoid unneeded rendering.
29524
29405
  finalValue = stripAndCollapse( cur );
29525
29406
  if ( curValue !== finalValue ) {
29526
- elem.setAttribute( "class", finalValue );
29407
+ this.setAttribute( "class", finalValue );
29527
29408
  }
29528
29409
  }
29529
- }
29410
+ } );
29530
29411
  }
29531
29412
 
29532
29413
  return this;
29533
29414
  },
29534
29415
 
29535
29416
  removeClass: function( value ) {
29536
- var classes, elem, cur, curValue, clazz, j, finalValue,
29537
- i = 0;
29417
+ var classNames, cur, curValue, className, i, finalValue;
29538
29418
 
29539
29419
  if ( isFunction( value ) ) {
29540
29420
  return this.each( function( j ) {
@@ -29546,45 +29426,42 @@ jQuery.fn.extend( {
29546
29426
  return this.attr( "class", "" );
29547
29427
  }
29548
29428
 
29549
- classes = classesToArray( value );
29429
+ classNames = classesToArray( value );
29550
29430
 
29551
- if ( classes.length ) {
29552
- while ( ( elem = this[ i++ ] ) ) {
29553
- curValue = getClass( elem );
29431
+ if ( classNames.length ) {
29432
+ return this.each( function() {
29433
+ curValue = getClass( this );
29554
29434
 
29555
29435
  // This expression is here for better compressibility (see addClass)
29556
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
29436
+ cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
29557
29437
 
29558
29438
  if ( cur ) {
29559
- j = 0;
29560
- while ( ( clazz = classes[ j++ ] ) ) {
29439
+ for ( i = 0; i < classNames.length; i++ ) {
29440
+ className = classNames[ i ];
29561
29441
 
29562
29442
  // Remove *all* instances
29563
- while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
29564
- cur = cur.replace( " " + clazz + " ", " " );
29443
+ while ( cur.indexOf( " " + className + " " ) > -1 ) {
29444
+ cur = cur.replace( " " + className + " ", " " );
29565
29445
  }
29566
29446
  }
29567
29447
 
29568
29448
  // Only assign if different to avoid unneeded rendering.
29569
29449
  finalValue = stripAndCollapse( cur );
29570
29450
  if ( curValue !== finalValue ) {
29571
- elem.setAttribute( "class", finalValue );
29451
+ this.setAttribute( "class", finalValue );
29572
29452
  }
29573
29453
  }
29574
- }
29454
+ } );
29575
29455
  }
29576
29456
 
29577
29457
  return this;
29578
29458
  },
29579
29459
 
29580
29460
  toggleClass: function( value, stateVal ) {
29581
- var type = typeof value,
29461
+ var classNames, className, i, self,
29462
+ type = typeof value,
29582
29463
  isValidValue = type === "string" || Array.isArray( value );
29583
29464
 
29584
- if ( typeof stateVal === "boolean" && isValidValue ) {
29585
- return stateVal ? this.addClass( value ) : this.removeClass( value );
29586
- }
29587
-
29588
29465
  if ( isFunction( value ) ) {
29589
29466
  return this.each( function( i ) {
29590
29467
  jQuery( this ).toggleClass(
@@ -29594,17 +29471,20 @@ jQuery.fn.extend( {
29594
29471
  } );
29595
29472
  }
29596
29473
 
29597
- return this.each( function() {
29598
- var className, i, self, classNames;
29474
+ if ( typeof stateVal === "boolean" && isValidValue ) {
29475
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
29476
+ }
29477
+
29478
+ classNames = classesToArray( value );
29599
29479
 
29480
+ return this.each( function() {
29600
29481
  if ( isValidValue ) {
29601
29482
 
29602
29483
  // Toggle individual class names
29603
- i = 0;
29604
29484
  self = jQuery( this );
29605
- classNames = classesToArray( value );
29606
29485
 
29607
- while ( ( className = classNames[ i++ ] ) ) {
29486
+ for ( i = 0; i < classNames.length; i++ ) {
29487
+ className = classNames[ i ];
29608
29488
 
29609
29489
  // Check each className given, space separated list
29610
29490
  if ( self.hasClass( className ) ) {
@@ -29738,7 +29618,7 @@ jQuery.extend( {
29738
29618
  val :
29739
29619
 
29740
29620
  // Support: IE <=10 - 11 only
29741
- // option.text throws exceptions (#14686, #14858)
29621
+ // option.text throws exceptions (trac-14686, trac-14858)
29742
29622
  // Strip and collapse whitespace
29743
29623
  // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
29744
29624
  stripAndCollapse( jQuery.text( elem ) );
@@ -29765,7 +29645,7 @@ jQuery.extend( {
29765
29645
  option = options[ i ];
29766
29646
 
29767
29647
  // Support: IE <=9 only
29768
- // IE8-9 doesn't update selected after form reset (#2551)
29648
+ // IE8-9 doesn't update selected after form reset (trac-2551)
29769
29649
  if ( ( option.selected || i === index ) &&
29770
29650
 
29771
29651
  // Don't return options that are disabled or in a disabled optgroup
@@ -29839,9 +29719,39 @@ jQuery.each( [ "radio", "checkbox" ], function() {
29839
29719
 
29840
29720
 
29841
29721
  // Return jQuery for attributes-only inclusion
29722
+ var location = window.location;
29723
+
29724
+ var nonce = { guid: Date.now() };
29725
+
29726
+ var rquery = ( /\?/ );
29727
+
29842
29728
 
29843
29729
 
29844
- support.focusin = "onfocusin" in window;
29730
+ // Cross-browser xml parsing
29731
+ jQuery.parseXML = function( data ) {
29732
+ var xml, parserErrorElem;
29733
+ if ( !data || typeof data !== "string" ) {
29734
+ return null;
29735
+ }
29736
+
29737
+ // Support: IE 9 - 11 only
29738
+ // IE throws on parseFromString with invalid input.
29739
+ try {
29740
+ xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
29741
+ } catch ( e ) {}
29742
+
29743
+ parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
29744
+ if ( !xml || parserErrorElem ) {
29745
+ jQuery.error( "Invalid XML: " + (
29746
+ parserErrorElem ?
29747
+ jQuery.map( parserErrorElem.childNodes, function( el ) {
29748
+ return el.textContent;
29749
+ } ).join( "\n" ) :
29750
+ data
29751
+ ) );
29752
+ }
29753
+ return xml;
29754
+ };
29845
29755
 
29846
29756
 
29847
29757
  var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
@@ -29908,8 +29818,8 @@ jQuery.extend( jQuery.event, {
29908
29818
  return;
29909
29819
  }
29910
29820
 
29911
- // Determine event propagation path in advance, per W3C events spec (#9951)
29912
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
29821
+ // Determine event propagation path in advance, per W3C events spec (trac-9951)
29822
+ // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
29913
29823
  if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
29914
29824
 
29915
29825
  bubbleType = special.delegateType || type;
@@ -29961,7 +29871,7 @@ jQuery.extend( jQuery.event, {
29961
29871
  acceptData( elem ) ) {
29962
29872
 
29963
29873
  // Call a native DOM method on the target with the same name as the event.
29964
- // Don't do default actions on window, that's where global variables be (#6170)
29874
+ // Don't do default actions on window, that's where global variables be (trac-6170)
29965
29875
  if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
29966
29876
 
29967
29877
  // Don't re-trigger an onFOO event when we call its FOO() method
@@ -30029,85 +29939,6 @@ jQuery.fn.extend( {
30029
29939
  } );
30030
29940
 
30031
29941
 
30032
- // Support: Firefox <=44
30033
- // Firefox doesn't have focus(in | out) events
30034
- // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
30035
- //
30036
- // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
30037
- // focus(in | out) events fire after focus & blur events,
30038
- // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
30039
- // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
30040
- if ( !support.focusin ) {
30041
- jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
30042
-
30043
- // Attach a single capturing handler on the document while someone wants focusin/focusout
30044
- var handler = function( event ) {
30045
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
30046
- };
30047
-
30048
- jQuery.event.special[ fix ] = {
30049
- setup: function() {
30050
-
30051
- // Handle: regular nodes (via `this.ownerDocument`), window
30052
- // (via `this.document`) & document (via `this`).
30053
- var doc = this.ownerDocument || this.document || this,
30054
- attaches = dataPriv.access( doc, fix );
30055
-
30056
- if ( !attaches ) {
30057
- doc.addEventListener( orig, handler, true );
30058
- }
30059
- dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
30060
- },
30061
- teardown: function() {
30062
- var doc = this.ownerDocument || this.document || this,
30063
- attaches = dataPriv.access( doc, fix ) - 1;
30064
-
30065
- if ( !attaches ) {
30066
- doc.removeEventListener( orig, handler, true );
30067
- dataPriv.remove( doc, fix );
30068
-
30069
- } else {
30070
- dataPriv.access( doc, fix, attaches );
30071
- }
30072
- }
30073
- };
30074
- } );
30075
- }
30076
- var location = window.location;
30077
-
30078
- var nonce = { guid: Date.now() };
30079
-
30080
- var rquery = ( /\?/ );
30081
-
30082
-
30083
-
30084
- // Cross-browser xml parsing
30085
- jQuery.parseXML = function( data ) {
30086
- var xml, parserErrorElem;
30087
- if ( !data || typeof data !== "string" ) {
30088
- return null;
30089
- }
30090
-
30091
- // Support: IE 9 - 11 only
30092
- // IE throws on parseFromString with invalid input.
30093
- try {
30094
- xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
30095
- } catch ( e ) {}
30096
-
30097
- parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
30098
- if ( !xml || parserErrorElem ) {
30099
- jQuery.error( "Invalid XML: " + (
30100
- parserErrorElem ?
30101
- jQuery.map( parserErrorElem.childNodes, function( el ) {
30102
- return el.textContent;
30103
- } ).join( "\n" ) :
30104
- data
30105
- ) );
30106
- }
30107
- return xml;
30108
- };
30109
-
30110
-
30111
29942
  var
30112
29943
  rbracket = /\[\]$/,
30113
29944
  rCRLF = /\r?\n/g,
@@ -30235,7 +30066,7 @@ var
30235
30066
  rantiCache = /([?&])_=[^&]*/,
30236
30067
  rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
30237
30068
 
30238
- // #7653, #8125, #8152: local protocol detection
30069
+ // trac-7653, trac-8125, trac-8152: local protocol detection
30239
30070
  rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
30240
30071
  rnoContent = /^(?:GET|HEAD)$/,
30241
30072
  rprotocol = /^\/\//,
@@ -30258,7 +30089,7 @@ var
30258
30089
  */
30259
30090
  transports = {},
30260
30091
 
30261
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
30092
+ // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
30262
30093
  allTypes = "*/".concat( "*" ),
30263
30094
 
30264
30095
  // Anchor tag for parsing the document origin
@@ -30329,7 +30160,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
30329
30160
 
30330
30161
  // A special extend for ajax options
30331
30162
  // that takes "flat" options (not to be deep extended)
30332
- // Fixes #9887
30163
+ // Fixes trac-9887
30333
30164
  function ajaxExtend( target, src ) {
30334
30165
  var key, deep,
30335
30166
  flatOptions = jQuery.ajaxSettings.flatOptions || {};
@@ -30740,12 +30571,12 @@ jQuery.extend( {
30740
30571
  deferred.promise( jqXHR );
30741
30572
 
30742
30573
  // Add protocol if not provided (prefilters might expect it)
30743
- // Handle falsy url in the settings object (#10093: consistency with old signature)
30574
+ // Handle falsy url in the settings object (trac-10093: consistency with old signature)
30744
30575
  // We also use the url parameter if available
30745
30576
  s.url = ( ( url || s.url || location.href ) + "" )
30746
30577
  .replace( rprotocol, location.protocol + "//" );
30747
30578
 
30748
- // Alias method option to type as per ticket #12004
30579
+ // Alias method option to type as per ticket trac-12004
30749
30580
  s.type = options.method || options.type || s.method || s.type;
30750
30581
 
30751
30582
  // Extract dataTypes list
@@ -30788,7 +30619,7 @@ jQuery.extend( {
30788
30619
  }
30789
30620
 
30790
30621
  // We can fire global events as of now if asked to
30791
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
30622
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
30792
30623
  fireGlobals = jQuery.event && s.global;
30793
30624
 
30794
30625
  // Watch for a new set of requests
@@ -30817,7 +30648,7 @@ jQuery.extend( {
30817
30648
  if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
30818
30649
  cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
30819
30650
 
30820
- // #9682: remove data so that it's not used in an eventual retry
30651
+ // trac-9682: remove data so that it's not used in an eventual retry
30821
30652
  delete s.data;
30822
30653
  }
30823
30654
 
@@ -31090,7 +30921,7 @@ jQuery._evalUrl = function( url, options, doc ) {
31090
30921
  return jQuery.ajax( {
31091
30922
  url: url,
31092
30923
 
31093
- // Make this explicit, since user can override this through ajaxSetup (#11264)
30924
+ // Make this explicit, since user can override this through ajaxSetup (trac-11264)
31094
30925
  type: "GET",
31095
30926
  dataType: "script",
31096
30927
  cache: true,
@@ -31199,7 +31030,7 @@ var xhrSuccessStatus = {
31199
31030
  0: 200,
31200
31031
 
31201
31032
  // Support: IE <=9 only
31202
- // #1450: sometimes IE returns 1223 when it should be 204
31033
+ // trac-1450: sometimes IE returns 1223 when it should be 204
31203
31034
  1223: 204
31204
31035
  },
31205
31036
  xhrSupported = jQuery.ajaxSettings.xhr();
@@ -31271,7 +31102,7 @@ jQuery.ajaxTransport( function( options ) {
31271
31102
  } else {
31272
31103
  complete(
31273
31104
 
31274
- // File: protocol always yields status 0; see #8605, #14207
31105
+ // File: protocol always yields status 0; see trac-8605, trac-14207
31275
31106
  xhr.status,
31276
31107
  xhr.statusText
31277
31108
  );
@@ -31332,7 +31163,7 @@ jQuery.ajaxTransport( function( options ) {
31332
31163
  xhr.send( options.hasContent && options.data || null );
31333
31164
  } catch ( e ) {
31334
31165
 
31335
- // #14683: Only rethrow if this hasn't been notified as an error yet
31166
+ // trac-14683: Only rethrow if this hasn't been notified as an error yet
31336
31167
  if ( callback ) {
31337
31168
  throw e;
31338
31169
  }
@@ -31952,7 +31783,9 @@ jQuery.fn.extend( {
31952
31783
  },
31953
31784
 
31954
31785
  hover: function( fnOver, fnOut ) {
31955
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
31786
+ return this
31787
+ .on( "mouseenter", fnOver )
31788
+ .on( "mouseleave", fnOut || fnOver );
31956
31789
  }
31957
31790
  } );
31958
31791
 
@@ -31976,7 +31809,9 @@ jQuery.each(
31976
31809
 
31977
31810
  // Support: Android <=4.0 only
31978
31811
  // Make sure we trim BOM and NBSP
31979
- var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
31812
+ // Require that the "whitespace run" starts from a non-whitespace
31813
+ // to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
31814
+ var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
31980
31815
 
31981
31816
  // Bind a function to a context, optionally partially applying any
31982
31817
  // arguments.
@@ -32043,7 +31878,7 @@ jQuery.isNumeric = function( obj ) {
32043
31878
  jQuery.trim = function( text ) {
32044
31879
  return text == null ?
32045
31880
  "" :
32046
- ( text + "" ).replace( rtrim, "" );
31881
+ ( text + "" ).replace( rtrim, "$1" );
32047
31882
  };
32048
31883
 
32049
31884
 
@@ -32091,8 +31926,8 @@ jQuery.noConflict = function( deep ) {
32091
31926
  };
32092
31927
 
32093
31928
  // Expose jQuery and $ identifiers, even in AMD
32094
- // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
32095
- // and CommonJS for browser emulators (#13566)
31929
+ // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
31930
+ // and CommonJS for browser emulators (trac-13566)
32096
31931
  if ( typeof noGlobal === "undefined" ) {
32097
31932
  window.jQuery = window.$ = jQuery;
32098
31933
  }