Skip to content
This repository has been archived by the owner on Feb 6, 2018. It is now read-only.

Support platforms inside block folder #77

Open
awinogradov opened this issue Jul 31, 2016 · 38 comments
Open

Support platforms inside block folder #77

awinogradov opened this issue Jul 31, 2016 · 38 comments

Comments

@awinogradov
Copy link

awinogradov commented Jul 31, 2016

block/@desktop/block.css
block/@touch/block.css
block/block.css

@blond ;)

@blond
Copy link
Member

blond commented Aug 9, 2016

I think we should create new scheme which will support platforms.

I don't want to add this logic in nested scheme.

@vithar
Copy link

vithar commented Nov 17, 2016

I suggest to support

block/block.css
block/[email protected]
block/[email protected]

@qfox
Copy link
Contributor

qfox commented Nov 18, 2016

I'm glad we finally get to the block@platform pattern

@ilyar
Copy link

ilyar commented Feb 24, 2017

Предлагаю вместо специального разделителя строго типизировать суффиксы:

entityName[.planform].techName

Этот путь мене походит на костыль, чем добавление спорного разделителя.

Из обсуждения в Telegram есть возражения:

@vithar: лучше всё же использовать разные сепараторы для платформы и технологии иначе будет невозможно отличить одно от другого...

__ и — это разделители между разными сущностями. А точка используется для отделения имени технологии от имени сущности и для разделения слов внутри имени технологии. Никаких зарезервированных слов сейчас нет и bem-naming или bem-fs-scheme очень простые модули, которые оперируют переданными разделителями. Ты предлагаешь ввести список зарезервированных слов и усложнить логику работы с именем технологии.

К примерам "разделения слов внутри имени" можно отнести .deps.js и .post.css это разделения костыли для простоты, избавляющие от дополнительных действий по настройки подсветки в редакторе.

Думаю будет не слишком большой список, если состарить список специальных расширений (т.н. зарезервированных слов), наличие такого списка нивелирует проблему сложности отличить одно от другого.

@qfox
Copy link
Contributor

qfox commented Feb 25, 2017

@ilyar Перечитал несколько раз так и не понял как ты хочешь решать подсветку в редакторе и чем не нравится @ как разделитель. Сейчас логика простая — всё после первой точки это технология, всё после последней — расширение. Плюс в твоем случае в том, что tech = extension, и нам это понятие будет не нужно, но у нас все инструменты на это завязаны по разным причинам (в т.ч. и по причине подсветки в редакторах), и если делать как ты предлагаешь, то нужно будет эти мелочи решать заново.

@ilyar
Copy link

ilyar commented Feb 27, 2017

Я предлагаю добавить строгости и сказать есть extension = tech у которых могут быть алиасы (для упрощения работы в редакторах):

entityName.deps === entityName.deps.js
entityName.pcss === entityName.post.css (расширение *.pcss не я придумал, например его продукты JetBrains поддерживают)

Еще есть у нас расширение *.ie8.css на данный момент это технология, но это про платформу, но по не известной мотивации мы решили на это не обращать внимание и втулить собаку, выглядит ровно также как собака в PHP, может это мое личное и испорченное восприятие.

Еще для примера давайте взглянем на хорошо известный нам подход к архивам file.tar.gz, а что если так [email protected].

В общем я не предлагаю сильно менять то что есть, а просто добавить немного порядка и общего смысла. В этом прядке, определять платформу станет возможным.

Я понятно объясняю?

@ilyar
Copy link

ilyar commented Feb 27, 2017

Еще уточню, что знание про алиасы или специальный словарь использовать в реализации детекта сущности и ее технологии (при этом не меняется текущее использование .deps.js, .post.css).

Снаружи будет простой и прозрачный интерфейс entityName[.planform].techName.

@ilyar
Copy link

ilyar commented Mar 2, 2017

@zxqfox http://sketchapp.me/scaled-export-masshtabirovannyj-eksport-dlya-ios/ вот тут (в iOS) тоже используют собаку и не морщатся, и, округляя, тоже для платформы

Как по моему так это слабый аргумент.

Сейчас entityName[.techA].techB, допустим разделитель собака т.е. entityName[@platform].techA].techB и возьмем например entityName.ie8.css получается [email protected], еще в дереве проекта это будет сортироваться так:

entityName.css
entityName.js
[email protected]
[email protected]

Как смотрится хорошо?

По мне так не очень.

@qfox
Copy link
Contributor

qfox commented Mar 2, 2017

@ilyar Скорее, [email protected]

p.s. Всё после первой точки это технология, инструменты не умеют [.techA].techB

