You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					786 lines
				
				24 KiB
			
		
		
			
		
	
	
					786 lines
				
				24 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								// Generated by CoffeeScript 1.12.7
							 | 
						||
| 
								 | 
							
								(function() {
							 | 
						||
| 
								 | 
							
								  var DocumentPosition, NodeType, XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNamedNodeMap, XMLNode, XMLNodeList, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref1,
							 | 
						||
| 
								 | 
							
								    hasProp = {}.hasOwnProperty;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ref1 = require('./Utility'), isObject = ref1.isObject, isFunction = ref1.isFunction, isEmpty = ref1.isEmpty, getValue = ref1.getValue;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLElement = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLCData = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLComment = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLDeclaration = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLDocType = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLRaw = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLText = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLProcessingInstruction = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLDummy = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  NodeType = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLNodeList = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLNamedNodeMap = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  DocumentPosition = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  module.exports = XMLNode = (function() {
							 | 
						||
| 
								 | 
							
								    function XMLNode(parent1) {
							 | 
						||
| 
								 | 
							
								      this.parent = parent1;
							 | 
						||
| 
								 | 
							
								      if (this.parent) {
							 | 
						||
| 
								 | 
							
								        this.options = this.parent.options;
							 | 
						||
| 
								 | 
							
								        this.stringify = this.parent.stringify;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      this.value = null;
							 | 
						||
| 
								 | 
							
								      this.children = [];
							 | 
						||
| 
								 | 
							
								      this.baseURI = null;
							 | 
						||
| 
								 | 
							
								      if (!XMLElement) {
							 | 
						||
| 
								 | 
							
								        XMLElement = require('./XMLElement');
							 | 
						||
| 
								 | 
							
								        XMLCData = require('./XMLCData');
							 | 
						||
| 
								 | 
							
								        XMLComment = require('./XMLComment');
							 | 
						||
| 
								 | 
							
								        XMLDeclaration = require('./XMLDeclaration');
							 | 
						||
| 
								 | 
							
								        XMLDocType = require('./XMLDocType');
							 | 
						||
| 
								 | 
							
								        XMLRaw = require('./XMLRaw');
							 | 
						||
| 
								 | 
							
								        XMLText = require('./XMLText');
							 | 
						||
| 
								 | 
							
								        XMLProcessingInstruction = require('./XMLProcessingInstruction');
							 | 
						||
| 
								 | 
							
								        XMLDummy = require('./XMLDummy');
							 | 
						||
| 
								 | 
							
								        NodeType = require('./NodeType');
							 | 
						||
| 
								 | 
							
								        XMLNodeList = require('./XMLNodeList');
							 | 
						||
| 
								 | 
							
								        XMLNamedNodeMap = require('./XMLNamedNodeMap');
							 | 
						||
| 
								 | 
							
								        DocumentPosition = require('./DocumentPosition');
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'nodeName', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.name;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'nodeType', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.type;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'nodeValue', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.value;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'parentNode', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.parent;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'childNodes', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        if (!this.childNodeList || !this.childNodeList.nodes) {
							 | 
						||
| 
								 | 
							
								          this.childNodeList = new XMLNodeList(this.children);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return this.childNodeList;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'firstChild', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.children[0] || null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'lastChild', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.children[this.children.length - 1] || null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'previousSibling', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        var i;
							 | 
						||
| 
								 | 
							
								        i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								        return this.parent.children[i - 1] || null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'nextSibling', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        var i;
							 | 
						||
| 
								 | 
							
								        i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								        return this.parent.children[i + 1] || null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'ownerDocument', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.document() || null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLNode.prototype, 'textContent', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        var child, j, len, ref2, str;
							 | 
						||
| 
								 | 
							
								        if (this.nodeType === NodeType.Element || this.nodeType === NodeType.DocumentFragment) {
							 | 
						||
| 
								 | 
							
								          str = '';
							 | 
						||
| 
								 | 
							
								          ref2 = this.children;
							 | 
						||
| 
								 | 
							
								          for (j = 0, len = ref2.length; j < len; j++) {
							 | 
						||
| 
								 | 
							
								            child = ref2[j];
							 | 
						||
| 
								 | 
							
								            if (child.textContent) {
							 | 
						||
| 
								 | 
							
								              str += child.textContent;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          return str;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          return null;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      set: function(value) {
							 | 
						||
| 
								 | 
							
								        throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.setParent = function(parent) {
							 | 
						||
| 
								 | 
							
								      var child, j, len, ref2, results;
							 | 
						||
| 
								 | 
							
								      this.parent = parent;
							 | 
						||
| 
								 | 
							
								      if (parent) {
							 | 
						||
| 
								 | 
							
								        this.options = parent.options;
							 | 
						||
| 
								 | 
							
								        this.stringify = parent.stringify;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      ref2 = this.children;
							 | 
						||
| 
								 | 
							
								      results = [];
							 | 
						||
| 
								 | 
							
								      for (j = 0, len = ref2.length; j < len; j++) {
							 | 
						||
| 
								 | 
							
								        child = ref2[j];
							 | 
						||
| 
								 | 
							
								        results.push(child.setParent(this));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return results;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.element = function(name, attributes, text) {
							 | 
						||
| 
								 | 
							
								      var childNode, item, j, k, key, lastChild, len, len1, ref2, ref3, val;
							 | 
						||
| 
								 | 
							
								      lastChild = null;
							 | 
						||
| 
								 | 
							
								      if (attributes === null && (text == null)) {
							 | 
						||
| 
								 | 
							
								        ref2 = [{}, null], attributes = ref2[0], text = ref2[1];
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (attributes == null) {
							 | 
						||
| 
								 | 
							
								        attributes = {};
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      attributes = getValue(attributes);
							 | 
						||
| 
								 | 
							
								      if (!isObject(attributes)) {
							 | 
						||
| 
								 | 
							
								        ref3 = [attributes, text], text = ref3[0], attributes = ref3[1];
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (name != null) {
							 | 
						||
| 
								 | 
							
								        name = getValue(name);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (Array.isArray(name)) {
							 | 
						||
| 
								 | 
							
								        for (j = 0, len = name.length; j < len; j++) {
							 | 
						||
| 
								 | 
							
								          item = name[j];
							 | 
						||
| 
								 | 
							
								          lastChild = this.element(item);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else if (isFunction(name)) {
							 | 
						||
| 
								 | 
							
								        lastChild = this.element(name.apply());
							 | 
						||
| 
								 | 
							
								      } else if (isObject(name)) {
							 | 
						||
| 
								 | 
							
								        for (key in name) {
							 | 
						||
| 
								 | 
							
								          if (!hasProp.call(name, key)) continue;
							 | 
						||
| 
								 | 
							
								          val = name[key];
							 | 
						||
| 
								 | 
							
								          if (isFunction(val)) {
							 | 
						||
| 
								 | 
							
								            val = val.apply();
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {
							 | 
						||
| 
								 | 
							
								            lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);
							 | 
						||
| 
								 | 
							
								          } else if (!this.options.separateArrayItems && Array.isArray(val) && isEmpty(val)) {
							 | 
						||
| 
								 | 
							
								            lastChild = this.dummy();
							 | 
						||
| 
								 | 
							
								          } else if (isObject(val) && isEmpty(val)) {
							 | 
						||
| 
								 | 
							
								            lastChild = this.element(key);
							 | 
						||
| 
								 | 
							
								          } else if (!this.options.keepNullNodes && (val == null)) {
							 | 
						||
| 
								 | 
							
								            lastChild = this.dummy();
							 | 
						||
| 
								 | 
							
								          } else if (!this.options.separateArrayItems && Array.isArray(val)) {
							 | 
						||
| 
								 | 
							
								            for (k = 0, len1 = val.length; k < len1; k++) {
							 | 
						||
| 
								 | 
							
								              item = val[k];
							 | 
						||
| 
								 | 
							
								              childNode = {};
							 | 
						||
| 
								 | 
							
								              childNode[key] = item;
							 | 
						||
| 
								 | 
							
								              lastChild = this.element(childNode);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          } else if (isObject(val)) {
							 | 
						||
| 
								 | 
							
								            if (!this.options.ignoreDecorators && this.stringify.convertTextKey && key.indexOf(this.stringify.convertTextKey) === 0) {
							 | 
						||
| 
								 | 
							
								              lastChild = this.element(val);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								              lastChild = this.element(key);
							 | 
						||
| 
								 | 
							
								              lastChild.element(val);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          } else {
							 | 
						||
| 
								 | 
							
								            lastChild = this.element(key, val);
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else if (!this.options.keepNullNodes && text === null) {
							 | 
						||
| 
								 | 
							
								        lastChild = this.dummy();
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {
							 | 
						||
| 
								 | 
							
								          lastChild = this.text(text);
							 | 
						||
| 
								 | 
							
								        } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {
							 | 
						||
| 
								 | 
							
								          lastChild = this.cdata(text);
							 | 
						||
| 
								 | 
							
								        } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {
							 | 
						||
| 
								 | 
							
								          lastChild = this.comment(text);
							 | 
						||
| 
								 | 
							
								        } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {
							 | 
						||
| 
								 | 
							
								          lastChild = this.raw(text);
							 | 
						||
| 
								 | 
							
								        } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && name.indexOf(this.stringify.convertPIKey) === 0) {
							 | 
						||
| 
								 | 
							
								          lastChild = this.instruction(name.substr(this.stringify.convertPIKey.length), text);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          lastChild = this.node(name, attributes, text);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (lastChild == null) {
							 | 
						||
| 
								 | 
							
								        throw new Error("Could not create any elements with: " + name + ". " + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return lastChild;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.insertBefore = function(name, attributes, text) {
							 | 
						||
| 
								 | 
							
								      var child, i, newChild, refChild, removed;
							 | 
						||
| 
								 | 
							
								      if (name != null ? name.type : void 0) {
							 | 
						||
| 
								 | 
							
								        newChild = name;
							 | 
						||
| 
								 | 
							
								        refChild = attributes;
							 | 
						||
| 
								 | 
							
								        newChild.setParent(this);
							 | 
						||
| 
								 | 
							
								        if (refChild) {
							 | 
						||
| 
								 | 
							
								          i = children.indexOf(refChild);
							 | 
						||
| 
								 | 
							
								          removed = children.splice(i);
							 | 
						||
| 
								 | 
							
								          children.push(newChild);
							 | 
						||
| 
								 | 
							
								          Array.prototype.push.apply(children, removed);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          children.push(newChild);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return newChild;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        if (this.isRoot) {
							 | 
						||
| 
								 | 
							
								          throw new Error("Cannot insert elements at root level. " + this.debugInfo(name));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								        removed = this.parent.children.splice(i);
							 | 
						||
| 
								 | 
							
								        child = this.parent.element(name, attributes, text);
							 | 
						||
| 
								 | 
							
								        Array.prototype.push.apply(this.parent.children, removed);
							 | 
						||
| 
								 | 
							
								        return child;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.insertAfter = function(name, attributes, text) {
							 | 
						||
| 
								 | 
							
								      var child, i, removed;
							 | 
						||
| 
								 | 
							
								      if (this.isRoot) {
							 | 
						||
| 
								 | 
							
								        throw new Error("Cannot insert elements at root level. " + this.debugInfo(name));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								      removed = this.parent.children.splice(i + 1);
							 | 
						||
| 
								 | 
							
								      child = this.parent.element(name, attributes, text);
							 | 
						||
| 
								 | 
							
								      Array.prototype.push.apply(this.parent.children, removed);
							 | 
						||
| 
								 | 
							
								      return child;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.remove = function() {
							 | 
						||
| 
								 | 
							
								      var i, ref2;
							 | 
						||
| 
								 | 
							
								      if (this.isRoot) {
							 | 
						||
| 
								 | 
							
								        throw new Error("Cannot remove the root element. " + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								      [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref2 = [])), ref2;
							 | 
						||
| 
								 | 
							
								      return this.parent;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.node = function(name, attributes, text) {
							 | 
						||
| 
								 | 
							
								      var child, ref2;
							 | 
						||
| 
								 | 
							
								      if (name != null) {
							 | 
						||
| 
								 | 
							
								        name = getValue(name);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      attributes || (attributes = {});
							 | 
						||
| 
								 | 
							
								      attributes = getValue(attributes);
							 | 
						||
| 
								 | 
							
								      if (!isObject(attributes)) {
							 | 
						||
| 
								 | 
							
								        ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      child = new XMLElement(this, name, attributes);
							 | 
						||
| 
								 | 
							
								      if (text != null) {
							 | 
						||
| 
								 | 
							
								        child.text(text);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      this.children.push(child);
							 | 
						||
| 
								 | 
							
								      return child;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.text = function(value) {
							 | 
						||
| 
								 | 
							
								      var child;
							 | 
						||
| 
								 | 
							
								      if (isObject(value)) {
							 | 
						||
| 
								 | 
							
								        this.element(value);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      child = new XMLText(this, value);
							 | 
						||
| 
								 | 
							
								      this.children.push(child);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.cdata = function(value) {
							 | 
						||
| 
								 | 
							
								      var child;
							 | 
						||
| 
								 | 
							
								      child = new XMLCData(this, value);
							 | 
						||
| 
								 | 
							
								      this.children.push(child);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.comment = function(value) {
							 | 
						||
| 
								 | 
							
								      var child;
							 | 
						||
| 
								 | 
							
								      child = new XMLComment(this, value);
							 | 
						||
| 
								 | 
							
								      this.children.push(child);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.commentBefore = function(value) {
							 | 
						||
| 
								 | 
							
								      var child, i, removed;
							 | 
						||
| 
								 | 
							
								      i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								      removed = this.parent.children.splice(i);
							 | 
						||
| 
								 | 
							
								      child = this.parent.comment(value);
							 | 
						||
| 
								 | 
							
								      Array.prototype.push.apply(this.parent.children, removed);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.commentAfter = function(value) {
							 | 
						||
| 
								 | 
							
								      var child, i, removed;
							 | 
						||
| 
								 | 
							
								      i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								      removed = this.parent.children.splice(i + 1);
							 | 
						||
| 
								 | 
							
								      child = this.parent.comment(value);
							 | 
						||
| 
								 | 
							
								      Array.prototype.push.apply(this.parent.children, removed);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.raw = function(value) {
							 | 
						||
| 
								 | 
							
								      var child;
							 | 
						||
| 
								 | 
							
								      child = new XMLRaw(this, value);
							 | 
						||
| 
								 | 
							
								      this.children.push(child);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.dummy = function() {
							 | 
						||
| 
								 | 
							
								      var child;
							 | 
						||
| 
								 | 
							
								      child = new XMLDummy(this);
							 | 
						||
| 
								 | 
							
								      return child;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.instruction = function(target, value) {
							 | 
						||
| 
								 | 
							
								      var insTarget, insValue, instruction, j, len;
							 | 
						||
| 
								 | 
							
								      if (target != null) {
							 | 
						||
| 
								 | 
							
								        target = getValue(target);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (value != null) {
							 | 
						||
| 
								 | 
							
								        value = getValue(value);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (Array.isArray(target)) {
							 | 
						||
| 
								 | 
							
								        for (j = 0, len = target.length; j < len; j++) {
							 | 
						||
| 
								 | 
							
								          insTarget = target[j];
							 | 
						||
| 
								 | 
							
								          this.instruction(insTarget);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else if (isObject(target)) {
							 | 
						||
| 
								 | 
							
								        for (insTarget in target) {
							 | 
						||
| 
								 | 
							
								          if (!hasProp.call(target, insTarget)) continue;
							 | 
						||
| 
								 | 
							
								          insValue = target[insTarget];
							 | 
						||
| 
								 | 
							
								          this.instruction(insTarget, insValue);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        if (isFunction(value)) {
							 | 
						||
| 
								 | 
							
								          value = value.apply();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        instruction = new XMLProcessingInstruction(this, target, value);
							 | 
						||
| 
								 | 
							
								        this.children.push(instruction);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.instructionBefore = function(target, value) {
							 | 
						||
| 
								 | 
							
								      var child, i, removed;
							 | 
						||
| 
								 | 
							
								      i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								      removed = this.parent.children.splice(i);
							 | 
						||
| 
								 | 
							
								      child = this.parent.instruction(target, value);
							 | 
						||
| 
								 | 
							
								      Array.prototype.push.apply(this.parent.children, removed);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.instructionAfter = function(target, value) {
							 | 
						||
| 
								 | 
							
								      var child, i, removed;
							 | 
						||
| 
								 | 
							
								      i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								      removed = this.parent.children.splice(i + 1);
							 | 
						||
| 
								 | 
							
								      child = this.parent.instruction(target, value);
							 | 
						||
| 
								 | 
							
								      Array.prototype.push.apply(this.parent.children, removed);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.declaration = function(version, encoding, standalone) {
							 | 
						||
| 
								 | 
							
								      var doc, xmldec;
							 | 
						||
| 
								 | 
							
								      doc = this.document();
							 | 
						||
| 
								 | 
							
								      xmldec = new XMLDeclaration(doc, version, encoding, standalone);
							 | 
						||
| 
								 | 
							
								      if (doc.children.length === 0) {
							 | 
						||
| 
								 | 
							
								        doc.children.unshift(xmldec);
							 | 
						||
| 
								 | 
							
								      } else if (doc.children[0].type === NodeType.Declaration) {
							 | 
						||
| 
								 | 
							
								        doc.children[0] = xmldec;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        doc.children.unshift(xmldec);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return doc.root() || doc;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.dtd = function(pubID, sysID) {
							 | 
						||
| 
								 | 
							
								      var child, doc, doctype, i, j, k, len, len1, ref2, ref3;
							 | 
						||
| 
								 | 
							
								      doc = this.document();
							 | 
						||
| 
								 | 
							
								      doctype = new XMLDocType(doc, pubID, sysID);
							 | 
						||
| 
								 | 
							
								      ref2 = doc.children;
							 | 
						||
| 
								 | 
							
								      for (i = j = 0, len = ref2.length; j < len; i = ++j) {
							 | 
						||
| 
								 | 
							
								        child = ref2[i];
							 | 
						||
| 
								 | 
							
								        if (child.type === NodeType.DocType) {
							 | 
						||
| 
								 | 
							
								          doc.children[i] = doctype;
							 | 
						||
| 
								 | 
							
								          return doctype;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      ref3 = doc.children;
							 | 
						||
| 
								 | 
							
								      for (i = k = 0, len1 = ref3.length; k < len1; i = ++k) {
							 | 
						||
| 
								 | 
							
								        child = ref3[i];
							 | 
						||
| 
								 | 
							
								        if (child.isRoot) {
							 | 
						||
| 
								 | 
							
								          doc.children.splice(i, 0, doctype);
							 | 
						||
| 
								 | 
							
								          return doctype;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      doc.children.push(doctype);
							 | 
						||
| 
								 | 
							
								      return doctype;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.up = function() {
							 | 
						||
| 
								 | 
							
								      if (this.isRoot) {
							 | 
						||
| 
								 | 
							
								        throw new Error("The root node has no parent. Use doc() if you need to get the document object.");
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return this.parent;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.root = function() {
							 | 
						||
| 
								 | 
							
								      var node;
							 | 
						||
| 
								 | 
							
								      node = this;
							 | 
						||
| 
								 | 
							
								      while (node) {
							 | 
						||
| 
								 | 
							
								        if (node.type === NodeType.Document) {
							 | 
						||
| 
								 | 
							
								          return node.rootObject;
							 | 
						||
| 
								 | 
							
								        } else if (node.isRoot) {
							 | 
						||
| 
								 | 
							
								          return node;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          node = node.parent;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.document = function() {
							 | 
						||
| 
								 | 
							
								      var node;
							 | 
						||
| 
								 | 
							
								      node = this;
							 | 
						||
| 
								 | 
							
								      while (node) {
							 | 
						||
| 
								 | 
							
								        if (node.type === NodeType.Document) {
							 | 
						||
| 
								 | 
							
								          return node;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          node = node.parent;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.end = function(options) {
							 | 
						||
| 
								 | 
							
								      return this.document().end(options);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.prev = function() {
							 | 
						||
| 
								 | 
							
								      var i;
							 | 
						||
| 
								 | 
							
								      i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								      if (i < 1) {
							 | 
						||
| 
								 | 
							
								        throw new Error("Already at the first node. " + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return this.parent.children[i - 1];
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.next = function() {
							 | 
						||
| 
								 | 
							
								      var i;
							 | 
						||
| 
								 | 
							
								      i = this.parent.children.indexOf(this);
							 | 
						||
| 
								 | 
							
								      if (i === -1 || i === this.parent.children.length - 1) {
							 | 
						||
| 
								 | 
							
								        throw new Error("Already at the last node. " + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return this.parent.children[i + 1];
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.importDocument = function(doc) {
							 | 
						||
| 
								 | 
							
								      var clonedRoot;
							 | 
						||
| 
								 | 
							
								      clonedRoot = doc.root().clone();
							 | 
						||
| 
								 | 
							
								      clonedRoot.parent = this;
							 | 
						||
| 
								 | 
							
								      clonedRoot.isRoot = false;
							 | 
						||
| 
								 | 
							
								      this.children.push(clonedRoot);
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.debugInfo = function(name) {
							 | 
						||
| 
								 | 
							
								      var ref2, ref3;
							 | 
						||
| 
								 | 
							
								      name = name || this.name;
							 | 
						||
| 
								 | 
							
								      if ((name == null) && !((ref2 = this.parent) != null ? ref2.name : void 0)) {
							 | 
						||
| 
								 | 
							
								        return "";
							 | 
						||
| 
								 | 
							
								      } else if (name == null) {
							 | 
						||
| 
								 | 
							
								        return "parent: <" + this.parent.name + ">";
							 | 
						||
| 
								 | 
							
								      } else if (!((ref3 = this.parent) != null ? ref3.name : void 0)) {
							 | 
						||
| 
								 | 
							
								        return "node: <" + name + ">";
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return "node: <" + name + ">, parent: <" + this.parent.name + ">";
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.ele = function(name, attributes, text) {
							 | 
						||
| 
								 | 
							
								      return this.element(name, attributes, text);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.nod = function(name, attributes, text) {
							 | 
						||
| 
								 | 
							
								      return this.node(name, attributes, text);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.txt = function(value) {
							 | 
						||
| 
								 | 
							
								      return this.text(value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.dat = function(value) {
							 | 
						||
| 
								 | 
							
								      return this.cdata(value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.com = function(value) {
							 | 
						||
| 
								 | 
							
								      return this.comment(value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.ins = function(target, value) {
							 | 
						||
| 
								 | 
							
								      return this.instruction(target, value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.doc = function() {
							 | 
						||
| 
								 | 
							
								      return this.document();
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.dec = function(version, encoding, standalone) {
							 | 
						||
| 
								 | 
							
								      return this.declaration(version, encoding, standalone);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.e = function(name, attributes, text) {
							 | 
						||
| 
								 | 
							
								      return this.element(name, attributes, text);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.n = function(name, attributes, text) {
							 | 
						||
| 
								 | 
							
								      return this.node(name, attributes, text);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.t = function(value) {
							 | 
						||
| 
								 | 
							
								      return this.text(value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.d = function(value) {
							 | 
						||
| 
								 | 
							
								      return this.cdata(value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.c = function(value) {
							 | 
						||
| 
								 | 
							
								      return this.comment(value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.r = function(value) {
							 | 
						||
| 
								 | 
							
								      return this.raw(value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.i = function(target, value) {
							 | 
						||
| 
								 | 
							
								      return this.instruction(target, value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.u = function() {
							 | 
						||
| 
								 | 
							
								      return this.up();
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.importXMLBuilder = function(doc) {
							 | 
						||
| 
								 | 
							
								      return this.importDocument(doc);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.replaceChild = function(newChild, oldChild) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.removeChild = function(oldChild) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.appendChild = function(newChild) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.hasChildNodes = function() {
							 | 
						||
| 
								 | 
							
								      return this.children.length !== 0;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.cloneNode = function(deep) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.normalize = function() {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.isSupported = function(feature, version) {
							 | 
						||
| 
								 | 
							
								      return true;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.hasAttributes = function() {
							 | 
						||
| 
								 | 
							
								      return this.attribs.length !== 0;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.compareDocumentPosition = function(other) {
							 | 
						||
| 
								 | 
							
								      var ref, res;
							 | 
						||
| 
								 | 
							
								      ref = this;
							 | 
						||
| 
								 | 
							
								      if (ref === other) {
							 | 
						||
| 
								 | 
							
								        return 0;
							 | 
						||
| 
								 | 
							
								      } else if (this.document() !== other.document()) {
							 | 
						||
| 
								 | 
							
								        res = DocumentPosition.Disconnected | DocumentPosition.ImplementationSpecific;
							 | 
						||
| 
								 | 
							
								        if (Math.random() < 0.5) {
							 | 
						||
| 
								 | 
							
								          res |= DocumentPosition.Preceding;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          res |= DocumentPosition.Following;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return res;
							 | 
						||
| 
								 | 
							
								      } else if (ref.isAncestor(other)) {
							 | 
						||
| 
								 | 
							
								        return DocumentPosition.Contains | DocumentPosition.Preceding;
							 | 
						||
| 
								 | 
							
								      } else if (ref.isDescendant(other)) {
							 | 
						||
| 
								 | 
							
								        return DocumentPosition.Contains | DocumentPosition.Following;
							 | 
						||
| 
								 | 
							
								      } else if (ref.isPreceding(other)) {
							 | 
						||
| 
								 | 
							
								        return DocumentPosition.Preceding;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return DocumentPosition.Following;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.isSameNode = function(other) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.lookupPrefix = function(namespaceURI) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.isDefaultNamespace = function(namespaceURI) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.lookupNamespaceURI = function(prefix) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.isEqualNode = function(node) {
							 | 
						||
| 
								 | 
							
								      var i, j, ref2;
							 | 
						||
| 
								 | 
							
								      if (node.nodeType !== this.nodeType) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (node.children.length !== this.children.length) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      for (i = j = 0, ref2 = this.children.length - 1; 0 <= ref2 ? j <= ref2 : j >= ref2; i = 0 <= ref2 ? ++j : --j) {
							 | 
						||
| 
								 | 
							
								        if (!this.children[i].isEqualNode(node.children[i])) {
							 | 
						||
| 
								 | 
							
								          return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return true;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.getFeature = function(feature, version) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.setUserData = function(key, data, handler) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.getUserData = function(key) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.contains = function(other) {
							 | 
						||
| 
								 | 
							
								      if (!other) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return other === this || this.isDescendant(other);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.isDescendant = function(node) {
							 | 
						||
| 
								 | 
							
								      var child, isDescendantChild, j, len, ref2;
							 | 
						||
| 
								 | 
							
								      ref2 = this.children;
							 | 
						||
| 
								 | 
							
								      for (j = 0, len = ref2.length; j < len; j++) {
							 | 
						||
| 
								 | 
							
								        child = ref2[j];
							 | 
						||
| 
								 | 
							
								        if (node === child) {
							 | 
						||
| 
								 | 
							
								          return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        isDescendantChild = child.isDescendant(node);
							 | 
						||
| 
								 | 
							
								        if (isDescendantChild) {
							 | 
						||
| 
								 | 
							
								          return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.isAncestor = function(node) {
							 | 
						||
| 
								 | 
							
								      return node.isDescendant(this);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.isPreceding = function(node) {
							 | 
						||
| 
								 | 
							
								      var nodePos, thisPos;
							 | 
						||
| 
								 | 
							
								      nodePos = this.treePosition(node);
							 | 
						||
| 
								 | 
							
								      thisPos = this.treePosition(this);
							 | 
						||
| 
								 | 
							
								      if (nodePos === -1 || thisPos === -1) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return nodePos < thisPos;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.isFollowing = function(node) {
							 | 
						||
| 
								 | 
							
								      var nodePos, thisPos;
							 | 
						||
| 
								 | 
							
								      nodePos = this.treePosition(node);
							 | 
						||
| 
								 | 
							
								      thisPos = this.treePosition(this);
							 | 
						||
| 
								 | 
							
								      if (nodePos === -1 || thisPos === -1) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return nodePos > thisPos;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.treePosition = function(node) {
							 | 
						||
| 
								 | 
							
								      var found, pos;
							 | 
						||
| 
								 | 
							
								      pos = 0;
							 | 
						||
| 
								 | 
							
								      found = false;
							 | 
						||
| 
								 | 
							
								      this.foreachTreeNode(this.document(), function(childNode) {
							 | 
						||
| 
								 | 
							
								        pos++;
							 | 
						||
| 
								 | 
							
								        if (!found && childNode === node) {
							 | 
						||
| 
								 | 
							
								          return found = true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								      if (found) {
							 | 
						||
| 
								 | 
							
								        return pos;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return -1;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLNode.prototype.foreachTreeNode = function(node, func) {
							 | 
						||
| 
								 | 
							
								      var child, j, len, ref2, res;
							 | 
						||
| 
								 | 
							
								      node || (node = this.document());
							 | 
						||
| 
								 | 
							
								      ref2 = node.children;
							 | 
						||
| 
								 | 
							
								      for (j = 0, len = ref2.length; j < len; j++) {
							 | 
						||
| 
								 | 
							
								        child = ref2[j];
							 | 
						||
| 
								 | 
							
								        if (res = func(child)) {
							 | 
						||
| 
								 | 
							
								          return res;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          res = this.foreachTreeNode(child, func);
							 | 
						||
| 
								 | 
							
								          if (res) {
							 | 
						||
| 
								 | 
							
								            return res;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return XMLNode;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  })();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}).call(this);
							 |