hof 20.3.10-beta-gtm → 20.4.0-beta-session-timeout

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  }