10000 Position: Split out dimension parsing. · faroncoder/jquery-ui@a1eb9ca · GitHub
[go: up one dir, main page]

Skip to content

Commit a1eb9ca

Browse files
committed
Position: Split out dimension parsing.
1 parent fb38c20 commit a1eb9ca

File tree

1 file changed

+37
-17
lines changed

1 file changed

+37
-17
lines changed

ui/jquery.ui.position.js

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,41 @@ function getOffsets( offsets, width, height ) {
2929
parseInt( offsets[ 1 ], 10 ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
3030
];
3131
}
32+
3233
function parseCss( element, property ) {
3334
return parseInt( $.css( element, property ), 10 ) || 0;
3435
}
3536

37+
function getDimensions( elem ) {
38+
var raw = elem[0];
39+
if ( raw.nodeType === 9 ) {
40+
return {
41+
width: elem.width(),
42+
height: elem.height(),
43+
offset: { top: 0, left: 0 }
44+
};
45+
}
46+
if ( $.isWindow( raw ) ) {
47+
return {
48+
width: elem.width(),
49+
height: elem.height(),
50+
offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
51+
};
52+
}
53+
if ( raw.preventDefault ) {
54+
return {
55+
width: 0,
56+
height: 0,
57+
offset: { top: raw.pageY, left: raw.pageX }
58+
};
59+
}
60+
return {
61+
width: elem.outerWidth(),
62+
height: elem.outerHeight(),
63+
offset: elem.offset()
64+
};
65+
}
66+
3667
$.position = {
3768
scrollbarWidth: function() {
3869
if ( cachedScrollbarWidth !== undefined ) {
@@ -91,32 +122,21 @@ $.fn.position = function( options ) {
91122
// make a copy, we don't want to modify arguments
92123
options = $.extend( {}, options );
93124

94-
var atOffset, targetWidth, targetHeight, targetOffset, basePosition,
125+
var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
95126
target = $( options.of ),
96127
within = $.position.getWithinInfo( options.within ),
97128
scrollInfo = $.position.getScrollInfo( within ),
98-
targetElem = target[0],
99129
collision = ( options.collision || "flip" ).split( " " ),
100130
offsets = {};
101131

102-
if ( targetElem.nodeType === 9 ) {
103-
targetWidth = target.width();
104-
targetHeight = target.height();
105-
targetOffset = { top: 0, left: 0 };
106-
} else if ( $.isWindow( targetElem ) ) {
107-
targetWidth = target.width();
108-
targetHeight = target.height();
109-
targetOffset = { top: target.scrollTop(), left: target.scrollLeft() };
110-
} else if ( targetElem.preventDefault ) {
132+
dimensions = getDimensions( target );
133+
if ( target[0].preventDefault ) {
111134
// force left top to allow flipping
112135
options.at = "left top";
113-
targetWidth = targetHeight = 0;
114-
targetOffset = { top: targetElem.pageY, left: targetElem.pageX };
115-
} else {
116-
targetWidth = target.outerWidth();
117-
targetHeight = target.outerHeight();
118-
targetOffset = target.offset();
119136
}
137+
targetWidth = dimensions.width;
138+
targetHeight = dimensions.height;
139+
targetOffset = dimensions.offset;
120140
// clone to reuse original targetOffset later
121141
basePosition = $.extend( {}, targetOffset );
122142

0 commit comments

Comments
 (0)
0