From 863bef01e7912c13146415d1827c614a07214b30 Mon Sep 17 00:00:00 2001 From: Dan Scott Date: Fri, 26 Dec 2014 08:24:21 -0500 Subject: [PATCH] Revert jsonify changes for script-based circulation 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 --- src/javascript/JSON_v1.js | 96 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/src/javascript/JSON_v1.js b/src/javascript/JSON_v1.js index 3148a50..37ff048 100644 --- a/src/javascript/JSON_v1.js +++ b/src/javascript/JSON_v1.js @@ -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; +} + + -- 2.11.0