*/
// Map over jQuery in case of overwrite
-if ( window.jQuery )
- var _jQuery = window.jQuery;
+var _jQuery = window.jQuery,
+// Map over the $ in case of overwrite
+ _$ = window.$;
-var jQuery = window.jQuery = function( selector, context ) {
+var jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.prototype.init( selector, context );
+ return new jQuery.fn.init( selector, context );
};
-// Map over the $ in case of overwrite
-if ( window.$ )
- var _$ = window.$;
-
-// Map the jQuery namespace to the '$' one
-window.$ = jQuery;
-
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
-var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
+var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
// Is it a simple selector
-var isSimple = /^.[^:#\[\.]*$/;
+ isSimple = /^.[^:#\[\.]*$/;
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) )
return new jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );
-
- return this.setArray(
- // HANDLE: $(array)
- selector.constructor == Array && selector ||
-
- // HANDLE: $(arraylike)
- // Watch for when an array-like object, contains DOM nodes, is passed in as the selector
- (selector.jquery || selector.length && selector != window && !selector.nodeType && selector[0] != undefined && selector[0].nodeType) && jQuery.makeArray( selector ) ||
-
- // HANDLE: $(*)
- [ selector ] );
+
+ return this.setArray(jQuery.makeArray(selector));
},
// The current version of jQuery being used
},
is: function( selector ) {
- return selector ?
- jQuery.multiFilter( selector, this ).length > 0 :
- false;
+ return !!selector && jQuery.multiFilter( selector, this ).length > 0;
},
hasClass: function( selector ) {
var parts = key.split(".");
parts[1] = parts[1] ? "." + parts[1] : "";
- if ( value == null ) {
+ if ( value === undefined ) {
var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
- if ( data == undefined && this.length )
+ if ( data === undefined && this.length )
data = jQuery.data( this[0], key );
- return data == null && parts[1] ?
+ return data === undefined && parts[1] ?
this.data( parts[0] ) :
data;
} else
};
// Give the init function the jQuery prototype for later instantiation
-jQuery.prototype.init.prototype = jQuery.prototype;
+jQuery.fn.init.prototype = jQuery.fn;
function evalScript( i, elem ) {
if ( elem.src )
elem.parentNode.removeChild( elem );
}
+function now(){
+ return +new Date;
+}
+
jQuery.extend = jQuery.fn.extend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
target = {};
// extend jQuery itself if only one argument is passed
- if ( length == 1 ) {
+ if ( length == i ) {
target = this;
- i = 0;
+ --i;
}
for ( ; i < length; i++ )
if ( (options = arguments[ i ]) != null )
// Extend the base object
for ( var name in options ) {
+ var src = target[ name ], copy = options[ name ];
+
// Prevent never-ending loop
- if ( target === options[ name ] )
+ if ( target === copy )
continue;
// Recurse if we're merging object values
- if ( deep && options[ name ] && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType )
- target[ name ] = jQuery.extend( target[ name ], options[ name ] );
+ if ( deep && copy && typeof copy == "object" && src && !copy.nodeType )
+ target[ name ] = jQuery.extend( deep, src, copy );
// Don't bring in undefined values
- else if ( options[ name ] != undefined )
- target[ name ] = options[ name ];
+ else if ( copy !== undefined )
+ target[ name ] = copy;
}
return target;
};
-var expando = "jQuery" + (new Date()).getTime(), uuid = 0, windowData = {};
+var expando = "jQuery" + now(), uuid = 0, windowData = {},
// exclude the following css properties to add px
-var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;
+ exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
+// cache getComputedStyle
+ getComputedStyle = document.defaultView && document.defaultView.getComputedStyle;
jQuery.extend({
noConflict: function( deep ) {
jQuery.cache[ id ] = {};
// Prevent overriding the named cache with undefined values
- if ( data != undefined )
+ if ( data !== undefined )
jQuery.cache[ id ][ name ] = data;
// Return the named cache data, or the ID for the element
// args is for internal usage only
each: function( object, callback, args ) {
+ var name, i = 0, length = object.length;
+
if ( args ) {
- if ( object.length == undefined ) {
- for ( var name in object )
+ if ( length == undefined ) {
+ for ( name in object )
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 )
+ for ( ; i < length; )
+ if ( callback.apply( object[ i++ ], args ) === false )
break;
// A special, fast, case for the most common use of each
} else {
- if ( object.length == undefined ) {
- for ( var name in object )
+ if ( length == undefined ) {
+ for ( name in object )
if ( callback.call( object[ name ], name, object[ name ] ) === false )
break;
} else
- for ( var i = 0, length = object.length, value = object[0];
+ for ( var value = object[0];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
}
},
curCSS: function( elem, name, force ) {
- var ret;
+ var ret, style = elem.style;
// A helper method for determining if an element's values are broken
function color( elem ) {
if ( !jQuery.browser.safari )
return false;
-
- var ret = document.defaultView.getComputedStyle( elem, null );
+
+ // getComputedStyle is cached
+ var ret = getComputedStyle( elem, null );
return !ret || ret.getPropertyValue("color") == "";
}
// We need to handle opacity special in IE
if ( name == "opacity" && jQuery.browser.msie ) {
- ret = jQuery.attr( elem.style, "opacity" );
+ ret = jQuery.attr( style, "opacity" );
return ret == "" ?
"1" :
}
// Opera sometimes will give the wrong display answer, this fixes it, see #2037
if ( jQuery.browser.opera && name == "display" ) {
- var save = elem.style.outline;
- elem.style.outline = "0 solid black";
- elem.style.outline = save;
+ var save = style.outline;
+ style.outline = "0 solid black";
+ style.outline = save;
}
// Make sure we're using the right name for getting the float value
if ( name.match( /float/i ) )
name = styleFloat;
- if ( !force && elem.style && elem.style[ name ] )
- ret = elem.style[ name ];
+ if ( !force && style && style[ name ] )
+ ret = style[ name ];
- else if ( document.defaultView && document.defaultView.getComputedStyle ) {
+ else if ( getComputedStyle ) {
// Only "float" is needed here
if ( name.match( /float/i ) )
name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
- var getComputedStyle = document.defaultView.getComputedStyle( elem, null );
+ var computedStyle = getComputedStyle( elem, null );
- if ( getComputedStyle && !color( elem ) )
- ret = getComputedStyle.getPropertyValue( name );
+ if ( computedStyle && !color( elem ) )
+ ret = computedStyle.getPropertyValue( name );
// If the element isn't reporting its values properly in Safari
// then some display: none elements are involved
else {
- var swap = [], stack = [];
+ var swap = [], stack = [], a = elem, i = 0;
// Locate all of the parent display: none elements
- for ( var a = elem; a && color(a); a = a.parentNode )
+ for ( ; a && color(a); a = a.parentNode )
stack.unshift(a);
// Go through and make them visible, but in reverse
// (It would be better if we knew the exact display type that they had)
- for ( var i = 0; i < stack.length; i++ )
+ for ( ; i < stack.length; i++ )
if ( color( stack[ i ] ) ) {
swap[ i ] = stack[ i ].style.display;
stack[ i ].style.display = "block";
// one special, otherwise get the value
ret = name == "display" && swap[ stack.length - 1 ] != null ?
"none" :
- ( getComputedStyle && getComputedStyle.getPropertyValue( name ) ) || "";
+ ( computedStyle && computedStyle.getPropertyValue( name ) ) || "";
// Finally, revert the display styles back
- for ( var i = 0; i < swap.length; i++ )
+ for ( i = 0; i < swap.length; i++ )
if ( swap[ i ] != null )
stack[ i ].style.display = swap[ i ];
}
// but a number that has a weird ending, we need to convert it to pixels
if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
// Remember the original values
- var style = elem.style.left, runtimeStyle = elem.runtimeStyle.left;
+ var left = style.left, rsLeft = elem.runtimeStyle.left;
// Put in the new values to get a computed value out
elem.runtimeStyle.left = elem.currentStyle.left;
- elem.style.left = ret || 0;
- ret = elem.style.pixelLeft + "px";
+ style.left = ret || 0;
+ ret = style.pixelLeft + "px";
// Revert the changed values
- elem.style.left = style;
- elem.runtimeStyle.left = runtimeStyle;
+ style.left = left;
+ elem.runtimeStyle.left = rsLeft;
}
}
return;
if ( elem.constructor == Number )
- elem = elem.toString();
+ elem += '';
// Convert html string into DOM nodes
if ( typeof elem == "string" ) {
makeArray: function( array ) {
var ret = [];
- // Need to use typeof to fight Safari childNodes crashes
- if ( typeof array != "array" )
- for ( var i = 0, length = array.length; i < length; i++ )
- ret.push( array[ i ] );
- else
- ret = array.slice( 0 );
+ if( array != undefined ){
+ var i = array.length;
+ //the window, strings and functions also have 'length'
+ if( i != null && !array.split && array != window && !array.call )
+ while( i )
+ ret[--i] = array[i];
+ else
+ ret[0] = array;
+ }
return ret;
},
merge: function( first, second ) {
// We have to loop this way because IE & Opera overwrite the length
// expando of getElementsByTagName
-
+ var i = 0;
// Also, we need to make sure that the correct elements are being returned
// (IE returns comment nodes in a '*' query)
if ( jQuery.browser.msie ) {
- for ( var i = 0; second[ i ]; i++ )
+ for ( ; second[ i ]; i++ )
if ( second[ i ].nodeType != 8 )
first.push( second[ i ] );
} else
- for ( var i = 0; second[ i ]; i++ )
+ for ( ; second[ i ]; i++ )
first.push( second[ i ] );
return first;
for ( var i = 0, length = elems.length; i < length; i++ ) {
var value = callback( elems[ i ], i );
- if ( value !== null && value != undefined ) {
- if ( value.constructor != Array )
- value = [ value ];
-
- ret = ret.concat( value );
- }
+ if ( value != null )
+ ret[ ret.length ] = value;
}
- return ret;
+ return ret.concat.apply( [], ret );
}
});