From d3427b490348835e58e715fd21aec1a1f49891b8 Mon Sep 17 00:00:00 2001 From: Christopher Lenz Date: Sun, 25 May 2008 09:06:31 +0000 Subject: Add third-party licenses to LICENSE file, update jQuery to 1.2.5. git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@659940 13f79535-47bb-0310-9956-ffa450edef68 --- LICENCE | 91 ++++ share/www/script/jquery.js | 1266 ++++++++++++++++++++++++-------------------- 2 files changed, 792 insertions(+), 565 deletions(-) diff --git a/LICENCE b/LICENCE index ef51da2b..6fd7444d 100644 --- a/LICENCE +++ b/LICENCE @@ -200,3 +200,94 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + +=============================================================================== + +The Apache CouchDB project includes a number of subcomponents +with separate copyright notices and license terms. Your use of the +code for the these subcomponents is subject to the terms and +conditions of the following licenses. + +------------------------------------------------------------------------------- + +share/www/script/jquery.js: + +Copyright (c) 2008 John Resig, http://jquery.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------------- + +share/www/script/json2.js: + +Public Domain + +No warranty expressed or implied. Use at your own risk. + +------------------------------------------------------------------------------- + +src/couchdb/cjson.erl: + +Copyright (c) 2006 Mochi Media, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------------- + +src/mochiweb: + +Copyright (c) 2007 Mochi Media, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/share/www/script/jquery.js b/share/www/script/jquery.js index 2e43a823..f975de2b 100644 --- a/share/www/script/jquery.js +++ b/share/www/script/jquery.js @@ -1,37 +1,34 @@ (function(){ /* - * jQuery 1.2.3 - New Wave Javascript + * jQuery 1.2.5 - New Wave Javascript * * Copyright (c) 2008 John Resig (jquery.com) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * - * $Date: 2008-02-06 00:21:25 -0500 (Wed, 06 Feb 2008) $ - * $Rev: 4663 $ + * $Date: 2008-05-20 23:14:54 -0400 (Tue, 20 May 2008) $ + * $Rev: 5651 $ */ // 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 = /^.[^:#\[\.]*$/, + +// Will speed up references to undefined, and allows munging its name. + undefined; jQuery.fn = jQuery.prototype = { init: function( selector, context ) { @@ -43,9 +40,9 @@ jQuery.fn = jQuery.prototype = { this[0] = selector; this.length = 1; return this; - + } // Handle HTML strings - } else if ( typeof selector == "string" ) { + if ( typeof selector == "string" ) { // Are we dealing with HTML string or an ID? var match = quickExpr.exec( selector ); @@ -61,53 +58,39 @@ jQuery.fn = jQuery.prototype = { var elem = document.getElementById( match[3] ); // Make sure an element was located - if ( elem ) + if ( elem ){ // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id != match[3] ) return jQuery().find( selector ); // Otherwise, we inject the element directly into the jQuery object - else { - this[0] = elem; - this.length = 1; - return this; - } - - else - selector = []; + return jQuery( elem ); + } + selector = []; } // HANDLE: $(expr, [context]) // (which is just equivalent to: $(content).find(expr) } else - return new jQuery( context ).find( selector ); + return jQuery( context ).find( selector ); // HANDLE: $(function) // 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 || + return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( 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 - jquery: "1.2.3", + jquery: "1.2.5", // The number of elements contained in the matched element set size: function() { return this.length; }, - + // The number of elements contained in the matched element set length: 0, @@ -122,7 +105,7 @@ jQuery.fn = jQuery.prototype = { // Return just the object this[ num ]; }, - + // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { @@ -135,7 +118,7 @@ jQuery.fn = jQuery.prototype = { // Return the newly-formed element set return ret; }, - + // Force the current matched set of elements to become // the specified array of elements (destroying the stack in the process) // You should use pushStack() in order to do this, but maintain the stack @@ -144,7 +127,7 @@ jQuery.fn = jQuery.prototype = { // is a super-fast way to populate an object with array-like properties this.length = 0; Array.prototype.push.apply( this, elems ); - + return this; }, @@ -155,33 +138,31 @@ jQuery.fn = jQuery.prototype = { return jQuery.each( this, callback, args ); }, - // Determine the position of an element within + // Determine the position of an element within // the matched set of elements index: function( elem ) { var ret = -1; // Locate the position of the desired element - this.each(function(i){ - if ( this == elem ) - ret = i; - }); - - return ret; + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem && elem.jquery ? elem[0] : elem + , this ); }, attr: function( name, value, type ) { var options = name; - + // Look for the case where we're accessing a style value if ( name.constructor == String ) - if ( value == undefined ) - return this.length && jQuery[ type || "attr" ]( this[0], name ) || undefined; + if ( value === undefined ) + return this[0] && jQuery[ type || "attr" ]( this[0], name ); else { options = {}; options[ name ] = value; } - + // Check to see if we're setting style values return this.each(function(i){ // Set all the styles @@ -264,7 +245,7 @@ jQuery.fn = jQuery.prototype = { this.insertBefore( elem, this.firstChild ); }); }, - + before: function() { return this.domManip(arguments, false, false, function(elem){ this.parentNode.insertBefore( elem, this ); @@ -299,8 +280,8 @@ jQuery.fn = jQuery.prototype = { // using cloneNode. Calling detachEvent on the // clone will also remove the events from the orignal // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored + // Unfortunately, this means some modifications to + // attributes in IE that are actually only stored // as properties will not be copied (such as the // the name attribute on an input). var clone = this.cloneNode(true), @@ -318,7 +299,7 @@ jQuery.fn = jQuery.prototype = { if ( this[ expando ] != undefined ) this[ expando ] = null; }); - + // Copy the events from the original to the clone if ( events === true ) this.find("*").andSelf().each(function(i){ @@ -360,24 +341,22 @@ jQuery.fn = jQuery.prototype = { }, add: function( selector ) { - return !selector ? this : this.pushStack( jQuery.merge( + return this.pushStack( jQuery.unique( jQuery.merge( this.get(), - selector.constructor == String ? - jQuery( selector ).get() : - selector.length != undefined && (!selector.nodeName || jQuery.nodeName(selector, "form")) ? - selector : [selector] ) ); + typeof selector == 'string' ? + jQuery( selector ) : + jQuery.makeArray( selector ) + ))); }, is: function( selector ) { - return selector ? - jQuery.multiFilter( selector, this ).length > 0 : - false; + return !!selector && jQuery.multiFilter( selector, this ).length > 0; }, hasClass: function( selector ) { return this.is( "." + selector ); }, - + val: function( value ) { if ( value == undefined ) { @@ -390,7 +369,7 @@ jQuery.fn = jQuery.prototype = { values = [], options = elem.options, one = elem.type == "select-one"; - + // Nothing was selected if ( index < 0 ) return null; @@ -402,18 +381,18 @@ jQuery.fn = jQuery.prototype = { if ( option.selected ) { // Get the specifc value for the option value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value; - + // We don't need an array for one selects if ( one ) return value; - + // Multi-Selects return an array values.push( value ); } } - + return values; - + // Everything else, we just grab the value } else return (this[0].value || "").replace(/\r/g, ""); @@ -432,9 +411,7 @@ jQuery.fn = jQuery.prototype = { jQuery.inArray(this.name, value) >= 0); else if ( jQuery.nodeName( this, "select" ) ) { - var values = value.constructor == Array ? - value : - [ value ]; + var values = jQuery.makeArray(value); jQuery( "option", this ).each(function(){ this.selected = (jQuery.inArray( this.value, values ) >= 0 || @@ -448,7 +425,7 @@ jQuery.fn = jQuery.prototype = { this.value = value; }); }, - + html: function( value ) { return value == undefined ? (this.length ? @@ -483,13 +460,13 @@ jQuery.fn = jQuery.prototype = { 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 @@ -503,9 +480,9 @@ jQuery.fn = jQuery.prototype = { jQuery.removeData( this, key ); }); }, - + domManip: function( args, table, reverse, callback ) { - var clone = this.length > 1, elems; + var clone = this.length > 1, elems; return this.each(function(){ if ( !elems ) { @@ -546,7 +523,7 @@ jQuery.fn = jQuery.prototype = { }; // 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 ) @@ -563,6 +540,10 @@ function evalScript( i, elem ) { 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; @@ -580,9 +561,9 @@ jQuery.extend = jQuery.fn.extend = function() { 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++ ) @@ -590,17 +571,22 @@ jQuery.extend = jQuery.fn.extend = function() { 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" && !copy.nodeType ) + target[ name ] = jQuery.extend( deep, + // Never move original objects, clone them + src || ( copy.length != null ? [ ] : { } ) + , copy ); // Don't bring in undefined values - else if ( options[ name ] != undefined ) - target[ name ] = options[ name ]; + else if ( copy !== undefined ) + target[ name ] = copy; } @@ -608,10 +594,11 @@ jQuery.extend = jQuery.fn.extend = function() { return target; }; -var expando = "jQuery" + (new Date()).getTime(), uuid = 0, windowData = {}; - -// exclude the following css properties to add px -var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i; +var expando = "jQuery" + now(), uuid = 0, windowData = {}, + // exclude the following css properties to add px + exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, + // cache defaultView + defaultView = document.defaultView || {}; jQuery.extend({ noConflict: function( deep ) { @@ -625,10 +612,10 @@ jQuery.extend({ // 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 + "" ); + return !!fn && typeof fn != "string" && !fn.nodeName && + fn.constructor != Array && /^[\s[]?function/.test( fn + "" ); }, - + // check if an element is in a (or is an) XML document isXMLDoc: function( elem ) { return elem.documentElement && !elem.body || @@ -651,7 +638,9 @@ jQuery.extend({ else script.appendChild( document.createTextNode( data ) ); - head.appendChild( script ); + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); head.removeChild( script ); } }, @@ -659,9 +648,9 @@ jQuery.extend({ nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); }, - + cache: {}, - + data: function( elem, name, data ) { elem = elem == window ? windowData : @@ -670,24 +659,24 @@ jQuery.extend({ var id = elem[ expando ]; // Compute a unique ID for the element - if ( !id ) + if ( !id ) id = elem[ expando ] = ++uuid; // Only generate the data cache if we're // trying to access or manipulate it if ( name && !jQuery.cache[ id ] ) 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 + + // Return the named cache data, or the ID for the element return name ? jQuery.cache[ id ][ name ] : id; }, - + removeData: function( elem, name ) { elem = elem == window ? windowData : @@ -730,35 +719,37 @@ jQuery.extend({ // 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] ){} } return object; }, - + prop: function( elem, value, type, i, name ) { // Handle executable functions if ( jQuery.isFunction( value ) ) value = value.call( elem, i ); - + // Handle passing in a number to a CSS property return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ? value + "px" : @@ -779,12 +770,12 @@ jQuery.extend({ if (elem.nodeType == 1) elem.className = classNames != undefined ? jQuery.grep(elem.className.split(/\s+/), function(className){ - return !jQuery.className.has( classNames, className ); + return !jQuery.className.has( classNames, className ); }).join(" ") : ""; }, - // internal only, use is(".class") + // internal only, use hasClass("class") has: function( elem, className ) { return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; } @@ -809,7 +800,7 @@ jQuery.extend({ css: function( elem, name, force ) { if ( name == "width" || name == "height" ) { var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; - + function getWH() { val = name == "width" ? elem.offsetWidth : elem.offsetHeight; var padding = 0, border = 0; @@ -819,33 +810,34 @@ jQuery.extend({ }); val -= Math.round(padding + border); } - + if ( jQuery(elem).is(":visible") ) getWH(); else jQuery.swap( elem, props, getWH ); - + return Math.max(0, val); } - + return jQuery.curCSS( elem, name, force ); }, 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 ); + // defaultView is cached + var ret = defaultView.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" : @@ -853,19 +845,19 @@ jQuery.extend({ } // 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 ( defaultView.getComputedStyle ) { // Only "float" is needed here if ( name.match( /float/i ) ) @@ -873,23 +865,23 @@ jQuery.extend({ name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); - var getComputedStyle = document.defaultView.getComputedStyle( elem, null ); + var computedStyle = defaultView.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"; @@ -899,10 +891,10 @@ jQuery.extend({ // 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 ]; } @@ -925,27 +917,27 @@ jQuery.extend({ // 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 ret; }, - + clean: function( elems, context ) { var ret = []; context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' - if (typeof context.createElement == 'undefined') + if (typeof context.createElement == 'undefined') context = context.ownerDocument || context[0] && context[0].ownerDocument || document; jQuery.each(elems, function(i, elem){ @@ -953,8 +945,8 @@ jQuery.extend({ return; if ( elem.constructor == Number ) - elem = elem.toString(); - + elem += ''; + // Convert html string into DOM nodes if ( typeof elem == "string" ) { // Fix "XHTML"-style tags in all browsers @@ -971,58 +963,58 @@ jQuery.extend({ // option or optgroup !tags.indexOf("", "" ] || - + !tags.indexOf("", "" ] || - + tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && [ 1, "", "
" ] || - + !tags.indexOf("", "" ] || - + // matched above (!tags.indexOf("", "" ] || - + !tags.indexOf("", "" ] || // IE can't serialize and