From 44596aa8f2cc908c73bc149fccbcc0f8458a330a Mon Sep 17 00:00:00 2001 From: Timmy Willison Date: Sun, 8 Sep 2013 21:05:07 -0400 Subject: Move parsing methods to their own files (separates manipulation dependency from core) Conflicts: src/core.js --- src/ajax/load.js | 1 + src/ajax/parseJSON.js | 41 +++++++++++++++++++++++++++++++++++++++++ src/ajax/parseXML.js | 29 +++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 src/ajax/parseJSON.js create mode 100644 src/ajax/parseXML.js (limited to 'src/ajax') diff --git a/src/ajax/load.js b/src/ajax/load.js index d8e7e57c4..cc2a71958 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..ff678623e --- /dev/null +++ b/src/ajax/parseJSON.js @@ -0,0 +1,41 @@ +define([ + "../core" +], function( jQuery ) { + + var rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g; + + jQuery.parseJSON = function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }; + + return jQuery.parseJSON; +}); diff --git a/src/ajax/parseXML.js b/src/ajax/parseXML.js new file mode 100644 index 000000000..ab2969992 --- /dev/null +++ b/src/ajax/parseXML.js @@ -0,0 +1,29 @@ +define([ + "../core" +], function( jQuery ) { + // Cross-browser xml parsing + jQuery.parseXML = function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }; + + return jQuery.parseXML; +}); -- cgit v1.2.3