Bemer
Template engine. BEMJSON to HTML processor.
Install / Use
/learn @tenorok/BemerREADME
Bemer — БЭМ-шаблонизатор
БЭМ — это методология эффективной разработки веб-приложений. Большое количество информации размещено на официальном сайте http://ru.bem.info.
Bemer — шаблонизатор, стремящийся идти по пути упрощения работы с БЭМ. Он должен быть очень удобным для разработки малых и средних проектов.
Исходный код шаблонизатора разделён на подробно задокументированные модули с помощью definer.
Рекомендуется использовать bemer совместно с i-bem.
Установка
Bemer доступен в Bower.
bower install bemer
Bemer доступен в NPM.
npm install bemer
Подключение
В браузере
<script src="bower_components/bemer/bemer.min.js"></script>
В Node.js
var bemer = require('bemer');
Форматы данных
Входящие данные
Общепринятым форматом входящих данных для БЭМ-шаблонизаторов является BEMJSON.
Выходящие данные
На выходе bemer возвращает простую HTML-строку, готовую для отображения в браузере.
Получение результата
Единственная переменная, предоставляемая шаблонизатором — bemer и она является функцией, которая принимает на вход один параметр — объект в формате BEMJSON.
Один блок
bemer({ block: 'page' });
Результат:
<div class="page"></div>
Блок с элементами
bemer({
block: 'item',
content: [
{ elem: 'title', content: 'Фотоаппарат' },
{ elem: 'price', content: '14999' }
]
});
Результат:
<div class="item">
<div class="item__title">Фотоаппарат</div>
<div class="item__price">14999</div>
</div>
Оглавление
- Методы
- Функции-помощники
Методы
Метод match
Предназначен для добавления шаблона на одну или несколько БЭМ-сущностей.
В качестве параметров принимает неограниченное количество селекторов на БЭМ-сущности и последним параметром простой объект с полями шаблона.
Возвращает: {bemer}
bemer.match('block1', 'block2', 'blockN', {});
Синтаксис селекторов
По умолчанию для отделения блока от элемента используется двойное подчёркивание: block__element.
А для отделения модификаторов одиночное подчёркивание: block_mod_val.
Примеры селекторов
Блок header:
header
Элемент logo блока header:
header__logo
Блок header с булевым модификатором adaptive:
header_adaptive
Блок header с модификатором theme в значении red:
header_theme_red
Элемент logo блока header с модификатором theme в значении blue:
header_theme_blue__logo
Элемент logo с модификатором size в значении s:
header__logo_size_s
Модификатор у блока и у элемента одновременно:
header_adaptive__logo_size_m
На месте любой части селектора можно записать *, что будет означать произвольное значение.
Примеры селекторов со звёздочкой
Любой блок:
*
Любой элемент блока footer:
footer__*
Любое значение модификатора theme блока footer:
footer_theme_*
Любое значение модификатора size любого элемента блока footer:
footer__*_size_*
Синтаксис полей шаблона
Поля шаблона содержат информацию по шаблонизации. В основе технической реализации лежит помощник создания классов inherit. Шаблон может иметь произвольный набор полей.
Стандартные поля шаблона
Поле construct
Тип: {function}
Поле construct устанавливает конструктор, который вызывается в начале шаблонизации БЭМ-сущности.
Конструктор принимает два параметра:
{object}bemjson— BEMJSON БЭМ-сущности{object}data— данные о БЭМ-сущности в дереве{number}data.index— индекс сущности среди сестринских элементов{number}data.length— количество сестринских элементов, включая текущий{object}[data.context]— информация о контексте родительского блока{string}[data.context.block]— имя родительского блока{object}[data.context.mods]— модификаторы родительского блока{string}[data.context.elem]— имя родительского элемента{object}[data.context.elemMods]— модификаторы родительского элемента
Получение данных о блоке menu из параметров конструктора:
bemer.match('menu', { construct: function(bemjson, data) {
console.log('bemjson:', bemjson);
console.log('data:', data);
}});
bemer({ block: 'menu' });
Вывод:
bemjson: { block: 'menu' }
data: { index: 0, length: 1 }
Кроме того, в this существуют поля bemjson и data, аналогичные параметрам конструктора.
Получение данных об элементе item с булевым модификатором active из полей контекста:
bemer.match('menu__item_active', { construct: function(bemjson, data) {
console.log('bemjson:', this.bemjson);
console.log('data:', this.data);
}});
bemer({ block: 'menu', content: [
{ elem: 'item' },
{ elem: 'item', elemMods: { active: true }},
{ elem: 'item' }
] });
Вывод:
bemjson: {
block: 'menu',
mods: {},
elem: 'item',
elemMods: { active: true }
}
data: {
index: 1,
length: 3,
context: {
block: 'menu',
mods: {}
}
}
Поле tag
Тип: {string} {boolean}
По умолчанию: div
Поле tag устанавливает имя тега.
Блок в представлении тега span:
bemer.match('text', { tag: 'span' });
bemer({ block: 'text' });
<span class="text"></span>
Для указания стандартного тега div может быть использовано значение true.
Для отмены строкового представления тега используется значение false.
При этом вместо текущего тега будет представлено его содержимое:
bemer.match('anonymous', { tag: false });
bemer({ block: 'anonymous', content: { block: 'inner' }});
<div class="inner"></div>
Поле single
Ти
Related Skills
node-connect
347.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
