123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- // Generated by CoffeeScript 2.4.1
- (function() {
- var NodeType, XMLAttribute, XMLElement, XMLNamedNodeMap, XMLNode, getValue, isFunction, isObject,
- hasProp = {}.hasOwnProperty;
- ({isObject, isFunction, getValue} = require('./Utility'));
- XMLNode = require('./XMLNode');
- NodeType = require('./NodeType');
- XMLAttribute = require('./XMLAttribute');
- XMLNamedNodeMap = require('./XMLNamedNodeMap');
- // Represents an element of the XML document
- module.exports = XMLElement = (function() {
- class XMLElement extends XMLNode {
- // Initializes a new instance of `XMLElement`
- // `parent` the parent node
- // `name` element name
- // `attributes` an object containing name/value pairs of attributes
- constructor(parent, name, attributes) {
- var child, j, len, ref;
- super(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);
- }
- // set properties if this is the root node
- if (parent.type === NodeType.Document) {
- this.isRoot = true;
- this.documentObject = parent;
- parent.rootObject = this;
- // set dtd name
- if (parent.children) {
- ref = parent.children;
- for (j = 0, len = ref.length; j < len; j++) {
- child = ref[j];
- if (child.type === NodeType.DocType) {
- child.name = this.name;
- break;
- }
- }
- }
- }
- }
- // Creates and returns a deep clone of `this`
- clone() {
- var att, attName, clonedSelf, ref;
- clonedSelf = Object.create(this);
- // remove document element
- if (clonedSelf.isRoot) {
- clonedSelf.documentObject = null;
- }
- // clone attributes
- clonedSelf.attribs = {};
- ref = this.attribs;
- for (attName in ref) {
- if (!hasProp.call(ref, attName)) continue;
- att = ref[attName];
- clonedSelf.attribs[attName] = att.clone();
- }
- // clone child nodes
- clonedSelf.children = [];
- this.children.forEach(function(child) {
- var clonedChild;
- clonedChild = child.clone();
- clonedChild.parent = clonedSelf;
- return clonedSelf.children.push(clonedChild);
- });
- return clonedSelf;
- }
- // Adds or modifies an attribute
- // `name` attribute name
- // `value` attribute value
- attribute(name, value) {
- var attName, attValue;
- if (name != null) {
- name = getValue(name);
- }
- if (isObject(name)) { // expand if object
- 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;
- }
- // Removes an attribute
- // `name` attribute name
- removeAttribute(name) {
- var attName, j, len;
- // Also defined in DOM level 1
- // removeAttribute(name) removes an attribute by name.
- if (name == null) {
- throw new Error("Missing attribute name. " + this.debugInfo());
- }
- name = getValue(name);
- if (Array.isArray(name)) { // expand if array
- for (j = 0, len = name.length; j < len; j++) {
- attName = name[j];
- delete this.attribs[attName];
- }
- } else {
- delete this.attribs[name];
- }
- return this;
- }
- // Converts the XML fragment to string
- // `options.pretty` pretty prints the result
- // `options.indent` indentation for pretty print
- // `options.offset` how many indentations to add to every line for pretty print
- // `options.newline` newline sequence for pretty print
- // `options.allowEmpty` do not self close empty element tags
- toString(options) {
- return this.options.writer.element(this, this.options.writer.filterOptions(options));
- }
- // Aliases
- att(name, value) {
- return this.attribute(name, value);
- }
- a(name, value) {
- return this.attribute(name, value);
- }
- // DOM Level 1
- getAttribute(name) {
- if (this.attribs.hasOwnProperty(name)) {
- return this.attribs[name].value;
- } else {
- return null;
- }
- }
- setAttribute(name, value) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- getAttributeNode(name) {
- if (this.attribs.hasOwnProperty(name)) {
- return this.attribs[name];
- } else {
- return null;
- }
- }
- setAttributeNode(newAttr) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- removeAttributeNode(oldAttr) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- getElementsByTagName(name) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- // DOM Level 2
- getAttributeNS(namespaceURI, localName) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- setAttributeNS(namespaceURI, qualifiedName, value) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- removeAttributeNS(namespaceURI, localName) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- getAttributeNodeNS(namespaceURI, localName) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- setAttributeNodeNS(newAttr) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- getElementsByTagNameNS(namespaceURI, localName) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- hasAttribute(name) {
- return this.attribs.hasOwnProperty(name);
- }
- hasAttributeNS(namespaceURI, localName) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- // DOM Level 3
- setIdAttribute(name, isId) {
- if (this.attribs.hasOwnProperty(name)) {
- return this.attribs[name].isId;
- } else {
- return isId;
- }
- }
- setIdAttributeNS(namespaceURI, localName, isId) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- setIdAttributeNode(idAttr, isId) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- // DOM Level 4
- getElementsByTagName(tagname) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- getElementsByTagNameNS(namespaceURI, localName) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- getElementsByClassName(classNames) {
- throw new Error("This DOM method is not implemented." + this.debugInfo());
- }
- isEqualNode(node) {
- var i, j, ref;
- if (!super.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, ref = this.attribs.length - 1; (0 <= ref ? j <= ref : j >= ref); i = 0 <= ref ? ++j : --j) {
- if (!this.attribs[i].isEqualNode(node.attribs[i])) {
- return false;
- }
- }
- return true;
- }
- };
- // DOM level 1
- Object.defineProperty(XMLElement.prototype, 'tagName', {
- get: function() {
- return this.name;
- }
- });
- // DOM level 4
- 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;
- }
- });
- return XMLElement;
- }).call(this);
- }).call(this);
|