jquery-rails 4.2.1 → 4.2.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of jquery-rails might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 465698ea71d2cfda07c7bc5dab8cb50fb34ab56f
4
- data.tar.gz: c937ef622e018d620633e6fd613c67b7198c23f7
3
+ metadata.gz: 7996d2fc15acd7a01d2f6647ade819334d057331
4
+ data.tar.gz: 418862a8521eb9e60228fc51a6b097884a0d100c
5
5
  SHA512:
6
- metadata.gz: bb9015f2ba8cfa59a8d1a5e820ff3f70c74e3fef6116253849e1a92e5aab0fc2deb8596974d9b149f3f5a57c892124c52d9b135a44bd75fd8188f143439225c3
7
- data.tar.gz: 56932e346d376defd1cb9189b70d3e31c116abe6e0fbb6e17f5ab3252b65e6d788999bf1ce3f49cca5f89819c755afbd478e27fde899e42d1b47e0bbc5dfb9b6
6
+ metadata.gz: 90076a29f609f4ed19417362c4634dff8bb76887dfc468cd2c60722d7a1dd82d54245b6e370b02216a1e1caf0f12f8dba4331f8bb2f0ef7102475a1dfefd3be8
7
+ data.tar.gz: b60271df7f41e49c343f6159f664fb752645efd5c62b395172ca91f64d19334465adc8b7afba10e4d323f4bfcc50af34e4b598699cb645bf3af3adf8b9e56f34
@@ -1,6 +1,10 @@
1
- ## 4.2.0
1
+ ## 4.2.2
2
+
3
+ - update jquery to 3.1.1
4
+
5
+ ## 4.2.1
2
6
 
3
- - Update jQuery to 3.1.0
7
+ - update jquery to 3.1.0
4
8
 
5
9
  ## 4.2.0
6
10
 
data/Gemfile CHANGED
@@ -1,6 +1,16 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rails', group: :test
3
+ gem "mime-types", "< 3", group: :test
4
+
5
+ if RUBY_VERSION >= '2.2.2'
6
+ gem 'rails'
7
+ gem 'rack'
8
+ gem 'json', '>= 2'
9
+ else
10
+ gem 'rails', '~> 4.2.0'
11
+ gem 'rack', '~>1.6'
12
+ gem 'json', '~> 1.8.0'
13
+ end
4
14
 
5
15
  # Specify your gem's dependencies in jquery-rails.gemspec
6
16
  gemspec
@@ -2,6 +2,7 @@
2
2
 
3
3
  | Gem | jQuery | jQuery UJS | jQuery UI |
4
4
  |--------|--------|------------| ----------|
5
+ | 4.2.2 | 1.12.4 & 2.2.4 & 3.1.1 | 1.2.2 | - |
5
6
  | 4.2.1 | 1.12.4 & 2.2.4 & 3.1.0 | 1.2.2 | - |
6
7
  | 4.2.0 | 1.12.4 & 2.2.4 & 3.0.0 | 1.2.2 | - |
7
8
  | 4.1.1 | 1.12.1 & 2.2.1 | 1.2.1 | - |
@@ -1,9 +1,9 @@
1
1
  module Jquery
2
2
  module Rails
3
- VERSION = "4.2.1"
3
+ VERSION = "4.2.2"
4
4
  JQUERY_VERSION = "1.12.4"
5
5
  JQUERY_2_VERSION = "2.2.4"
6
- JQUERY_3_VERSION = "3.1.0"
6
+ JQUERY_3_VERSION = "3.1.1"
7
7
  JQUERY_UJS_VERSION = "1.2.2"
8
8
  end
9
9
  end
@@ -1,6 +1,5 @@
1
- /*eslint-disable no-unused-vars*/
2
1
  /*!
3
- * jQuery JavaScript Library v3.1.0
2
+ * jQuery JavaScript Library v3.1.1
4
3
  * https://jquery.com/
5
4
  *
6
5
  * Includes Sizzle.js
@@ -10,7 +9,7 @@
10
9
  * Released under the MIT license
11
10
  * https://jquery.org/license
12
11
  *
13
- * Date: 2016-07-07T21:44Z
12
+ * Date: 2016-09-22T22:30Z
14
13
  */
