Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bemhtml -> bemjson #609

Open
isuvorov opened this issue Sep 26, 2015 · 9 comments
Open

bemhtml -> bemjson #609

isuvorov opened this issue Sep 26, 2015 · 9 comments

Comments

@isuvorov
Copy link

А я могу, каким-то образом получить bemjson, который соотвествует финальной верстке BEMHTML ?

т.е. например из

{
  block: 'widgets',
  content: [
    {
      elem: 'weather',
      content: 4
    }
  ]
}

вот это

{
  block: 'widgets',
  tag:"div",
  attrs: {
     class: "widgets i-bem",
     "data-bem": '{ "weather": { "id": 4321 } }'
  },
  content: [
    {
      elem: 'weather',  
      tag:"span",
      attrs: {
        class:"widgets__weather"
      },
      content: 4
    }
  ]
}
@Guria
Copy link

Guria commented Sep 26, 2015

Да, для этого существует bemtree.

@isuvorov
Copy link
Author

@Guria, хорошо, как это сделать на bemtree ?

Bemtree не генерирует мне теги, классы, и параметры ibem'а

@voischev
Copy link

@isuvorov Можно получить полный json по собранному html например с помощью этого) https://github.com/bem-incubator/html2bemjson там будет бэм сущности но не будет тега div так как он по умолчанию в BEMJSON

Или с помощью PostHTML https://github.com/posthtml/posthtml
Там будет полное дерево похожее на bemjson...
input HTML

<a class="animals" href="#">
    <span class="animals__cat" style="background: url(cat.png)">Cat</span>
</a>

Tree in PostHTML

[{
    tag: 'a',
    attrs: {
        class: 'animals',
        href: '#'
    },
    content: [{
        tag: 'span',
        attrs: {
            class: 'animals__cat',
            style: 'background: url(cat.png)'
        },
        content: ['Cat']
    }]
}]

Как видишь есть бэм классы. Но нет бэм сущностей в дереве. Но можно быстренько плагин для этого написать

@isuvorov
Copy link
Author

@voischev да, тоже думал об этом. но мне кажется не правильно собирать из JSON'а строку, и потом эту строку обратно парсить в JSON.

А по поводу posthtml, круто! только сегодня его увидел, читаю

@Guria
Copy link

Guria commented Sep 26, 2015

Простите был не внимателен

@isuvorov
Copy link
Author

isuvorov commented Oct 4, 2015

Разобрался, как это можно сделать в рамках БЭМа:

создал у себя в блоках
i-bem/i-bem.bemhtml

там переписал, как мне нужно
match()
def()

@tadatuta
Единственное не понял, каким образом я могу заглушить ваш вызов oninit() ?
Или каким образом я могу получить изначальный exports.apply https://github.com/bem/bem-core/blob/v2/common.blocks/i-bem/i-bem.bemhtml#L251

@tadatuta
Copy link
Member

tadatuta commented Oct 4, 2015

Получится же i-bem.bemtree один в один?

@isuvorov
Copy link
Author

isuvorov commented Oct 4, 2015

Похоже, но должен вести себя как bemhtml, но apply не в строку, а в объект

  1. синхронно
  2. формирование,
    ctx.tag
    ctx.attrs.class
    ctx.jsAttrs
    как в bemhtml
  3. использовать все шаблоны bemhtml

Но по сути, я просто скомбинировал код bemtree, bemhtml
Вот, что у меня получилось https://gist.github.com/isuvorov/4d516eeec2a7b57b07a3

@tadatuta
Copy link
Member

tadatuta commented Oct 4, 2015

@isuvorov Кмк, нет смысла пытаться реализовать это под названием bemhtml, это другая технология. Ее имеет смысл создавать отдельно.
Хотя вариант с тем, чтобы получать BEMJSON и результирующего HTML, кмк, гораздо проще в реализации (и уже готов ;))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants