yandex-ui/nanoislands

Некорректно выставляется класс на обёртку попапа

i2r opened this issue · 2 comments

i2r commented
  1. В методе _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 Из-за этого, попап выглядит корректно только при первом открытии, а при последующих ломается.

  2. В методе _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.

i2r commented

Регулярку можно исправить, например, на такую: /[^_]_(?!_)/

'block__elem'.split(/[^_]_(?!_)/)
["block__elem"]

При её использовании могут получаться некорректные части, но она точно отдаёт последний модификатор и не матчится на разделитель элемента:

'block__elem'.split(/[^_]_(?!_)/)
["block__elem"]

'block__elem_mod'.split(/[^_]_(?!_)/)
["block__ele", "mod"]

v0.6.11