15
14
  ( function( global, factory ) {
16
15
 
@@ -83,13 +82,13 @@ var support = {};
83
82
  doc.head.appendChild( script ).parentNode.removeChild( script );
84
83
  }
85
84
  /* global Symbol */
86
- // Defining this global in .eslintrc would create a danger of using the global
85
+ // Defining this global in .eslintrc.json would create a danger of using the global
87
86
  // unguarded in another place, it seems safer to define global only for this module
88
87
 
89
88
 
90
89
 
91
90
  var
92
- version = "3.1.0",
91
+ version = "3.1.1",
93
92
 
94
93
  // Define a local copy of jQuery
95
94
  jQuery = function( selector, context ) {
@@ -129,13 +128,14 @@ jQuery.fn = jQuery.prototype = {
129
128
  // Get the Nth element in the matched element set OR
130
129
  // Get the whole matched element set as a clean array
131
130
  get: function( num ) {
132
- return num != null ?
133
131
 
134
- // Return just the one element from the set
135
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
132
+ // Return all the elements in a clean array
133
+ if ( num == null ) {
134
+ return slice.call( this );
135
+ }
136
136
 
137
- // Return all the elements in a clean array
138
- slice.call( this );
137
+ // Return just the one element from the set
138
+ return num < 0 ? this[ num + this.length ] : this[ num ];
139
139
  },
140
140
 
141
141
  // Take an array of elements and push it onto the stack
@@ -543,14 +543,14 @@ function isArrayLike( obj ) {
543
543
  }
544
544
  var Sizzle =
545
545
  /*!
546
- * Sizzle CSS Selector Engine v2.3.0
546
+ * Sizzle CSS Selector Engine v2.3.3
547
547
  * https://sizzlejs.com/
548
548
  *
549
549
  * Copyright jQuery Foundation and other contributors
550
550
  * Released under the MIT license
551
551
  * http://jquery.org/license
552
552
  *
553
- * Date: 2016-01-04
553
+ * Date: 2016-08-08
554
554
  */
555
555
  (function( window ) {
556
556
 
@@ -696,7 +696,7 @@ var i,
696
696
 
697
697
  // CSS string/identifier serialization
698
698
  // https://drafts.csswg.org/cssom/#common-serializing-idioms
699
- rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
699
+ rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
700
700
  fcssescape = function( ch, asCodePoint ) {
701
701
  if ( asCodePoint ) {
702
702
 
@@ -723,7 +723,7 @@ var i,
723
723
 
724
724
  disabledAncestor = addCombinator(
725
725
  function( elem ) {
726
- return elem.disabled === true;
726
+ return elem.disabled === true && ("form" in elem || "label" in elem);
727
727
  },
728
728
  { dir: "parentNode", next: "legend" }
729
729
  );
@@ -1009,26 +1009,54 @@ function createButtonPseudo( type ) {
1009
1009
  * @param {Boolean} disabled true for :disabled; false for :enabled
1010
1010
  */
1011
1011
  function createDisabledPseudo( disabled ) {
1012
- // Known :disabled false positives:
1013
- // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset)
1014
- // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
1012
+
1013
+ // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
1015
1014
  return function( elem ) {
1016
1015
 
1017
- // Check form elements and option elements for explicit disabling
1018
- return "label" in elem && elem.disabled === disabled ||
1019
- "form" in elem && elem.disabled === disabled ||
1016
+ // Only certain elements can match :enabled or :disabled
1017
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
1018
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
1019
+ if ( "form" in elem ) {
1020
+
1021
+ // Check for inherited disabledness on relevant non-disabled elements:
1022
+ // * listed form-associated elements in a disabled fieldset
1023
+ // https://html.spec.whatwg.org/multipage/forms.html#category-listed
1024
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
1025
+ // * option elements in a disabled optgroup
1026
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
1027
+ // All such elements have a "form" property.
1028
+ if ( elem.parentNode && elem.disabled === false ) {
1029
+
1030
+ // Option elements defer to a parent optgroup if present
1031
+ if ( "label" in elem ) {
1032
+ if ( "label" in elem.parentNode ) {
1033
+ return elem.parentNode.disabled === disabled;
1034
+ } else {
1035
+ return elem.disabled === disabled;
1036
+ }
1037
+ }
1038
+
1039
+ // Support: IE 6 - 11
1040
+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors
1041
+ return elem.isDisabled === disabled ||
1020
1042
 
1021
- // Check non-disabled form elements for fieldset[disabled] ancestors
1022
- "form" in elem && elem.disabled === false && (
1023
- // Support: IE6-11+
1024
- // Ancestry is covered for us
1025
- elem.isDisabled === disabled ||
1043
+ // Where there is no isDisabled, check manually
1044
+ /* jshint -W018 */
1045
+ elem.isDisabled !== !disabled &&
1046
+ disabledAncestor( elem ) === disabled;
1047
+ }
1026
1048
 
1027
- // Otherwise, assume any non-<option> under fieldset[disabled] is disabled
1028
- /* jshint -W018 */
1029
- elem.isDisabled !== !disabled &&
1030
- ("label" in elem || !disabledAncestor( elem )) !== disabled
1031
- );
1049
+ return elem.disabled === disabled;
1050
+
1051
+ // Try to winnow out elements that can't be disabled before trusting the disabled property.
1052
+ // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
1053
+ // even exist on them, let alone have a boolean value.
1054
+ } else if ( "label" in elem ) {
1055
+ return elem.disabled === disabled;
1056
+ }
1057
+
1058
+ // Remaining elements are neither :enabled nor :disabled
1059
+ return false;
1032
1060
  };
1033
1061
  }
1034
1062
 
@@ -1144,25 +1172,21 @@ setDocument = Sizzle.setDocument = function( node ) {
1144
1172
  return !document.getElementsByName || !document.getElementsByName( expando ).length;
1145
1173
  });
1146
1174
 
1147
- // ID find and filter
1175
+ // ID filter and find
1148
1176
  if ( support.getById ) {
1149
- Expr.find["ID"] = function( id, context ) {
1150
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1151
- var m = context.getElementById( id );
1152
- return m ? [ m ] : [];
1153
- }
1154
- };
1155
1177
  Expr.filter["ID"] = function( id ) {
1156
1178
  var attrId = id.replace( runescape, funescape );
1157
1179
  return function( elem ) {
1158
1180
  return elem.getAttribute("id") === attrId;
1159
1181
  };
1160
1182
  };
1183
+ Expr.find["ID"] = function( id, context ) {
1184
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1185
+ var elem = context.getElementById( id );
1186
+ return elem ? [ elem ] : [];
1187
+ }
1188
+ };
1161
1189
  } else {
1162
- // Support: IE6/7
1163
- // getElementById is not reliable as a find shortcut
1164
- delete Expr.find["ID"];
1165
-
1166
1190
  Expr.filter["ID"] = function( id ) {
1167
1191
  var attrId = id.replace( runescape, funescape );
1168
1192
  return function( elem ) {
@@ -1171,6 +1195,36 @@ setDocument = Sizzle.setDocument = function( node ) {
1171
1195
  return node && node.value === attrId;
1172
1196
  };
1173
1197
  };
1198
+
1199
+ // Support: IE 6 - 7 only
1200
+ // getElementById is not reliable as a find shortcut
1201
+ Expr.find["ID"] = function( id, context ) {
1202
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1203
+ var node, i, elems,
1204
+ elem = context.getElementById( id );
1205
+
1206
+ if ( elem ) {
1207
+
1208
+ // Verify the id attribute
1209
+ node = elem.getAttributeNode("id");
1210
+ if ( node && node.value === id ) {
1211
+ return [ elem ];
1212
+ }
1213
+
1214
+ // Fall back on getElementsByName
1215
+ elems = context.getElementsByName( id );
1216
+ i = 0;
1217
+ while ( (elem = elems[i++]) ) {
1218
+ node = elem.getAttributeNode("id");
1219
+ if ( node && node.value === id ) {
1220
+ return [ elem ];
1221
+ }
1222
+ }
1223
+ }
1224
+
1225
+ return [];
1226
+ }
1227
+ };
1174
1228
  }
1175
1229
 
1176
1230
  // Tag
@@ -2211,6 +2265,7 @@ function addCombinator( matcher, combinator, base ) {
2211
2265
  return matcher( elem, context, xml );
2212
2266
  }
2213
2267
  }
2268
+ return false;
2214
2269
  } :
2215
2270
 
2216
2271
  // Check against all ancestor/preceding elements
@@ -2255,6 +2310,7 @@ function addCombinator( matcher, combinator, base ) {
2255
2310
  }
2256
2311
  }
2257
2312
  }
2313
+ return false;
2258
2314
  };
