From c18d608537d8945de6c5855a9475657177fa74ac Mon Sep 17 00:00:00 2001 From: Shashanka Nataraj Date: Fri, 23 Jun 2017 04:14:43 +0000 Subject: [PATCH] Core: Deprecate jQuery.isWindow Fixes gh-3629 Close gh-3702 --- src/core.js | 9 +++------ src/deprecated.js | 6 ++++-- src/dimensions.js | 5 +++-- src/event/trigger.js | 8 ++++---- src/offset.js | 6 +++--- src/var/isWindow.js | 8 ++++++++ test/unit/basic.js | 5 +---- test/unit/core.js | 19 ------------------- test/unit/deprecated.js | 19 +++++++++++++++++++ 9 files changed, 45 insertions(+), 40 deletions(-) create mode 100644 src/var/isWindow.js diff --git a/src/core.js b/src/core.js index ce43d737e..fc538a49a 100644 --- a/src/core.js +++ b/src/core.js @@ -16,10 +16,11 @@ define( [ "./var/fnToString", "./var/ObjectFunctionString", "./var/support", + "./var/isWindow", "./core/DOMEval" ], function( arr, document, getProto, slice, concat, push, indexOf, class2type, toString, hasOwn, fnToString, ObjectFunctionString, - support, DOMEval ) { + support, isWindow, DOMEval ) { "use strict"; @@ -220,10 +221,6 @@ jQuery.extend( { return typeof obj === "function" && typeof obj.nodeType !== "number"; }, - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - isNumeric: function( obj ) { // As of jQuery 3.0, isNumeric is limited to @@ -469,7 +466,7 @@ function isArrayLike( obj ) { var length = !!obj && "length" in obj && obj.length, type = jQuery.type( obj ); - if ( jQuery.isFunction( obj ) || jQuery.isWindow( obj ) ) { + if ( jQuery.isFunction( obj ) || isWindow( obj ) ) { return false; } diff --git a/src/deprecated.js b/src/deprecated.js index 9589ec872..3ae78aac8 100644 --- a/src/deprecated.js +++ b/src/deprecated.js @@ -1,7 +1,8 @@ define( [ "./core", - "./core/nodeName" -], function( jQuery, nodeName ) { + "./core/nodeName", + "./var/isWindow" +], function( jQuery, nodeName, isWindow ) { "use strict"; @@ -36,5 +37,6 @@ jQuery.holdReady = function( hold ) { jQuery.isArray = Array.isArray; jQuery.parseJSON = JSON.parse; jQuery.nodeName = nodeName; +jQuery.isWindow = isWindow; } ); diff --git a/src/dimensions.js b/src/dimensions.js index 46e7b1c46..2a2c0391d 100644 --- a/src/dimensions.js +++ b/src/dimensions.js @@ -1,8 +1,9 @@ define( [ "./core", "./core/access", + "./var/isWindow", "./css" -], function( jQuery, access ) { +], function( jQuery, access, isWindow ) { "use strict"; @@ -19,7 +20,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { return access( this, function( elem, type, value ) { var doc; - if ( jQuery.isWindow( elem ) ) { + if ( isWindow( elem ) ) { // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) return funcName.indexOf( "outer" ) === 0 ? diff --git a/src/event/trigger.js b/src/event/trigger.js index c3b048026..1ecda7d68 100644 --- a/src/event/trigger.js +++ b/src/event/trigger.js @@ -4,9 +4,9 @@ define( [ "../data/var/dataPriv", "../data/var/acceptData", "../var/hasOwn", - + "../var/isWindow", "../event" -], function( jQuery, document, dataPriv, acceptData, hasOwn ) { +], function( jQuery, document, dataPriv, acceptData, hasOwn, isWindow ) { "use strict"; @@ -76,7 +76,7 @@ jQuery.extend( jQuery.event, { // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { @@ -128,7 +128,7 @@ jQuery.extend( jQuery.event, { // Call a native DOM method on the target with the same name as the event. // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + if ( ontype && jQuery.isFunction( elem[ type ] ) && !isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; diff --git a/src/offset.js b/src/offset.js index 563c6e8cd..f1d64d6a2 100644 --- a/src/offset.js +++ b/src/offset.js @@ -7,12 +7,12 @@ define( [ "./css/curCSS", "./css/addGetHookIf", "./css/support", - + "./var/isWindow", "./core/init", "./css", "./selector" // contains ], function( jQuery, access, document, documentElement, rnumnonpx, - curCSS, addGetHookIf, support ) { + curCSS, addGetHookIf, support, isWindow ) { "use strict"; @@ -186,7 +186,7 @@ jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( // Coalesce documents and windows var win; - if ( jQuery.isWindow( elem ) ) { + if ( isWindow( elem ) ) { win = elem; } else if ( elem.nodeType === 9 ) { win = elem.defaultView; diff --git a/src/var/isWindow.js b/src/var/isWindow.js new file mode 100644 index 000000000..2ba1168dd --- /dev/null +++ b/src/var/isWindow.js @@ -0,0 +1,8 @@ +define( function() { + "use strict"; + + return function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + +} ); diff --git a/test/unit/basic.js b/test/unit/basic.js index 5a2f5abc2..15bca8ff6 100644 --- a/test/unit/basic.js +++ b/test/unit/basic.js @@ -76,7 +76,7 @@ QUnit.test( "show/hide", function( assert ) { } QUnit.test( "core", function( assert ) { - assert.expect( 27 ); + assert.expect( 25 ); var elem = jQuery( "
" ); @@ -100,9 +100,6 @@ QUnit.test( "core", function( assert ) { "" ) ), "jQuery.isXMLDoc" ); - assert.ok( jQuery.isWindow( window ), "jQuery.isWindow(window)" ); - assert.ok( !jQuery.isWindow( 2 ), "jQuery.isWindow(Number)" ); - assert.strictEqual( jQuery.inArray( 3, [ "a", 6, false, 3, {} ] ), 3, "jQuery.inArray - true" ); assert.strictEqual( jQuery.inArray( 3, [ "a", 6, false, "3", {} ] ), diff --git a/test/unit/core.js b/test/unit/core.js index 66a18268c..322b21dc6 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -680,25 +680,6 @@ QUnit.test( "isXMLDoc - XML", function( assert ) { assert.ok( jQuery.isXMLDoc( jQuery( "tab", xml )[ 0 ] ), "XML Tab Element" ); } ); -QUnit.test( "isWindow", function( assert ) { - assert.expect( 14 ); - - assert.ok( jQuery.isWindow( window ), "window" ); - assert.ok( jQuery.isWindow( document.getElementsByTagName( "iframe" )[ 0 ].contentWindow ), "iframe.contentWindow" ); - assert.ok( !jQuery.isWindow(), "empty" ); - assert.ok( !jQuery.isWindow( null ), "null" ); - assert.ok( !jQuery.isWindow( undefined ), "undefined" ); - assert.ok( !jQuery.isWindow( document ), "document" ); - assert.ok( !jQuery.isWindow( document.documentElement ), "documentElement" ); - assert.ok( !jQuery.isWindow( "" ), "string" ); - assert.ok( !jQuery.isWindow( 1 ), "number" ); - assert.ok( !jQuery.isWindow( true ), "boolean" ); - assert.ok( !jQuery.isWindow( {} ), "object" ); - assert.ok( !jQuery.isWindow( { setInterval: function() {} } ), "fake window" ); - assert.ok( !jQuery.isWindow( /window/ ), "regexp" ); - assert.ok( !jQuery.isWindow( function() {} ), "function" ); -} ); - QUnit.test( "jQuery('html')", function( assert ) { assert.expect( 18 ); diff --git a/test/unit/deprecated.js b/test/unit/deprecated.js index 5c05d9b00..f555ac655 100644 --- a/test/unit/deprecated.js +++ b/test/unit/deprecated.js @@ -164,3 +164,22 @@ QUnit.test( "jQuery.nodeName", function( assert ) { "Works on custom elements (true)" ); } ); + +QUnit.test( "jQuery.isWindow", function( assert ) { + assert.expect( 14 ); + + assert.ok( jQuery.isWindow( window ), "window" ); + assert.ok( jQuery.isWindow( document.getElementsByTagName( "iframe" )[ 0 ].contentWindow ), "iframe.contentWindow" ); + assert.ok( !jQuery.isWindow(), "empty" ); + assert.ok( !jQuery.isWindow( null ), "null" ); + assert.ok( !jQuery.isWindow( undefined ), "undefined" ); + assert.ok( !jQuery.isWindow( document ), "document" ); + assert.ok( !jQuery.isWindow( document.documentElement ), "documentElement" ); + assert.ok( !jQuery.isWindow( "" ), "string" ); + assert.ok( !jQuery.isWindow( 1 ), "number" ); + assert.ok( !jQuery.isWindow( true ), "boolean" ); + assert.ok( !jQuery.isWindow( {} ), "object" ); + assert.ok( !jQuery.isWindow( { setInterval: function() {} } ), "fake window" ); + assert.ok( !jQuery.isWindow( /window/ ), "regexp" ); + assert.ok( !jQuery.isWindow( function() {} ), "function" ); +} ); -- 2.39.5