История изменений
3.1.0
В релиз вошли следующие исправления ошибок
Исправлен баг в методе
getMods()
блокаi-bem
(#1379).
Крупные изменения
Шаблоны: реализована поддержка режима экранирования (#1406).
Также в релиз вошли следующие изменения
Мелкие исправления документации.
3.0.1
В релиз вошли следующие исправления ошибок
Исправлены pointer-события на iOS-устройствах (#1253).
3.0.0
Изменения, ломающие обратную совместимость
Удалены базовые шаблоны и документация для
BEMHTML
иBEMTREE
(#1258). Следует использовать версиюbem-xjst
не ниже 6.3.0.Расширения файлов BEMHTML-шаблонов переименованы с
*.bemhtml
на*.bemhtml.js
(#984). Необходимо убедиться, что в конфиге сборки поддерживается новое расширение.Удален элемент
i-bem__i18n
(#1304). Для интернационализации следует использовать блокi18n
.jquery__events_type_pointerclick
больше не использует библиотеку FastClick (#1088).
Крупные изменения
jQuery
была обновлена до 2.2.3 и 1.12.3 (#1260).
В релиз вошли следующие исправления ошибок
В блоке
page
на уровнеblocks.touch
исправлена ошибка с невалидным значениемuser-scalable=0
для<meta name=viewport>
(#1294).Исправлена ошибка в
jquery__event_type_pointernative
, которая приводила к возникновению JS ошибки в IE8 (1317).
Также в релиз вошли следующие изменения
dist: Автоматическая инициализация блоков теперь опциональна (#1271).
2.9.0
Крупные изменения
jQuery
была обновлена до 2.2.0 и 1.12.0 (#1249).
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
BEMHTML 1.x
, которая приводила к потереthis.mods
вreapply()
(#97).
Также в релиз вошли следующие изменения
Теперь
jquery__event_type_pointerpressrelease
предоставляетoriginalEvent
(#1254).dist: Поддержка
i18n
добавлена в dist (#1212).Шаблон
page__css.bemhtml
был обновлен для поддержки новых версийbem-xjst
(#1228).
2.8.0
Крупные изменения
Реализован новый блок i18n, реализующий интернационализацию проектов на bem-core (#1074).
Теперь
jQuery
по умолчанию подключается черезhttps
(#1202).Удалена зависимость от
bemhtml-compat
(#1186). Пользователямbem-tools
необходимо выполнитьnpm i bemhtml-compat --save
для установки пакета на уровне проекта.
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
loader_type_js
, допускавшая вызовы неопределенного обработчика (#1159).
Также в релиз вошли следующие изменения
BH-бандлы в
dist
теперь мимикрируют под BEMHTML (#1210).Улучшены шаблоны
bem create
дляbemhtml
,bemtree
,vanilla.js
иbrowser.js
(#1183).vow
обновлена до0.4.10
(#1056).
2.7.0
Крупные изменения
В
i-bem__dom
добавлен новый методdetach
(#1102).В
i-bem.bemhtml
добавлена поддержка вложенных миксов (873).В
i-bem.bemhtml
добавлены незначительные оптимизации, связанные с эскейпингом аттрибутов (#961), (#980) и (#982).clearfix
оптимизирован для работы в поддерживаемых библиотекой браузерах IE (#722).jquery
обновлен до версий 2.1.4 и 1.11.3 (#999).
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
i-bem__dom
, из-за которой методfindElem
не обновлял кэш ранее найденных элементов (#583).Исправлена ошибка в
i-bem__dom
, приводящая к неправильной работе методаdropElemCache
в некоторых граничных случаях (#1037).Исправлена ошибка в
i-bem__dom
, из-за которой вызов методаsetMod
не выставлял CSS-классы блоку в случае, если на DOM-узеле был подмешан блок с пересекающимся окончанием в имени (#1090).Исправлена ошибка в
page
, из-за которой на touch-уровнях не работало специализированное полеzoom
(#1020).Исправлена ошибка в
keyboard__codes
. Клавишиinsert
иdelete
были описаны неправильными кодами (#1002).Исправлена ошибка в
i-bem.bemhtml
, из-за которой неверно интерпретировались вложенные вызовыapplyNext
(b1dc50c).Исправлена ошибка в
jquery__events_type_pointernative
, из-за которой события работали некорректно в браузерах IE 11 и Edge (#1066).
Также в релиз вошли следующие изменения
Обновлена русская докуметация для всех блоков библиотеки. Документация доступна по адресу https://ru.bem.info/libs/bem-core/.
Прочие улучшения в документации к библиотеке.
2.6.0
Крупные изменения
Предоставление модуля
i-bem__dom
теперь происходит после наступления события DOM ready (#859).Методы
setMod
иhasMod
модуляi-bem__dom
теперь явно преобразуют параметрmodVal
к строке, если переданное значение не типа string или boolean (#890).В блок
page
добавлена возможность прокидывать атрибутnonce
, для корректной работы инлайн-скриптов, в соответствии со спецификацией Content Security Policy (#882).Добавлены шаблоны
page__conditional-comment
(#551).Модуль
vow
обновлен до версии 0.4.8 (#837).
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
i-bem.bemhtml
, из-за которой CSS-класс блока дублировался, в случае микса с этим же блоком (#792).Исправлена ошибка в
loader_type_bundle
, из-за которой функция-обработчик успешного результата могла выполняться после наступления таймаута (67ff55f).Исправлена ошибка в
i-bem__dom
, в некоторых случаях, приводящая к неправильной интерпретации строковых аргументов в методахappend
,prepend
и др. (#852).Исправлена ошибка в
jquery__event_type_winresize
, из-за которой неправильно определятся браузер MSIE (#862).Исправлена ошибка в
object
, из-за которой методextend
неправильно обрабатывалnull
в качестве значения аргументаtarget
(#910).Исправлена ошибка в
page
. Из BEMJSON было невозможно отключить добавление meta-тегаx-ua-compatible
(#794).
Также в релиз вошли следующие изменения
Таймаут в
loader_type_bundle
увеличен до 30000 мс (4e27422).Исправлены незначительные ошибки в русской документации блоков.
2.5.1
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
jquery__pointerpress
иjquery__pointerrelease
из-за которой события не работали в браузере Internet Explorer 8 (#792).Исправлена ошибка в
jquery__pointernative
. Событияpointerenter
иpointerleave
не должны всплывать по DOM-дереву (#801).Исправлена ошибка в
loader_type_bundle
. После загрузки, CSS-бандл добавлялся в самый верх HTML-тега<head>
, из-за чего CSS-правила из содержимого бандла могли работать не корректно (#808).Исправлена ошибка в BH-шаблоне
ua
. Шаблон не позволял вставить содержимое блока из входного BEMJSON (#734).Исправлена ошибка в
page
, приводящая к неработоспособности добавленных на страницу условных комментариев для браузера Internet Explorer (#781).
Также в релиз вошли следующие изменения
jquery
обновлен до версий 2.1.3 и 1.11.2 (#778).Добавлена документация на русском языке для модулей:
clearfix
,cookie
,identify
,idle
,inherit
,keyboard
,loader
,next-tick
,string
andtick
.Исправлена документация на русском языке для
i-bem.js
.Обновлено руководство на английском языке по технологиям BEMHTML и BEMJSON.
2.5.0
Крупные изменения
Код библиотеки переведен на использование лицензии MPL 2.0 (#443).
В модуль
loader_type_js
добавлена возможность указывать функцию-обработчик ошибок (#672).Класс
BEMContext
добавлен в export-параметры функцииoninit
в базовых шаблонахi-bem.bemtree
(#602).В
BEMContext
BEMTREE добавлен статический методreapply
по аналогии с BEMHTML (#706).Добавлены bh-шаблоны блока
page
для уровней touch (#689).
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
i-bem__dom
, из-за которой методfindBlocksInside
мог возвращать блоки, которые еще не были инициализированы (#699).Исправлена ошибка в
tick
, позволявшая вызвать методstop
без освобождения внутреннего таймера (#694).Исправлена ошибка в
i-bem.bemhtml
, из-за которой на элементы блока добавлялся CSS-классi-bem
(#633).Исправлена ошибка в технологии
html-from-bemtree
, из-за которой в контексте BEMTREE-шаблонов не было глобальных объектовvow
,console
,setTimeout
(#438ebb8).
Также в релиз вошли следующие изменения
Добавлено английское руководство по технологии BEMJSON.
Обновлена русская документация для i-bem.js. Теперь документация соответсвует текущему API библиотеки.
Обновлена документация для технологий BEMHTML/BEMTREE.
2.4.0
Крупные изменения
npm-модуль bem-xjst обновлен до версии 0.8.0; bemhtml-compat обновлен до 0.0.11.
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
jquery__event_type_pointerpressrelease
, из-за которой событияpointerpress
/pointerrelease
генерировались на нажатие любой кнопки мыши (#607).Исправлена ошибка в
i-bem__dom.js
, из-за которой в некоторых случаях не происходил вызов базового методаlive
(#608).
Также в релиз вошли следующие изменения
Добавлена английская документация на JS-синтаксис BEMHTML.
2.3.0
Крупные изменения
Добавлена новая реализация pointer-событий на основе полифилов из Polymer (#567).
Добавлена возможность в
i-bem__dom.js
указывать дополнительные данные о событии в методахbindTo*
(#568).
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
i-bem.bemhtml
, из-за которой было невозможно использовать микс в виде одного объекта (не массива) одновременно в BEMJSON и BEMHTML (#555).Исправлена ошибка в BEMHTML-шаблоне блока
page
, из-за которой не выполнялись стандартные моды, и исправлена регрессия в шаблоне на touch-уровне (516).
2.2.4
В релиз вошли следующие исправления ошибок
Исправлена ошибка в
i-bem.js
, из-за которой событие об изменении модификатора генерировалось, даже если обработчикbeforeSetMod
предотвращал изменение (#546).В случае возникновения ошибки в процессе декодирования строки, модуль
querystring__uri
теперь возвращает оригинальную строку (#554).
2.2.3
В релиз вошли следующие исправления ошибок
В модуле
i-bem__dom
был исправлен процесс удаления блока для предотвращения нежелательной повторной инициализации блока (#540).Исправлена ошибка в модуле
jquery__event_type_pointer
, из-за которой нативные события мыши ошибочно замещались на pointer-события (#534).unbindFrom*
-методы в модулеi-bem__dom
теперь поддерживают отписывание от нескольких событий за вызов (#533).Добавлена недостающая зависимость от модуля
functions
в модулеevents
(#532).
2.2.2
В релиз вошли следующие исправления ошибок
Исправлена ошибка в модуле
i-bem__dom
приводящая к повторной инициализации блока на DOM-узле, отмеченном как удаленный (#518).Исправлена ошибка в модуле
i-bem
, из-за которой невозможно было подписаться на событие о выставлении модификатора в значениеfalse
(#529).Модуль
jquery
обновлен до версий 2.1.1 и 1.11.1 (#515).
2.2.1
Исправлена ошибка в модуле
jquery__event_type_pointerpressrelease
, из-за которой событиеpointerpress
генерировалось дважды на каждое событиеmousedown
в IE10 (#505).
2.2.0
Крупные изменения
Добавлен новый модуль
keyboard__codes
(#431).Класс
BEMContext
добавлен в export-параметры функцииoninit
в базовых шаблонахi-bem.bemhtml
(#485).Добавлена возможность декларировать инстанс элемента используя класс блока (#481).
Исправлено поведение метода
isSimple
класса BEMContext в в базовых шаблонахi-bem.bemhtml
(#432).Исправлена ошибка в методе
liveUnbindFrom
модуляBEMDOM
(#476).Исправлена ошибка в методе
isFocusable
модуляdom
, возникающая если переданныйdomElem
является ссылкой с атрибутомtabindex
, но без атрибутаhref
(#501).Исправлена ошибка возникающая в процессе декларации БЭМ-блока как модуля, если был подключен модуль
i-bem__dom_elem-instances
(#479).В модуле
i-bem__dom_init_auto
добавлено временное решение для проблем с производительностью ренедеринга при инициализации блоков в Chrome-браузерах (#486).Модуль
vow.js
перенесен вvow.vanilla.js
(#412).
Также в релиз вошли следующие изменения
Модуль
vow
обновлен до версии 0.4.3 (#504).Добавлена русская документация на технологию BEMTREE (#500).
Обновлена русская документация на JavaScript-синтаксис BEMHTML (#471).
Добавлен референс на API JavaScript-модулей. См. ветку
v2-jsdoc
(#478).
2.1.0
Крупные изменения
Исправлена ошибка в
i-bem.js
, из-за которой событие об изменении модификатора происходило до того, как будет вызван обработчик реакции на изменение этого модификатора вonSetMod
(#454).Свойства
this.mods
иthis.ctx.mods
базового шаблонаi-bem.bemhtml
теперь используют один и тот же объект (#441).Исправлен порядок тегов секции
head
в шаблонеpage.bemhtml
(#465).
Также в релиз вошли следующие изменения
В русскую документацию к
i-bem.js
добавлено описание поляbaseMix
(#461).CDN-хост внешних ресурсов изменен на
yastatic.net
(#444). Все ресурсы все так же доступны с хостаyandex.st
. Физическиyandex.st
иyastatic.net
находятся на одних и тех же серверах. Различие только в DNS-записях.Добавлен базовый BEMHTML-шаблон для команды
bem create
технологииbemhtml
(#277).Прекращен автоматический запуск тестов под Node.js 0.8 в Travis CI (#455).
Иконка статуса автосборки Travis заменена на SVG :)
2.0.0
Изменения, ломающие обратную совместимость
Из
i-bem.js
иi-bem__dom.js
удалены все deprecated методы (#318):destruct
, используйтеonSetMod js ''
;extractParams
, используйтеelemParams
;trigger
, используйтеemit
;afterCurrentEvent
, используйте модульnext-tick
;channel
, используйте модульevents__channels
;changeThis
, используйте нативныйFunction.prototype.bind
.
Из
i-bem.js
убраны событияinit
иdestruct
. Вместо них следует использовать события об изменении модификатора (см. «Крупные изменения»).Блок
ecma
перенесен в отдельный репозиторий; ES5-shims следует использовать для IE < 9 (#230).Модуль
vow
обновлен до мажорной версии 0.4.1 (#350). См. изменения в Vow.В
i-bem.bemhtml
добавлена поддержка vow@0.4 (#385).
Крупные изменения
Добавлена возможность декларировать BEMDOM-блоки как модули ym (#382).
В
i-bem.js
добавлены события об изменении модификатора (#357).Добавлена поддержка использования строковых значений в качестве аргумента в методах
BEMDOM.init
(#419) иBEMDOM.update
(#420).Методы
i-bem__dom.js
replace
,append
,prepend
,before
,after
теперь возвращают новый контекст, аupdate
– изменённый (#410).В
loader
добавлен модификатор_type_bundle
(#358).jQuery обновлен до версии 2.1.0. Для IE < 9 — до версии 1.11.0 (#356).
Также в релиз вошли следующие изменения
Базовые шаблоны в
i-bem.bemhtml
используют конкатенацию строк вместо наполнения внутреннего буфера (#401).jQuery больше не удаляет себя из глобальной области видимости, если присутствует на странице (#349).
jquery__event_type_pointerclick.js
перемещен с уровняtouch.blocks
на уровеньcommon.blocks
(#393).Модификаторы
i-bem_elem-instances_yes
иi-bem__dom_elem-instances_yes
приведены к булевому стилю (#352).Исправлена ошибка в шаблоне блока
page
, возникающая при использовании development-режима BEMHTML (#417).Для поддержки Android 2.3 внутри
i-bem.js
отказались от использованийFunction.prototype.bind
(#404).Исправлены ошибки в модуле технологии
browser-js+bemhtml
(#392).
1.2.0
Крупные изменения
BEM-блоки инициируют событие
destruct
в процессе удаления (#370).Исправлены полифилы для
pointerevents
(#354).
Также в релиз вошли следующие изменения
JSDoc блоков исправлен в соответствии с поддержкой bem-jsd (#335).
Референс на BEMHTML обновлен для соответствия JavaScript-синтаксису шаблонизатора (#355).
1.1.0
Крупные изменения
Для современных браузеров
jquery__config
подключает jQuery 2.x (#319).Добавлена возможность использовать произвольный BEMJSON в качестве значения атрибутов в BEMHTML (#290).
Исправлены зависимости в
i-bem__collection
(#292).Удалены CSS-стили блока
page
из уровняtouch.blocks
(#306).Исправлена ошибка в BEMHTML-шаблоне блока
page
, приводящая к зацикливанию шаблонизатора в production-режиме (#309).Исправлена возможная ошибка в
next-tick
, возникающая при вставке скрипта в DOM в IE<9 (#324).9>Исправлена ошибка в инициализации плагина
FastClick
в модулеjquery__event_type_pointerclick
на уровнеtouch.blocks
(#332).Исправлена ошибка в технологии
node.js
в Windows (#274).Исправлена ошибка в
onElemSetMod
вi-bem__dom_elem-instances
(#340).
Также в релиз вошли следующие изменения
В ядре локализации
i-bem__i18n
отключен вывод сообщений о неизвестных ключах, если не включен debug-режим (#285).Инфраструктура сборки тестов и примеров переведена на bem-pr@v0.5.x (#323).
Исправлен jsdoc для метода
dropElemCache()
вi-bem__dom
(#296).Доработана документация для блока
i-bem.js
на русском языке.В README проекта добавлен список поддерживаемых браузеров.
1.0.0
Крупные изменения
Переход на модульную систему ym.
Из
i-bem
,i-bem__dom
убраны все deprecated-методы.i-bem
больше не зависит от jQuery.i-bem__dom
продолжает зависеть от jQuery.BEMHTML-шаблоны можно писать с использованием JS-синтаксиса.
Новая технология
bemtree
(на базе bem-xjst) для описания процесса динамического построения БЭМ-дерева.Новая технология
vanilla.js
для описания JS-реализации модулей, не зависящей от конкретного JavaScript движка.Новые технологии
browser.js
иnode.js
для описания JS-реализаций модулей (блоков) в соответствующих движках. Для совместимости с существующим кодом считаем, что файлы с расширением.js
содержат реализацию блоков в технологииbrowser.js
.Система модульного тестирования и примеров для блоков в библиотеке.
Появились полифилы (
jquery__event_type_pointer
иjquery__event_type_pointerclick
как jQuery-плагины), позволяющие использовать универсальные события для десктопных и тач-интерфейсов.Плагин для jQuery, позволяющий навешивать обработчик события на нажатие левой кнопки мыши, становится модулем
jquery__pointerclick
.В
i-bem
и BEMHTML добавлена поддержка простых модификаторов (модификаторов без значений).
Также в релиз вошли следующие изменения
Все блоки-модули, кроме
i-bem
, избавились от префиксов.Блок
i-bem__dom
становится модулемi-bem__dom
. Все BEM.DOM-блоки должны теперь доопределять этот модуль (пример).Метод для декларации блоков (
.decl()
) больше не принимает первым параметром объект с полемname
. Теперь обязательная форма записи с полемblock
:BEM.decl({ block: 'b1', modName: 'm', modVal: 'v' }, ...)
.Вместо метода
afterCurrentEvent
у блоков появился методnextTick
, который проверят существование блока в момент исполнения колбэка.BEM.afterCurrentEvent
теперь deprecated.Вместо
BEM.channel
появился отдельный модульchannels
.BEM.channel
теперь deprecated.Метод
changeThis
помечен как deprecated. Используйте нативныйbind
.Метод
del
удален из блокаi-bem
.Метод
getWindowSize
удален из блокаi-bem__dom
. ИспользуйтеBEMDOM.win.width()
иBEMDOM.win.height()
.Добавлен модуль-обертка
jquery
, предоставляющий jQuery. Модуль либо предоставляет jQuery, уже присутствующий на странице, либо сам его загружает (версию 1.10.1).$.observable
становится модулемevents
и больше не зависит от jQuery.$.inherit
становится модулемinherit
и больше не зависит от jQuery.$.identify
становится модулемidentify
и больше не зависит от jQuery.$.throttle
разбивается на два модуля:functions__throttle
иfunctions__debounce
, которые больше не зависят от jQuery.$.decodeURI
,$.decodeURIComponent
переезжают в модульquerystring__uri
и больше не зависят от jQuery.$.cookie
становится модулемcookie
и больше не зависит от jQuery.Вместо
$.browser
появился модульua
с аналогичным интерфейсом.Блок
i-system
разбит на 2 модуля:idle
иtick
.Вместо события
leftclick
следует использоватьpointerclick
(предоставляемый полифиломjquery__event_type_pointerclick
).Триггеры на установку модификаторов теперь разделены на две группы: до установки модификатора (
beforeSetMod
иbeforeElemSetMod
) и после (onSetMod
иonElemSetMod
). Отмена установки модификатора теперь возможна только из триггеров первой группы.Использовать конструкцию
{ onSetMod : { js : function() { ... } } }
в качестве конструктора теперь deprecated, необходимо использоватьonSetMod: { js : { inited : ... } } }
.Вместо метода
destruct
вi-bem
появился зеркальный метод дляonSetMod: { js : { inited : ... } } }
—{ onSetMod : { js : { '' : ... } } }
. Методdestruct
теперь deprecated.Метод
exractParams
вi-bem__dom
теперь deprecated, для доступа к параметрам элементов нужно использовать методelemParams
.Метод
trigger
вi-bem
теперь deprecated, нужно использоватьemit
.Метод
onFirst
вi-bem
теперь deprecated, нужно использоватьonce
.Удалено deprecated поле
e.block
, представляющее блок-источник события для BEM-событий. Вместо него следует использовать полеe.target
.Для доступа к DOM-элементу блока в обработчике DOM-событий теперь нужно использовать поле
currentTarget
, предоставляемое jQuery. Вместоe.data.domElem
нужно писать$(e.currentTarget)
.В методе
findElem
добавлен параметр, позволяющий находить элемента блока с учетом вложенных блоков.Добавлена возможность указывать конкретную функцию для отписки от событий в методах
unbindFrom*
.Добавлен модуль
objects
для работы с JS-объектами (содержит методыextend
,isEmpty
,each
).Добавлен модуль
functions
для работы с JS-функциями (содержит методыisFunction
,noop
).Добавлен модуль
dom
для хелперов при работе с DOM.Добавлен модуль
querystring
для работы с урлами.Добавлен модуль
loader_type_js
для загрузки JS.Добавлен модуль
vow
для работы с промисами.Добавлен модуль
next-tick
для полифилаnextTick
,setImmediate
,setTimeout(0, ...
и т.п..Добавлен модуль
strings__escape
, содержащий методы для эскейпинга XML, HTML и атрибутов.Модуль
inherit
теперь поддерживает миксины.В модуле
functions__throttle
добавлен параметрinvokeAsap
, позволяющий отложить первое исполнение.