bem.pug 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. //- bem.pug
  2. //- Базовый миксин для блоков и элементов
  3. mixin b(blockName, elemName)
  4. - var className = blockName
  5. - var twClasses = attributes.tw || ''
  6. - var otherClasses = attributes.class || ''
  7. if elemName
  8. - className += '__' + elemName
  9. //- Обработка модификаторов
  10. if attributes.mod
  11. - className += ' ' + blockName + '--' + attributes.mod
  12. if attributes.mods
  13. each mod in attributes.mods.split(',')
  14. - className += ' ' + blockName + '--' + mod.trim()
  15. //- Собираем финальный класс
  16. - var finalClass = [className, twClasses, otherClasses].filter(Boolean).join(' ')
  17. //- Удаляем обработанные атрибуты
  18. - attributes.tw = null
  19. - attributes.mod = null
  20. - attributes.mods = null
  21. - attributes.class = null
  22. //- Генерация элемента
  23. if block
  24. div(class=finalClass)&attributes(attributes)
  25. block
  26. else
  27. div(class=finalClass)&attributes(attributes)
  28. //- Миксин для элементов (альтернативный синтаксис)
  29. mixin e(blockName, elemName)
  30. +b(blockName, elemName)&attributes(attributes)
  31. block