AutorÃa | Ultima modificación | Ver Log |
YUI.add('json-parse-shim', function (Y, NAME) {/*** <p>The JSON module adds support for serializing JavaScript objects into* JSON strings and parsing JavaScript objects from strings in JSON format.</p>** <p>The JSON namespace is added to your YUI instance including static methods* Y.JSON.parse(..) and Y.JSON.stringify(..).</p>** <p>The functionality and method signatures follow the ECMAScript 5* specification. In browsers with native JSON support, the native* implementation is used.</p>** <p>The <code>json</code> module is a rollup of <code>json-parse</code> and* <code>json-stringify</code>.</p>** <p>As their names suggest, <code>json-parse</code> adds support for parsing* JSON data (Y.JSON.parse) and <code>json-stringify</code> for serializing* JavaScript data into JSON strings (Y.JSON.stringify). You may choose to* include either of the submodules individually if you don't need the* complementary functionality, or include the rollup for both.</p>** @module json* @main json* @class JSON* @static*//*** Provides Y.JSON.parse method to accept JSON strings and return native* JavaScript objects.** @module json* @submodule json-parse* @for JSON* @static*//*** Replace certain Unicode characters that JavaScript may handle incorrectly* during eval--either by deleting them or treating them as line* endings--with escape sequences.* IMPORTANT NOTE: This regex will be used to modify the input if a match is* found.** @property _UNICODE_EXCEPTIONS* @type {RegExp}* @private*/var _UNICODE_EXCEPTIONS = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,/*** First step in the safety evaluation. Regex used to replace all escape* sequences (i.e. "\\", etc) with '@' characters (a non-JSON character).** @property _ESCAPES* @type {RegExp}* @private*/_ESCAPES = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,/*** Second step in the safety evaluation. Regex used to replace all simple* values with ']' characters.** @property _VALUES* @type {RegExp}* @private*/_VALUES = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,/*** Third step in the safety evaluation. Regex used to remove all open* square brackets following a colon, comma, or at the beginning of the* string.** @property _BRACKETS* @type {RegExp}* @private*/_BRACKETS = /(?:^|:|,)(?:\s*\[)+/g,/*** Final step in the safety evaluation. Regex used to test the string left* after all previous replacements for invalid characters.** @property _UNSAFE* @type {RegExp}* @private*/_UNSAFE = /[^\],:{}\s]/,/*** Replaces specific unicode characters with their appropriate \unnnn* format. Some browsers ignore certain characters during eval.** @method escapeException* @param c {String} Unicode character* @return {String} the \unnnn escapement of the character* @private*/_escapeException = function (c) {return '\\u'+('0000'+(+(c.charCodeAt(0))).toString(16)).slice(-4);},/*** Traverses nested objects, applying a reviver function to each (key,value)* from the scope if the key:value's containing object. The value returned* from the function will replace the original value in the key:value pair.* If the value returned is undefined, the key will be omitted from the* returned object.** @method _revive* @param data {MIXED} Any JavaScript data* @param reviver {Function} filter or mutation function* @return {MIXED} The results of the filtered data* @private*/_revive = function (data, reviver) {var walk = function (o,key) {var k,v,value = o[key];if (value && typeof value === 'object') {for (k in value) {if (value.hasOwnProperty(k)) {v = walk(value, k);if (v === undefined) {delete value[k];} else {value[k] = v;}}}}return reviver.call(o,key,value);};return typeof reviver === 'function' ? walk({'':data},'') : data;};/*** Parse a JSON string, returning the native JavaScript representation.** @param s {string} JSON string data* @param reviver {function} (optional) function(k,v) passed each key value* pair of object literals, allowing pruning or altering values* @return {MIXED} the native JavaScript representation of the JSON string* @throws SyntaxError* @method parse* @static*/// JavaScript implementation in lieu of native browser support. Based on// the json2.js library from http://json.orgY.JSON.parse = function (s,reviver) {if (typeof s !== 'string') {s += '';}// Replace certain Unicode characters that are otherwise handled// incorrectly by some browser implementations.// NOTE: This modifies the input if such characters are found!s = s.replace(_UNICODE_EXCEPTIONS, _escapeException);// Test for any remaining invalid charactersif (!_UNSAFE.test(s.replace(_ESCAPES,'@').replace(_VALUES,']').replace(_BRACKETS,''))) {// Eval the text into a JavaScript data structure, apply any// reviver function, and returnreturn _revive(eval('(' + s + ')'), reviver);}throw new SyntaxError('JSON.parse');};// Property available for testing if the implementation being used// is native or a shimY.JSON.parse.isShim = true;}, '3.18.1', {"requires": ["json-parse"]});