]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/data/dom.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / data / dom.js
diff --git a/static/dojo-release-1.1.1/dojox/data/dom.js b/static/dojo-release-1.1.1/dojox/data/dom.js
new file mode 100644 (file)
index 0000000..8911bc3
--- /dev/null
@@ -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
+       }
+}
+
+
+}