bem.js 875 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. /**
  2. * bem helper
  3. * b() // 'button'
  4. * b('text') // 'button__text'
  5. * b({ disabled }) // 'button button--disabled'
  6. * b('text', { disabled }) // 'button__text button__text--disabled'
  7. * b(['disabled', 'primary']) // 'button button--disabled button--primary'
  8. */
  9. function gen(name, mods) {
  10. if (!mods) {
  11. return '';
  12. }
  13. if (typeof mods === 'string') {
  14. return " " + name + "--" + mods;
  15. }
  16. if (Array.isArray(mods)) {
  17. return mods.reduce(function (ret, item) {
  18. return ret + gen(name, item);
  19. }, '');
  20. }
  21. return Object.keys(mods).reduce(function (ret, key) {
  22. return ret + (mods[key] ? gen(name, key) : '');
  23. }, '');
  24. }
  25. export function createBEM(name) {
  26. return function (el, mods) {
  27. if (el && typeof el !== 'string') {
  28. mods = el;
  29. el = '';
  30. }
  31. el = el ? name + "__" + el : name;
  32. return "" + el + gen(el, mods);
  33. };
  34. }