Author: tridge Date: 2005-08-07 06:19:17 +0000 (Sun, 07 Aug 2005) New Revision: 9174
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9174 Log: ejs does not include the special variable 'length' in for loops over objects, so we need to check for it separately in the object lineariser Modified: branches/SAMBA_4_0/source/scripting/libjs/encoder.js Changeset: Modified: branches/SAMBA_4_0/source/scripting/libjs/encoder.js =================================================================== --- branches/SAMBA_4_0/source/scripting/libjs/encoder.js 2005-08-07 06:16:32 UTC (rev 9173) +++ branches/SAMBA_4_0/source/scripting/libjs/encoder.js 2005-08-07 06:19:17 UTC (rev 9174) @@ -21,6 +21,9 @@ for (i in o) { count++; } + if (o.length != undefined) { + count++; + } return count; } @@ -31,29 +34,40 @@ return s.join(rep, a); } +function encodeElement(e, name) { + var t = typeof(e); + var r; + var s = string_init(); + if (t == 'object' && e == null) { + t = 'null'; + } + if (t == 'object') { + r = s.sprintf("%s:%s:%s", name, t, encodeObject(e)); + } else if (t == "string") { + var enc = s.encodeURIComponent(e); + var rep = __replace(enc, '%', '#'); + r = s.sprintf("%s:%s:%s:", + name, t, __replace(s.encodeURIComponent(e),'%','#')); + } else if (t == "boolean" || t == "number") { + r = s.sprintf("%s:%s:%s:", name, t, "" + e); + } else if (t == "undefined" || t == "null") { + r = s.sprintf("%s:%s:", name, t); + } else { + println("Unable to linearise type " + t); + r = ""; + } + return r; +} + function encodeObject(o) { var s = string_init(); var i, r = s.sprintf("%u:", __count_members(o)); for (i in o) { - var t = typeof(o[i]); - if (t == 'object' && o[i] == null) { - t = 'null'; - } - if (t == 'object') { - r = s.sprintf("%s%s:%s:%s", r, i, t, encodeObject(o[i])); - } else if (t == "string") { - var enc = s.encodeURIComponent(o[i]); - var rep = __replace(enc, '%', '#'); - r = s.sprintf("%s%s:%s:%s:", - r, i, t, __replace(s.encodeURIComponent(o[i]),'%','#')); - } else if (t == "boolean" || t == "number") { - r = s.sprintf("%s%s:%s:%s:", r, i, t, "" + o[i]); - } else if (t == "undefined" || t == "null") { - r = s.sprintf("%s%s:%s:", r, i, t); - } else { - println("Unable to linearise type " + t); - } + r = r + encodeElement(o[i], i); } + if (o.length != undefined) { + r = r + encodeElement(o.length, 'length'); + } return r; }
