bem / bh

BH template engine
http://bem.github.io/bh/
MIT License
68 stars 31 forks source link

Support for Number mods values #165

Open golyshevd opened 8 years ago

golyshevd commented 8 years ago

see details in commit

The modifier serializes to class well, but template does not match

+ expected - actual

      -<h1 class="title title_level_2"></h1>
      +<h2 class="title title_level_2"></h2>
golyshevd commented 8 years ago

@remnev @truerenton

qfox commented 8 years ago

:+1: Yeah, looks like it should.

qfox commented 8 years ago

https://github.com/bem/bh/blob/master/lib/bh.js#L822-L831

To fix that you need:

                     if (decl.elemMod) {
                         conds.push(
                             'json.elemMods && json.elemMods["' + decl.elemMod + '"] === ' +
-                                (decl.elemModVal === true || '"' + decl.elemModVal + '"'));
+                                (decl.elemModVal === true || Number(decl.elemModVal) || '"' + decl.elemModVal + 
                     }
                     if (decl.blockMod) {
                         conds.push(
                             'json.mods && json.mods["' + decl.blockMod + '"] === ' +
-                                (decl.blockModVal === true || '"' + decl.blockModVal + '"'));
+                                (decl.blockModVal === true || Number(decl.blockModVal) || '"' + decl.blockModVal + '"'));
                     }

Or something similar.

remnev commented 8 years ago

I'll be fixing, ok?

mishanga commented 8 years ago

В целом задача выглядит синтетической. В приведенном примере не может быть больше 7 значений модификатора, и их можно выразить через ctx.tag('h' + (ctx.mod('level') || 1)). Использование численных модификаторов почти всегда говорит о неправильной архитектуре блока.

golyshevd commented 8 years ago

Если говорить о конкретном блоке, то я не захотел писать как ты, а написал 7 шаблонов для каждого модификатора чтобы не генерировать название тега и случайно на такое наткнулся. Лично мне показалось абсолютно безобидным то, что значение модификатора является числом