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