mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
153 lines
3.9 KiB
JavaScript
153 lines
3.9 KiB
JavaScript
|
// This is a third party JavaScript library from
|
||
|
// http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
|
||
|
// i.e. This has not been written by ThoughtWorks.
|
||
|
|
||
|
//<script>
|
||
|
//////////////////
|
||
|
// Helper Stuff //
|
||
|
//////////////////
|
||
|
|
||
|
// used to find the Automation server name
|
||
|
function getDomDocumentPrefix() {
|
||
|
if (getDomDocumentPrefix.prefix)
|
||
|
return getDomDocumentPrefix.prefix;
|
||
|
|
||
|
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
|
||
|
var o;
|
||
|
for (var i = 0; i < prefixes.length; i++) {
|
||
|
try {
|
||
|
// try to create the objects
|
||
|
o = new ActiveXObject(prefixes[i] + ".DomDocument");
|
||
|
return getDomDocumentPrefix.prefix = prefixes[i];
|
||
|
}
|
||
|
catch (ex) {};
|
||
|
}
|
||
|
|
||
|
throw new Error("Could not find an installed XML parser");
|
||
|
}
|
||
|
|
||
|
function getXmlHttpPrefix() {
|
||
|
if (getXmlHttpPrefix.prefix)
|
||
|
return getXmlHttpPrefix.prefix;
|
||
|
|
||
|
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
|
||
|
var o;
|
||
|
for (var i = 0; i < prefixes.length; i++) {
|
||
|
try {
|
||
|
// try to create the objects
|
||
|
o = new ActiveXObject(prefixes[i] + ".XmlHttp");
|
||
|
return getXmlHttpPrefix.prefix = prefixes[i];
|
||
|
}
|
||
|
catch (ex) {};
|
||
|
}
|
||
|
|
||
|
throw new Error("Could not find an installed XML parser");
|
||
|
}
|
||
|
|
||
|
//////////////////////////
|
||
|
// Start the Real stuff //
|
||
|
//////////////////////////
|
||
|
|
||
|
|
||
|
// XmlHttp factory
|
||
|
function XmlHttp() {}
|
||
|
|
||
|
XmlHttp.create = function () {
|
||
|
try {
|
||
|
if (window.XMLHttpRequest) {
|
||
|
var req = new XMLHttpRequest();
|
||
|
|
||
|
// some versions of Moz do not support the readyState property
|
||
|
// and the onreadystate event so we patch it!
|
||
|
if (req.readyState == null) {
|
||
|
req.readyState = 1;
|
||
|
req.addEventListener("load", function () {
|
||
|
req.readyState = 4;
|
||
|
if (typeof req.onreadystatechange == "function")
|
||
|
req.onreadystatechange();
|
||
|
}, false);
|
||
|
}
|
||
|
|
||
|
return req;
|
||
|
}
|
||
|
if (window.ActiveXObject) {
|
||
|
return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
|
||
|
}
|
||
|
}
|
||
|
catch (ex) {}
|
||
|
// fell through
|
||
|
throw new Error("Your browser does not support XmlHttp objects");
|
||
|
};
|
||
|
|
||
|
// XmlDocument factory
|
||
|
function XmlDocument() {}
|
||
|
|
||
|
XmlDocument.create = function () {
|
||
|
try {
|
||
|
// DOM2
|
||
|
if (document.implementation && document.implementation.createDocument) {
|
||
|
var doc = document.implementation.createDocument("", "", null);
|
||
|
|
||
|
// some versions of Moz do not support the readyState property
|
||
|
// and the onreadystate event so we patch it!
|
||
|
if (doc.readyState == null) {
|
||
|
doc.readyState = 1;
|
||
|
doc.addEventListener("load", function () {
|
||
|
doc.readyState = 4;
|
||
|
if (typeof doc.onreadystatechange == "function")
|
||
|
doc.onreadystatechange();
|
||
|
}, false);
|
||
|
}
|
||
|
|
||
|
return doc;
|
||
|
}
|
||
|
if (window.ActiveXObject)
|
||
|
return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
|
||
|
}
|
||
|
catch (ex) {}
|
||
|
throw new Error("Your browser does not support XmlDocument objects");
|
||
|
};
|
||
|
|
||
|
// Create the loadXML method and xml getter for Mozilla
|
||
|
if (window.DOMParser &&
|
||
|
window.XMLSerializer &&
|
||
|
window.Node && Node.prototype && Node.prototype.__defineGetter__) {
|
||
|
|
||
|
// XMLDocument did not extend the Document interface in some versions
|
||
|
// of Mozilla. Extend both!
|
||
|
//XMLDocument.prototype.loadXML =
|
||
|
Document.prototype.loadXML = function (s) {
|
||
|
|
||
|
// parse the string to a new doc
|
||
|
var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
|
||
|
|
||
|
// remove all initial children
|
||
|
while (this.hasChildNodes())
|
||
|
this.removeChild(this.lastChild);
|
||
|
|
||
|
// insert and import nodes
|
||
|
for (var i = 0; i < doc2.childNodes.length; i++) {
|
||
|
this.appendChild(this.importNode(doc2.childNodes[i], true));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
* xml getter
|
||
|
*
|
||
|
* This serializes the DOM tree to an XML String
|
||
|
*
|
||
|
* Usage: var sXml = oNode.xml
|
||
|
*
|
||
|
*/
|
||
|
// XMLDocument did not extend the Document interface in some versions
|
||
|
// of Mozilla. Extend both!
|
||
|
/*
|
||
|
XMLDocument.prototype.__defineGetter__("xml", function () {
|
||
|
return (new XMLSerializer()).serializeToString(this);
|
||
|
});
|
||
|
*/
|
||
|
Document.prototype.__defineGetter__("xml", function () {
|
||
|
return (new XMLSerializer()).serializeToString(this);
|
||
|
});
|
||
|
}
|