diff --git a/tests/unit/sortable/sortable.html b/tests/unit/sortable/sortable.html
index 3edc999b7..f13b895b8 100644
--- a/tests/unit/sortable/sortable.html
+++ b/tests/unit/sortable/sortable.html
@@ -74,20 +74,56 @@
- 1 |
- 2 |
+ 1.1 |
+ 1.2 |
- 3 |
- 4 |
+ 1.3 |
+ 1.4 |
- 5 |
- 6 |
+ 1.5 |
+ 1.6 |
- 7 |
- 8 |
+ 1.7 |
+ 1.8 |
+
+
+
+
+ 2.1 |
+ 2.2 |
+
+
+ 2.3 |
+ 2.4 |
+
+
+ 2.5 |
+ 2.6 |
+
+
+ 2.7 |
+ 2.8 |
+
+
+
+
+ 3.1 |
+ 3.2 |
+
+
+ 3.3 |
+ 3.4 |
+
+
+ 3.5 |
+ 3.6 |
+
+
+ 3.7 |
+ 3.8 |
diff --git a/tests/unit/sortable/sortable_options.js b/tests/unit/sortable/sortable_options.js
index f2beb4dbc..90cf765a2 100644
--- a/tests/unit/sortable/sortable_options.js
+++ b/tests/unit/sortable/sortable_options.js
@@ -388,6 +388,42 @@ test( "{ placholder: String } tr", function() {
});
});
+test( "{ placholder: String } tbody", function() {
+ expect( 6 );
+
+ var originalWidths,
+ element = $( "#sortable-table" ).sortable({
+ placeholder: "test",
+ start: function( event, ui ) {
+ var currentWidths = otherBody.children().map(function() {
+ return $( this ).width();
+ }).get();
+ ok( ui.placeholder.hasClass( "test" ), "placeholder has class" );
+ deepEqual( currentWidths, originalWidths, "table cells maintain size" );
+ equal( ui.placeholder.children().length, 1,
+ "placeholder has one child" );
+ equal( ui.placeholder.children( "tr" ).length, 1,
+ "placeholder's child is tr" );
+ equal( ui.placeholder.find( "> tr" ).children().length,
+ dragBody.find( "> tr:first" ).children().length,
+ "placeholder's tr has correct number of cells" );
+ equal( ui.placeholder.find( "> tr" ).children().html(),
+ $( " " ).html(),
+ "placeholder td has content for forced dimensions" );
+ }
+ }),
+ bodies = element.children( "tbody" ),
+ dragBody = bodies.eq( 0 ),
+ otherBody = bodies.eq( 1 );
+
+ originalWidths = otherBody.children().map(function() {
+ return $( this ).width();
+ }).get();
+ dragBody.simulate( "drag", {
+ dy: 1
+ });
+});
+
/*
test("{ revert: false }, default", function() {
ok(false, "missing test - untested code is broken code.");
diff --git a/ui/sortable.js b/ui/sortable.js
index 4cfb28979..a2dd034ce 100644
--- a/ui/sortable.js
+++ b/ui/sortable.js
@@ -788,12 +788,13 @@ return $.widget("ui.sortable", $.ui.mouse, {
.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
.removeClass("ui-sortable-helper");
- if ( nodeName === "tr" ) {
- that.currentItem.children().each(function() {
- $( " | ", that.document[0] )
- .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
- .appendTo( element );
- });
+ if ( nodeName === "tbody" ) {
+ that._createTrPlaceholder(
+ that.currentItem.find( "tr" ).eq( 0 ),
+ $( "", that.document[ 0 ] ).appendTo( element )
+ );
+ } else if ( nodeName === "tr" ) {
+ that._createTrPlaceholder( that.currentItem, element );
} else if ( nodeName === "img" ) {
element.attr( "src", that.currentItem.attr( "src" ) );
}
@@ -830,6 +831,16 @@ return $.widget("ui.sortable", $.ui.mouse, {
},
+ _createTrPlaceholder: function( sourceTr, targetTr ) {
+ var that = this;
+
+ sourceTr.children().each(function() {
+ $( " | ", that.document[ 0 ] )
+ .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+ .appendTo( targetTr );
+ });
+ },
+
_contactContainers: function(event) {
var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
innermostContainer = null,