[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/resources/lib/jquery/ -> jquery.json.js (source)

   1  /**
   2   * jQuery JSON plugin 2.4.0
   3   *
   4   * @author Brantley Harris, 2009-2011
   5   * @author Timo Tijhof, 2011-2012
   6   * @source This plugin is heavily influenced by MochiKit's serializeJSON, which is
   7   *         copyrighted 2005 by Bob Ippolito.
   8   * @source Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
   9   *         website's http://www.json.org/json2.js, which proclaims:
  10   *         "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
  11   *         I uphold.
  12   * @license MIT License <http://www.opensource.org/licenses/mit-license.php>
  13   */
  14  (function ($) {
  15      'use strict';
  16  
  17      var escape = /["\\\x00-\x1f\x7f-\x9f]/g,
  18          meta = {
  19              '\b': '\\b',
  20              '\t': '\\t',
  21              '\n': '\\n',
  22              '\f': '\\f',
  23              '\r': '\\r',
  24              '"' : '\\"',
  25              '\\': '\\\\'
  26          },
  27          hasOwn = Object.prototype.hasOwnProperty;
  28  
  29      /**
  30       * jQuery.toJSON
  31       * Converts the given argument into a JSON representation.
  32       *
  33       * @param o {Mixed} The json-serializable *thing* to be converted
  34       *
  35       * If an object has a toJSON prototype, that will be used to get the representation.
  36       * Non-integer/string keys are skipped in the object, as are keys that point to a
  37       * function.
  38       *
  39       */
  40      $.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) {
  41          if (o === null) {
  42              return 'null';
  43          }
  44  
  45          var pairs, k, name, val,
  46              type = $.type(o);
  47  
  48          if (type === 'undefined') {
  49              return undefined;
  50          }
  51  
  52          // Also covers instantiated Number and Boolean objects,
  53          // which are typeof 'object' but thanks to $.type, we
  54          // catch them here. I don't know whether it is right
  55          // or wrong that instantiated primitives are not
  56          // exported to JSON as an {"object":..}.
  57          // We choose this path because that's what the browsers did.
  58          if (type === 'number' || type === 'boolean') {
  59              return String(o);
  60          }
  61          if (type === 'string') {
  62              return $.quoteString(o);
  63          }
  64          if (typeof o.toJSON === 'function') {
  65              return $.toJSON(o.toJSON());
  66          }
  67          if (type === 'date') {
  68              var month = o.getUTCMonth() + 1,
  69                  day = o.getUTCDate(),
  70                  year = o.getUTCFullYear(),
  71                  hours = o.getUTCHours(),
  72                  minutes = o.getUTCMinutes(),
  73                  seconds = o.getUTCSeconds(),
  74                  milli = o.getUTCMilliseconds();
  75  
  76              if (month < 10) {
  77                  month = '0' + month;
  78              }
  79              if (day < 10) {
  80                  day = '0' + day;
  81              }
  82              if (hours < 10) {
  83                  hours = '0' + hours;
  84              }
  85              if (minutes < 10) {
  86                  minutes = '0' + minutes;
  87              }
  88              if (seconds < 10) {
  89                  seconds = '0' + seconds;
  90              }
  91              if (milli < 100) {
  92                  milli = '0' + milli;
  93              }
  94              if (milli < 10) {
  95                  milli = '0' + milli;
  96              }
  97              return '"' + year + '-' + month + '-' + day + 'T' +
  98                  hours + ':' + minutes + ':' + seconds +
  99                  '.' + milli + 'Z"';
 100          }
 101  
 102          pairs = [];
 103  
 104          if ($.isArray(o)) {
 105              for (k = 0; k < o.length; k++) {
 106                  pairs.push($.toJSON(o[k]) || 'null');
 107              }
 108              return '[' + pairs.join(',') + ']';
 109          }
 110  
 111          // Any other object (plain object, RegExp, ..)
 112          // Need to do typeof instead of $.type, because we also
 113          // want to catch non-plain objects.
 114          if (typeof o === 'object') {
 115              for (k in o) {
 116                  // Only include own properties,
 117                  // Filter out inherited prototypes
 118                  if (hasOwn.call(o, k)) {
 119                      // Keys must be numerical or string. Skip others
 120                      type = typeof k;
 121                      if (type === 'number') {
 122                          name = '"' + k + '"';
 123                      } else if (type === 'string') {
 124                          name = $.quoteString(k);
 125                      } else {
 126                          continue;
 127                      }
 128                      type = typeof o[k];
 129  
 130                      // Invalid values like these return undefined
 131                      // from toJSON, however those object members
 132                      // shouldn't be included in the JSON string at all.
 133                      if (type !== 'function' && type !== 'undefined') {
 134                          val = $.toJSON(o[k]);
 135                          pairs.push(name + ':' + val);
 136                      }
 137                  }
 138              }
 139              return '{' + pairs.join(',') + '}';
 140          }
 141      };
 142  
 143      /**
 144       * jQuery.evalJSON
 145       * Evaluates a given json string.
 146       *
 147       * @param str {String}
 148       */
 149      $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
 150          /*jshint evil: true */
 151          return eval('(' + str + ')');
 152      };
 153  
 154      /**
 155       * jQuery.secureEvalJSON
 156       * Evals JSON in a way that is *more* secure.
 157       *
 158       * @param str {String}
 159       */
 160      $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
 161          var filtered =
 162              str
 163              .replace(/\\["\\\/bfnrtu]/g, '@')
 164              .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
 165              .replace(/(?:^|:|,)(?:\s*\[)+/g, '');
 166  
 167          if (/^[\],:{}\s]*$/.test(filtered)) {
 168              /*jshint evil: true */
 169              return eval('(' + str + ')');
 170          }
 171          throw new SyntaxError('Error parsing JSON, source is not valid.');
 172      };
 173  
 174      /**
 175       * jQuery.quoteString
 176       * Returns a string-repr of a string, escaping quotes intelligently.
 177       * Mostly a support function for toJSON.
 178       * Examples:
 179       * >>> jQuery.quoteString('apple')
 180       * "apple"
 181       *
 182       * >>> jQuery.quoteString('"Where are we going?", she asked.')
 183       * "\"Where are we going?\", she asked."
 184       */
 185      $.quoteString = function (str) {
 186          if (str.match(escape)) {
 187              return '"' + str.replace(escape, function (a) {
 188                  var c = meta[a];
 189                  if (typeof c === 'string') {
 190                      return c;
 191                  }
 192                  c = a.charCodeAt();
 193                  return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
 194              }) + '"';
 195          }
 196          return '"' + str + '"';
 197      };
 198  
 199  }(jQuery));


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1