// 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;
}
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 );
+});
+
})();