hof 20.4.0-beta-session-timeout → 20.4.0-beta-new-crown

Sign up to get free protection for your applications and to get access to all the features.
@@ -21222,14 +21222,17 @@ $('.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.7.1
21225
+ * jQuery JavaScript Library v3.6.0
21226
21226
  * https://jquery.com/
21227
21227
  *
21228
+ * Includes Sizzle.js
21229
+ * https://sizzlejs.com/
21230
+ *
21228
21231
  * Copyright OpenJS Foundation and other contributors
21229
21232
  * Released under the MIT license
21230
21233
  * https://jquery.org/license
21231
21234
  *
21232
- * Date: 2023-08-28T13:37Z
21235
+ * Date: 2021-03-02T17:08Z
21233
21236
  */
21234
21237
  ( function( global, factory ) {
21235
21238
 
@@ -21243,7 +21246,7 @@ $('.typeahead').each(function applyTypeahead() {
21243
21246
  // (such as Node.js), expose a factory as module.exports.
21244
21247
  // This accentuates the need for the creation of a real `window`.
21245
21248
  // e.g. var jQuery = require("jquery")(window);
21246
- // See ticket trac-14549 for more info.
21249
+ // See ticket #14549 for more info.
21247
21250
  module.exports = global.document ?
21248
21251
  factory( global, true ) :
21249
21252
  function( w ) {
@@ -21370,9 +21373,8 @@ function toType( obj ) {
21370
21373
 
21371
21374
 
21372
21375
 
21373
- var version = "3.7.1",
21374
-
21375
- rhtmlSuffix = /HTML$/i,
21376
+ var
21377
+ version = "3.6.0",
21376
21378
 
21377
21379
  // Define a local copy of jQuery
21378
21380
  jQuery = function( selector, context ) {
@@ -21618,38 +21620,6 @@ jQuery.extend( {
21618
21620
  return obj;
21619
21621
  },
21620
21622
 
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
-
21653
21623
  // results is for internal usage only
21654
21624
  makeArray: function( arr, results ) {
21655
21625
  var ret = results || [];
@@ -21672,15 +21642,6 @@ jQuery.extend( {
21672
21642
  return arr == null ? -1 : indexOf.call( arr, elem, i );
21673
21643
  },
21674
21644
 
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
-
21684
21645
  // Support: Android <=4.0 only, PhantomJS 1 only
21685
21646
  // push.apply(_, arraylike) throws on ancient WebKit
21686
21647
  merge: function( first, second ) {
@@ -21782,98 +21743,43 @@ function isArrayLike( obj ) {
21782
21743
  return type === "array" || length === 0 ||
21783
21744
  typeof length === "number" && length > 0 && ( length - 1 ) in obj;
21784
21745
  }
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
-
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 ) {
21861
21758
  var i,
21759
+ support,
21862
21760
  Expr,
21761
+ getText,
21762
+ isXML,
21763
+ tokenize,
21764
+ compile,
21765
+ select,
21863
21766
  outermostContext,
21864
21767
  sortInput,
21865
21768
  hasDuplicate,
21866
- push = pushNative,
21867
21769
 
21868
21770
  // Local document vars
21771
+ setDocument,
21869
21772
  document,
21870
- documentElement,
21773
+ docElem,
21871
21774
  documentIsHTML,
21872
21775
  rbuggyQSA,
21776
+ rbuggyMatches,
21873
21777
  matches,
21778
+ contains,
21874
21779
 
21875
21780
  // Instance-specific data
21876
- expando = jQuery.expando,
21781
+ expando = "sizzle" + 1 * new Date(),
21782
+ preferredDoc = window.document,
21877
21783
  dirruns = 0,
21878
21784
  done = 0,
21879
21785
  classCache = createCache(),
@@ -21887,22 +21793,47 @@ var i,
21887
21793
  return 0;
21888
21794
  },
21889
21795
 
21890
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
21891
- "loop|multiple|open|readonly|required|scoped",
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",
21892
21819
 
21893
21820
  // Regular expressions
21894
21821
 
21822
+ // http://www.w3.org/TR/css3-selectors/#whitespace
21823
+ whitespace = "[\\x20\\t\\r\\n\\f]",
21824
+
21895
21825
  // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
21896
21826
  identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
21897
21827
  "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
21898
21828
 
21899
- // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
21829
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
21900
21830
  attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
21901
21831
 
21902
21832
  // Operator (capture 2)
21903
21833
  "*([*^$|!~]?=)" + whitespace +
21904
21834
 
21905
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
21835
+ // "Attribute values must be CSS identifiers [capture 5]
21836
+ // or strings [capture 3 or capture 4]"
21906
21837
  "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
21907
21838
  whitespace + "*\\]",
21908
21839
 
@@ -21921,88 +21852,101 @@ var i,
21921
21852
 
21922
21853
  // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
21923
21854
  rwhitespace = new RegExp( whitespace + "+", "g" ),
21855
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
21856
+ whitespace + "+$", "g" ),
21924
21857
 
21925
21858
  rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
21926
- rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
21927
- whitespace + "*" ),
21859
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
21860
+ "*" ),
21928
21861
  rdescend = new RegExp( whitespace + "|>" ),
21929
21862
 
21930
21863
  rpseudo = new RegExp( pseudos ),
21931
21864
  ridentifier = new RegExp( "^" + identifier + "$" ),
21932
21865
 
21933
21866
  matchExpr = {
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" ),
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" ),
21944
21876
 
21945
21877
  // For use in libraries implementing .is()
21946
21878
  // We use this for POS matching in `select`
21947
- needsContext: new RegExp( "^" + whitespace +
21879
+ "needsContext": new RegExp( "^" + whitespace +
21948
21880
  "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
21949
21881
  "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
21950
21882
  },
21951
21883
 
21884
+ rhtml = /HTML$/i,
21952
21885
  rinputs = /^(?:input|select|textarea|button)$/i,
21953
21886
  rheader = /^h\d$/i,
21954
21887
 
21888
+ rnative = /^[^{]+\{\s*\[native \w/,
21889
+
21955
21890
  // Easily-parseable/retrievable ID or TAG or CLASS selectors
21956
21891
  rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
21957
21892
 
21958
21893
  rsibling = /[+~]/,
21959
21894
 
21960
21895
  // CSS escapes
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" ),
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" ),
21964
21898
  funescape = function( escape, nonHex ) {
21965
21899
  var high = "0x" + escape.slice( 1 ) - 0x10000;
21966
21900
 
21967
- if ( nonHex ) {
21901
+ return nonHex ?
21968
21902
 
21969
21903
  // Strip the backslash prefix from a non-hex escape sequence
21970
- return nonHex;
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 ) + " ";
21971
21929
  }
21972
21930
 
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 );
21931
+ // Other potentially-special ASCII characters get backslash-escaped
21932
+ return "\\" + ch;
21980
21933
  },
21981
21934
 
21982
- // Used for iframes; see `setDocument`.
21983
- // Support: IE 9 - 11+, Edge 12 - 18+
21935
+ // Used for iframes
21936
+ // See setDocument()
21984
21937
  // Removing the function wrapper causes a "Permission Denied"
21985
- // error in IE/Edge.
21938
+ // error in IE
21986
21939
  unloadHandler = function() {
21987
21940
  setDocument();
21988
21941
  },
21989
21942
 
21990
21943
  inDisabledFieldset = addCombinator(
21991
21944
  function( elem ) {
21992
- return elem.disabled === true && nodeName( elem, "fieldset" );
21945
+ return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
21993
21946
  },
21994
21947
  { dir: "parentNode", next: "legend" }
21995
21948
  );
21996
21949
 
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
-
22006
21950
  // Optimize for push.apply( _, NodeList )
22007
21951
  try {
22008
21952
  push.apply(
@@ -22010,22 +21954,32 @@ try {
22010
21954
  preferredDoc.childNodes
22011
21955
  );
22012
21956
 
22013
- // Support: Android <=4.0
21957
+ // Support: Android<4.0
22014
21958
  // Detect silently failing push.apply
22015
21959
  // eslint-disable-next-line no-unused-expressions
22016
21960
  arr[ preferredDoc.childNodes.length ].nodeType;
22017
21961
  } catch ( e ) {
22018
- push = {
22019
- apply: function( target, els ) {
21962
+ push = { apply: arr.length ?
21963
+
21964
+ // Leverage slice if possible
21965
+ function( target, els ) {
22020
21966
  pushNative.apply( target, slice.call( els ) );
22021
- },
22022
- call: function( target ) {
22023
- pushNative.apply( target, slice.call( arguments, 1 ) );
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;
22024
21978
  }
22025
21979
  };
22026
21980
  }
22027
21981
 
22028
- function find( selector, context, results, seed ) {
21982
+ function Sizzle( selector, context, results, seed ) {
22029
21983
  var m, i, elem, nid, match, groups, newSelector,
22030
21984
  newContext = context && context.ownerDocument,
22031
21985
 
@@ -22059,10 +22013,11 @@ function find( selector, context, results, seed ) {
22059
22013
  if ( nodeType === 9 ) {
22060
22014
  if ( ( elem = context.getElementById( m ) ) ) {
22061
22015
 
22062
- // Support: IE 9 only
22016
+ // Support: IE, Opera, Webkit
22017
+ // TODO: identify versions
22063
22018
  // getElementById can match elements by name instead of ID
22064
22019
  if ( elem.id === m ) {
22065
- push.call( results, elem );
22020
+ results.push( elem );
22066
22021
  return results;
22067
22022
  }
22068
22023
  } else {
@@ -22072,13 +22027,14 @@ function find( selector, context, results, seed ) {
22072
22027
  // Element context
22073
22028
  } else {
22074
22029
 
22075
- // Support: IE 9 only
22030
+ // Support: IE, Opera, Webkit
22031
+ // TODO: identify versions
22076
22032
  // getElementById can match elements by name instead of ID
22077
22033
  if ( newContext && ( elem = newContext.getElementById( m ) ) &&
22078
- find.contains( context, elem ) &&
22034
+ contains( context, elem ) &&
22079
22035
  elem.id === m ) {
22080
22036
 
22081
- push.call( results, elem );
22037
+ results.push( elem );
22082
22038
  return results;
22083
22039
  }
22084
22040
  }
@@ -22089,15 +22045,22 @@ function find( selector, context, results, seed ) {
22089
22045
  return results;
22090
22046
 
22091
22047
  // Class selector
22092
- } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
22048
+ } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
22049
+ context.getElementsByClassName ) {
22050
+
22093
22051
  push.apply( results, context.getElementsByClassName( m ) );
22094
22052
  return results;
22095
22053
  }
22096
22054
  }
22097
22055
 
22098
22056
  // Take advantage of querySelectorAll
22099
- if ( !nonnativeSelectorCache[ selector + " " ] &&
22100
- ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
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" ) ) {
22101
22064
 
22102
22065
  newSelector = selector;
22103
22066
  newContext = context;
@@ -22110,7 +22073,7 @@ function find( selector, context, results, seed ) {
22110
22073
  // as such selectors are not recognized by querySelectorAll.
22111
22074
  // Thanks to Andrew Dupont for this technique.
22112
22075
  if ( nodeType === 1 &&
22113
- ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
22076
+ ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
22114
22077
 
22115
22078
  // Expand context for sibling selectors
22116
22079
  newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
@@ -22118,15 +22081,11 @@ function find( selector, context, results, seed ) {
22118
22081
 
22119
22082
  // We can use :scope instead of the ID hack if the browser
22120
22083
  // supports it & if we're not changing the context.
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 ) {
22084
+ if ( newContext !== context || !support.scope ) {
22126
22085
 
22127
22086
  // Capture the context ID, setting it first if necessary
22128
22087
  if ( ( nid = context.getAttribute( "id" ) ) ) {
22129
- nid = jQuery.escapeSelector( nid );
22088
+ nid = nid.replace( rcssescape, fcssescape );
22130
22089
  } else {
22131
22090
  context.setAttribute( "id", ( nid = expando ) );
22132
22091
  }
@@ -22159,7 +22118,7 @@ function find( selector, context, results, seed ) {
22159
22118
  }
22160
22119
 
22161
22120
  // All others
22162
- return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
22121
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
22163
22122
  }
22164
22123
 
22165
22124
  /**
@@ -22173,8 +22132,7 @@ function createCache() {
22173
22132
 
22174
22133
  function cache( key, value ) {
22175
22134
 
22176
- // Use (key + " ") to avoid collision with native prototype properties
22177
- // (see https://github.com/jquery/sizzle/issues/157)
22135
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
22178
22136
  if ( keys.push( key + " " ) > Expr.cacheLength ) {
22179
22137
 
22180
22138
  // Only keep the most recent entries
@@ -22186,7 +22144,7 @@ function createCache() {
22186
22144
  }
22187
22145
 
22188
22146
  /**
22189
- * Mark a function for special use by jQuery selector module
22147
+ * Mark a function for special use by Sizzle
22190
22148
  * @param {Function} fn The function to mark
22191
22149
  */
22192
22150
  function markFunction( fn ) {
@@ -22217,13 +22175,56 @@ function assert( fn ) {
22217
22175
  }
22218
22176
  }
22219
22177
 
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
- return nodeName( elem, "input" ) && elem.type === type;
22226
+ var name = elem.nodeName.toLowerCase();
22227
+ return name === "input" && elem.type === type;
22227
22228
  };
22228
22229
  }
22229
22230
 
@@ -22233,8 +22234,8 @@ function createInputPseudo( type ) {
22233
22234
  */
22234
22235
  function createButtonPseudo( type ) {
22235
22236
  return function( elem ) {
22236
- return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
22237
- elem.type === type;
22237
+ var name = elem.nodeName.toLowerCase();
22238
+ return ( name === "input" || name === "button" ) && elem.type === type;
22238
22239
  };
22239
22240
  }
22240
22241
 
@@ -22270,13 +22271,14 @@ function createDisabledPseudo( disabled ) {
22270
22271
  }
22271
22272
  }
22272
22273
 
22273
- // Support: IE 6 - 11+
22274
+ // Support: IE 6 - 11
22274
22275
  // Use the isDisabled shortcut property to check for disabled fieldset ancestors
22275
22276
  return elem.isDisabled === disabled ||
22276
22277
 
22277
22278
  // Where there is no isDisabled, check manually
22279
+ /* jshint -W018 */
22278
22280
  elem.isDisabled !== !disabled &&
22279
- inDisabledFieldset( elem ) === disabled;
22281
+ inDisabledFieldset( elem ) === disabled;
22280
22282
  }
22281
22283
 
22282
22284
  return elem.disabled === disabled;
@@ -22316,7 +22318,7 @@ function createPositionalPseudo( fn ) {
22316
22318
  }
22317
22319
 
22318
22320
  /**
22319
- * Checks a node for validity as a jQuery selector context
22321
+ * Checks a node for validity as a Sizzle context
22320
22322
  * @param {Element|Object=} context
22321
22323
  * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
22322
22324
  */
@@ -22324,13 +22326,31 @@ function testContext( context ) {
22324
22326
  return context && typeof context.getElementsByTagName !== "undefined" && context;
22325
22327
  }
22326
22328
 
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
+
22327
22347
  /**
22328
22348
  * Sets document-related variables once based on the current document
22329
- * @param {Element|Object} [node] An element or document object to use to set the document
22349
+ * @param {Element|Object} [doc] An element or document object to use to set the document
22330
22350
  * @returns {Object} Returns the current document
22331
22351
  */
22332
- function setDocument( node ) {
22333
- var subWindow,
22352
+ setDocument = Sizzle.setDocument = function( node ) {
22353
+ var hasCompare, subWindow,
22334
22354
  doc = node ? node.ownerDocument || node : preferredDoc;
22335
22355
 
22336
22356
  // Return early if doc is invalid or already selected
@@ -22344,90 +22364,87 @@ function setDocument( node ) {
22344
22364
 
22345
22365
  // Update global variables
22346
22366
  document = doc;
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;
22367
+ docElem = document.documentElement;
22368
+ documentIsHTML = !isXML( document );
22355
22369
 
22356
22370
  // Support: IE 9 - 11+, Edge 12 - 18+
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 &&
22362
-
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 &&
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 &&
22368
22377
  ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
22369
22378
 
22370
- // Support: IE 9 - 11+, Edge 12 - 18+
22371
- subWindow.addEventListener( "unload", unloadHandler );
22379
+ // Support: IE 11, Edge
22380
+ if ( subWindow.addEventListener ) {
22381
+ subWindow.addEventListener( "unload", unloadHandler, false );
22382
+
22383
+ // Support: IE 9 - 10 only
22384
+ } else if ( subWindow.attachEvent ) {
22385
+ subWindow.attachEvent( "onunload", unloadHandler );
22386
+ }
22372
22387
  }
22373
22388
 
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;
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;
22382
22398
  } );
22383
22399
 
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, "*" );
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" );
22389
22409
  } );
22390
22410
 
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" );
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;
22395
22418
  } );
22396
22419
 
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
- }
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;
22413
22430
  } );
22414
22431
 
22415
22432
  // ID filter and find
22416
22433
  if ( support.getById ) {
22417
- Expr.filter.ID = function( id ) {
22434
+ Expr.filter[ "ID" ] = function( id ) {
22418
22435
  var attrId = id.replace( runescape, funescape );
22419
22436
  return function( elem ) {
22420
22437
  return elem.getAttribute( "id" ) === attrId;
22421
22438
  };
22422
22439
  };
22423
- Expr.find.ID = function( id, context ) {
22440
+ Expr.find[ "ID" ] = function( id, context ) {
22424
22441
  if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
22425
22442
  var elem = context.getElementById( id );
22426
22443
  return elem ? [ elem ] : [];
22427
22444
  }
22428
22445
  };
22429
22446
  } else {
22430
- Expr.filter.ID = function( id ) {
22447
+ Expr.filter[ "ID" ] = function( id ) {
22431
22448
  var attrId = id.replace( runescape, funescape );
22432
22449
  return function( elem ) {
22433
22450
  var node = typeof elem.getAttributeNode !== "undefined" &&
@@ -22438,7 +22455,7 @@ function setDocument( node ) {
22438
22455
 
22439
22456
  // Support: IE 6 - 7 only
22440
22457
  // getElementById is not reliable as a find shortcut
22441
- Expr.find.ID = function( id, context ) {
22458
+ Expr.find[ "ID" ] = function( id, context ) {
22442
22459
  if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
22443
22460
  var node, i, elems,
22444
22461
  elem = context.getElementById( id );
@@ -22468,18 +22485,40 @@ function setDocument( node ) {
22468
22485
  }
22469
22486
 
22470
22487
  // Tag
22471
- Expr.find.TAG = function( tag, context ) {
22472
- if ( typeof context.getElementsByTagName !== "undefined" ) {
22473
- return context.getElementsByTagName( 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
+ } :
22474
22498
 
22475
- // DocumentFragment nodes don't have gEBTN
22476
- } else {
22477
- return context.querySelectorAll( tag );
22478
- }
22479
- };
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 );
22506
+
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
+ };
22480
22519
 
22481
22520
  // Class
22482
- Expr.find.CLASS = function( className, context ) {
22521
+ Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
22483
22522
  if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
22484
22523
  return context.getElementsByClassName( className );
22485
22524
  }
@@ -22490,94 +22529,177 @@ function setDocument( node ) {
22490
22529
 
22491
22530
  // QSA and matchesSelector support
22492
22531
 
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
22493
22540
  rbuggyQSA = [];
22494
22541
 
22495
- // Build QSA regex
22496
- // Regex strategy adopted from Diego Perini
22497
- assert( function( el ) {
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
+ }
22498
22577
 
22499
- var input;
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
+ }
22500
22590
 
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>";
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
+ }
22505
22597
 
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
- }
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
+ }
22511
22604
 
22512
- // Support: iOS <=7 - 8 only
22513
- if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
22514
- rbuggyQSA.push( "~=" );
22515
- }
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
+ } );
22516
22610
 
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
- }
22611
+ assert( function( el ) {
22612
+ el.innerHTML = "<a href='' disabled='disabled'></a>" +
22613
+ "<select disabled='disabled'><option/></select>";
22523
22614
 
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
- }
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" );
22531
22620
 
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
- } );
22621
+ // Support: IE8
22622
+ // Enforce case-sensitivity of name attribute
22623
+ if ( el.querySelectorAll( "[name=d]" ).length ) {
22624
+ rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
22625
+ }
22562
22626
 
22563
- if ( !support.cssHas ) {
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
+ }
22564
22632
 
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" );
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
+ }
22639
+
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
+ }
22646
+
22647
+ if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
22648
+ docElem.webkitMatchesSelector ||
22649
+ docElem.mozMatchesSelector ||
22650
+ docElem.oMatchesSelector ||
22651
+ docElem.msMatchesSelector ) ) ) ) {
22652
+
22653
+ assert( function( el ) {
22654
+
22655
+ // Check to see if it's possible to do matchesSelector
22656
+ // on a disconnected node (IE 9)
22657
+ support.disconnectedMatch = matches.call( el, "*" );
22658
+
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
+ } );
22572
22664
  }
22573
22665
 
22574
22666
  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
+ };
22575
22696
 
22576
22697
  /* Sorting
22577
22698
  ---------------------------------------------------------------------- */
22578
22699
 
22579
22700
  // Document order sorting
22580
- sortOrder = function( a, b ) {
22701
+ sortOrder = hasCompare ?
22702
+ function( a, b ) {
22581
22703
 
22582
22704
  // Flag for duplicate removal
22583
22705
  if ( a === b ) {
@@ -22611,8 +22733,8 @@ function setDocument( node ) {
22611
22733
  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
22612
22734
  // two documents; shallow comparisons work.
22613
22735
  // eslint-disable-next-line eqeqeq
22614
- if ( a === document || a.ownerDocument == preferredDoc &&
22615
- find.contains( preferredDoc, a ) ) {
22736
+ if ( a == document || a.ownerDocument == preferredDoc &&
22737
+ contains( preferredDoc, a ) ) {
22616
22738
  return -1;
22617
22739
  }
22618
22740
 
@@ -22620,33 +22742,100 @@ function setDocument( node ) {
22620
22742
  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
22621
22743
  // two documents; shallow comparisons work.
22622
22744
  // eslint-disable-next-line eqeqeq
22623
- if ( b === document || b.ownerDocument == preferredDoc &&
22624
- find.contains( preferredDoc, b ) ) {
22745
+ if ( b == document || b.ownerDocument == preferredDoc &&
22746
+ contains( preferredDoc, b ) ) {
22625
22747
  return 1;
22626
22748
  }
22627
22749
 
22628
22750
  // Maintain original order
22629
22751
  return sortInput ?
22630
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
22752
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
22631
22753
  0;
22632
22754
  }
22633
22755
 
22634
22756
  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;
22635
22823
  };
22636
22824
 
22637
22825
  return document;
22638
- }
22826
+ };
22639
22827
 
22640
- find.matches = function( expr, elements ) {
22641
- return find( expr, null, null, elements );
22828
+ Sizzle.matches = function( expr, elements ) {
22829
+ return Sizzle( expr, null, null, elements );
22642
22830
  };
22643
22831
 
22644
- find.matchesSelector = function( elem, expr ) {
22832
+ Sizzle.matchesSelector = function( elem, expr ) {
22645
22833
  setDocument( elem );
22646
22834
 
22647
- if ( documentIsHTML &&
22835
+ if ( support.matchesSelector && documentIsHTML &&
22648
22836
  !nonnativeSelectorCache[ expr + " " ] &&
22649
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
22837
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
22838
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
22650
22839
 
22651
22840
  try {
22652
22841
  var ret = matches.call( elem, expr );
@@ -22654,9 +22843,9 @@ find.matchesSelector = function( elem, expr ) {
22654
22843
  // IE 9's matchesSelector returns false on disconnected nodes
22655
22844
  if ( ret || support.disconnectedMatch ||
22656
22845
 
22657
- // As well, disconnected nodes are said to be in a document
22658
- // fragment in IE 9
22659
- elem.document && elem.document.nodeType !== 11 ) {
22846
+ // As well, disconnected nodes are said to be in a document
22847
+ // fragment in IE 9
22848
+ elem.document && elem.document.nodeType !== 11 ) {
22660
22849
  return ret;
22661
22850
  }
22662
22851
  } catch ( e ) {
@@ -22664,10 +22853,10 @@ find.matchesSelector = function( elem, expr ) {
22664
22853
  }
22665
22854
  }
22666
22855
 
22667
- return find( expr, document, null, [ elem ] ).length > 0;
22856
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
22668
22857
  };
22669
22858
 
22670
- find.contains = function( context, elem ) {
22859
+ Sizzle.contains = function( context, elem ) {
22671
22860
 
22672
22861
  // Set document vars if needed
22673
22862
  // Support: IE 11+, Edge 17 - 18+
@@ -22677,11 +22866,10 @@ find.contains = function( context, elem ) {
22677
22866
  if ( ( context.ownerDocument || context ) != document ) {
22678
22867
  setDocument( context );
22679
22868
  }
22680
- return jQuery.contains( context, elem );
22869
+ return contains( context, elem );
22681
22870
  };
22682
22871
 
22683
-
22684
- find.attr = function( elem, name ) {
22872
+ Sizzle.attr = function( elem, name ) {
22685
22873
 
22686
22874
  // Set document vars if needed
22687
22875
  // Support: IE 11+, Edge 17 - 18+
@@ -22694,19 +22882,25 @@ find.attr = function( elem, name ) {
22694
22882
 
22695
22883
  var fn = Expr.attrHandle[ name.toLowerCase() ],
22696
22884
 
22697
- // Don't get fooled by Object.prototype properties (see trac-13807)
22885
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
22698
22886
  val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
22699
22887
  fn( elem, name, !documentIsHTML ) :
22700
22888
  undefined;
22701
22889
 
22702
- if ( val !== undefined ) {
22703
- return val;
22704
- }
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
+ };
22705
22898
 
22706
- return elem.getAttribute( name );
22899
+ Sizzle.escape = function( sel ) {
22900
+ return ( sel + "" ).replace( rcssescape, fcssescape );
22707
22901
  };
22708
22902
 
22709
- find.error = function( msg ) {
22903
+ Sizzle.error = function( msg ) {
22710
22904
  throw new Error( "Syntax error, unrecognized expression: " + msg );
22711
22905
  };
22712
22906
 
@@ -22714,20 +22908,16 @@ find.error = function( msg ) {
22714
22908
  * Document sorting and removing duplicates
22715
22909
  * @param {ArrayLike} results
22716
22910
  */
22717
- jQuery.uniqueSort = function( results ) {
22911
+ Sizzle.uniqueSort = function( results ) {
22718
22912
  var elem,
22719
22913
  duplicates = [],
22720
22914
  j = 0,
22721
22915
  i = 0;
22722
22916
 
22723
22917
  // Unless we *know* we can detect duplicates, assume their presence
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 );
22918
+ hasDuplicate = !support.detectDuplicates;
22919
+ sortInput = !support.sortStable && results.slice( 0 );
22920
+ results.sort( sortOrder );
22731
22921
 
22732
22922
  if ( hasDuplicate ) {
22733
22923
  while ( ( elem = results[ i++ ] ) ) {
@@ -22736,7 +22926,7 @@ jQuery.uniqueSort = function( results ) {
22736
22926
  }
22737
22927
  }
22738
22928
  while ( j-- ) {
22739
- splice.call( results, duplicates[ j ], 1 );
22929
+ results.splice( duplicates[ j ], 1 );
22740
22930
  }
22741
22931
  }
22742
22932
 
@@ -22747,11 +22937,47 @@ jQuery.uniqueSort = function( results ) {
22747
22937
  return results;
22748
22938
  };
22749
22939
 
22750
- jQuery.fn.uniqueSort = function() {
22751
- return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
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;
22752
22978
  };
22753
22979
 
22754
- Expr = jQuery.expr = {
22980
+ Expr = Sizzle.selectors = {
22755
22981
 
22756
22982
  // Can be adjusted by the user
22757
22983
  cacheLength: 50,
@@ -22772,12 +22998,12 @@ Expr = jQuery.expr = {
22772
22998
  },
22773
22999
 
22774
23000
  preFilter: {
22775
- ATTR: function( match ) {
23001
+ "ATTR": function( match ) {
22776
23002
  match[ 1 ] = match[ 1 ].replace( runescape, funescape );
22777
23003
 
22778
23004
  // Move the given value to match[3] whether quoted or unquoted
22779
- match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
22780
- .replace( runescape, funescape );
23005
+ match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
23006
+ match[ 5 ] || "" ).replace( runescape, funescape );
22781
23007
 
22782
23008
  if ( match[ 2 ] === "~=" ) {
22783
23009
  match[ 3 ] = " " + match[ 3 ] + " ";
@@ -22786,7 +23012,7 @@ Expr = jQuery.expr = {
22786
23012
  return match.slice( 0, 4 );
22787
23013
  },
22788
23014
 
22789
- CHILD: function( match ) {
23015
+ "CHILD": function( match ) {
22790
23016
 
22791
23017
  /* matches from matchExpr["CHILD"]
22792
23018
  1 type (only|nth|...)
@@ -22804,30 +23030,29 @@ Expr = jQuery.expr = {
22804
23030
 
22805
23031
  // nth-* requires argument
22806
23032
  if ( !match[ 3 ] ) {
22807
- find.error( match[ 0 ] );
23033
+ Sizzle.error( match[ 0 ] );
22808
23034
  }
22809
23035
 
22810
23036
  // numeric x and y parameters for Expr.filter.CHILD
22811
23037
  // remember that false/true cast respectively to 0/1
22812
23038
  match[ 4 ] = +( match[ 4 ] ?
22813
23039
  match[ 5 ] + ( match[ 6 ] || 1 ) :
22814
- 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
22815
- );
23040
+ 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
22816
23041
  match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
22817
23042
 
22818
- // other types prohibit arguments
23043
+ // other types prohibit arguments
22819
23044
  } else if ( match[ 3 ] ) {
22820
- find.error( match[ 0 ] );
23045
+ Sizzle.error( match[ 0 ] );
22821
23046
  }
22822
23047
 
22823
23048
  return match;
22824
23049
  },
22825
23050
 
22826
- PSEUDO: function( match ) {
23051
+ "PSEUDO": function( match ) {
22827
23052
  var excess,
22828
23053
  unquoted = !match[ 6 ] && match[ 2 ];
22829
23054
 
22830
- if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
23055
+ if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
22831
23056
  return null;
22832
23057
  }
22833
23058
 
@@ -22856,36 +23081,36 @@ Expr = jQuery.expr = {
22856
23081
 
22857
23082
  filter: {
22858
23083
 
22859
- TAG: function( nodeNameSelector ) {
22860
- var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
23084
+ "TAG": function( nodeNameSelector ) {
23085
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
22861
23086
  return nodeNameSelector === "*" ?
22862
23087
  function() {
22863
23088
  return true;
22864
23089
  } :
22865
23090
  function( elem ) {
22866
- return nodeName( elem, expectedNodeName );
23091
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
22867
23092
  };
22868
23093
  },
22869
23094
 
22870
- CLASS: function( className ) {
23095
+ "CLASS": function( className ) {
22871
23096
  var pattern = classCache[ className + " " ];
22872
23097
 
22873
23098
  return pattern ||
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
- );
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
+ );
22883
23108
  } );
22884
23109
  },
22885
23110
 
22886
- ATTR: function( name, operator, check ) {
23111
+ "ATTR": function( name, operator, check ) {
22887
23112
  return function( elem ) {
22888
- var result = find.attr( elem, name );
23113
+ var result = Sizzle.attr( elem, name );
22889
23114
 
22890
23115
  if ( result == null ) {
22891
23116
  return operator === "!=";
@@ -22896,34 +23121,22 @@ Expr = jQuery.expr = {
22896
23121
 
22897
23122
  result += "";
22898
23123
 
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
- }
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 */
22921
23135
 
22922
- return false;
22923
23136
  };
22924
23137
  },
22925
23138
 
22926
- CHILD: function( type, what, _argument, first, last ) {
23139
+ "CHILD": function( type, what, _argument, first, last ) {
22927
23140
  var simple = type.slice( 0, 3 ) !== "nth",
22928
23141
  forward = type.slice( -4 ) !== "last",
22929
23142
  ofType = what === "of-type";
@@ -22936,7 +23149,7 @@ Expr = jQuery.expr = {
22936
23149
  } :
22937
23150
 
22938
23151
  function( elem, _context, xml ) {
22939
- var cache, outerCache, node, nodeIndex, start,
23152
+ var cache, uniqueCache, outerCache, node, nodeIndex, start,
22940
23153
  dir = simple !== forward ? "nextSibling" : "previousSibling",
22941
23154
  parent = elem.parentNode,
22942
23155
  name = ofType && elem.nodeName.toLowerCase(),
@@ -22951,7 +23164,7 @@ Expr = jQuery.expr = {
22951
23164
  node = elem;
22952
23165
  while ( ( node = node[ dir ] ) ) {
22953
23166
  if ( ofType ?
22954
- nodeName( node, name ) :
23167
+ node.nodeName.toLowerCase() === name :
22955
23168
  node.nodeType === 1 ) {
22956
23169
 
22957
23170
  return false;
@@ -22970,8 +23183,17 @@ Expr = jQuery.expr = {
22970
23183
  if ( forward && useCache ) {
22971
23184
 
22972
23185
  // Seek `elem` from a previously-cached index
22973
- outerCache = parent[ expando ] || ( parent[ expando ] = {} );
22974
- cache = outerCache[ type ] || [];
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 ] || [];
22975
23197
  nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
22976
23198
  diff = nodeIndex && cache[ 2 ];
22977
23199
  node = nodeIndex && parent.childNodes[ nodeIndex ];
@@ -22983,7 +23205,7 @@ Expr = jQuery.expr = {
22983
23205
 
22984
23206
  // When found, cache indexes on `parent` and break
22985
23207
  if ( node.nodeType === 1 && ++diff && node === elem ) {
22986
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
23208
+ uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
22987
23209
  break;
22988
23210
  }
22989
23211
  }
@@ -22992,8 +23214,17 @@ Expr = jQuery.expr = {
22992
23214
 
22993
23215
  // Use previously-cached element index if available
22994
23216
  if ( useCache ) {
22995
- outerCache = elem[ expando ] || ( elem[ expando ] = {} );
22996
- cache = outerCache[ type ] || [];
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 ] || [];
22997
23228
  nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
22998
23229
  diff = nodeIndex;
22999
23230
  }
@@ -23007,7 +23238,7 @@ Expr = jQuery.expr = {
23007
23238
  ( diff = nodeIndex = 0 ) || start.pop() ) ) {
23008
23239
 
23009
23240
  if ( ( ofType ?
23010
- nodeName( node, name ) :
23241
+ node.nodeName.toLowerCase() === name :
23011
23242
  node.nodeType === 1 ) &&
23012
23243
  ++diff ) {
23013
23244
 
@@ -23015,7 +23246,13 @@ Expr = jQuery.expr = {
23015
23246
  if ( useCache ) {
23016
23247
  outerCache = node[ expando ] ||
23017
23248
  ( node[ expando ] = {} );
23018
- outerCache[ type ] = [ dirruns, diff ];
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 ];
23019
23256
  }
23020
23257
 
23021
23258
  if ( node === elem ) {
@@ -23033,19 +23270,19 @@ Expr = jQuery.expr = {
23033
23270
  };
23034
23271
  },
23035
23272
 
23036
- PSEUDO: function( pseudo, argument ) {
23273
+ "PSEUDO": function( pseudo, argument ) {
23037
23274
 
23038
23275
  // pseudo-class names are case-insensitive
23039
- // https://www.w3.org/TR/selectors/#pseudo-classes
23276
+ // http://www.w3.org/TR/selectors/#pseudo-classes
23040
23277
  // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
23041
23278
  // Remember that setFilters inherits from pseudos
23042
23279
  var args,
23043
23280
  fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
23044
- find.error( "unsupported pseudo: " + pseudo );
23281
+ Sizzle.error( "unsupported pseudo: " + pseudo );
23045
23282
 
23046
23283
  // The user may use createPseudo to indicate that
23047
23284
  // arguments are needed to create the filter function
23048
- // just as jQuery does
23285
+ // just as Sizzle does
23049
23286
  if ( fn[ expando ] ) {
23050
23287
  return fn( argument );
23051
23288
  }
@@ -23059,7 +23296,7 @@ Expr = jQuery.expr = {
23059
23296
  matched = fn( seed, argument ),
23060
23297
  i = matched.length;
23061
23298
  while ( i-- ) {
23062
- idx = indexOf.call( seed, matched[ i ] );
23299
+ idx = indexOf( seed, matched[ i ] );
23063
23300
  seed[ idx ] = !( matches[ idx ] = matched[ i ] );
23064
23301
  }
23065
23302
  } ) :
@@ -23075,14 +23312,14 @@ Expr = jQuery.expr = {
23075
23312
  pseudos: {
23076
23313
 
23077
23314
  // Potentially complex pseudos
23078
- not: markFunction( function( selector ) {
23315
+ "not": markFunction( function( selector ) {
23079
23316
 
23080
23317
  // Trim the selector passed to compile
23081
23318
  // to avoid treating leading and trailing
23082
23319
  // spaces as combinators
23083
23320
  var input = [],
23084
23321
  results = [],
23085
- matcher = compile( selector.replace( rtrimCSS, "$1" ) );
23322
+ matcher = compile( selector.replace( rtrim, "$1" ) );
23086
23323
 
23087
23324
  return matcher[ expando ] ?
23088
23325
  markFunction( function( seed, matches, _context, xml ) {
@@ -23101,23 +23338,22 @@ Expr = jQuery.expr = {
23101
23338
  input[ 0 ] = elem;
23102
23339
  matcher( input, null, xml, results );
23103
23340
 
23104
- // Don't keep the element
23105
- // (see https://github.com/jquery/sizzle/issues/299)
23341
+ // Don't keep the element (issue #299)
23106
23342
  input[ 0 ] = null;
23107
23343
  return !results.pop();
23108
23344
  };
23109
23345
  } ),
23110
23346
 
23111
- has: markFunction( function( selector ) {
23347
+ "has": markFunction( function( selector ) {
23112
23348
  return function( elem ) {
23113
- return find( selector, elem ).length > 0;
23349
+ return Sizzle( selector, elem ).length > 0;
23114
23350
  };
23115
23351
  } ),
23116
23352
 
23117
- contains: markFunction( function( text ) {
23353
+ "contains": markFunction( function( text ) {
23118
23354
  text = text.replace( runescape, funescape );
23119
23355
  return function( elem ) {
23120
- return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
23356
+ return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
23121
23357
  };
23122
23358
  } ),
23123
23359
 
@@ -23127,12 +23363,12 @@ Expr = jQuery.expr = {
23127
23363
  // or beginning with the identifier C immediately followed by "-".
23128
23364
  // The matching of C against the element's language value is performed case-insensitively.
23129
23365
  // The identifier C does not have to be a valid language name."
23130
- // https://www.w3.org/TR/selectors/#lang-pseudo
23131
- lang: markFunction( function( lang ) {
23366
+ // http://www.w3.org/TR/selectors/#lang-pseudo
23367
+ "lang": markFunction( function( lang ) {
23132
23368
 
23133
23369
  // lang value must be a valid identifier
23134
23370
  if ( !ridentifier.test( lang || "" ) ) {
23135
- find.error( "unsupported lang: " + lang );
23371
+ Sizzle.error( "unsupported lang: " + lang );
23136
23372
  }
23137
23373
  lang = lang.replace( runescape, funescape ).toLowerCase();
23138
23374
  return function( elem ) {
@@ -23151,39 +23387,38 @@ Expr = jQuery.expr = {
23151
23387
  } ),
23152
23388
 
23153
23389
  // Miscellaneous
23154
- target: function( elem ) {
23390
+ "target": function( elem ) {
23155
23391
  var hash = window.location && window.location.hash;
23156
23392
  return hash && hash.slice( 1 ) === elem.id;
23157
23393
  },
23158
23394
 
23159
- root: function( elem ) {
23160
- return elem === documentElement;
23395
+ "root": function( elem ) {
23396
+ return elem === docElem;
23161
23397
  },
23162
23398
 
23163
- focus: function( elem ) {
23164
- return elem === safeActiveElement() &&
23165
- document.hasFocus() &&
23399
+ "focus": function( elem ) {
23400
+ return elem === document.activeElement &&
23401
+ ( !document.hasFocus || document.hasFocus() ) &&
23166
23402
  !!( elem.type || elem.href || ~elem.tabIndex );
23167
23403
  },
23168
23404
 
23169
23405
  // Boolean properties
23170
- enabled: createDisabledPseudo( false ),
23171
- disabled: createDisabledPseudo( true ),
23406
+ "enabled": createDisabledPseudo( false ),
23407
+ "disabled": createDisabledPseudo( true ),
23172
23408
 
23173
- checked: function( elem ) {
23409
+ "checked": function( elem ) {
23174
23410
 
23175
23411
  // In CSS3, :checked should return both checked and selected elements
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 );
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 );
23179
23416
  },
23180
23417
 
23181
- selected: function( elem ) {
23418
+ "selected": function( elem ) {
23182
23419
 
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.
23420
+ // Accessing this property makes selected-by-default
23421
+ // options in Safari work properly
23187
23422
  if ( elem.parentNode ) {
23188
23423
  // eslint-disable-next-line no-unused-expressions
23189
23424
  elem.parentNode.selectedIndex;
@@ -23193,9 +23428,9 @@ Expr = jQuery.expr = {
23193
23428
  },
23194
23429
 
23195
23430
  // Contents
23196
- empty: function( elem ) {
23431
+ "empty": function( elem ) {
23197
23432
 
23198
- // https://www.w3.org/TR/selectors/#empty-pseudo
23433
+ // http://www.w3.org/TR/selectors/#empty-pseudo
23199
23434
  // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
23200
23435
  // but not by others (comment: 8; processing instruction: 7; etc.)
23201
23436
  // nodeType < 6 works because attributes (2) do not appear as children
@@ -23207,49 +23442,49 @@ Expr = jQuery.expr = {
23207
23442
  return true;
23208
23443
  },
23209
23444
 
23210
- parent: function( elem ) {
23211
- return !Expr.pseudos.empty( elem );
23445
+ "parent": function( elem ) {
23446
+ return !Expr.pseudos[ "empty" ]( elem );
23212
23447
  },
23213
23448
 
23214
23449
  // Element/input types
23215
- header: function( elem ) {
23450
+ "header": function( elem ) {
23216
23451
  return rheader.test( elem.nodeName );
23217
23452
  },
23218
23453
 
23219
- input: function( elem ) {
23454
+ "input": function( elem ) {
23220
23455
  return rinputs.test( elem.nodeName );
23221
23456
  },
23222
23457
 
23223
- button: function( elem ) {
23224
- return nodeName( elem, "input" ) && elem.type === "button" ||
23225
- nodeName( elem, "button" );
23458
+ "button": function( elem ) {
23459
+ var name = elem.nodeName.toLowerCase();
23460
+ return name === "input" && elem.type === "button" || name === "button";
23226
23461
  },
23227
23462
 
23228
- text: function( elem ) {
23463
+ "text": function( elem ) {
23229
23464
  var attr;
23230
- return nodeName( elem, "input" ) && elem.type === "text" &&
23465
+ return elem.nodeName.toLowerCase() === "input" &&
23466
+ elem.type === "text" &&
23231
23467
 
23232
- // Support: IE <10 only
23233
- // New HTML5 attribute values (e.g., "search") appear
23234
- // with elem.type === "text"
23468
+ // Support: IE<8
23469
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
23235
23470
  ( ( attr = elem.getAttribute( "type" ) ) == null ||
23236
23471
  attr.toLowerCase() === "text" );
23237
23472
  },
23238
23473
 
23239
23474
  // Position-in-collection
23240
- first: createPositionalPseudo( function() {
23475
+ "first": createPositionalPseudo( function() {
23241
23476
  return [ 0 ];
23242
23477
  } ),
23243
23478
 
23244
- last: createPositionalPseudo( function( _matchIndexes, length ) {
23479
+ "last": createPositionalPseudo( function( _matchIndexes, length ) {
23245
23480
  return [ length - 1 ];
23246
23481
  } ),
23247
23482
 
23248
- eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
23483
+ "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
23249
23484
  return [ argument < 0 ? argument + length : argument ];
23250
23485
  } ),
23251
23486
 
23252
- even: createPositionalPseudo( function( matchIndexes, length ) {
23487
+ "even": createPositionalPseudo( function( matchIndexes, length ) {
23253
23488
  var i = 0;
23254
23489
  for ( ; i < length; i += 2 ) {
23255
23490
  matchIndexes.push( i );
@@ -23257,7 +23492,7 @@ Expr = jQuery.expr = {
23257
23492
  return matchIndexes;
23258
23493
  } ),
23259
23494
 
23260
- odd: createPositionalPseudo( function( matchIndexes, length ) {
23495
+ "odd": createPositionalPseudo( function( matchIndexes, length ) {
23261
23496
  var i = 1;
23262
23497
  for ( ; i < length; i += 2 ) {
23263
23498
  matchIndexes.push( i );
@@ -23265,24 +23500,19 @@ Expr = jQuery.expr = {
23265
23500
  return matchIndexes;
23266
23501
  } ),
23267
23502
 
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
-
23503
+ "lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
23504
+ var i = argument < 0 ?
23505
+ argument + length :
23506
+ argument > length ?
23507
+ length :
23508
+ argument;
23279
23509
  for ( ; --i >= 0; ) {
23280
23510
  matchIndexes.push( i );
23281
23511
  }
23282
23512
  return matchIndexes;
23283
23513
  } ),
23284
23514
 
23285
- gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
23515
+ "gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
23286
23516
  var i = argument < 0 ? argument + length : argument;
23287
23517
  for ( ; ++i < length; ) {
23288
23518
  matchIndexes.push( i );
@@ -23292,7 +23522,7 @@ Expr = jQuery.expr = {
23292
23522
  }
23293
23523
  };
23294
23524
 
23295
- Expr.pseudos.nth = Expr.pseudos.eq;
23525
+ Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
23296
23526
 
23297
23527
  // Add button/input type pseudos
23298
23528
  for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
@@ -23307,7 +23537,7 @@ function setFilters() {}
23307
23537
  setFilters.prototype = Expr.filters = Expr.pseudos;
23308
23538
  Expr.setFilters = new setFilters();
23309
23539
 
23310
- function tokenize( selector, parseOnly ) {
23540
+ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
23311
23541
  var matched, match, tokens, type,
23312
23542
  soFar, groups, preFilters,
23313
23543
  cached = tokenCache[ selector + " " ];
@@ -23335,13 +23565,13 @@ function tokenize( selector, parseOnly ) {
23335
23565
  matched = false;
23336
23566
 
23337
23567
  // Combinators
23338
- if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
23568
+ if ( ( match = rcombinators.exec( soFar ) ) ) {
23339
23569
  matched = match.shift();
23340
23570
  tokens.push( {
23341
23571
  value: matched,
23342
23572
 
23343
23573
  // Cast descendant combinators to space
23344
- type: match[ 0 ].replace( rtrimCSS, " " )
23574
+ type: match[ 0 ].replace( rtrim, " " )
23345
23575
  } );
23346
23576
  soFar = soFar.slice( matched.length );
23347
23577
  }
@@ -23368,16 +23598,14 @@ function tokenize( selector, parseOnly ) {
23368
23598
  // Return the length of the invalid excess
23369
23599
  // if we're just parsing
23370
23600
  // Otherwise, throw an error or return tokens
23371
- if ( parseOnly ) {
23372
- return soFar.length;
23373
- }
23374
-
23375
- return soFar ?
23376
- find.error( selector ) :
23601
+ return parseOnly ?
23602
+ soFar.length :
23603
+ soFar ?
23604
+ Sizzle.error( selector ) :
23377
23605
 
23378
- // Cache the tokens
23379
- tokenCache( selector, groups ).slice( 0 );
23380
- }
23606
+ // Cache the tokens
23607
+ tokenCache( selector, groups ).slice( 0 );
23608
+ };
23381
23609
 
23382
23610
  function toSelector( tokens ) {
23383
23611
  var i = 0,
@@ -23410,7 +23638,7 @@ function addCombinator( matcher, combinator, base ) {
23410
23638
 
23411
23639
  // Check against all ancestor/preceding elements
23412
23640
  function( elem, context, xml ) {
23413
- var oldCache, outerCache,
23641
+ var oldCache, uniqueCache, outerCache,
23414
23642
  newCache = [ dirruns, doneName ];
23415
23643
 
23416
23644
  // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
@@ -23427,9 +23655,14 @@ function addCombinator( matcher, combinator, base ) {
23427
23655
  if ( elem.nodeType === 1 || checkNonElements ) {
23428
23656
  outerCache = elem[ expando ] || ( elem[ expando ] = {} );
23429
23657
 
23430
- if ( skip && nodeName( elem, skip ) ) {
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() ) {
23431
23664
  elem = elem[ dir ] || elem;
23432
- } else if ( ( oldCache = outerCache[ key ] ) &&
23665
+ } else if ( ( oldCache = uniqueCache[ key ] ) &&
23433
23666
  oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
23434
23667
 
23435
23668
  // Assign to newCache so results back-propagate to previous elements
@@ -23437,7 +23670,7 @@ function addCombinator( matcher, combinator, base ) {
23437
23670
  } else {
23438
23671
 
23439
23672
  // Reuse newcache so results back-propagate to previous elements
23440
- outerCache[ key ] = newCache;
23673
+ uniqueCache[ key ] = newCache;
23441
23674
 
23442
23675
  // A match means we're done; a fail means we have to keep checking
23443
23676
  if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
@@ -23469,7 +23702,7 @@ function multipleContexts( selector, contexts, results ) {
23469
23702
  var i = 0,
23470
23703
  len = contexts.length;
23471
23704
  for ( ; i < len; i++ ) {
23472
- find( selector, contexts[ i ], results );
23705
+ Sizzle( selector, contexts[ i ], results );
23473
23706
  }
23474
23707
  return results;
23475
23708
  }
@@ -23503,37 +23736,38 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
23503
23736
  postFinder = setMatcher( postFinder, postSelector );
23504
23737
  }
23505
23738
  return markFunction( function( seed, results, context, xml ) {
23506
- var temp, i, elem, matcherOut,
23739
+ var temp, i, elem,
23507
23740
  preMap = [],
23508
23741
  postMap = [],
23509
23742
  preexisting = results.length,
23510
23743
 
23511
23744
  // Get initial elements from seed or context
23512
- elems = seed ||
23513
- multipleContexts( selector || "*",
23514
- context.nodeType ? [ context ] : context, [] ),
23745
+ elems = seed || multipleContexts(
23746
+ selector || "*",
23747
+ context.nodeType ? [ context ] : context,
23748
+ []
23749
+ ),
23515
23750
 
23516
23751
  // Prefilter to get matcher input, preserving a map for seed-results synchronization
23517
23752
  matcherIn = preFilter && ( seed || !selector ) ?
23518
23753
  condense( elems, preMap, preFilter, context, xml ) :
23519
- elems;
23754
+ elems,
23520
23755
 
23521
- if ( matcher ) {
23756
+ matcherOut = matcher ?
23522
23757
 
23523
- // If we have a postFinder, or filtered seed, or non-seed postFilter
23524
- // or preexisting results,
23525
- matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
23758
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
23759
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
23526
23760
 
23527
- // ...intermediate processing is necessary
23528
- [] :
23761
+ // ...intermediate processing is necessary
23762
+ [] :
23529
23763
 
23530
- // ...otherwise use results directly
23531
- results;
23764
+ // ...otherwise use results directly
23765
+ results :
23766
+ matcherIn;
23532
23767
 
23533
- // Find primary matches
23768
+ // Find primary matches
23769
+ if ( matcher ) {
23534
23770
  matcher( matcherIn, matcherOut, context, xml );
23535
- } else {
23536
- matcherOut = matcherIn;
23537
23771
  }
23538
23772
 
23539
23773
  // Apply postFilter
@@ -23571,7 +23805,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
23571
23805
  i = matcherOut.length;
23572
23806
  while ( i-- ) {
23573
23807
  if ( ( elem = matcherOut[ i ] ) &&
23574
- ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
23808
+ ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
23575
23809
 
23576
23810
  seed[ temp ] = !( results[ temp ] = elem );
23577
23811
  }
@@ -23606,21 +23840,15 @@ function matcherFromTokens( tokens ) {
23606
23840
  return elem === checkContext;
23607
23841
  }, implicitRelative, true ),
23608
23842
  matchAnyContext = addCombinator( function( elem ) {
23609
- return indexOf.call( checkContext, elem ) > -1;
23843
+ return indexOf( checkContext, elem ) > -1;
23610
23844
  }, implicitRelative, true ),
23611
23845
  matchers = [ function( elem, context, xml ) {
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 ) ) || (
23846
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
23618
23847
  ( checkContext = context ).nodeType ?
23619
23848
  matchContext( elem, context, xml ) :
23620
23849
  matchAnyContext( elem, context, xml ) );
23621
23850
 
23622
- // Avoid hanging onto element
23623
- // (see https://github.com/jquery/sizzle/issues/299)
23851
+ // Avoid hanging onto element (issue #299)
23624
23852
  checkContext = null;
23625
23853
  return ret;
23626
23854
  } ];
@@ -23645,10 +23873,11 @@ function matcherFromTokens( tokens ) {
23645
23873
  i > 1 && elementMatcher( matchers ),
23646
23874
  i > 1 && toSelector(
23647
23875
 
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" ),
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" ),
23652
23881
  matcher,
23653
23882
  i < j && matcherFromTokens( tokens.slice( i, j ) ),
23654
23883
  j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
@@ -23674,7 +23903,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23674
23903
  contextBackup = outermostContext,
23675
23904
 
23676
23905
  // We must always have either seed elements or outermost context
23677
- elems = seed || byElement && Expr.find.TAG( "*", outermost ),
23906
+ elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
23678
23907
 
23679
23908
  // Use integer dirruns iff this is the outermost matcher
23680
23909
  dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
@@ -23690,9 +23919,8 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23690
23919
  }
23691
23920
 
23692
23921
  // Add elements passing elementMatchers directly to results
23693
- // Support: iOS <=7 - 9 only
23694
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
23695
- // elements by id. (see trac-14142)
23922
+ // Support: IE<9, Safari
23923
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
23696
23924
  for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
23697
23925
  if ( byElement && elem ) {
23698
23926
  j = 0;
@@ -23707,7 +23935,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23707
23935
  }
23708
23936
  while ( ( matcher = elementMatchers[ j++ ] ) ) {
23709
23937
  if ( matcher( elem, context || document, xml ) ) {
23710
- push.call( results, elem );
23938
+ results.push( elem );
23711
23939
  break;
23712
23940
  }
23713
23941
  }
@@ -23770,7 +23998,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23770
23998
  if ( outermost && !seed && setMatched.length > 0 &&
23771
23999
  ( matchedCount + setMatchers.length ) > 1 ) {
23772
24000
 
23773
- jQuery.uniqueSort( results );
24001
+ Sizzle.uniqueSort( results );
23774
24002
  }
23775
24003
  }
23776
24004
 
@@ -23788,7 +24016,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
23788
24016
  superMatcher;
23789
24017
  }
23790
24018
 
23791
- function compile( selector, match /* Internal Use Only */ ) {
24019
+ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
23792
24020
  var i,
23793
24021
  setMatchers = [],
23794
24022
  elementMatchers = [],
@@ -23811,25 +24039,27 @@ function compile( selector, match /* Internal Use Only */ ) {
23811
24039
  }
23812
24040
 
23813
24041
  // Cache the compiled function
23814
- cached = compilerCache( selector,
23815
- matcherFromGroupMatchers( elementMatchers, setMatchers ) );
24042
+ cached = compilerCache(
24043
+ selector,
24044
+ matcherFromGroupMatchers( elementMatchers, setMatchers )
24045
+ );
23816
24046
 
23817
24047
  // Save selector and tokenization
23818
24048
  cached.selector = selector;
23819
24049
  }
23820
24050
  return cached;
23821
- }
24051
+ };
23822
24052
 
23823
24053
  /**
23824
- * A low-level selection function that works with jQuery's compiled
24054
+ * A low-level selection function that works with Sizzle's compiled
23825
24055
  * selector functions
23826
24056
  * @param {String|Function} selector A selector or a pre-compiled
23827
- * selector function built with jQuery selector compile
24057
+ * selector function built with Sizzle.compile
23828
24058
  * @param {Element} context
23829
24059
  * @param {Array} [results]
23830
24060
  * @param {Array} [seed] A set of elements to match against
23831
24061
  */
23832
- function select( selector, context, results, seed ) {
24062
+ select = Sizzle.select = function( selector, context, results, seed ) {
23833
24063
  var i, tokens, token, type, find,
23834
24064
  compiled = typeof selector === "function" && selector,
23835
24065
  match = !seed && tokenize( ( selector = compiled.selector || selector ) );
@@ -23843,12 +24073,10 @@ function select( selector, context, results, seed ) {
23843
24073
  // Reduce context if the leading compound selector is an ID
23844
24074
  tokens = match[ 0 ] = match[ 0 ].slice( 0 );
23845
24075
  if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
23846
- context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
24076
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
23847
24077
 
23848
- context = ( Expr.find.ID(
23849
- token.matches[ 0 ].replace( runescape, funescape ),
23850
- context
23851
- ) || [] )[ 0 ];
24078
+ context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
24079
+ .replace( runescape, funescape ), context ) || [] )[ 0 ];
23852
24080
  if ( !context ) {
23853
24081
  return results;
23854
24082
 
@@ -23861,7 +24089,7 @@ function select( selector, context, results, seed ) {
23861
24089
  }
23862
24090
 
23863
24091
  // Fetch a seed set for right-to-left matching
23864
- i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
24092
+ i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
23865
24093
  while ( i-- ) {
23866
24094
  token = tokens[ i ];
23867
24095
 
@@ -23874,8 +24102,8 @@ function select( selector, context, results, seed ) {
23874
24102
  // Search, expanding context for leading sibling combinators
23875
24103
  if ( ( seed = find(
23876
24104
  token.matches[ 0 ].replace( runescape, funescape ),
23877
- rsibling.test( tokens[ 0 ].type ) &&
23878
- testContext( context.parentNode ) || context
24105
+ rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
24106
+ context
23879
24107
  ) ) ) {
23880
24108
 
23881
24109
  // If seed is empty or no tokens remain, we can return early
@@ -23902,18 +24130,21 @@ function select( selector, context, results, seed ) {
23902
24130
  !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
23903
24131
  );
23904
24132
  return results;
23905
- }
24133
+ };
23906
24134
 
23907
24135
  // One-time assignments
23908
24136
 
23909
- // Support: Android <=4.0 - 4.1+
23910
24137
  // Sort stability
23911
24138
  support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
23912
24139
 
24140
+ // Support: Chrome 14-35+
24141
+ // Always assume duplicates if they aren't passed to the comparison function
24142
+ support.detectDuplicates = !!hasDuplicate;
24143
+
23913
24144
  // Initialize against the default document
23914
24145
  setDocument();
23915
24146
 
23916
- // Support: Android <=4.0 - 4.1+
24147
+ // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
23917
24148
  // Detached nodes confoundingly follow *each other*
23918
24149
  support.sortDetached = assert( function( el ) {
23919
24150
 
@@ -23921,29 +24152,68 @@ support.sortDetached = assert( function( el ) {
23921
24152
  return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
23922
24153
  } );
23923
24154
 
23924
- jQuery.find = find;
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
+ }
23925
24168
 
23926
- // Deprecated
23927
- jQuery.expr[ ":" ] = jQuery.expr.pseudos;
23928
- jQuery.unique = jQuery.uniqueSort;
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
+ }
23929
24182
 
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;
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
+ }
23936
24198
 
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;
24199
+ return Sizzle;
24200
+
24201
+ } )( window );
24202
+
24203
+
24204
+
24205
+ jQuery.find = Sizzle;
24206
+ jQuery.expr = Sizzle.selectors;
24207
+
24208
+ // Deprecated
24209
+ 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;
23943
24215
 
23944
- /* eslint-enable */
23945
24216
 
23946
- } )();
23947
24217
 
23948
24218
 
23949
24219
  var dir = function( elem, dir, until ) {
@@ -23977,6 +24247,13 @@ var siblings = function( n, elem ) {
23977
24247
 
23978
24248
  var rneedsContext = jQuery.expr.match.needsContext;
23979
24249
 
24250
+
24251
+
24252
+ function nodeName( elem, name ) {
24253
+
24254
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
24255
+
24256
+ }
23980
24257
  var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
23981
24258
 
23982
24259
 
@@ -24075,8 +24352,8 @@ jQuery.fn.extend( {
24075
24352
  var rootjQuery,
24076
24353
 
24077
24354
  // A simple way to check for HTML strings
24078
- // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
24079
- // Strict HTML recognition (trac-11290: must start with <)
24355
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
24356
+ // Strict HTML recognition (#11290: must start with <)
24080
24357
  // Shortcut simple #id case for speed
24081
24358
  rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
24082
24359
 
@@ -24227,7 +24504,7 @@ jQuery.fn.extend( {
24227
24504
  if ( cur.nodeType < 11 && ( targets ?
24228
24505
  targets.index( cur ) > -1 :
24229
24506
 
24230
- // Don't pass non-elements to jQuery#find
24507
+ // Don't pass non-elements to Sizzle
24231
24508
  cur.nodeType === 1 &&
24232
24509
  jQuery.find.matchesSelector( cur, selectors ) ) ) {
24233
24510
 
@@ -24782,7 +25059,7 @@ jQuery.extend( {
24782
25059
 
24783
25060
  if ( jQuery.Deferred.exceptionHook ) {
24784
25061
  jQuery.Deferred.exceptionHook( e,
24785
- process.error );
25062
+ process.stackTrace );
24786
25063
  }
24787
25064
 
24788
25065
  // Support: Promises/A+ section 2.3.3.3.4.1
@@ -24810,17 +25087,10 @@ jQuery.extend( {
24810
25087
  process();
24811
25088
  } else {
24812
25089
 
24813
- // Call an optional hook to record the error, in case of exception
25090
+ // Call an optional hook to record the stack, in case of exception
24814
25091
  // since it's otherwise lost when execution goes async
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();
25092
+ if ( jQuery.Deferred.getStackHook ) {
25093
+ process.stackTrace = jQuery.Deferred.getStackHook();
24824
25094
  }
24825
25095
  window.setTimeout( process );
24826
25096
  }
@@ -24995,16 +25265,12 @@ jQuery.extend( {
24995
25265
  // warn about them ASAP rather than swallowing them by default.
24996
25266
  var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
24997
25267
 
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 ) {
25268
+ jQuery.Deferred.exceptionHook = function( error, stack ) {
25002
25269
 
25003
25270
  // Support: IE 8 - 9 only
25004
25271
  // Console exists when dev tools are open, which can happen at any time
25005
25272
  if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
25006
- window.console.warn( "jQuery.Deferred exception: " + error.message,
25007
- error.stack, asyncError );
25273
+ window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
25008
25274
  }
25009
25275
  };
25010
25276
 
@@ -25044,7 +25310,7 @@ jQuery.extend( {
25044
25310
  isReady: false,
25045
25311
 
25046
25312
  // A counter to track how many items to wait for before
25047
- // the ready event fires. See trac-6781
25313
+ // the ready event fires. See #6781
25048
25314
  readyWait: 1,
25049
25315
 
25050
25316
  // Handle when the DOM is ready
@@ -25172,7 +25438,7 @@ function fcamelCase( _all, letter ) {
25172
25438
 
25173
25439
  // Convert dashed to camelCase; used by the css and data modules
25174
25440
  // Support: IE <=9 - 11, Edge 12 - 15
25175
- // Microsoft forgot to hump their vendor prefix (trac-9572)
25441
+ // Microsoft forgot to hump their vendor prefix (#9572)
25176
25442
  function camelCase( string ) {
25177
25443
  return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
25178
25444
  }
@@ -25208,7 +25474,7 @@ Data.prototype = {
25208
25474
  value = {};
25209
25475
 
25210
25476
  // We can accept data for non-element nodes in modern browsers,
25211
- // but we should not, see trac-8335.
25477
+ // but we should not, see #8335.
25212
25478
  // Always return an empty object.
25213
25479
  if ( acceptData( owner ) ) {
25214
25480
 
@@ -25447,7 +25713,7 @@ jQuery.fn.extend( {
25447
25713
  while ( i-- ) {
25448
25714
 
25449
25715
  // Support: IE 11 only
25450
- // The attrs elements can be null (trac-14894)
25716
+ // The attrs elements can be null (#14894)
25451
25717
  if ( attrs[ i ] ) {
25452
25718
  name = attrs[ i ].name;
25453
25719
  if ( name.indexOf( "data-" ) === 0 ) {
@@ -25870,9 +26136,9 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
25870
26136
  input = document.createElement( "input" );
25871
26137
 
25872
26138
  // Support: Android 4.0 - 4.3 only
25873
- // Check state lost if the name is set (trac-11217)
26139
+ // Check state lost if the name is set (#11217)
25874
26140
  // Support: Windows Web Apps (WWA)
25875
- // `name` and `type` must use .setAttribute for WWA (trac-14901)
26141
+ // `name` and `type` must use .setAttribute for WWA (#14901)
25876
26142
  input.setAttribute( "type", "radio" );
25877
26143
  input.setAttribute( "checked", "checked" );
25878
26144
  input.setAttribute( "name", "t" );
@@ -25896,7 +26162,7 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
25896
26162
  } )();
25897
26163
 
25898
26164
 
25899
- // We have to close these tags to support XHTML (trac-13200)
26165
+ // We have to close these tags to support XHTML (#13200)
25900
26166
  var wrapMap = {
25901
26167
 
25902
26168
  // XHTML parsers do not magically insert elements in the
@@ -25922,7 +26188,7 @@ if ( !support.option ) {
25922
26188
  function getAll( context, tag ) {
25923
26189
 
25924
26190
  // Support: IE <=9 - 11 only
25925
- // Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
26191
+ // Use typeof to avoid zero-argument method invocation on host objects (#15151)
25926
26192
  var ret;
25927
26193
 
25928
26194
  if ( typeof context.getElementsByTagName !== "undefined" ) {
@@ -26005,7 +26271,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
26005
26271
  // Remember the top-level container
26006
26272
  tmp = fragment.firstChild;
26007
26273
 
26008
- // Ensure the created nodes are orphaned (trac-12392)
26274
+ // Ensure the created nodes are orphaned (#12392)
26009
26275
  tmp.textContent = "";
26010
26276
  }
26011
26277
  }
@@ -26060,6 +26326,25 @@ function returnFalse() {
26060
26326
  return false;
26061
26327
  }
26062
26328
 
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
+
26063
26348
  function on( elem, types, selector, data, fn, one ) {
26064
26349
  var origFn, type;
26065
26350
 
@@ -26407,15 +26692,15 @@ jQuery.event = {
26407
26692
 
26408
26693
  for ( ; cur !== this; cur = cur.parentNode || this ) {
26409
26694
 
26410
- // Don't check non-elements (trac-13208)
26411
- // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
26695
+ // Don't check non-elements (#13208)
26696
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
26412
26697
  if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
26413
26698
  matchedHandlers = [];
26414
26699
  matchedSelectors = {};
26415
26700
  for ( i = 0; i < delegateCount; i++ ) {
26416
26701
  handleObj = handlers[ i ];
26417
26702
 
26418
- // Don't conflict with Object.prototype properties (trac-13203)
26703
+ // Don't conflict with Object.prototype properties (#13203)
26419
26704
  sel = handleObj.selector + " ";
26420
26705
 
26421
26706
  if ( matchedSelectors[ sel ] === undefined ) {
@@ -26497,7 +26782,7 @@ jQuery.event = {
26497
26782
  el.click && nodeName( el, "input" ) ) {
26498
26783
 
26499
26784
  // dataPriv.set( el, "click", ... )
26500
- leverageNative( el, "click", true );
26785
+ leverageNative( el, "click", returnTrue );
26501
26786
  }
26502
26787
 
26503
26788
  // Return false to allow normal processing in the caller
@@ -26548,10 +26833,10 @@ jQuery.event = {
26548
26833
  // synthetic events by interrupting progress until reinvoked in response to
26549
26834
  // *native* events that it fires directly, ensuring that state changes have
26550
26835
  // already occurred before other listeners are invoked.
26551
- function leverageNative( el, type, isSetup ) {
26836
+ function leverageNative( el, type, expectSync ) {
26552
26837
 
26553
- // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
26554
- if ( !isSetup ) {
26838
+ // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
26839
+ if ( !expectSync ) {
26555
26840
  if ( dataPriv.get( el, type ) === undefined ) {
26556
26841
  jQuery.event.add( el, type, returnTrue );
26557
26842
  }
@@ -26563,13 +26848,15 @@ function leverageNative( el, type, isSetup ) {
26563
26848
  jQuery.event.add( el, type, {
26564
26849
  namespace: false,
26565
26850
  handler: function( event ) {
26566
- var result,
26851
+ var notAsync, result,
26567
26852
  saved = dataPriv.get( this, type );
26568
26853
 
26569
26854
  if ( ( event.isTrigger & 1 ) && this[ type ] ) {
26570
26855
 
26571
26856
  // Interrupt processing of the outer synthetic .trigger()ed event
26572
- if ( !saved ) {
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 ) {
26573
26860
 
26574
26861
  // Store arguments for use when handling the inner native event
26575
26862
  // There will always be at least one argument (an event object), so this array
@@ -26578,22 +26865,33 @@ function leverageNative( el, type, isSetup ) {
26578
26865
  dataPriv.set( this, type, saved );
26579
26866
 
26580
26867
  // Trigger the native event and capture its result
26868
+ // Support: IE <=9 - 11+
26869
+ // focus() and blur() are asynchronous
26870
+ notAsync = expectSync( this, type );
26581
26871
  this[ type ]();
26582
26872
  result = dataPriv.get( this, type );
26583
- dataPriv.set( this, type, false );
26584
-
26873
+ if ( saved !== result || notAsync ) {
26874
+ dataPriv.set( this, type, false );
26875
+ } else {
26876
+ result = {};
26877
+ }
26585
26878
  if ( saved !== result ) {
26586
26879
 
26587
26880
  // Cancel the outer synthetic event
26588
26881
  event.stopImmediatePropagation();
26589
26882
  event.preventDefault();
26590
26883
 
26591
- return result;
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;
26592
26890
  }
26593
26891
 
26594
26892
  // If this is an inner synthetic event for an event with a bubbling surrogate
26595
- // (focus or blur), assume that the surrogate already propagated from triggering
26596
- // the native event and prevent that from happening again here.
26893
+ // (focus or blur), assume that the surrogate already propagated from triggering the
26894
+ // native event and prevent that from happening again here.
26597
26895
  // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
26598
26896
  // bubbling surrogate propagates *after* the non-bubbling base), but that seems
26599
26897
  // less bad than duplication.
@@ -26603,25 +26901,22 @@ function leverageNative( el, type, isSetup ) {
26603
26901
 
26604
26902
  // If this is a native event triggered above, everything is now in order
26605
26903
  // Fire an inner synthetic event with the original arguments
26606
- } else if ( saved ) {
26904
+ } else if ( saved.length ) {
26607
26905
 
26608
26906
  // ...and capture the result
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;
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();
26625
26920
  }
26626
26921
  }
26627
26922
  } );
@@ -26659,7 +26954,7 @@ jQuery.Event = function( src, props ) {
26659
26954
 
26660
26955
  // Create target properties
26661
26956
  // Support: Safari <=6 - 7 only
26662
- // Target should not be a text node (trac-504, trac-13143)
26957
+ // Target should not be a text node (#504, #13143)
26663
26958
  this.target = ( src.target && src.target.nodeType === 3 ) ?
26664
26959
  src.target.parentNode :
26665
26960
  src.target;
@@ -26760,73 +27055,18 @@ jQuery.each( {
26760
27055
  }, jQuery.event.addProp );
26761
27056
 
26762
27057
  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
-
26802
27058
  jQuery.event.special[ type ] = {
26803
27059
 
26804
27060
  // Utilize native event if possible so blur/focus sequence is correct
26805
27061
  setup: function() {
26806
27062
 
26807
- var attaches;
26808
-
26809
27063
  // Claim the first handler
26810
27064
  // dataPriv.set( this, "focus", ... )
26811
27065
  // dataPriv.set( this, "blur", ... )
26812
- leverageNative( this, type, true );
26813
-
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 {
27066
+ leverageNative( this, type, expectSync );
26826
27067
 
26827
- // Return false to allow normal processing in the caller
26828
- return false;
26829
- }
27068
+ // Return false to allow normal processing in the caller
27069
+ return false;
26830
27070
  },
26831
27071
  trigger: function() {
26832
27072
 
@@ -26837,84 +27077,14 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
26837
27077
  return true;
26838
27078
  },
26839
27079
 
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 );
27080
+ // Suppress native focus or blur as it's already being fired
27081
+ // in leverageNative.
27082
+ _default: function() {
27083
+ return true;
26862
27084
  },
26863
27085
 
26864
27086
  delegateType: delegateType
26865
27087
  };
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
- };
26918
27088
  } );
26919
27089
 
26920
27090
  // Create mouseenter/leave events using mouseover/out and event-time checks
@@ -27009,8 +27179,7 @@ var
27009
27179
 
27010
27180
  // checked="checked" or checked
27011
27181
  rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
27012
-
27013
- rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
27182
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
27014
27183
 
27015
27184
  // Prefer a tbody over its parent table for containing new rows
27016
27185
  function manipulationTarget( elem, content ) {
@@ -27124,7 +27293,7 @@ function domManip( collection, args, callback, ignored ) {
27124
27293
 
27125
27294
  // Use the original fragment for the last item
27126
27295
  // instead of the first because it can end up
27127
- // being emptied incorrectly in certain situations (trac-8070).
27296
+ // being emptied incorrectly in certain situations (#8070).
27128
27297
  for ( ; i < l; i++ ) {
27129
27298
  node = fragment;
27130
27299
 
@@ -27146,7 +27315,7 @@ function domManip( collection, args, callback, ignored ) {
27146
27315
  if ( hasScripts ) {
27147
27316
  doc = scripts[ scripts.length - 1 ].ownerDocument;
27148
27317
 
27149
- // Re-enable scripts
27318
+ // Reenable scripts
27150
27319
  jQuery.map( scripts, restoreScript );
27151
27320
 
27152
27321
  // Evaluate executable scripts on first document insertion
@@ -27165,12 +27334,6 @@ function domManip( collection, args, callback, ignored ) {
27165
27334
  }, doc );
27166
27335
  }
27167
27336
  } 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.
27174
27337
  DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
27175
27338
  }
27176
27339
  }
@@ -27217,8 +27380,7 @@ jQuery.extend( {
27217
27380
  if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
27218
27381
  !jQuery.isXMLDoc( elem ) ) {
27219
27382
 
27220
- // We eschew jQuery#find here for performance reasons:
27221
- // https://jsperf.com/getall-vs-sizzle/2
27383
+ // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
27222
27384
  destElements = getAll( clone );
27223
27385
  srcElements = getAll( elem );
27224
27386
 
@@ -27454,12 +27616,9 @@ jQuery.each( {
27454
27616
  } );
27455
27617
  var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
27456
27618
 
27457
- var rcustomProp = /^--/;
27458
-
27459
-
27460
27619
  var getStyles = function( elem ) {
27461
27620
 
27462
- // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
27621
+ // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
27463
27622
  // IE throws on elements created in popups
27464
27623
  // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
27465
27624
  var view = elem.ownerDocument.defaultView;
@@ -27559,7 +27718,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
27559
27718
  }
27560
27719
 
27561
27720
  // Support: IE <=9 - 11 only
27562
- // Style of cloned element affects source element cloned (trac-8908)
27721
+ // Style of cloned element affects source element cloned (#8908)
27563
27722
  div.style.backgroundClip = "content-box";
27564
27723
  div.cloneNode( true ).style.backgroundClip = "";
27565
27724
  support.clearCloneStyle = div.style.backgroundClip === "content-box";
@@ -27603,7 +27762,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
27603
27762
  trChild = document.createElement( "div" );
27604
27763
 
27605
27764
  table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
27606
- tr.style.cssText = "box-sizing:content-box;border:1px solid";
27765
+ tr.style.cssText = "border:1px solid";
27607
27766
 
27608
27767
  // Support: Chrome 86+
27609
27768
  // Height set through cssText does not get applied.
@@ -27615,7 +27774,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
27615
27774
  // In our bodyBackground.html iframe,
27616
27775
  // display for all div elements is set to "inline",
27617
27776
  // which causes a problem only in Android 8 Chrome 86.
27618
- // Ensuring the div is `display: block`
27777
+ // Ensuring the div is display: block
27619
27778
  // gets around this issue.
27620
27779
  trChild.style.display = "block";
27621
27780
 
@@ -27639,7 +27798,6 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
27639
27798
 
27640
27799
  function curCSS( elem, name, computed ) {
27641
27800
  var width, minWidth, maxWidth, ret,
27642
- isCustomProp = rcustomProp.test( name ),
27643
27801
 
27644
27802
  // Support: Firefox 51+
27645
27803
  // Retrieving style before computed somehow
@@ -27650,42 +27808,11 @@ function curCSS( elem, name, computed ) {
27650
27808
  computed = computed || getStyles( elem );
27651
27809
 
27652
27810
  // getPropertyValue is needed for:
27653
- // .css('filter') (IE 9 only, trac-12537)
27654
- // .css('--customProperty) (gh-3144)
27811
+ // .css('filter') (IE 9 only, #12537)
27812
+ // .css('--customProperty) (#3144)
27655
27813
  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" )`
27666
27814
  ret = computed.getPropertyValue( name ) || computed[ name ];
27667
27815
 
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
-
27689
27816
  if ( ret === "" && !isAttached( elem ) ) {
27690
27817
  ret = jQuery.style( elem, name );
27691
27818
  }
@@ -27781,6 +27908,7 @@ var
27781
27908
  // except "table", "table-cell", or "table-caption"
27782
27909
  // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
27783
27910
  rdisplayswap = /^(none|table(?!-c[ea]).+)/,
27911
+ rcustomProp = /^--/,
27784
27912
  cssShow = { position: "absolute", visibility: "hidden", display: "block" },
27785
27913
  cssNormalTransform = {
27786
27914
  letterSpacing: "0",
@@ -27802,8 +27930,7 @@ function setPositiveNumber( _elem, value, subtract ) {
27802
27930
  function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
27803
27931
  var i = dimension === "width" ? 1 : 0,
27804
27932
  extra = 0,
27805
- delta = 0,
27806
- marginDelta = 0;
27933
+ delta = 0;
27807
27934
 
27808
27935
  // Adjustment may not be necessary
27809
27936
  if ( box === ( isBorderBox ? "border" : "content" ) ) {
@@ -27813,10 +27940,8 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
27813
27940
  for ( ; i < 4; i += 2 ) {
27814
27941
 
27815
27942
  // 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).
27818
27943
  if ( box === "margin" ) {
27819
- marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
27944
+ delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
27820
27945
  }
27821
27946
 
27822
27947
  // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
@@ -27867,7 +27992,7 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
27867
27992
  ) ) || 0;
27868
27993
  }
27869
27994
 
27870
- return delta + marginDelta;
27995
+ return delta;
27871
27996
  }
27872
27997
 
27873
27998
  function getWidthOrHeight( elem, dimension, extra ) {
@@ -27965,35 +28090,26 @@ jQuery.extend( {
27965
28090
 
27966
28091
  // Don't automatically add "px" to these possibly-unitless properties
27967
28092
  cssNumber: {
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
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
27997
28113
  },
27998
28114
 
27999
28115
  // Add in properties whose names you wish to fix before
@@ -28028,15 +28144,15 @@ jQuery.extend( {
28028
28144
  if ( value !== undefined ) {
28029
28145
  type = typeof value;
28030
28146
 
28031
- // Convert "+=" or "-=" to relative numbers (trac-7345)
28147
+ // Convert "+=" or "-=" to relative numbers (#7345)
28032
28148
  if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
28033
28149
  value = adjustCSS( elem, name, ret );
28034
28150
 
28035
- // Fixes bug trac-9237
28151
+ // Fixes bug #9237
28036
28152
  type = "number";
28037
28153
  }
28038
28154
 
28039
- // Make sure that null and NaN values aren't set (trac-7116)
28155
+ // Make sure that null and NaN values aren't set (#7116)
28040
28156
  if ( value == null || value !== value ) {
28041
28157
  return;
28042
28158
  }
@@ -28660,7 +28776,7 @@ function Animation( elem, properties, options ) {
28660
28776
  remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
28661
28777
 
28662
28778
  // Support: Android 2.3 only
28663
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
28779
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
28664
28780
  temp = remaining / animation.duration || 0,
28665
28781
  percent = 1 - temp,
28666
28782
  index = 0,
@@ -29050,6 +29166,7 @@ jQuery.fx.speeds = {
29050
29166
 
29051
29167
 
29052
29168
  // 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/
29053
29170
  jQuery.fn.delay = function( time, type ) {
29054
29171
  time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
29055
29172
  type = type || "fx";
@@ -29274,7 +29391,8 @@ jQuery.extend( {
29274
29391
  // Support: IE <=9 - 11 only
29275
29392
  // elem.tabIndex doesn't always return the
29276
29393
  // correct value when it hasn't been explicitly set
29277
- // Use proper attribute retrieval (trac-12072)
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)
29278
29396
  var tabindex = jQuery.find.attr( elem, "tabindex" );
29279
29397
 
29280
29398
  if ( tabindex ) {
@@ -29378,7 +29496,8 @@ function classesToArray( value ) {
29378
29496
 
29379
29497
  jQuery.fn.extend( {
29380
29498
  addClass: function( value ) {
29381
- var classNames, cur, curValue, className, i, finalValue;
29499
+ var classes, elem, cur, curValue, clazz, j, finalValue,
29500
+ i = 0;
29382
29501
 
29383
29502
  if ( isFunction( value ) ) {
29384
29503
  return this.each( function( j ) {
@@ -29386,35 +29505,36 @@ jQuery.fn.extend( {
29386
29505
  } );
29387
29506
  }
29388
29507
 
29389
- classNames = classesToArray( value );
29508
+ classes = classesToArray( value );
29390
29509
 
29391
- if ( classNames.length ) {
29392
- return this.each( function() {
29393
- curValue = getClass( this );
29394
- cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
29510
+ if ( classes.length ) {
29511
+ while ( ( elem = this[ i++ ] ) ) {
29512
+ curValue = getClass( elem );
29513
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
29395
29514
 
29396
29515
  if ( cur ) {
29397
- for ( i = 0; i < classNames.length; i++ ) {
29398
- className = classNames[ i ];
29399
- if ( cur.indexOf( " " + className + " " ) < 0 ) {
29400
- cur += className + " ";
29516
+ j = 0;
29517
+ while ( ( clazz = classes[ j++ ] ) ) {
29518
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
29519
+ cur += clazz + " ";
29401
29520
  }
29402
29521
  }
29403
29522
 
29404
29523
  // Only assign if different to avoid unneeded rendering.
29405
29524
  finalValue = stripAndCollapse( cur );
29406
29525
  if ( curValue !== finalValue ) {
29407
- this.setAttribute( "class", finalValue );
29526
+ elem.setAttribute( "class", finalValue );
29408
29527
  }
29409
29528
  }
29410
- } );
29529
+ }
29411
29530
  }
29412
29531
 
29413
29532
  return this;
29414
29533
  },
29415
29534
 
29416
29535
  removeClass: function( value ) {
29417
- var classNames, cur, curValue, className, i, finalValue;
29536
+ var classes, elem, cur, curValue, clazz, j, finalValue,
29537
+ i = 0;
29418
29538
 
29419
29539
  if ( isFunction( value ) ) {
29420
29540
  return this.each( function( j ) {
@@ -29426,42 +29546,45 @@ jQuery.fn.extend( {
29426
29546
  return this.attr( "class", "" );
29427
29547
  }
29428
29548
 
29429
- classNames = classesToArray( value );
29549
+ classes = classesToArray( value );
29430
29550
 
29431
- if ( classNames.length ) {
29432
- return this.each( function() {
29433
- curValue = getClass( this );
29551
+ if ( classes.length ) {
29552
+ while ( ( elem = this[ i++ ] ) ) {
29553
+ curValue = getClass( elem );
29434
29554
 
29435
29555
  // This expression is here for better compressibility (see addClass)
29436
- cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
29556
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
29437
29557
 
29438
29558
  if ( cur ) {
29439
- for ( i = 0; i < classNames.length; i++ ) {
29440
- className = classNames[ i ];
29559
+ j = 0;
29560
+ while ( ( clazz = classes[ j++ ] ) ) {
29441
29561
 
29442
29562
  // Remove *all* instances
29443
- while ( cur.indexOf( " " + className + " " ) > -1 ) {
29444
- cur = cur.replace( " " + className + " ", " " );
29563
+ while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
29564
+ cur = cur.replace( " " + clazz + " ", " " );
29445
29565
  }
29446
29566
  }
29447
29567
 
29448
29568
  // Only assign if different to avoid unneeded rendering.
29449
29569
  finalValue = stripAndCollapse( cur );
29450
29570
  if ( curValue !== finalValue ) {
29451
- this.setAttribute( "class", finalValue );
29571
+ elem.setAttribute( "class", finalValue );
29452
29572
  }
29453
29573
  }
29454
- } );
29574
+ }
29455
29575
  }
29456
29576
 
29457
29577
  return this;
29458
29578
  },
29459
29579
 
29460
29580
  toggleClass: function( value, stateVal ) {
29461
- var classNames, className, i, self,
29462
- type = typeof value,
29581
+ var type = typeof value,
29463
29582
  isValidValue = type === "string" || Array.isArray( value );
29464
29583
 
29584
+ if ( typeof stateVal === "boolean" && isValidValue ) {
29585
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
29586
+ }
29587
+
29465
29588
  if ( isFunction( value ) ) {
29466
29589
  return this.each( function( i ) {
29467
29590
  jQuery( this ).toggleClass(
@@ -29471,20 +29594,17 @@ jQuery.fn.extend( {
29471
29594
  } );
29472
29595
  }
29473
29596
 
29474
- if ( typeof stateVal === "boolean" && isValidValue ) {
29475
- return stateVal ? this.addClass( value ) : this.removeClass( value );
29476
- }
29477
-
29478
- classNames = classesToArray( value );
29479
-
29480
29597
  return this.each( function() {
29598
+ var className, i, self, classNames;
29599
+
29481
29600
  if ( isValidValue ) {
29482
29601
 
29483
29602
  // Toggle individual class names
29603
+ i = 0;
29484
29604
  self = jQuery( this );
29605
+ classNames = classesToArray( value );
29485
29606
 
29486
- for ( i = 0; i < classNames.length; i++ ) {
29487
- className = classNames[ i ];
29607
+ while ( ( className = classNames[ i++ ] ) ) {
29488
29608
 
29489
29609
  // Check each className given, space separated list
29490
29610
  if ( self.hasClass( className ) ) {
@@ -29618,7 +29738,7 @@ jQuery.extend( {
29618
29738
  val :
29619
29739
 
29620
29740
  // Support: IE <=10 - 11 only
29621
- // option.text throws exceptions (trac-14686, trac-14858)
29741
+ // option.text throws exceptions (#14686, #14858)
29622
29742
  // Strip and collapse whitespace
29623
29743
  // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
29624
29744
  stripAndCollapse( jQuery.text( elem ) );
@@ -29645,7 +29765,7 @@ jQuery.extend( {
29645
29765
  option = options[ i ];
29646
29766
 
29647
29767
  // Support: IE <=9 only
29648
- // IE8-9 doesn't update selected after form reset (trac-2551)
29768
+ // IE8-9 doesn't update selected after form reset (#2551)
29649
29769
  if ( ( option.selected || i === index ) &&
29650
29770
 
29651
29771
  // Don't return options that are disabled or in a disabled optgroup
@@ -29719,39 +29839,9 @@ jQuery.each( [ "radio", "checkbox" ], function() {
29719
29839
 
29720
29840
 
29721
29841
  // Return jQuery for attributes-only inclusion
29722
- var location = window.location;
29723
-
29724
- var nonce = { guid: Date.now() };
29725
-
29726
- var rquery = ( /\?/ );
29727
-
29728
29842
 
29729
29843
 
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
- };
29844
+ support.focusin = "onfocusin" in window;
29755
29845
 
29756
29846
 
29757
29847
  var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
@@ -29818,8 +29908,8 @@ jQuery.extend( jQuery.event, {
29818
29908
  return;
29819
29909
  }
29820
29910
 
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)
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)
29823
29913
  if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
29824
29914
 
29825
29915
  bubbleType = special.delegateType || type;
@@ -29871,7 +29961,7 @@ jQuery.extend( jQuery.event, {
29871
29961
  acceptData( elem ) ) {
29872
29962
 
29873
29963
  // Call a native DOM method on the target with the same name as the event.
29874
- // Don't do default actions on window, that's where global variables be (trac-6170)
29964
+ // Don't do default actions on window, that's where global variables be (#6170)
29875
29965
  if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
29876
29966
 
29877
29967
  // Don't re-trigger an onFOO event when we call its FOO() method
@@ -29939,6 +30029,85 @@ jQuery.fn.extend( {
29939
30029
  } );
29940
30030
 
29941
30031
 
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
+
29942
30111
  var
29943
30112
  rbracket = /\[\]$/,
29944
30113
  rCRLF = /\r?\n/g,
@@ -30066,7 +30235,7 @@ var
30066
30235
  rantiCache = /([?&])_=[^&]*/,
30067
30236
  rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
30068
30237
 
30069
- // trac-7653, trac-8125, trac-8152: local protocol detection
30238
+ // #7653, #8125, #8152: local protocol detection
30070
30239
  rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
30071
30240
  rnoContent = /^(?:GET|HEAD)$/,
30072
30241
  rprotocol = /^\/\//,
@@ -30089,7 +30258,7 @@ var
30089
30258
  */
30090
30259
  transports = {},
30091
30260
 
30092
- // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
30261
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
30093
30262
  allTypes = "*/".concat( "*" ),
30094
30263
 
30095
30264
  // Anchor tag for parsing the document origin
@@ -30160,7 +30329,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
30160
30329
 
30161
30330
  // A special extend for ajax options
30162
30331
  // that takes "flat" options (not to be deep extended)
30163
- // Fixes trac-9887
30332
+ // Fixes #9887
30164
30333
  function ajaxExtend( target, src ) {
30165
30334
  var key, deep,
30166
30335
  flatOptions = jQuery.ajaxSettings.flatOptions || {};
@@ -30571,12 +30740,12 @@ jQuery.extend( {
30571
30740
  deferred.promise( jqXHR );
30572
30741
 
30573
30742
  // Add protocol if not provided (prefilters might expect it)
30574
- // Handle falsy url in the settings object (trac-10093: consistency with old signature)
30743
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
30575
30744
  // We also use the url parameter if available
30576
30745
  s.url = ( ( url || s.url || location.href ) + "" )
30577
30746
  .replace( rprotocol, location.protocol + "//" );
30578
30747
 
30579
- // Alias method option to type as per ticket trac-12004
30748
+ // Alias method option to type as per ticket #12004
30580
30749
  s.type = options.method || options.type || s.method || s.type;
30581
30750
 
30582
30751
  // Extract dataTypes list
@@ -30619,7 +30788,7 @@ jQuery.extend( {
30619
30788
  }
30620
30789
 
30621
30790
  // We can fire global events as of now if asked to
30622
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
30791
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
30623
30792
  fireGlobals = jQuery.event && s.global;
30624
30793
 
30625
30794
  // Watch for a new set of requests
@@ -30648,7 +30817,7 @@ jQuery.extend( {
30648
30817
  if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
30649
30818
  cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
30650
30819
 
30651
- // trac-9682: remove data so that it's not used in an eventual retry
30820
+ // #9682: remove data so that it's not used in an eventual retry
30652
30821
  delete s.data;
30653
30822
  }
30654
30823
 
@@ -30921,7 +31090,7 @@ jQuery._evalUrl = function( url, options, doc ) {
30921
31090
  return jQuery.ajax( {
30922
31091
  url: url,
30923
31092
 
30924
- // Make this explicit, since user can override this through ajaxSetup (trac-11264)
31093
+ // Make this explicit, since user can override this through ajaxSetup (#11264)
30925
31094
  type: "GET",
30926
31095
  dataType: "script",
30927
31096
  cache: true,
@@ -31030,7 +31199,7 @@ var xhrSuccessStatus = {
31030
31199
  0: 200,
31031
31200
 
31032
31201
  // Support: IE <=9 only
31033
- // trac-1450: sometimes IE returns 1223 when it should be 204
31202
+ // #1450: sometimes IE returns 1223 when it should be 204
31034
31203
  1223: 204
31035
31204
  },
31036
31205
  xhrSupported = jQuery.ajaxSettings.xhr();
@@ -31102,7 +31271,7 @@ jQuery.ajaxTransport( function( options ) {
31102
31271
  } else {
31103
31272
  complete(
31104
31273
 
31105
- // File: protocol always yields status 0; see trac-8605, trac-14207
31274
+ // File: protocol always yields status 0; see #8605, #14207
31106
31275
  xhr.status,
31107
31276
  xhr.statusText
31108
31277
  );
@@ -31163,7 +31332,7 @@ jQuery.ajaxTransport( function( options ) {
31163
31332
  xhr.send( options.hasContent && options.data || null );
31164
31333
  } catch ( e ) {
31165
31334
 
31166
- // trac-14683: Only rethrow if this hasn't been notified as an error yet
31335
+ // #14683: Only rethrow if this hasn't been notified as an error yet
31167
31336
  if ( callback ) {
31168
31337
  throw e;
31169
31338
  }
@@ -31783,9 +31952,7 @@ jQuery.fn.extend( {
31783
31952
  },
31784
31953
 
31785
31954
  hover: function( fnOver, fnOut ) {
31786
- return this
31787
- .on( "mouseenter", fnOver )
31788
- .on( "mouseleave", fnOut || fnOver );
31955
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
31789
31956
  }
31790
31957
  } );
31791
31958
 
@@ -31809,9 +31976,7 @@ jQuery.each(
31809
31976
 
31810
31977
  // Support: Android <=4.0 only
31811
31978
  // Make sure we trim BOM and NBSP
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;
31979
+ var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
31815
31980
 
31816
31981
  // Bind a function to a context, optionally partially applying any
31817
31982
  // arguments.
@@ -31878,7 +32043,7 @@ jQuery.isNumeric = function( obj ) {
31878
32043
  jQuery.trim = function( text ) {
31879
32044
  return text == null ?
31880
32045
  "" :
31881
- ( text + "" ).replace( rtrim, "$1" );
32046
+ ( text + "" ).replace( rtrim, "" );
31882
32047
  };
31883
32048
 
31884
32049
 
@@ -31926,8 +32091,8 @@ jQuery.noConflict = function( deep ) {
31926
32091
  };
31927
32092
 
31928
32093
  // Expose jQuery and $ identifiers, even in AMD
31929
- // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
31930
- // and CommonJS for browser emulators (trac-13566)
32094
+ // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
32095
+ // and CommonJS for browser emulators (#13566)
31931
32096
  if ( typeof noGlobal === "undefined" ) {
31932
32097
  window.jQuery = window.$ = jQuery;
31933
32098
  }