includes/clientside/static/json.js
changeset 1 fe660c52c48f
child 40 723bb7acf914
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/clientside/static/json.js	Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,172 @@
+/*
+    json.js
+    2007-03-20
+
+    All of the code contained within this file is released into
+    the public domain. Optionally, you may distribute this code
+    under the terms of the GNU General Public License as well
+    (public domain licensing allows this).
+    
+*/
+
+function toJSONString(input)
+{
+  var m = {
+          '\b': '\\b',
+          '\t': '\\t',
+          '\n': '\\n',
+          '\f': '\\f',
+          '\r': '\\r',
+          '"' : '\\"',
+          '\\': '\\\\'
+          };
+  var t = typeof(input);
+  switch(t)
+  {
+    case 'string':
+      if (/["\\\x00-\x1f]/.test(input))
+      {
+          return '"' + input.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 '"' + input + '"';
+      break;
+    case 'array':
+      var a = ['['],  
+            b,          
+            i,          
+            l = input.length,
+            v;          
+
+        function p(s) {
+
+            if (b) {
+                a.push(',');
+            }
+            a.push(s);
+            b = true;
+        }
+
+        for (i = 0; i < l; i += 1) {
+            v = input[i];
+            switch (typeof v) {
+            case 'object':
+              if (v) {
+                p(toJSONString(v));
+              } else {
+                p("null");
+              }
+              break;
+            case 'array':
+            case 'string':
+            case 'number':
+            case 'boolean':
+                p(toJSONString(v));
+            }
+        }
+
+        a.push(']');
+        return a.join('');
+      break;
+    case 'date':
+      function f(n)
+      {
+        return n < 10 ? '0' + n : n;
+      }
+      return '"' + input.getFullYear() + '-' +
+                 f(input.getMonth() + 1) + '-' +
+                 f(input.getDate()) + 'T' +
+                 f(input.getHours()) + ':' +
+                 f(input.getMinutes()) + ':' +
+                 f(input.getSeconds()) + '"';
+                 
+    case 'boolean':
+      return String(input);
+      break;
+    case 'number':
+      return isFinite(input) ? String(input) : "null";
+      break;
+    case 'object':
+      var a = ['{'],  
+          b,          
+          k,          
+          v;          
+
+      function p(s)
+      {
+        if (b)
+        {
+          a.push(',');
+        }
+        a.push(toJSONString(k), ':', s);
+        b = true;
+      }
+
+      for (k in input) 
+      {
+        if (input.hasOwnProperty(k))
+        {
+          v = input[k];
+          switch (typeof v) {
+
+            case 'object':
+              if (v) {
+                p(toJSONString(v));
+              } else {
+                p("null");
+              }
+              break;
+            case 'string':
+            case 'number':
+            case 'boolean':
+              p(toJSONString(v));
+              break;
+          }
+        }
+      }
+
+      a.push('}');
+      return a.join('');
+      break;
+  }
+}
+
+function parseJSON(string, filter)
+{
+  try {
+    if (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.
+            test(string))
+    {
+  
+        var j = eval('(' + string + ')');
+        if (typeof filter === 'function') {
+  
+            function walk(k, v) {
+                if (v && typeof v === 'object') {
+                    for (var i in v) {
+                        if (v.hasOwnProperty(i)) {
+                            v[i] = walk(i, v[i]);
+                        }
+                    }
+                }
+                return filter(k, v);
+            }
+  
+            j = walk('', j);
+        }
+        return j;
+    }
+  } catch (e) {
+  
+  }
+  throw new SyntaxError("parseJSON");
+}