var _ = require("underscore"); exports.topLevelElement = topLevelElement; exports.elements = elements; exports.element = element; function topLevelElement(tagName, attributes) { return elements([element(tagName, attributes, {fresh: true})]); } function elements(elementStyles) { return elementStyles.map(function(elementStyle) { if (_.isString(elementStyle)) { return element(elementStyle); } else { return elementStyle; } }); } function element(tagName, attributes, options) { options = options || {}; return new Element(tagName, attributes, options); } function Element(tagName, attributes, options) { var tagNames = {}; if (_.isArray(tagName)) { tagName.forEach(function(tagName) { tagNames[tagName] = true; }); tagName = tagName[0]; } else { tagNames[tagName] = true; } this.tagName = tagName; this.tagNames = tagNames; this.attributes = attributes || {}; this.fresh = options.fresh; } Element.prototype.matchesElement = function(element) { return this.tagNames[element.tagName] && _.isEqual(this.attributes || {}, element.attributes || {}); }; exports.empty = elements([]);