diff options
author | jeresig <jeresig@gmail.com> | 2011-04-13 16:42:20 -0400 |
---|---|---|
committer | jeresig <jeresig@gmail.com> | 2011-04-13 16:42:20 -0400 |
commit | 72ddc8c64518a748071fd662b21fc995fbd8e96c (patch) | |
tree | 03e8924fd7b66731250587487d104e1972776c9f | |
parent | 42e20269ecf7a300c6dbd7475b8bef2ef160c546 (diff) | |
parent | 4ad9b44deada9da9639f53b1ca3cc4cf2ebf2df2 (diff) | |
download | jquery-72ddc8c64518a748071fd662b21fc995fbd8e96c.tar.gz jquery-72ddc8c64518a748071fd662b21fc995fbd8e96c.zip |
Merge branch 'master' of github.com:jquery/jquery
-rw-r--r-- | src/ajax/jsonp.js | 30 | ||||
-rw-r--r-- | src/event.js | 29 | ||||
-rw-r--r-- | src/manipulation.js | 9 | ||||
-rw-r--r-- | src/support.js | 7 | ||||
-rw-r--r-- | test/data/testsuite.css | 3 | ||||
-rw-r--r-- | test/index.html | 5 | ||||
-rw-r--r-- | test/unit/attributes.js | 16 | ||||
-rw-r--r-- | test/unit/event.js | 6 |
8 files changed, 50 insertions, 55 deletions
diff --git a/src/ajax/jsonp.js b/src/ajax/jsonp.js index 4fb094011..6b0f95d5b 100644 --- a/src/ajax/jsonp.js +++ b/src/ajax/jsonp.js @@ -14,13 +14,12 @@ jQuery.ajaxSetup({ // Detect, normalize options and install callbacks for jsonp requests jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - var dataIsString = ( typeof s.data === "string" ); + var inspectData = s.contentType === "application/x-www-form-urlencoded" && + ( typeof s.data === "string" ); if ( s.dataTypes[ 0 ] === "jsonp" || - originalSettings.jsonpCallback || - originalSettings.jsonp != null || s.jsonp !== false && ( jsre.test( s.url ) || - dataIsString && jsre.test( s.data ) ) ) { + inspectData && jsre.test( s.data ) ) ) { var responseContainer, jsonpCallback = s.jsonpCallback = @@ -28,20 +27,12 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { previous = window[ jsonpCallback ], url = s.url, data = s.data, - replace = "$1" + jsonpCallback + "$2", - cleanUp = function() { - // Set callback back to previous value - window[ jsonpCallback ] = previous; - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( previous ) ) { - window[ jsonpCallback ]( responseContainer[ 0 ] ); - } - }; + replace = "$1" + jsonpCallback + "$2"; if ( s.jsonp !== false ) { url = url.replace( jsre, replace ); if ( s.url === url ) { - if ( dataIsString ) { + if ( inspectData ) { data = data.replace( jsre, replace ); } if ( s.data === data ) { @@ -59,8 +50,15 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { responseContainer = [ response ]; }; - // Install cleanUp function - jqXHR.then( cleanUp, cleanUp ); + // Clean-up function + jqXHR.always(function() { + // Set callback back to previous value + window[ jsonpCallback ] = previous; + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( previous ) ) { + window[ jsonpCallback ]( responseContainer[ 0 ] ); + } + }); // Use data converter to retrieve json after script execution s.converters["script json"] = function() { diff --git a/src/event.js b/src/event.js index 316a7fee1..dd48e7f77 100644 --- a/src/event.js +++ b/src/event.js @@ -275,7 +275,7 @@ jQuery.event = { "changeData": true }, - trigger: function( event, data, elem, bubbling /* For Internal Use Only */ ) { + trigger: function( event, data, elem ) { // Event object or event type var type = event.type || event, namespaces = [], @@ -304,10 +304,11 @@ jQuery.event = { // jQuery.Event object event[ jQuery.expando ] ? event : // Object literal - jQuery.extend( jQuery.Event(type), event ) : + new jQuery.Event( type, event ) : // Just the event type (string) - jQuery.Event(type); + new jQuery.Event( type ); + event.type = type; event.namespace = namespaces.join("."); event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); event.exclusive = exclusive; @@ -562,26 +563,15 @@ jQuery.removeEvent = document.removeEventListener ? } }; -jQuery.Event = function( src ) { +jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !this.preventDefault ) { - return new jQuery.Event( src ); + return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; - - // Push explicitly provided properties onto the event object - for ( var prop in src ) { - // Ensure we don't clobber jQuery.Event prototype - // with own properties. - if ( hasOwn.call( src, prop ) ) { - this[ prop ] = src[ prop ]; - } - } - - // Always ensure a type has been explicitly set this.type = src.type; // Events bubbling up the document may have been marked as prevented @@ -594,6 +584,11 @@ jQuery.Event = function( src ) { this.type = src; } + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value this.timeStamp = jQuery.now(); @@ -980,7 +975,7 @@ jQuery.fn.extend({ triggerHandler: function( type, data ) { if ( this[0] ) { - var event = jQuery.Event( type ); + var event = new jQuery.Event( type ); event.preventDefault(); event.stopPropagation(); jQuery.event.trigger( event, data, this[0] ); diff --git a/src/manipulation.js b/src/manipulation.js index 52d59d83e..711cb5e88 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -553,6 +553,8 @@ jQuery.extend({ }, clean: function( elems, context, fragment, scripts ) { + var checkScriptType; + context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' @@ -630,15 +632,16 @@ jQuery.extend({ } if ( fragment ) { + checkScriptType = function( elem ) { + return !elem.type || rscriptType.test( elem.type ); + }; for ( i = 0; ret[i]; i++ ) { if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); } else { if ( ret[i].nodeType === 1 ) { - var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), function( elem ) { - return !elem.type || rscriptType.test( elem.type ); - }); + var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType ); ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); } diff --git a/src/support.js b/src/support.js index 6b19c0830..1bd35cab2 100644 --- a/src/support.js +++ b/src/support.js @@ -73,7 +73,7 @@ jQuery.support = (function() { // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, - + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) getSetAttribute: div.className !== "t", @@ -196,7 +196,7 @@ jQuery.support = (function() { marginDiv.style.marginRight = "0"; div.appendChild( marginDiv ); support.reliableMarginRight = - ( parseInt( document.defaultView.getComputedStyle( marginDiv ).marginRight, 10 ) || 0 ) === 0; + ( parseInt( document.defaultView.getComputedStyle( marginDiv, null ).marginRight, 10 ) || 0 ) === 0; } // Remove the body element we added @@ -224,9 +224,6 @@ jQuery.support = (function() { } } - // release memory in IE - body = div = all = a = tds = undefined; - return support; })(); diff --git a/test/data/testsuite.css b/test/data/testsuite.css index 029006810..a9dd97ba4 100644 --- a/test/data/testsuite.css +++ b/test/data/testsuite.css @@ -109,3 +109,6 @@ div#show-tests * { display: none; } #nothiddendiv { font-size: 16px; } #nothiddendivchild.em { font-size: 2em; } #nothiddendivchild.prct { font-size: 150%; } + +/* For testing type on vml in IE #7071 */ +v\:oval { behavior:url(#default#VML); display:inline-block; }
\ No newline at end of file diff --git a/test/index.html b/test/index.html index bf7dc7989..a10655089 100644 --- a/test/index.html +++ b/test/index.html @@ -45,10 +45,6 @@ <script src="unit/effects.js"></script> <script src="unit/offset.js"></script> <script src="unit/dimensions.js"></script> - - <!-- For testing http://bugs.jquery.com/ticket/7071 --> - <xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v" /> - <style>v\:oval { behavior:url(#default#VML); display:inline-block; }</style> </head> <body id="body"> @@ -151,7 +147,6 @@ <span id="test.foo[5]bar" class="test.foo[5]bar"></span> <foo_bar id="foobar">test element</foo_bar> - <v:oval id="oval" style="width:100pt;height:75pt;" fillcolor="red"> </v:oval> </form> <b id="floatTest">Float test.</b> <iframe id="iframe" name="iframe"></iframe> diff --git a/test/unit/attributes.js b/test/unit/attributes.js index c78a2961f..2bcc5046e 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -492,6 +492,7 @@ test("val()", function() { var testVal = function(valueObj) { expect(8); + QUnit.reset(); jQuery("#text1").val(valueObj( "test" )); equals( document.getElementById("text1").value, "test", "Check for modified (via val(String)) value of input element" ); @@ -504,15 +505,16 @@ var testVal = function(valueObj) { jQuery("#text1").val(valueObj( null )); equals( document.getElementById("text1").value, "", "Check for modified (via val(null)) value of input element" ); - jQuery("#select1").val(valueObj( "3" )); - equals( jQuery("#select1").val(), "3", "Check for modified (via val(String)) value of select element" ); + var $select1 = jQuery("#select1"); + $select1.val(valueObj( "3" )); + equals( $select1.val(), "3", "Check for modified (via val(String)) value of select element" ); - jQuery("#select1").val(valueObj( 2 )); - equals( jQuery("#select1").val(), "2", "Check for modified (via val(Number)) value of select element" ); + $select1.val(valueObj( 2 )); + equals( $select1.val(), "2", "Check for modified (via val(Number)) value of select element" ); - jQuery("#select1").append("<option value='4'>four</option>"); - jQuery("#select1").val(valueObj( 4 )); - equals( jQuery("#select1").val(), "4", "Should be possible to set the val() to a newly created option" ); + $select1.append("<option value='4'>four</option>"); + $select1.val(valueObj( 4 )); + equals( $select1.val(), "4", "Should be possible to set the val() to a newly created option" ); // using contents will get comments regular, text, and comment nodes var j = jQuery("#nonnodes").contents(); diff --git a/test/unit/event.js b/test/unit/event.js index 491396f93..687184294 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -778,6 +778,8 @@ test("trigger() shortcuts", function() { elem.remove(); // test that special handlers do not blow up with VML elements (#7071) + jQuery('<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v" />').appendTo('head'); + jQuery('<v:oval id="oval" style="width:100pt;height:75pt;" fillcolor="red"> </v:oval>').appendTo('#form'); jQuery("#oval").click().keydown(); }); @@ -978,11 +980,11 @@ test("trigger(eventObject, [data], [fn])", function() { $parent.unbind().remove(); }); -test("jQuery.Event({ /* props */ })", function() { +test("jQuery.Event( type, props )", function() { expect(4); - var event = jQuery.Event({ type: "keydown", keyCode: 64 }), + var event = jQuery.Event( "keydown", { keyCode: 64 }), handler = function( event ) { ok( "keyCode" in event, "Special property 'keyCode' exists" ); equal( event.keyCode, 64, "event.keyCode has explicit value '64'" ); |