diff options
Diffstat (limited to 'resources/jquery/jquery.json.js')
-rw-r--r-- | resources/jquery/jquery.json.js | 349 |
1 files changed, 181 insertions, 168 deletions
diff --git a/resources/jquery/jquery.json.js b/resources/jquery/jquery.json.js index 63230b3b..aac3428b 100644 --- a/resources/jquery/jquery.json.js +++ b/resources/jquery/jquery.json.js @@ -1,180 +1,193 @@ -/* +/** * jQuery JSON Plugin - * version: 2.1 (2009-08-14) + * version: 2.3 (2011-09-17) * * This document is licensed as free software under the terms of the * MIT License: http://www.opensource.org/licenses/mit-license.php * - * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org + * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org * website's http://www.json.org/json2.js, which proclaims: * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that * I uphold. * - * It is also influenced heavily by MochiKit's serializeJSON, which is + * It is also influenced heavily by MochiKit's serializeJSON, which is * copyrighted 2005 by Bob Ippolito. - * - * @see http://code.google.com/p/jquery-json/ */ -(function($) { - /** jQuery.toJSON( json-serializble ) - Converts the given argument into a JSON respresentation. - - If an object has a "toJSON" function, that will be used to get the representation. - Non-integer/string keys are skipped in the object, as are keys that point to a function. - - json-serializble: - The *thing* to be converted. - **/ - $.toJSON = function(o) - { - if (typeof(JSON) == 'object' && JSON.stringify) - return JSON.stringify(o); - - var type = typeof(o); - - if (o === null) - return "null"; - - if (type == "undefined") - return undefined; - - if (type == "number" || type == "boolean") - return o + ""; - - if (type == "string") - return $.quoteString(o); - - if (type == 'object') - { - if (typeof o.toJSON == "function") - return $.toJSON( o.toJSON() ); - - if (o.constructor === Date) - { - var month = o.getUTCMonth() + 1; - if (month < 10) month = '0' + month; - - var day = o.getUTCDate(); - if (day < 10) day = '0' + day; - - var year = o.getUTCFullYear(); - - var hours = o.getUTCHours(); - if (hours < 10) hours = '0' + hours; - - var minutes = o.getUTCMinutes(); - if (minutes < 10) minutes = '0' + minutes; - - var seconds = o.getUTCSeconds(); - if (seconds < 10) seconds = '0' + seconds; - - var milli = o.getUTCMilliseconds(); - if (milli < 100) milli = '0' + milli; - if (milli < 10) milli = '0' + milli; - - return '"' + year + '-' + month + '-' + day + 'T' + - hours + ':' + minutes + ':' + seconds + - '.' + milli + 'Z"'; - } - - if (o.constructor === Array) - { - var ret = []; - for (var i = 0; i < o.length; i++) - ret.push( $.toJSON(o[i]) || "null" ); - - return "[" + ret.join(",") + "]"; - } - - var pairs = []; - for (var k in o) { - var name; - var type = typeof k; - - if (type == "number") - name = '"' + k + '"'; - else if (type == "string") - name = $.quoteString(k); - else - continue; //skip non-string or number keys - - if (typeof o[k] == "function") - continue; //skip pairs where the value is a function. - - var val = $.toJSON(o[k]); - - pairs.push(name + ":" + val); - } - - return "{" + pairs.join(", ") + "}"; - } - }; - - /** jQuery.evalJSON(src) - Evaluates a given piece of json source. - **/ - $.evalJSON = function(src) - { - if (typeof(JSON) == 'object' && JSON.parse) - return JSON.parse(src); - return eval("(" + src + ")"); - }; - - /** jQuery.secureEvalJSON(src) - Evals JSON in a way that is *more* secure. - **/ - $.secureEvalJSON = function(src) - { - if (typeof(JSON) == 'object' && JSON.parse) - return JSON.parse(src); - - var filtered = src; - filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@'); - filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); - filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); - - if (/^[\],:{}\s]*$/.test(filtered)) - return eval("(" + src + ")"); - else - throw new SyntaxError("Error parsing JSON, source is not valid."); - }; - - /** jQuery.quoteString(string) - Returns a string-repr of a string, escaping quotes intelligently. - Mostly a support function for toJSON. - - Examples: - >>> jQuery.quoteString("apple") - "apple" - - >>> jQuery.quoteString('"Where are we going?", she asked.') - "\"Where are we going?\", she asked." - **/ - $.quoteString = function(string) - { - if (string.match(_escapeable)) - { - return '"' + string.replace(_escapeable, function (a) - { - var c = _meta[a]; - if (typeof c === 'string') return c; - c = a.charCodeAt(); - return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); - }) + '"'; - } - return '"' + string + '"'; - }; - - var _escapeable = /["\\\x00-\x1f\x7f-\x9f]/g; - - var _meta = { - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }; -})(jQuery); +(function( $ ) { + + var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g, + meta = { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; + + /** + * jQuery.toJSON + * Converts the given argument into a JSON respresentation. + * + * @param o {Mixed} The json-serializble *thing* to be converted + * + * If an object has a toJSON prototype, that will be used to get the representation. + * Non-integer/string keys are skipped in the object, as are keys that point to a + * function. + * + */ + $.toJSON = typeof JSON === 'object' && JSON.stringify + ? JSON.stringify + : function( o ) { + + if ( o === null ) { + return 'null'; + } + + var type = typeof o; + + if ( type === 'undefined' ) { + return undefined; + } + if ( type === 'number' || type === 'boolean' ) { + return '' + o; + } + if ( type === 'string') { + return $.quoteString( o ); + } + if ( type === 'object' ) { + if ( typeof o.toJSON === 'function' ) { + return $.toJSON( o.toJSON() ); + } + if ( o.constructor === Date ) { + var month = o.getUTCMonth() + 1, + day = o.getUTCDate(), + year = o.getUTCFullYear(), + hours = o.getUTCHours(), + minutes = o.getUTCMinutes(), + seconds = o.getUTCSeconds(), + milli = o.getUTCMilliseconds(); + + if ( month < 10 ) { + month = '0' + month; + } + if ( day < 10 ) { + day = '0' + day; + } + if ( hours < 10 ) { + hours = '0' + hours; + } + if ( minutes < 10 ) { + minutes = '0' + minutes; + } + if ( seconds < 10 ) { + seconds = '0' + seconds; + } + if ( milli < 100 ) { + milli = '0' + milli; + } + if ( milli < 10 ) { + milli = '0' + milli; + } + return '"' + year + '-' + month + '-' + day + 'T' + + hours + ':' + minutes + ':' + seconds + + '.' + milli + 'Z"'; + } + if ( o.constructor === Array ) { + var ret = []; + for ( var i = 0; i < o.length; i++ ) { + ret.push( $.toJSON( o[i] ) || 'null' ); + } + return '[' + ret.join(',') + ']'; + } + var name, + val, + pairs = []; + for ( var k in o ) { + type = typeof k; + if ( type === 'number' ) { + name = '"' + k + '"'; + } else if (type === 'string') { + name = $.quoteString(k); + } else { + // Keys must be numerical or string. Skip others + continue; + } + type = typeof o[k]; + + if ( type === 'function' || type === 'undefined' ) { + // Invalid values like these return undefined + // from toJSON, however those object members + // shouldn't be included in the JSON string at all. + continue; + } + val = $.toJSON( o[k] ); + pairs.push( name + ':' + val ); + } + return '{' + pairs.join( ',' ) + '}'; + } + }; + + /** + * jQuery.evalJSON + * Evaluates a given piece of json source. + * + * @param src {String} + */ + $.evalJSON = typeof JSON === 'object' && JSON.parse + ? JSON.parse + : function( src ) { + return eval('(' + src + ')'); + }; + + /** + * jQuery.secureEvalJSON + * Evals JSON in a way that is *more* secure. + * + * @param src {String} + */ + $.secureEvalJSON = typeof JSON === 'object' && JSON.parse + ? JSON.parse + : function( src ) { + + var filtered = + src + .replace( /\\["\\\/bfnrtu]/g, '@' ) + .replace( /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace( /(?:^|:|,)(?:\s*\[)+/g, ''); + + if ( /^[\],:{}\s]*$/.test( filtered ) ) { + return eval( '(' + src + ')' ); + } else { + throw new SyntaxError( 'Error parsing JSON, source is not valid.' ); + } + }; + + /** + * jQuery.quoteString + * Returns a string-repr of a string, escaping quotes intelligently. + * Mostly a support function for toJSON. + * Examples: + * >>> jQuery.quoteString('apple') + * "apple" + * + * >>> jQuery.quoteString('"Where are we going?", she asked.') + * "\"Where are we going?\", she asked." + */ + $.quoteString = function( string ) { + if ( string.match( escapeable ) ) { + return '"' + string.replace( escapeable, function( a ) { + var c = meta[a]; + if ( typeof c === 'string' ) { + return c; + } + c = a.charCodeAt(); + return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); + }) + '"'; + } + return '"' + string + '"'; + }; + +})( jQuery ); |