]> source.dussan.org Git - jquery-ui.git/commitdiff
Position: Handle decimal percentage offsets. Fixes #9076: percentage offset does... 912/head
authorDavid Petersen <public@petersendidit.com>
Tue, 12 Feb 2013 02:04:28 +0000 (20:04 -0600)
committerDavid Petersen <public@petersendidit.com>
Tue, 12 Feb 2013 13:05:19 +0000 (07:05 -0600)
tests/unit/position/position_core.js
ui/jquery.ui.position.js

index 7b51223acfe18ed501196084f02e06a146f3ac1a..cefd7929c1ea6142e07cd0ab959e93b9ada735c8 100644 (file)
@@ -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() {
index 0209b442c8e926e1b48161d9c5e552081bc0aea2..81f1e4e8ac5bd3b95460c852e235fa68a24bcf95 100644 (file)
@@ -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 )
        ];
 }