2259
2315
  }
2260
2316
 
@@ -2617,8 +2673,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
2617
2673
  // Reduce context if the leading compound selector is an ID
2618
2674
  tokens = match[0] = match[0].slice( 0 );
2619
2675
  if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
2620
- support.getById && context.nodeType === 9 && documentIsHTML &&
2621
- Expr.relative[ tokens[1].type ] ) {
2676
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
2622
2677
 
2623
2678
  context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
2624
2679
  if ( !context ) {
@@ -2800,24 +2855,29 @@ function winnow( elements, qualifier, not ) {
2800
2855
  return jQuery.grep( elements, function( elem, i ) {
2801
2856
  return !!qualifier.call( elem, i, elem ) !== not;
2802
2857
  } );
2803
-
2804
2858
  }
2805
2859
 
2860
+ // Single element
2806
2861
  if ( qualifier.nodeType ) {
2807
2862
  return jQuery.grep( elements, function( elem ) {
2808
2863
  return ( elem === qualifier ) !== not;
2809
2864
  } );
2810
-
2811
2865
  }
2812
2866
 
2813
- if ( typeof qualifier === "string" ) {
2814
- if ( risSimple.test( qualifier ) ) {
2815
- return jQuery.filter( qualifier, elements, not );
2816
- }
2867
+ // Arraylike of elements (jQuery, arguments, Array)
2868
+ if ( typeof qualifier !== "string" ) {
2869
+ return jQuery.grep( elements, function( elem ) {
2870
+ return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
2871
+ } );
2872
+ }
2817
2873
 
2818
- qualifier = jQuery.filter( qualifier, elements );
2874
+ // Simple selector that can be filtered directly, removing non-Elements
2875
+ if ( risSimple.test( qualifier ) ) {
2876
+ return jQuery.filter( qualifier, elements, not );
2819
2877
  }
2820
2878
 
2879
+ // Complex selector, compare the two sets, removing non-Elements
2880
+ qualifier = jQuery.filter( qualifier, elements );
2821
2881
  return jQuery.grep( elements, function( elem ) {
2822
2882
  return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
2823
2883
  } );
@@ -2830,11 +2890,13 @@ jQuery.filter = function( expr, elems, not ) {
2830
2890
  expr = ":not(" + expr + ")";
2831
2891
  }
2832
2892
 
2833
- return elems.length === 1 && elem.nodeType === 1 ?
2834
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
2835
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
2836
- return elem.nodeType === 1;
2837
- } ) );
2893
+ if ( elems.length === 1 && elem.nodeType === 1 ) {
2894
+ return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
2895
+ }
2896
+
2897
+ return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
2898
+ return elem.nodeType === 1;
2899
+ } ) );
2838
2900
  };
