123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- 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
- }
- }
- }
|