[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
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));
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |