From 7691f7f68867a9ae4cf7470371b032885ef1bf90 Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Thu, 12 Mar 2015 13:16:53 -0400 Subject: [PATCH 1/2] Deferred: Deprecate deferred.pipe() method Ref #89 --- Gruntfile.js | 1 + src/deferred.js | 13 +++++++++++++ test/deferred.js | 21 +++++++++++++++++++++ test/index.html | 1 + warnings.md | 6 ++++++ 5 files changed, 42 insertions(+) create mode 100644 src/deferred.js create mode 100644 test/deferred.js diff --git a/Gruntfile.js b/Gruntfile.js index f96c99d7..b45988a9 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -27,6 +27,7 @@ module.exports = function(grunt) { "src/manipulation.js", "src/event.js", "src/traversing.js", + "src/deferred.js", "src/outro.js" ], tests: { diff --git a/src/deferred.js b/src/deferred.js new file mode 100644 index 00000000..078eaebc --- /dev/null +++ b/src/deferred.js @@ -0,0 +1,13 @@ + +var oldDeferred = jQuery.Deferred; + +jQuery.Deferred = function() { + var deferred = oldDeferred.apply( this, arguments ); + + deferred.pipe = function() { + migrateWarn( "deferred.pipe() is deprecated" ); + return deferred.then.apply( this, arguments ); + }; + + return deferred; +}; diff --git a/test/deferred.js b/test/deferred.js new file mode 100644 index 00000000..9d389734 --- /dev/null +++ b/test/deferred.js @@ -0,0 +1,21 @@ + +module("deferred"); + +test( ".pipe()", function() { + expect( 4 ); + + var d = jQuery.Deferred().resolve( 1 ); + + expectNoWarning( "then", function() { + d.then(function( v ) { + equal( v, 1, "got correct value" ); + }); }); + + expectWarning( "pipe", function() { + d.pipe(function( v ) { + equal( v, 1, "got correct value" ); + }); + }); + +}); + diff --git a/test/index.html b/test/index.html index 44aedc4c..cce28dcb 100644 --- a/test/index.html +++ b/test/index.html @@ -40,6 +40,7 @@ +
diff --git a/warnings.md b/warnings.md index 02c1f946..fd629653 100644 --- a/warnings.md +++ b/warnings.md @@ -148,6 +148,12 @@ $(document).ajaxStart(function(){ $("#status").text("Ajax started"); }); **Solution**: Boolean properties should generally not be passed to `$().attr` at all; replace with `$().prop` unless you truly intend to update the underlying HTML *attribute*. +### JQMIGRATE: deferred.pipe() is deprecated + +**Cause**: The `.pipe()` method on a `jQuery.Deferred` object was deprecated as of jQuery 1.8, when the `.then()` method was changed to perform the same function. + +**Solution**: Change all occurrences of `.pipe()` to `.then()`. + ### JQMIGRATE: jQuery.clean() is deprecated **Cause**: `jQuery.buildFragment()` and `jQuery.clean()` are undocumented internal methods. The signature of `jQuery.buildFragment()` was changed in jQuery 1.8 and 1.9, and `jQuery.clean()` was removed in 1.9. However, we are aware of some plugins or other code that may be using them. From 32e1b7f620d39b623c3beff8a7221c7f5a5b445f Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Fri, 13 Mar 2015 13:42:37 -0400 Subject: [PATCH 2/2] [squash]: Test and shim the deferred.promise().pipe method as well --- src/deferred.js | 18 +++++++++++++----- test/deferred.js | 17 +++++++++++++++-- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/deferred.js b/src/deferred.js index 078eaebc..d83e2556 100644 --- a/src/deferred.js +++ b/src/deferred.js @@ -4,10 +4,18 @@ var oldDeferred = jQuery.Deferred; jQuery.Deferred = function() { var deferred = oldDeferred.apply( this, arguments ); - deferred.pipe = function() { - migrateWarn( "deferred.pipe() is deprecated" ); - return deferred.then.apply( this, arguments ); - }; - + // Don't add this method if the current jQuery doesn't provide it + if ( deferred.pipe ) { + + deferred.pipe = function() { + migrateWarn( "deferred.pipe() is deprecated" ); + return deferred.then.apply( this, arguments ); + }; + + deferred.promise().pipe = function() { + return deferred.pipe.apply( this, arguments ); + }; + } + return deferred; }; diff --git a/test/deferred.js b/test/deferred.js index 9d389734..d40b6315 100644 --- a/test/deferred.js +++ b/test/deferred.js @@ -2,10 +2,24 @@ module("deferred"); test( ".pipe()", function() { - expect( 4 ); + expect( 8 ); var d = jQuery.Deferred().resolve( 1 ); + // Deferred + expectNoWarning( "then", function() { + d.then(function( v ) { + equal( v, 1, "got correct value" ); + }); }); + + expectWarning( "pipe", function() { + d.pipe(function( v ) { + equal( v, 1, "got correct value" ); + }); + }); + + // Deferred's promise object + d = d.promise(); expectNoWarning( "then", function() { d.then(function( v ) { equal( v, 1, "got correct value" ); @@ -16,6 +30,5 @@ test( ".pipe()", function() { equal( v, 1, "got correct value" ); }); }); - });