]> source.dussan.org Git - jquery-ui.git/commitdiff
Position: Simplify fraction support test
authorScott González <scott.gonzalez@gmail.com>
Wed, 18 Mar 2015 14:05:36 +0000 (10:05 -0400)
committerScott González <scott.gonzalez@gmail.com>
Wed, 18 Mar 2015 14:55:53 +0000 (10:55 -0400)
Also makes the test lazy to avoid any potential layouts/recalculations during
initialization.

Fixes #9898
Ref #9899

ui/position.js

index 7423d02d17e1772f9aedcbf04214b6e57805f921..367fc3978d67aae114d749c0d00f1af161bfa3e0 100644 (file)
@@ -41,6 +41,26 @@ var cachedScrollbarWidth, supportsOffsetFractions,
        rpercent = /%$/,
        _position = $.fn.position;
 
+// Support: IE <=9 only
+supportsOffsetFractions = function() {
+       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;