From f8573766bc17af0afacc5d44d3c3d8234b426dbf Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 7 Sep 2007 03:08:44 +0000 Subject: r24985: Start to revert us back to the old-style SWAT, while trying not to loose some of the fixes in the meantime. Andrew Bartlett (This used to be commit 13acff5ed259e7b5859fd2324ea7740b8f9e5fd7) --- swat/scripting/client/encoder.js | 84 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 swat/scripting/client/encoder.js (limited to 'swat/scripting/client/encoder.js') diff --git a/swat/scripting/client/encoder.js b/swat/scripting/client/encoder.js new file mode 100644 index 0000000000..4aa4cc0954 --- /dev/null +++ b/swat/scripting/client/encoder.js @@ -0,0 +1,84 @@ +/* + client side js functions for encoding/decoding objects into linear strings + + Copyright Andrew Tridgell 2005 + released under the GNU GPL Version 2 or later +*/ +/* + usage: + + enc = encodeObject(obj); + obj = decodeObject(enc); + + The encoded format of the object is a string that is safe to + use in URLs + + Note that only data elements are encoded, not functions +*/ + +function count_members(o) { + var i, count = 0; + for (i in o) { + count++; + } + return count; +} + +function encodeObject(o) { + var i, r = count_members(o) + ":"; + for (i in o) { + var t = typeof(o[i]); + if (t == 'object') { + r = r + "" + i + ":" + t + ":" + encodeObject(o[i]); + } else if (t == 'string') { + var s = encodeURIComponent(o[i]).replace(/%/g,'#'); + r = r + "" + i + ":" + t + ":" + s + ":"; + } else if (t == 'boolean' || t == 'number') { + r = r + "" + i + ":" + t + ":" + o[i] + ":"; + } else if (t == 'undefined' || t == 'null') { + r = r + "" + i + ":" + t + ":"; + } else if (t != 'function') { + alert("Unable to encode type " + t); + } + } + return r; +} + +function decodeObjectArray(a) { + var o = new Object(); + var i, count = a[a.i]; a.i++; + for (i=0;i