diff options
author | TJ VanToll <tj.vantoll@gmail.com> | 2014-10-31 09:46:41 -0400 |
---|---|---|
committer | Scott González <scott.gonzalez@gmail.com> | 2015-03-10 11:59:14 -0400 |
commit | 189f1d476c2d6f53c88f9e92bdaffbc64ed9c572 (patch) | |
tree | 69ca17be55f82d8d6b2a33c39e30232a92e58cac | |
parent | 258dbe3ae481b74c056e6445bd1aaaface9d6c48 (diff) | |
download | jquery-ui-189f1d476c2d6f53c88f9e92bdaffbc64ed9c572.tar.gz jquery-ui-189f1d476c2d6f53c88f9e92bdaffbc64ed9c572.zip |
Sortable: Redetermine floating flag when recalculating positions
This addresses a bug where users initialize empty sortable lists are
add items dynamically. In this situation refresh() should recognize the
position and orientation of the new items.
Fixes #7498
Closes gh-1381
(cherry picked from commit f656aebe3f99356b7eb91ffdafe6689ecc8fb4ae)
-rw-r--r-- | tests/unit/sortable/sortable_methods.js | 35 | ||||
-rw-r--r-- | ui/sortable.js | 10 |
2 files changed, 40 insertions, 5 deletions
diff --git a/tests/unit/sortable/sortable_methods.js b/tests/unit/sortable/sortable_methods.js index f3fe240e7..9c0a86a35 100644 --- a/tests/unit/sortable/sortable_methods.js +++ b/tests/unit/sortable/sortable_methods.js @@ -90,4 +90,39 @@ test( "disable", function() { equal( chainable, element, "disable is chainable" ); }); +test( "refresh() should update the positions of initially empty lists (see #7498)", function() { + expect( 1 ); + + var changeCount = 0, + element = $( "#qunit-fixture" ).html( "<ul></ul>" ).find( "ul" ); + + element + .css({ + "float": "left", + width: "100px" + }) + .sortable({ + change: function() { + changeCount++; + } + }) + .append( "<li>a</li><li>a</li>" ) + .find( "li" ) + .css({ + "float": "left", + width: "50px", + height: "50px" + }); + + element.sortable( "refresh" ); + + // Switch the order of the two li elements + element.find( "li" ).eq( 0 ).simulate( "drag", { + dx: 55, + moves: 15 + }); + + equal( changeCount, 1 ); +}); + })(jQuery); diff --git a/ui/sortable.js b/ui/sortable.js index 13a57e897..4cfb28979 100644 --- a/ui/sortable.js +++ b/ui/sortable.js @@ -77,17 +77,12 @@ return $.widget("ui.sortable", $.ui.mouse, { }, _create: function() { - - var o = this.options; this.containerCache = {}; this.element.addClass("ui-sortable"); //Get the items this.refresh(); - //Let's determine if the items are being displayed horizontally - this.floating = this.items.length ? o.axis === "x" || this._isFloating(this.items[0].item) : false; - //Let's determine the parent's offset this.offset = this.element.offset(); @@ -731,6 +726,11 @@ return $.widget("ui.sortable", $.ui.mouse, { refreshPositions: function(fast) { + // Determine whether items are being displayed horizontally + this.floating = this.items.length ? + this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) : + false; + //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change if(this.offsetParent && this.helper) { this.offset.parent = this._getParentOffset(); |