Permalink
Browse files

Position: Simplify fraction support test

Also makes the test lazy to avoid any potential layouts/recalculations during
initialization.

Fixes #9898
Ref #9899
  • Loading branch information...
scottgonzalez committed Mar 18, 2015
1 parent dff1c74 commit 3970e8c68146a3645f09d54735a40d5cf7eeef9e
Showing with 21 additions and 40 deletions.
  1. +21 −40 ui/position.js
View
@@ -41,6 +41,26 @@ var cachedScrollbarWidth, supportsOffsetFractions,
rpercent = /%$/,
_position = $.fn.position;
+// Support: IE <=9 only
+supportsOffsetFractions = function() {

This comment has been minimized.

Show comment
Hide comment
@bradvogel

bradvogel Oct 16, 2015

@scottgonzalez question for the confused: which jquery-ui release did this go into? It looks like the latest code (1.11.4) doesn't have this commit, despite being released after this got merged.

@bradvogel

bradvogel Oct 16, 2015

@scottgonzalez question for the confused: which jquery-ui release did this go into? It looks like the latest code (1.11.4) doesn't have this commit, despite being released after this got merged.

This comment has been minimized.

Show comment
Hide comment
@scottgonzalez

scottgonzalez Oct 16, 2015

Member

None. It will be part of 1.12.0. You can look at the ticket to find out the version that a fix will be included in (check the milestone field).

@scottgonzalez

scottgonzalez Oct 16, 2015

Member

None. It will be part of 1.12.0. You can look at the ticket to find out the version that a fix will be included in (check the milestone field).

This comment has been minimized.

Show comment
Hide comment
@bradvogel

bradvogel Oct 16, 2015

Thanks! Missed that

@bradvogel

bradvogel Oct 16, 2015

Thanks! Missed that

+ var element = $( "<div>" )
+ .css( "position", "absolute" )
+ .appendTo( "body" )
+ .offset( {
+ top: 1.5,
+ left: 1.5
+ } ),
+ support = element.offset().top === 1.5;
+
+ element.remove();
+
+ supportsOffsetFractions = function() {
+ return support;
+ };
+
+ return support;
+};
+
function getOffsets( offsets, width, height ) {
return [
parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
@@ -243,7 +263,7 @@ $.fn.position = function( options ) {
position.top += myOffset[ 1 ];
// if the browser doesn't support fractions, then round for consistent results
- if ( !supportsOffsetFractions ) {
+ if ( !supportsOffsetFractions() ) {
position.left = round( position.left );
position.top = round( position.top );
}
@@ -475,45 +495,6 @@ $.ui.position = {
}
};
-// fraction support test
-( function() {
- var testElement, testElementParent, testElementStyle, offsetLeft, i,
- body = document.getElementsByTagName( "body" )[ 0 ],
- div = document.createElement( "div" );
-
- //Create a "fake body" for testing based on method used in jQuery.support
- testElement = document.createElement( body ? "div" : "body" );
- testElementStyle = {
- visibility: "hidden",
- width: 0,
- height: 0,
- border: 0,
- margin: 0,
- background: "none"
- };
- if ( body ) {
- $.extend( testElementStyle, {
- position: "absolute",
- left: "-1000px",
- top: "-1000px"
- } );
- }
- for ( i in testElementStyle ) {
- testElement.style[ i ] = testElementStyle[ i ];
- }
- testElement.appendChild( div );
- testElementParent = body || document.documentElement;
- testElementParent.insertBefore( testElement, testElementParent.firstChild );
-
- div.style.cssText = "position: absolute; left: 10.7432222px;";
-
- offsetLeft = $( div ).offset().left;
- supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
-
- testElement.innerHTML = "";
- testElementParent.removeChild( testElement );
-} )();
-
} )();
return $.ui.position;

0 comments on commit 3970e8c

Please sign in to comment.