@@ -99,7 +99,14 @@ $.fn.position = function( options ) {
99
99
var elem = $ ( this ) ,
100
100
elemWidth = elem . outerWidth ( ) ,
101
101
elemHeight = elem . outerHeight ( ) ,
102
- position = $ . extend ( { } , basePosition ) ;
102
+ marginLeft = parseInt ( $ . curCSS ( this , "marginLeft" , true ) ) || 0 ,
103
+ marginTop = parseInt ( $ . curCSS ( this , "marginTop" , true ) ) || 0 ,
104
+ collisionWidth = elemWidth + marginLeft +
105
+ parseInt ( $ . curCSS ( this , "marginRight" , true ) ) || 0 ,
106
+ collisionHeight = elemHeight + marginTop +
107
+ parseInt ( $ . curCSS ( this , "marginBottom" , true ) ) || 0 ,
108
+ position = $ . extend ( { } , basePosition ) ,
109
+ collisionPosition ;
103
110
104
111
if ( options . my [ 0 ] === "right" ) {
105
112
position . left -= elemWidth ;
@@ -117,13 +124,21 @@ $.fn.position = function( options ) {
117
124
position . left = parseInt ( position . left ) ;
118
125
position . top = parseInt ( position . top ) ;
119
126
127
+ collisionPosition = {
128
+ left : position . left - marginLeft ,
129
+ top : position . top - marginTop
130
+ } ;
131
+
120
132
$ . each ( [ "left" , "top" ] , function ( i , dir ) {
121
133
if ( $ . ui . position [ collision [ i ] ] ) {
122
134
$ . ui . position [ collision [ i ] ] [ dir ] ( position , {
123
135
targetWidth : targetWidth ,
124
136
targetHeight : targetHeight ,
125
137
elemWidth : elemWidth ,
126
138
elemHeight : elemHeight ,
139
+ collisionPosition : collisionPosition ,
140
+ collisionWidth : collisionWidth ,
141
+ collisionHeight : collisionHeight ,
127
142
offset : offset ,
128
143
my : options . my ,
129
144
at : options . at
@@ -142,13 +157,13 @@ $.ui.position = {
142
157
fit : {
143
158
left : function ( position , data ) {
144
159
var win = $ ( window ) ,
145
- over = position . left + data . elemWidth - win . width ( ) - win . scrollLeft ( ) ;
146
- position . left = over > 0 ? position . left - over : Math . max ( 0 , position . left ) ;
160
+ over = data . collisionPosition . left + data . collisionWidth - win . width ( ) - win . scrollLeft ( ) ;
161
+ position . left = over > 0 ? position . left - over : Math . max ( position . left - data . collisionPosition . left , position . left ) ;
147
162
} ,
148
163
top : function ( position , data ) {
149
164
var win = $ ( window ) ,
150
- over = position . top + data . elemHeight - win . height ( ) - win . scrollTop ( ) ;
151
- position . top = over > 0 ? position . top - over : Math . max ( 0 , position . top ) ;
165
+ over = data . collisionPosition . top + data . collisionHeight - win . height ( ) - win . scrollTop ( ) ;
166
+ position . top = over > 0 ? position . top - over : Math . max ( position . top - data . collisionPosition . top , position . top ) ;
152
167
}
153
168
} ,
154
169
@@ -158,7 +173,7 @@ $.ui.position = {
158
173
return ;
159
174
}
160
175
var win = $ ( window ) ,
161
- over = position . left + data . elemWidth - win . width ( ) - win . scrollLeft ( ) ,
176
+ over = data . collisionPosition . left + data . collisionWidth - win . width ( ) - win . scrollLeft ( ) ,
162
177
myOffset = data . my [ 0 ] === "left" ?
163
178
- data . elemWidth :
164
179
data . my [ 0 ] === "right" ?
@@ -168,7 +183,7 @@ $.ui.position = {
168
183
data . targetWidth :
169
184
- data . targetWidth ,
170
185
offset = - 2 * data . offset [ 0 ] ;
171
- position . left += position . left < 0 ?
186
+ position . left += data . collisionPosition . left < 0 ?
172
187
myOffset + atOffset + offset :
173
188
over > 0 ?
174
189
myOffset + atOffset + offset :
@@ -179,7 +194,7 @@ $.ui.position = {
179
194
return ;
180
195
}
181
196
var win = $ ( window ) ,
182
- over = position . top + data . elemHeight - win . height ( ) - win . scrollTop ( ) ,
197
+ over = data . collisionPosition . top + data . collisionHeight - win . height ( ) - win . scrollTop ( ) ,
183
198
myOffset = data . my [ 1 ] === "top" ?
184
199
- data . elemHeight :
185
200
data . my [ 1 ] === "bottom" ?
@@ -189,7 +204,7 @@ $.ui.position = {
189
204
data . targetHeight :
190
205
- data . targetHeight ,
191
206
offset = - 2 * data . offset [ 1 ] ;
192
- position . top += position . top < 0 ?
207
+ position . top += data . collisionPosition . top < 0 ?
193
208
myOffset + atOffset + offset :
194
209
over > 0 ?
195
210
myOffset + atOffset + offset :
0 commit comments