rev |
line source |
jbe/bsw@11
|
1
|
jbe/bsw@11
|
2 partialload_queue = [];
|
jbe/bsw@11
|
3 partialload_queueRPos = 0;
|
jbe/bsw@11
|
4 partialload_queueWPos = 0;
|
jbe/bsw@11
|
5
|
jbe/bsw@11
|
6 function partialload_getFormKeyValuePairs(form) {
|
jbe/bsw@11
|
7 var result = {};
|
jbe/bsw@11
|
8 for (var i=0; i<form.elements.length; i++) {
|
jbe/bsw@11
|
9 var inputElement = form.elements[i];
|
jbe/bsw@11
|
10 var key = inputElement.name;
|
jbe/bsw@11
|
11 var value = inputElement.value;
|
jbe/bsw@11
|
12 if (result[key] == null) result[key] = value;
|
jbe/bsw@11
|
13 else if (typeof(result[key]) == "object") {
|
jbe/bsw@11
|
14 result[key][result[key].length] = value;
|
jbe/bsw@11
|
15 } else {
|
jbe/bsw@11
|
16 result[key] = [result[key], value];
|
jbe/bsw@11
|
17 }
|
jbe/bsw@11
|
18 }
|
jbe/bsw@11
|
19 return result;
|
jbe/bsw@11
|
20 }
|
jbe/bsw@11
|
21
|
jbe/bsw@11
|
22 function partialload_encodeFormData(params) {
|
jbe/bsw@11
|
23 var result = "";
|
jbe/bsw@11
|
24 for (var key in params) {
|
jbe/bsw@11
|
25 var value = params[key];
|
jbe@54
|
26 if (value instanceof Array) {
|
jbe/bsw@11
|
27 var i;
|
jbe/bsw@11
|
28 for (i=0; i<value.length; i++) {
|
jbe/bsw@11
|
29 if (result != "") result += "&";
|
jbe@54
|
30 result += encodeURIComponent(key) + "=" + encodeURIComponent(value[i].toString());
|
jbe/bsw@11
|
31 }
|
jbe@54
|
32 } else {
|
jbe@54
|
33 if (result != "") result += "&";
|
jbe@54
|
34 result += encodeURIComponent(key) + "=" + encodeURIComponent(value.toString());
|
jbe/bsw@11
|
35 }
|
jbe/bsw@11
|
36 }
|
jbe/bsw@11
|
37 return result;
|
jbe/bsw@11
|
38 }
|
jbe/bsw@11
|
39
|
jbe/bsw@11
|
40 function partialload_addFormDataToUrl(url, params) {
|
jbe/bsw@11
|
41 if (params != null && typeof(params) != "string") {
|
jbe/bsw@11
|
42 params = partialload_encodeFormData(params);
|
jbe/bsw@11
|
43 }
|
jbe/bsw@11
|
44 if (params != null) {
|
jbe/bsw@11
|
45 if (url.search(/\?/) >= 0) {
|
jbe/bsw@11
|
46 if (url.search(/&$/) >= 0) {
|
jbe/bsw@11
|
47 url = url + params;
|
jbe/bsw@11
|
48 } else {
|
jbe/bsw@11
|
49 url = url + "&" + params;
|
jbe/bsw@11
|
50 }
|
jbe/bsw@11
|
51 } else {
|
jbe/bsw@11
|
52 url = url + "?" + params;
|
jbe/bsw@11
|
53 }
|
jbe/bsw@11
|
54 }
|
jbe/bsw@11
|
55 return url;
|
jbe/bsw@11
|
56 }
|
jbe/bsw@11
|
57
|
jbe/bsw@11
|
58 function partialload_mergeEncodedFormData(data1, data2) {
|
jbe/bsw@11
|
59 if (data2 == null || data2 == "") return data1;
|
jbe/bsw@11
|
60 if (data1 == null || data1 == "") return data2;
|
jbe/bsw@11
|
61 return data1 + "&" + data2;
|
jbe/bsw@11
|
62 }
|
jbe/bsw@11
|
63
|
jbe/bsw@11
|
64 function partialload_startNextRequest() {
|
jbe/bsw@11
|
65 var entry = partialload_queue[partialload_queueRPos++];
|
jbe/bsw@11
|
66 var req = new XMLHttpRequest();
|
jbe/bsw@11
|
67 req.open(entry.method, entry.url, true);
|
jbe/bsw@11
|
68 req.onreadystatechange = function() {
|
jbe/bsw@11
|
69 if (req.readyState == 4) {
|
jbe/bsw@11
|
70 if (req.status == 200) {
|
jbe/bsw@11
|
71 if (entry.successHandler != null) entry.successHandler(req.responseText);
|
jbe/bsw@11
|
72 } else {
|
jbe/bsw@11
|
73 if (entry.failureHandler != null) entry.failureHandler();
|
jbe/bsw@11
|
74 }
|
jbe/bsw@11
|
75 if (partialload_queue[partialload_queueRPos]) {
|
jbe/bsw@11
|
76 partialload_startNextRequest();
|
jbe/bsw@11
|
77 } else {
|
jbe/bsw@11
|
78 partialload_queue = [];
|
jbe/bsw@11
|
79 partialload_queueRPos = 0;
|
jbe/bsw@11
|
80 partialload_queueWPos = 0;
|
jbe/bsw@11
|
81 }
|
jbe/bsw@11
|
82 }
|
jbe/bsw@11
|
83 }
|
jbe/bsw@11
|
84 if (entry.data) {
|
jbe/bsw@11
|
85 req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
jbe/bsw@11
|
86 }
|
jbe/bsw@11
|
87 req.send(entry.data);
|
jbe/bsw@11
|
88 }
|
jbe/bsw@11
|
89
|
jbe/bsw@11
|
90 function queuedHttpRequest(
|
jbe/bsw@11
|
91 url_or_form,
|
jbe/bsw@11
|
92 urlParams,
|
jbe/bsw@11
|
93 postParams,
|
jbe/bsw@11
|
94 successHandler,
|
jbe/bsw@11
|
95 failureHandler
|
jbe/bsw@11
|
96 ) {
|
jbe/bsw@11
|
97 var method;
|
jbe/bsw@11
|
98 var data = null;
|
jbe/bsw@11
|
99 if (typeof(postParams) == "string") {
|
jbe/bsw@11
|
100 data = postParams;
|
jbe/bsw@11
|
101 } else if (postParams != null) {
|
jbe/bsw@11
|
102 data = partialload_encodeFormData(postParams);
|
jbe/bsw@11
|
103 }
|
jbe/bsw@11
|
104 var url;
|
jbe/bsw@11
|
105 if (typeof(url_or_form) == "object") {
|
jbe/bsw@11
|
106 // form element given
|
jbe/bsw@11
|
107 var form = url_or_form;
|
jbe/bsw@11
|
108 url = partialload_addFormDataToUrl(form.action, urlParams);
|
jbe/bsw@11
|
109 var dataFromForm = partialload_encodeFormData(
|
jbe/bsw@11
|
110 partialload_getFormKeyValuePairs(form)
|
jbe/bsw@11
|
111 );
|
jbe/bsw@11
|
112 if (form.method != null && form.method.search(/^POST$/i) >= 0) {
|
jbe/bsw@11
|
113 method = "POST";
|
jbe/bsw@11
|
114 data = partialload_mergeEncodedFormData(data, dataFromForm);
|
jbe/bsw@11
|
115 } else {
|
jbe/bsw@11
|
116 method = (postParams == NULL) ? "GET" : "POST";
|
jbe/bsw@11
|
117 url = partialload_addFormDataToUrl(url, dataFromForm);
|
jbe/bsw@11
|
118 }
|
jbe/bsw@11
|
119 } else {
|
jbe/bsw@11
|
120 // URL given
|
jbe/bsw@11
|
121 url = partialload_addFormDataToUrl(url_or_form, urlParams);
|
jbe/bsw@11
|
122 if (postParams == null) {
|
jbe/bsw@11
|
123 method = "GET";
|
jbe/bsw@11
|
124 } else {
|
jbe/bsw@11
|
125 method = "POST";
|
jbe/bsw@11
|
126 if (typeof(postParams) == "string") {
|
jbe/bsw@11
|
127 data = postParams;
|
jbe/bsw@11
|
128 } else {
|
jbe/bsw@11
|
129 data = partialload_encodeFormData(postParams);
|
jbe/bsw@11
|
130 }
|
jbe/bsw@11
|
131 }
|
jbe/bsw@11
|
132 }
|
jbe/bsw@11
|
133 partialload_queue[partialload_queueWPos++] = {
|
jbe/bsw@11
|
134 method: method,
|
jbe/bsw@11
|
135 url: url,
|
jbe/bsw@11
|
136 data: data,
|
jbe/bsw@11
|
137 successHandler: successHandler,
|
jbe/bsw@11
|
138 failureHandler: failureHandler
|
jbe/bsw@11
|
139 };
|
jbe/bsw@11
|
140 if (partialload_queueRPos == 0) {
|
jbe/bsw@11
|
141 partialload_startNextRequest();
|
jbe/bsw@11
|
142 }
|
jbe/bsw@11
|
143 }
|
jbe/bsw@11
|
144
|
jbe/bsw@11
|
145 function setHtmlContent(node, htmlWithScripts) {
|
jbe/bsw@11
|
146 var uniquePrefix = "placeholder" + Math.floor(Math.random()*10e16) + "_";
|
jbe/bsw@11
|
147 var i = 0;
|
jbe/bsw@11
|
148 var scripts = [];
|
jbe/bsw@11
|
149 var htmlWithPlaceholders = "";
|
jbe/bsw@11
|
150 // NOTE: This function can not handle CDATA blocks at random positions.
|
jbe/bsw@11
|
151 htmlWithPlaceholders = htmlWithScripts.replace(
|
jbe/bsw@11
|
152 /<script[^>]*>(.*?)<\/script>/ig,
|
jbe/bsw@11
|
153 function(all, inside) {
|
jbe/bsw@11
|
154 scripts[i] = inside;
|
jbe/bsw@11
|
155 var placeholder = '<span id="' + uniquePrefix + i + '"></span>';
|
jbe/bsw@11
|
156 i++;
|
jbe/bsw@11
|
157 return placeholder;
|
jbe/bsw@11
|
158 }
|
jbe/bsw@11
|
159 )
|
jbe/bsw@11
|
160 node.innerHTML = htmlWithPlaceholders;
|
jbe/bsw@11
|
161 var documentWriteBackup = document.write;
|
jbe/bsw@11
|
162 var documentWritelnBackup = document.writeln;
|
jbe/bsw@11
|
163 var output;
|
jbe/bsw@11
|
164 document.write = function(str) { output += str; }
|
jbe/bsw@11
|
165 document.writeln = function(str) { output += str + "\n"; }
|
jbe/bsw@11
|
166 for (i=0; i<scripts.length; i++) {
|
jbe/bsw@11
|
167 var placeholderNode = document.getElementById(uniquePrefix + i);
|
jbe/bsw@11
|
168 output = "";
|
jbe/bsw@11
|
169 eval(scripts[i]);
|
jbe/bsw@11
|
170 if (output != "") {
|
jbe/bsw@11
|
171 placeholderNode.innerHTML = output;
|
jbe/bsw@11
|
172 while (placeholderNode.childNodes.length > 0) {
|
jbe/bsw@11
|
173 var childNode = placeholderNode.childNodes[0];
|
jbe/bsw@11
|
174 placeholderNode.removeChild(childNode);
|
jbe/bsw@11
|
175 placeholderNode.parentNode.insertBefore(childNode, placeholderNode);
|
jbe/bsw@11
|
176 }
|
jbe/bsw@11
|
177 }
|
jbe/bsw@11
|
178 placeholderNode.parentNode.removeChild(placeholderNode);
|
jbe/bsw@11
|
179 }
|
jbe/bsw@11
|
180 document.write = documentWriteBackup;
|
jbe/bsw@11
|
181 document.writeln = documentWritelnBackup;
|
jbe/bsw@11
|
182 }
|
jbe/bsw@11
|
183
|
jbe/bsw@11
|
184 function partialLoad(
|
jbe/bsw@11
|
185 node,
|
jbe/bsw@11
|
186 tempLoadingContent,
|
jbe/bsw@11
|
187 failureContent,
|
jbe/bsw@11
|
188 url_or_form,
|
jbe/bsw@11
|
189 urlParams,
|
jbe/bsw@11
|
190 postParams,
|
jbe/bsw@11
|
191 successHandler,
|
jbe/bsw@11
|
192 failureHandler
|
jbe/bsw@11
|
193 ) {
|
jbe/bsw@11
|
194 if (typeof(node) == "string") node = document.getElementById(node);
|
jbe/bsw@11
|
195 if (tempLoadingContent != null) setHtmlContent(node, tempLoadingContent);
|
jbe/bsw@11
|
196 queuedHttpRequest(
|
jbe/bsw@11
|
197 url_or_form,
|
jbe/bsw@11
|
198 urlParams,
|
jbe/bsw@11
|
199 postParams,
|
jbe/bsw@11
|
200 function(response) {
|
jbe/bsw@11
|
201 setHtmlContent(node, response);
|
jbe/bsw@11
|
202 if (successHandler != null) successHandler();
|
jbe/bsw@11
|
203 },
|
jbe/bsw@11
|
204 function() {
|
jbe/bsw@11
|
205 if (failureContent != null) setHtmlContent(node, failureContent);
|
jbe/bsw@11
|
206 if (failureHandler != null) failureHandler();
|
jbe/bsw@11
|
207 }
|
jbe/bsw@11
|
208 );
|
jbe/bsw@11
|
209 }
|
jbe/bsw@11
|
210
|
jbe/bsw@11
|
211 function partialMultiLoad(
|
jbe/bsw@11
|
212 mapping,
|
jbe/bsw@11
|
213 tempLoadingContents,
|
jbe/bsw@11
|
214 failureContents,
|
jbe/bsw@11
|
215 url_or_form,
|
jbe/bsw@11
|
216 urlParams,
|
jbe/bsw@11
|
217 postParams,
|
jbe/bsw@11
|
218 successHandler,
|
jbe/bsw@11
|
219 failureHandler
|
jbe/bsw@11
|
220 ) {
|
jbe/bsw@11
|
221 if (mapping instanceof Array) {
|
jbe/bsw@11
|
222 var mappingHash = {}
|
jbe/bsw@11
|
223 for (var i=0; i<mapping.length; i++) {
|
jbe/bsw@11
|
224 mappingHash[mapping[i]] = mapping[i];
|
jbe/bsw@11
|
225 }
|
jbe/bsw@11
|
226 mapping = mappingHash;
|
jbe/bsw@11
|
227 }
|
jbe/bsw@11
|
228 if (typeof(tempLoadingContents) == "string") {
|
jbe/bsw@11
|
229 for (var key in mapping) {
|
jbe/bsw@11
|
230 var node = key;
|
jbe/bsw@11
|
231 if (typeof(node) == "string") node = document.getElementById(node);
|
jbe/bsw@11
|
232 setHtmlContent(node, tempLoadingContents);
|
jbe/bsw@11
|
233 }
|
jbe/bsw@11
|
234 } else if (tempLoadingContents != null) {
|
jbe/bsw@11
|
235 for (var key in tempLoadingContents) {
|
jbe/bsw@11
|
236 var node = key;
|
jbe/bsw@11
|
237 if (typeof(node) == "string") node = document.getElementById(node);
|
jbe/bsw@11
|
238 setHtmlContent(node, tempLoadingContents[key]);
|
jbe/bsw@11
|
239 }
|
jbe/bsw@11
|
240 }
|
jbe/bsw@11
|
241 queuedHttpRequest(
|
jbe/bsw@11
|
242 url_or_form,
|
jbe/bsw@11
|
243 urlParams,
|
jbe/bsw@11
|
244 postParams,
|
jbe/bsw@11
|
245 function(response) {
|
jbe/bsw@11
|
246 var data = eval("(" + response + ")");
|
jbe/bsw@11
|
247 for (var key in mapping) {
|
jbe/bsw@11
|
248 var node = key;
|
jbe/bsw@11
|
249 if (typeof(node) == "string") node = document.getElementById(node);
|
jbe/bsw@11
|
250 setHtmlContent(node, data[mapping[key]]);
|
jbe/bsw@11
|
251 }
|
jbe/bsw@11
|
252 if (successHandler != null) successHandler();
|
jbe/bsw@11
|
253 },
|
jbe/bsw@11
|
254 function() {
|
jbe/bsw@11
|
255 if (typeof(failureContents) == "string") {
|
jbe/bsw@11
|
256 for (var key in mapping) {
|
jbe/bsw@11
|
257 var node = key;
|
jbe/bsw@11
|
258 if (typeof(node) == "string") node = document.getElementById(node);
|
jbe/bsw@11
|
259 setHtmlContent(node, failureContents);
|
jbe/bsw@11
|
260 }
|
jbe/bsw@11
|
261 } else if (failureContents != null) {
|
jbe/bsw@11
|
262 for (var key in failureContents) {
|
jbe/bsw@11
|
263 var node = key;
|
jbe/bsw@11
|
264 if (typeof(node) == "string") node = document.getElementById(node);
|
jbe/bsw@11
|
265 setHtmlContent(node, failureContents[key]);
|
jbe/bsw@11
|
266 }
|
jbe/bsw@11
|
267 }
|
jbe/bsw@11
|
268 if (failureHandler != null) failureHandler();
|
jbe/bsw@11
|
269 }
|
jbe/bsw@11
|
270 );
|
jbe/bsw@11
|
271 }
|