using parseFloat for offset and position methods and removed num helper method
[jquery.git] / src / offset.js
index 4370fe5..bca01d7 100644 (file)
@@ -1,7 +1,7 @@
 if ( "getBoundingClientRect" in document.documentElement )
        jQuery.fn.offset = function() {
                var elem = this[0];
-               if ( !elem ) return { top: 0, left: 0 };
+               if ( !elem ) return null;
                if ( elem === elem.ownerDocument.body ) return jQuery.offset.bodyOffset( elem );
                var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,
                        clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
@@ -12,7 +12,7 @@ if ( "getBoundingClientRect" in document.documentElement )
 else 
        jQuery.fn.offset = function() {
                var elem = this[0];
-               if ( !elem ) return { top: 0, left: 0 };
+               if ( !elem ) return null;
                if ( elem === elem.ownerDocument.body ) return jQuery.offset.bodyOffset( elem );
                jQuery.offset.initialized || jQuery.offset.initialize();
 
@@ -28,13 +28,13 @@ else
                        if ( elem === offsetParent ) {
                                top += elem.offsetTop, left += elem.offsetLeft;
                                if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )
-                                       top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
-                                       left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
+                                       top  += parseFloat( computedStyle.borderTopWidth,  10) || 0,
+                                       left += parseFloat( computedStyle.borderLeftWidth, 10) || 0;
                                prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
                        }
                        if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )
-                               top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
-                               left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
+                               top  += parseFloat( computedStyle.borderTopWidth,  10) || 0,
+                               left += parseFloat( computedStyle.borderLeftWidth, 10) || 0;
                        prevComputedStyle = computedStyle;
                }
 
@@ -79,8 +79,8 @@ jQuery.offset = {
                jQuery.offset.initialized || jQuery.offset.initialize();
                var top = body.offsetTop, left = body.offsetLeft;
                if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )
-                       top  += parseInt( jQuery.curCSS(body, 'marginTop',  true), 10 ) || 0,
-                       left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
+                       top  += parseFloat( jQuery.curCSS(body, 'marginTop',  true), 10 ) || 0,
+                       left += parseFloat( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
                return { top: top, left: left };
        }
 };
@@ -88,32 +88,32 @@ jQuery.offset = {
 
 jQuery.fn.extend({
        position: function() {
-               var left = 0, top = 0, results;
-
-               if ( this[0] ) {
-                       // Get *real* offsetParent
-                       var offsetParent = this.offsetParent(),
-
-                       // Get correct offsets
-                       offset       = this.offset(),
-                       parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-                       // Subtract element margins
-                       // note: when an element has margin: auto the offsetLeft and marginLeft 
-                       // are the same in Safari causing offset.left to incorrectly be 0
-                       offset.top  -= num( this, 'marginTop'  );
-                       offset.left -= num( this, 'marginLeft' );
-
-                       // Add offsetParent borders
-                       parentOffset.top  += num( offsetParent, 'borderTopWidth'  );
-                       parentOffset.left += num( offsetParent, 'borderLeftWidth' );
-
-                       // Subtract the two offsets
-                       results = {
-                               top:  offset.top  - parentOffset.top,
-                               left: offset.left - parentOffset.left
-                       };
-               }
+               if ( !this[0] ) return null;
+
+               var elem = this[0], left = 0, top = 0, results,
+
+               // Get *real* offsetParent
+               offsetParent = this.offsetParent(),
+
+               // Get correct offsets
+               offset       = this.offset(),
+               parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+               // Subtract element margins
+               // note: when an element has margin: auto the offsetLeft and marginLeft 
+               // are the same in Safari causing offset.left to incorrectly be 0
+               offset.top  -= parseFloat( jQuery.curCSS(elem, 'marginTop',  true), 10 ) || 0;
+               offset.left -= parseFloat( jQuery.curCSS(elem, 'marginLeft', true), 10 ) || 0;
+
+               // Add offsetParent borders
+               parentOffset.top  += parseFloat( jQuery.curCSS(offsetParent[0], 'borderTopWidth',  true), 10 ) || 0;
+               parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], 'borderLeftWidth', true), 10 ) || 0;
+
+               // Subtract the two offsets
+               results = {
+                       top:  offset.top  - parentOffset.top,
+                       left: offset.left - parentOffset.left
+               };
 
                return results;
        },
@@ -132,7 +132,7 @@ jQuery.each( ['Left', 'Top'], function(i, name) {
        var method = 'scroll' + name;
        
        jQuery.fn[ method ] = function(val) {
-               if (!this[0]) return null;
+               if ( !this[0] ) return null;
 
                return val !== undefined ?