Revert jsonify changes for script-based circulation user/dbs/restore_script_circulation
authorDan Scott <dscott@laurentian.ca>
Fri, 26 Dec 2014 13:24:21 +0000 (08:24 -0500)
committerDan Scott <dscott@laurentian.ca>
Fri, 26 Dec 2014 13:24:21 +0000 (08:24 -0500)
libjs 1.7.0 doesn't support jsonify, which breaks script based circulation.
Rather than try to update to libjs 1.8.5, just roll back the jsonify change
for now until we (the last of the script based circulators?) finally cut
over to in-database rules.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
src/javascript/JSON_v1.js

index 3148a50..37ff048 100644 (file)
@@ -6,11 +6,18 @@ var JSON_DATA_KEY    = '__p';
 function JSON_version() { return 'wrapper'; }
 
 function JSON2js(text) {
-    return decodeJS(JSON.parse(text));
+    return decodeJS(JSON2jsRaw(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' ) {
@@ -125,5 +132,90 @@ function encodeJS(arg) {
 
 /* turns a javascript object into a JSON string */
 function js2JSON(arg) {
-    return JSON.stringify(encodeJS(arg));
+    return js2JSONRaw(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 + '}';
+
+            }
+
+            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;
+}
+
+