]> source.dussan.org Git - jquery-ui.git/commitdiff
position now passes all tests! 0/
authorDavid Murdoch <musicisair@yahoo.com>
Fri, 13 May 2011 21:57:16 +0000 (21:57 +0000)
committerDavid Murdoch <musicisair@yahoo.com>
Fri, 13 May 2011 21:57:16 +0000 (21:57 +0000)
tests/unit/position/position_core.js
tests/unit/position/position_core_within.js
ui/jquery.ui.position.js

index 613fffa02fbce118c05f0853a42720e9ee082c02..73b7026e609374c6e6dea5570ee2038916323120 100644 (file)
@@ -314,7 +314,7 @@ test( "collision: fit, with offset", function() {
 test( "collision: fit, window scrolled", function() {
        if ( scrollTopSupport() ) {
                var win = $( window );
-               win.scrollTop( 300 ).scrollLeft( 200 );
+               $( window ).scrollTop( 300 ).scrollLeft( 200 ); 
                collisionTest({
                        collision: "fit",
                        at: "left-100 top-100"
@@ -323,6 +323,7 @@ test( "collision: fit, window scrolled", function() {
                        collision: "fit",
                        at: "right+100 bottom+100"
                }, { top: 300 + win.height() - 10, left: 200 + win.width() - 10 }, "right bottom" );
+               
                win.scrollTop( 0 ).scrollLeft( 0 );
        }
 });
index 98a2f5943dc6d01b32130aa86337a7ebec8b0fb7..2f912c6b9091d29c4b1cd7fe2e20b64d395f8f87 100644 (file)
@@ -384,7 +384,7 @@ test( "within: collision: fit, with offset", function() {
        }, { top: addTop + 0, left: addLeft + 0 }, "left top, negative offset" );
 });
 
-test( "within: collision: fit, window scrolled", function() {
+test( "within: collision: fit, within scrolled", function() {
        if ( scrollTopSupport() ) {
                $("#within-container").css({"width": "1000px", "height": "800px", "top": "20px", "left": "20px", "position": "relative"});
                
@@ -396,15 +396,13 @@ test( "within: collision: fit, window scrolled", function() {
                collisionTest({
                        collision: "fit",
                        at: "left-100 top-100"
-               }, { top: addTop + 300, left: addLeft + 150 }, "top left" );
+               }, { top: addTop, left: addLeft }, "top left" );
                collisionTest2({
                        collision: "fit",
                        at: "right+100 bottom+100"
-               }, { top: addTop + 300 + win.height() + 10, left: addLeft + 150 + win.width() + 10 }, "right bottom" );
+               }, { top: addTop + win.height() - 10, left: addLeft + win.width() - 10 }, "right bottom" );
                win.scrollTop( 0 ).scrollLeft( 0 );
-
        }
-
 });
                
 test( "within: collision: flip, no offset", function() {
index 5ac19fcca38ae255939e676a1f137884a2a9a14f..2b44c8f707dfe1a53d9f91ba134754a1431f8023 100644 (file)
@@ -188,41 +188,45 @@ $.ui.position = {
                        var within = data.within,
                                win = $( window ),
                                isWindow = $.isWindow( data.within[0] ),
-                               withinOffset = isWindow ? 0 : within.offset().left,
-                               outerWidth = isWindow ? within.width() : within.outerWidth(),
-                               overLeft = - data.collisionPosition.left + withinOffset,
-                               overRight = data.collisionPosition.left + data.collisionWidth - outerWidth - withinOffset;
+                               withinOffset = isWindow ? win.scrollLeft() : within.offset().left,
+                               outerWidth = isWindow ? win.width() : within.outerWidth(),
+                               overLeft = withinOffset - data.collisionPosition.left,
+                               overRight = data.collisionPosition.left + data.collisionWidth - outerWidth - withinOffset,
+                               newLeft;
 
                        // element is wider than window or too far left -> align with left edge
                        if ( data.collisionWidth > outerWidth || overLeft > 0 ) {
-                               position.left = position.left + overLeft;
+                               newLeft = position.left + overLeft;
                        // too far right -> align with right edge
                        } else if ( overRight > 0 ) {
-                               position.left = position.left - overRight;
+                               newLeft = position.left - overRight;
                        // adjust based on position and margin
                        } else {
-                               position.left = Math.max( position.left - data.collisionPosition.left, position.left );
+                               newLeft = Math.max( position.left - data.collisionPosition.left, position.left );
                        }
+                       position.left = newLeft;
                },
                top: function( position, data ) {
                        var within = data.within,
                                win = $( window ),
                                isWindow = $.isWindow( data.within[0] ),
-                               withinOffset = isWindow ? 0 : within.offset().top,
-                               outerHeight = isWindow ? within.height() : within.outerHeight(),
-                               overTop = - data.collisionPosition.top + withinOffset,
-                               overBottom = data.collisionPosition.top + data.collisionHeight - outerHeight - withinOffset;
+                               withinOffset = isWindow ? win.scrollTop() : within.offset().top,
+                               outerHeight = isWindow ? win.height() : within.outerHeight(),
+                               overTop = withinOffset - data.collisionPosition.top,
+                               overBottom = data.collisionPosition.top + data.collisionHeight - outerHeight - withinOffset,
+                               newTop;
 
                        // element is taller than window or too far up -> align with top edge
                        if ( data.collisionHeight > outerHeight || overTop > 0 ) {
-                               position.top = position.top + overTop;
+                               newTop = position.top + overTop;
                        // too far down -> align with bottom edge
                        } else if ( overBottom > 0 ) {
-                               position.top = position.top - overBottom;
+                               newTop = position.top - overBottom;
                        // adjust based on position and margin
                        } else {
-                               position.top = Math.max( position.top - data.collisionPosition.top, position.top );
+                               newTop = Math.max( position.top - data.collisionPosition.top, position.top );
                        }
+                       position.top = newTop;
                }
        },
        flip: {
@@ -273,7 +277,6 @@ $.ui.position = {
                                        data.targetHeight :
                                        -data.targetHeight,
                                offset = -2 * data.offset[ 1 ];
-                               console.log(overBottom);
                        if ( overTop < 0 || overBottom > 0) {
                                position.top += myOffset + atOffset + offset;
                        }