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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21222,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
  }