aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjaubourg <j@ubourg.net>2010-12-28 02:02:31 +0100
committerjaubourg <j@ubourg.net>2010-12-28 02:02:31 +0100
commit97b32d78307273f8bd2e5147bf5c0f0a45607a95 (patch)
treec1cddb6a87257aaa14a0ac3d04d66460aec9f177
parent85f0dda56289ed6c044dadb3a42b1a4d2ddb0891 (diff)
parent5fd21fc02bda43d4e31bcf2d5b55b918a9190a7f (diff)
downloadjquery-97b32d78307273f8bd2e5147bf5c0f0a45607a95.tar.gz
jquery-97b32d78307273f8bd2e5147bf5c0f0a45607a95.zip
Merge branch 'master' of github.com:jquery/jquery into deferred
-rw-r--r--src/ajax.js29
-rw-r--r--src/core.js5
-rw-r--r--src/data.js3
-rw-r--r--src/event.js6
-rw-r--r--src/manipulation.js4
-rw-r--r--src/support.js2
-rw-r--r--test/data/testinit.js7
-rw-r--r--test/unit/core.js46
-rw-r--r--test/unit/event.js35
-rw-r--r--test/unit/manipulation.js17
10 files changed, 105 insertions, 49 deletions
diff --git a/src/ajax.js b/src/ajax.js
index 33c364509..6cb2a626d 100644
--- a/src/ajax.js
+++ b/src/ajax.js
@@ -121,9 +121,8 @@ jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".sp
};
});
-jQuery.extend({
-
- get: function( url, data, callback, type ) {
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
@@ -132,13 +131,16 @@ jQuery.extend({
}
return jQuery.ajax({
- type: "GET",
+ type: method,
url: url,
data: data,
success: callback,
dataType: type
});
- },
+ };
+});
+
+jQuery.extend({
getScript: function( url, callback ) {
return jQuery.get(url, null, callback, "script");
@@ -148,23 +150,6 @@ jQuery.extend({
return jQuery.get(url, data, callback, "json");
},
- post: function( url, data, callback, type ) {
- // shift arguments if data argument was omited
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = {};
- }
-
- return jQuery.ajax({
- type: "POST",
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- },
-
ajaxSetup: function( settings ) {
jQuery.extend( jQuery.ajaxSettings, settings );
},
diff --git a/src/core.js b/src/core.js
index 3763cd0fe..eb0c1c8a7 100644
--- a/src/core.js
+++ b/src/core.js
@@ -1038,6 +1038,11 @@ function doScrollCheck() {
jQuery.ready();
}
+// Expose jQuery as an Asynchronous Module
+if ( typeof define !== "undefined" ) {
+ define( "jquery", [], function () { return jQuery; } );
+}
+
// Expose jQuery to the global object
return (window.jQuery = window.$ = jQuery);
diff --git a/src/data.js b/src/data.js
index 21b7543ca..4d1d1bd55 100644
--- a/src/data.js
+++ b/src/data.js
@@ -10,7 +10,8 @@ jQuery.extend({
uuid: 0,
// Unique for each copy of jQuery on the page
- expando: "jQuery" + jQuery.now(),
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
// The following elements throw uncatchable exceptions if you
// attempt to add expando properties to them.
diff --git a/src/event.js b/src/event.js
index fd470e718..c90473485 100644
--- a/src/event.js
+++ b/src/event.js
@@ -600,6 +600,12 @@ jQuery.Event = function( src ) {
if ( src && src.type ) {
this.originalEvent = src;
this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+
// Event type
} else {
this.type = src;
diff --git a/src/manipulation.js b/src/manipulation.js
index 5f4b15dd9..96caa02d0 100644
--- a/src/manipulation.js
+++ b/src/manipulation.js
@@ -440,12 +440,12 @@ jQuery.buildFragment = function( args, nodes, scripts ) {
var fragment, cacheable, cacheresults,
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
- // Only cache "small" (1/2 KB) strings that are associated with the main document
+ // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
// Cloning options loses the selected state, so don't cache them
// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
- !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+ args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
cacheable = true;
cacheresults = jQuery.fragments[ args[0] ];
diff --git a/src/support.js b/src/support.js
index 67b41c4a7..e4c3ea916 100644
--- a/src/support.js
+++ b/src/support.js
@@ -147,7 +147,7 @@
jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2;
}
- div.innerHTML = "<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";
+ div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
var tds = div.getElementsByTagName("td");
// Check if table cells still have offsetWidth/Height when they are set
diff --git a/test/data/testinit.js b/test/data/testinit.js
index a66f71d25..8f431fb5e 100644
--- a/test/data/testinit.js
+++ b/test/data/testinit.js
@@ -1,7 +1,12 @@
var jQuery = this.jQuery || "jQuery", // For testing .noConflict()
$ = this.$ || "$",
originaljQuery = jQuery,
- original$ = $;
+ original$ = $,
+ commonJSDefined;
+
+function define(module, dependencies, callback) {
+ commonJSDefined = callback();
+}
/**
* Returns an array of elements with the given IDs, eg.
diff --git a/test/unit/core.js b/test/unit/core.js
index eb88c4a89..e0938b68a 100644
--- a/test/unit/core.js
+++ b/test/unit/core.js
@@ -12,7 +12,9 @@ test("Basic requirements", function() {
});
test("jQuery()", function() {
- expect(23);
+ expect(24);
+
+ strictEqual( commonJSDefined, jQuery, "CommonJS registered (Bug #7102)" );
// Basic constructor's behavior
@@ -151,7 +153,7 @@ test("selector state", function() {
test = jQuery("#main").eq(0);
equals( test.selector, "#main.slice(0,1)", "#main eq Selector" );
equals( test.context, document, "#main eq Context" );
-
+
var d = "<div />";
equals(
jQuery(d).appendTo(jQuery(d)).selector,
@@ -253,38 +255,38 @@ test("isPlainObject", function() {
// The use case that we want to match
ok(jQuery.isPlainObject({}), "{}");
-
+
// Not objects shouldn't be matched
ok(!jQuery.isPlainObject(""), "string");
ok(!jQuery.isPlainObject(0) && !jQuery.isPlainObject(1), "number");
ok(!jQuery.isPlainObject(true) && !jQuery.isPlainObject(false), "boolean");
ok(!jQuery.isPlainObject(null), "null");
ok(!jQuery.isPlainObject(undefined), "undefined");
-
+
// Arrays shouldn't be matched
ok(!jQuery.isPlainObject([]), "array");
-
+
// Instantiated objects shouldn't be matched
ok(!jQuery.isPlainObject(new Date), "new Date");
-
+
var fn = function(){};
-
+
// Functions shouldn't be matched
ok(!jQuery.isPlainObject(fn), "fn");
-
+
// Again, instantiated objects shouldn't be matched
ok(!jQuery.isPlainObject(new fn), "new fn (no methods)");
-
+
// Makes the function a little more realistic
// (and harder to detect, incidentally)
fn.prototype = {someMethod: function(){}};
-
+
// Again, instantiated objects shouldn't be matched
ok(!jQuery.isPlainObject(new fn), "new fn");
// DOM Element
ok(!jQuery.isPlainObject(document.createElement("div")), "DOM Element");
-
+
// Window
ok(!jQuery.isPlainObject(window), "window");
@@ -298,7 +300,7 @@ test("isPlainObject", function() {
document.body.removeChild( iframe );
start();
};
-
+
var doc = iframe.contentDocument || iframe.contentWindow.document;
doc.open();
doc.write("<body onload='window.parent.iframeDone(Object);'>");
@@ -659,7 +661,7 @@ test("jQuery.merge()", function() {
// Fixed at [5998], #3641
same( parse([-2,-1], [0,1,2]), [-2,-1,0,1,2], "Second array including a zero (falsy)");
-
+
// After fixing #5527
same( parse([], [null, undefined]), [null, undefined], "Second array including null and undefined values");
same( parse({length:0}, [1,2]), {length:2, 0:1, 1:2}, "First array like");
@@ -694,7 +696,7 @@ test("jQuery.extend(Object, Object)", function() {
equals( deep1.foo2, document, "Make sure that a deep clone was not attempted on the document" );
ok( jQuery.extend(true, {}, nestedarray).arr !== arr, "Deep extend of object must clone child array" );
-
+
// #5991
ok( jQuery.isArray( jQuery.extend(true, { arr: {} }, nestedarray).arr ), "Cloned array heve to be an Array" );
ok( jQuery.isPlainObject( jQuery.extend(true, { arr: arr }, { arr: {} }).arr ), "Cloned object heve to be an plain object" );
@@ -715,13 +717,13 @@ test("jQuery.extend(Object, Object)", function() {
empty = {};
jQuery.extend(true, empty, optionsWithCustomObject);
ok( empty.foo && empty.foo.date === customObject, "Custom objects copy correctly (no methods)" );
-
+
// Makes the class a little more realistic
myKlass.prototype = { someMethod: function(){} };
empty = {};
jQuery.extend(true, empty, optionsWithCustomObject);
ok( empty.foo && empty.foo.date === customObject, "Custom objects copy correctly" );
-
+
var ret = jQuery.extend(true, { foo: 4 }, { foo: new Number(5) } );
ok( ret.foo == 5, "Wrapped numbers copy correctly" );
@@ -849,10 +851,10 @@ test("jQuery.makeArray", function(){
test("jQuery.isEmptyObject", function(){
expect(2);
-
+
equals(true, jQuery.isEmptyObject({}), "isEmptyObject on empty object literal" );
equals(false, jQuery.isEmptyObject({a:1}), "isEmptyObject on non-empty object literal" );
-
+
// What about this ?
// equals(true, jQuery.isEmptyObject(null), "isEmptyObject on null" );
});
@@ -878,23 +880,23 @@ test("jQuery.proxy", function(){
test("jQuery.parseJSON", function(){
expect(8);
-
+
equals( jQuery.parseJSON(), null, "Nothing in, null out." );
equals( jQuery.parseJSON( null ), null, "Nothing in, null out." );
equals( jQuery.parseJSON( "" ), null, "Nothing in, null out." );
-
+
same( jQuery.parseJSON("{}"), {}, "Plain object parsing." );
same( jQuery.parseJSON('{"test":1}'), {"test":1}, "Plain object parsing." );
same( jQuery.parseJSON('\n{"test":1}'), {"test":1}, "Make sure leading whitespaces are handled." );
-
+
try {
jQuery.parseJSON("{a:1}");
ok( false, "Test malformed JSON string." );
} catch( e ) {
ok( true, "Test malformed JSON string." );
}
-
+
try {
jQuery.parseJSON("{'a':1}");
ok( false, "Test malformed JSON string." );
diff --git a/test/unit/event.js b/test/unit/event.js
index a647e5f3b..83f6096d7 100644
--- a/test/unit/event.js
+++ b/test/unit/event.js
@@ -295,6 +295,41 @@ test("live/delegate immediate propagation", function() {
$p.undelegate( "click" );
});
+test("bind/delegate bubbling, isDefaultPrevented (Bug #7793)", function() {
+ expect(2);
+ var $anchor2 = jQuery( "#anchor2" ),
+ $main = jQuery( "#main" ),
+ fakeClick = function($jq) {
+ // Use a native click so we don't get jQuery simulated bubbling
+ if ( document.createEvent ) {
+ var e = document.createEvent( "MouseEvents" );
+ e.initEvent( "click", true, true );
+ $jq[0].dispatchEvent(e);
+ }
+ else if ( $jq[0].click ) {
+ $jq[0].click(); // IE
+ }
+ };
+ $anchor2.click(function(e) {
+ e.preventDefault();
+ });
+ $main.delegate("#foo", "click", function(e) {
+ equals( e.isDefaultPrevented(), true, "isDefaultPrevented true passed to bubbled event" );
+ });
+ fakeClick( $anchor2 );
+ $anchor2.unbind( "click" );
+ $main.undelegate( "click" );
+ $anchor2.click(function(e) {
+ // Let the default action occur
+ });
+ $main.delegate("#foo", "click", function(e) {
+ equals( e.isDefaultPrevented(), false, "isDefaultPrevented false passed to bubbled event" );
+ });
+ fakeClick( $anchor2 );
+ $anchor2.unbind( "click" );
+ $main.undelegate( "click" );
+});
+
test("bind(), iframes", function() {
// events don't work with iframes, see #939 - this test fails in IE because of contentDocument
var doc = jQuery("#loadediframe").contents();
diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js
index da1635400..e273cf08a 100644
--- a/test/unit/manipulation.js
+++ b/test/unit/manipulation.js
@@ -1247,3 +1247,20 @@ test("jQuery.cleanData", function() {
return div;
}
});
+
+test("jQuery.buildFragment - no plain-text caching (Bug #6779)", function() {
+ expect(1);
+
+ // DOM manipulation fails if added text matches an Object method
+ var $f = jQuery( "<div />" ).appendTo( "#main" ),
+ bad = [ "start-", "toString", "hasOwnProperty", "append", "here&there!", "-end" ];
+
+ for ( var i=0; i < bad.length; i++ ) {
+ try {
+ $f.append( bad[i] );
+ }
+ catch(e) {}
+ }
+ equals($f.text(), bad.join(''), "Cached strings that match Object properties");
+ $f.remove();
+});