1 |
/*---------------------------------------- |
2 |
$Id: comm.js,v 1.5 2005/10/12 23:15:13 migurski Exp $ |
3 |
vim: ts=4 foldcolumn=4 foldmethod=marker |
4 |
|
5 |
This file is part of Reblog: http://reblog.org |
6 |
A derivative work of Feed On Feeds: http://feedonfeeds.com |
7 |
|
8 |
Distributed under the Gnu Public License, see LICENSE |
9 |
|
10 |
Copyright ©2004 Michael Frumin, Michal Migurski |
11 |
mike@stamen.com, http://stamen.com |
12 |
mfrumin@eyebeam.org, http://eyebeam.org |
13 |
|
14 |
comm.js - Refeed.ServerComm handles JSON-RPC calls to Refeed |
15 |
----------------------------------------*/ |
16 |
|
17 |
// namespace |
18 |
if(window.refeed == null) { window.refeed = {}; } |
19 |
if(Refeed == null) { var Refeed = window.refeed; } |
20 |
|
21 |
Refeed.ServerComm = { |
22 |
|
23 |
remoteCall: function(method, params, onResult, onError) |
24 |
{ |
25 |
if(window.XMLHttpRequest) { |
26 |
var request = new XMLHttpRequest(); |
27 |
|
28 |
} else if(window.ActiveXObject) { |
29 |
var request = new ActiveXObject("Microsoft.XMLHTTP"); |
30 |
|
31 |
} |
32 |
|
33 |
if(request) { |
34 |
request.onreadystatechange = function() |
35 |
{ |
36 |
if(request.readyState == 4) { |
37 |
if(request.status == '200') { |
38 |
//alert(request.responseText); |
39 |
eval('var response = '+request.responseText+';'); |
40 |
|
41 |
if(response.result && !response.error && onResult) { |
42 |
onResult(response.result); |
43 |
|
44 |
} else if(response.error && !response.result && onError) { |
45 |
onError(response.error); |
46 |
|
47 |
} |
48 |
} |
49 |
} |
50 |
}; |
51 |
|
52 |
request.open("POST", Refeed.ServerComm.callHREF, true); |
53 |
request.send(Refeed.ServerComm.jsonEncode({method:method, params:params, id:0})); |
54 |
} |
55 |
}, |
56 |
|
57 |
jsonEncode: function(arg) |
58 |
{ |
59 |
var i, o, u, v; |
60 |
|
61 |
switch (typeof arg) { |
62 |
case 'object': |
63 |
if (arg) { |
64 |
if (arg.constructor == Array) { |
65 |
o = ''; |
66 |
for (i = 0; i < arg.length; ++i) { |
67 |
v = Refeed.ServerComm.jsonEncode(arg[i]); |
68 |
if (o) { |
69 |
o += ','; |
70 |
} |
71 |
if (v !== u) { |
72 |
o += v; |
73 |
} else { |
74 |
o += 'null,'; |
75 |
} |
76 |
} |
77 |
return '[' + o + ']'; |
78 |
} else if (typeof arg.toString != 'undefined') { |
79 |
o = ''; |
80 |
for (i in arg) { |
81 |
v = Refeed.ServerComm.jsonEncode(arg[i]); |
82 |
if (v !== u) { |
83 |
if (o) { |
84 |
o += ','; |
85 |
} |
86 |
o += Refeed.ServerComm.jsonEncode(i) + ':' + v; |
87 |
} |
88 |
} |
89 |
return '{' + o + '}'; |
90 |
} else { |
91 |
return; |
92 |
} |
93 |
} |
94 |
return 'null'; |
95 |
case 'unknown': |
96 |
case 'undefined': |
97 |
case 'function': |
98 |
return u; |
99 |
case 'string': |
100 |
var c, i, l = arg.length, o = '"'; |
101 |
for (i = 0; i < l; i += 1) { |
102 |
c = arg.charAt(i); |
103 |
if (c >= ' ') { |
104 |
if (c == '\\' || c == '"') { |
105 |
o += '\\'; |
106 |
} |
107 |
o += c; |
108 |
} else { |
109 |
switch (c) { |
110 |
case '\b': |
111 |
o += '\\b'; |
112 |
break; |
113 |
case '\f': |
114 |
o += '\\f'; |
115 |
break; |
116 |
case '\n': |
117 |
o += '\\n'; |
118 |
break; |
119 |
case '\r': |
120 |
o += '\\r'; |
121 |
break; |
122 |
case '\t': |
123 |
o += '\\t'; |
124 |
break; |
125 |
default: |
126 |
c = c.charCodeAt(); |
127 |
o += '\\u00' + Math.floor(c / 16).toString(16) + |
128 |
(c % 16).toString(16); |
129 |
} |
130 |
} |
131 |
} |
132 |
return o + '"'; |
133 |
default: |
134 |
return String(arg); |
135 |
} |
136 |
} |
137 |
}; |