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.
		
		
		
		
		
			
		
			
				
					299 lines
				
				9.3 KiB
			
		
		
			
		
	
	
					299 lines
				
				9.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								// Generated by CoffeeScript 1.12.7
							 | 
						||
| 
								 | 
							
								(function() {
							 | 
						||
| 
								 | 
							
								  var NodeType, XMLAttribute, XMLElement, XMLNamedNodeMap, XMLNode, getValue, isFunction, isObject, ref,
							 | 
						||
| 
								 | 
							
								    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
							 | 
						||
| 
								 | 
							
								    hasProp = {}.hasOwnProperty;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLNode = require('./XMLNode');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  NodeType = require('./NodeType');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLAttribute = require('./XMLAttribute');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  XMLNamedNodeMap = require('./XMLNamedNodeMap');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  module.exports = XMLElement = (function(superClass) {
							 | 
						||
| 
								 | 
							
								    extend(XMLElement, superClass);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function XMLElement(parent, name, attributes) {
							 | 
						||
| 
								 | 
							
								      var child, j, len, ref1;
							 | 
						||
| 
								 | 
							
								      XMLElement.__super__.constructor.call(this, parent);
							 | 
						||
| 
								 | 
							
								      if (name == null) {
							 | 
						||
| 
								 | 
							
								        throw new Error("Missing element name. " + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      this.name = this.stringify.name(name);
							 | 
						||
| 
								 | 
							
								      this.type = NodeType.Element;
							 | 
						||
| 
								 | 
							
								      this.attribs = {};
							 | 
						||
| 
								 | 
							
								      this.schemaTypeInfo = null;
							 | 
						||
| 
								 | 
							
								      if (attributes != null) {
							 | 
						||
| 
								 | 
							
								        this.attribute(attributes);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (parent.type === NodeType.Document) {
							 | 
						||
| 
								 | 
							
								        this.isRoot = true;
							 | 
						||
| 
								 | 
							
								        this.documentObject = parent;
							 | 
						||
| 
								 | 
							
								        parent.rootObject = this;
							 | 
						||
| 
								 | 
							
								        if (parent.children) {
							 | 
						||
| 
								 | 
							
								          ref1 = parent.children;
							 | 
						||
| 
								 | 
							
								          for (j = 0, len = ref1.length; j < len; j++) {
							 | 
						||
| 
								 | 
							
								            child = ref1[j];
							 | 
						||
| 
								 | 
							
								            if (child.type === NodeType.DocType) {
							 | 
						||
| 
								 | 
							
								              child.name = this.name;
							 | 
						||
| 
								 | 
							
								              break;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLElement.prototype, 'tagName', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.name;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLElement.prototype, 'namespaceURI', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return '';
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLElement.prototype, 'prefix', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return '';
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLElement.prototype, 'localName', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        return this.name;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLElement.prototype, 'id', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLElement.prototype, 'className', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLElement.prototype, 'classList', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(XMLElement.prototype, 'attributes', {
							 | 
						||
| 
								 | 
							
								      get: function() {
							 | 
						||
| 
								 | 
							
								        if (!this.attributeMap || !this.attributeMap.nodes) {
							 | 
						||
| 
								 | 
							
								          this.attributeMap = new XMLNamedNodeMap(this.attribs);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return this.attributeMap;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.clone = function() {
							 | 
						||
| 
								 | 
							
								      var att, attName, clonedSelf, ref1;
							 | 
						||
| 
								 | 
							
								      clonedSelf = Object.create(this);
							 | 
						||
| 
								 | 
							
								      if (clonedSelf.isRoot) {
							 | 
						||
| 
								 | 
							
								        clonedSelf.documentObject = null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      clonedSelf.attribs = {};
							 | 
						||
| 
								 | 
							
								      ref1 = this.attribs;
							 | 
						||
| 
								 | 
							
								      for (attName in ref1) {
							 | 
						||
| 
								 | 
							
								        if (!hasProp.call(ref1, attName)) continue;
							 | 
						||
| 
								 | 
							
								        att = ref1[attName];
							 | 
						||
| 
								 | 
							
								        clonedSelf.attribs[attName] = att.clone();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      clonedSelf.children = [];
							 | 
						||
| 
								 | 
							
								      this.children.forEach(function(child) {
							 | 
						||
| 
								 | 
							
								        var clonedChild;
							 | 
						||
| 
								 | 
							
								        clonedChild = child.clone();
							 | 
						||
| 
								 | 
							
								        clonedChild.parent = clonedSelf;
							 | 
						||
| 
								 | 
							
								        return clonedSelf.children.push(clonedChild);
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								      return clonedSelf;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.attribute = function(name, value) {
							 | 
						||
| 
								 | 
							
								      var attName, attValue;
							 | 
						||
| 
								 | 
							
								      if (name != null) {
							 | 
						||
| 
								 | 
							
								        name = getValue(name);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (isObject(name)) {
							 | 
						||
| 
								 | 
							
								        for (attName in name) {
							 | 
						||
| 
								 | 
							
								          if (!hasProp.call(name, attName)) continue;
							 | 
						||
| 
								 | 
							
								          attValue = name[attName];
							 | 
						||
| 
								 | 
							
								          this.attribute(attName, attValue);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        if (isFunction(value)) {
							 | 
						||
| 
								 | 
							
								          value = value.apply();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (this.options.keepNullAttributes && (value == null)) {
							 | 
						||
| 
								 | 
							
								          this.attribs[name] = new XMLAttribute(this, name, "");
							 | 
						||
| 
								 | 
							
								        } else if (value != null) {
							 | 
						||
| 
								 | 
							
								          this.attribs[name] = new XMLAttribute(this, name, value);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.removeAttribute = function(name) {
							 | 
						||
| 
								 | 
							
								      var attName, j, len;
							 | 
						||
| 
								 | 
							
								      if (name == null) {
							 | 
						||
| 
								 | 
							
								        throw new Error("Missing attribute name. " + this.debugInfo());
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      name = getValue(name);
							 | 
						||
| 
								 | 
							
								      if (Array.isArray(name)) {
							 | 
						||
| 
								 | 
							
								        for (j = 0, len = name.length; j < len; j++) {
							 | 
						||
| 
								 | 
							
								          attName = name[j];
							 | 
						||
| 
								 | 
							
								          delete this.attribs[attName];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        delete this.attribs[name];
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return this;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.toString = function(options) {
							 | 
						||
| 
								 | 
							
								      return this.options.writer.element(this, this.options.writer.filterOptions(options));
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.att = function(name, value) {
							 | 
						||
| 
								 | 
							
								      return this.attribute(name, value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.a = function(name, value) {
							 | 
						||
| 
								 | 
							
								      return this.attribute(name, value);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getAttribute = function(name) {
							 | 
						||
| 
								 | 
							
								      if (this.attribs.hasOwnProperty(name)) {
							 | 
						||
| 
								 | 
							
								        return this.attribs[name].value;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.setAttribute = function(name, value) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getAttributeNode = function(name) {
							 | 
						||
| 
								 | 
							
								      if (this.attribs.hasOwnProperty(name)) {
							 | 
						||
| 
								 | 
							
								        return this.attribs[name];
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.setAttributeNode = function(newAttr) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.removeAttributeNode = function(oldAttr) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getElementsByTagName = function(name) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getAttributeNS = function(namespaceURI, localName) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.removeAttributeNS = function(namespaceURI, localName) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.setAttributeNodeNS = function(newAttr) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.hasAttribute = function(name) {
							 | 
						||
| 
								 | 
							
								      return this.attribs.hasOwnProperty(name);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.hasAttributeNS = function(namespaceURI, localName) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.setIdAttribute = function(name, isId) {
							 | 
						||
| 
								 | 
							
								      if (this.attribs.hasOwnProperty(name)) {
							 | 
						||
| 
								 | 
							
								        return this.attribs[name].isId;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return isId;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.setIdAttributeNS = function(namespaceURI, localName, isId) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.setIdAttributeNode = function(idAttr, isId) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getElementsByTagName = function(tagname) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.getElementsByClassName = function(classNames) {
							 | 
						||
| 
								 | 
							
								      throw new Error("This DOM method is not implemented." + this.debugInfo());
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    XMLElement.prototype.isEqualNode = function(node) {
							 | 
						||
| 
								 | 
							
								      var i, j, ref1;
							 | 
						||
| 
								 | 
							
								      if (!XMLElement.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (node.namespaceURI !== this.namespaceURI) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (node.prefix !== this.prefix) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (node.localName !== this.localName) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (node.attribs.length !== this.attribs.length) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      for (i = j = 0, ref1 = this.attribs.length - 1; 0 <= ref1 ? j <= ref1 : j >= ref1; i = 0 <= ref1 ? ++j : --j) {
							 | 
						||
| 
								 | 
							
								        if (!this.attribs[i].isEqualNode(node.attribs[i])) {
							 | 
						||
| 
								 | 
							
								          return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return true;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return XMLElement;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  })(XMLNode);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}).call(this);
							 |