| /* |
| Copyright (c) 2004-2006, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| |
| |
| |
| dojo.provide("dojo.dom"); |
| dojo.dom.ELEMENT_NODE = 1; |
| dojo.dom.ATTRIBUTE_NODE = 2; |
| dojo.dom.TEXT_NODE = 3; |
| dojo.dom.CDATA_SECTION_NODE = 4; |
| dojo.dom.ENTITY_REFERENCE_NODE = 5; |
| dojo.dom.ENTITY_NODE = 6; |
| dojo.dom.PROCESSING_INSTRUCTION_NODE = 7; |
| dojo.dom.COMMENT_NODE = 8; |
| dojo.dom.DOCUMENT_NODE = 9; |
| dojo.dom.DOCUMENT_TYPE_NODE = 10; |
| dojo.dom.DOCUMENT_FRAGMENT_NODE = 11; |
| dojo.dom.NOTATION_NODE = 12; |
| dojo.dom.dojoml = "http://www.dojotoolkit.org/2004/dojoml"; |
| dojo.dom.xmlns = {svg:"http://www.w3.org/2000/svg", smil:"http://www.w3.org/2001/SMIL20/", mml:"http://www.w3.org/1998/Math/MathML", cml:"http://www.xml-cml.org", xlink:"http://www.w3.org/1999/xlink", xhtml:"http://www.w3.org/1999/xhtml", xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", xbl:"http://www.mozilla.org/xbl", fo:"http://www.w3.org/1999/XSL/Format", xsl:"http://www.w3.org/1999/XSL/Transform", xslt:"http://www.w3.org/1999/XSL/Transform", xi:"http://www.w3.org/2001/XInclude", xforms:"http://www.w3.org/2002/01/xforms", saxon:"http://icl.com/saxon", xalan:"http://xml.apache.org/xslt", xsd:"http://www.w3.org/2001/XMLSchema", dt:"http://www.w3.org/2001/XMLSchema-datatypes", xsi:"http://www.w3.org/2001/XMLSchema-instance", rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#", rdfs:"http://www.w3.org/2000/01/rdf-schema#", dc:"http://purl.org/dc/elements/1.1/", dcq:"http://purl.org/dc/qualifiers/1.0", "soap-env":"http://schemas.xmlsoap.org/soap/envelope/", wsdl:"http://schemas.xmlsoap.org/wsdl/", AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"}; |
| dojo.dom.isNode = function (wh) { |
| if (typeof Element == "function") { |
| try { |
| return wh instanceof Element; |
| } |
| catch (e) { |
| } |
| } else { |
| return wh && !isNaN(wh.nodeType); |
| } |
| }; |
| dojo.dom.getUniqueId = function () { |
| var _document = dojo.doc(); |
| do { |
| var id = "dj_unique_" + (++arguments.callee._idIncrement); |
| } while (_document.getElementById(id)); |
| return id; |
| }; |
| dojo.dom.getUniqueId._idIncrement = 0; |
| dojo.dom.firstElement = dojo.dom.getFirstChildElement = function (parentNode, tagName) { |
| var node = parentNode.firstChild; |
| while (node && node.nodeType != dojo.dom.ELEMENT_NODE) { |
| node = node.nextSibling; |
| } |
| if (tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) { |
| node = dojo.dom.nextElement(node, tagName); |
| } |
| return node; |
| }; |
| dojo.dom.lastElement = dojo.dom.getLastChildElement = function (parentNode, tagName) { |
| var node = parentNode.lastChild; |
| while (node && node.nodeType != dojo.dom.ELEMENT_NODE) { |
| node = node.previousSibling; |
| } |
| if (tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) { |
| node = dojo.dom.prevElement(node, tagName); |
| } |
| return node; |
| }; |
| dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function (node, tagName) { |
| if (!node) { |
| return null; |
| } |
| do { |
| node = node.nextSibling; |
| } while (node && node.nodeType != dojo.dom.ELEMENT_NODE); |
| if (node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) { |
| return dojo.dom.nextElement(node, tagName); |
| } |
| return node; |
| }; |
| dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function (node, tagName) { |
| if (!node) { |
| return null; |
| } |
| if (tagName) { |
| tagName = tagName.toLowerCase(); |
| } |
| do { |
| node = node.previousSibling; |
| } while (node && node.nodeType != dojo.dom.ELEMENT_NODE); |
| if (node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) { |
| return dojo.dom.prevElement(node, tagName); |
| } |
| return node; |
| }; |
| dojo.dom.moveChildren = function (srcNode, destNode, trim) { |
| var count = 0; |
| if (trim) { |
| while (srcNode.hasChildNodes() && srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) { |
| srcNode.removeChild(srcNode.firstChild); |
| } |
| while (srcNode.hasChildNodes() && srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) { |
| srcNode.removeChild(srcNode.lastChild); |
| } |
| } |
| while (srcNode.hasChildNodes()) { |
| destNode.appendChild(srcNode.firstChild); |
| count++; |
| } |
| return count; |
| }; |
| dojo.dom.copyChildren = function (srcNode, destNode, trim) { |
| var clonedNode = srcNode.cloneNode(true); |
| return this.moveChildren(clonedNode, destNode, trim); |
| }; |
| dojo.dom.replaceChildren = function (node, newChild) { |
| var nodes = []; |
| if (dojo.render.html.ie) { |
| for (var i = 0; i < node.childNodes.length; i++) { |
| nodes.push(node.childNodes[i]); |
| } |
| } |
| dojo.dom.removeChildren(node); |
| node.appendChild(newChild); |
| for (var i = 0; i < nodes.length; i++) { |
| dojo.dom.destroyNode(nodes[i]); |
| } |
| }; |
| dojo.dom.removeChildren = function (node) { |
| var count = node.childNodes.length; |
| while (node.hasChildNodes()) { |
| dojo.dom.removeNode(node.firstChild); |
| } |
| return count; |
| }; |
| dojo.dom.replaceNode = function (node, newNode) { |
| return node.parentNode.replaceChild(newNode, node); |
| }; |
| dojo.dom.destroyNode = function (node) { |
| if (node.parentNode) { |
| node = dojo.dom.removeNode(node); |
| } |
| if (node.nodeType != 3) { |
| if (dojo.evalObjPath("dojo.event.browser.clean", false)) { |
| dojo.event.browser.clean(node); |
| } |
| if (dojo.render.html.ie) { |
| node.outerHTML = ""; |
| } |
| } |
| }; |
| dojo.dom.removeNode = function (node) { |
| if (node && node.parentNode) { |
| return node.parentNode.removeChild(node); |
| } |
| }; |
| dojo.dom.getAncestors = function (node, filterFunction, returnFirstHit) { |
| var ancestors = []; |
| var isFunction = (filterFunction && (filterFunction instanceof Function || typeof filterFunction == "function")); |
| while (node) { |
| if (!isFunction || filterFunction(node)) { |
| ancestors.push(node); |
| } |
| if (returnFirstHit && ancestors.length > 0) { |
| return ancestors[0]; |
| } |
| node = node.parentNode; |
| } |
| if (returnFirstHit) { |
| return null; |
| } |
| return ancestors; |
| }; |
| dojo.dom.getAncestorsByTag = function (node, tag, returnFirstHit) { |
| tag = tag.toLowerCase(); |
| return dojo.dom.getAncestors(node, function (el) { |
| return ((el.tagName) && (el.tagName.toLowerCase() == tag)); |
| }, returnFirstHit); |
| }; |
| dojo.dom.getFirstAncestorByTag = function (node, tag) { |
| return dojo.dom.getAncestorsByTag(node, tag, true); |
| }; |
| dojo.dom.isDescendantOf = function (node, ancestor, guaranteeDescendant) { |
| if (guaranteeDescendant && node) { |
| node = node.parentNode; |
| } |
| while (node) { |
| if (node == ancestor) { |
| return true; |
| } |
| node = node.parentNode; |
| } |
| return false; |
| }; |
| dojo.dom.innerXML = function (node) { |
| if (node.innerXML) { |
| return node.innerXML; |
| } else { |
| if (node.xml) { |
| return node.xml; |
| } else { |
| if (typeof XMLSerializer != "undefined") { |
| return (new XMLSerializer()).serializeToString(node); |
| } |
| } |
| } |
| }; |
| dojo.dom.createDocument = function () { |
| var doc = null; |
| var _document = dojo.doc(); |
| if (!dj_undef("ActiveXObject")) { |
| var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"]; |
| for (var i = 0; i < prefixes.length; i++) { |
| try { |
| doc = new ActiveXObject(prefixes[i] + ".XMLDOM"); |
| } |
| catch (e) { |
| } |
| if (doc) { |
| break; |
| } |
| } |
| } else { |
| if ((_document.implementation) && (_document.implementation.createDocument)) { |
| doc = _document.implementation.createDocument("", "", null); |
| } |
| } |
| return doc; |
| }; |
| dojo.dom.createDocumentFromText = function (str, mimetype) { |
| if (!mimetype) { |
| mimetype = "text/xml"; |
| } |
| if (!dj_undef("DOMParser")) { |
| var parser = new DOMParser(); |
| return parser.parseFromString(str, mimetype); |
| } else { |
| if (!dj_undef("ActiveXObject")) { |
| var domDoc = dojo.dom.createDocument(); |
| if (domDoc) { |
| domDoc.async = false; |
| domDoc.loadXML(str); |
| return domDoc; |
| } else { |
| dojo.debug("toXml didn't work?"); |
| } |
| } else { |
| var _document = dojo.doc(); |
| if (_document.createElement) { |
| var tmp = _document.createElement("xml"); |
| tmp.innerHTML = str; |
| if (_document.implementation && _document.implementation.createDocument) { |
| var xmlDoc = _document.implementation.createDocument("foo", "", null); |
| for (var i = 0; i < tmp.childNodes.length; i++) { |
| xmlDoc.importNode(tmp.childNodes.item(i), true); |
| } |
| return xmlDoc; |
| } |
| return ((tmp.document) && (tmp.document.firstChild ? tmp.document.firstChild : tmp)); |
| } |
| } |
| } |
| return null; |
| }; |
| dojo.dom.prependChild = function (node, parent) { |
| if (parent.firstChild) { |
| parent.insertBefore(node, parent.firstChild); |
| } else { |
| parent.appendChild(node); |
| } |
| return true; |
| }; |
| dojo.dom.insertBefore = function (node, ref, force) { |
| if ((force != true) && (node === ref || node.nextSibling === ref)) { |
| return false; |
| } |
| var parent = ref.parentNode; |
| parent.insertBefore(node, ref); |
| return true; |
| }; |
| dojo.dom.insertAfter = function (node, ref, force) { |
| var pn = ref.parentNode; |
| if (ref == pn.lastChild) { |
| if ((force != true) && (node === ref)) { |
| return false; |
| } |
| pn.appendChild(node); |
| } else { |
| return this.insertBefore(node, ref.nextSibling, force); |
| } |
| return true; |
| }; |
| dojo.dom.insertAtPosition = function (node, ref, position) { |
| if ((!node) || (!ref) || (!position)) { |
| return false; |
| } |
| switch (position.toLowerCase()) { |
| case "before": |
| return dojo.dom.insertBefore(node, ref); |
| case "after": |
| return dojo.dom.insertAfter(node, ref); |
| case "first": |
| if (ref.firstChild) { |
| return dojo.dom.insertBefore(node, ref.firstChild); |
| } else { |
| ref.appendChild(node); |
| return true; |
| } |
| break; |
| default: |
| ref.appendChild(node); |
| return true; |
| } |
| }; |
| dojo.dom.insertAtIndex = function (node, containingNode, insertionIndex) { |
| var siblingNodes = containingNode.childNodes; |
| if (!siblingNodes.length || siblingNodes.length == insertionIndex) { |
| containingNode.appendChild(node); |
| return true; |
| } |
| if (insertionIndex == 0) { |
| return dojo.dom.prependChild(node, containingNode); |
| } |
| return dojo.dom.insertAfter(node, siblingNodes[insertionIndex - 1]); |
| }; |
| dojo.dom.textContent = function (node, text) { |
| if (arguments.length > 1) { |
| var _document = dojo.doc(); |
| dojo.dom.replaceChildren(node, _document.createTextNode(text)); |
| return text; |
| } else { |
| if (node.textContent != undefined) { |
| return node.textContent; |
| } |
| var _result = ""; |
| if (node == null) { |
| return _result; |
| } |
| for (var i = 0; i < node.childNodes.length; i++) { |
| switch (node.childNodes[i].nodeType) { |
| case 1: |
| case 5: |
| _result += dojo.dom.textContent(node.childNodes[i]); |
| break; |
| case 3: |
| case 2: |
| case 4: |
| _result += node.childNodes[i].nodeValue; |
| break; |
| default: |
| break; |
| } |
| } |
| return _result; |
| } |
| }; |
| dojo.dom.hasParent = function (node) { |
| return Boolean(node && node.parentNode && dojo.dom.isNode(node.parentNode)); |
| }; |
| dojo.dom.isTag = function (node) { |
| if (node && node.tagName) { |
| for (var i = 1; i < arguments.length; i++) { |
| if (node.tagName == String(arguments[i])) { |
| return String(arguments[i]); |
| } |
| } |
| } |
| return ""; |
| }; |
| dojo.dom.setAttributeNS = function (elem, namespaceURI, attrName, attrValue) { |
| if (elem == null || ((elem == undefined) && (typeof elem == "undefined"))) { |
| dojo.raise("No element given to dojo.dom.setAttributeNS"); |
| } |
| if (!((elem.setAttributeNS == undefined) && (typeof elem.setAttributeNS == "undefined"))) { |
| elem.setAttributeNS(namespaceURI, attrName, attrValue); |
| } else { |
| var ownerDoc = elem.ownerDocument; |
| var attribute = ownerDoc.createNode(2, attrName, namespaceURI); |
| attribute.nodeValue = attrValue; |
| elem.setAttributeNode(attribute); |
| } |
| }; |
| |