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

Упрощённый синтаксис для declMod #1564

Open
belozer opened this issue Apr 13, 2018 · 11 comments
Open

Упрощённый синтаксис для declMod #1564

belozer opened this issue Apr 13, 2018 · 11 comments

Comments

@belozer
Copy link
Member

belozer commented Apr 13, 2018

Предлагаемый

Imager.declMod('upload', props, staticProps)
Imager.declMod('upload', '*', props, staticProps)
Imager.declMod('upload', 'auto', props, staticProps)

Текущий

Imager.declMod({ modName : 'upload'  }, props, staticProps)
Imager.declMod({ modName : 'upload', modVal : '*' }, props, staticProps)
Imager.declMod({ modName : 'upload', modVal : 'auto' }, props, staticProps)

По аналогии с элементами

bemDom.declElem('block', 'elem', props, staticProps)
@belozer
Copy link
Member Author

belozer commented Apr 13, 2018

@veged @vithar @tadatuta @zxqfox что думаете на этот счёт?

@belozer
Copy link
Member Author

belozer commented Apr 13, 2018

В качестве переходного периода можно реализовать новую версию и сохранить старую (до мажора).

@veged
Copy link
Member

veged commented Apr 13, 2018

в принципе можно было б сделать и «паттерн матчинг» по типу аргументов и сделать оба варианта совместимыми, но я предложил бы подождать голосов «👍»

@belozer
Copy link
Member Author

belozer commented Apr 14, 2018

@veged а чем тебе не нравится вариант declMod(name, val, props, staticProps)?
Вроде избавляет от излишнего префикса mod в декларации, но и также добавляет больше однородности в синтаксис decl*.

Хотя интересен ещё вариант из bem-react-core

Imager.declMod({ upload : true }, props, staticProps
Imager.declMod({ upload : '*' }, props, staticProps)
Imager.declMod({ upload : 'auto' }, props, staticProps)

@qfox
Copy link
Member

qfox commented Apr 16, 2018

Давай тогда полностью: declMod('mod').declVal('val')...declProps(...)

Кстати, ты пробовал это сделать доопределением? Сильно удобнее стало? Кажется, что пользы будет не много.

@belozer
Copy link
Member Author

belozer commented Apr 16, 2018

@zxqfox declMod это api BemEntity в bem-core-4
bem
declBlock|declElem -> BemEntity

BemEntity
declMod

https://github.com/bem/bem-core/blob/v4/common.blocks/i-bem/i-bem.vanilla.js#L438

Речь просто о синтаксисе, чтобы не дублировать постоянно mod

@qfox
Copy link
Member

qfox commented Apr 19, 2018

Так ты пробовал?

@belozer
Copy link
Member Author

belozer commented Apr 19, 2018

Пробовал. И потом с каждым новым модификатором начинал интуитивно так писать (вместо текущего стиля).
Переводить проект не решился, т.к. это не мейнстрим, но в качестве идеи решил завести таску для обсуждения.

Использование префиксов вполне понятно до 4-й версии decl({ modName : 'mod', modName : 'val' }).

Но история с текущей декларацией не первый раз уже вызывает сомнения.
declMod({ modName : 'mod', modName : 'val' }) из api и так понятно что мы декларируем модификатор. Зачем префиксы? Непонятна причина, по которой они остались.

На данный момент вижу 3 альтернативы как могли бы выглядеть декларации модификаторов:

declMod({ name : 'my-mod', val : 'val' }, ...) // просто без префикса
declMod('my-mod', 'val', ...) // по типу с декларациями элементов
declMod({ 'my-mod' : 'val' }, ...) // по типу bem-react-core

Самому нравится по типу элементов и в react стиле.

upd

Заменили ведь decl({ block : 'block', elem : 'elem' }, ...) на declElem('block', 'elem', ...).

@qfox
Copy link
Member

qfox commented Apr 24, 2018

Я не знаю, конечно, слишком мало экспертизы, но рискую предположить, что стоит выработать 1 (ОДНО, О Д Н О) решение для bem-core, bem-react-core, bem-xjst, etc. и везде им пользоваться.

@belozer
Copy link
Member Author

belozer commented Apr 25, 2018

@zxqfox в этом я тебя поддерживаю и обоими руками за ⚡

@belozer
Copy link
Member Author

belozer commented Apr 25, 2018

Всё конечно однородным не сделать, но максимально (где возможно) сблизить можно

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

No branches or pull requests

3 participants