Added in a bunch of fx fixes - and hide/show/toggle are decoupled from later methods.
[jquery.git] / src / jquery / jquery.js
index a358238..63d795c 100644 (file)
@@ -29,9 +29,6 @@ window.undefined = window.undefined;
  */
 function jQuery(a,c) {
 
-       // Initalize the extra macro functions
-       if ( !jQuery.initDone ) jQuery.init();
-
        // Shortcut for document ready (because $(document).each() is silly)
        if ( a && a.constructor == Function && jQuery.fn.ready )
                return jQuery(document).ready(a);
@@ -39,25 +36,6 @@ function jQuery(a,c) {
        // Make sure that a selection was provided
        a = a || jQuery.context || document;
 
-       /*
-        * Handle support for overriding other $() functions. Way too many libraries
-        * provide this function to simply ignore it and overwrite it.
-        */
-       /*
-       // Check to see if this is a possible collision case
-       if ( jQuery._$ && !c && a.constructor == String && 
-      
-               // Make sure that the expression is a colliding one
-               !/[^a-zA-Z0-9_-]/.test(a) &&
-        
-               // and that there are no elements that match it
-               // (this is the one truly ambiguous case)
-               !document.getElementsByTagName(a).length )
-
-                       // Use the default method, in case it works some voodoo
-                       return jQuery._$( a );
-       */
-
        // Watch for when a jQuery object is passed as the selector
        if ( a.jquery )
                return $( jQuery.merge( a, [] ) );
@@ -82,7 +60,10 @@ function jQuery(a,c) {
                // Find the matching elements and save them for later
                jQuery.find( a, c ) );
 
+  // See if an extra function was provided
        var fn = arguments[ arguments.length - 1 ];
+       
+       // If so, execute it in context
        if ( fn && fn.constructor == Function )
                this.each(fn);
 }
@@ -265,12 +246,10 @@ jQuery.fn = jQuery.prototype = {
         * @before <img/>
         * @result <img src="test.jpg" alt="Test Image"/>
         *
-        * @test var div = $("div");
-        * div.attr({foo: 'baz', zoo: 'ping'});
-        * var pass = true;
-        * for ( var i = 0; i < div.size(); i++ ) {
-        *   if ( div.get(i).foo != "baz" && div.get(i).zoo != "ping" ) pass = false;
-        * }
+        * @test var pass = true;
+        * $("div").attr({foo: 'baz', zoo: 'ping'}).each(function(){
+        *   if ( this.getAttribute('foo') != "baz" && this.getAttribute('zoo') != "ping" ) pass = false;
+        * });
         * ok( pass, "Set Multiple Attributes" );
         *
         * @name attr
@@ -290,7 +269,7 @@ jQuery.fn = jQuery.prototype = {
         * div.attr("foo", "bar");
         * var pass = true;
         * for ( var i = 0; i < div.size(); i++ ) {
-        *   if ( div.get(i).foo != "bar" ) pass = false;
+        *   if ( div.get(i).getAttribute('foo') != "bar" ) pass = false;
         * }
         * ok( pass, "Set Attribute" );
         *
@@ -813,8 +792,6 @@ jQuery.extend = jQuery.fn.extend = function(obj,prop) {
 
 jQuery.extend({
        /**
-        * 
-        *
         * @private
         * @name init
         * @type undefined
@@ -936,36 +913,54 @@ jQuery.extend({
                                if (jQuery.css(e,"display") != "none") {
                                        oHeight = e.offsetHeight;
                                        oWidth = e.offsetWidth;
-                               } else
-                                       jQuery.swap( e, { visibility: "hidden", position: "absolute", display: "block" },
-                                               function(){
-                                                       oHeight = e.clientHeight;
-                                                       oWidth = e.clientWidth;
-                                               });
+                               } else {
+                                       e = $(e.cloneNode(true)).css({
+                                               visibility: "hidden", position: "absolute", display: "block"
+                                       }).prependTo("body")[0];
+
+                                       oHeight = e.clientHeight;
+                                       oWidth = e.clientWidth;
+                                       
+                                       e.parentNode.removeChild(e);
+                               }
                        });
        
                        return p == "height" ? oHeight : oWidth;
                } else if ( p == "opacity" && jQuery.browser.msie )
-                       return parseFloat(  jQuery.curCSS(e,"filter").replace(/[^0-9.]/,"") ) || 1;
+                       return parseFloat( jQuery.curCSS(e,"filter").replace(/[^0-9.]/,"") ) || 1;
 
                return jQuery.curCSS( e, p );
        },
 
-       curCSS: function(e,p,force) {
-               var r;
+       curCSS: function(elem, prop, force) {
+               var ret;
        
-               if (!force && e.style[p])
-                       r = e.style[p];
-               else if (e.currentStyle) {
-                       p = p.replace(/\-(\w)/g,function(m,c){return c.toUpperCase()}); 
-                       r = e.currentStyle[p];
+               if (!force && elem.style[prop]) {
+
+                       ret = elem.style[prop];
+
+               } else if (elem.currentStyle) {
+
+                       var newProp = prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase()}); 
+                       ret = elem.currentStyle[prop] || elem.currentStyle[newProp];
+
                } else if (document.defaultView && document.defaultView.getComputedStyle) {
-                       p = p.replace(/([A-Z])/g,"-$1").toLowerCase();
-                       var s = document.defaultView.getComputedStyle(e,"");
-                       r = s ? s.getPropertyValue(p) : null;
+
+                       prop = prop.replace(/([A-Z])/g,"-$1").toLowerCase();
+                       var cur = document.defaultView.getComputedStyle(elem, null);
+
+                       if ( cur )
+                               ret = cur.getPropertyValue(prop);
+                       else if ( prop == 'display' )
+                               ret = 'none';
+                       else
+                               jQuery.swap(elem, { display: 'block' }, function() {
+                                       ret = document.defaultView.getComputedStyle(this,null).getPropertyValue(prop);
+                               });
+
                }
                
-               return r;
+               return ret;
        },
        
        clean: function(a) {
@@ -1255,28 +1250,26 @@ jQuery.extend({
                return r;
        },
        
-       attr: function(o,a,v){
-               if ( a && a.constructor == String ) {
-                       var fix = {
-                               "for": "htmlFor",
-                               "class": "className",
-                               "float": "cssFloat"
-                       };
-                       
-                       a = (fix[a] && fix[a].replace && fix[a] || a)
-                               .replace(/-([a-z])/ig,function(z,b){
-                                       return b.toUpperCase();
-                               });
-                       
-                       if ( v != undefined ) {
-                               o[a] = v;
-                               if ( o.setAttribute && a != "disabled" )
-                                       o.setAttribute(a,v);
-                       }
-                       
-                       return o[a] || o.getAttribute && o.getAttribute(a) || "";
-               } else
-                       return "";
+       attr: function(elem, name, value){
+               var fix = {
+                       "for": "htmlFor",
+                       "class": "className",
+                       "float": "cssFloat",
+                       innerHTML: "innerHTML",
+                       className: "className"
+               };
+
+               if ( fix[name] ) {
+                       if ( value != undefined ) elem[fix[name]] = value;
+                       return elem[fix[name]];
+               } else if ( elem.getAttribute ) {
+                       if ( value != undefined ) elem.setAttribute( name, value );
+                       return elem.getAttribute( name, 2 );
+               } else {
+                       name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
+                       if ( value != undefined ) elem[name] = value;
+                       return elem[name];
+               }
        },
 
        // The regular expressions that power the parsing engine
@@ -2407,7 +2400,7 @@ jQuery.macros = {
                 * @type jQuery
                 * @cat Effects
                 */
-               _show: function(){
+               show: function(){
                        this.style.display = this.oldblock ? this.oldblock : "";
                        if ( jQuery.css(this,"display") == "none" )
                                this.style.display = "block";
@@ -2430,7 +2423,7 @@ jQuery.macros = {
                 * @type jQuery
                 * @cat Effects
                 */
-               _hide: function(){
+               hide: function(){
                        this.oldblock = this.oldblock || jQuery.css(this,"display");
                        if ( this.oldblock == "none" )
                                this.oldblock = "block";
@@ -2450,9 +2443,8 @@ jQuery.macros = {
                 * @type jQuery
                 * @cat Effects
                 */
-               _toggle: function(){
-                       var d = jQuery.css(this,"display");
-                       $(this)[ !d || d == "none" ? "show" : "hide" ]();
+               toggle: function(){
+                       $(this)[ $(this).is(":hidden") ? "show" : "hide" ].apply( $(this), arguments );
                },
                
                /**
@@ -2662,3 +2654,5 @@ jQuery.macros = {
                }
        }
 };
+
+jQuery.init();
\ No newline at end of file