From ef68436ac04da078ffdcacd7e1f785473a303d45 Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Sun, 02 Oct 2011 23:56:18 +0000 Subject: First version of the newly restructured repository --- (limited to 'frontend/beta/js/YUI-extensions/JSON.js') diff --git a/frontend/beta/js/YUI-extensions/JSON.js b/frontend/beta/js/YUI-extensions/JSON.js new file mode 100644 index 0000000..ffc9573 --- a/dev/null +++ b/frontend/beta/js/YUI-extensions/JSON.js @@ -0,0 +1,132 @@ +/** + * @class YAHOO.ext.util.JSON + * Modified version of Douglas Crockford's json.js that doesn't + * mess with the Object prototype + * http://www.json.org/js.html + * @singleton + */ +YAHOO.ext.util.JSON = new function(){ + var useHasOwn = {}.hasOwnProperty ? true : false; + + // crashes Safari in some instances + //var validRE = /^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/; + + var pad = function(n) { + return n < 10 ? '0' + n : n; + }; + + var m = { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; + + var encodeString = function(s){ + if (/["\\\x00-\x1f]/.test(s)) { + return '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) { + var c = m[b]; + if(c){ + return c; + } + c = b.charCodeAt(); + return '\\u00' + + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }) + '"'; + } + return '"' + s + '"'; + }; + + var encodeArray = function(o){ + var a = ['['], b, i, l = o.length, v; + for (i = 0; i < l; i += 1) { + v = o[i]; + switch (typeof v) { + case 'undefined': + case 'function': + case 'unknown': + break; + default: + if (b) { + a.push(','); + } + a.push(v === null ? "null" : YAHOO.ext.util.JSON.encode(v)); + b = true; + } + } + a.push(']'); + return a.join(''); + }; + + var encodeDate = function(o){ + return '"' + o.getFullYear() + '-' + + pad(o.getMonth() + 1) + '-' + + pad(o.getDate()) + 'T' + + pad(o.getHours()) + ':' + + pad(o.getMinutes()) + ':' + + pad(o.getSeconds()) + '"'; + }; + + /** + * Encodes an Object, Array or other value + * @param {Mixed} o The variable to encode + * @return {String} The JSON string + */ + this.encode = function(o){ + if(typeof o == 'undefined' || o === null){ + return 'null'; + }else if(o instanceof Array){ + return encodeArray(o); + }else if(o instanceof Date){ + return encodeDate(o); + }else if(typeof o == 'string'){ + return encodeString(o); + }else if(typeof o == 'number'){ + return isFinite(o) ? String(o) : "null"; + }else if(typeof o == 'boolean'){ + return String(o); + }else { + var a = ['{'], b, i, v; + for (var i in o) { + if(!useHasOwn || o.hasOwnProperty(i)) { + v = o[i]; + switch (typeof v) { + case 'undefined': + case 'function': + case 'unknown': + break; + default: + if(b){ + a.push(','); + } + a.push(this.encode(i), ':', + v === null ? "null" : this.encode(v)); + b = true; + } + } + } + a.push('}'); + return a.join(''); + } + }; + + /** + * Decodes (parses) a JSON string to an object. If the JSON is invalid, this function throws a SyntaxError. + * @param {String} json The JSON string + * @return {Object} The resulting object + */ + this.decode = function(json){ + // although crockford had a good idea, this line crashes safari in some instances + //try{ + //if(validRE.test(json)) { + return eval('(' + json + ')'); + // } + // }catch(e){ + // } + // throw new SyntaxError("parseJSON"); + }; +}(); -- cgit v0.9.0.2