summaryrefslogtreecommitdiff
path: root/includes/js/dojox/data/dom.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/data/dom.js')
-rw-r--r--includes/js/dojox/data/dom.js187
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
+ }
+}
+
+
+}