Войти с помощью github
Форум /

По мотивам https://github.com/bem/bem-bl/issues/313.
Предикаты в BEMHTML описываются некоторым семантическим сахаром, позволяющим, легко, но достаточно бедно выбирать узлы bemjson дерева. Более того, они имеют хоть и простой, но свой собственный синтаксис.

А ведь в web уже давно есть способ выбирать элементы дерева - CSS. Давайте попробуем описывать предикаты в BEMHTML с помощью CSS селекторов.

Новый (или дополнительный) синтаксис, я вижу таким.
block.b-test {
/* блок b-test */
}

block.b-test[modname='modval'] {
/* блок b-test с модификатором modname=modval */
}

block.b-test[attrname='val'] {
/* блок b-test с полем attrname=val */
}

block.b-test elem.item {
/* элементы item блока b-test */
}

block.b-test elem.item[modname='eq'] {
/* элементы item у которого модификатор modname=eq , блока b-test */
}

block.b-test[modname='modval'] elem.item[modname='eq'] {
/* элементы item у которого модификатор modname=eq , блока b-test, у которого модификатор modname='modval' */
}

block.b-test elem.* {
/* все элементы блока */
}

block.* {
/* все блоки */

}

Можно даже эти варианты упростить
.b-test {
/* .b-test */
}

.b-test[modname='modval'] {
/* блок b-test с модификатором modname=modval */
}

.b-test_modname_modval {
/* блок b-test с модификатором modname=modval */
}

.b-test[attrname='val'] {
/* блок b-test с полем attrname=val */
}

.b-test__item {
/* элементы item блока b-test */
}

.b-test__item_modname_eq {
/* элементы item у которого модификатор modname=eq , блока b-test */
}

CSS селекторы достаточно мощны, при этом декларативны, при этом очень многим понятны.
Более сложны варианты можно посмотреть в оригинальной ветке обсуждения.



Как вам такой вариант записи?