/** * Basic wrapper for DOM element. * @constructor * @param {String} name Tag name of the element * @param {Object} config Set of parameters to initialize element with */ jvm.AbstractElement = function(name, config){ /** * Underlying DOM element * @type {DOMElement} * @private */ this.node = this.createElement(name); /** * Name of underlying element * @type {String} * @private */ this.name = name; /** * Internal store of attributes * @type {Object} * @private */ this.properties = {}; if (config) { this.set(config); } }; /** * Set attribute of the underlying DOM element. * @param {String} name Name of attribute * @param {Number|String} config Set of parameters to initialize element with */ jvm.AbstractElement.prototype.set = function(property, value){ var key; if (typeof property === 'object') { for (key in property) { this.properties[key] = property[key]; this.applyAttr(key, property[key]); } } else { this.properties[property] = value; this.applyAttr(property, value); } }; /** * Returns value of attribute. * @param {String} name Name of attribute */ jvm.AbstractElement.prototype.get = function(property){ return this.properties[property]; }; /** * Applies attribute value to the underlying DOM element. * @param {String} name Name of attribute * @param {Number|String} config Value of attribute to apply * @private */ jvm.AbstractElement.prototype.applyAttr = function(property, value){ this.node.setAttribute(property, value); }; jvm.AbstractElement.prototype.remove = function(){ jvm.$(this.node).remove(); };