From 52a052be79d21aa519ccb513dc00a7c54868ef03 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Fri, 27 Aug 2010 13:34:14 -0400 Subject: [PATCH] Position: Handle $(document) and $(window) for the of option. Fixes #5963 - Position: option 'of' accepts jQuery object unless it wraps document. Fixes #5655 - (Possible) Typo in jquery.ui.position 1.8.1. --- tests/unit/position/position_core.js | 22 ++++++++++++++++++++++ ui/jquery.ui.position.js | 7 ++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/tests/unit/position/position_core.js b/tests/unit/position/position_core.js index 3976e43ab..426231ee3 100644 --- a/tests/unit/position/position_core.js +++ b/tests/unit/position/position_core.js @@ -128,6 +128,17 @@ test('of', function() { left: $(document).width() - 10 }, 'document'); + $('#elx').position({ + my: 'right bottom', + at: 'right bottom', + of: $(document), + collision: 'none' + }); + same($('#elx').offset(), { + top: $(document).height() - 10, + left: $(document).width() - 10 + }, 'document'); + $('#elx').position({ my: 'right bottom', at: 'right bottom', @@ -139,6 +150,17 @@ test('of', function() { left: $(window).width() - 10 }, 'window'); + $('#elx').position({ + my: 'right bottom', + at: 'right bottom', + of: $(window), + collision: 'none' + }); + same($('#elx').offset(), { + top: $(window).height() - 10, + left: $(window).width() - 10 + }, 'window'); + $(window).scrollTop(500).scrollLeft(200); $('#elx').position({ my: 'right bottom', diff --git a/ui/jquery.ui.position.js b/ui/jquery.ui.position.js index dbe28ffa5..a14c5c612 100644 --- a/ui/jquery.ui.position.js +++ b/ui/jquery.ui.position.js @@ -26,21 +26,22 @@ $.fn.position = function( options ) { options = $.extend( {}, options ); var target = $( options.of ), + targetElem = target[0], collision = ( options.collision || "flip" ).split( " " ), offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], targetWidth, targetHeight, basePosition; - if ( options.of.nodeType === 9 ) { + if ( targetElem.nodeType === 9 ) { targetWidth = target.width(); targetHeight = target.height(); basePosition = { top: 0, left: 0 }; - } else if ( options.of.scrollTo && options.of.document ) { + } else if ( targetElem.scrollTo && targetElem.document ) { targetWidth = target.width(); targetHeight = target.height(); basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; - } else if ( options.of.preventDefault ) { + } else if ( targetElem.preventDefault ) { // force left top to allow flipping options.at = "left top"; targetWidth = targetHeight = 0; -- 2.39.5