@ilyar
Copy link

ilyar commented Mar 2, 2017

[email protected] т.е. будет подразумеваться что [email protected]? Не ужели такое бывает?

Всё после первой точки это технология, инструменты не умеют [.techA].techB

Тут смотрел https://github.com/bem-sdk/bem-walk/blob/master/test/schemes/flat/techs.test.js#L35-L47 разве это не умение?

Полагал, что если исходить из entityName[.planform].techName получим:

entityName.css
entityName.desktop.css
entityName.etc.css
entityName.etc.js
entityName.ie8.css
entityName.js

и возможность собирать бандлы desktop, ie8, etc (примерно, понятно что это уже за рамками текущей либы).

@vithar
Copy link

vithar commented Mar 2, 2017 via email

@qfox
Copy link
Contributor

qfox commented Mar 2, 2017

@ilyar Виталя шарит)

@vithar
Copy link

vithar commented Mar 3, 2017

[email protected]

@qfox
Copy link
Contributor

qfox commented Mar 3, 2017

Мне норм оба варианта: [email protected], [email protected] (сейчас у нас entityName.ie8.tech и мне он не норм).

@qfox
Copy link
Contributor

qfox commented Mar 3, 2017

Еще один минус схемы без доп. символа это сортировка:

С точками:                 С собакой:
entityName.css             entityName.css
entityName.desktop.css     entityName.js
entityName.etc.css         [email protected]
entityName.etc.js          [email protected]
entityName.ie8.css         [email protected]
entityName.js              [email protected]

@awinogradov
Copy link
Author

entityName/platform/entityName.tech ?

@vithar
Copy link

vithar commented Mar 5, 2017

Буэ

@awinogradov
Copy link
Author

@vithar ты распиши полный набор всех технологий в плоский список для 3х платформ хотя бы, а потом пиши свое буэ ;)

@vithar
Copy link

vithar commented Mar 5, 2017

Я вполне представляю оба варианта.

@awinogradov
Copy link
Author

Это чудесно, но было полезно увидеть обоснование к буэ) Или это просто личное ощущение?

@qfox
Copy link
Contributor

qfox commented Mar 5, 2017

Думаю, что надо делать так:

# Схема с суффиксами
entityName/entityName.css
entityName/entityName.js
entityName/[email protected]
entityName/[email protected]
entityName/[email protected]
entityName/[email protected]

# Схема с папками
# (ну или без @, но тогда есть вопросы как определять что это платформа, а не хрень)
entityName/entityName.css
entityName/entityName.js
entityName/@desktop-ie8/entityName.css
entityName/@desktop/entityName.css
entityName/@touch/entityName.css
entityName/@touch/entityName.js

@vithar
Copy link

vithar commented Mar 5, 2017

Просто личные ощущения.

@qfox
Copy link
Contributor

qfox commented Mar 5, 2017

С элементами и модификаторами норм?

# Схема с суффиксами
entityName/entityName.css
entityName/entityName.js
entityName/[email protected]
entityName/[email protected]
entityName/[email protected]
entityName/[email protected]
entityName/_mod/entityName_mod_val.css
entityName/_mod/entityName_mod_val.js
entityName/_mod/[email protected]
entityName/_mod/[email protected]
entityName/__elem/entityName__elem.css
entityName/__elem/entityName__elem.js
entityName/__elem/[email protected]
entityName/__elem/[email protected]
entityName/__elem/[email protected]
entityName/__elem/[email protected]
entityName/__elem/_mod/[email protected]
entityName/__elem/_mod/[email protected]

# Схема с папками
entityName/entityName.css
entityName/entityName.js
entityName/@desktop-ie8/entityName.css
entityName/@desktop/entityName.css
entityName/@touch/entityName.css
entityName/@touch/entityName.js
entityName/_mod/entityName_mod_val.css
entityName/_mod/entityName_mod_val.js
entityName/_mod/@touch/entityName_mod_val.css
entityName/_mod/@touch/entityName_mod_val.js
entityName/__elem/entityName__elem.css
entityName/__elem/entityName__elem.js
entityName/__elem/@desktop-ie8/entityName__elem.css
entityName/__elem/@desktop/entityName__elem.css
entityName/__elem/@touch/entityName__elem.css
entityName/__elem/@touch/entityName__elem.js
entityName/__elem/_mod/@touch/entityName__elem_mod_val.css
entityName/__elem/_mod/@touch/entityName__elem_mod_val.js

@awinogradov
Copy link
Author

@zxqfox кажется 🔥

@blond
Copy link
Member

