diff options
author | Christian Klammer <christian314159@gmail.com> | 2013-05-16 21:26:13 +1000 |
---|---|---|
committer | Mike Sherov <mike.sherov@gmail.com> | 2013-05-29 08:18:58 -0400 |
commit | 6df5c1a4ae738e591694e0fe2fa3bbb8b05f6b0a (patch) | |
tree | 96eb523fc20df3fcad7c740c5ed9a4714a708e62 | |
parent | 9e00e00f3b54770faa0291d6ee6fc1dcbad028cb (diff) | |
download | jquery-ui-6df5c1a4ae738e591694e0fe2fa3bbb8b05f6b0a.tar.gz jquery-ui-6df5c1a4ae738e591694e0fe2fa3bbb8b05f6b0a.zip |
Resizable: Fixed sign error on offset calculation. Fixes #9307 - Resizable: Erratic behavior of contained elements within scrollable grandparents
-rw-r--r-- | tests/unit/resizable/resizable_events.js | 47 | ||||
-rw-r--r-- | ui/jquery.ui.resizable.js | 4 |
2 files changed, 49 insertions, 2 deletions
diff --git a/tests/unit/resizable/resizable_events.js b/tests/unit/resizable/resizable_events.js index ac222ec10..18e25bfdf 100644 --- a/tests/unit/resizable/resizable_events.js +++ b/tests/unit/resizable/resizable_events.js @@ -170,4 +170,51 @@ test("stop", function() { }); +test( "resize (containment) works with parent with negative offset", function() { + + expect( 1 ); + + var widthBefore, widthAfter, + handle = ".ui-resizable-e", + target = $( "#resizable1" ), + absoluteContainer = target.wrap( "<div />" ).parent(), + fixedContainer = absoluteContainer.wrap( "<div />" ).parent(), + increaseWidthBy = 50; + + // position fixed container in window top left + fixedContainer.css({ + width: 400, + height: 100, + position: "fixed", + top: 0, + left: 0 + }); + + // position absolute container within fixed on slightly outside window + absoluteContainer.css({ + width: 400, + height: 100, + position: "absolute", + top: 0, + left: -50 + }); + + // set up resizable to be contained within absolute container + target.resizable({ + handles: "all", + containment: "parent" + }).css({ + width: 300 + }); + + widthBefore = target.width(); + + TestHelpers.resizable.drag( handle, increaseWidthBy, 0 ); + + widthAfter = target.width(); + + equal( widthAfter, ( widthBefore + increaseWidthBy ), "resizable width should be increased by the value dragged" ); + +}); + })(jQuery); diff --git a/ui/jquery.ui.resizable.js b/ui/jquery.ui.resizable.js index c84323e8a..aab93b57f 100644 --- a/ui/jquery.ui.resizable.js +++ b/ui/jquery.ui.resizable.js @@ -797,8 +797,8 @@ $.ui.plugin.add("resizable", "containment", { isParent = that.containerElement.get(0) === that.element.parent().get(0); isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position")); - if(isParent && isOffsetRelative) { - woset -= that.parentData.left; + if ( isParent && isOffsetRelative ) { + woset -= Math.abs( that.parentData.left ); } if (woset + that.size.width >= that.parentData.width) { |