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); |