Option name | Type | Description |
---|---|---|
el | Element | DOM element where attribute is attached |
name | String | Optional name of the attribute, usually supplied by subclass via |
An absctract class for parsing and validation of element attributes.
Subclasses should define methods attrName
, parse
, validate
and render
.
function Attribute(el, name) {
this.name = name || this.attrName();
this.el = el;
// attribute node
this.node = el.attributes[this.name];
}
_.extend(Attribute, {
remove: Attribute$$remove
});
####Attribute instance methods####
The following instance methods should be defined by subclass
_.extendProto(Attribute, {
get: Attribute$get,
set: Attribute$set,
remove: Attribute$remove,
decorate: Attribute$decorate,
destroy: Attribute$destroy,
// should be defined in subclass
attrName: toBeImplemented,
parse: toBeImplemented,
validate: toBeImplemented,
render: toBeImplemented
});
function Attribute$$remove(el, deep) {
var name = this.prototype.attrName();
el.removeAttribute(name);
if (deep) {
var selector = '[' + name + ']';
var children = el.querySelectorAll(selector);
_.forEach(children, function(childEl) {
childEl.removeAttribute(name);
});
}
}
function Attribute$remove() {
delete this.node;
}
function Attribute$destroy() {
delete this.el;
delete this.node;
}
Attribute instance method that returns attribute value as string.
function Attribute$get() {
return this.el.getAttribute(this.name);
}
Option name | Type | Description |
---|---|---|
value | String |
Attribute instance method that sets attribute value.
function Attribute$set(value) {
this.el.setAttribute(this.name, value);
}
Attribute instance method that decorates element with its rendered value.
Uses render
method that should be defiend in subclass.
function Attribute$decorate() {
this.set(this.render());
}
function toBeImplemented() {
throw new Error('calling the method of an absctract class');
}