es6 i-bem implementation (with classes, w/o imports)
- Скопировать основные части из файлов i-bem.js и i-bem__dom.js (объекты из decl'ов)
- Перегнать в es6-формат (убрать function'ы, обернуть в
class ... extends ... {}
, добавитьstatic
'и) - Соединить всё вместе, проэкспортировать классы, унаследовать iBemDom <- iBem <- iObservable
- запустить, начать поиск недостающих фрагментов и багов
- добавить глобальные переменные
- добавить
this.__self
- осознать что нужно сделать с
__base
(перегнать вsuper.названиеМетода
) - добавить
iBem
вBEM
, иiBemDom
вBEM.DOM
- заменить decl на примитивный es6decl,
в котором, например, производится добавление блоков в
BEM.blocks
, который нужен, например, для инстанцирования бездомных блоков (BEM.create
) - починить
BEM.DOM.scope
- починить
$('.preview2').bem('preview2')
иinitBlock
- разработать принцип для конвертора
this.__base()
вsuper.названиеМетода()
- понять, почему выстявляется
iBemDom#_params
, но неparams
- ...
- разработать принцип для конвертора
this.foo()...__base().bar()...
вthis.foo()...; super.названиеМетода(); this.bar()...
- дописать конвертор для перегона
__base
вsuper.названиеМетода
(#конвертор_проекта) - ... починить сотни других багов ...
- понять, что делать с
decl({block, modName, modVal})
. пока есть лишь примерное понимание, как это будет работать - понять, что делать с live секцией
- засунуть в конструктор
onSetMod.js
, написать #конвертор_проекта - понять что делать с
onSetMod:{}
- попробовать творение франкенштейна на сконверченных частях реального i-bem проекта
- ...
- ...
- ...
- померить производительность
- рассказать всем об успехе
- внедрить в продакшен
См. сокращённый пример одного estree файла.
def walk(f): . as $in | if type == "object" then reduce keys[] as $key ( {}; . + { ($key): ($in[$key] | walk(f)) } ) | f elif type == "array" then map( walk(f) ) | f else f end;
.
| walk(
if (.type?//"")=="MethodDefinition" then (
. as $md | .key.name as $mn | $md
| walk(if (.type?//"") == "MemberExpression" then (
if .property.name == "__base"
then . as $mem | .property.name |= $mn
else . end
) else . end)
) else . end
)
| ( ..
| select(.type=="MethodDefinition")? | ..
| select(.type == "MemberExpression")? | ..
| select(.object.type == "ThisExpression")
| .object.type
) = "Super"