LP#1666706: add --with-websockets-port configure option
[OpenSRF.git] / src / javascript / JSON_v1.js
index d70aacd..3148a50 100644 (file)
-var JSON_CLASS_KEY     = '__c';
-var JSON_DATA_KEY      = '__p';
+var JSON_CLASS_KEY    = '__c';
+var JSON_DATA_KEY    = '__p';
 
 
 
-function JSON_version() { return 'wrapper' }
+function JSON_version() { return 'wrapper'; }
 
 function JSON2js(text) {
-       return decodeJS(JSON2jsRaw(text));
+    return decodeJS(JSON.parse(text));
 }
 
 JSON2js.fallbackObjectifier = null;
 
-function JSON2jsRaw(text) {
-       var obj;
-       eval('obj = ' + text);
-       return obj;
-}
-
-
 /* iterates over object, arrays, or fieldmapper objects */
 function jsIterate( arg, callback ) {
-       if( arg && typeof arg == 'object' ) {
-               if( arg.constructor == Array ) {
-                       for( var i = 0; i < arg.length; i++ ) 
-                               callback(arg, i);
-
-               }  else if( arg.constructor == Object ) {
-                               for( var i in arg ) 
-                                       callback(arg, i);
-
-               } else if( arg._isfieldmapper && arg.a ) {
-                       for( var i = 0; i < arg.a.length; i++ ) 
-                               callback(arg.a, i);
-               }
-       }
+    if( arg && typeof arg == 'object' ) {
+        if( arg.constructor == Array ) {
+            for( var i = 0; i < arg.length; i++ ) 
+                callback(arg, i);
+
+        }  else if( arg.constructor == Object ) {
+                for( var i in arg ) 
+                    callback(arg, i);
+
+        } else if( arg._isfieldmapper && arg.a ) {
+            for( var i = 0; i < arg.a.length; i++ ) 
+                callback(arg.a, i);
+        }
+    }
 }
 
 
 /* removes the class/paylod wrapper objects */
 function decodeJS(arg) {
 
-       if(arg == null) return null;
+    if(arg == null) return null;
 
-       if(     arg && typeof arg == 'object' &&
-                       arg.constructor == Object &&
-                       arg[JSON_CLASS_KEY] ) {
+    if(    arg && typeof arg == 'object' &&
+            arg.constructor == Object &&
+            arg[JSON_CLASS_KEY] ) {
 
         try {
-            arg = eval('new ' + arg[JSON_CLASS_KEY] + '(arg[JSON_DATA_KEY])'); 
+            arg = eval('new ' + arg[JSON_CLASS_KEY] + '(arg[JSON_DATA_KEY])');    
         } catch(E) {
             if (JSON2js.fallbackObjectifier)
                 arg = JSON2js.fallbackObjectifier(arg, JSON_CLASS_KEY, JSON_DATA_KEY );
         }
 
-       }
+    }
 
     if(arg._encodehash) {
-           jsIterate( arg.hash, 
-                   function(o, i) {
-                           o[i] = decodeJS(o[i]);
-                   }
-           );
+        jsIterate( arg.hash, 
+            function(o, i) {
+                o[i] = decodeJS(o[i]);
+            }
+        );
     } else {
-           jsIterate( arg, 
-                   function(o, i) {
-                           o[i] = decodeJS(o[i]);
-                   }
-           );
+        jsIterate( arg, 
+            function(o, i) {
+                o[i] = decodeJS(o[i]);
+            }
+        );
     }
 
-       return arg;
+    return arg;
 }
 
 
 function jsClone(obj) {
-       if( obj == null ) return null;
-       if( typeof obj != 'object' ) return obj;
-
-       var newobj;
-       if (obj.constructor == Array) {
-               newobj = [];
-               for( var i = 0; i < obj.length; i++ ) 
-                       newobj[i] = jsClone(obj[i]);
-
-       } else if( obj.constructor == Object ) {
-               newobj = {};
-               for( var i in obj )
-                       newobj[i] = jsClone(obj[i]);
-
-       } else if( obj._isfieldmapper && obj.a ) {
-               eval('newobj = new '+obj.classname + '();');
-               for( var i = 0; i < obj.a.length; i++ ) 
-                       newobj.a[i] = jsClone(obj.a[i]);
-       }
-
-       return newobj;
+    if( obj == null ) return null;
+    if( typeof obj != 'object' ) return obj;
+
+    var newobj;
+    if (obj.constructor == Array) {
+        newobj = [];
+        for( var i = 0; i < obj.length; i++ ) 
+            newobj[i] = jsClone(obj[i]);
+
+    } else if( obj.constructor == Object ) {
+        newobj = {};
+        for( var i in obj )
+            newobj[i] = jsClone(obj[i]);
+
+    } else if( obj._isfieldmapper && obj.a ) {
+        eval('newobj = new '+obj.classname + '();');
+        for( var i = 0; i < obj.a.length; i++ ) 
+            newobj.a[i] = jsClone(obj.a[i]);
+    }
+
+    return newobj;
 }
