webmcp

view framework/js/partialload.js @ 196:ce8fd7767b38

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

Impressum / About Us