*/
// Map over jQuery in case of overwrite
-if ( typeof jQuery != "undefined" )
- var _jQuery = jQuery;
+if ( window.jQuery )
+ var _jQuery = window.jQuery;
var jQuery = window.jQuery = function( selector, context ) {
// If the context is a namespace object, return a new object
};
// Map over the $ in case of overwrite
-if ( typeof $ != "undefined" )
- var _$ = $;
+if ( window.$ )
+ var _$ = window.$;
// Map the jQuery namespace to the '$' one
window.$ = jQuery;
// Make sure that a selection was provided
selector = selector || document;
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this[0] = selector;
+ this.length = 1;
+ return this;
+
// Handle HTML strings
- if ( typeof selector == "string" ) {
+ } else if ( typeof selector == "string" ) {
// Are we dealing with HTML string or an ID?
var match = quickExpr.exec( selector );
},
css: function( key, value ) {
+ // ignore negative width and height values
+ if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
+ value = undefined;
return this.attr( key, value, "curCSS" );
},
if ( this.length ) {
var elem = this[0];
-
+
// We need to handle select boxes special
if ( jQuery.nodeName( elem, "select" ) ) {
var index = elem.selectedIndex,
// Everything else, we just grab the value
} else
- return this[0].value.replace(/\r/g, "");
+ return (this[0].value || "").replace(/\r/g, "");
}
jQuery.inArray( this.text, values ) >= 0);
});
- if ( !tmp.length )
+ if ( !values.length )
this.selectedIndex = -1;
} else
if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
obj = this.getElementsByTagName("tbody")[0] || this.appendChild( document.createElement("tbody") );
+ var scripts = jQuery( [] );
+
jQuery.each(elems, function(){
var elem = clone ?
this.cloneNode( true ) :
this;
- if ( !evalScript( 0, elem ) )
+ if ( jQuery.nodeName( elem, "script" ) ) {
+
+ // If scripts are waiting to be executed, wait on this script as well
+ if ( scripts.length )
+ scripts = scripts.add( elem );
+
+ // If nothing is waiting to be executed, run immediately
+ else
+ evalScript( 0, elem );
+
+ } else {
+ // Remove any inner scripts for later evaluation
+ if ( elem.nodeType == 1 )
+ scripts = scripts.add( jQuery( "script", elem ).remove() );
+
+ // Inject the elements into the document
callback.call( obj, elem );
+ }
});
+
+ scripts.each( evalScript );
});
}
};
function evalScript( i, elem ) {
- var script = jQuery.nodeName( elem, "script" );
-
- if ( script ) {
- if ( elem.src )
- jQuery.ajax({
- url: elem.src,
- async: false,
- dataType: "script"
- });
-
- else
- jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
-
- if ( elem.parentNode )
- elem.parentNode.removeChild( elem );
+ if ( elem.src )
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
- } else if ( elem.nodeType == 1 )
- jQuery( "script", elem ).each( evalScript );
+ else
+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
- return script;
+ if ( elem.parentNode )
+ elem.parentNode.removeChild( elem );
}
jQuery.extend = jQuery.fn.extend = function() {
if ( target.constructor == Boolean ) {
deep = target;
target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
}
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target != "object" && typeof target != "function" )
+ target = {};
+
// extend jQuery itself if only one argument is passed
if ( length == 1 ) {
target = this;
// Extend the base object
for ( var name in options ) {
// Prevent never-ending loop
- if ( target == options[ name ] )
+ if ( target === options[ name ] )
continue;
// Recurse if we're merging object values
- if ( deep && typeof options[ name ] == "object" && target[ name ] )
- jQuery.extend( target[ name ], options[ name ] );
+ if ( deep && options[ name ] && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType )
+ target[ name ] = jQuery.extend( target[ name ], options[ name ] );
// Don't bring in undefined values
else if ( options[ name ] != undefined )
},
// Evalulates a script in a global context
- // Evaluates Async. in Safari 2 :-(
globalEval: function( data ) {
data = jQuery.trim( data );
elem.style[ name ] = elem.style[ "old" + name ];
},
- css: function( elem, name ) {
+ css: function( elem, name, force ) {
if ( name == "height" || name == "width" ) {
var old = {}, height, width;
// Otherwise, we need to flip out more values
} else {
elem = jQuery( elem.cloneNode(true) )
- .find(":radio").removeAttr("checked").end()
+ .find(":radio").removeAttr("checked").removeAttr("defaultChecked").end()
.css({
visibility: "hidden",
position: "absolute",
width;
}
- return jQuery.curCSS( elem, name );
+ return jQuery.curCSS( elem, name, force );
},
curCSS: function( elem, name, force ) {
// one special, otherwise get the value
ret = name == "display" && swap[ stack.length - 1 ] != null ?
"none" :
- document.defaultView.getComputedStyle( elem, null ).getPropertyValue( name ) || "";
+ ( getComputedStyle && getComputedStyle.getPropertyValue( name ) ) || "";
// Finally, revert the display styles back
for ( var i = 0; i < swap.length; i++ )
var wrap =
// option or optgroup
!tags.indexOf("<opt") &&
- [ 1, "<select>", "</select>" ] ||
+ [ 1, "<select multiple='multiple'>", "</select>" ] ||
!tags.indexOf("<leg") &&
[ 1, "<fieldset>", "</fieldset>" ] ||
if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
throw "type property can't be changed";
- elem.setAttribute( name, value );
+ // convert the value to a string (all browsers do this but IE) see #1070
+ elem.setAttribute( name, "" + value );
}
if ( jQuery.browser.msie && /href|src/.test( name ) && !jQuery.isXMLDoc( elem ) )
readonly: "readOnly",
selected: "selected",
maxlength: "maxLength",
- selectedIndex: "selectedIndex"
+ selectedIndex: "selectedIndex",
+ defaultValue: "defaultValue",
+ tagName: "tagName",
+ nodeName: "nodeName"
}
});
jQuery.event.remove(this);
jQuery.removeData(this);
});
- this.parentNode.removeChild( this );
+ if (this.parentNode)
+ this.parentNode.removeChild( this );
}
},
jQuery.browser.opera && document.body[ "client" + name ] ||
// Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths)
- jQuery.browser.safari && self[ "inner" + name ] ||
+ jQuery.browser.safari && window[ "inner" + name ] ||
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
this[0] == document ?
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater (Mozilla reports scrollWidth the same as offsetWidth)
Math.max( document.body[ "scroll" + name ], document.body[ "offset" + name ] ) :
-
+
// Get or set width or height on the element
size == undefined ?
// Get width or height on the element