-       
+    
 
-/* adds the class/paylod wrapper objects */
+/* adds the class/payload wrapper objects */
 function encodeJS(arg) {
-       if( arg == null ) return null;  
-       if( typeof arg != 'object' ) return arg;
+    if( arg == null ) return null;    
+    if( typeof arg != 'object' ) return arg;
 
-       if( arg._isfieldmapper ) {
-      var newarr = []
+    if( arg._isfieldmapper ) {
+      var newarr = [];
       if(!arg.a) arg.a = [];
-               for( var i = 0; i < arg.a.length; i++ ) 
-                       newarr[i] = encodeJS(arg.a[i]);
+      for( var i = 0; i < arg.a.length; i++ ) 
+          newarr[i] = encodeJS(arg.a[i]);
 
-               var a = {};
-               a[JSON_CLASS_KEY] = arg.classname;
-               a[JSON_DATA_KEY] = newarr;
+      var a = {};
+      a[JSON_CLASS_KEY] = arg.classname;
+      a[JSON_DATA_KEY] = newarr;
       return a;
-       }
+    }
 
-       var newobj;
+    var newobj;
 
-       if(arg.length != undefined) {
-               newobj = [];
-               for( var i = 0; i < arg.length; i++ ) 
-         newobj.push(encodeJS(arg[i]));
-      return newobj;
-       
+    if(arg.length != undefined) {
+        newobj = [];
+        for( var i = 0; i < arg.length; i++ ) 
+            newobj.push(encodeJS(arg[i]));
+        return newobj;
+    } 
    
-       newobj = {};
-       for( var i in arg )
-               newobj[i] = encodeJS(arg[i]);
-       return newobj;
+    newobj = {};
+    for( var i in arg )
+        newobj[i] = encodeJS(arg[i]);
+    return newobj;
 }
 
 /* turns a javascript object into a JSON string */
 function js2JSON(arg) {
-       return js2JSONRaw(encodeJS(arg));
+    return JSON.stringify(encodeJS(arg));
 }
-
-function js2JSONRaw(arg) {
-
-       if( arg == null ) 
-               return 'null';
-
-       var o;
-
-       switch (typeof arg) {
-
-               case 'object':
-
-                       if (arg.constructor == Array) {
-                               o = '';
-                               jsIterate( arg,
-                                       function(obj, i) {
-                                               if (o) o += ',';
-                                               o += js2JSONRaw(obj[i]);
-                                       }
-                               );
-                               return '[' + o + ']';
-
-                       } else if (typeof arg.toString != 'undefined') {
-                               o = '';
-                               jsIterate( arg,
-                                       function(obj, i) {
-                                               if (o) o += ',';
-                                               o = o + js2JSONRaw(i) + ':' + js2JSONRaw(obj[i]);
-                                       }
-                               );
-                               return '{' + o + '}';
-
-                       } else {
-                               return 'null';
-                       }
-
-               case 'number': return arg;
-
-               case 'string':
-                       var s = String(arg);
-                       s = s.replace(/\\/g, '\\\\');
-                       s = s.replace(/"/g, '\\"');
-                       s = s.replace(/\t/g, "\\t");
-                       s = s.replace(/\n/g, "\\n");
-                       s = s.replace(/\r/g, "\\r");
-                       s = s.replace(/\f/g, "\\f");
-                       return '"' + s + '"';
-
-        case 'boolean':
-            return (arg) ? 'true' : 'false';
-
-               default: return 'null';
-       }
-}
-
-
-function __tabs(c) { 
-       var s = ''; 
-       for( i = 0; i < c; i++ ) s += '\t';
-       return s;
-}
-
-function jsonPretty(str) {
-       if(!str) return "";
-       var s = '';
-       var d = 0;
-       for( var i = 0; i < str.length; i++ ) {
-               var c = str.charAt(i);
-               if( c == '{' || c == '[' ) {
-                       s += c + '\n' + __tabs(++d);
-               } else if( c == '}' || c == ']' ) {
-                       s += '\n' + __tabs(--d) + '\n';
-                       if( str.charAt(i+1) == ',' ) {
-                               s += '\n' + __tabs(d);
-                       }
-               } else if( c == ',' ) {
-                       s += ',\n' + __tabs(d);
-               } else {
-                       s += c;
-               }
-       }
-       return s;
-}
-
-