2839
2901
 
2840
2902
  jQuery.fn.extend( {
@@ -3162,14 +3224,14 @@ jQuery.each( {
3162
3224
  return this.pushStack( matched );
3163
3225
  };
3164
3226
  } );
3165
- var rnotwhite = ( /\S+/g );
3227
+ var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
3166
3228
 
3167
3229
 
3168
3230
 
3169
3231
  // Convert String-formatted options into Object-formatted ones
3170
3232
  function createOptions( options ) {
3171
3233
  var object = {};
3172
- jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
3234
+ jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
3173
3235
  object[ flag ] = true;
3174
3236
  } );
3175
3237
  return object;
@@ -3934,13 +3996,16 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
3934
3996
  }
3935
3997
  }
3936
3998
 
3937
- return chainable ?
3938
- elems :
3999
+ if ( chainable ) {
4000
+ return elems;
4001
+ }
4002
+
4003
+ // Gets
4004
+ if ( bulk ) {
4005
+ return fn.call( elems );
4006
+ }
3939
4007
 
3940
- // Gets
3941
- bulk ?
3942
- fn.call( elems ) :
3943
- len ? fn( elems[ 0 ], key ) : emptyGet;
4008
+ return len ? fn( elems[ 0 ], key ) : emptyGet;
3944
4009
  };
