106 lines
4.3 KiB
JavaScript
106 lines
4.3 KiB
JavaScript
/**
|
|
* ====================================================================
|
|
* About
|
|
* ====================================================================
|
|
* Sarissa cross browser XML library - AJAX module
|
|
* @version 0.9.6.1
|
|
* @author: Copyright Manos Batsis, mailto: mbatsis at users full stop sourceforge full stop net
|
|
*
|
|
* This module contains some convinient AJAX tricks based on Sarissa
|
|
*
|
|
* ====================================================================
|
|
* Licence
|
|
* ====================================================================
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 or
|
|
* the GNU Lesser General Public License version 2.1 as published by
|
|
* the Free Software Foundation (your choice between the two).
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License or GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* or GNU Lesser General Public License along with this program; if not,
|
|
* write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
* or visit http://www.gnu.org
|
|
*
|
|
*/
|
|
/**
|
|
* Update an element with response of a GET request on the given URL.
|
|
* @addon
|
|
* @param sFromUrl the URL to make the request to
|
|
* @param oTargetElement the element to update
|
|
* @param xsltproc (optional) the transformer to use on the returned
|
|
* content before updating the target element with it
|
|
*/
|
|
Sarissa.updateContentFromURI = function(sFromUrl, oTargetElement, xsltproc) {
|
|
try{
|
|
oTargetElement.style.cursor = "wait";
|
|
var xmlhttp = new XMLHttpRequest();
|
|
xmlhttp.open("GET", sFromUrl);
|
|
function sarissa_dhtml_loadHandler() {
|
|
if (xmlhttp.readyState == 4) {
|
|
oTargetElement.style.cursor = "auto";
|
|
Sarissa.updateContentFromNode(xmlhttp.responseXML, oTargetElement, xsltproc);
|
|
};
|
|
};
|
|
xmlhttp.onreadystatechange = sarissa_dhtml_loadHandler;
|
|
xmlhttp.send(null);
|
|
oTargetElement.style.cursor = "auto";
|
|
}
|
|
catch(e){
|
|
oTargetElement.style.cursor = "auto";
|
|
throw e;
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Update an element's content with the given DOM node.
|
|
* @addon
|
|
* @param sFromUrl the URL to make the request to
|
|
* @param oTargetElement the element to update
|
|
* @param xsltproc (optional) the transformer to use on the given
|
|
* DOM node before updating the target element with it
|
|
*/
|
|
Sarissa.updateContentFromNode = function(oNode, oTargetElement, xsltproc) {
|
|
try {
|
|
oTargetElement.style.cursor = "wait";
|
|
Sarissa.clearChildNodes(oTargetElement);
|
|
// check for parsing errors
|
|
var ownerDoc = oNode.nodeType == Node.DOCUMENT_NODE?oNode:oNode.ownerDocument;
|
|
if(ownerDoc.parseError && ownerDoc.parseError != 0) {
|
|
var pre = document.createElement("pre");
|
|
pre.appendChild(document.createTextNode(Sarissa.getParseErrorText(ownerDoc)));
|
|
oTargetElement.appendChild(pre);
|
|
}
|
|
else {
|
|
// transform if appropriate
|
|
if(xsltproc) {
|
|
oNode = xsltproc.transformToDocument(oNode);
|
|
};
|
|
// be smart, maybe the user wants to display the source instead
|
|
if(oTargetElement.tagName.toLowerCase == "textarea" || oTargetElement.tagName.toLowerCase == "input") {
|
|
oTargetElement.value = Sarissa.serialize(oNode);
|
|
}
|
|
else {
|
|
// ok that was not smart; it was paranoid. Keep up the good work by trying to use DOM instead of innerHTML
|
|
if(oNode.nodeType == Node.DOCUMENT_NODE || oNode.ownerDocument.documentElement == oNode) {
|
|
oTargetElement.innerHTML = Sarissa.serialize(oNode);
|
|
}
|
|
else{
|
|
oTargetElement.appendChild(oTargetElement.ownerDocument.importNode(oNode, true));
|
|
};
|
|
};
|
|
};
|
|
}
|
|
catch(e) {
|
|
throw e;
|
|
}
|
|
finally{
|
|
oTargetElement.style.cursor = "auto";
|
|
};
|
|
};
|
|
|