diff options
Diffstat (limited to 'includes/js/dojox/data/dom.js')
-rw-r--r-- | includes/js/dojox/data/dom.js | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/includes/js/dojox/data/dom.js b/includes/js/dojox/data/dom.js new file mode 100644 index 0000000..8911bc3 --- /dev/null +++ b/includes/js/dojox/data/dom.js @@ -0,0 +1,187 @@ +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 fail + dojox.data.dom.replaceChildren(node, _document.createTextNode(text)); + return text; // string + } else { + if(node.textContent !== undefined){ //FF 1.5 + return 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_NODE + case 5: // ENTITY_REFERENCE_NODE + _result += dojox.data.dom.textContent(node.childNodes[i]); + break; + case 3: // TEXT_NODE + case 2: // ATTRIBUTE_NODE + case 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 + } +} + + +} |