bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Установить стандартную тему #658

Closed just-boris closed 8 years ago

just-boris commented 8 years ago

Каждый блок имеет модификатор theme. И во всех примерах он пишется непосредственно к блоку

{
  block: 'button',
  mods: {type: 'submit', theme: 'islands', size: 'l'},
  text: 'Search'
}

Хочу чтобы все контролы в проекте получили тему islands по умолчанию. Как это сделать?

tadatuta commented 8 years ago

При использовании шаблонов можно сделать что-то вроде

block('*').def()(function() {
    this.mods.theme || (this.mods.theme = 'islands');
    return applyNext();
});
just-boris commented 8 years ago

Я все еще пользуюсь dist-сборкой. Куда мне это написать?

just-boris commented 8 years ago

Например, что нужно добавить в этот fiddle: http://jsfiddle.net/z1cLLt4w/9/

vithar commented 8 years ago

Например, можно в postcss оторвать тему совсем и не задавать её в HTML.

just-boris commented 8 years ago

@vithar а что делать если css грузится с yastatic, как в fiddle?

tadatuta commented 8 years ago

твой шаблонизатор не может проставлять дополнительные классы?

just-boris commented 8 years ago

@tadatuta я пользуюсь Handlebars. Куда и как он должен проставлять дополнительные классы?

Еще у меня есть хелпер renderBem

function renderBem(el, bemjson) {
    modules.require(['i-bem__dom', 'BEMHTML'], function(BEMDOM, BEMHTML) {
        BEMDOM.append(el, BEMHTML.apply(bemjson));
    });
}

Могу в него добавить принудительное выставление theme для bemjson: http://jsfiddle.net/z1cLLt4w/12/

Но я не уверен, что так делать правильно

tadatuta commented 8 years ago

Твой вариант с renderBem вполне годный.

just-boris commented 8 years ago

@tadatuta на самом деле нет, потому что он не работает, если у блока в content будут другие блоки.

Может есть способ зарегистрировать общий шаблон из этого коммента?

tadatuta commented 8 years ago

Для диста такая возможность появится после https://github.com/bem/bem-components/issues/1691 (задачу планирую сделать на этой неделе, версию выпустим в обозримом будущем).

just-boris commented 8 years ago

@tadatuta добрый день!

Issue по ссылке уже закрыта, в этой задаче что-нибудь поменялось?

tadatuta commented 8 years ago

@just-boris Ага, прости, что сразу не отписался :(

http://jsfiddle.net/tadatuta/cgx2dz84/1/

just-boris commented 8 years ago

@tadatuta спасибо!

Я правильно понимаю что match всех блоков по * работает только в bemhtml?

А в bh это возможно?

tadatuta commented 8 years ago

Кажется, https://github.com/bem/bh/blob/master/lib/bh.js#L687-L698 должно помочь.

just-boris commented 8 years ago

Помогло. Последний вопрос: правильно ли я делаю, чтобы модификатор ставился только для блока, без элементов?

bh.beforeEach(function(ctx, json) {
    if(json.block && !json.elem) {
        if(!json.mods.size) {
            ctx.mod('size', 'm');
        }
        ctx.mod('theme', 'islands');
    }
});
tadatuta commented 8 years ago

да, в bem-components тема указывается только блокам

just-boris commented 8 years ago

Вопрос решен. Спасибо за советы!