diff options
author | Renato Oliveira dos Santos <ros3@cin.ufpe.br> | 2013-03-17 03:40:18 -0300 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2013-04-16 23:07:39 -0400 |
commit | ea5c22ec12e6a548b1ec2d7b0dcd9f71bea8d5dd (patch) | |
tree | 2bdcad9d896f0222c6a3fdbc52c834f63bc2fcb8 | |
parent | 2c7b1b8502ba85320678499c8499b647c1ea82e2 (diff) | |
download | jquery-ea5c22ec12e6a548b1ec2d7b0dcd9f71bea8d5dd.tar.gz jquery-ea5c22ec12e6a548b1ec2d7b0dcd9f71bea8d5dd.zip |
Fix #13483. Let slideDown() work after stop(). Close gh-1205.
-rw-r--r-- | AUTHORS.txt | 1 | ||||
-rw-r--r-- | src/effects.js | 10 | ||||
-rw-r--r-- | test/unit/effects.js | 60 |
3 files changed, 70 insertions, 1 deletions
diff --git a/AUTHORS.txt b/AUTHORS.txt index fea67a6c3..9ce13edf2 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -166,3 +166,4 @@ Dmitry Gusev <dmitry.gusev@gmail.com> Michał Gołębiowski <m.goleb@gmail.com> Steven Benner <admin@stevenbenner.com> Li Xudong <istonelee@gmail.com> +Renato Oliveira dos Santos <ros3@cin.ufpe.br> diff --git a/src/effects.js b/src/effects.js index 7f54dd56e..a1ba37707 100644 --- a/src/effects.js +++ b/src/effects.js @@ -304,21 +304,29 @@ function defaultPrefilter( elem, props, opts ) { // show/hide pass + dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); for ( index in props ) { value = props[ index ]; if ( rfxtypes.exec( value ) ) { delete props[ index ]; toggle = toggle || value === "toggle"; if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden + if( value === "show" && dataShow[ index ] !== undefined ) { + hidden = true; + } else { continue; } + } handled.push( index ); } } length = handled.length; - if ( length ) { + if ( !length ) { dataShow = data_priv.get( elem, "fxshow" ) || data_priv.access( elem, "fxshow", {} ); + } else { if ( "hidden" in dataShow ) { hidden = dataShow.hidden; } diff --git a/test/unit/effects.js b/test/unit/effects.js index b8e49ba45..1b2bee85a 100644 --- a/test/unit/effects.js +++ b/test/unit/effects.js @@ -2033,4 +2033,64 @@ test( ".finish() calls finish of custom queue functions", function() { div.remove(); }); +asyncTest( "slideDown() after stop() (#13483)", 2, function() { + var ul = jQuery( "<ul style='height: 100px;display: block'></ul>" ), + origHeight = ul.height(); + + // First test. slideUp() -> stop() in the middle -> slideDown() until the end + ul.slideUp( 1000 ); + setTimeout( function() { + ul.stop( true ); + ul.slideDown( 1, function() { + equal( ul.height(), origHeight, "slideDown() after interrupting slideUp() with stop(). Height must be in original value" ); + + // Second test. slideDown() -> stop() in the middle -> slideDown() until the end + ul.slideUp( 1, function() { + ul.slideDown( 1000 ); + setTimeout( function() { + ul.stop( true ); + ul.slideDown( 1, function() { + equal( ul.height(), origHeight, "slideDown() after interrupting slideDown() with stop(). Height must be in original value" ); + + // Cleanup + ul.remove(); + start(); + }); + }, 500 ); + }); + + }); + }, 500 ); +}); + +asyncTest( "fadeIn() after stop() (related to #13483)", 2, function() { + var ul = jQuery( "<ul style='height: 100px;display: block; opacity: 1'></ul>" ), + origOpacity = ul.css( "opacity" ); + + // First test. fadeOut() -> stop() in the middle -> fadeIn() until the end + ul.fadeOut( 1000 ); + setTimeout( function() { + ul.stop( true ); + ul.fadeIn( 1, function() { + equal( ul.css( "opacity" ), origOpacity, "fadeIn() after interrupting fadeOut() with stop(). Opacity must be in original value" ); + + // Second test. fadeIn() -> stop() in the middle -> fadeIn() until the end + ul.fadeOut( 1, function() { + ul.fadeIn( 1000 ); + setTimeout( function() { + ul.stop( true ); + ul.fadeIn( 1, function() { + equal( ul.css("opacity"), origOpacity, "fadeIn() after interrupting fadeIn() with stop(). Opacity must be in original value" ); + + // Cleanup + ul.remove(); + start(); + }); + }, 500 ); + }); + + }); + }, 500 ); +}); + })(); |