webmcp
annotate framework/js/partialload.js @ 33:fc98e5c6bfab
add missing debug_table
trace.debug_table prints a table into the log.
trace.debug_table prints a table into the log.
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Tue Oct 05 05:19:47 2010 +0200 (2010-10-05) |
parents | d76a8857ba62 |
children | 89030e955845 |
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/bsw@11 | 26 if (typeof(value) == "string") { |
jbe/bsw@11 | 27 if (result != "") result += "&"; |
jbe/bsw@11 | 28 result += encodeURIComponent(key) + "=" + encodeURIComponent(value); |
jbe/bsw@11 | 29 } else if (typeof(value) == "object") { |
jbe/bsw@11 | 30 var i; |
jbe/bsw@11 | 31 for (i=0; i<value.length; i++) { |
jbe/bsw@11 | 32 if (result != "") result += "&"; |
jbe/bsw@11 | 33 result += encodeURIComponent(key) + "=" + encodeURIComponent(value[i]); |
jbe/bsw@11 | 34 } |
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 } |