jbe/bsw@11: jbe/bsw@11: partialload_queue = []; jbe/bsw@11: partialload_queueRPos = 0; jbe/bsw@11: partialload_queueWPos = 0; jbe/bsw@11: jbe/bsw@11: function partialload_getFormKeyValuePairs(form) { jbe/bsw@11: var result = {}; jbe/bsw@11: for (var i=0; i= 0) { jbe/bsw@11: if (url.search(/&$/) >= 0) { jbe/bsw@11: url = url + params; jbe/bsw@11: } else { jbe/bsw@11: url = url + "&" + params; jbe/bsw@11: } jbe/bsw@11: } else { jbe/bsw@11: url = url + "?" + params; jbe/bsw@11: } jbe/bsw@11: } jbe/bsw@11: return url; jbe/bsw@11: } jbe/bsw@11: jbe/bsw@11: function partialload_mergeEncodedFormData(data1, data2) { jbe/bsw@11: if (data2 == null || data2 == "") return data1; jbe/bsw@11: if (data1 == null || data1 == "") return data2; jbe/bsw@11: return data1 + "&" + data2; jbe/bsw@11: } jbe/bsw@11: jbe/bsw@11: function partialload_startNextRequest() { jbe/bsw@11: var entry = partialload_queue[partialload_queueRPos++]; jbe/bsw@11: var req = new XMLHttpRequest(); jbe/bsw@11: req.open(entry.method, entry.url, true); jbe/bsw@11: req.onreadystatechange = function() { jbe/bsw@11: if (req.readyState == 4) { jbe/bsw@11: if (req.status == 200) { jbe/bsw@11: if (entry.successHandler != null) entry.successHandler(req.responseText); jbe/bsw@11: } else { jbe/bsw@11: if (entry.failureHandler != null) entry.failureHandler(); jbe/bsw@11: } jbe/bsw@11: if (partialload_queue[partialload_queueRPos]) { jbe/bsw@11: partialload_startNextRequest(); jbe/bsw@11: } else { jbe/bsw@11: partialload_queue = []; jbe/bsw@11: partialload_queueRPos = 0; jbe/bsw@11: partialload_queueWPos = 0; jbe/bsw@11: } jbe/bsw@11: } jbe/bsw@11: } jbe/bsw@11: if (entry.data) { jbe/bsw@11: req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); jbe/bsw@11: } jbe/bsw@11: req.send(entry.data); jbe/bsw@11: } jbe/bsw@11: jbe/bsw@11: function queuedHttpRequest( jbe/bsw@11: url_or_form, jbe/bsw@11: urlParams, jbe/bsw@11: postParams, jbe/bsw@11: successHandler, jbe/bsw@11: failureHandler jbe/bsw@11: ) { jbe/bsw@11: var method; jbe/bsw@11: var data = null; jbe/bsw@11: if (typeof(postParams) == "string") { jbe/bsw@11: data = postParams; jbe/bsw@11: } else if (postParams != null) { jbe/bsw@11: data = partialload_encodeFormData(postParams); jbe/bsw@11: } jbe/bsw@11: var url; jbe/bsw@11: if (typeof(url_or_form) == "object") { jbe/bsw@11: // form element given jbe/bsw@11: var form = url_or_form; jbe/bsw@11: url = partialload_addFormDataToUrl(form.action, urlParams); jbe/bsw@11: var dataFromForm = partialload_encodeFormData( jbe/bsw@11: partialload_getFormKeyValuePairs(form) jbe/bsw@11: ); jbe/bsw@11: if (form.method != null && form.method.search(/^POST$/i) >= 0) { jbe/bsw@11: method = "POST"; jbe/bsw@11: data = partialload_mergeEncodedFormData(data, dataFromForm); jbe/bsw@11: } else { jbe/bsw@11: method = (postParams == NULL) ? "GET" : "POST"; jbe/bsw@11: url = partialload_addFormDataToUrl(url, dataFromForm); jbe/bsw@11: } jbe/bsw@11: } else { jbe/bsw@11: // URL given jbe/bsw@11: url = partialload_addFormDataToUrl(url_or_form, urlParams); jbe/bsw@11: if (postParams == null) { jbe/bsw@11: method = "GET"; jbe/bsw@11: } else { jbe/bsw@11: method = "POST"; jbe/bsw@11: if (typeof(postParams) == "string") { jbe/bsw@11: data = postParams; jbe/bsw@11: } else { jbe/bsw@11: data = partialload_encodeFormData(postParams); jbe/bsw@11: } jbe/bsw@11: } jbe/bsw@11: } jbe/bsw@11: partialload_queue[partialload_queueWPos++] = { jbe/bsw@11: method: method, jbe/bsw@11: url: url, jbe/bsw@11: data: data, jbe/bsw@11: successHandler: successHandler, jbe/bsw@11: failureHandler: failureHandler jbe/bsw@11: }; jbe/bsw@11: if (partialload_queueRPos == 0) { jbe/bsw@11: partialload_startNextRequest(); jbe/bsw@11: } jbe/bsw@11: } jbe/bsw@11: jbe/bsw@11: function setHtmlContent(node, htmlWithScripts) { jbe/bsw@11: var uniquePrefix = "placeholder" + Math.floor(Math.random()*10e16) + "_"; jbe/bsw@11: var i = 0; jbe/bsw@11: var scripts = []; jbe/bsw@11: var htmlWithPlaceholders = ""; jbe/bsw@11: // NOTE: This function can not handle CDATA blocks at random positions. jbe/bsw@11: htmlWithPlaceholders = htmlWithScripts.replace( jbe/bsw@11: /]*>(.*?)<\/script>/ig, jbe/bsw@11: function(all, inside) { jbe/bsw@11: scripts[i] = inside; jbe/bsw@11: var placeholder = ''; jbe/bsw@11: i++; jbe/bsw@11: return placeholder; jbe/bsw@11: } jbe/bsw@11: ) jbe/bsw@11: node.innerHTML = htmlWithPlaceholders; jbe/bsw@11: var documentWriteBackup = document.write; jbe/bsw@11: var documentWritelnBackup = document.writeln; jbe/bsw@11: var output; jbe/bsw@11: document.write = function(str) { output += str; } jbe/bsw@11: document.writeln = function(str) { output += str + "\n"; } jbe/bsw@11: for (i=0; i 0) { jbe/bsw@11: var childNode = placeholderNode.childNodes[0]; jbe/bsw@11: placeholderNode.removeChild(childNode); jbe/bsw@11: placeholderNode.parentNode.insertBefore(childNode, placeholderNode); jbe/bsw@11: } jbe/bsw@11: } jbe/bsw@11: placeholderNode.parentNode.removeChild(placeholderNode); jbe/bsw@11: } jbe/bsw@11: document.write = documentWriteBackup; jbe/bsw@11: document.writeln = documentWritelnBackup; jbe/bsw@11: } jbe/bsw@11: jbe/bsw@11: function partialLoad( jbe/bsw@11: node, jbe/bsw@11: tempLoadingContent, jbe/bsw@11: failureContent, jbe/bsw@11: url_or_form, jbe/bsw@11: urlParams, jbe/bsw@11: postParams, jbe/bsw@11: successHandler, jbe/bsw@11: failureHandler jbe/bsw@11: ) { jbe/bsw@11: if (typeof(node) == "string") node = document.getElementById(node); jbe/bsw@11: if (tempLoadingContent != null) setHtmlContent(node, tempLoadingContent); jbe/bsw@11: queuedHttpRequest( jbe/bsw@11: url_or_form, jbe/bsw@11: urlParams, jbe/bsw@11: postParams, jbe/bsw@11: function(response) { jbe/bsw@11: setHtmlContent(node, response); jbe/bsw@11: if (successHandler != null) successHandler(); jbe/bsw@11: }, jbe/bsw@11: function() { jbe/bsw@11: if (failureContent != null) setHtmlContent(node, failureContent); jbe/bsw@11: if (failureHandler != null) failureHandler(); jbe/bsw@11: } jbe/bsw@11: ); jbe/bsw@11: } jbe/bsw@11: jbe/bsw@11: function partialMultiLoad( jbe/bsw@11: mapping, jbe/bsw@11: tempLoadingContents, jbe/bsw@11: failureContents, jbe/bsw@11: url_or_form, jbe/bsw@11: urlParams, jbe/bsw@11: postParams, jbe/bsw@11: successHandler, jbe/bsw@11: failureHandler jbe/bsw@11: ) { jbe/bsw@11: if (mapping instanceof Array) { jbe/bsw@11: var mappingHash = {} jbe/bsw@11: for (var i=0; i