Added the new jQuery.support object and removed all uses of jQuery.browser from within jQuery itself (while simultaneously deprecating the use of jQuery.browser).
This commit is contained in:
parent
8ee1708ea9
commit
b850ab2b8e
6 changed files with 86 additions and 154 deletions
1
Makefile
1
Makefile
|
@ -9,6 +9,7 @@ SPEED_DIR = ${PREFIX}/speed
|
||||||
PLUG_DIR = ../plugins
|
PLUG_DIR = ../plugins
|
||||||
|
|
||||||
BASE_FILES = ${SRC_DIR}/core.js\
|
BASE_FILES = ${SRC_DIR}/core.js\
|
||||||
|
${SRC_DIR}/support.js\
|
||||||
${SRC_DIR}/selector.js\
|
${SRC_DIR}/selector.js\
|
||||||
${SRC_DIR}/event.js\
|
${SRC_DIR}/event.js\
|
||||||
${SRC_DIR}/ajax.js\
|
${SRC_DIR}/ajax.js\
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
<concat destfile="${JQ}">
|
<concat destfile="${JQ}">
|
||||||
<fileset dir="${SRC_DIR}" includes="intro.js" />
|
<fileset dir="${SRC_DIR}" includes="intro.js" />
|
||||||
<fileset dir="${SRC_DIR}" includes="core.js" />
|
<fileset dir="${SRC_DIR}" includes="core.js" />
|
||||||
|
<fileset dir="${SRC_DIR}" includes="support.js" />
|
||||||
<fileset dir="${SRC_DIR}" includes="selector.js" />
|
<fileset dir="${SRC_DIR}" includes="selector.js" />
|
||||||
<fileset dir="${SRC_DIR}" includes="event.js" />
|
<fileset dir="${SRC_DIR}" includes="event.js" />
|
||||||
<fileset dir="${SRC_DIR}" includes="ajax.js" />
|
<fileset dir="${SRC_DIR}" includes="ajax.js" />
|
||||||
|
|
|
@ -459,8 +459,7 @@ jQuery.extend({
|
||||||
try {
|
try {
|
||||||
// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
|
// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
|
||||||
return !xhr.status && location.protocol == "file:" ||
|
return !xhr.status && location.protocol == "file:" ||
|
||||||
( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223 ||
|
( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;
|
||||||
jQuery.browser.safari && xhr.status === undefined;
|
|
||||||
} catch(e){}
|
} catch(e){}
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
@ -471,8 +470,7 @@ jQuery.extend({
|
||||||
var xhrRes = xhr.getResponseHeader("Last-Modified");
|
var xhrRes = xhr.getResponseHeader("Last-Modified");
|
||||||
|
|
||||||
// Firefox always returns 200. check Last-Modified date
|
// Firefox always returns 200. check Last-Modified date
|
||||||
return xhr.status == 304 || xhrRes == jQuery.lastModified[url] ||
|
return xhr.status == 304 || xhrRes == jQuery.lastModified[url];
|
||||||
jQuery.browser.safari && xhr.status === undefined;
|
|
||||||
} catch(e){}
|
} catch(e){}
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
139
src/core.js
139
src/core.js
|
@ -285,7 +285,7 @@ jQuery.fn = jQuery.prototype = {
|
||||||
clone: function( events ) {
|
clone: function( events ) {
|
||||||
// Do the clone
|
// Do the clone
|
||||||
var ret = this.map(function(){
|
var ret = this.map(function(){
|
||||||
if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
|
if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
|
||||||
// IE copies events bound via attachEvent when
|
// IE copies events bound via attachEvent when
|
||||||
// using cloneNode. Calling detachEvent on the
|
// using cloneNode. Calling detachEvent on the
|
||||||
// clone will also remove the events from the orignal
|
// clone will also remove the events from the orignal
|
||||||
|
@ -642,10 +642,10 @@ jQuery.extend({
|
||||||
script = document.createElement("script");
|
script = document.createElement("script");
|
||||||
|
|
||||||
script.type = "text/javascript";
|
script.type = "text/javascript";
|
||||||
if ( jQuery.browser.msie )
|
if ( jQuery.support.scriptEval )
|
||||||
script.text = data;
|
|
||||||
else
|
|
||||||
script.appendChild( document.createTextNode( data ) );
|
script.appendChild( document.createTextNode( data ) );
|
||||||
|
else
|
||||||
|
script.text = data;
|
||||||
|
|
||||||
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
|
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
|
||||||
// This arises when a base node is used (#2709).
|
// This arises when a base node is used (#2709).
|
||||||
|
@ -834,30 +834,14 @@ jQuery.extend({
|
||||||
curCSS: function( elem, name, force ) {
|
curCSS: function( elem, name, force ) {
|
||||||
var ret, style = elem.style;
|
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;
|
|
||||||
|
|
||||||
// defaultView is cached
|
|
||||||
var ret = defaultView.getComputedStyle( elem, null );
|
|
||||||
return !ret || ret.getPropertyValue("color") == "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// We need to handle opacity special in IE
|
// We need to handle opacity special in IE
|
||||||
if ( name == "opacity" && jQuery.browser.msie ) {
|
if ( name == "opacity" && !jQuery.support.opacity ) {
|
||||||
ret = jQuery.attr( style, "opacity" );
|
ret = jQuery.attr( style, "opacity" );
|
||||||
|
|
||||||
return ret == "" ?
|
return ret == "" ?
|
||||||
"1" :
|
"1" :
|
||||||
ret;
|
ret;
|
||||||
}
|
}
|
||||||
// Opera sometimes will give the wrong display answer, this fixes it, see #2037
|
|
||||||
if ( jQuery.browser.opera && name == "display" ) {
|
|
||||||
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
|
// Make sure we're using the right name for getting the float value
|
||||||
if ( name.match( /float/i ) )
|
if ( name.match( /float/i ) )
|
||||||
|
@ -876,38 +860,9 @@ jQuery.extend({
|
||||||
|
|
||||||
var computedStyle = defaultView.getComputedStyle( elem, null );
|
var computedStyle = defaultView.getComputedStyle( elem, null );
|
||||||
|
|
||||||
if ( computedStyle && !color( elem ) )
|
if ( computedStyle )
|
||||||
ret = computedStyle.getPropertyValue( name );
|
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 = [], a = elem, i = 0;
|
|
||||||
|
|
||||||
// Locate all of the parent display: none elements
|
|
||||||
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 ( ; i < stack.length; i++ )
|
|
||||||
if ( color( stack[ i ] ) ) {
|
|
||||||
swap[ i ] = stack[ i ].style.display;
|
|
||||||
stack[ i ].style.display = "block";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Since we flip the display style, we have to handle that
|
|
||||||
// one special, otherwise get the value
|
|
||||||
ret = name == "display" && swap[ stack.length - 1 ] != null ?
|
|
||||||
"none" :
|
|
||||||
( computedStyle && computedStyle.getPropertyValue( name ) ) || "";
|
|
||||||
|
|
||||||
// Finally, revert the display styles back
|
|
||||||
for ( i = 0; i < swap.length; i++ )
|
|
||||||
if ( swap[ i ] != null )
|
|
||||||
stack[ i ].style.display = swap[ i ];
|
|
||||||
}
|
|
||||||
|
|
||||||
// We should always get a number back from opacity
|
// We should always get a number back from opacity
|
||||||
if ( name == "opacity" && ret == "" )
|
if ( name == "opacity" && ret == "" )
|
||||||
ret = "1";
|
ret = "1";
|
||||||
|
@ -991,7 +946,7 @@ jQuery.extend({
|
||||||
[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
|
[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
|
||||||
|
|
||||||
// IE can't serialize <link> and <script> tags normally
|
// IE can't serialize <link> and <script> tags normally
|
||||||
jQuery.browser.msie &&
|
!jQuery.support.htmlSerialize &&
|
||||||
[ 1, "div<div>", "</div>" ] ||
|
[ 1, "div<div>", "</div>" ] ||
|
||||||
|
|
||||||
[ 0, "", "" ];
|
[ 0, "", "" ];
|
||||||
|
@ -1004,7 +959,7 @@ jQuery.extend({
|
||||||
div = div.lastChild;
|
div = div.lastChild;
|
||||||
|
|
||||||
// Remove IE's autoinserted <tbody> from table fragments
|
// Remove IE's autoinserted <tbody> from table fragments
|
||||||
if ( jQuery.browser.msie ) {
|
if ( !jQuery.support.tbody ) {
|
||||||
|
|
||||||
// String was a <table>, *may* have spurious <tbody>
|
// String was a <table>, *may* have spurious <tbody>
|
||||||
var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
|
var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
|
||||||
|
@ -1019,12 +974,12 @@ jQuery.extend({
|
||||||
if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
|
if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
|
||||||
tbody[ j ].parentNode.removeChild( tbody[ j ] );
|
tbody[ j ].parentNode.removeChild( tbody[ j ] );
|
||||||
|
|
||||||
// IE completely kills leading whitespace when innerHTML is used
|
|
||||||
if ( /^\s/.test( elem ) )
|
|
||||||
div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IE completely kills leading whitespace when innerHTML is used
|
||||||
|
if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
|
||||||
|
div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
|
||||||
|
|
||||||
if ( fragment ) {
|
if ( fragment ) {
|
||||||
var found = div.getElementsByTagName("script");
|
var found = div.getElementsByTagName("script");
|
||||||
|
|
||||||
|
@ -1068,8 +1023,7 @@ jQuery.extend({
|
||||||
|
|
||||||
var notxml = !jQuery.isXMLDoc( elem ),
|
var notxml = !jQuery.isXMLDoc( elem ),
|
||||||
// Whether we are setting (or getting)
|
// Whether we are setting (or getting)
|
||||||
set = value !== undefined,
|
set = value !== undefined;
|
||||||
msie = jQuery.browser.msie;
|
|
||||||
|
|
||||||
// Try to normalize/fix the name
|
// Try to normalize/fix the name
|
||||||
name = notxml && jQuery.props[ name ] || name;
|
name = notxml && jQuery.props[ name ] || name;
|
||||||
|
@ -1083,7 +1037,7 @@ jQuery.extend({
|
||||||
|
|
||||||
// Safari mis-reports the default selected property of a hidden option
|
// Safari mis-reports the default selected property of a hidden option
|
||||||
// Accessing the parent's selectedIndex property fixes it
|
// Accessing the parent's selectedIndex property fixes it
|
||||||
if ( name == "selected" && jQuery.browser.safari )
|
if ( name == "selected" )
|
||||||
elem.parentNode.selectedIndex;
|
elem.parentNode.selectedIndex;
|
||||||
|
|
||||||
// If applicable, access the attribute via the DOM 0 way
|
// If applicable, access the attribute via the DOM 0 way
|
||||||
|
@ -1103,14 +1057,14 @@ jQuery.extend({
|
||||||
return elem[ name ];
|
return elem[ name ];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( msie && notxml && name == "style" )
|
if ( !jQuery.support.style && notxml && name == "style" )
|
||||||
return jQuery.attr( elem.style, "cssText", value );
|
return jQuery.attr( elem.style, "cssText", value );
|
||||||
|
|
||||||
if ( set )
|
if ( set )
|
||||||
// convert the value to a string (all browsers do this but IE) see #1070
|
// convert the value to a string (all browsers do this but IE) see #1070
|
||||||
elem.setAttribute( name, "" + value );
|
elem.setAttribute( name, "" + value );
|
||||||
|
|
||||||
var attr = msie && notxml && special
|
var attr = !jQuery.support.hrefNormalized && notxml && special
|
||||||
// Some attributes require a special call on IE
|
// Some attributes require a special call on IE
|
||||||
? elem.getAttribute( name, 2 )
|
? elem.getAttribute( name, 2 )
|
||||||
: elem.getAttribute( name );
|
: elem.getAttribute( name );
|
||||||
|
@ -1122,7 +1076,7 @@ jQuery.extend({
|
||||||
// elem is actually elem.style ... set the style
|
// elem is actually elem.style ... set the style
|
||||||
|
|
||||||
// IE uses filters for opacity
|
// IE uses filters for opacity
|
||||||
if ( msie && name == "opacity" ) {
|
if ( !jQuery.support.opacity && name == "opacity" ) {
|
||||||
if ( set ) {
|
if ( set ) {
|
||||||
// IE has trouble with opacity if it does not have layout
|
// IE has trouble with opacity if it does not have layout
|
||||||
// Force it by setting the zoom level
|
// Force it by setting the zoom level
|
||||||
|
@ -1183,7 +1137,7 @@ jQuery.extend({
|
||||||
var i = 0, elem, pos = first.length;
|
var i = 0, elem, pos = first.length;
|
||||||
// Also, we need to make sure that the correct elements are being returned
|
// Also, we need to make sure that the correct elements are being returned
|
||||||
// (IE returns comment nodes in a '*' query)
|
// (IE returns comment nodes in a '*' query)
|
||||||
if ( jQuery.browser.msie ) {
|
if ( !jQuery.support.getAll ) {
|
||||||
while ( (elem = second[ i++ ]) )
|
while ( (elem = second[ i++ ]) )
|
||||||
if ( elem.nodeType != 8 )
|
if ( elem.nodeType != 8 )
|
||||||
first[ pos++ ] = elem;
|
first[ pos++ ] = elem;
|
||||||
|
@ -1244,6 +1198,10 @@ jQuery.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Use of jQuery.browser is deprecated.
|
||||||
|
// It's included for backwards compatibility and plugins,
|
||||||
|
// although they should work to migrate away.
|
||||||
|
|
||||||
var userAgent = navigator.userAgent.toLowerCase();
|
var userAgent = navigator.userAgent.toLowerCase();
|
||||||
|
|
||||||
// Figure out what browser is being used
|
// Figure out what browser is being used
|
||||||
|
@ -1255,26 +1213,8 @@ jQuery.browser = {
|
||||||
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
|
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
|
||||||
};
|
};
|
||||||
|
|
||||||
var styleFloat = jQuery.browser.msie ?
|
|
||||||
"styleFloat" :
|
|
||||||
"cssFloat";
|
|
||||||
|
|
||||||
jQuery.extend({
|
|
||||||
// Check to see if the W3C box model is being used
|
// Check to see if the W3C box model is being used
|
||||||
boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
|
jQuery.boxModel = !jQuery.browser.msie || document.compatMode == "CSS1Compat";
|
||||||
|
|
||||||
props: {
|
|
||||||
"for": "htmlFor",
|
|
||||||
"class": "className",
|
|
||||||
"float": styleFloat,
|
|
||||||
cssFloat: styleFloat,
|
|
||||||
styleFloat: styleFloat,
|
|
||||||
readonly: "readOnly",
|
|
||||||
maxlength: "maxLength",
|
|
||||||
cellspacing: "cellSpacing",
|
|
||||||
rowspan: "rowSpan"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery.each({
|
jQuery.each({
|
||||||
parent: function(elem){return elem.parentNode;},
|
parent: function(elem){return elem.parentNode;},
|
||||||
|
@ -1359,39 +1299,6 @@ jQuery.each({
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
jQuery.each([ "Height", "Width" ], function(i, name){
|
|
||||||
var type = name.toLowerCase();
|
|
||||||
|
|
||||||
jQuery.fn[ type ] = function( size ) {
|
|
||||||
// Get window width or height
|
|
||||||
return this[0] == window ?
|
|
||||||
// Opera reports document.body.client[Width/Height] properly in both quirks and standards
|
|
||||||
jQuery.browser.opera && document.body.parentNode[ "client" + name ] ||
|
|
||||||
|
|
||||||
// Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths)
|
|
||||||
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 ] :
|
|
||||||
|
|
||||||
// Get document width or height
|
|
||||||
this[0] == document ?
|
|
||||||
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
|
|
||||||
Math.max(
|
|
||||||
Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
|
|
||||||
Math.max(document.body["offset" + name], document.documentElement["offset" + name])
|
|
||||||
) :
|
|
||||||
|
|
||||||
// Get or set width or height on the element
|
|
||||||
size === undefined ?
|
|
||||||
// Get width or height on the element
|
|
||||||
(this.length ? jQuery.css( this[0], type ) : null) :
|
|
||||||
|
|
||||||
// Set the width or height on the element (default to pixels if value is unitless)
|
|
||||||
this.css( type, typeof size === "string" ? size : size + "px" );
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// Helper function used by the dimensions and offset modules
|
// Helper function used by the dimensions and offset modules
|
||||||
function num(elem, prop) {
|
function num(elem, prop) {
|
||||||
return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
|
return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
|
||||||
|
|
|
@ -20,4 +20,31 @@ jQuery.each([ "Height", "Width" ], function(i, name){
|
||||||
num(this, "margin" + tl) + num(this, "margin" + br) : 0);
|
num(this, "margin" + tl) + num(this, "margin" + br) : 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var type = name.toLowerCase();
|
||||||
|
|
||||||
|
jQuery.fn[ type ] = function( size ) {
|
||||||
|
// Get window width or height
|
||||||
|
return this[0] == window ?
|
||||||
|
// 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 ] :
|
||||||
|
|
||||||
|
// Get document width or height
|
||||||
|
this[0] == document ?
|
||||||
|
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
|
||||||
|
Math.max(
|
||||||
|
document.documentElement["client" + name],
|
||||||
|
document.body["scroll" + name], document.documentElement["scroll" + name],
|
||||||
|
document.body["offset" + name], document.documentElement["offset" + name]
|
||||||
|
) :
|
||||||
|
|
||||||
|
// Get or set width or height on the element
|
||||||
|
size === undefined ?
|
||||||
|
// Get width or height on the element
|
||||||
|
(this.length ? jQuery.css( this[0], type ) : null) :
|
||||||
|
|
||||||
|
// Set the width or height on the element (default to pixels if value is unitless)
|
||||||
|
this.css( type, typeof size === "string" ? size : size + "px" );
|
||||||
|
};
|
||||||
|
|
||||||
});
|
});
|
|
@ -13,7 +13,7 @@ jQuery.event = {
|
||||||
|
|
||||||
// For whatever reason, IE has trouble passing the window object
|
// For whatever reason, IE has trouble passing the window object
|
||||||
// around, causing it to be cloned in the process
|
// around, causing it to be cloned in the process
|
||||||
if ( jQuery.browser.msie && elem.setInterval )
|
if ( elem.setInterval && elem != window )
|
||||||
elem = window;
|
elem = window;
|
||||||
|
|
||||||
// Make sure that the function being executed has a unique ID
|
// Make sure that the function being executed has a unique ID
|
||||||
|
@ -383,7 +383,6 @@ function stopImmediatePropagation(){
|
||||||
this.stopPropagation();
|
this.stopPropagation();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !jQuery.browser.msie ){
|
|
||||||
// Checks if an event happened on an element within another element
|
// Checks if an event happened on an element within another element
|
||||||
// Used in jQuery.event.special.mouseenter and mouseleave handlers
|
// Used in jQuery.event.special.mouseenter and mouseleave handlers
|
||||||
var withinElement = function(event) {
|
var withinElement = function(event) {
|
||||||
|
@ -415,7 +414,6 @@ if ( !jQuery.browser.msie ){
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
jQuery.fn.extend({
|
jQuery.fn.extend({
|
||||||
bind: function( type, data, fn ) {
|
bind: function( type, data, fn ) {
|
||||||
|
|
Loading…
Reference in a new issue