r2959 commited - Position: refactored .offset() setter.

r2959 commited - Position: refactored .offset() setter.


Revision: 2959
Author: scott.gonzalez
Date: Wed Jul 22 19:26:32 2009
Log: Position: refactored .offset() setter.
http://code.google.com/p/jquery-ui/source/detail?r=2959
Modified:
/branches/dev/positionTo/ui/ui.position.js
=======================================
--- /branches/dev/positionTo/ui/ui.position.js    Thu Jul 9 06:15:23 2009
+++ /branches/dev/positionTo/ui/ui.position.js    Wed Jul 22 19:26:32 2009
@@ -176,62 +176,50 @@
// the following functionality is planned for jQuery 1.4
-// copied from http://plugins.jquery.com/files/offset.js.txt
+// based on http://plugins.jquery.com/files/offset.js.txt
$.fn.extend({
-
-    /**
-     * Stores the original version of offset(), so that we don't lose it
-     */
-    _offset : $.fn.offset,
-
-    /**
-     * Set or get the specific left and top position of the matched
-     * elements, relative the the browser window by calling setXY
-     * @param {Object} newOffset
-     */
-    offset : function(newOffset){
-     return !newOffset ? this._offset() : this.each(function(){
-            var el = this;
-
-            var hide = false;
-
-            if($(el).css('display')=='none'){
+    _offset: $.fn.offset,
+    offset: function(newOffset) {
+     return !newOffset ? this._offset() : this.each(function() {
+            var elem = $(this),
+                isRelative = /relative|static/.test(elem.css('position')),
+                hide = false;
+
+            // covert static to relative
+            (isRelative && elem.css('position', 'relative'));
+            if (elem.css('display') == 'none') {
                hide = true;
-                $(el).show();
-            };
-
-            var style_pos = $(el).css('position');
-
-            // default to relative
-            if (style_pos == 'static') {
-                $(el).css('position','relative');
-                style_pos = 'relative';
-            };
-
-            var offset = $(el).offset();
-
-            if (offset){
-                var delta = {
-                    left : parseInt($(el).css('left'), 10),
-                    top: parseInt($(el).css('top'), 10)
+                elem.show();
+            }
+
+            var offset = elem.offset(),
+                delta = {
+                    left : parseInt(elem.css('left'), 10),
+                    top: parseInt(elem.css('top'), 10)
                };
-
-                // in case of 'auto'
-                if (isNaN(delta.left))
-                    delta.left = (style_pos == 'relative') ? 0 : el.offsetLeft;
-                if (isNaN(delta.top))
-                    delta.top = (style_pos == 'relative') ? 0 : el.offsetTop;
-
-                if (newOffset.left || newOffset.left===0)
-                    $(el).css('left',newOffset.left - offset.left + delta.left + 'px');
-
-                if (newOffset.top || newOffset.top===0)
-                    $(el).css('top',newOffset.top - offset.top + delta.top + 'px');
-            };
-            if(hide) $(el).hide();
+
+            // in case of 'auto'
+            delta.left = !isNaN(delta.left)
+                ? delta.left
+                : isRelative
+                    ? 0
+                    : this.offsetLeft;
+            delta.top = !isNaN(delta.top)
+                ? delta.top
+                : isRelative
+                    ? 0
+                    : this.offsetTop;
+
+            if (newOffset.left || newOffset.left === 0) {
+                elem.css('left', newOffset.left - offset.left + delta.left);
+            }
+            if (newOffset.top || newOffset.top === 0) {
+                elem.css('top', newOffset.top - offset.top + delta.top);
+            }
+
+            (hide && elem.hide());
        });
    }
-
});
})(jQuery);