Release 3.4.1

parent 180c5c33
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/). For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/).
For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery). For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery).
If upgrading, please see the [blog post for 3.4.0](https://blog.jquery.com/2019/04/10/jquery-3-4-0-released/). This includes notable differences from the previous version and a more readable changelog. If upgrading, please see the [blog post for 3.4.1](https://blog.jquery.com/2019/05/01/jquery-3-4-1-triggering-focus-events-in-ie-and-finding-root-elements-in-ios-10/). This includes notable differences from the previous version and a more readable changelog.
## Including jQuery ## Including jQuery
...@@ -16,7 +16,7 @@ Below are some of the most common ways to include jQuery. ...@@ -16,7 +16,7 @@ Below are some of the most common ways to include jQuery.
#### Script tag #### Script tag
```html ```html
<script src="https://code.jquery.com/jquery-3.4.0.min.js"></script> <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
``` ```
#### Babel #### Babel
......
...@@ -27,7 +27,7 @@ define( [ ...@@ -27,7 +27,7 @@ define( [
"use strict"; "use strict";
var var
version = "3.4.0", version = "3.4.1",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
......
/*! /*!
* jQuery JavaScript Library v3.4.0 * jQuery JavaScript Library v3.4.1
* https://jquery.com/ * https://jquery.com/
* *
* Includes Sizzle.js * Includes Sizzle.js
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Released under the MIT license * Released under the MIT license
* https://jquery.org/license * https://jquery.org/license
* *
* Date: 2019-04-10T19:48Z * Date: 2019-05-01T21:04Z
*/ */
( function( global, factory ) { ( function( global, factory ) {
...@@ -142,7 +142,7 @@ function toType( obj ) { ...@@ -142,7 +142,7 @@ function toType( obj ) {
var var
version = "3.4.0", version = "3.4.1",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
...@@ -4498,8 +4498,12 @@ var documentElement = document.documentElement; ...@@ -4498,8 +4498,12 @@ var documentElement = document.documentElement;
}, },
composed = { composed: true }; composed = { composed: true };
// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
// Check attachment across shadow DOM boundaries when possible (gh-3504) // Check attachment across shadow DOM boundaries when possible (gh-3504)
if ( documentElement.attachShadow ) { // Support: iOS 10.0-10.2 only
// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
// leading to errors. We need to check for `getRootNode`.
if ( documentElement.getRootNode ) {
isAttached = function( elem ) { isAttached = function( elem ) {
return jQuery.contains( elem.ownerDocument, elem ) || return jQuery.contains( elem.ownerDocument, elem ) ||
elem.getRootNode( composed ) === elem.ownerDocument; elem.getRootNode( composed ) === elem.ownerDocument;
...@@ -5359,8 +5363,7 @@ jQuery.event = { ...@@ -5359,8 +5363,7 @@ jQuery.event = {
// Claim the first handler // Claim the first handler
if ( rcheckableType.test( el.type ) && if ( rcheckableType.test( el.type ) &&
el.click && nodeName( el, "input" ) && el.click && nodeName( el, "input" ) ) {
dataPriv.get( el, "click" ) === undefined ) {
// dataPriv.set( el, "click", ... ) // dataPriv.set( el, "click", ... )
leverageNative( el, "click", returnTrue ); leverageNative( el, "click", returnTrue );
...@@ -5377,8 +5380,7 @@ jQuery.event = { ...@@ -5377,8 +5380,7 @@ jQuery.event = {
// Force setup before triggering a click // Force setup before triggering a click
if ( rcheckableType.test( el.type ) && if ( rcheckableType.test( el.type ) &&
el.click && nodeName( el, "input" ) && el.click && nodeName( el, "input" ) ) {
dataPriv.get( el, "click" ) === undefined ) {
leverageNative( el, "click" ); leverageNative( el, "click" );
} }
...@@ -5419,7 +5421,9 @@ function leverageNative( el, type, expectSync ) { ...@@ -5419,7 +5421,9 @@ function leverageNative( el, type, expectSync ) {
// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
if ( !expectSync ) { if ( !expectSync ) {
jQuery.event.add( el, type, returnTrue ); if ( dataPriv.get( el, type ) === undefined ) {
jQuery.event.add( el, type, returnTrue );
}
return; return;
} }
...@@ -5434,9 +5438,13 @@ function leverageNative( el, type, expectSync ) { ...@@ -5434,9 +5438,13 @@ function leverageNative( el, type, expectSync ) {
if ( ( event.isTrigger & 1 ) && this[ type ] ) { if ( ( event.isTrigger & 1 ) && this[ type ] ) {
// Interrupt processing of the outer synthetic .trigger()ed event // Interrupt processing of the outer synthetic .trigger()ed event
if ( !saved ) { // Saved data should be false in such cases, but might be a leftover capture object
// from an async native handler (gh-4350)
if ( !saved.length ) {
// Store arguments for use when handling the inner native event // Store arguments for use when handling the inner native event
// There will always be at least one argument (an event object), so this array
// will not be confused with a leftover capture object.
saved = slice.call( arguments ); saved = slice.call( arguments );
dataPriv.set( this, type, saved ); dataPriv.set( this, type, saved );
...@@ -5449,14 +5457,14 @@ function leverageNative( el, type, expectSync ) { ...@@ -5449,14 +5457,14 @@ function leverageNative( el, type, expectSync ) {
if ( saved !== result || notAsync ) { if ( saved !== result || notAsync ) {
dataPriv.set( this, type, false ); dataPriv.set( this, type, false );
} else { } else {
result = undefined; result = {};
} }
if ( saved !== result ) { if ( saved !== result ) {
// Cancel the outer synthetic event // Cancel the outer synthetic event
event.stopImmediatePropagation(); event.stopImmediatePropagation();
event.preventDefault(); event.preventDefault();
return result; return result.value;
} }
// If this is an inner synthetic event for an event with a bubbling surrogate // If this is an inner synthetic event for an event with a bubbling surrogate
...@@ -5471,17 +5479,19 @@ function leverageNative( el, type, expectSync ) { ...@@ -5471,17 +5479,19 @@ function leverageNative( el, type, expectSync ) {
// If this is a native event triggered above, everything is now in order // If this is a native event triggered above, everything is now in order
// Fire an inner synthetic event with the original arguments // Fire an inner synthetic event with the original arguments
} else if ( saved ) { } else if ( saved.length ) {
// ...and capture the result // ...and capture the result
dataPriv.set( this, type, jQuery.event.trigger( dataPriv.set( this, type, {
value: jQuery.event.trigger(
// Support: IE <=9 - 11+
// Extend with the prototype to reset the above stopImmediatePropagation() // Support: IE <=9 - 11+
jQuery.extend( saved.shift(), jQuery.Event.prototype ), // Extend with the prototype to reset the above stopImmediatePropagation()
saved, jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
this saved.slice( 1 ),
) ); this
)
} );
// Abort handling of the native event // Abort handling of the native event
event.stopImmediatePropagation(); event.stopImmediatePropagation();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*! /*!
* jQuery JavaScript Library v3.4.0 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector * jQuery JavaScript Library v3.4.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector
* https://jquery.com/ * https://jquery.com/
* *
* Includes Sizzle.js * Includes Sizzle.js
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Released under the MIT license * Released under the MIT license
* https://jquery.org/license * https://jquery.org/license
* *
* Date: 2019-04-10T19:49Z * Date: 2019-05-01T21:04Z
*/ */
( function( global, factory ) { ( function( global, factory ) {
...@@ -142,7 +142,7 @@ function toType( obj ) { ...@@ -142,7 +142,7 @@ function toType( obj ) {
var var
version = "3.4.0 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector", version = "3.4.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
...@@ -4498,8 +4498,12 @@ var documentElement = document.documentElement; ...@@ -4498,8 +4498,12 @@ var documentElement = document.documentElement;
}, },
composed = { composed: true }; composed = { composed: true };
// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
// Check attachment across shadow DOM boundaries when possible (gh-3504) // Check attachment across shadow DOM boundaries when possible (gh-3504)
if ( documentElement.attachShadow ) { // Support: iOS 10.0-10.2 only
// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
// leading to errors. We need to check for `getRootNode`.
if ( documentElement.getRootNode ) {
isAttached = function( elem ) { isAttached = function( elem ) {
return jQuery.contains( elem.ownerDocument, elem ) || return jQuery.contains( elem.ownerDocument, elem ) ||
elem.getRootNode( composed ) === elem.ownerDocument; elem.getRootNode( composed ) === elem.ownerDocument;
...@@ -5359,8 +5363,7 @@ jQuery.event = { ...@@ -5359,8 +5363,7 @@ jQuery.event = {
// Claim the first handler // Claim the first handler
if ( rcheckableType.test( el.type ) && if ( rcheckableType.test( el.type ) &&
el.click && nodeName( el, "input" ) && el.click && nodeName( el, "input" ) ) {
dataPriv.get( el, "click" ) === undefined ) {
// dataPriv.set( el, "click", ... ) // dataPriv.set( el, "click", ... )
leverageNative( el, "click", returnTrue ); leverageNative( el, "click", returnTrue );
...@@ -5377,8 +5380,7 @@ jQuery.event = { ...@@ -5377,8 +5380,7 @@ jQuery.event = {
// Force setup before triggering a click // Force setup before triggering a click
if ( rcheckableType.test( el.type ) && if ( rcheckableType.test( el.type ) &&
el.click && nodeName( el, "input" ) && el.click && nodeName( el, "input" ) ) {
dataPriv.get( el, "click" ) === undefined ) {
leverageNative( el, "click" ); leverageNative( el, "click" );
} }
...@@ -5419,7 +5421,9 @@ function leverageNative( el, type, expectSync ) { ...@@ -5419,7 +5421,9 @@ function leverageNative( el, type, expectSync ) {
// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
if ( !expectSync ) { if ( !expectSync ) {
jQuery.event.add( el, type, returnTrue ); if ( dataPriv.get( el, type ) === undefined ) {
jQuery.event.add( el, type, returnTrue );
}
return; return;
} }
...@@ -5434,9 +5438,13 @@ function leverageNative( el, type, expectSync ) { ...@@ -5434,9 +5438,13 @@ function leverageNative( el, type, expectSync ) {
if ( ( event.isTrigger & 1 ) && this[ type ] ) { if ( ( event.isTrigger & 1 ) && this[ type ] ) {
// Interrupt processing of the outer synthetic .trigger()ed event // Interrupt processing of the outer synthetic .trigger()ed event
if ( !saved ) { // Saved data should be false in such cases, but might be a leftover capture object
// from an async native handler (gh-4350)
if ( !saved.length ) {
// Store arguments for use when handling the inner native event // Store arguments for use when handling the inner native event
// There will always be at least one argument (an event object), so this array
// will not be confused with a leftover capture object.
saved = slice.call( arguments ); saved = slice.call( arguments );
dataPriv.set( this, type, saved ); dataPriv.set( this, type, saved );
...@@ -5449,14 +5457,14 @@ function leverageNative( el, type, expectSync ) { ...@@ -5449,14 +5457,14 @@ function leverageNative( el, type, expectSync ) {
if ( saved !== result || notAsync ) { if ( saved !== result || notAsync ) {
dataPriv.set( this, type, false ); dataPriv.set( this, type, false );
} else { } else {
result = undefined; result = {};
} }
if ( saved !== result ) { if ( saved !== result ) {
// Cancel the outer synthetic event // Cancel the outer synthetic event
event.stopImmediatePropagation(); event.stopImmediatePropagation();
event.preventDefault(); event.preventDefault();
return result; return result.value;
} }
// If this is an inner synthetic event for an event with a bubbling surrogate // If this is an inner synthetic event for an event with a bubbling surrogate
...@@ -5471,17 +5479,19 @@ function leverageNative( el, type, expectSync ) { ...@@ -5471,17 +5479,19 @@ function leverageNative( el, type, expectSync ) {
// If this is a native event triggered above, everything is now in order // If this is a native event triggered above, everything is now in order
// Fire an inner synthetic event with the original arguments // Fire an inner synthetic event with the original arguments
} else if ( saved ) { } else if ( saved.length ) {
// ...and capture the result // ...and capture the result
dataPriv.set( this, type, jQuery.event.trigger( dataPriv.set( this, type, {
value: jQuery.event.trigger(
// Support: IE <=9 - 11+
// Extend with the prototype to reset the above stopImmediatePropagation() // Support: IE <=9 - 11+
jQuery.extend( saved.shift(), jQuery.Event.prototype ), // Extend with the prototype to reset the above stopImmediatePropagation()
saved, jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
this saved.slice( 1 ),
) ); this
)
} );
// Abort handling of the native event // Abort handling of the native event
event.stopImmediatePropagation(); event.stopImmediatePropagation();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
"name": "jquery", "name": "jquery",
"title": "jQuery", "title": "jQuery",
"description": "JavaScript library for DOM operations", "description": "JavaScript library for DOM operations",
"version": "3.4.0", "version": "3.4.1",
"main": "dist/jquery.js", "main": "dist/jquery.js",
"homepage": "https://jquery.com", "homepage": "https://jquery.com",
"author": { "author": {
"name": "JS Foundation and other contributors", "name": "JS Foundation and other contributors",
"url": "https://github.com/jquery/jquery/blob/3.4.0/AUTHORS.txt" "url": "https://github.com/jquery/jquery/blob/3.4.1/AUTHORS.txt"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
......
...@@ -3,7 +3,12 @@ ...@@ -3,7 +3,12 @@
"extends": "../.eslintrc-browser.json", "extends": "../.eslintrc-browser.json",
"globals": { "overrides": [
"jQuery": true {
} "files": "wrapper.js",
"globals": {
"jQuery": false
}
}
]
} }
...@@ -27,7 +27,7 @@ define( [ ...@@ -27,7 +27,7 @@ define( [
"use strict"; "use strict";
var var
version = "3.4.0", version = "3.4.1",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
......
...@@ -10,8 +10,12 @@ define( [ ...@@ -10,8 +10,12 @@ define( [
}, },
composed = { composed: true }; composed = { composed: true };
// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
// Check attachment across shadow DOM boundaries when possible (gh-3504) // Check attachment across shadow DOM boundaries when possible (gh-3504)
if ( documentElement.attachShadow ) { // Support: iOS 10.0-10.2 only
// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
// leading to errors. We need to check for `getRootNode`.
if ( documentElement.getRootNode ) {
isAttached = function( elem ) { isAttached = function( elem ) {
return jQuery.contains( elem.ownerDocument, elem ) || return jQuery.contains( elem.ownerDocument, elem ) ||
elem.getRootNode( composed ) === elem.ownerDocument; elem.getRootNode( composed ) === elem.ownerDocument;
......
define( [ "../var/document" ], function( document ) { define( [
"../var/document",
"../core"
], function( document, jQuery ) {
"use strict"; "use strict";
......
...@@ -479,8 +479,7 @@ jQuery.event = { ...@@ -479,8 +479,7 @@ jQuery.event = {
// Claim the first handler // Claim the first handler
if ( rcheckableType.test( el.type ) && if ( rcheckableType.test( el.type ) &&
el.click && nodeName( el, "input" ) && el.click && nodeName( el, "input" ) ) {
dataPriv.get( el, "click" ) === undefined ) {
// dataPriv.set( el, "click", ... ) // dataPriv.set( el, "click", ... )
leverageNative( el, "click", returnTrue ); leverageNative( el, "click", returnTrue );
...@@ -497,8 +496,7 @@ jQuery.event = { ...@@ -497,8 +496,7 @@ jQuery.event = {
// Force setup before triggering a click // Force setup before triggering a click
if ( rcheckableType.test( el.type ) && if ( rcheckableType.test( el.type ) &&
el.click && nodeName( el, "input" ) && el.click && nodeName( el, "input" ) ) {
dataPriv.get( el, "click" ) === undefined ) {
leverageNative( el, "click" ); leverageNative( el, "click" );
} }
...@@ -539,7 +537,9 @@ function leverageNative( el, type, expectSync ) { ...@@ -539,7 +537,9 @@ function leverageNative( el, type, expectSync ) {
// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
if ( !expectSync ) { if ( !expectSync ) {
jQuery.event.add( el, type, returnTrue ); if ( dataPriv.get( el, type ) === undefined ) {
jQuery.event.add( el, type, returnTrue );
}
return; return;
} }
...@@ -554,9 +554,13 @@ function leverageNative( el, type, expectSync ) { ...@@ -554,9 +554,13 @@ function leverageNative( el, type, expectSync ) {
if ( ( event.isTrigger & 1 ) && this[ type ] ) { if ( ( event.isTrigger & 1 ) && this[ type ] ) {
// Interrupt processing of the outer synthetic .trigger()ed event // Interrupt processing of the outer synthetic .trigger()ed event
if ( !saved ) { // Saved data should be false in such cases, but might be a leftover capture object
// from an async native handler (gh-4350)
if ( !saved.length ) {
// Store arguments for use when handling the inner native event // Store arguments for use when handling the inner native event
// There will always be at least one argument (an event object), so this array
// will not be confused with a leftover capture object.
saved = slice.call( arguments ); saved = slice.call( arguments );
dataPriv.set( this, type, saved ); dataPriv.set( this, type, saved );
...@@ -569,14 +573,14 @@ function leverageNative( el, type, expectSync ) { ...@@ -569,14 +573,14 @@ function leverageNative( el, type, expectSync ) {
if ( saved !== result || notAsync ) { if ( saved !== result || notAsync ) {
dataPriv.set( this, type, false ); dataPriv.set( this, type, false );
} else { } else {
result = undefined; result = {};
} }
if ( saved !== result ) { if ( saved !== result ) {
// Cancel the outer synthetic event // Cancel the outer synthetic event
event.stopImmediatePropagation(); event.stopImmediatePropagation();
event.preventDefault(); event.preventDefault();
return result; return result.value;
} }
// If this is an inner synthetic event for an event with a bubbling surrogate // If this is an inner synthetic event for an event with a bubbling surrogate
...@@ -591,17 +595,19 @@ function leverageNative( el, type, expectSync ) { ...@@ -591,17 +595,19 @@ function leverageNative( el, type, expectSync ) {
// If this is a native event triggered above, everything is now in order // If this is a native event triggered above, everything is now in order
// Fire an inner synthetic event with the original arguments // Fire an inner synthetic event with the original arguments
} else if ( saved ) { } else if ( saved.length ) {
// ...and capture the result // ...and capture the result
dataPriv.set( this, type, jQuery.event.trigger( dataPriv.set( this, type, {
value: jQuery.event.trigger(
// Support: IE <=9 - 11+
// Extend with the prototype to reset the above stopImmediatePropagation() // Support: IE <=9 - 11+
jQuery.extend( saved.shift(), jQuery.Event.prototype ), // Extend with the prototype to reset the above stopImmediatePropagation()
saved, jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
this saved.slice( 1 ),
) ); this
)
} );
// Abort handling of the native event // Abort handling of the native event
event.stopImmediatePropagation(); event.stopImmediatePropagation();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment