aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTimmy Willison <timmywillisn@gmail.com>2013-09-08 21:05:07 -0400
committerTimmy Willison <timmywillisn@gmail.com>2013-09-08 21:05:07 -0400
commit99c123b159e85ab9d97bea65a5ec4fff62023bf9 (patch)
tree6416b60fffdbdc8ee09dfdd3de0aed20b4fdf11d /src
parenteb9cbfcaf6803a07a953e0ca0922a973c5a11016 (diff)
downloadjquery-99c123b159e85ab9d97bea65a5ec4fff62023bf9.tar.gz
jquery-99c123b159e85ab9d97bea65a5ec4fff62023bf9.zip
Move parsing methods to their own files (separates manipulation dependency from core)
Diffstat (limited to 'src')
-rw-r--r--src/ajax.js2
-rw-r--r--src/ajax/load.js1
-rw-r--r--src/ajax/parseJSON.js8
-rw-r--r--src/ajax/parseXML.js26
-rw-r--r--src/core.js61
-rw-r--r--src/core/parseHTML.js38
-rw-r--r--src/var/rsingleTag.js4
7 files changed, 82 insertions, 58 deletions
diff --git a/src/ajax.js b/src/ajax.js
index 3fd882a2f..7310b5e15 100644
--- a/src/ajax.js
+++ b/src/ajax.js
@@ -3,6 +3,8 @@ define([
"./var/rnotwhite",
"./ajax/var/nonce",
"./ajax/var/rquery",
+ "./ajax/parseJSON",
+ "./ajax/parseXML",
"./deferred"
], function( jQuery, rnotwhite, nonce, rquery ) {
diff --git a/src/ajax/load.js b/src/ajax/load.js
index 167031697..3c345a027 100644
--- a/src/ajax/load.js
+++ b/src/ajax/load.js
@@ -1,5 +1,6 @@
define([
"../core",
+ "../core/parseHTML",
"../ajax",
"../traversing",
"../manipulation",
diff --git a/src/ajax/parseJSON.js b/src/ajax/parseJSON.js
new file mode 100644
index 000000000..9d2ada95b
--- /dev/null
+++ b/src/ajax/parseJSON.js
@@ -0,0 +1,8 @@
+define([
+ "../core"
+], function( jQuery ) {
+
+ jQuery.parseJSON = JSON.parse;
+
+ return jQuery.parseJSON;
+});
diff --git a/src/ajax/parseXML.js b/src/ajax/parseXML.js
new file mode 100644
index 000000000..9103c3d6f
--- /dev/null
+++ b/src/ajax/parseXML.js
@@ -0,0 +1,26 @@
+define([
+ "../core"
+], function( jQuery ) {
+ // Cross-browser xml parsing
+ jQuery.parseXML = function( data ) {
+ var xml, tmp;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+
+ // Support: IE9
+ try {
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } catch ( e ) {
+ xml = undefined;
+ }
+
+ if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+ };
+
+ return jQuery.parseXML;
+});
diff --git a/src/core.js b/src/core.js
index 175208c2d..ef5df4f65 100644
--- a/src/core.js
+++ b/src/core.js
@@ -10,9 +10,10 @@ define([
"./var/toString",
"./var/hasOwn",
"./var/trim",
+ "./var/rsingleTag",
"./var/support"
], function( strundefined, arr, slice, concat, push, indexOf,
- class2type, toString, hasOwn, trim, support ) {
+ class2type, toString, hasOwn, trim, rsingleTag, support ) {
var
// A central reference to the root jQuery(document)
@@ -40,9 +41,6 @@ var
// Strict HTML recognition (#11290: must start with <)
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
-
// Matches dashed string for camelizing
rmsPrefix = /^-ms-/,
rdashAlpha = /-([\da-z])/gi,
@@ -84,6 +82,7 @@ jQuery.fn = jQuery.prototype = {
context = context instanceof jQuery ? context[0] : context;
// scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
jQuery.merge( this, jQuery.parseHTML(
match[1],
context && context.nodeType ? context.ownerDocument || context : document,
@@ -387,60 +386,6 @@ jQuery.extend({
throw new Error( msg );
},
- // data: string of html
- // context (optional): If specified, the fragment will be created in this context, defaults to document
- // keepScripts (optional): If true, will include scripts passed in the html string
- // TODO: Circular reference core -> manipulation -> core
- parseHTML: function( data, context, keepScripts ) {
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
- context = context || document;
-
- var parsed = rsingleTag.exec( data ),
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[1] ) ];
- }
-
- parsed = jQuery.buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
- },
-
- parseJSON: JSON.parse,
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
-
- // Support: IE9
- try {
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } catch ( e ) {
- xml = undefined;
- }
-
- if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
noop: function() {},
// Evaluates a script in a global context
diff --git a/src/core/parseHTML.js b/src/core/parseHTML.js
new file mode 100644
index 000000000..b097bfcc5
--- /dev/null
+++ b/src/core/parseHTML.js
@@ -0,0 +1,38 @@
+define([
+ "../core",
+ "../var/rsingleTag",
+ "../manipulation" // buildFragment
+], function( jQuery, rsingleTag ) {
+
+ // data: string of html
+ // context (optional): If specified, the fragment will be created in this context, defaults to document
+ // keepScripts (optional): If true, will include scripts passed in the html string
+ jQuery.parseHTML = function( data, context, keepScripts ) {
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ if ( typeof context === "boolean" ) {
+ keepScripts = context;
+ context = false;
+ }
+ context = context || document;
+
+ var parsed = rsingleTag.exec( data ),
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if ( parsed ) {
+ return [ context.createElement( parsed[1] ) ];
+ }
+
+ parsed = jQuery.buildFragment( [ data ], context, scripts );
+
+ if ( scripts && scripts.length ) {
+ jQuery( scripts ).remove();
+ }
+
+ return jQuery.merge( [], parsed.childNodes );
+ };
+
+ return jQuery.parseHTML;
+});
diff --git a/src/var/rsingleTag.js b/src/var/rsingleTag.js
new file mode 100644
index 000000000..7e7090b77
--- /dev/null
+++ b/src/var/rsingleTag.js
@@ -0,0 +1,4 @@
+define(function() {
+ // Match a standalone tag
+ return (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+});