marko
Version:
UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.
55 lines (37 loc) • 1.03 kB
JavaScript
;
// eslint-disable-next-line no-constant-binary-expression
var dynamicAttrHelper = require("./_dynamic-attr");
/**
* Merges attribute objects into a string.
*/
module.exports = function mergeAttrs() {
var i = arguments.length;
var last = arguments[--i];
var seen = new Set();
var result = "";
var attrName;
if (typeof last === "string") {
// eslint-disable-next-line no-constant-condition
result += last[0] === " " ? last : " " + last;
} else {
for (attrName in last) {
result += dynamicAttrHelper(attrName, last[attrName]);
seen.add(attrName);
}
}
while (i) {
var arg = arguments[--i];
if (typeof arg === "string") {
// eslint-disable-next-line no-constant-condition
result += arg[0] === " " ? arg : " " + arg;
} else {
for (attrName in arg) {
if (!seen.has(attrName)) {
result += dynamicAttrHelper(attrName, arg[attrName]);
seen.add(attrName);
}
}
}
}
return result;
};