• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt/router/samba-3.5.8/swat2/scripting/client/
1/*
2	client side js functions for encoding/decoding objects into linear strings
3
4	Copyright Andrew Tridgell 2005
5	released under the GNU GPL Version 3 or later
6*/
7/*
8	usage:
9
10	  enc = encodeObject(obj);
11	  obj = decodeObject(enc);
12
13       The encoded format of the object is a string that is safe to
14       use in URLs
15
16       Note that only data elements are encoded, not functions
17*/
18
19function count_members(o) {
20	var i, count = 0;
21	for (i in o) {
22		count++;
23	}
24	return count;
25}
26
27function encodeObject(o) {
28	var i, r = count_members(o) + ":";
29	for (i in o) {
30		var t = typeof(o[i]);
31		if (t == 'object') {
32			r = r + "" + i + ":" + t + ":" + encodeObject(o[i]);
33		} else if (t == 'string') {
34			var s = encodeURIComponent(o[i]).replace(/%/g,'#');
35			r = r + "" + i + ":" + t + ":" + s + ":";
36		} else if (t == 'boolean' || t == 'number') {
37			r = r + "" + i + ":" + t + ":" + o[i] + ":";
38		} else if (t == 'undefined' || t == 'null') {
39			r = r + "" + i + ":" + t + ":";
40		} else if (t != 'function') {
41			alert("Unable to encode type " + t);
42		}
43	}
44	return r;
45}
46
47function decodeObjectArray(a) {
48	var o = new Object();
49	var i, count = a[a.i]; a.i++;
50	for (i=0;i<count;i++) {
51		var name  = a[a.i]; a.i++;
52		var type  = a[a.i]; a.i++;
53		var value;
54		if (type == 'object') {
55			o[name] = decodeObjectArray(a);
56		} else if (type == "string") {
57			value = decodeURIComponent(a[a.i].replace(/#/g,'%')); a.i++;
58			o[name] = value;
59		} else if (type == "boolean") {
60			value = a[a.i]; a.i++;
61			if (value == 'true') {
62				o[name] = true;
63			} else {
64				o[name] = false;
65			}
66		} else if (type == "undefined") {
67			o[name] = undefined;
68		} else if (type == "null") {
69			o[name] = null;
70		} else if (type == "number") {
71			value = a[a.i]; a.i++;
72			o[name] = value * 1;
73		} else {
74			alert("Unable to delinearise type " + type);
75		}
76	}
77	return o;
78}
79
80function decodeObject(str) {
81	var a = str.split(':');
82	a.i = 0;
83	return decodeObjectArray(a);
84}
85