summaryrefslogtreecommitdiff
path: root/swat.obsolete/scripting/client/encoder.js
diff options
context:
space:
mode:
authorDerrell Lipman <derrell@samba.org>2006-12-31 20:12:12 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:35:23 -0500
commitd1e09e2e6f9db62bbab84abb53e23ee73764178a (patch)
tree18e57f756611c9d3e10fb41bf7c09eeb795028dd /swat.obsolete/scripting/client/encoder.js
parent710dfce70ca9024d2f026518638bb193e914f4a0 (diff)
downloadsamba-d1e09e2e6f9db62bbab84abb53e23ee73764178a.tar.gz
samba-d1e09e2e6f9db62bbab84abb53e23ee73764178a.tar.bz2
samba-d1e09e2e6f9db62bbab84abb53e23ee73764178a.zip
r20446: rename swat directory to swat.obsolete; keeping it around since there is lots of useful info in it.
(This used to be commit 5f9f72a9cfab80561b23284001b67c4ea961757b)
Diffstat (limited to 'swat.obsolete/scripting/client/encoder.js')
-rw-r--r--swat.obsolete/scripting/client/encoder.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/swat.obsolete/scripting/client/encoder.js b/swat.obsolete/scripting/client/encoder.js
new file mode 100644
index 0000000000..4aa4cc0954
--- /dev/null
+++ b/swat.obsolete/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<count;i++) {
+ var name = a[a.i]; a.i++;
+ var type = a[a.i]; a.i++;
+ var value;
+ if (type == 'object') {
+ o[name] = decodeObjectArray(a);
+ } else if (type == "string") {
+ value = decodeURIComponent(a[a.i].replace(/#/g,'%')); a.i++;
+ o[name] = value;
+ } else if (type == "boolean") {
+ value = a[a.i]; a.i++;
+ if (value == 'true') {
+ o[name] = true;
+ } else {
+ o[name] = false;
+ }
+ } else if (type == "undefined") {
+ o[name] = undefined;
+ } else if (type == "null") {
+ o[name] = null;
+ } else if (type == "number") {
+ value = a[a.i]; a.i++;
+ o[name] = value * 1;
+ } else {
+ alert("Unable to delinearise type " + type);
+ }
+ }
+ return o;
+}
+
+function decodeObject(str) {
+ var a = str.split(':');
+ a.i = 0;
+ return decodeObjectArray(a);
+}