Некорректно выставляется класс на обёртку попапа
i2r opened this issue · 2 comments
-
В методе
_create
(https://github.com/yandex-ui/nanoislands/blob/master/blocks/popup/popup.js#L112-L117) мы вычисляем с помощью функции_getUIDialogExtraClass
класс и сохраняем вoptions.dialogClass
виджета. Сразу после создания попап открывается с корректно выставленным классом. Но, при повторном открытии, мы затираем вычисленный класс в методе_move
наноблока: https://github.com/yandex-ui/nanoislands/blob/master/blocks/popup/popup.js#L761 Из-за этого, попап выглядит корректно только при первом открытии, а при последующих ломается. -
В методе
_getUIDialogExtraClass
использована некорректная регулярка/\w+\_(?!_)/
(https://github.com/yandex-ui/nanoislands/blob/master/blocks/popup/popup.js#L462) — она заматчится и на элемент без модификатора, чего, судя по комментариям, хотелось избежать. Пример:
'block__elem'.split(/\w+\_(?!_)/)
["", "elem"]
В итоге для попапа с классами block__elem
и block__elem_mod
будут сгенерированы два класса outer_elem
и outer_mod
.
Регулярку можно исправить, например, на такую: /[^_]_(?!_)/
'block__elem'.split(/[^_]_(?!_)/)
["block__elem"]
При её использовании могут получаться некорректные части, но она точно отдаёт последний модификатор и не матчится на разделитель элемента:
'block__elem'.split(/[^_]_(?!_)/)
["block__elem"]
'block__elem_mod'.split(/[^_]_(?!_)/)
["block__ele", "mod"]
v0.6.11