'use strict'; var Node = require('./node'); /** * Initialize a `Attrs` node. * * @api public */ var Attrs = module.exports = function Attrs() { this.attributeNames = []; this.attrs = []; this.attributeBlocks = []; }; // Inherit from `Node`. Attrs.prototype = Object.create(Node.prototype); Attrs.prototype.constructor = Attrs; Attrs.prototype.type = 'Attrs'; /** * Set attribute `name` to `val`, keep in mind these become * part of a raw js object literal, so to quote a value you must * '"quote me"', otherwise or example 'user.name' is literal JavaScript. * * @param {String} name * @param {String} val * @param {Boolean} escaped * @return {Tag} for chaining * @api public */ Attrs.prototype.setAttribute = function(name, val, escaped){ if (name !== 'class' && this.attributeNames.indexOf(name) !== -1) { throw new Error('Duplicate attribute "' + name + '" is not allowed.'); } this.attributeNames.push(name); this.attrs.push({ name: name, val: val, escaped: escaped }); return this; }; /** * Remove attribute `name` when present. * * @param {String} name * @api public */ Attrs.prototype.removeAttribute = function(name){ var err = new Error('attrs.removeAttribute is deprecated and will be removed in v2.0.0'); console.warn(err.stack); for (var i = 0, len = this.attrs.length; i < len; ++i) { if (this.attrs[i] && this.attrs[i].name == name) { delete this.attrs[i]; } } }; /** * Get attribute value by `name`. * * @param {String} name * @return {String} * @api public */ Attrs.prototype.getAttribute = function(name){ var err = new Error('attrs.getAttribute is deprecated and will be removed in v2.0.0'); console.warn(err.stack); for (var i = 0, len = this.attrs.length; i < len; ++i) { if (this.attrs[i] && this.attrs[i].name == name) { return this.attrs[i].val; } } }; Attrs.prototype.addAttributes = function (src) { this.attributeBlocks.push(src); };