diff options
author | Mike Sherov <mike.sherov@gmail.com> | 2014-08-13 19:36:07 -0400 |
---|---|---|
committer | Mike Sherov <mike.sherov@gmail.com> | 2014-08-13 19:36:07 -0400 |
commit | 4dad6bb99dae280108338c040d016f795d0da328 (patch) | |
tree | 201fac7883facbe2e8f12266e08c916b13cad123 | |
parent | 98b7a7dd12d8c798eaecfcb743138586d62b868f (diff) | |
download | jquery-ui-4dad6bb99dae280108338c040d016f795d0da328.tar.gz jquery-ui-4dad6bb99dae280108338c040d016f795d0da328.zip |
Droppable: Account for draggable margins when detecting hover
Fixes #6876
-rw-r--r-- | tests/unit/droppable/droppable_options.js | 53 | ||||
-rw-r--r-- | ui/droppable.js | 4 |
2 files changed, 53 insertions, 4 deletions
diff --git a/tests/unit/droppable/droppable_options.js b/tests/unit/droppable/droppable_options.js index 9bfa25881..047858abf 100644 --- a/tests/unit/droppable/droppable_options.js +++ b/tests/unit/droppable/droppable_options.js @@ -89,11 +89,60 @@ test( "hoverClass", function() { test( "tolerance, fit", function() { ok(false, 'missing test - untested code is broken code'); }); +*/ test( "tolerance, intersect", function() { - ok(false, 'missing test - untested code is broken code'); + expect( 2 ); + + var draggable, droppable, + dataset = [ + [ 0, 0, false, "too far up and left" ], + [ 6, 0, false, "too far up" ], + [ 0, 6, false, "too far left" ], + [ 6, 6, true, "top left corner" ], + [ 14, 14, true, "bottom right corner" ], + [ 15, 6, false, "too far right" ], + [ 6, 15, false, "too far down" ], + [ 15, 15, false, "too far down and right" ] + ]; + + draggable = $( "<div />" ) + .appendTo( "#qunit-fixture" ) + .css({ + width: 10, + height: 10, + position: "absolute", + + // http://bugs.jqueryui.com/ticket/6876 + // Droppable: droppable region is offset by draggables margin + marginTop: 3, + marginLeft: 3 + }) + .draggable(); + + droppable = $( "<div />" ) + .appendTo( "#qunit-fixture" ) + .css({ width: 10, height: 10, position: "absolute", top: 13, left: 13 }) + .droppable({ tolerance: "intersect" }); + + $.each( dataset, function() { + var data = this; + + draggable.css({ + top: 0, + left: 0 + }); + + droppable.unbind( "drop" ).bind( "drop", function() { + equal( true, data[ 2 ], data[ 3 ] ); + }); + + $( draggable ).simulate( "drag", { + dx: data[ 0 ], + dy: data[ 1 ] + }); + }); }); -*/ test( "tolerance, pointer", function() { expect( 3 ); diff --git a/ui/droppable.js b/ui/droppable.js index fce8d9bd9..e889d89cd 100644 --- a/ui/droppable.js +++ b/ui/droppable.js @@ -235,8 +235,8 @@ $.ui.intersect = (function() { return false; } - var x1 = ( draggable.positionAbs || draggable.position.absolute ).left, - y1 = ( draggable.positionAbs || draggable.position.absolute ).top, + var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left, + y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top, x2 = x1 + draggable.helperProportions.width, y2 = y1 + draggable.helperProportions.height, l = droppable.offset.left, |