X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/bc0fad2273183ef161248876a961dd31e4b250fb..a48175e69474b76a9aa2443ec7b2e8e9d68df1aa:/project/static/js/lib/jquery.json.js diff --git a/project/static/js/lib/jquery.json.js b/project/static/js/lib/jquery.json.js new file mode 100644 index 00000000..87f5d015 --- /dev/null +++ b/project/static/js/lib/jquery.json.js @@ -0,0 +1,178 @@ +/* + * jQuery JSON Plugin + * version: 2.1 (2009-08-14) + * + * 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 + * 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 + * copyrighted 2005 by Bob Ippolito. + */ + +(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);