easy-bem
Version:
Easy BEM class name generator
56 lines (47 loc) • 1.39 kB
JavaScript
;
/**
* BEM class name factory.
*
* @typedef {Function} Bem
* @param {String|Object} [elementOrMods] Element name or hash object with mods
* @param {Object} [mods] Hash object with mods
* @returns {String}
*/
/**
* Returns BEM class name factory.
*
* @param {String} componentName Block name
* @returns {Bem}
*/
module.exports = function bem(componentName) {
return function (elementOrMods, mods) {
if (!elementOrMods) {
return componentName;
}
var element;
if (typeof elementOrMods === 'string') {
element = elementOrMods;
} else {
mods = elementOrMods;
}
var base = componentName;
if (element) {
base += '__' + element;
}
return base + (
mods
? Object.keys(mods).reduce(function (result, name) {
var value = mods[name];
if (value) {
result += ' ' + (
typeof value === 'boolean'
? (base + '--' + name)
: (base + '--' + name + '_' + value)
);
}
return result;
}, '')
: ''
);
};
}