Commit d8576139 authored by Richard Gibson's avatar Richard Gibson

Fix #14459: Use jQuery.parseJSON instead of JSON.parse

(cherry picked from commit ced9d155)
parent 5823bf3f
...@@ -25,7 +25,7 @@ function dataAttr( elem, key, data ) { ...@@ -25,7 +25,7 @@ function dataAttr( elem, key, data ) {
// Only convert to a number if it doesn't change the string // Only convert to a number if it doesn't change the string
+data + "" === data ? +data : +data + "" === data ? +data :
rbrace.test( data ) ? jQuery.parseJSON( data ) : rbrace.test( data ) ? jQuery.parseJSON( data ) :
data; data;
} catch( e ) {} } catch( e ) {}
// Make sure we set the data so it isn't changed later // Make sure we set the data so it isn't changed later
......
...@@ -244,7 +244,6 @@ test("data-* attributes", function() { ...@@ -244,7 +244,6 @@ test("data-* attributes", function() {
var prop, i, l, metadata, elem, var prop, i, l, metadata, elem,
obj, obj2, check, num, num2, obj, obj2, check, num, num2,
parseJSON = jQuery.parseJSON, parseJSON = jQuery.parseJSON,
nativeParse = typeof JSON !== "undefined" && JSON.parse,
div = jQuery("<div>"), div = jQuery("<div>"),
child = jQuery("<div data-myobj='old data' data-ignored=\"DOM\" data-other='test'></div>"), child = jQuery("<div data-myobj='old data' data-ignored=\"DOM\" data-other='test'></div>"),
dummy = jQuery("<div data-myobj='old data' data-ignored=\"DOM\" data-other='test'></div>"); dummy = jQuery("<div data-myobj='old data' data-ignored=\"DOM\" data-other='test'></div>");
...@@ -301,17 +300,11 @@ test("data-* attributes", function() { ...@@ -301,17 +300,11 @@ test("data-* attributes", function() {
equal( child.data("other"), "test", "Make sure value was pulled in properly from a .data()." ); equal( child.data("other"), "test", "Make sure value was pulled in properly from a .data()." );
// attribute parsing // attribute parsing
i = l = 0; i = 0;
jQuery.parseJSON = function() { jQuery.parseJSON = function() {
i++; i++;
return parseJSON.apply( this, arguments ); return parseJSON.apply( this, arguments );
}; };
if ( nativeParse ) {
JSON.parse = function() {
l++;
return nativeParse.apply( this, arguments );
};
}
child child
.attr("data-true", "true") .attr("data-true", "true")
...@@ -359,12 +352,9 @@ test("data-* attributes", function() { ...@@ -359,12 +352,9 @@ test("data-* attributes", function() {
strictEqual( child.data("space"), " ", "Whitespace string read from attribute"); strictEqual( child.data("space"), " ", "Whitespace string read from attribute");
strictEqual( child.data("null"), null, "Primitive null read from attribute"); strictEqual( child.data("null"), null, "Primitive null read from attribute");
strictEqual( child.data("string"), "test", "Typical string read from attribute"); strictEqual( child.data("string"), "test", "Typical string read from attribute");
equal( i || l, 2, "Correct number of JSON parse attempts when reading from attributes" ); equal( i, 2, "Correct number of JSON parse attempts when reading from attributes" );
jQuery.parseJSON = parseJSON; jQuery.parseJSON = parseJSON;
if ( nativeParse ) {
JSON.parse = nativeParse;
}
child.remove(); child.remove();
// tests from metadata plugin // tests from metadata plugin
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment