From 5c2d70979c15bbda5c90e1634abe11d8c350abcb Mon Sep 17 00:00:00 2001 From: Jordan Boesch Date: Sat, 5 Mar 2011 09:30:29 -0600 Subject: [PATCH 1/8] bug 6158; fixing replaceWith from throwing errors on empty elements --- src/manipulation.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/manipulation.js b/src/manipulation.js index ba3169715..a4a81de44 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -261,6 +261,9 @@ jQuery.fn.extend({ } }); } else { + if ( !this.length ) { + return this; + } return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ); } }, From c9ef09c800ba7b6510d9e3a68f053ae29409f621 Mon Sep 17 00:00:00 2001 From: Jordan Boesch Date: Sat, 5 Mar 2011 09:46:12 -0600 Subject: [PATCH 2/8] bug 6158; fixing replaceWith from throwing errors on non existant elements --- src/manipulation.js | 7 +++---- test/unit/manipulation.js | 7 +++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/manipulation.js b/src/manipulation.js index a4a81de44..613faabb9 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -261,10 +261,9 @@ jQuery.fn.extend({ } }); } else { - if ( !this.length ) { - return this; - } - return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ); + return ( this.length ) ? + this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : + this; } }, diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js index 34425ed3a..1169032ce 100644 --- a/test/unit/manipulation.js +++ b/test/unit/manipulation.js @@ -739,7 +739,7 @@ test("insertAfter(String|Element|Array<Element>|jQuery)", function() { }); var testReplaceWith = function(val) { - expect(20); + expect(21); jQuery('#yahoo').replaceWith(val( 'buga' )); ok( jQuery("#replace")[0], 'Replace element with string' ); ok( !jQuery("#yahoo")[0], 'Verify that original element is gone, after string' ); @@ -799,6 +799,9 @@ var testReplaceWith = function(val) { var set = jQuery("
").replaceWith(val("test")); equals( set[0].nodeName.toLowerCase(), "span", "Replace the disconnected node." ); equals( set.length, 1, "Replace the disconnected node." ); + + var non_existant = jQuery('#does-not-exist').replaceWith( val("should not throw an error") ); + equals( non_existant.length, 0, "Length of non existant element." ) var $div = jQuery("
").appendTo("body"); // TODO: Work on jQuery(...) inline script execution @@ -827,7 +830,7 @@ test("replaceWith(String|Element|Array<Element>|jQuery)", function() { test("replaceWith(Function)", function() { testReplaceWith(functionReturningObj); - expect(21); + expect(22); var y = jQuery("#yahoo")[0]; From dd100bf5ac56d5d44afe45d73fe1824bd0135872 Mon Sep 17 00:00:00 2001 From: Jordan Boesch Date: Sat, 5 Mar 2011 09:59:25 -0600 Subject: [PATCH 3/8] bug 6158; fixing replaceWith from throwing errors on non existant elements; fixing semicolon --- test/unit/manipulation.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js index 1169032ce..ff3dff164 100644 --- a/test/unit/manipulation.js +++ b/test/unit/manipulation.js @@ -799,9 +799,9 @@ var testReplaceWith = function(val) { var set = jQuery("
").replaceWith(val("test")); equals( set[0].nodeName.toLowerCase(), "span", "Replace the disconnected node." ); equals( set.length, 1, "Replace the disconnected node." ); - + var non_existant = jQuery('#does-not-exist').replaceWith( val("should not throw an error") ); - equals( non_existant.length, 0, "Length of non existant element." ) + equals( non_existant.length, 0, "Length of non existant element." ); var $div = jQuery("
").appendTo("body"); // TODO: Work on jQuery(...) inline script execution From 124acbfbc523614dc5835cfce2c82b867a59986f Mon Sep 17 00:00:00 2001 From: Jordan Boesch Date: Mon, 14 Mar 2011 14:17:02 -0600 Subject: [PATCH 4/8] removing parens --- src/manipulation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/manipulation.js b/src/manipulation.js index 613faabb9..27f81cc24 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -261,7 +261,7 @@ jQuery.fn.extend({ } }); } else { - return ( this.length ) ? + return this.length ? this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : this; } From 714ae379db9dcb704c04080196a05d13a028f7a4 Mon Sep 17 00:00:00 2001 From: jaubourg Date: Tue, 15 Mar 2011 19:20:03 +0100 Subject: [PATCH 5/8] Fixes #8509. Makes URL regexp less overzealous and ensures it recognizes URL schemes which do not contain a conformant hierarchical structure ( as per section 2.1.2 of http://www.ietf.org/rfc/rfc2718.txt ). Also adds about: and adobe air's app: and app-storage: to the list of local protocols and provides a failover in case document.location is illformed. Unit test added. --- src/ajax.js | 6 +++--- test/unit/ajax.js | 12 +++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index 4714afdae..add3b3738 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -7,7 +7,7 @@ var r20 = /%20/g, rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /(?:^file|^widget|\-extension):$/, + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, rquery = /\?/, @@ -19,7 +19,7 @@ var r20 = /%20/g, rucHeadersFunc = function( _, $1, $2 ) { return $1 + $2.toUpperCase(); }, - rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?|\/[^\/])/, + rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/, // Keep a copy of the old load method _load = jQuery.fn.load, @@ -61,7 +61,7 @@ try { } // Segment location into parts -ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ); +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 2a2ac46a1..7c572a32c 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -492,7 +492,7 @@ test(".ajax() - hash", function() { test("jQuery ajax - cross-domain detection", function() { - expect( 5 ); + expect( 6 ); var loc = document.location, otherPort = loc.port === 666 ? 667 : 666, @@ -508,6 +508,7 @@ test("jQuery ajax - cross-domain detection", function() { }); jQuery.ajax({ + dataType: "jsonp", url: 'app:/path', beforeSend: function( _ , s ) { ok( s.crossDomain , "Adobe AIR app:/ URL detected as cross-domain" ); @@ -533,6 +534,15 @@ test("jQuery ajax - cross-domain detection", function() { } }); + jQuery.ajax({ + dataType: "jsonp", + url: "about:blank", + beforeSend: function( _ , s ) { + ok( s.crossDomain , "Test about:blank is detected as cross-domain" ); + return false; + } + }); + jQuery.ajax({ dataType: "jsonp", url: loc.protocol + "//" + loc.host, From 150d3decb54971a7378fb48d0b6970d3fb50ff95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20F=C3=BCrstenberg?= Date: Tue, 15 Mar 2011 20:16:09 +0100 Subject: [PATCH 6/8] Introduce submodules, closes #8536 Instead of the manual clone of sizzle and qunit, use git submodules instead. this will ensure that all future releases can be recreated by checking out an tag. --- .gitignore | 2 -- .gitmodules | 6 ++++++ Makefile | 34 ++++------------------------------ src/sizzle | 1 + test/qunit | 1 + 5 files changed, 12 insertions(+), 32 deletions(-) create mode 100644 .gitmodules create mode 160000 src/sizzle create mode 160000 test/qunit diff --git a/.gitignore b/.gitignore index a77d67a96..6cd547974 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,5 @@ dist *~ *.diff *.patch -test/qunit -src/sizzle /*.html .DS_Store diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..80ce23688 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "src/sizzle"] + path = src/sizzle + url = git://github.com/jeresig/sizzle.git +[submodule "test/qunit"] + path = test/qunit + url = git://github.com/jquery/qunit.git diff --git a/Makefile b/Makefile index a6aae4253..e0d1da716 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,3 @@ -V ?= 0 - SRC_DIR = src TEST_DIR = test BUILD_DIR = build @@ -38,7 +36,6 @@ JQ = ${DIST_DIR}/jquery.js JQ_MIN = ${DIST_DIR}/jquery.min.js SIZZLE_DIR = ${SRC_DIR}/sizzle -QUNIT_DIR = ${TEST_DIR}/qunit JQ_VER = $(shell cat version.txt) VER = sed "s/@VERSION/${JQ_VER}/" @@ -51,32 +48,8 @@ all: jquery min lint ${DIST_DIR}: @@mkdir -p ${DIST_DIR} -ifeq ($(strip $(V)),0) -verbose = --quiet -else ifeq ($(strip $(V)),1) -verbose = -else -verbose = --verbose -endif - -define clone_or_pull --@@if test ! -d $(strip ${1})/.git; then \ - echo "Cloning $(strip ${1})..."; \ - git clone $(strip ${verbose}) --depth=1 $(strip ${2}) $(strip ${1}); \ - else \ - echo "Pulling $(strip ${1})..."; \ - git --git-dir=$(strip ${1})/.git pull $(strip ${verbose}) origin master; \ - fi - -endef - -${QUNIT_DIR}: - $(call clone_or_pull, ${QUNIT_DIR}, git://github.com/jquery/qunit.git) - -${SIZZLE_DIR}: - $(call clone_or_pull, ${SIZZLE_DIR}, git://github.com/jeresig/sizzle.git) - -init: ${QUNIT_DIR} ${SIZZLE_DIR} +init: + @@if [ -d .git ]; then git submodule update --init --recursive; fi jquery: init ${JQ} jq: init ${JQ} @@ -122,7 +95,8 @@ clean: @@echo "Removing built copy of Sizzle" @@rm -f src/selector.js - @@echo "Removing cloned directories" +distclean: clean + @@echo "Removing submodules" @@rm -rf test/qunit src/sizzle .PHONY: all jquery lint min init jq clean diff --git a/src/sizzle b/src/sizzle new file mode 160000 index 000000000..ef19279f5 --- /dev/null +++ b/src/sizzle @@ -0,0 +1 @@ +Subproject commit ef19279f54ba49242c6461d47577c703f4f4e80e diff --git a/test/qunit b/test/qunit new file mode 160000 index 000000000..d404faf8f --- /dev/null +++ b/test/qunit @@ -0,0 +1 @@ +Subproject commit d404faf8f587fcbe6b8907943022e6318dd51e0c From cd2ca7b5918b3cedfed497ac7d86bfd2c5f92a8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20F=C3=BCrstenberg?= Date: Tue, 15 Mar 2011 21:25:51 +0100 Subject: [PATCH 7/8] pull submodules make command Adding an helper funciton to pull the latest from all registered submodules --- Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Makefile b/Makefile index e0d1da716..7b67f7aff 100644 --- a/Makefile +++ b/Makefile @@ -99,4 +99,9 @@ distclean: clean @@echo "Removing submodules" @@rm -rf test/qunit src/sizzle +# update the submodules to the latest at the most logical branch +pull_submodules: + @@git submodule foreach "git pull origin \$$(git branch --no-color --contains \$$(git rev-parse HEAD) | grep -v \( | head -1)" + @@git submodule summary + .PHONY: all jquery lint min init jq clean From bd4468886d97edfb53342e1a10acb300d081ed27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20F=C3=BCrstenberg?= Date: Tue, 15 Mar 2011 21:42:58 +0100 Subject: [PATCH 8/8] adding pull command --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 7b67f7aff..84816a19e 100644 --- a/Makefile +++ b/Makefile @@ -104,4 +104,7 @@ pull_submodules: @@git submodule foreach "git pull origin \$$(git branch --no-color --contains \$$(git rev-parse HEAD) | grep -v \( | head -1)" @@git submodule summary +pull: pull_submodules + @@git pull ${REMOTE} ${BRANCH} + .PHONY: all jquery lint min init jq clean