utopia-project 0.20.2 → 0.21.0

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * jQuery JavaScript Library v3.6.0
2
+ * jQuery JavaScript Library v3.6.3
3
3
  * https://jquery.com/
4
4
  *
5
5
  * Includes Sizzle.js
@@ -9,7 +9,7 @@
9
9
  * Released under the MIT license
10
10
  * https://jquery.org/license
11
11
  *
12
- * Date: 2021-03-02T17:08Z
12
+ * Date: 2022-12-20T21:28Z
13
13
  */
14
14
  ( function( global, factory ) {
15
15
 
@@ -23,7 +23,7 @@
23
23
  // (such as Node.js), expose a factory as module.exports.
24
24
  // This accentuates the need for the creation of a real `window`.
25
25
  // e.g. var jQuery = require("jquery")(window);
26
- // See ticket #14549 for more info.
26
+ // See ticket trac-14549 for more info.
27
27
  module.exports = global.document ?
28
28
  factory( global, true ) :
29
29
  function( w ) {
@@ -151,7 +151,7 @@ function toType( obj ) {
151
151
 
152
152
 
153
153
  var
154
- version = "3.6.0",
154
+ version = "3.6.3",
155
155
 
156
156
  // Define a local copy of jQuery
157
157
  jQuery = function( selector, context ) {
@@ -522,14 +522,14 @@ function isArrayLike( obj ) {
522
522
  }
523
523
  var Sizzle =
524
524
  /*!
525
- * Sizzle CSS Selector Engine v2.3.6
525
+ * Sizzle CSS Selector Engine v2.3.9
526
526
  * https://sizzlejs.com/
527
527
  *
528
528
  * Copyright JS Foundation and other contributors
529
529
  * Released under the MIT license
530
530
  * https://js.foundation/
531
531
  *
532
- * Date: 2021-02-16
532
+ * Date: 2022-12-19
533
533
  */
534
534
  ( function( window ) {
535
535
  var i,
@@ -879,6 +879,27 @@ function Sizzle( selector, context, results, seed ) {
879
879
  }
880
880
 
881
881
  try {
882
+
883
+ // `qSA` may not throw for unrecognized parts using forgiving parsing:
884
+ // https://drafts.csswg.org/selectors/#forgiving-selector
885
+ // like the `:has()` pseudo-class:
886
+ // https://drafts.csswg.org/selectors/#relational
887
+ // `CSS.supports` is still expected to return `false` then:
888
+ // https://drafts.csswg.org/css-conditional-4/#typedef-supports-selector-fn
889
+ // https://drafts.csswg.org/css-conditional-4/#dfn-support-selector
890
+ if ( support.cssSupportsSelector &&
891
+
892
+ // eslint-disable-next-line no-undef
893
+ !CSS.supports( "selector(:is(" + newSelector + "))" ) ) {
894
+
895
+ // Support: IE 11+
896
+ // Throw to get to the same code path as an error directly in qSA.
897
+ // Note: once we only support browser supporting
898
+ // `CSS.supports('selector(...)')`, we can most likely drop
899
+ // the `try-catch`. IE doesn't implement the API.
900
+ throw new Error();
901
+ }
902
+
882
903
  push.apply( results,
883
904
  newContext.querySelectorAll( newSelector )
884
905
  );
@@ -1174,6 +1195,31 @@ setDocument = Sizzle.setDocument = function( node ) {
1174
1195
  !el.querySelectorAll( ":scope fieldset div" ).length;
1175
1196
  } );
1176
1197
 
1198
+ // Support: Chrome 105+, Firefox 104+, Safari 15.4+
1199
+ // Make sure forgiving mode is not used in `CSS.supports( "selector(...)" )`.
1200
+ //
1201
+ // `:is()` uses a forgiving selector list as an argument and is widely
1202
+ // implemented, so it's a good one to test against.
1203
+ support.cssSupportsSelector = assert( function() {
1204
+ /* eslint-disable no-undef */
1205
+
1206
+ return CSS.supports( "selector(*)" ) &&
1207
+
1208
+ // Support: Firefox 78-81 only
1209
+ // In old Firefox, `:is()` didn't use forgiving parsing. In that case,
1210
+ // fail this test as there's no selector to test against that.
1211
+ // `CSS.supports` uses unforgiving parsing
1212
+ document.querySelectorAll( ":is(:jqfake)" ) &&
1213
+
1214
+ // `*` is needed as Safari & newer Chrome implemented something in between
1215
+ // for `:has()` - it throws in `qSA` if it only contains an unsupported
1216
+ // argument but multiple ones, one of which is supported, are fine.
1217
+ // We want to play safe in case `:is()` gets the same treatment.
1218
+ !CSS.supports( "selector(:is(*,:jqfake))" );
1219
+
1220
+ /* eslint-enable */
1221
+ } );
1222
+
1177
1223
  /* Attributes
1178
1224
  ---------------------------------------------------------------------- */
1179
1225
 
@@ -1440,6 +1486,17 @@ setDocument = Sizzle.setDocument = function( node ) {
1440
1486
  } );
1441
1487
  }
1442
1488
 
1489
+ if ( !support.cssSupportsSelector ) {
1490
+
1491
+ // Support: Chrome 105+, Safari 15.4+
1492
+ // `:has()` uses a forgiving selector list as an argument so our regular
1493
+ // `try-catch` mechanism fails to catch `:has()` with arguments not supported
1494
+ // natively like `:has(:contains("Foo"))`. Where supported & spec-compliant,
1495
+ // we now use `CSS.supports("selector(:is(SELECTOR_TO_BE_TESTED))")`, but
1496
+ // outside that we mark `:has` as buggy.
1497
+ rbuggyQSA.push( ":has" );
1498
+ }
1499
+
1443
1500
  rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
1444
1501
  rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
1445
1502
 
@@ -1452,7 +1509,14 @@ setDocument = Sizzle.setDocument = function( node ) {
1452
1509
  // As in, an element does not contain itself
1453
1510
  contains = hasCompare || rnative.test( docElem.contains ) ?
1454
1511
  function( a, b ) {
1455
- var adown = a.nodeType === 9 ? a.documentElement : a,
1512
+
1513
+ // Support: IE <9 only
1514
+ // IE doesn't have `contains` on `document` so we need to check for
1515
+ // `documentElement` presence.
1516
+ // We need to fall back to `a` when `documentElement` is missing
1517
+ // as `ownerDocument` of elements within `<template/>` may have
1518
+ // a null one - a default behavior of all modern browsers.
1519
+ var adown = a.nodeType === 9 && a.documentElement || a,
1456
1520
  bup = b && b.parentNode;
1457
1521
  return a === bup || !!( bup && bup.nodeType === 1 && (
1458
1522
  adown.contains ?
@@ -2242,7 +2306,7 @@ Expr = Sizzle.selectors = {
2242
2306
  return elem.nodeName.toLowerCase() === "input" &&
2243
2307
  elem.type === "text" &&
2244
2308
 
2245
- // Support: IE<8
2309
+ // Support: IE <10 only
2246
2310
  // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
2247
2311
  ( ( attr = elem.getAttribute( "type" ) ) == null ||
2248
2312
  attr.toLowerCase() === "text" );
@@ -3129,8 +3193,8 @@ jQuery.fn.extend( {
3129
3193
  var rootjQuery,
3130
3194
 
3131
3195
  // A simple way to check for HTML strings
3132
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
3133
- // Strict HTML recognition (#11290: must start with <)
3196
+ // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
3197
+ // Strict HTML recognition (trac-11290: must start with <)
3134
3198
  // Shortcut simple #id case for speed
3135
3199
  rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
3136
3200
 
@@ -4087,7 +4151,7 @@ jQuery.extend( {
4087
4151
  isReady: false,
4088
4152
 
4089
4153
  // A counter to track how many items to wait for before
4090
- // the ready event fires. See #6781
4154
+ // the ready event fires. See trac-6781
4091
4155
  readyWait: 1,
4092
4156
 
4093
4157
  // Handle when the DOM is ready
@@ -4215,7 +4279,7 @@ function fcamelCase( _all, letter ) {
4215
4279
 
4216
4280
  // Convert dashed to camelCase; used by the css and data modules
4217
4281
  // Support: IE <=9 - 11, Edge 12 - 15
4218
- // Microsoft forgot to hump their vendor prefix (#9572)
4282
+ // Microsoft forgot to hump their vendor prefix (trac-9572)
4219
4283
  function camelCase( string ) {
4220
4284
  return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
4221
4285
  }
@@ -4251,7 +4315,7 @@ Data.prototype = {
4251
4315
  value = {};
4252
4316
 
4253
4317
  // We can accept data for non-element nodes in modern browsers,
4254
- // but we should not, see #8335.
4318
+ // but we should not, see trac-8335.
4255
4319
  // Always return an empty object.
4256
4320
  if ( acceptData( owner ) ) {
4257
4321
 
@@ -4490,7 +4554,7 @@ jQuery.fn.extend( {
4490
4554
  while ( i-- ) {
4491
4555
 
4492
4556
  // Support: IE 11 only
4493
- // The attrs elements can be null (#14894)
4557
+ // The attrs elements can be null (trac-14894)
4494
4558
  if ( attrs[ i ] ) {
4495
4559
  name = attrs[ i ].name;
4496
4560
  if ( name.indexOf( "data-" ) === 0 ) {
@@ -4913,9 +4977,9 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
4913
4977
  input = document.createElement( "input" );
4914
4978
 
4915
4979
  // Support: Android 4.0 - 4.3 only
4916
- // Check state lost if the name is set (#11217)
4980
+ // Check state lost if the name is set (trac-11217)
4917
4981
  // Support: Windows Web Apps (WWA)
4918
- // `name` and `type` must use .setAttribute for WWA (#14901)
4982
+ // `name` and `type` must use .setAttribute for WWA (trac-14901)
4919
4983
  input.setAttribute( "type", "radio" );
4920
4984
  input.setAttribute( "checked", "checked" );
4921
4985
  input.setAttribute( "name", "t" );
@@ -4939,7 +5003,7 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
4939
5003
  } )();
4940
5004
 
4941
5005
 
4942
- // We have to close these tags to support XHTML (#13200)
5006
+ // We have to close these tags to support XHTML (trac-13200)
4943
5007
  var wrapMap = {
4944
5008
 
4945
5009
  // XHTML parsers do not magically insert elements in the
@@ -4965,7 +5029,7 @@ if ( !support.option ) {
4965
5029
  function getAll( context, tag ) {
4966
5030
 
4967
5031
  // Support: IE <=9 - 11 only
4968
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
5032
+ // Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
4969
5033
  var ret;
4970
5034
 
4971
5035
  if ( typeof context.getElementsByTagName !== "undefined" ) {
@@ -5048,7 +5112,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
5048
5112
  // Remember the top-level container
5049
5113
  tmp = fragment.firstChild;
5050
5114
 
5051
- // Ensure the created nodes are orphaned (#12392)
5115
+ // Ensure the created nodes are orphaned (trac-12392)
5052
5116
  tmp.textContent = "";
5053
5117
  }
5054
5118
  }
@@ -5469,15 +5533,15 @@ jQuery.event = {
5469
5533
 
5470
5534
  for ( ; cur !== this; cur = cur.parentNode || this ) {
5471
5535
 
5472
- // Don't check non-elements (#13208)
5473
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5536
+ // Don't check non-elements (trac-13208)
5537
+ // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
5474
5538
  if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
5475
5539
  matchedHandlers = [];
5476
5540
  matchedSelectors = {};
5477
5541
  for ( i = 0; i < delegateCount; i++ ) {
5478
5542
  handleObj = handlers[ i ];
5479
5543
 
5480
- // Don't conflict with Object.prototype properties (#13203)
5544
+ // Don't conflict with Object.prototype properties (trac-13203)
5481
5545
  sel = handleObj.selector + " ";
5482
5546
 
5483
5547
  if ( matchedSelectors[ sel ] === undefined ) {
@@ -5731,7 +5795,7 @@ jQuery.Event = function( src, props ) {
5731
5795
 
5732
5796
  // Create target properties
5733
5797
  // Support: Safari <=6 - 7 only
5734
- // Target should not be a text node (#504, #13143)
5798
+ // Target should not be a text node (trac-504, trac-13143)
5735
5799
  this.target = ( src.target && src.target.nodeType === 3 ) ?
5736
5800
  src.target.parentNode :
5737
5801
  src.target;
@@ -5854,10 +5918,10 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
5854
5918
  return true;
5855
5919
  },
5856
5920
 
5857
- // Suppress native focus or blur as it's already being fired
5858
- // in leverageNative.
5859
- _default: function() {
5860
- return true;
5921
+ // Suppress native focus or blur if we're currently inside
5922
+ // a leveraged native-event stack
5923
+ _default: function( event ) {
5924
+ return dataPriv.get( event.target, type );
5861
5925
  },
5862
5926
 
5863
5927
  delegateType: delegateType
@@ -5956,7 +6020,8 @@ var
5956
6020
 
5957
6021
  // checked="checked" or checked
5958
6022
  rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5959
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
6023
+
6024
+ rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
5960
6025
 
5961
6026
  // Prefer a tbody over its parent table for containing new rows
5962
6027
  function manipulationTarget( elem, content ) {
@@ -6070,7 +6135,7 @@ function domManip( collection, args, callback, ignored ) {
6070
6135
 
6071
6136
  // Use the original fragment for the last item
6072
6137
  // instead of the first because it can end up
6073
- // being emptied incorrectly in certain situations (#8070).
6138
+ // being emptied incorrectly in certain situations (trac-8070).
6074
6139
  for ( ; i < l; i++ ) {
6075
6140
  node = fragment;
6076
6141
 
@@ -6111,6 +6176,12 @@ function domManip( collection, args, callback, ignored ) {
6111
6176
  }, doc );
6112
6177
  }
6113
6178
  } else {
6179
+
6180
+ // Unwrap a CDATA section containing script contents. This shouldn't be
6181
+ // needed as in XML documents they're already not visible when
6182
+ // inspecting element contents and in HTML documents they have no
6183
+ // meaning but we're preserving that logic for backwards compatibility.
6184
+ // This will be removed completely in 4.0. See gh-4904.
6114
6185
  DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
6115
6186
  }
6116
6187
  }
@@ -6393,9 +6464,12 @@ jQuery.each( {
6393
6464
  } );
6394
6465
  var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
6395
6466
 
6467
+ var rcustomProp = /^--/;
6468
+
6469
+
6396
6470
  var getStyles = function( elem ) {
6397
6471
 
6398
- // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
6472
+ // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
6399
6473
  // IE throws on elements created in popups
6400
6474
  // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6401
6475
  var view = elem.ownerDocument.defaultView;
@@ -6430,6 +6504,15 @@ var swap = function( elem, options, callback ) {
6430
6504
 
6431
6505
  var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6432
6506
 
6507
+ var whitespace = "[\\x20\\t\\r\\n\\f]";
6508
+
6509
+
6510
+ var rtrimCSS = new RegExp(
6511
+ "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
6512
+ "g"
6513
+ );
6514
+
6515
+
6433
6516
 
6434
6517
 
6435
6518
  ( function() {
@@ -6495,7 +6578,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6495
6578
  }
6496
6579
 
6497
6580
  // Support: IE <=9 - 11 only
6498
- // Style of cloned element affects source element cloned (#8908)
6581
+ // Style of cloned element affects source element cloned (trac-8908)
6499
6582
  div.style.backgroundClip = "content-box";
6500
6583
  div.cloneNode( true ).style.backgroundClip = "";
6501
6584
  support.clearCloneStyle = div.style.backgroundClip === "content-box";
@@ -6575,6 +6658,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6575
6658
 
6576
6659
  function curCSS( elem, name, computed ) {
6577
6660
  var width, minWidth, maxWidth, ret,
6661
+ isCustomProp = rcustomProp.test( name ),
6578
6662
 
6579
6663
  // Support: Firefox 51+
6580
6664
  // Retrieving style before computed somehow
@@ -6585,11 +6669,42 @@ function curCSS( elem, name, computed ) {
6585
6669
  computed = computed || getStyles( elem );
6586
6670
 
6587
6671
  // getPropertyValue is needed for:
6588
- // .css('filter') (IE 9 only, #12537)
6589
- // .css('--customProperty) (#3144)
6672
+ // .css('filter') (IE 9 only, trac-12537)
6673
+ // .css('--customProperty) (gh-3144)
6590
6674
  if ( computed ) {
6675
+
6676
+ // Support: IE <=9 - 11+
6677
+ // IE only supports `"float"` in `getPropertyValue`; in computed styles
6678
+ // it's only available as `"cssFloat"`. We no longer modify properties
6679
+ // sent to `.css()` apart from camelCasing, so we need to check both.
6680
+ // Normally, this would create difference in behavior: if
6681
+ // `getPropertyValue` returns an empty string, the value returned
6682
+ // by `.css()` would be `undefined`. This is usually the case for
6683
+ // disconnected elements. However, in IE even disconnected elements
6684
+ // with no styles return `"none"` for `getPropertyValue( "float" )`
6591
6685
  ret = computed.getPropertyValue( name ) || computed[ name ];
6592
6686
 
6687
+ if ( isCustomProp && ret ) {
6688
+
6689
+ // Support: Firefox 105+, Chrome <=105+
6690
+ // Spec requires trimming whitespace for custom properties (gh-4926).
6691
+ // Firefox only trims leading whitespace. Chrome just collapses
6692
+ // both leading & trailing whitespace to a single space.
6693
+ //
6694
+ // Fall back to `undefined` if empty string returned.
6695
+ // This collapses a missing definition with property defined
6696
+ // and set to an empty string but there's no standard API
6697
+ // allowing us to differentiate them without a performance penalty
6698
+ // and returning `undefined` aligns with older jQuery.
6699
+ //
6700
+ // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
6701
+ // as whitespace while CSS does not, but this is not a problem
6702
+ // because CSS preprocessing replaces them with U+000A LINE FEED
6703
+ // (which *is* CSS whitespace)
6704
+ // https://www.w3.org/TR/css-syntax-3/#input-preprocessing
6705
+ ret = ret.replace( rtrimCSS, "$1" ) || undefined;
6706
+ }
6707
+
6593
6708
  if ( ret === "" && !isAttached( elem ) ) {
6594
6709
  ret = jQuery.style( elem, name );
6595
6710
  }
@@ -6685,7 +6800,6 @@ var
6685
6800
  // except "table", "table-cell", or "table-caption"
6686
6801
  // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
6687
6802
  rdisplayswap = /^(none|table(?!-c[ea]).+)/,
6688
- rcustomProp = /^--/,
6689
6803
  cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6690
6804
  cssNormalTransform = {
6691
6805
  letterSpacing: "0",
@@ -6921,15 +7035,15 @@ jQuery.extend( {
6921
7035
  if ( value !== undefined ) {
6922
7036
  type = typeof value;
6923
7037
 
6924
- // Convert "+=" or "-=" to relative numbers (#7345)
7038
+ // Convert "+=" or "-=" to relative numbers (trac-7345)
6925
7039
  if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
6926
7040
  value = adjustCSS( elem, name, ret );
6927
7041
 
6928
- // Fixes bug #9237
7042
+ // Fixes bug trac-9237
6929
7043
  type = "number";
6930
7044
  }
6931
7045
 
6932
- // Make sure that null and NaN values aren't set (#7116)
7046
+ // Make sure that null and NaN values aren't set (trac-7116)
6933
7047
  if ( value == null || value !== value ) {
6934
7048
  return;
6935
7049
  }
@@ -7553,7 +7667,7 @@ function Animation( elem, properties, options ) {
7553
7667
  remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
7554
7668
 
7555
7669
  // Support: Android 2.3 only
7556
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
7670
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
7557
7671
  temp = remaining / animation.duration || 0,
7558
7672
  percent = 1 - temp,
7559
7673
  index = 0,
@@ -7943,7 +8057,6 @@ jQuery.fx.speeds = {
7943
8057
 
7944
8058
 
7945
8059
  // Based off of the plugin by Clint Helfers, with permission.
7946
- // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
7947
8060
  jQuery.fn.delay = function( time, type ) {
7948
8061
  time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
7949
8062
  type = type || "fx";
@@ -8168,8 +8281,7 @@ jQuery.extend( {
8168
8281
  // Support: IE <=9 - 11 only
8169
8282
  // elem.tabIndex doesn't always return the
8170
8283
  // correct value when it hasn't been explicitly set
8171
- // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
8172
- // Use proper attribute retrieval(#12072)
8284
+ // Use proper attribute retrieval (trac-12072)
8173
8285
  var tabindex = jQuery.find.attr( elem, "tabindex" );
8174
8286
 
8175
8287
  if ( tabindex ) {
@@ -8273,8 +8385,7 @@ function classesToArray( value ) {
8273
8385
 
8274
8386
  jQuery.fn.extend( {
8275
8387
  addClass: function( value ) {
8276
- var classes, elem, cur, curValue, clazz, j, finalValue,
8277
- i = 0;
8388
+ var classNames, cur, curValue, className, i, finalValue;
8278
8389
 
8279
8390
  if ( isFunction( value ) ) {
8280
8391
  return this.each( function( j ) {
@@ -8282,36 +8393,35 @@ jQuery.fn.extend( {
8282
8393
  } );
8283
8394
  }
8284
8395
 
8285
- classes = classesToArray( value );
8396
+ classNames = classesToArray( value );
8286
8397
 
8287
- if ( classes.length ) {
8288
- while ( ( elem = this[ i++ ] ) ) {
8289
- curValue = getClass( elem );
8290
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8398
+ if ( classNames.length ) {
8399
+ return this.each( function() {
8400
+ curValue = getClass( this );
8401
+ cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8291
8402
 
8292
8403
  if ( cur ) {
8293
- j = 0;
8294
- while ( ( clazz = classes[ j++ ] ) ) {
8295
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
8296
- cur += clazz + " ";
8404
+ for ( i = 0; i < classNames.length; i++ ) {
8405
+ className = classNames[ i ];
8406
+ if ( cur.indexOf( " " + className + " " ) < 0 ) {
8407
+ cur += className + " ";
8297
8408
  }
8298
8409
  }
8299
8410
 
8300
8411
  // Only assign if different to avoid unneeded rendering.
8301
8412
  finalValue = stripAndCollapse( cur );
8302
8413
  if ( curValue !== finalValue ) {
8303
- elem.setAttribute( "class", finalValue );
8414
+ this.setAttribute( "class", finalValue );
8304
8415
  }
8305
8416
  }
8306
- }
8417
+ } );
8307
8418
  }
8308
8419
 
8309
8420
  return this;
8310
8421
  },
8311
8422
 
8312
8423
  removeClass: function( value ) {
8313
- var classes, elem, cur, curValue, clazz, j, finalValue,
8314
- i = 0;
8424
+ var classNames, cur, curValue, className, i, finalValue;
8315
8425
 
8316
8426
  if ( isFunction( value ) ) {
8317
8427
  return this.each( function( j ) {
@@ -8323,45 +8433,42 @@ jQuery.fn.extend( {
8323
8433
  return this.attr( "class", "" );
8324
8434
  }
8325
8435
 
8326
- classes = classesToArray( value );
8436
+ classNames = classesToArray( value );
8327
8437
 
8328
- if ( classes.length ) {
8329
- while ( ( elem = this[ i++ ] ) ) {
8330
- curValue = getClass( elem );
8438
+ if ( classNames.length ) {
8439
+ return this.each( function() {
8440
+ curValue = getClass( this );
8331
8441
 
8332
8442
  // This expression is here for better compressibility (see addClass)
8333
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8443
+ cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8334
8444
 
8335
8445
  if ( cur ) {
8336
- j = 0;
8337
- while ( ( clazz = classes[ j++ ] ) ) {
8446
+ for ( i = 0; i < classNames.length; i++ ) {
8447
+ className = classNames[ i ];
8338
8448
 
8339
8449
  // Remove *all* instances
8340
- while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
8341
- cur = cur.replace( " " + clazz + " ", " " );
8450
+ while ( cur.indexOf( " " + className + " " ) > -1 ) {
8451
+ cur = cur.replace( " " + className + " ", " " );
8342
8452
  }
8343
8453
  }
8344
8454
 
8345
8455
  // Only assign if different to avoid unneeded rendering.
8346
8456
  finalValue = stripAndCollapse( cur );
8347
8457
  if ( curValue !== finalValue ) {
8348
- elem.setAttribute( "class", finalValue );
8458
+ this.setAttribute( "class", finalValue );
8349
8459
  }
8350
8460
  }
8351
- }
8461
+ } );
8352
8462
  }
8353
8463
 
8354
8464
  return this;
8355
8465
  },
8356
8466
 
8357
8467
  toggleClass: function( value, stateVal ) {
8358
- var type = typeof value,
8468
+ var classNames, className, i, self,
8469
+ type = typeof value,
8359
8470
  isValidValue = type === "string" || Array.isArray( value );
8360
8471
 
8361
- if ( typeof stateVal === "boolean" && isValidValue ) {
8362
- return stateVal ? this.addClass( value ) : this.removeClass( value );
8363
- }
8364
-
8365
8472
  if ( isFunction( value ) ) {
8366
8473
  return this.each( function( i ) {
8367
8474
  jQuery( this ).toggleClass(
@@ -8371,17 +8478,20 @@ jQuery.fn.extend( {
8371
8478
  } );
8372
8479
  }
8373
8480
 
8374
- return this.each( function() {
8375
- var className, i, self, classNames;
8481
+ if ( typeof stateVal === "boolean" && isValidValue ) {
8482
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
8483
+ }
8484
+
8485
+ classNames = classesToArray( value );
8376
8486
 
8487
+ return this.each( function() {
8377
8488
  if ( isValidValue ) {
8378
8489
 
8379
8490
  // Toggle individual class names
8380
- i = 0;
8381
8491
  self = jQuery( this );
8382
- classNames = classesToArray( value );
8383
8492
 
8384
- while ( ( className = classNames[ i++ ] ) ) {
8493
+ for ( i = 0; i < classNames.length; i++ ) {
8494
+ className = classNames[ i ];
8385
8495
 
8386
8496
  // Check each className given, space separated list
8387
8497
  if ( self.hasClass( className ) ) {
@@ -8515,7 +8625,7 @@ jQuery.extend( {
8515
8625
  val :
8516
8626
 
8517
8627
  // Support: IE <=10 - 11 only
8518
- // option.text throws exceptions (#14686, #14858)
8628
+ // option.text throws exceptions (trac-14686, trac-14858)
8519
8629
  // Strip and collapse whitespace
8520
8630
  // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
8521
8631
  stripAndCollapse( jQuery.text( elem ) );
@@ -8542,7 +8652,7 @@ jQuery.extend( {
8542
8652
  option = options[ i ];
8543
8653
 
8544
8654
  // Support: IE <=9 only
8545
- // IE8-9 doesn't update selected after form reset (#2551)
8655
+ // IE8-9 doesn't update selected after form reset (trac-2551)
8546
8656
  if ( ( option.selected || i === index ) &&
8547
8657
 
8548
8658
  // Don't return options that are disabled or in a disabled optgroup
@@ -8685,8 +8795,8 @@ jQuery.extend( jQuery.event, {
8685
8795
  return;
8686
8796
  }
8687
8797
 
8688
- // Determine event propagation path in advance, per W3C events spec (#9951)
8689
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
8798
+ // Determine event propagation path in advance, per W3C events spec (trac-9951)
8799
+ // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
8690
8800
  if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
8691
8801
 
8692
8802
  bubbleType = special.delegateType || type;
@@ -8738,7 +8848,7 @@ jQuery.extend( jQuery.event, {
8738
8848
  acceptData( elem ) ) {
8739
8849
 
8740
8850
  // Call a native DOM method on the target with the same name as the event.
8741
- // Don't do default actions on window, that's where global variables be (#6170)
8851
+ // Don't do default actions on window, that's where global variables be (trac-6170)
8742
8852
  if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
8743
8853
 
8744
8854
  // Don't re-trigger an onFOO event when we call its FOO() method
@@ -9012,7 +9122,7 @@ var
9012
9122
  rantiCache = /([?&])_=[^&]*/,
9013
9123
  rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
9014
9124
 
9015
- // #7653, #8125, #8152: local protocol detection
9125
+ // trac-7653, trac-8125, trac-8152: local protocol detection
9016
9126
  rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
9017
9127
  rnoContent = /^(?:GET|HEAD)$/,
9018
9128
  rprotocol = /^\/\//,
@@ -9035,7 +9145,7 @@ var
9035
9145
  */
9036
9146
  transports = {},
9037
9147
 
9038
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
9148
+ // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
9039
9149
  allTypes = "*/".concat( "*" ),
9040
9150
 
9041
9151
  // Anchor tag for parsing the document origin
@@ -9106,7 +9216,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
9106
9216
 
9107
9217
  // A special extend for ajax options
9108
9218
  // that takes "flat" options (not to be deep extended)
9109
- // Fixes #9887
9219
+ // Fixes trac-9887
9110
9220
  function ajaxExtend( target, src ) {
9111
9221
  var key, deep,
9112
9222
  flatOptions = jQuery.ajaxSettings.flatOptions || {};
@@ -9517,12 +9627,12 @@ jQuery.extend( {
9517
9627
  deferred.promise( jqXHR );
9518
9628
 
9519
9629
  // Add protocol if not provided (prefilters might expect it)
9520
- // Handle falsy url in the settings object (#10093: consistency with old signature)
9630
+ // Handle falsy url in the settings object (trac-10093: consistency with old signature)
9521
9631
  // We also use the url parameter if available
9522
9632
  s.url = ( ( url || s.url || location.href ) + "" )
9523
9633
  .replace( rprotocol, location.protocol + "//" );
9524
9634
 
9525
- // Alias method option to type as per ticket #12004
9635
+ // Alias method option to type as per ticket trac-12004
9526
9636
  s.type = options.method || options.type || s.method || s.type;
9527
9637
 
9528
9638
  // Extract dataTypes list
@@ -9565,7 +9675,7 @@ jQuery.extend( {
9565
9675
  }
9566
9676
 
9567
9677
  // We can fire global events as of now if asked to
9568
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
9678
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
9569
9679
  fireGlobals = jQuery.event && s.global;
9570
9680
 
9571
9681
  // Watch for a new set of requests
@@ -9594,7 +9704,7 @@ jQuery.extend( {
9594
9704
  if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
9595
9705
  cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
9596
9706
 
9597
- // #9682: remove data so that it's not used in an eventual retry
9707
+ // trac-9682: remove data so that it's not used in an eventual retry
9598
9708
  delete s.data;
9599
9709
  }
9600
9710
 
@@ -9867,7 +9977,7 @@ jQuery._evalUrl = function( url, options, doc ) {
9867
9977
  return jQuery.ajax( {
9868
9978
  url: url,
9869
9979
 
9870
- // Make this explicit, since user can override this through ajaxSetup (#11264)
9980
+ // Make this explicit, since user can override this through ajaxSetup (trac-11264)
9871
9981
  type: "GET",
9872
9982
  dataType: "script",
9873
9983
  cache: true,
@@ -9976,7 +10086,7 @@ var xhrSuccessStatus = {
9976
10086
  0: 200,
9977
10087
 
9978
10088
  // Support: IE <=9 only
9979
- // #1450: sometimes IE returns 1223 when it should be 204
10089
+ // trac-1450: sometimes IE returns 1223 when it should be 204
9980
10090
  1223: 204
9981
10091
  },
9982
10092
  xhrSupported = jQuery.ajaxSettings.xhr();
@@ -10048,7 +10158,7 @@ jQuery.ajaxTransport( function( options ) {
10048
10158
  } else {
10049
10159
  complete(
10050
10160
 
10051
- // File: protocol always yields status 0; see #8605, #14207
10161
+ // File: protocol always yields status 0; see trac-8605, trac-14207
10052
10162
  xhr.status,
10053
10163
  xhr.statusText
10054
10164
  );
@@ -10109,7 +10219,7 @@ jQuery.ajaxTransport( function( options ) {
10109
10219
  xhr.send( options.hasContent && options.data || null );
10110
10220
  } catch ( e ) {
10111
10221
 
10112
- // #14683: Only rethrow if this hasn't been notified as an error yet
10222
+ // trac-14683: Only rethrow if this hasn't been notified as an error yet
10113
10223
  if ( callback ) {
10114
10224
  throw e;
10115
10225
  }
@@ -10753,7 +10863,9 @@ jQuery.each(
10753
10863
 
10754
10864
  // Support: Android <=4.0 only
10755
10865
  // Make sure we trim BOM and NBSP
10756
- var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
10866
+ // Require that the "whitespace run" starts from a non-whitespace
10867
+ // to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
10868
+ var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
10757
10869
 
10758
10870
  // Bind a function to a context, optionally partially applying any
10759
10871
  // arguments.
@@ -10820,7 +10932,7 @@ jQuery.isNumeric = function( obj ) {
10820
10932
  jQuery.trim = function( text ) {
10821
10933
  return text == null ?
10822
10934
  "" :
10823
- ( text + "" ).replace( rtrim, "" );
10935
+ ( text + "" ).replace( rtrim, "$1" );
10824
10936
  };
10825
10937
 
10826
10938
 
@@ -10868,8 +10980,8 @@ jQuery.noConflict = function( deep ) {
10868
10980
  };
10869
10981
 
10870
10982
  // Expose jQuery and $ identifiers, even in AMD
10871
- // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
10872
- // and CommonJS for browser emulators (#13566)
10983
+ // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
10984
+ // and CommonJS for browser emulators (trac-13566)
10873
10985
  if ( typeof noGlobal === "undefined" ) {
10874
10986
  window.jQuery = window.$ = jQuery;
10875
10987
  }