Subversion-Projekte lars-tiefland.prado

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

// 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);
        });
}