blond commented Mar 9, 2017

@zxqfox ты предлагаешь поддерживать обе схемы?

@gurugray
Copy link

Схема с суффиксами вообще монструозно выглядит же.
А вас не смущает вот это повсеместное дублирование сущностей?

в виде сырого вброса:

# Схема с папками
entityName/#.css
entityName/#.js
entityName/@desktop-ie8/#.css
entityName/@desktop/#.css
entityName/@touch/#.css
entityName/@touch/#.js
entityName/_mod/#_val.css
entityName/_mod/#_val.js
entityName/_mod/@touch/#_val.css
entityName/_mod/@touch/#_val.js
entityName/__elem/#.css
entityName/__elem/#.js
entityName/__elem/@desktop-ie8/#.css
entityName/__elem/@desktop/#.css
entityName/__elem/@touch/#.css
entityName/__elem/@touch/#.js
entityName/__elem/_mod/@touch/#_val.css
entityName/__elem/_mod/@touch/#_val.js

где # — как раз про то, что уже написано в структуре

@qfox
Copy link
Contributor

qfox commented Mar 20, 2017

@gurugray это следующий шаг, я думаю

@gurugray
Copy link

@zxqfox я просто думал это issue про следующий шаг :)

@qfox
Copy link
Contributor

qfox commented Mar 20, 2017

@gurugray Я думаю, что ты этот шаг расширил, и теперь это он и есть)

@voischev
Copy link

voischev commented Apr 6, 2017

Голосую за схему с папками по платформам.

Если прятать платформу в папку с модификатором — наглядность очень сильно страдает имхо.

@tadatuta
Copy link
Member

@qfox
Copy link
Contributor

qfox commented Apr 17, 2017

@tadatuta В виме не работает, как починить?

@awinogradov
Copy link
Author

ping

@kovchiy
Copy link

kovchiy commented May 17, 2017

Вдруг кого-то интересует мнение дизайнера:

Я голосую за вариант BlockName[.platform].tech — у @ilyar хорошие аргументы.

Не забудьте убить кебаб-кейс, пожалуйста. И, мне кажется, что лучше не просто кемлкейс, но и с большой буквы — потому что уже есть bem-react-core да и читается лучше. Наверное, еще в нейминге придется предусмотреть тип технологии:

BlockName.desktop.bemhtml.js
BlockName.desktop.react.js
BlockName.desktop.vue.js

ну и:

BlockName__mod.desktop.js
BlockName__elem_mod.desktop.js

Распихивание по папкам лично для меня неудобно тем, что в табах (моего, не у всех vim) редактора это знание теряется — а имя файла видно всегда и может содержать ту же информацию. Плюс в саблайме, скажем, быстрая навигация по cmd+P с папками, кажется, работать не будет. Плюс меньше нажатий на стрелочки — только вверх-вниз для навигации между файлами блока.

Ну и в целом, по моим наблюдением, на ощущение сложности иерархии влияет ее глубина, а не количество детей в одной ветке.

@belozer
Copy link

belozer commented Jan 24, 2018

@gurugray если я не ошибаюсь, то возможно ты про эту issue #81 говоришь?

@belozer
Copy link

belozer commented Jan 24, 2018

Для интереса попробовал объединить идеи этой ветки и #81.
Взял боевой, а не абстрактный блок. Выбирал "потяжелей". Взял базу + touch + desktop

Такая версия без раскрытия

product
├── @desktop.i18n
├── @touch.i18n
├── __attrs
├── __badge
├── __cart
├── __description
├── __image
├── __image-placeholder
├── __label
├── __link
├── __link-image
├── __packing
├── __price-info
├── __sku
├── __stock
├── __stock-status
├── __subinfo
├── __subinfo-row
├── __title
├── __unit
├── __val
├── __watch-now
├── __weight
├── __wishlist
├── _view
├── i18n
├── @desktop.browser.js
├── @desktop.deps.js
├── @desktop.styles.styl
├── @touch.deps.js
├── @touch.styles.styl
├── bemhtml.js
├── bemtree.js
├── browser.js
├── deps.js
└── styles.styl

Полное дерево блока

