Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.data.dom"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.data.dom"] = true;dojo.provide("dojox.data.dom");//DOM type to int value for reference.//Ints make for more compact code than full constant names.//ELEMENT_NODE = 1;//ATTRIBUTE_NODE = 2;//TEXT_NODE = 3;//CDATA_SECTION_NODE = 4;//ENTITY_REFERENCE_NODE = 5;//ENTITY_NODE = 6;//PROCESSING_INSTRUCTION_NODE = 7;//COMMENT_NODE = 8;//DOCUMENT_NODE = 9;//DOCUMENT_TYPE_NODE = 10;//DOCUMENT_FRAGMENT_NODE = 11;//NOTATION_NODE = 12;//FIXME: Remove this file when possible.//This file contains internal/helper APIs as holders until the true DOM apis of Dojo 0.9 are finalized.//Therefore, these should not be generally used, they are present only for the use by XmlStore and the//wires project until proper dojo replacements are available. When such exist, XmlStore and the like//will be ported off these and this file will be deleted.dojo.experimental("dojox.data.dom");dojox.data.dom.createDocument = function(/*string?*/ str, /*string?*/ mimetype){// summary:// cross-browser implementation of creating an XML document object.//// str:// Optional text to create the document from. If not provided, an empty XML document will be created.// mimetype:// Optional mimetype of the text. Typically, this is text/xml. Will be defaulted to text/xml if not provided.var _document = dojo.doc;if(!mimetype){ mimetype = "text/xml"; }if(str && (typeof dojo.global["DOMParser"]) !== "undefined"){var parser = new DOMParser();return parser.parseFromString(str, mimetype); // DOMDocument}else if((typeof dojo.global["ActiveXObject"]) !== "undefined"){var prefixes = [ "MSXML2", "Microsoft", "MSXML", "MSXML3" ];for(var i = 0; i<prefixes.length; i++){try{var doc = new ActiveXObject(prefixes[i]+".XMLDOM");if(str){if(doc){doc.async = false;doc.loadXML(str);return doc; // DOMDocument}else{console.log("loadXML didn't work?");}}else{if(doc){return doc; //DOMDocument}}}catch(e){ /* squelch */ };}}else if((_document.implementation)&&(_document.implementation.createDocument)){if(str){if(_document.createElement){// FIXME: this may change all tags to uppercase!var tmp = _document.createElement("xml");tmp.innerHTML = str;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; // DOMDocument}}else{return _document.implementation.createDocument("", "", null); // DOMDocument}}return null; // DOMDocument}dojox.data.dom.textContent = function(/*Node*/node, /*string?*/text){// summary:// Implementation of the DOM Level 3 attribute; scan node for text// description:// Implementation of the DOM Level 3 attribute; scan node for text// This function can also update the text of a node by replacing all child// content of the node.// node:// The node to get the text off of or set the text on.// text:// Optional argument of the text to apply to the node.if(arguments.length>1){var _document = node.ownerDocument || dojo.doc; //Preference is to get the node owning doc first or it may faildojox.data.dom.replaceChildren(node, _document.createTextNode(text));return text; // string} else {if(node.textContent !== undefined){ //FF 1.5return node.textContent; // string}var _result = "";if(node == null){return _result; //empty string.}for(var i = 0; i < node.childNodes.length; i++){switch(node.childNodes[i].nodeType){case 1: // ELEMENT_NODEcase 5: // ENTITY_REFERENCE_NODE_result += dojox.data.dom.textContent(node.childNodes[i]);break;case 3: // TEXT_NODEcase 2: // ATTRIBUTE_NODEcase 4: // CDATA_SECTION_NODE_result += node.childNodes[i].nodeValue;break;default:break;}}return _result; // string}}dojox.data.dom.replaceChildren = function(/*Element*/node, /*Node || array*/ newChildren){// summary:// Removes all children of node and appends newChild. All the existing// children will be destroyed.// description:// Removes all children of node and appends newChild. All the existing// children will be destroyed.// node:// The node to modify the children on// newChildren:// The children to add to the node. It can either be a single Node or an// array of Nodes.var nodes = [];if(dojo.isIE){for(var i=0;i<node.childNodes.length;i++){nodes.push(node.childNodes[i]);}}dojox.data.dom.removeChildren(node);for(var i=0;i<nodes.length;i++){dojo._destroyElement(nodes[i]);}if(!dojo.isArray(newChildren)){node.appendChild(newChildren);}else{for(var i=0;i<newChildren.length;i++){node.appendChild(newChildren[i]);}}}dojox.data.dom.removeChildren = function(/*Element*/node){// summary:// removes all children from node and returns the count of children removed.// The children nodes are not destroyed. Be sure to call dojo._destroyElement on them// after they are not used anymore.// node:// The node to remove all the children from.var count = node.childNodes.length;while(node.hasChildNodes()){node.removeChild(node.firstChild);}return count; // int}dojox.data.dom.innerXML = function(/*Node*/node){// summary:// Implementation of MS's innerXML function.// node:// The node from which to generate the XML text representation.if(node.innerXML){return node.innerXML; // string}else if (node.xml){return node.xml; // string}else if(typeof XMLSerializer != "undefined"){return (new XMLSerializer()).serializeToString(node); // string}}}