From ed31f84c0dd1da969369bb3d005bc53428ff0da1 Mon Sep 17 00:00:00 2001 From: Mathias Stenbom Date: Fri, 2 Nov 2012 09:59:46 +0100 Subject: [PATCH 1/2] resizable: made handles work with complex markup --- tests/unit/resizable/resizable_core.js | 20 ++++++++++++++++++++ ui/jquery.ui.resizable.js | 9 +++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/tests/unit/resizable/resizable_core.js b/tests/unit/resizable/resizable_core.js index f4e6cdedd81..c578535b072 100644 --- a/tests/unit/resizable/resizable_core.js +++ b/tests/unit/resizable/resizable_core.js @@ -145,4 +145,24 @@ test("nw", function() { equal( target.height(), 100, "compare height" ); }); +test("handle with complex markup (#8756)", function() { + expect(2); + + $('#resizable1') + .append( + $('
') + .addClass("ui-resizable-handle") + .addClass("ui-resizable-w") + .append($('
')) + ); + + var handle = '.ui-resizable-w div', target = $('#resizable1').resizable({ handles: 'all' }); + + TestHelpers.resizable.drag(handle, -50); + equal( target.width(), 150, "compare width" ); + + TestHelpers.resizable.drag(handle, 50); + equal( target.width(), 100, "compare width" ); +}); + })(jQuery); diff --git a/ui/jquery.ui.resizable.js b/ui/jquery.ui.resizable.js index 13f6c71d06d..c2ad2871623 100644 --- a/ui/jquery.ui.resizable.js +++ b/ui/jquery.ui.resizable.js @@ -231,14 +231,15 @@ $.widget("ui.resizable", $.ui.mouse, { }, _mouseCapture: function(event) { - var handle = false; + var capture = false; for (var i in this.handles) { - if ($(this.handles[i])[0] == event.target) { - handle = true; + var handle = $(this.handles[i])[0]; + if (handle == event.target || $.contains(handle, event.target)) { + capture = true; } } - return !this.options.disabled && handle; + return !this.options.disabled && capture; }, _mouseStart: function(event) { From 6ee1223b5a58f3a316b00dc40d038af18bca430e Mon Sep 17 00:00:00 2001 From: Mathias Stenbom Date: Fri, 2 Nov 2012 19:25:19 +0100 Subject: [PATCH 2/2] resizable: made handles work with complex markup while draggable --- tests/unit/resizable/resizable.html | 1 + tests/unit/resizable/resizable_core.js | 20 ++++++++++++++++++++ ui/jquery.ui.draggable.js | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/unit/resizable/resizable.html b/tests/unit/resizable/resizable.html index 50099efeeab..af6b958da68 100644 --- a/tests/unit/resizable/resizable.html +++ b/tests/unit/resizable/resizable.html @@ -16,6 +16,7 @@ "ui/jquery.ui.core.js", "ui/jquery.ui.widget.js", "ui/jquery.ui.mouse.js", + "ui/jquery.ui.draggable.js", "ui/jquery.ui.resizable.js" ] }); diff --git a/tests/unit/resizable/resizable_core.js b/tests/unit/resizable/resizable_core.js index c578535b072..30242731275 100644 --- a/tests/unit/resizable/resizable_core.js +++ b/tests/unit/resizable/resizable_core.js @@ -165,4 +165,24 @@ test("handle with complex markup (#8756)", function() { equal( target.width(), 100, "compare width" ); }); +test("handle with complex markup, and draggable (#8757)", function() { + expect(2); + + $('#resizable1') + .append( + $('
') + .addClass("ui-resizable-handle") + .addClass("ui-resizable-w") + .append($('
')) + ); + + var handle = '.ui-resizable-w div', target = $('#resizable1').draggable().resizable({ handles: 'all' }); + + TestHelpers.resizable.drag(handle, -50); + equal( target.width(), 150, "compare width" ); + + TestHelpers.resizable.drag(handle, 50); + equal( target.width(), 100, "compare width" ); +}); + })(jQuery); diff --git a/ui/jquery.ui.draggable.js b/ui/jquery.ui.draggable.js index 7a6d8e2e668..a91f2dbfa94 100644 --- a/ui/jquery.ui.draggable.js +++ b/ui/jquery.ui.draggable.js @@ -67,7 +67,7 @@ $.widget("ui.draggable", $.ui.mouse, { var o = this.options; // among others, prevent a drag on a resizable-handle - if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) + if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle') || $(event.target).closest('.ui-resizable-handle').length > 0) return false; //Quit if we're not on a valid handle