Make WordPress Core

Ticket #16669: json2.diff

File json2.diff, 7.6 KB (added by niallkennedy, 14 years ago)

latest JSON2

  • wp-includes/js/json2.dev.js

     
    11/*
    22    http://www.JSON.org/json2.js
    3     2009-08-17
     3    2011-02-23
    44
    55    Public Domain.
    66
     
    88
    99    See http://www.JSON.org/js.html
    1010
     11
     12    This code should be minified before deployment.
     13    See http://javascript.crockford.com/jsmin.html
     14
     15    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
     16    NOT CONTROL.
     17
     18
    1119    This file creates a global JSON object containing two methods: stringify
    1220    and parse.
    1321
     
    136144
    137145    This is a reference implementation. You are free to copy, modify, or
    138146    redistribute.
    139 
    140     This code should be minified before deployment.
    141     See http://javascript.crockford.com/jsmin.html
    142 
    143     USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    144     NOT CONTROL.
    145147*/
    146148
    147 /*jslint evil: true */
     149/*jslint evil: true, strict: false, regexp: false */
    148150
    149151/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
    150152    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
     
    153155    test, toJSON, toString, valueOf
    154156*/
    155157
    156 "use strict";
    157158
    158159// Create a JSON object only if one does not already exist. We create the
    159160// methods in a closure to avoid creating global variables.
    160161
    161 if (!this.JSON) {
    162     this.JSON = {};
     162var JSON;
     163if (!JSON) {
     164    JSON = {};
    163165}
    164166
    165167(function () {
     168    "use strict";
    166169
    167170    function f(n) {
    168171        // Format integers to have at least two digits.
     
    174177        Date.prototype.toJSON = function (key) {
    175178
    176179            return isFinite(this.valueOf()) ?
    177                    this.getUTCFullYear()   + '-' +
    178                  f(this.getUTCMonth() + 1) + '-' +
    179                  f(this.getUTCDate())      + 'T' +
    180                  f(this.getUTCHours())     + ':' +
    181                  f(this.getUTCMinutes())   + ':' +
    182                  f(this.getUTCSeconds())   + 'Z' : null;
     180                this.getUTCFullYear()     + '-' +
     181                f(this.getUTCMonth() + 1) + '-' +
     182                f(this.getUTCDate())      + 'T' +
     183                f(this.getUTCHours())     + ':' +
     184                f(this.getUTCMinutes())   + ':' +
     185                f(this.getUTCSeconds())   + 'Z' : null;
    183186        };
    184187
    185         String.prototype.toJSON =
    186         Number.prototype.toJSON =
    187         Boolean.prototype.toJSON = function (key) {
    188             return this.valueOf();
    189         };
     188        String.prototype.toJSON      =
     189            Number.prototype.toJSON =
     190            Boolean.prototype.toJSON = function (key) {
     191                return this.valueOf();
     192            };
    190193    }
    191194
    192195    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
     
    213216// sequences.
    214217
    215218        escapable.lastIndex = 0;
    216         return escapable.test(string) ?
    217             '"' + string.replace(escapable, function (a) {
    218                 var c = meta[a];
    219                 return typeof c === 'string' ? c :
    220                     '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
    221             }) + '"' :
    222             '"' + string + '"';
     219        return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
     220            var c = meta[a];
     221            return typeof c === 'string' ? c :
     222                '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
     223        }) + '"' : '"' + string + '"';
    223224    }
    224225
    225226
     
    302303// Join all of the elements together, separated with commas, and wrap them in
    303304// brackets.
    304305
    305                 v = partial.length === 0 ? '[]' :
    306                     gap ? '[\n' + gap +
    307                             partial.join(',\n' + gap) + '\n' +
    308                                 mind + ']' :
    309                           '[' + partial.join(',') + ']';
     306                v = partial.length === 0 ? '[]' : gap ?
     307                    '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
     308                    '[' + partial.join(',') + ']';
    310309                gap = mind;
    311310                return v;
    312311            }
     
    316315            if (rep && typeof rep === 'object') {
    317316                length = rep.length;
    318317                for (i = 0; i < length; i += 1) {
    319                     k = rep[i];
    320                     if (typeof k === 'string') {
     318                    if (typeof rep[i] === 'string') {
     319                        k = rep[i];
    321320                        v = str(k, value);
    322321                        if (v) {
    323322                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
     
    329328// Otherwise, iterate through all of the keys in the object.
    330329
    331330                for (k in value) {
    332                     if (Object.hasOwnProperty.call(value, k)) {
     331                    if (Object.prototype.hasOwnProperty.call(value, k)) {
    333332                        v = str(k, value);
    334333                        if (v) {
    335334                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
     
    341340// Join all of the member texts together, separated with commas,
    342341// and wrap them in braces.
    343342
    344             v = partial.length === 0 ? '{}' :
    345                 gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
    346                         mind + '}' : '{' + partial.join(',') + '}';
     343            v = partial.length === 0 ? '{}' : gap ?
     344                '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
     345                '{' + partial.join(',') + '}';
    347346            gap = mind;
    348347            return v;
    349348        }
     
    384383            rep = replacer;
    385384            if (replacer && typeof replacer !== 'function' &&
    386385                    (typeof replacer !== 'object' ||
    387                      typeof replacer.length !== 'number')) {
     386                    typeof replacer.length !== 'number')) {
    388387                throw new Error('JSON.stringify');
    389388            }
    390389
     
    414413                var k, v, value = holder[key];
    415414                if (value && typeof value === 'object') {
    416415                    for (k in value) {
    417                         if (Object.hasOwnProperty.call(value, k)) {
     416                        if (Object.prototype.hasOwnProperty.call(value, k)) {
    418417                            v = walk(value, k);
    419418                            if (v !== undefined) {
    420419                                value[k] = v;
     
    432431// Unicode characters with escape sequences. JavaScript handles many characters
    433432// incorrectly, either silently deleting them, or treating them as line endings.
    434433
     434            text = String(text);
    435435            cx.lastIndex = 0;
    436436            if (cx.test(text)) {
    437437                text = text.replace(cx, function (a) {
     
    453453// we look to see that the remaining characters are only whitespace or ']' or
    454454// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
    455455
    456             if (/^[\],:{}\s]*$/.
    457 test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
    458 replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
    459 replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
     456            if (/^[\],:{}\s]*$/
     457                    .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
     458                        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
     459                        .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
    460460
    461461// In the third stage we use the eval function to compile the text into a
    462462// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
     
    478478        };
    479479    }
    480480}());
    481