product
├── @desktop.i18n
│   └── ru.js
├── @touch.i18n
│   └── ru.js
├── __attrs
│   ├── @desktop.styles.styl
│   └── @touch.deps.js
├── __badge
│   ├── @desktop.styles.styl
│   ├── bemhtml.js
│   └── bemtree.js
├── __cart
│   ├── bemtree.js
│   └── deps.js
├── __description
│   └── bemhtml.js
├── __image
│   ├── @desktop.styl
│   ├── @touch.styles.styl
│   ├── bemhtml.js
│   └── deps.js
├── __image-placeholder
│   ├── bemhtml.js
│   ├── deps.js
│   └── styles.styl
├── __label
│   ├── bemhtml.js
│   └── styles.styl
├── __link
│   ├── @desktop.bemhtml.js
│   ├── @desktop.deps.js
│   ├── @desktop.styles.styl
│   ├── @touch.bemhtml.js
│   ├── @touch.deps.js
│   └── @touch.styles.styl
├── __link-image
│   ├── @desktop.styles.styl
│   ├── @touch.bemtree.js
│   ├── bemhtml.js
│   ├── bemtree.js
│   ├── deps.js
│   └── styles.styl
├── __packing
│   ├── @desktop.bemtree.js
│   ├── @desktop.deps.js
│   ├── @touch.deps.js
│   └── @touchbemtree.js
├── __price-info
│   ├── bemtree.js
│   └── deps.js
├── __sku
│   └── @desktop.styles.styl
├── __stock
│   ├── @desktop.bemhtml.js
│   └── @desktop.styles.styl
├── __stock-status
│   ├── @desktop.styles.styl
│   ├── @touch.styles.styl
│   └── bemtree.js
├── __subinfo
│   ├── @desktop.bemtree.js
│   ├── @desktop.deps.js
│   ├── bemhtml.js
│   ├── deps.js
│   └── styles.styl
├── __subinfo-row
│   └── bemhtml.js
├── __title
│   ├── _view
│   │   └── _single
│   │       └── @touch.styles.styl
│   ├── @desktop.styles.styl
│   ├── @touch.styles.styl
│   └── bemhtml.js
├── __unit
│   ├── bemhtml.js
│   └── deps.js
├── __val
│   ├── bemhtml.js
│   └── styles.styl
├── __watch-now
│   ├── bemtree.js
│   └── deps.js
├── __weight
│   ├── @desktop.bemhtml.js
│   └── @desktop.styl
├── __wishlist
│   ├── bemhtml.js
│   ├── deps.js
│   └── styles.styl
├── _view
│   ├── _flat
│   │   ├── @desktop.bemtree.js
│   │   ├── @desktop.deps.js
│   │   └── @desktop.styles.styl
│   ├── _grid
│   │   ├── @desktop.bemtree.js
│   │   ├── @desktop.deps.js
│   │   └── @desktop.styles.styl
│   ├── _list
│   │   ├── @desktop.bemtree.js
│   │   ├── @desktop.deps.js
│   │   ├── @desktop.styl
│   │   ├── @touch.bemtree.js
│   │   ├── @touch.deps.js
│   │   └── @touch.styles.styl
│   ├── _preview
│   │   ├── @desktop.bemtree.js
│   │   ├── @desktop.deps.js
│   │   ├── @desktop.styles.styl
│   │   ├── @touch.bemtree.js
│   │   ├── @touch.deps.js
│   │   └── @touch.styles.styl
│   ├── _short
│   │   ├── @desktop.bemtree.js
│   │   ├── @desktop.deps.js
│   │   └── @desktop.styles.styl
│   ├── _short-flat
│   │   ├── @touch.bemtree.js
│   │   ├── @touch.deps.js
│   │   └── @touch.styles.styl
│   └── _single
│       ├── @desktop.bemtree.js
│       ├── @desktop.deps.js
│       ├── @desktop.styles.styl
│       ├── @touch.bemtree.js
│       ├── @touch.deps.js
│       ├── @touch.styles.styl
│       ├── bemtree.js
│       └── deps.js
├── i18n
│   └── ru.js
├── @desktop.browser.js
├── @desktop.deps.js
├── @desktop.styles.styl
├── @touch.deps.js
├── @touch.styles.styl
├── bemhtml.js
├── bemtree.js
├── browser.js
├── deps.js
└── styles.styl

35 directories, 107 files

Из плюсов - сразу видно все возможные модификаторы блока, он становится как на ладони. Из минусов пока не знаю... Т.к. в бою такую схему не пробовал ещё.

@belozer
Copy link

belozer commented Jan 24, 2018

Пример CtrlP в vim
image

@belozer
Copy link

belozer commented Jan 25, 2018

Получается такая схема

block/tech
block/@platform.tech
block/_mod/_val/tech
block/_mod/_val/@platrorm.tech
block/__elem/tech
block/__elem/@platform.tech
block/__elem/_mod/_val/tech
block/__elem/_mod/_val/@platform.tech

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

No branches or pull requests

10 participants