Skip to content

Commit

Permalink
Fix #10006: Allow .show() to work on detached elements.
Browse files Browse the repository at this point in the history
  • Loading branch information
markelog authored and dmethvin committed Jan 13, 2012
1 parent d07116a commit cc5e8e3
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/effects.js
Expand Up @@ -38,7 +38,8 @@ jQuery.fn.extend({
// Set elements which have been overridden with display: none // Set elements which have been overridden with display: none
// in a stylesheet to whatever the default browser style is // in a stylesheet to whatever the default browser style is
// for such an element // for such an element
if ( display === "" && jQuery.css(elem, "display") === "none" ) { if ( (display === "" && jQuery.css(elem, "display") === "none") ||
!jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) ); jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
} }
} }
Expand Down
54 changes: 54 additions & 0 deletions test/unit/effects.js
Expand Up @@ -188,6 +188,60 @@ test("show() resolves correct default display #8099", function() {


}); });


test( "show() resolves correct default display, detached nodes (#10006)", function(){
// Tests originally contributed by Orkel in
// https://github.com/jquery/jquery/pull/458
expect( 11 );

var div, span;

div = jQuery("<div class='hidden'>");
div.show().appendTo("#qunit-fixture");
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through stylesheets ) div is visible." );

div = jQuery("<div style='display: none'>");
div.show().appendTo("#qunit-fixture");
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through inline style ) div is visible." );

span = jQuery("<span class='hidden'/>");
span.show().appendTo("#qunit-fixture");
equal( span.css("display"), "inline", "Make sure a detached, pre-hidden( through stylesheets ) span has default display." );

span = jQuery("<span style='display: inline'/>");
span.show().appendTo("#qunit-fixture");
equal( span.css("display"), "inline", "Make sure a detached, pre-hidden( through inline style ) span has default display." );

div = jQuery("<div><div class='hidden'></div></div>").children("div");
div.show().appendTo("#qunit-fixture");
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through stylesheets ) div inside another visible div is visible." );

div = jQuery("<div><div style='display: none'></div></div>").children("div");
div.show().appendTo("#qunit-fixture");
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through inline style ) div inside another visible div is visible." );

div = jQuery("div.hidden");
div.detach().show();
equal( div.css("display"), "block", "Make sure a detached( through detach() ), pre-hidden div is visible." );
div.remove();

span = jQuery("<span>");
span.appendTo("#qunit-fixture").detach().show().appendTo("#qunit-fixture" );
equal( span.css("display"), "inline", "Make sure a detached( through detach() ), pre-hidden span has default display." );
span.remove();

div = jQuery("<div>");
div.show().appendTo("#qunit-fixture");
ok( !!div.get( 0 ).style.display, "Make sure not hidden div has a inline style." );

div = jQuery( document.createElement("div") );
div.show().appendTo("#qunit-fixture");
equal( div.css("display"), "block", "Make sure a pre-created element has default display." );

div = jQuery("<div style='display: inline'/>");
div.show().appendTo("#qunit-fixture");
equal( div.css("display"), "inline", "Make sure that element has same display when it was created." );
});



test("animate(Hash, Object, Function)", function() { test("animate(Hash, Object, Function)", function() {
expect(1); expect(1);
Expand Down
1 change: 1 addition & 0 deletions test/unit/queue.js
Expand Up @@ -113,6 +113,7 @@ test("callbacks keep their place in the queue", function() {


div.promise("fx").done(function() { div.promise("fx").done(function() {
equal(counter, 4, "Deferreds resolved"); equal(counter, 4, "Deferreds resolved");
jQuery.removeData( div[0], "olddisplay", true );
start(); start();
}); });
}); });
Expand Down

0 comments on commit cc5e8e3

Please sign in to comment.