// Keep a UserAgent string for use with jQuery.browser
userAgent = navigator.userAgent,
- // For matching the engine and version of thte browser
+ // For matching the engine and version of the browser
browserMatch,
// Has the ready events already been bound?
continue;
}
- // Recurse if we're merging object literal values
- if ( deep && copy && jQuery.isPlainObject(copy) ) {
- // Don't extend not object literals
- var clone = src && jQuery.isPlainObject(src) ? src : {};
+ // Recurse if we're merging object literal values or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
+ var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
+ : jQuery.isArray(copy) ? [] : {};
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
}
return true;
},
+
+ error: function( msg ) {
+ throw msg;
+ },
+
+ parseJSON: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
+ .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
+
+ // Try to use the native JSON parser first
+ return window.JSON && window.JSON.parse ?
+ window.JSON.parse( data ) :
+ (new Function("return " + data))();
+
+ } else {
+ jQuery.error( "Invalid JSON: " + data );
+ }
+ },
noop: function() {},
// Use of jQuery.browser is frowned upon.
// More details: http://docs.jquery.com/Utilities/jQuery.browser
uaMatch: function( ua ) {
- var ret = { browser: "" };
-
ua = ua.toLowerCase();
- if ( /webkit/.test( ua ) ) {
- ret = { browser: "webkit", version: /webkit[\/ ]([\w.]+)/ };
-
- } else if ( /opera/.test( ua ) ) {
- ret = { browser: "opera", version: /opera[\/ ]([\w.]+)/ };
+ var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+ /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
+ /(msie) ([\w.]+)/.exec( ua ) ||
+ !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||
+ [];
- } else if ( /msie/.test( ua ) ) {
- ret = { browser: "msie", version: /msie ([\w.]+)/ };
-
- } else if ( /mozilla/.test( ua ) && !/compatible/.test( ua ) ) {
- ret = { browser: "mozilla", version: /rv:([\w.]+)/ };
- }
-
- ret.version = (ret.version && ret.version.exec( ua ) || [0, "0"])[1];
-
- return ret;
+ return { browser: match[1] || "", version: match[2] || "0" };
},
browser: {}
jQuery.ready();
}
-if ( indexOf ) {
- jQuery.inArray = function( elem, array ) {
- return indexOf.call( array, elem );
- };
-}
-
function evalScript( i, elem ) {
if ( elem.src ) {
jQuery.ajax({
// Setting one attribute
if ( value !== undefined ) {
// Optionally, function values get executed if exec is true
- exec = exec && jQuery.isFunction(value);
+ exec = !pass && exec && jQuery.isFunction(value);
for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i ) : value, pass );
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
}
return elems;