1 |
dpavlin |
2 |
/*---------------------------------------- |
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 |
|
|
}; |