Changing end of line from CRLF to just LF like the rest of the source files.
[jquery.git] / src / core.js
index 1e4f924..b90427b 100644 (file)
@@ -323,6 +323,8 @@ jQuery.fn = jQuery.prototype = {
                // Copy the events from the original to the clone
                if ( events === true )
                        this.find("*").andSelf().each(function(i){
+                               if (this.nodeType == 3)
+                                       return;
                                var events = jQuery.data( this, "events" );
 
                                for ( var type in events )
@@ -419,6 +421,7 @@ jQuery.fn = jQuery.prototype = {
 
                        }
 
+                       return undefined;
                }
 
                return this.each(function(){
@@ -497,7 +500,7 @@ jQuery.fn = jQuery.prototype = {
 
                        jQuery.each(elems, function(){
                                var elem = clone ?
-                                       this.cloneNode( true ) :
+                                       jQuery( this ).clone( true )[0] :
                                        this;
 
                                // execute all scripts after the elements have been injected
@@ -596,8 +599,7 @@ jQuery.extend({
                return jQuery;
        },
 
-       // This may seem like some crazy code, but trust me when I say that this
-       // is the only cross-browser way to do this. --John
+       // See test/unit/core.js for details concerning this function.
        isFunction: function( fn ) {
                return !!fn && typeof fn != "string" && !fn.nodeName && 
                        fn.constructor != Array && /function/i.test( fn + "" );
@@ -705,20 +707,22 @@ jQuery.extend({
        // args is for internal usage only
        each: function( object, callback, args ) {
                if ( args ) {
-                       if ( object.length == undefined )
+                       if ( object.length == undefined ) {
                                for ( var name in object )
-                                       callback.apply( object[ name ], args );
-                       else
+                                       if ( callback.apply( object[ name ], args ) === false )
+                                               break;
+                       } else
                                for ( var i = 0, length = object.length; i < length; i++ )
                                        if ( callback.apply( object[ i ], args ) === false )
                                                break;
 
                // A special, fast, case for the most common use of each
                } else {
-                       if ( object.length == undefined )
+                       if ( object.length == undefined ) {
                                for ( var name in object )
-                                       callback.call( object[ name ], name, object[ name ] );
-                       else
+                                       if ( callback.call( object[ name ], name, object[ name ] ) === false )
+                                               break;
+                       } else
                                for ( var i = 0, length = object.length, value = object[0]; 
                                        i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
                }
@@ -764,9 +768,10 @@ jQuery.extend({
 
        // A method for quickly swapping in/out CSS properties to get correct calculations
        swap: function( elem, options, callback ) {
+               var old = {};
                // Remember the old values, and insert the new ones
                for ( var name in options ) {
-                       elem.style[ "old" + name ] = elem.style[ name ];
+                       old[ name ] = elem.style[ name ];
                        elem.style[ name ] = options[ name ];
                }
 
@@ -774,24 +779,29 @@ jQuery.extend({
 
                // Revert the old values
                for ( var name in options )
-                       elem.style[ name ] = elem.style[ "old" + name ];
+                       elem.style[ name ] = old[ name ];
        },
 
        css: function( elem, name, force ) {
                if ( name == "width" || name == "height" ) {
-                       var width, height, props = { position: "absolute", visibility: "hidden", display:"block" };
+                       var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
                
                        function getWH() {
-                               width = elem.clientWidth;
-                               height = elem.clientHeight;
+                               val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
+                               var padding = 0, border = 0;
+                               jQuery.each( which, function() {
+                                       padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+                                       border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+                               });
+                               val -= Math.round(padding + border);
                        }
                
                        if ( jQuery(elem).is(":visible") )
                                getWH();
                        else
                                jQuery.swap( elem, props, getWH );
-
-                       return name == "width" ? width : height;
+                       
+                       return Math.max(0, val);
                }
                
                return jQuery.curCSS( elem, name, force );
@@ -828,7 +838,7 @@ jQuery.extend({
                if ( name.match( /float/i ) )
                        name = styleFloat;
 
-               if ( !force && elem.style[ name ] )
+               if ( !force && elem.style && elem.style[ name ] )
                        ret = elem.style[ name ];
 
                else if ( document.defaultView && document.defaultView.getComputedStyle ) {
@@ -925,7 +935,7 @@ jQuery.extend({
                        if ( typeof elem == "string" ) {
                                // Fix "XHTML"-style tags in all browsers
                                elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
-                                       return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area)$/i) ?
+                                       return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
                                                all :
                                                front + "></" + tag + ">";
                                });