3945
4010
  var acceptData = function( owner ) {
3946
4011
 
@@ -4077,7 +4142,7 @@ Data.prototype = {
4077
4142
  // Otherwise, create an array by matching non-whitespace
4078
4143
  key = key in cache ?
4079
4144
  [ key ] :
4080
- ( key.match( rnotwhite ) || [] );
4145
+ ( key.match( rnothtmlwhite ) || [] );
4081
4146
  }
4082
4147
 
4083
4148
  i = key.length;
@@ -4125,6 +4190,31 @@ var dataUser = new Data();
4125
4190
  var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
4126
4191
  rmultiDash = /[A-Z]/g;
4127
4192
 
4193
+ function getData( data ) {
4194
+ if ( data === "true" ) {
4195
+ return true;
4196
+ }
4197
+
4198
+ if ( data === "false" ) {
4199
+ return false;
4200
+ }
4201
+
4202
+ if ( data === "null" ) {
4203
+ return null;
4204
+ }
4205
+
4206
+ // Only convert to a number if it doesn't change the string
4207
+ if ( data === +data + "" ) {
4208
+ return +data;
4209
+ }
4210
+
4211
+ if ( rbrace.test( data ) ) {
4212
+ return JSON.parse( data );
4213
+ }
4214
+
4215
+ return data;
4216
+ }
4217
+
4128
4218
  function dataAttr( elem, key, data ) {
4129
4219
  var name;
4130
4220
 
@@ -4136,14 +4226,7 @@ function dataAttr( elem, key, data ) {
4136
4226
 
4137
4227
  if ( typeof data === "string" ) {
4138
4228
  try {
4139
- data = data === "true" ? true :
4140
- data === "false" ? false :
4141
- data === "null" ? null :
4142
-
4143
- // Only convert to a number if it doesn't change the string
4144
- +data + "" === data ? +data :
4145
- rbrace.test( data ) ? JSON.parse( data ) :
4146
- data;
4229
+ data = getData( data );
4147
4230
  } catch ( e ) {}
4148
4231
 
4149
4232
  // Make sure we set the data so it isn't changed later
@@ -4520,7 +4603,7 @@ function getDefaultDisplay( elem ) {
4520
4603
  return display;
4521
4604
  }
4522
4605
 
4523
- temp = doc.body.appendChild( doc.createElement( nodeName ) ),
4606
+ temp = doc.body.appendChild( doc.createElement( nodeName ) );
4524
4607
  display = jQuery.css( temp, "display" );
4525
4608
 
4526
4609
  temp.parentNode.removeChild( temp );
@@ -4638,15 +4721,23 @@ function getAll( context, tag ) {
4638
4721
 
4639
4722
  // Support: IE <=9 - 11 only
4640
4723
  // Use typeof to avoid zero-argument method invocation on host objects (#15151)
4641
- var ret = typeof context.getElementsByTagName !== "undefined" ?
4642
- context.getElementsByTagName( tag || "*" ) :
4643
- typeof context.querySelectorAll !== "undefined" ?
4644
- context.querySelectorAll( tag || "*" ) :
4645
- [];
4646
-
4647
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
4648
- jQuery.merge( [ context ], ret ) :
4649
- ret;
4724
+ var ret;
4725
+
4726
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
4727
+ ret = context.getElementsByTagName( tag || "*" );
4728
+
4729
+ } else if ( typeof context.querySelectorAll !== "undefined" ) {
4730
+ ret = context.querySelectorAll( tag || "*" );
4731
+
4732
+ } else {
4733
+ ret = [];
4734
+ }
4735
+
4736
+ if ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) {
4737
+ return jQuery.merge( [ context ], ret );
4738
+ }
4739
+
4740
+ return ret;
4650
4741
  }
4651
4742
 
4652
4743
 
@@ -4920,7 +5011,7 @@ jQuery.event = {
4920
5011
  }
4921
5012
 
4922
5013
  // Handle multiple events separated by a space
4923
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
5014
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
4924
5015
  t = types.length;
4925
5016
  while ( t-- ) {
4926
5017
  tmp = rtypenamespace.exec( types[ t ] ) || [];
@@ -5002,7 +5093,7 @@ jQuery.event = {
5002
5093
  }
5003
5094
 
5004
5095
  // Once for each type.namespace in types; type may be omitted
5005
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
5096
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5006
5097
  t = types.length;
5007
5098
  while ( t-- ) {
5008
5099
  tmp = rtypenamespace.exec( types[ t ] ) || [];
@@ -5128,51 +5219,58 @@ jQuery.event = {
5128
5219
  },
5129
5220
 
5130
5221
  handlers: function( event, handlers ) {
5131
- var i, matches, sel, handleObj,
5222
+ var i, handleObj, sel, matchedHandlers, matchedSelectors,
5132
5223
  handlerQueue = [],
5133
5224
  delegateCount = handlers.delegateCount,
5134
5225
  cur = event.target;
5135
5226
 
5136
- // Support: IE <=9
5137
5227
  // Find delegate handlers
5138
- // Black-hole SVG <use> instance trees (#13180)
5139
- //
5140
- // Support: Firefox <=42
5141
- // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
5142
- if ( delegateCount && cur.nodeType &&
5143
- ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
5228
+ if ( delegateCount &&
5229
+
5230
+ // Support: IE <=9
5231
+ // Black-hole SVG <use> instance trees (trac-13180)
5232
+ cur.nodeType &&
5233
+
5234
+ // Support: Firefox <=42
5235
+ // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
5236
+ // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
5237
+ // Support: IE 11 only
5238
+ // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
5239
+ !( event.type === "click" && event.button >= 1 ) ) {
5144
5240
 
5145
5241
  for ( ; cur !== this; cur = cur.parentNode || this ) {
5146
5242
 
5147
5243
  // Don't check non-elements (#13208)
5148
5244
  // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5149
- if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
5150
- matches = [];
5245
+ if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
5246
+ matchedHandlers = [];
5247
+ matchedSelectors = {};
5151
5248
  for ( i = 0; i < delegateCount; i++ ) {
5152
5249
  handleObj = handlers[ i ];
5153
5250
 
5154
5251
  // Don't conflict with Object.prototype properties (#13203)
5155
5252
  sel = handleObj.selector + " ";
5156
5253
 
5157
- if ( matches[ sel ] === undefined ) {
5158
- matches[ sel ] = handleObj.needsContext ?
5254
+ if ( matchedSelectors[ sel ] === undefined ) {
5255
+ matchedSelectors[ sel ] = handleObj.needsContext ?
5159
5256
  jQuery( sel, this ).index( cur ) > -1 :
5160
5257
  jQuery.find( sel, this, null, [ cur ] ).length;
5161
5258
  }
5162
- if ( matches[ sel ] ) {
5163
- matches.push( handleObj );
5259
+ if ( matchedSelectors[ sel ] ) {
5260
+ matchedHandlers.push( handleObj );
5164
5261
  }
5165
5262
  }
5166
- if ( matches.length ) {
5167
- handlerQueue.push( { elem: cur, handlers: matches } );
5263
+ if ( matchedHandlers.length ) {
5264
+ handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
5168
5265
  }
5169
5266
  }
5170
5267
  }
5171
5268
  }
5172
5269
 
5173
5270
  // Add the remaining (directly-bound) handlers
5271
+ cur = this;
5174
5272
  if ( delegateCount < handlers.length ) {
5175
- handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
5273
+ handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
5176
5274
  }
5177
5275
 
5178
5276
  return handlerQueue;
@@ -5406,7 +5504,19 @@ jQuery.each( {
5406
5504
 
5407
5505
  // Add which for click: 1 === left; 2 === middle; 3 === right
5408
5506
  if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
5409
- return ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
5507
+ if ( button & 1 ) {
5508
+ return 1;
5509
+ }
5510
+
5511
+ if ( button & 2 ) {
5512
+ return 3;
5513
+ }
5514
+
5515
+ if ( button & 4 ) {
5516
+ return 2;
5517
+ }
5518
+
5519
+ return 0;
5410
5520
  }
5411
5521
 
5412
5522
  return event.which;
@@ -6162,15 +6272,17 @@ function setPositiveNumber( elem, value, subtract ) {
6162
6272
  }
6163
6273
 
6164
6274
  function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
6165
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
6166
-
6167
- // If we already have the right measurement, avoid augmentation
6168
- 4 :
6275
+ var i,
6276
+ val = 0;
6169
6277
 
6170
- // Otherwise initialize for horizontal or vertical properties
6171
- name === "width" ? 1 : 0,
6278
+ // If we already have the right measurement, avoid augmentation
6279
+ if ( extra === ( isBorderBox ? "border" : "content" ) ) {
6280
+ i = 4;
6172
6281
 
6173
- val = 0;
6282
+ // Otherwise initialize for horizontal or vertical properties
6283
+ } else {
6284
+ i = name === "width" ? 1 : 0;
6285
+ }
6174
6286
 
6175
6287
  for ( ; i < 4; i += 2 ) {
6176
6288
 
@@ -7024,7 +7136,7 @@ jQuery.Animation = jQuery.extend( Animation, {
7024
7136
  callback = props;
7025
7137
  props = [ "*" ];
7026
7138
  } else {
7027
- props = props.match( rnotwhite );
7139
+ props = props.match( rnothtmlwhite );
7028
7140
  }
7029
7141
 
7030
7142
  var prop,
@@ -7062,9 +7174,14 @@ jQuery.speed = function( speed, easing, fn ) {
7062
7174
  opt.duration = 0;
7063
7175
 
7064
7176
  } else {
7065
- opt.duration = typeof opt.duration === "number" ?
7066
- opt.duration : opt.duration in jQuery.fx.speeds ?
7067
- jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
7177
+ if ( typeof opt.duration !== "number" ) {
7178
+ if ( opt.duration in jQuery.fx.speeds ) {
7179
+ opt.duration = jQuery.fx.speeds[ opt.duration ];
7180
+
7181
+ } else {
7182
+ opt.duration = jQuery.fx.speeds._default;
7183
+ }
7184
+ }
7068
7185
  }
7069
7186
 
7070
7187
  // Normalize opt.queue - true/undefined/null -> "fx"
@@ -7414,7 +7531,10 @@ jQuery.extend( {
7414
7531
  removeAttr: function( elem, value ) {
7415
7532
  var name,
7416
7533
  i = 0,
7417
- attrNames = value && value.match( rnotwhite );
7534
+
7535
+ // Attribute names can contain non-HTML whitespace characters
7536
+ // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
7537
+ attrNames = value && value.match( rnothtmlwhite );
7418
7538
 
7419
7539
  if ( attrNames && elem.nodeType === 1 ) {
7420
7540
  while ( ( name = attrNames[ i++ ] ) ) {
@@ -7521,12 +7641,19 @@ jQuery.extend( {
7521
7641
  // Use proper attribute retrieval(#12072)
7522
7642
  var tabindex = jQuery.find.attr( elem, "tabindex" );
7523
7643
 
7524
- return tabindex ?
7525
- parseInt( tabindex, 10 ) :
7644
+ if ( tabindex ) {
7645
+ return parseInt( tabindex, 10 );
7646
+ }
7647
+
7648
+ if (
7526
7649
  rfocusable.test( elem.nodeName ) ||
7527
- rclickable.test( elem.nodeName ) && elem.href ?
7528
- 0 :
7529
- -1;
7650
+ rclickable.test( elem.nodeName ) &&
7651
+ elem.href
7652
+ ) {
7653
+ return 0;
7654
+ }
7655
+
7656
+ return -1;
7530
7657
  }
7531
7658
  }
7532
7659
  },
@@ -7543,9 +7670,14 @@ jQuery.extend( {
7543
7670
  // on the option
7544
7671
  // The getter ensures a default option is selected
7545
7672
  // when in an optgroup
7673
+ // eslint rule "no-unused-expressions" is disabled for this code
7674
+ // since it considers such accessions noop
7546
7675
  if ( !support.optSelected ) {
7547
7676
  jQuery.propHooks.selected = {
7548
7677
  get: function( elem ) {
7678
+
7679
+ /* eslint no-unused-expressions: "off" */
7680
+
7549
7681
  var parent = elem.parentNode;
7550
7682
  if ( parent && parent.parentNode ) {
7551
7683
  parent.parentNode.selectedIndex;
@@ -7553,6 +7685,9 @@ if ( !support.optSelected ) {
7553
7685
  return null;
7554
7686
  },
7555
7687
  set: function( elem ) {
7688
+
7689
+ /* eslint no-unused-expressions: "off" */
7690
+
7556
7691
  var parent = elem.parentNode;
7557
7692
  if ( parent ) {
7558
7693
  parent.selectedIndex;
@@ -7583,7 +7718,13 @@ jQuery.each( [
7583
7718
 
7584
7719
 
7585
7720
 
7586
- var rclass = /[\t\r\n\f]/g;
7721
+ // Strip and collapse whitespace according to HTML spec
7722
+ // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
7723
+ function stripAndCollapse( value ) {
7724
+ var tokens = value.match( rnothtmlwhite ) || [];
7725
+ return tokens.join( " " );
7726
+ }
7727
+
7587
7728
 
7588
7729
  function getClass( elem ) {
7589
7730
  return elem.getAttribute && elem.getAttribute( "class" ) || "";
@@ -7601,12 +7742,11 @@ jQuery.fn.extend( {
7601
7742
  }
7602
7743
 
7603
7744
  if ( typeof value === "string" && value ) {
7604
- classes = value.match( rnotwhite ) || [];
7745
+ classes = value.match( rnothtmlwhite ) || [];
7605
7746
 
7606
7747
  while ( ( elem = this[ i++ ] ) ) {
7607
7748
  curValue = getClass( elem );
7608
- cur = elem.nodeType === 1 &&
7609
- ( " " + curValue + " " ).replace( rclass, " " );
7749
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
7610
7750
 
7611
7751
  if ( cur ) {
7612
7752
  j = 0;
@@ -7617,7 +7757,7 @@ jQuery.fn.extend( {
7617
7757
  }
7618
7758
 
7619
7759
  // Only assign if different to avoid unneeded rendering.
7620
- finalValue = jQuery.trim( cur );
7760
+ finalValue = stripAndCollapse( cur );
7621
7761
  if ( curValue !== finalValue ) {
7622
7762
  elem.setAttribute( "class", finalValue );
7623
7763
  }
@@ -7643,14 +7783,13 @@ jQuery.fn.extend( {
7643
7783
  }
7644
7784
 
7645
7785
  if ( typeof value === "string" && value ) {
7646
- classes = value.match( rnotwhite ) || [];
7786
+ classes = value.match( rnothtmlwhite ) || [];
7647
7787
 
7648
7788
  while ( ( elem = this[ i++ ] ) ) {
7649
7789
  curValue = getClass( elem );
7650
7790
 
7651
7791
  // This expression is here for better compressibility (see addClass)
7652
- cur = elem.nodeType === 1 &&
7653
- ( " " + curValue + " " ).replace( rclass, " " );
7792
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
7654
7793
 
7655
7794
  if ( cur ) {
7656
7795
  j = 0;
@@ -7663,7 +7802,7 @@ jQuery.fn.extend( {
7663
7802
  }
7664
7803
 
7665
7804
  // Only assign if different to avoid unneeded rendering.
7666
- finalValue = jQuery.trim( cur );
7805
+ finalValue = stripAndCollapse( cur );
7667
7806
  if ( curValue !== finalValue ) {
7668
7807
  elem.setAttribute( "class", finalValue );
7669
7808
  }
@@ -7698,7 +7837,7 @@ jQuery.fn.extend( {
7698
7837
  // Toggle individual class names
7699
7838
  i = 0;
7700
7839
  self = jQuery( this );
7701
- classNames = value.match( rnotwhite ) || [];
7840
+ classNames = value.match( rnothtmlwhite ) || [];
7702
7841
 
7703
7842
  while ( ( className = classNames[ i++ ] ) ) {
7704
7843
 
@@ -7741,10 +7880,8 @@ jQuery.fn.extend( {
7741
7880
  className = " " + selector + " ";
7742
7881
  while ( ( elem = this[ i++ ] ) ) {
7743
7882
  if ( elem.nodeType === 1 &&
7744
- ( " " + getClass( elem ) + " " ).replace( rclass, " " )
7745
- .indexOf( className ) > -1
7746
- ) {
7747
- return true;
7883
+ ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
7884
+ return true;
7748
7885
  }
7749
7886
  }
7750
7887
 
@@ -7755,8 +7892,7 @@ jQuery.fn.extend( {
7755
7892
 
7756
7893
 
7757
7894
 
7758
- var rreturn = /\r/g,
7759
- rspaces = /[\x20\t\r\n\f]+/g;
7895
+ var rreturn = /\r/g;
7760
7896
 
7761
7897
  jQuery.fn.extend( {
7762
7898
  val: function( value ) {
@@ -7777,13 +7913,13 @@ jQuery.fn.extend( {
7777
7913
 
7778
7914
  ret = elem.value;
7779
7915
 
7780
- return typeof ret === "string" ?
7781
-
7782
- // Handle most common string cases
7783
- ret.replace( rreturn, "" ) :
7916
+ // Handle most common string cases
7917
+ if ( typeof ret === "string" ) {
7918
+ return ret.replace( rreturn, "" );
7919
+ }
7784
7920
 
7785
- // Handle cases where value is null/undef or number
7786
- ret == null ? "" : ret;
7921
+ // Handle cases where value is null/undef or number
7922
+ return ret == null ? "" : ret;
7787
7923
  }
7788
7924
 
7789
7925
  return;
@@ -7840,20 +7976,24 @@ jQuery.extend( {
7840
7976
  // option.text throws exceptions (#14686, #14858)
7841
7977
  // Strip and collapse whitespace
7842
7978
  // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
7843
- jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
7979
+ stripAndCollapse( jQuery.text( elem ) );
7844
7980
  }
7845
7981
  },
7846
7982
  select: {
7847
7983
  get: function( elem ) {
7848
- var value, option,
7984
+ var value, option, i,
7849
7985
  options = elem.options,
7850
7986
  index = elem.selectedIndex,
7851
7987
  one = elem.type === "select-one",
7852
7988
  values = one ? null : [],
7853
- max = one ? index + 1 : options.length,
7854
- i = index < 0 ?
7855
- max :
7856
- one ? index : 0;
7989
+ max = one ? index + 1 : options.length;
7990
+
7991
+ if ( index < 0 ) {
7992
+ i = max;
7993
+
7994
+ } else {
7995
+ i = one ? index : 0;
7996
+ }
7857
7997
 
7858
7998
  // Loop through all the selected options
7859
7999
  for ( ; i < max; i++ ) {
@@ -8307,13 +8447,17 @@ jQuery.fn.extend( {
8307
8447
  .map( function( i, elem ) {
8308
8448
  var val = jQuery( this ).val();
8309
8449
 
8310
- return val == null ?
8311
- null :
8312
- jQuery.isArray( val ) ?
8313
- jQuery.map( val, function( val ) {
8314
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8315
- } ) :
8316
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8450
+ if ( val == null ) {
8451
+ return null;
8452
+ }
8453
+
8454
+ if ( jQuery.isArray( val ) ) {
8455
+ return jQuery.map( val, function( val ) {
8456
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8457
+ } );
8458
+ }
8459
+
8460
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8317
8461
  } ).get();
8318
8462
  }
8319
8463
  } );
@@ -8322,7 +8466,7 @@ jQuery.fn.extend( {
8322
8466
  var
8323
8467
  r20 = /%20/g,
8324
8468
  rhash = /#.*$/,
8325
- rts = /([?&])_=[^&]*/,
8469
+ rantiCache = /([?&])_=[^&]*/,
8326
8470
  rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
8327
8471
 
8328
8472
  // #7653, #8125, #8152: local protocol detection
@@ -8368,7 +8512,7 @@ function addToPrefiltersOrTransports( structure ) {
8368
8512
 
8369
8513
  var dataType,
8370
8514
  i = 0,
8371
- dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
8515
+ dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
8372
8516
 
8373
8517
  if ( jQuery.isFunction( func ) ) {
8374
8518
 
@@ -8836,7 +8980,7 @@ jQuery.extend( {
8836
8980
  s.type = options.method || options.type || s.method || s.type;
8837
8981
 
8838
8982
  // Extract dataTypes list
8839
- s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
8983
+ s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
8840
8984
 
8841
8985
  // A cross-domain request is in order when the origin doesn't match the current origin.
8842
8986
  if ( s.crossDomain == null ) {
@@ -8908,9 +9052,9 @@ jQuery.extend( {
8908
9052
  delete s.data;
8909
9053
  }
8910
9054
 
8911
- // Add anti-cache in uncached url if needed
9055
+ // Add or update anti-cache param if needed
8912
9056
  if ( s.cache === false ) {
8913
- cacheURL = cacheURL.replace( rts, "" );
9057
+ cacheURL = cacheURL.replace( rantiCache, "$1" );
8914
9058
  uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
8915
9059
  }
8916
9060
 
@@ -9649,7 +9793,7 @@ jQuery.fn.load = function( url, params, callback ) {
9649
9793
  off = url.indexOf( " " );
9650
9794
 
9651
9795
  if ( off > -1 ) {
9652
- selector = jQuery.trim( url.slice( off ) );
9796
+ selector = stripAndCollapse( url.slice( off ) );
9653
9797
  url = url.slice( 0, off );
9654
9798
  }
9655
9799
 
@@ -10041,7 +10185,6 @@ if ( typeof define === "function" && define.amd ) {
10041
10185
 
10042
10186
 
10043
10187
 
10044
-
10045
10188
  var
10046
10189
 
10047
10190
  // Map over jQuery in case of overwrite
@@ -10070,5 +10213,8 @@ if ( !noGlobal ) {
10070
10213
  }
10071
10214
 
10072
10215
 
10216
+
10217
+
10218
+
10073
10219
  return jQuery;
10074
10220
  } );