aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Petersen <public@petersendidit.com>2013-02-11 20:04:28 -0600
committerDavid Petersen <public@petersendidit.com>2013-02-12 07:05:19 -0600
commitc958b211db2632a02f26e14f57c0862c57870aee (patch)
tree8fa92c8ca020e0f4a57933cdac154a70d24b1180
parentab408c9b82430e7a65a9269441cc0c0e2af95770 (diff)
downloadjquery-ui-c958b211db2632a02f26e14f57c0862c57870aee.tar.gz
jquery-ui-c958b211db2632a02f26e14f57c0862c57870aee.zip
Position: Handle decimal percentage offsets. Fixes #9076: percentage offset does not support decimal
-rw-r--r--tests/unit/position/position_core.js26
-rw-r--r--ui/jquery.ui.position.js6
2 files changed, 28 insertions, 4 deletions
diff --git a/tests/unit/position/position_core.js b/tests/unit/position/position_core.js
index 7b51223ac..cefd7929c 100644
--- a/tests/unit/position/position_core.js
+++ b/tests/unit/position/position_core.js
@@ -221,7 +221,7 @@ test( "of", function() {
});
test( "offsets", function() {
- expect( 4 );
+ expect( 7 );
$( "#elx" ).position({
my: "left top",
@@ -254,6 +254,30 @@ test( "offsets", function() {
collision: "none"
});
deepEqual( $( "#elx" ).offset(), { top: 65, left: 37 }, "percentage offsets in my" );
+
+ $( "#elx" ).position({
+ my: "left-30.001% top+50.0%",
+ at: "left bottom",
+ of: "#parentx",
+ collision: "none"
+ });
+ deepEqual( $( "#elx" ).offset(), { top: 65, left: 37 }, "decimal percentage offsets in my" );
+
+ $( "#elx" ).position({
+ my: "left+10.4 top-10.6",
+ at: "left bottom",
+ of: "#parentx",
+ collision: "none"
+ });
+ deepEqual( $( "#elx" ).offset(), { top: 49, left: 50 }, "decimal offsets in my" );
+
+ $( "#elx" ).position({
+ my: "left+right top-left",
+ at: "left-top bottom-bottom",
+ of: "#parentx",
+ collision: "none"
+ });
+ deepEqual( $( "#elx" ).offset(), { top: 60, left: 40 }, "invalid offsets" );
});
test( "using", function() {
diff --git a/ui/jquery.ui.position.js b/ui/jquery.ui.position.js
index 0209b442c..81f1e4e8a 100644
--- a/ui/jquery.ui.position.js
+++ b/ui/jquery.ui.position.js
@@ -18,15 +18,15 @@ var cachedScrollbarWidth,
round = Math.round,
rhorizontal = /left|center|right/,
rvertical = /top|center|bottom/,
- roffset = /[\+\-]\d+%?/,
+ roffset = /[\+\-]\d+(\.[\d]+)?%?/,
rposition = /^\w+/,
rpercent = /%$/,
_position = $.fn.position;
function getOffsets( offsets, width, height ) {
return [
- parseInt( offsets[ 0 ], 10 ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
- parseInt( offsets[ 1 ], 10 ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+ parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+ parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
];
}