GT2/Ejectable/node_modules/xmlbuilder/lib/XMLElement.js

335 lines
9.6 KiB
JavaScript

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