├── test.blocks ├── blocks-common ├── .gitignore ├── i-bem │ ├── __i18n │ │ ├── test │ │ │ ├── files │ │ │ │ ├── empty-01.xml │ │ │ │ ├── bem-i18n-bemjson.bemhtml │ │ │ │ ├── bem-i18n-api.json │ │ │ │ ├── bem-i18n-bemjson.html │ │ │ │ ├── bem-i18n-api.html │ │ │ │ ├── bem-i18n-lang.html │ │ │ │ ├── html-01.xml │ │ │ │ ├── literal-01.xml │ │ │ │ ├── literal-02.xml │ │ │ │ ├── literal-03.xml │ │ │ │ ├── bem-i18n.html │ │ │ │ ├── bem-i18n-lang.json │ │ │ │ ├── entity-01.xml │ │ │ │ ├── dynamic-03.xml │ │ │ │ ├── json-01.xml │ │ │ │ ├── bem-i18n.json │ │ │ │ ├── param-xml-01.xml │ │ │ │ ├── bem-i18n-lang.bemhtml │ │ │ │ ├── bem-i18n-bemjson.json │ │ │ │ ├── bem-i18n.bemhtml │ │ │ │ ├── html-02.xml │ │ │ │ ├── bem-i18n-api.bemhtml │ │ │ │ ├── param-empty-01.xml │ │ │ │ ├── dynamic-01.xml │ │ │ │ ├── complex-01.xml │ │ │ │ └── dynamic-02.xml │ │ │ └── test-js-parser.js │ │ ├── _dummy │ │ │ ├── i-bem__i18n_dummy_yes.deps.js │ │ │ └── i-bem__i18n_dummy_yes.bemhtml │ │ ├── i-bem__i18n.deps.js │ │ ├── i-bem__i18n.i18n │ │ │ └── all.js │ │ ├── i-bem__i18n.bemhtml │ │ └── lib │ │ │ └── i18n-js.js │ ├── __html │ │ ├── test │ │ │ ├── files │ │ │ │ ├── i-bem │ │ │ │ │ ├── gh-289.html │ │ │ │ │ ├── comments.html │ │ │ │ │ ├── gh-289.json │ │ │ │ │ ├── single-mix.html │ │ │ │ │ ├── comments.json │ │ │ │ │ ├── empty-attrs.html │ │ │ │ │ ├── empty-attrs.json │ │ │ │ │ ├── gh-232.json │ │ │ │ │ ├── gh-239.html │ │ │ │ │ ├── gh-550.json │ │ │ │ │ ├── looped-mix.json │ │ │ │ │ ├── one-symbol-elem.html │ │ │ │ │ ├── single-mix.json │ │ │ │ │ ├── escaping-this.json │ │ │ │ │ ├── escaping-this.html │ │ │ │ │ ├── gh-254.bemhtml │ │ │ │ │ ├── gh-550.html │ │ │ │ │ ├── looped-mix.html │ │ │ │ │ ├── local-var.html │ │ │ │ │ ├── gh-239.json │ │ │ │ │ ├── one-symbol-elem.bemhtml │ │ │ │ │ ├── one-symbol-elem.json │ │ │ │ │ ├── gh-232.html │ │ │ │ │ ├── gh-254.html │ │ │ │ │ ├── gh-289.bemhtml │ │ │ │ │ ├── nested-mix.json │ │ │ │ │ ├── local-var.json │ │ │ │ │ ├── single-mix.bemhtml │ │ │ │ │ ├── empty-attrs.bemhtml │ │ │ │ │ ├── custom-predicates.bemhtml │ │ │ │ │ ├── nested-mix.html │ │ │ │ │ ├── gh-239.bemhtml │ │ │ │ │ ├── comments.bemhtml │ │ │ │ │ ├── gh-550.bemhtml │ │ │ │ │ ├── custom-predicates.html │ │ │ │ │ ├── looped-mix.bemhtml │ │ │ │ │ ├── re-entrant.bemhtml │ │ │ │ │ ├── escaping-this.bemhtml │ │ │ │ │ ├── gh-254.json │ │ │ │ │ ├── custom-predicates.json │ │ │ │ │ ├── gh-232.bemhtml │ │ │ │ │ ├── nested-mix.bemhtml │ │ │ │ │ ├── basic-block.html │ │ │ │ │ ├── local-var.bemhtml │ │ │ │ │ ├── basic-block.json │ │ │ │ │ └── basic-block.bemhtml │ │ │ │ ├── cache │ │ │ │ │ ├── basic.html │ │ │ │ │ ├── basic.bemhtml │ │ │ │ │ └── basic.json │ │ │ │ └── basic │ │ │ │ │ └── hash.bemhtml │ │ │ ├── jail-test.js │ │ │ └── basic-test.js │ │ ├── i-bem__html.deps.js │ │ └── lib │ │ │ ├── bemhtml.js │ │ │ └── bemhtml │ │ │ ├── checks.js │ │ │ └── cache.js │ ├── __internal │ │ └── i-bem__internal.deps.js │ ├── bem │ │ └── techs │ │ │ ├── i18n.js+bemhtml.js │ │ │ ├── v2 │ │ │ ├── i18n.js+bemhtml.js │ │ │ └── js-i.js │ │ │ └── js-i.js │ ├── __dom │ │ ├── i-bem__dom.deps.js │ │ └── _init │ │ │ └── i-bem__dom_init_auto.js │ ├── i-bem.deps.js │ ├── i-bem.en.doc.js │ └── i-bem.test.js ├── i-jquery │ ├── i-jquery.deps.js │ ├── _version │ │ ├── i-jquery_version.deps.js │ │ └── i-jquery_version.bemhtml │ ├── __observable │ │ └── i-jquery__observable.deps.js │ ├── __is-empty-object │ │ └── i-jquery__is-empty-object.js │ └── __identify │ │ └── i-jquery__identify.js ├── .bem │ └── level.js ├── b-menu-vert │ ├── __title │ │ ├── b-menu-vert__title.bemhtml │ │ └── b-menu-vert__title.ru.md │ ├── __trigger │ │ ├── b-menu-vert__trigger.bemhtml │ │ ├── b-menu-vert__trigger.css │ │ └── b-menu-vert__trigger.ru.md │ ├── __separator │ │ ├── b-menu-vert__separator.bemhtml │ │ └── b-menu-vert__separator.css │ ├── __item-content │ │ ├── b-menu-vert__item-content.css │ │ ├── b-menu-vert__item-content.ru.md │ │ ├── b-menu-vert__item-content.deps.js │ │ └── _visibility │ │ │ ├── b-menu-vert__item-content_visibility_visible.en.md │ │ │ ├── b-menu-vert__item-content_visibility_visible.ru.md │ │ │ └── b-menu-vert__item-content_visibility_visible.css │ ├── __submenu │ │ └── b-menu-vert__submenu.ru.md │ ├── b-menu-vert.js │ ├── __item │ │ └── b-menu-vert__item.ru.md │ ├── b-menu-vert.css │ ├── b-menu-vert.deps.js │ ├── b-menu-vert.en.md │ ├── __item-selector │ │ └── b-menu-vert__item-selector.ru.md │ └── b-menu-vert.bemhtml ├── i-system │ ├── i-system.deps.js │ └── i-system.js ├── b-page │ ├── __js │ │ ├── b-page__js.deps.js │ │ └── b-page__js.bemhtml │ ├── __csp │ │ ├── b-page__csp.deps.js │ │ └── b-page__csp.bemhtml │ └── b-page.deps.js ├── i-ua │ ├── i-ua.deps.js │ └── i-ua.bemhtml ├── i-ecma │ ├── i-ecma.ru.md │ ├── __string │ │ ├── i-ecma__string.js │ │ └── i-ecma__string.test.js │ ├── __function │ │ ├── i-ecma__function.js │ │ └── i-ecma__function.test.js │ └── __object │ │ ├── i-ecma__object.js │ │ └── i-ecma__object.test.js ├── i-menu │ ├── i-menu.deps.js │ ├── i-menu.ru.md │ └── i-menu.js ├── b-icon │ ├── b-icon.en.md │ └── b-icon.ru.md ├── b-link │ └── b-link.en.md └── i-request-animation-frame │ └── i-request-animation-frame.js ├── common.blocks ├── desktop.blocks ├── touch.blocks ├── .bem ├── configs │ └── current.js ├── levels │ ├── examples-set.js │ ├── examples.js │ ├── sets.js │ └── bundles.js ├── techs │ ├── i18n.desc.wiki.js │ ├── i18n.title.txt.js │ ├── examples.js │ └── bemjson.js.js └── level.js ├── blocks-test ├── i-jasmine │ ├── i-jasmine.en.title.txt │ ├── i-jasmine.ru.title.txt │ ├── __runner │ │ ├── i-jasmine__runner.en.title.txt │ │ ├── i-jasmine__runner.ru.title.txt │ │ └── i-jasmine__runner.js │ ├── __reporter │ │ ├── i-jasmine__reporter.en.title.txt │ │ ├── i-jasmine__reporter.ru.title.txt │ │ └── _type │ │ │ ├── i-jasmine__reporter_type_html.ru.title.txt │ │ │ ├── i-jasmine__reporter_type_console.ru.title.txt │ │ │ ├── i-jasmine__reporter_type_html.en.title.txt │ │ │ └── i-jasmine__reporter_type_console.en.title.txt │ └── i-jasmine.deps.js ├── .bem │ └── level.js ├── i-bem │ └── __test │ │ ├── i-bem__test.deps.js │ │ └── i-bem__test.bemhtml └── i-phantom │ └── i-phantom.js ├── blocks-touch ├── b-link │ ├── b-link.examples │ │ ├── 10-simple-bem.en.title.txt │ │ ├── 10-simple-bem.ru.title.txt │ │ ├── 30-ico-bem.en.title.txt │ │ ├── 30-ico-bem.ru.title.txt │ │ ├── 20-target-bem.en.title.txt │ │ ├── 20-target-bem.ru.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ ├── 10-simple-bem.bemjson.js │ │ ├── 20-target-bem.bemjson.js │ │ └── 30-ico-bem.bemjson.js │ ├── b-link.deps.js │ ├── b-link.css │ ├── b-link.bemhtml │ └── b-link.ru.md ├── b-icon │ ├── b-icon.examples │ │ ├── 10-simple-bem.en.title.txt │ │ ├── 10-simple-bem.ru.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ └── 10-simple-bem.bemjson.js │ ├── b-icon.css │ ├── b-icon.bemhtml │ └── b-icon.ru.md ├── b-slider │ ├── b-slider.examples │ │ ├── 10-simple-bem.ru.title.txt │ │ ├── 10-simple-bem.en.title.txt │ │ ├── 40-perscreen-bem.ru.title.txt │ │ ├── 60-simple-two-bem.en.title.txt │ │ ├── 60-simple-two-bem.ru.title.txt │ │ ├── 40-perscreen-bem.en.title.txt │ │ ├── 30-simple-images-bem.ru.title.txt │ │ ├── 20-simple-nonfirst-bem.en.title.txt │ │ ├── 20-simple-nonfirst-bem.ru.title.txt │ │ ├── 30-simple-images-bem.en.title.txt │ │ ├── 50-perscreen-nonfirst-bem.ru.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ ├── 50-perscreen-nonfirst-bem.en.title.txt │ │ ├── 10-simple-bem.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-my-slider │ │ │ │ └── b-my-slider.css │ │ ├── 40-perscreen-bem.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-my-slider │ │ │ │ └── b-my-slider.css │ │ ├── 60-simple-two-bem.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-my-slider │ │ │ │ └── b-my-slider.css │ │ ├── 20-simple-nonfirst-bem.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-my-slider │ │ │ │ └── b-my-slider.css │ │ ├── 30-simple-images-bem.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-my-slider │ │ │ │ └── b-my-slider.css │ │ └── 50-perscreen-nonfirst-bem.blocks │ │ │ ├── .bem │ │ │ └── level.js │ │ │ └── b-my-slider │ │ │ └── b-my-slider.css │ ├── b-slider.deps.js │ ├── b-slider.css │ ├── b-slider.bemhtml │ └── b-slider.ru.md ├── b-menu │ ├── __gap │ │ └── b-menu__gap.css │ ├── b-menu.examples │ │ ├── 10-horiz-bem.en.title.txt │ │ ├── 40-vert-bem.en.title.txt │ │ ├── 40-vert-bem.ru.title.txt │ │ ├── 10-horiz-bem.ru.title.txt │ │ ├── 30-horiz-simple-bem.en.title.txt │ │ ├── 20-horiz-title-bem.en.title.txt │ │ ├── 50-vert-title-bem.en.title.txt │ │ ├── 30-horiz-simple-bem.ru.title.txt │ │ ├── 50-vert-title-bem.ru.title.txt │ │ ├── 20-horiz-title-bem.ru.title.txt │ │ └── .bem │ │ │ └── level.js │ ├── b-menu.css │ ├── __title │ │ └── b-menu__title.css │ ├── _layout │ │ ├── b-menu_layout_vert.css │ │ ├── b-menu_layout_horiz-simple.css │ │ └── b-menu_layout_horiz.css │ └── b-menu.bemhtml ├── b-page │ ├── b-page.examples │ │ ├── 10-simple-bem.en.title.txt │ │ ├── 10-simple-bem.ru.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ └── 10-simple-bem.ru.md │ ├── b-page.css │ └── b-page.ru.md ├── .bem │ └── level.js ├── i-jquery │ ├── __tap │ │ ├── i-jquery__tap.deps.js │ │ └── i-jquery__tap.js │ └── __core │ │ └── i-jquery__core.bemhtml ├── i-pressed-controller │ ├── i-pressed-controller.deps.js │ └── i-pressed-controller.js └── i-bem │ └── i-bem.deps.js ├── blocks-desktop ├── b-logo │ ├── b-logo.examples │ │ ├── 10-b-logo.en.title.txt │ │ ├── 10-b-logo.ru.title.txt │ │ ├── 20-b-logo-link.en.title.txt │ │ ├── 20-b-logo-link.ru.title.txt │ │ ├── 30-b-logo-slogan.en.title.txt │ │ ├── 30-b-logo-slogan.ru.title.txt │ │ ├── 10-b-logo.blocks │ │ │ ├── b-logo │ │ │ │ ├── b-logo.css │ │ │ │ └── b-logo.png │ │ │ └── .bem │ │ │ │ └── level.js │ │ ├── 20-b-logo-link.blocks │ │ │ ├── b-logo │ │ │ │ ├── b-logo.css │ │ │ │ └── b-logo.png │ │ │ └── .bem │ │ │ │ └── level.js │ │ ├── 30-b-logo-slogan.blocks │ │ │ ├── b-logo │ │ │ │ ├── b-logo.css │ │ │ │ └── b-logo.png │ │ │ └── .bem │ │ │ │ └── level.js │ │ ├── .bem │ │ │ └── level.js │ │ ├── 10-b-logo.bemjson.js │ │ ├── 20-b-logo-link.bemjson.js │ │ └── 30-b-logo-slogan.bemjson.js │ ├── b-logo.deps.js │ ├── b-logo.bemhtml │ └── b-logo.ru.md ├── b-icon │ ├── b-icon.examples │ │ ├── 10-b-icon-src.ru.title.txt │ │ ├── 20-b-icon-css.ru.title.txt │ │ ├── 30-b-icon-sprite.ru.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ ├── 20-b-icon-css.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-icon │ │ │ │ └── b-icon.css │ │ ├── 30-b-icon-sprite.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-icon │ │ │ │ └── b-icon.css │ │ ├── 20-b-icon-css.bemjson.js │ │ ├── 30-b-icon-sprite.bemjson.js │ │ └── 10-b-icon-src.bemjson.js │ ├── b-icon.css │ ├── b-icon.gif │ ├── b-icon.en.md │ └── b-icon.bemhtml ├── b-link │ ├── b-link.examples │ │ ├── 10-b-link-link.en.title.txt │ │ ├── 20-b-link-pseudo.en.title.txt │ │ ├── 10-b-link-link.ru.title.txt │ │ ├── 20-b-link-pseudo.ru.title.txt │ │ ├── 30-b-link-inner.ru.title.txt │ │ ├── 30-b-link-inner.en.title.txt │ │ ├── 40-b-link-dynamic-pseudo.en.title.txt │ │ ├── 40-b-link-dynamic-pseudo.ru.title.txt │ │ ├── 30-b-link-inner.blocks │ │ │ ├── b-link │ │ │ │ └── b-link.css │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── .bem │ │ │ └── level.js │ │ ├── 20-b-link-pseudo.blocks │ │ │ ├── b-link │ │ │ │ └── b-link.css │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── 30-b-link-inner.ru.md │ │ ├── 40-b-link-dynamic-pseudo.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ ├── b-page │ │ │ │ ├── b-page.css │ │ │ │ ├── b-page.deps.js │ │ │ │ └── b-page.js │ │ │ └── b-lazy-link │ │ │ │ └── b-lazy-link.js │ │ ├── 10-b-link-link.bemjson.js │ │ └── 40-b-link-dynamic-pseudo.bemjson.js │ ├── __inner │ │ ├── b-link__inner.bemhtml │ │ ├── b-link__inner.en.md │ │ └── b-link__inner.ru.md │ ├── _disabled │ │ ├── b-link_disabled_yes.en.md │ │ ├── b-link_disabled_yes.ru.md │ │ └── b-link_disabled_yes.css │ ├── b-link.deps.js │ ├── _inner │ │ ├── b-link_inner_yes.deps.js │ │ ├── b-link_inner_yes.en.md │ │ ├── b-link_inner_yes.ru.md │ │ └── b-link_inner_yes.css │ ├── _pseudo │ │ ├── b-link_pseudo_yes.deps.js │ │ ├── b-link_pseudo_yes.en.md │ │ ├── b-link_pseudo_yes.ru.md │ │ ├── b-link_pseudo.deps.js │ │ ├── b-link_pseudo_yes.ie.css │ │ ├── b-link_pseudo_yes.css │ │ ├── b-link_pseudo.bemhtml │ │ └── b-link_pseudo_yes.js │ └── b-link.bemhtml ├── b-page │ ├── b-page.deps.js │ ├── b-page.examples │ │ ├── 10-b-page-simple.en.title.txt │ │ ├── 20-b-page-simple.en.title.txt │ │ ├── 20-b-page-simple.ru.title.txt │ │ ├── 10-b-page-simple.ru.title.txt │ │ ├── 30-b-page-with-js.en.title.txt │ │ ├── 30-b-page-with-js.ru.title.txt │ │ ├── 40-b-page-with-level.en.title.txt │ │ ├── 40-b-page-with-level.ru.title.txt │ │ ├── 60-page-nodeps-bem.en.title.txt │ │ ├── 60-page-nodeps-bem.ru.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ ├── 70-csp-with-nonce.blocks │ │ │ ├── b-page │ │ │ │ └── b-page.deps.js │ │ │ └── .bem │ │ │ │ └── level.js │ │ ├── 30-b-page-with-js.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── 60-page-nodeps-bem.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── 40-b-page-with-level.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-page │ │ │ │ ├── b-page.css │ │ │ │ └── b-page.deps.js │ │ ├── 10-b-page-simple.ru.md │ │ ├── 40-b-page-with-level.ru.md │ │ ├── 20-b-page-simple.bemjson.js │ │ ├── 40-b-page-with-level.bemjson.js │ │ ├── 30-b-page-with-js.bemjson.js │ │ ├── 30-b-page-with-js.ru.md │ │ └── 70-csp-with-nonce.bemjson.js │ ├── __css │ │ ├── b-page__css.deps.js │ │ └── b-page__css.bemhtml │ └── b-page.ru.md ├── i-bem │ ├── i-bem.examples │ │ ├── 15-i-bem-click.en.title.txt │ │ ├── 15-i-bem-click.ru.title.txt │ │ ├── 17-i-bem-square.en.title.txt │ │ ├── 17-i-bem-square.ru.title.txt │ │ ├── 20-i-bem-liveinit-multiple.en.title.txt │ │ ├── 20-i-bem-liveinit-multiple.ru.title.txt │ │ ├── 60-i-bem-pseudo-link.ru.title.txt │ │ ├── 17-i-bem-square.blocks │ │ │ ├── b-square │ │ │ │ ├── b-square.bemhtml │ │ │ │ ├── _size │ │ │ │ │ └── b-square_size_big.css │ │ │ │ ├── b-square.css │ │ │ │ ├── b-square.deps.js │ │ │ │ └── b-square.js │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── 60-i-bem-pseudo-link.en.title.txt │ │ ├── 40-i-bem-extend.en.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ ├── 40-i-bem-extend.ru.title.txt │ │ ├── 15-i-bem-click.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ ├── b-square │ │ │ │ ├── _color │ │ │ │ │ └── b-square_color_green.css │ │ │ │ ├── b-square.css │ │ │ │ └── b-square.deps.js │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── 40-i-bem-extend.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ ├── b-link │ │ │ │ └── _action │ │ │ │ │ ├── b-link_action_alert.deps.js │ │ │ │ │ └── b-link_action_alert.js │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── 60-i-bem-pseudo-link.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ ├── b-pseudo-link-example │ │ │ │ ├── b-pseudo-link-example.bemhtml │ │ │ │ └── b-pseudo-link-example.js │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── 20-i-bem-liveinit-multiple.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ ├── b-tv │ │ │ │ ├── _touched │ │ │ │ │ └── b-tv_touched_yes.css │ │ │ │ ├── __click │ │ │ │ │ └── b-tv__click.css │ │ │ │ ├── b-tv.css │ │ │ │ ├── __over │ │ │ │ │ └── b-tv__over.css │ │ │ │ ├── _state │ │ │ │ │ ├── b-tv_state_profilaktika.css │ │ │ │ │ └── b-tv_state_profilaktika.gif │ │ │ │ ├── b-tv.deps.js │ │ │ │ └── b-tv.bemhtml │ │ │ └── b-page │ │ │ │ └── b-page.deps.js │ │ ├── 17-i-bem-square.bemjson.js │ │ ├── 15-i-bem-click.bemjson.js │ │ ├── 20-i-bem-liveinit-multiple.ru.md │ │ ├── 15-i-bem-click.ru.md │ │ ├── 20-i-bem-liveinit-multiple.bemjson.js │ │ ├── 40-i-bem-extend.bemjson.js │ │ ├── 60-i-bem-pseudo-link.bemjson.js │ │ └── 40-i-bem-extend.ru.md │ └── tests │ │ └── 10-base_bem.blocks │ │ ├── .bem │ │ └── level.js │ │ └── i-bem │ │ ├── __live-ctx │ │ └── i-bem__live-ctx.test.js │ │ ├── __init │ │ └── i-bem__init.test.js │ │ ├── __elem-params │ │ └── i-bem__elem-params.test.js │ │ └── __contains-dom-elem │ │ └── i-bem__contains-dom-elem.js ├── i-ua │ ├── i-ua.deps.js │ └── i-ua.examples │ │ ├── .bem │ │ └── level.js │ │ └── 10-i-ua.blocks │ │ ├── .bem │ │ └── level.js │ │ ├── b-page │ │ ├── b-page.css │ │ ├── b-page.bemhtml │ │ └── b-page.deps.js │ │ ├── button │ │ └── button.bemhtml │ │ ├── b-text │ │ └── b-text.css │ │ └── checkbox │ │ └── checkbox.bemhtml ├── b-layout-table │ ├── b-layout-table.examples │ │ ├── 10-b-layout-table.en.title.txt │ │ ├── 10-b-layout-table.ru.title.txt │ │ ├── 20-b-layout-table-rows.en.title.txt │ │ ├── 20-b-layout-table-rows.ru.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ ├── 10-b-layout-table.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-layout-table │ │ │ │ └── _layout │ │ │ │ └── b-layout-table_layout_60-40.css │ │ ├── 20-b-layout-table-rows.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-layout-table │ │ │ │ └── _layout │ │ │ │ └── b-layout-table_layout_18-20-60.css │ │ └── 10-b-layout-table.bemjson.js │ ├── b-layout-table.css │ └── b-layout-table.bemhtml ├── b-text-list │ ├── _type │ │ └── b-text-list_type_ol.bemhtml │ ├── b-text-list.deps.js │ ├── _label │ │ ├── b-text-list_label_disc.css │ │ ├── b-text-list_label_none.css │ │ ├── b-text-list_label_circle.css │ │ └── b-text-list_label_square.css │ ├── _position │ │ └── b-text-list_position_inside.css │ ├── b-text-list.ru.md │ └── b-text-list.bemhtml ├── .bem │ └── level.js ├── b-menu-horiz │ ├── __title │ │ └── b-menu-horiz__title.bemhtml │ ├── b-menu-horiz.js │ ├── b-menu-horiz.examples │ │ ├── 05-b-menu-horiz-simple.en.title.txt │ │ ├── 05-b-menu-horiz-simple.ru.title.txt │ │ ├── 10-b-menu-horiz-normal.en.title.txt │ │ ├── 10-b-menu-horiz-normal.ru.title.txt │ │ ├── 20-b-menu-horiz-complex.en.title.txt │ │ ├── 20-b-menu-horiz-complex.ru.title.txt │ │ ├── 30-b-menu-horiz-normal-js.en.title.txt │ │ ├── 30-b-menu-horiz-normal-js.ru.title.txt │ │ ├── .bem │ │ │ └── level.js │ │ ├── 10-b-menu-horiz-normal.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-menu-horiz │ │ │ │ └── b-menu-horiz.css │ │ ├── 20-b-menu-horiz-complex.blocks │ │ │ └── .bem │ │ │ │ └── level.js │ │ ├── 30-b-menu-horiz-normal-js.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ ├── b-page │ │ │ │ └── b-page.deps.js │ │ │ └── b-menu-horiz │ │ │ │ └── b-menu-horiz.css │ │ └── 30-b-menu-horiz-normal-js.ru.md │ ├── b-menu-horiz.deps.js │ ├── _layout │ │ ├── b-menu-horiz_layout_normal.deps.js │ │ ├── b-menu-horiz_layout_simple.deps.js │ │ ├── b-menu-horiz_layout_simple.css │ │ ├── b-menu-horiz_layout_normal.ie.css │ │ ├── b-menu-horiz_layout_complex.ru.md │ │ ├── b-menu-horiz_layout_normal.bemhtml │ │ ├── b-menu-horiz_layout_normal.css │ │ ├── b-menu-horiz_layout_complex.bemhtml │ │ ├── b-menu-horiz_layout_complex.css │ │ ├── b-menu-horiz_layout_simple.bemhtml │ │ └── b-menu-horiz_layout_simple.ru.md │ ├── b-menu-horiz.en.md │ └── b-menu-horiz.bemhtml ├── b-text │ ├── b-text.examples │ │ ├── .bem │ │ │ └── level.js │ │ └── 10-b-text-simple.blocks │ │ │ └── .bem │ │ │ └── level.js │ ├── b-text.bemhtml │ ├── _type │ │ ├── b-text_type_global.ru.md │ │ └── b-text_type_global.css │ ├── b-text.ru.md │ └── b-text.css ├── b-search │ ├── b-search.examples │ │ ├── .bem │ │ │ └── level.js │ │ ├── 20-b-search-under.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── b-search │ │ │ │ └── b-search.deps.js │ │ ├── 10-b-search.bemjson.js │ │ └── 20-b-search-under.bemjson.js │ ├── b-search.deps.js │ ├── __layout │ │ ├── b-search__layout.css │ │ └── b-search__layout.ru.md │ ├── b-search.css │ └── b-search.ru.md └── i-jquery │ ├── __outsideclick │ ├── i-jquery__outsideclick.deps.js │ └── i-jquery__outsideclick.js │ ├── __core │ └── i-jquery__core.bemhtml │ └── __leftclick │ └── i-jquery__leftclick.js ├── desktop.sets └── .bem │ └── level.js ├── touch-pad.sets └── .bem │ └── level.js ├── touch-phone.sets └── .bem │ └── level.js ├── .jshintrc ├── .travis.yml ├── .gitignore ├── README.md ├── package.json └── git_hooks └── pre-commit └── jshint /test.blocks: -------------------------------------------------------------------------------- 1 | blocks-test -------------------------------------------------------------------------------- /blocks-common/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common.blocks: -------------------------------------------------------------------------------- 1 | blocks-common -------------------------------------------------------------------------------- /desktop.blocks: -------------------------------------------------------------------------------- 1 | blocks-desktop -------------------------------------------------------------------------------- /touch.blocks: -------------------------------------------------------------------------------- 1 | blocks-touch -------------------------------------------------------------------------------- /.bem/configs/current.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/empty-01.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /blocks-test/i-jasmine/i-jasmine.en.title.txt: -------------------------------------------------------------------------------- 1 | Unit tests library 2 | -------------------------------------------------------------------------------- /blocks-test/i-jasmine/i-jasmine.ru.title.txt: -------------------------------------------------------------------------------- 1 | Библиотека для unit-тестов -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/10-simple-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Link 2 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/10-simple-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Ссылка 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/10-b-logo.en.title.txt: -------------------------------------------------------------------------------- 1 | Simple logo 2 | -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__runner/i-jasmine__runner.en.title.txt: -------------------------------------------------------------------------------- 1 | Tests runner 2 | -------------------------------------------------------------------------------- /blocks-touch/b-icon/b-icon.examples/10-simple-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Simple icon 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-289.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-bemjson.bemhtml: -------------------------------------------------------------------------------- 1 | block b1, tag: 'span' -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/10-b-icon-src.ru.title.txt: -------------------------------------------------------------------------------- 1 | Простая иконка 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/10-b-link-link.en.title.txt: -------------------------------------------------------------------------------- 1 | Simple link 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/20-b-link-pseudo.en.title.txt: -------------------------------------------------------------------------------- 1 | Pseudo-link 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/10-b-logo.ru.title.txt: -------------------------------------------------------------------------------- 1 | Простой логотип 2 | -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__runner/i-jasmine__runner.ru.title.txt: -------------------------------------------------------------------------------- 1 | "Запускатор" тестов -------------------------------------------------------------------------------- /blocks-touch/b-icon/b-icon.examples/10-simple-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Простая иконка 2 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/30-ico-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Link with an icon 2 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/30-ico-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Ссылка с иконкой 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/10-simple-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Простой слайдер -------------------------------------------------------------------------------- /.bem/levels/examples-set.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('./bundles.js'); 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/comments.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-289.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1" 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/single-mix.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-api.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1" 3 | } -------------------------------------------------------------------------------- /blocks-desktop/b-link/__inner/b-link__inner.bemhtml: -------------------------------------------------------------------------------- 1 | block b-link, elem inner, tag: 'span' -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/10-b-link-link.ru.title.txt: -------------------------------------------------------------------------------- 1 | Обычная ссылка 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/20-b-link-pseudo.ru.title.txt: -------------------------------------------------------------------------------- 1 | Псевдоссылка 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/30-b-link-inner.ru.title.txt: -------------------------------------------------------------------------------- 1 | Ссылки с иконками 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/20-b-logo-link.en.title.txt: -------------------------------------------------------------------------------- 1 | Logo with a link 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/20-b-logo-link.ru.title.txt: -------------------------------------------------------------------------------- 1 | Логотип-ссылка 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: {elems: ['css']} 3 | }); 4 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.en.title.txt: -------------------------------------------------------------------------------- 1 | Click event handler 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.ru.title.txt: -------------------------------------------------------------------------------- 1 | Обработчик события click -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__reporter/i-jasmine__reporter.en.title.txt: -------------------------------------------------------------------------------- 1 | Tests reporter 2 | -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__reporter/i-jasmine__reporter.ru.title.txt: -------------------------------------------------------------------------------- 1 | Репортер для тестов -------------------------------------------------------------------------------- /blocks-touch/b-menu/__gap/b-menu__gap.css: -------------------------------------------------------------------------------- 1 | .b-menu__gap 2 | { 3 | width: 100%; 4 | } -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/10-horiz-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Horizontal menu layout 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/40-vert-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Vertical menu layout 2 | -------------------------------------------------------------------------------- /blocks-touch/b-page/b-page.examples/10-simple-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Random blocks page 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/10-simple-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Simple slider 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/40-perscreen-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Поэкранный слайдер -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/comments.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1" 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/empty-attrs.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/empty-attrs.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1" 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-232.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "para" 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-239.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-550.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1" 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/looped-mix.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1" 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/one-symbol-elem.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/single-mix.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1" 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-bemjson.html: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /blocks-common/i-jquery/i-jquery.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: {mod: 'version'} 3 | }); 4 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/30-b-link-inner.en.title.txt: -------------------------------------------------------------------------------- 1 | Links with the icons 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/30-b-logo-slogan.en.title.txt: -------------------------------------------------------------------------------- 1 | Logo with a slogan 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/30-b-logo-slogan.ru.title.txt: -------------------------------------------------------------------------------- 1 | Логотип со слоганом 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/40-vert-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Вертикальная раскладка меню 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/60-simple-two-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Two simple sliders 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/60-simple-two-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Два простых слайдера -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/escaping-this.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1" 3 | } 4 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/20-b-icon-css.ru.title.txt: -------------------------------------------------------------------------------- 1 | Иконка, определённая в CSS 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/10-b-page-simple.en.title.txt: -------------------------------------------------------------------------------- 1 | Page with random blocks 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-ua/i-ua.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ block: 'i-bem', elems: 'html' }] 3 | }) -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__reporter/_type/i-jasmine__reporter_type_html.ru.title.txt: -------------------------------------------------------------------------------- 1 | HTML-репортер -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/10-horiz-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Горизонтальная раскладка меню 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/40-perscreen-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Screen-by-screen slider 2 | -------------------------------------------------------------------------------- /desktop.sets/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('bem-sets/levels/sets'); 2 | -------------------------------------------------------------------------------- /touch-pad.sets/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('bem-sets/levels/sets'); 2 | -------------------------------------------------------------------------------- /blocks-common/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__title/b-menu-vert__title.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-vert, elem title, tag: 'h3' -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/escaping-this.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-254.bemhtml: -------------------------------------------------------------------------------- 1 | block blah { 2 | tag: 'div' 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-550.html: -------------------------------------------------------------------------------- 1 |
foo bar
2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/looped-mix.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-api.html: -------------------------------------------------------------------------------- 1 |
key2
2 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/30-b-icon-sprite.ru.title.txt: -------------------------------------------------------------------------------- 1 | Иконка с использованием спрайта 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/10-b-layout-table.en.title.txt: -------------------------------------------------------------------------------- 1 | Simple layout 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_disabled/b-link_disabled_yes.en.md: -------------------------------------------------------------------------------- 1 | Makes a link or a pseudolink disabled. 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/20-b-page-simple.en.title.txt: -------------------------------------------------------------------------------- 1 | Page with CSS-file connected 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/20-b-page-simple.ru.title.txt: -------------------------------------------------------------------------------- 1 | Страница, подключающая CSS-файл 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/_type/b-text-list_type_ol.bemhtml: -------------------------------------------------------------------------------- 1 | block b-text-list, mod type ol, tag: 'ol' -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.en.title.txt: -------------------------------------------------------------------------------- 1 | Changing a block modifier by click 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.ru.title.txt: -------------------------------------------------------------------------------- 1 | Изменение модификатора блока по-клику -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.en.title.txt: -------------------------------------------------------------------------------- 1 | LiveInit on few events 2 | -------------------------------------------------------------------------------- /blocks-test/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__reporter/_type/i-jasmine__reporter_type_console.ru.title.txt: -------------------------------------------------------------------------------- 1 | Консольный репортер -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__reporter/_type/i-jasmine__reporter_type_html.en.title.txt: -------------------------------------------------------------------------------- 1 | HTML-reporter 2 | -------------------------------------------------------------------------------- /blocks-touch/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/20-target-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Link which opens in a new window 2 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/20-target-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Ссылка, открывающаяся в новом окне 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/30-horiz-simple-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Simple horizontal menu layout 2 | -------------------------------------------------------------------------------- /blocks-touch/b-page/b-page.examples/10-simple-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Страница с произвольными блоками 2 | -------------------------------------------------------------------------------- /touch-phone.sets/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('bem-sets/levels/sets'); 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__trigger/b-menu-vert__trigger.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-vert, elem trigger, tag: 'span' -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/local-var.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-lang.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /blocks-desktop/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.css: -------------------------------------------------------------------------------- 1 | .b-icon 2 | { 3 | font: 0/0 a; 4 | 5 | border: 0; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/10-b-layout-table.ru.title.txt: -------------------------------------------------------------------------------- 1 | Простая раскладка 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/20-b-layout-table-rows.en.title.txt: -------------------------------------------------------------------------------- 1 | Complex layout 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_disabled/b-link_disabled_yes.ru.md: -------------------------------------------------------------------------------- 1 | Делает ссылку или псевдоссылку неактивной. 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/__title/b-menu-horiz__title.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-horiz, elem title, tag: 'h3' -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.js: -------------------------------------------------------------------------------- 1 | BEM.DOM.decl({ name: 'b-menu-horiz', baseBlock: 'i-menu' }); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/10-b-page-simple.ru.title.txt: -------------------------------------------------------------------------------- 1 | Страница с произвольными блоками 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.ru.title.txt: -------------------------------------------------------------------------------- 1 | LiveInit по нескольким событиям -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/60-i-bem-pseudo-link.ru.title.txt: -------------------------------------------------------------------------------- 1 | Реакция на события вложенных блоков (1) -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__reporter/_type/i-jasmine__reporter_type_console.en.title.txt: -------------------------------------------------------------------------------- 1 | Console reporter 2 | -------------------------------------------------------------------------------- /blocks-touch/b-icon/b-icon.css: -------------------------------------------------------------------------------- 1 | .b-icon 2 | { 3 | display: inline-block; 4 | 5 | border: 0; 6 | } -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/20-horiz-title-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Horizontal menu layout with a title 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/50-vert-title-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Vertical menu layout with a title 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-239.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "blabla", 3 | "elem": "gap" 4 | } 5 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/one-symbol-elem.bemhtml: -------------------------------------------------------------------------------- 1 | block b, elem a { 2 | tag: 'x' 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/html-01.xml: -------------------------------------------------------------------------------- 1 | 2 | Это строка
приведёт к падению 3 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/literal-01.xml: -------------------------------------------------------------------------------- 1 | null -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/literal-02.xml: -------------------------------------------------------------------------------- 1 | 500 -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/literal-03.xml: -------------------------------------------------------------------------------- 1 | true -------------------------------------------------------------------------------- /blocks-common/i-system/i-system.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem'} 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bem/bem-bl/HEAD/blocks-desktop/b-icon/b-icon.gif -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/20-b-layout-table-rows.ru.title.txt: -------------------------------------------------------------------------------- 1 | Сложная раскладка 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/10-b-logo.blocks/b-logo/b-logo.css: -------------------------------------------------------------------------------- 1 | .b-logo 2 | { 3 | margin: 20px; 4 | } -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/05-b-menu-horiz-simple.en.title.txt: -------------------------------------------------------------------------------- 1 | Simple horizontal menu 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/30-b-page-with-js.en.title.txt: -------------------------------------------------------------------------------- 1 | Page with connected JS- and CSS-files 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/30-b-page-with-js.ru.title.txt: -------------------------------------------------------------------------------- 1 | Страница с подключением CSS- и JS-файлов 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.blocks/b-square/b-square.bemhtml: -------------------------------------------------------------------------------- 1 | block b-square, js: true 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/30-horiz-simple-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Упрощенная горизонтальная раскладка меню 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/50-vert-title-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Вертикальная раскладка меню с заголовком 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__separator/b-menu-vert__separator.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-vert, elem separator, tag: 'li' 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__trigger/b-menu-vert__trigger.css: -------------------------------------------------------------------------------- 1 | .b-menu-vert__trigger 2 | { 3 | cursor: pointer; 4 | } -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/one-symbol-elem.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b", 3 | "elem": "a" 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/40-b-link-dynamic-pseudo.en.title.txt: -------------------------------------------------------------------------------- 1 | Link with JavaScript functionality 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/40-b-link-dynamic-pseudo.ru.title.txt: -------------------------------------------------------------------------------- 1 | Ссылка с JavaScript-функциональностью 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/20-b-logo-link.blocks/b-logo/b-logo.css: -------------------------------------------------------------------------------- 1 | .b-logo 2 | { 3 | margin: 20px; 4 | } -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/05-b-menu-horiz-simple.ru.title.txt: -------------------------------------------------------------------------------- 1 | Простое горизонтальное меню 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/10-b-menu-horiz-normal.en.title.txt: -------------------------------------------------------------------------------- 1 | Horizontal menu with a list 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/10-b-menu-horiz-normal.ru.title.txt: -------------------------------------------------------------------------------- 1 | Горизонтальное меню списком 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/40-b-page-with-level.en.title.txt: -------------------------------------------------------------------------------- 1 | Page with it's own level of devinition 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/60-i-bem-pseudo-link.en.title.txt: -------------------------------------------------------------------------------- 1 | Reaction on events of the nested blocks (1) 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/20-horiz-title-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Горизонтальная раскладка меню с заголовком 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/i-bem__html.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem' } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-232.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n.html: -------------------------------------------------------------------------------- 1 |
key
2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem', elems: ['html'] } 4 | ] 5 | }) -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/30-b-logo-slogan.blocks/b-logo/b-logo.css: -------------------------------------------------------------------------------- 1 | .b-logo 2 | { 3 | margin: 20px; 4 | } -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/20-b-menu-horiz-complex.en.title.txt: -------------------------------------------------------------------------------- 1 | Table layout horizontal menu 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/40-b-page-with-level.ru.title.txt: -------------------------------------------------------------------------------- 1 | Страница с собственным уровнем переопределения 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/30-simple-images-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Слайдер, который ждет загрузки вложенных картинок -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-254.html: -------------------------------------------------------------------------------- 1 |
0Abstract
text
2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-menu' } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/60-page-nodeps-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Cancellation of automatic initialization on domready 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/40-i-bem-extend.en.title.txt: -------------------------------------------------------------------------------- 1 | Changing/extending standard block behavior using modifier. 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.css: -------------------------------------------------------------------------------- 1 | .b-menu__list 2 | { 3 | margin: 0; 4 | padding: 0; 5 | 6 | list-style: none; 7 | } -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/20-simple-nonfirst-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | simple slider with non-first element by default 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/20-simple-nonfirst-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Простой слайдер с непервым элементом по умолчанию -------------------------------------------------------------------------------- /blocks-touch/i-jquery/__tap/i-jquery__tap.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | {block: 'i-fastclick'} 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-touch/i-pressed-controller/i-pressed-controller.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: {block: 'i-bem', elem: 'dom'} 3 | }) 4 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__item-content/b-menu-vert__item-content.css: -------------------------------------------------------------------------------- 1 | .b-menu-vert__item-content 2 | { 3 | display: none; 4 | } -------------------------------------------------------------------------------- /blocks-common/b-page/__js/b-page__js.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem', elem: 'html' } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-289.bemhtml: -------------------------------------------------------------------------------- 1 | block b1 { 2 | content: applyNext(this._someFlag = 'blah') 3 | } 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/nested-mix.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1", 3 | "mods": { 4 | "x": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-lang.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "block": "b1" 4 | }, 5 | { 6 | "block": "b2" 7 | } 8 | ] -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/entity-01.xml: -------------------------------------------------------------------------------- 1 | 2 | Приходить на работу к одинадцати часам 3 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__internal/i-bem__internal.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem' } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/30-b-link-inner.blocks/b-link/b-link.css: -------------------------------------------------------------------------------- 1 | .b-link:hover 2 | { 3 | color: #f00; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/20-b-menu-horiz-complex.ru.title.txt: -------------------------------------------------------------------------------- 1 | Горизонтальное меню с табличной раскладкой 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/60-page-nodeps-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Отмена автоматической инициализации js-блоков по domready 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/40-i-bem-extend.ru.title.txt: -------------------------------------------------------------------------------- 1 | Изменение/дополнение стандартного поведения блока через модификатор -------------------------------------------------------------------------------- /blocks-desktop/i-ua/i-ua.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-icon/b-icon.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-page/b-page.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/30-simple-images-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Slider that is waiting for the included images loading 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/50-perscreen-nonfirst-bem.ru.title.txt: -------------------------------------------------------------------------------- 1 | Поэкранный слайдер с непервым элементом по умолчанию -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/30-b-menu-horiz-normal-js.en.title.txt: -------------------------------------------------------------------------------- 1 | Horizontal menu with JavaScript functionality 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/__css/b-page__css.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem', elem: 'html' } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/70-csp-with-nonce.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: { elems: ['csp'] } 3 | }) 4 | -------------------------------------------------------------------------------- /blocks-desktop/b-text/b-text.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__separator/b-menu-vert__separator.css: -------------------------------------------------------------------------------- 1 | .b-menu-vert__separator 2 | { 3 | border-bottom: 1px solid #ccc; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/local-var.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1", 3 | "content": [{ 4 | "block": "b2" 5 | }] 6 | } 7 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/single-mix.bemhtml: -------------------------------------------------------------------------------- 1 | block b1, mix: { block: 'b2' } 2 | block b1, tag: 'a' 3 | block b2, tag: 'b' 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/dynamic-03.xml: -------------------------------------------------------------------------------- 1 | ["Новость", "Новости", "Новостей"] 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/bem/techs/i18n.js+bemhtml.js: -------------------------------------------------------------------------------- 1 | exports.baseTechName = 'i18n.js'; 2 | exports.techMixin = require('./js+bemhtml').techMixin; -------------------------------------------------------------------------------- /blocks-common/i-bem/bem/techs/v2/i18n.js+bemhtml.js: -------------------------------------------------------------------------------- 1 | exports.baseTechName = 'i18n.js'; 2 | exports.techMixin = require('./js+bemhtml').techMixin; -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/20-b-link-pseudo.blocks/b-link/b-link.css: -------------------------------------------------------------------------------- 1 | .b-link_pseudo_yes:hover 2 | { 3 | color: #f00; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/30-b-link-inner.ru.md: -------------------------------------------------------------------------------- 1 | Для ссылок с иконками используется элемент `inner`, который оборачивает текст. 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/30-b-menu-horiz-normal-js.ru.title.txt: -------------------------------------------------------------------------------- 1 | Горизонтальное меню с JavaScript-функциональностью 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-search/b-search.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/b-text-list.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: { 3 | block: 'i-ecma', 4 | elem: 'array' 5 | } 6 | }) -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/50-perscreen-nonfirst-bem.en.title.txt: -------------------------------------------------------------------------------- 1 | Screen-by-screen slider with non-first element by default 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__item-content/b-menu-vert__item-content.ru.md: -------------------------------------------------------------------------------- 1 | Не используется без элемента `item-selector`. По умолчанию невидим. 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/empty-attrs.bemhtml: -------------------------------------------------------------------------------- 1 | block b1 { 2 | tag: 'a' 3 | attrs: { invisible: undefined, x: '1' } 4 | } 5 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/json-01.xml: -------------------------------------------------------------------------------- 1 | [ "Новость", "Новости", "Новостей", "Нет нифига" ] -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'b-link' }, 4 | { block: 'b-icon' } 5 | ] 6 | }) 7 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_normal.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { elem: 'title' } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_simple.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { elem: 'title' } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/_label/b-text-list_label_disc.css: -------------------------------------------------------------------------------- 1 | .b-text-list_label_disc .b-text-list__item 2 | { 3 | list-style-type: disc; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/_label/b-text-list_label_none.css: -------------------------------------------------------------------------------- 1 | .b-text-list_label_none .b-text-list__item 2 | { 3 | list-style-type: none; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/i-ua/i-ua.examples/10-i-ua.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-test/i-bem/__test/i-bem__test.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: { block: 'i-bem', elem: 'dom' }, 3 | shouldDeps: { block: 'i-jasmine' } 4 | }) -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__title/b-menu-vert__title.ru.md: -------------------------------------------------------------------------------- 1 | Опциональный элемент. В **HTML** представлен тегом `h3`, выводится перед списком (`ul`). 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/cache/basic.html: -------------------------------------------------------------------------------- 1 |

2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/custom-predicates.bemhtml: -------------------------------------------------------------------------------- 1 | block b-test, this.elem === 'elem-2' || this.elem === 'elem-3', tag: 'span' 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/nested-mix.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "block": "b1" 4 | }, 5 | { 6 | "block": "b2", 7 | "elem": "e2" 8 | } 9 | ] -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/examples.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/10-b-logo.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-239.bemhtml: -------------------------------------------------------------------------------- 1 | content, block para, this.elem === 'cell' || this.elem === 'gap': { 2 | return 'hello'; 3 | } 4 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.en.md: -------------------------------------------------------------------------------- 1 | By default the block produces a tag `img` which has an one-pixel transparent image (.gif) and an empty attribute `alt`. 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/20-b-icon-css.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_inner/b-link_inner_yes.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: [ 3 | { 4 | elems: 'inner' 5 | } 6 | ] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/20-b-logo-link.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-search/b-search.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: [ 3 | { block: 'b-layout-table' }, 4 | { elem: 'layout' } 5 | ] 6 | }) 7 | -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/_label/b-text-list_label_circle.css: -------------------------------------------------------------------------------- 1 | .b-text-list_label_circle .b-text-list__item 2 | { 3 | list-style-type: circle; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/_label/b-text-list_label_square.css: -------------------------------------------------------------------------------- 1 | .b-text-list_label_square .b-text-list__item 2 | { 3 | list-style-type: square; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/40-i-bem-extend.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/tests/10-base_bem.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | var level = require('../../../../.bem/level.js'); 2 | for (var n in level) exports[n] = level[n]; -------------------------------------------------------------------------------- /blocks-touch/i-bem/i-bem.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-fastclick' }, 4 | { block: 'i-pointer-events' } 5 | ] 6 | }) 7 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/30-b-icon-sprite.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_pseudo/b-link_pseudo_yes.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: [ 3 | { 4 | elems: 'inner' 5 | } 6 | ] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/20-b-link-pseudo.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/30-b-link-inner.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/30-b-logo-slogan.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/30-b-page-with-js.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/60-page-nodeps-bem.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/70-csp-with-nonce.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/_position/b-text-list_position_inside.css: -------------------------------------------------------------------------------- 1 | .b-text-list_position_inside .b-text-list__item 2 | { 3 | list-style-position: inside; 4 | } -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/b-text-list.ru.md: -------------------------------------------------------------------------------- 1 | ### Deprecated 2 | 3 | Блок устарел, не рекомендован к использованию и будет удален в следующей мажорной версии. 4 | -------------------------------------------------------------------------------- /blocks-desktop/b-text/b-text.examples/10-b-text-simple.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/60-i-bem-pseudo-link.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-jquery/__outsideclick/i-jquery__outsideclick.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: [ 3 | { block: 'i-ecma', elem: 'function' } 4 | ] 5 | }) -------------------------------------------------------------------------------- /blocks-touch/b-menu/__title/b-menu__title.css: -------------------------------------------------------------------------------- 1 | .b-menu__title 2 | { 3 | margin: 0; 4 | 5 | display: inline-block; 6 | vertical-align: middle; 7 | } 8 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/10-simple-bem.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/40-perscreen-bem.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/60-simple-two-bem.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__submenu/b-menu-vert__submenu.ru.md: -------------------------------------------------------------------------------- 1 | Используется в случае, когда необходимо представить вложенное меню частью списка «меню-родителя». 2 | -------------------------------------------------------------------------------- /blocks-common/i-ua/i-ua.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem', elems: 'dom' }, 4 | { block: 'i-ecma', elems: ['array'] } 5 | ] 6 | }) -------------------------------------------------------------------------------- /blocks-desktop/b-link/_pseudo/b-link_pseudo_yes.en.md: -------------------------------------------------------------------------------- 1 | A **pseudo** modifier is to mark a link that does not open on another page. 2 | It has a dashed underline. 3 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/40-b-link-dynamic-pseudo.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/40-b-link-dynamic-pseudo.blocks/b-page/b-page.css: -------------------------------------------------------------------------------- 1 | .b-page 2 | { 3 | height: 200px; 4 | border: #aaa 1px dotted; 5 | } 6 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/40-b-page-with-level.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/40-b-page-with-level.blocks/b-page/b-page.css: -------------------------------------------------------------------------------- 1 | .b-page 2 | { 3 | margin: 5em; 4 | background-color: lightblue; 5 | } 6 | -------------------------------------------------------------------------------- /blocks-desktop/b-search/b-search.examples/20-b-search-under.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-search/b-search.examples/20-b-search-under.blocks/b-search/b-search.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'b-link' } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.blocks/b-square/_color/b-square_color_green.css: -------------------------------------------------------------------------------- 1 | .b-square_color_green 2 | { 3 | background-color:green; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/_touched/b-tv_touched_yes.css: -------------------------------------------------------------------------------- 1 | .b-tv_touched_yes 2 | { 3 | border:red 3px solid; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/60-i-bem-pseudo-link.blocks/b-pseudo-link-example/b-pseudo-link-example.bemhtml: -------------------------------------------------------------------------------- 1 | block b-pseudo-link-example { 2 | js: true 3 | } -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem', elems: ['html'] }, 4 | { block: 'i-pressed-controller' } 5 | ] 6 | }) -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/20-simple-nonfirst-bem.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/30-simple-images-bem.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__item-content/b-menu-vert__item-content.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: [ 3 | { mods : { visibility : ['visible']} } 4 | ] 5 | }) 6 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/comments.bemhtml: -------------------------------------------------------------------------------- 1 | // comment 2 | /* comment */ 3 | block b /* comment */ { 4 | tag: 'a' // comment 5 | } 6 | 7 | // comment 8 | -------------------------------------------------------------------------------- /blocks-common/i-bem/bem/techs/js-i.js: -------------------------------------------------------------------------------- 1 | exports.baseTechPath = require('bem').require.resolve('./techs/js-i.js'); 2 | exports.techMixin = require('./js.js').techMixin; 3 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/__inner/b-link__inner.en.md: -------------------------------------------------------------------------------- 1 | This element is optional to contain a text of a link. 2 | It is needed if a link includes grafic content, e.g. an icon. 3 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.blocks/b-square/_size/b-square_size_big.css: -------------------------------------------------------------------------------- 1 | .b-square_size_big 2 | { 3 | width:150px; 4 | height:150px; 5 | } 6 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/__click/b-tv__click.css: -------------------------------------------------------------------------------- 1 | .b-tv__click 2 | { 3 | float:right; 4 | margin:10px; 5 | } 6 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/40-i-bem-extend.blocks/b-link/_action/b-link_action_alert.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: { block: 'b-link', mods: { pseudo: 'yes' }} 3 | }) -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/50-perscreen-nonfirst-bem.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__item-content/_visibility/b-menu-vert__item-content_visibility_visible.en.md: -------------------------------------------------------------------------------- 1 | You can make **item-content** element visible using this modificator. 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__item-content/_visibility/b-menu-vert__item-content_visibility_visible.ru.md: -------------------------------------------------------------------------------- 1 | Добавление этого модификатора делает видимым элемент **item-content**. 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__trigger/b-menu-vert__trigger.ru.md: -------------------------------------------------------------------------------- 1 | Может содержать внутри себя опциональный элемент `trigger-icon`, который используется для отображения иконок. 2 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/b-menu-vert.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Vertical menu 3 | * 4 | * @block b-menu-vert 5 | */ 6 | BEM.DOM.decl({ block: 'b-menu-vert', baseBlock: 'i-menu' }); 7 | -------------------------------------------------------------------------------- /blocks-common/i-bem/bem/techs/v2/js-i.js: -------------------------------------------------------------------------------- 1 | exports.baseTechPath = require('bem').require.resolve('./techs/v2/js-i.js'); 2 | exports.techMixin = require('./js.js').techMixin; 3 | -------------------------------------------------------------------------------- /blocks-common/i-jquery/_version/i-jquery_version.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: {block: 'i-bem', elems: ['html']}, 3 | shouldDeps: {block: 'b-page', elem: 'js'} 4 | }); 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/10-b-layout-table.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/10-b-menu-horiz-normal.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-text/b-text.bemhtml: -------------------------------------------------------------------------------- 1 | block b-text { 2 | 3 | this.elem, tag: this.ctx.elem 4 | 5 | this.elem, this.ctx.id, attrs: { id: this.ctx.id } 6 | 7 | } 8 | -------------------------------------------------------------------------------- /.bem/techs/i18n.desc.wiki.js: -------------------------------------------------------------------------------- 1 | exports.techMixin = { 2 | 3 | getSuffixes : function() { 4 | // FIXME: hardcode 5 | return ['ru.desc.wiki']; 6 | } 7 | 8 | }; -------------------------------------------------------------------------------- /.bem/techs/i18n.title.txt.js: -------------------------------------------------------------------------------- 1 | exports.techMixin = { 2 | 3 | getSuffixes : function() { 4 | // FIXME: hardcode 5 | return ['ru.title.txt']; 6 | } 7 | 8 | }; -------------------------------------------------------------------------------- /blocks-common/i-bem/__dom/i-bem__dom.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: { block: 'i-bem', elems: 'html' }, 3 | shouldDeps: { block: 'i-ecma', elems: [ 'string', 'json' ] } 4 | }) 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/20-b-layout-table-rows.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/20-b-menu-horiz-complex.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/30-b-menu-horiz-normal-js.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/b-tv.css: -------------------------------------------------------------------------------- 1 | .b-tv 2 | { 3 | background-color:black; 4 | width:300px; 5 | height:200px; 6 | } 7 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__item-content/_visibility/b-menu-vert__item-content_visibility_visible.css: -------------------------------------------------------------------------------- 1 | .b-menu-vert__item-content_visibility_visible 2 | { 3 | display: block; 4 | } 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_pseudo/b-link_pseudo_yes.ru.md: -------------------------------------------------------------------------------- 1 | Модификация ссылки, подразумевающая действие без перехода на другую страницу. 2 | Визуально имеет пунктирное нижнее подчеркивание. 3 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/__over/b-tv__over.css: -------------------------------------------------------------------------------- 1 | .b-tv__over 2 | { 3 | clear:both; 4 | float:right; 5 | margin:10px; 6 | } 7 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-550.bemhtml: -------------------------------------------------------------------------------- 1 | block b1, default: { 2 | this.mods.foo = 'bar'; 3 | applyNext(); 4 | } 5 | 6 | block b1, mod foo bar, content: 'foo bar'; 7 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/param-xml-01.xml: -------------------------------------------------------------------------------- 1 | В разделе «section» ничего не было найдено.
Показаны результаты поиска по всем разделам Помощи. 2 | -------------------------------------------------------------------------------- /blocks-common/i-jquery/__observable/i-jquery__observable.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: { block: 'i-jquery', elem: 'inherit' }, 3 | shouldDeps: { block: 'i-jquery', elem: 'identify' } 4 | }) -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/10-b-logo.blocks/b-logo/b-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bem/bem-bl/HEAD/blocks-desktop/b-logo/b-logo.examples/10-b-logo.blocks/b-logo/b-logo.png -------------------------------------------------------------------------------- /blocks-test/i-jasmine/i-jasmine.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: [ 3 | { elems: ['runner', 'ajax'] }, 4 | { elem: 'reporter', mods: { type: ['html', 'console'] }} 5 | ] 6 | }) -------------------------------------------------------------------------------- /blocks-touch/b-page/b-page.css: -------------------------------------------------------------------------------- 1 | .b-page 2 | { 3 | font: 12px Helvetica, Arial, sans-serif; 4 | 5 | margin: 0; 6 | 7 | background: #fff; 8 | -webkit-text-size-adjust: none; 9 | } -------------------------------------------------------------------------------- /blocks-common/b-page/__csp/b-page__csp.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | {block: 'i-bem', elems: ['html']}, 4 | {block: 'i-ecma', elems: ['array', 'object']} 5 | ] 6 | }); 7 | -------------------------------------------------------------------------------- /blocks-common/i-ecma/i-ecma.ru.md: -------------------------------------------------------------------------------- 1 | ##Описание 2 | Блок i-ecma позволяет использовать некоторые методы (`forEach`, `map`, ...) из **ECMAScript 5** для браузеров, не имеющих их нативной поддержки. 3 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_simple.css: -------------------------------------------------------------------------------- 1 | .b-menu-horiz_layout_simple .b-menu-horiz__title 2 | { 3 | display: inline-block; 4 | 5 | margin-right: 0.4em; 6 | } 7 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.blocks/b-square/b-square.css: -------------------------------------------------------------------------------- 1 | .b-square 2 | { 3 | background-color:red; 4 | cursor:hand; 5 | width:50px; 6 | height:50px; 7 | } 8 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.blocks/b-square/b-square.css: -------------------------------------------------------------------------------- 1 | .b-square 2 | { 3 | background-color:red; 4 | cursor:hand; 5 | width:50px; 6 | height:50px; 7 | } 8 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/_layout/b-menu_layout_vert.css: -------------------------------------------------------------------------------- 1 | .b-menu_layout_vert .b-menu__title, 2 | .b-menu_layout_vert .b-menu__item, 3 | .b-menu_layout_vert .b-menu__gap 4 | { 5 | display: block; 6 | } -------------------------------------------------------------------------------- /blocks-common/i-bem/__dom/_init/i-bem__dom_init_auto.js: -------------------------------------------------------------------------------- 1 | /* дефолтная инициализация */ 2 | $(function() { 3 | BEM.afterCurrentEvent(function() { 4 | BEM.DOM.init(); 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-lang.bemhtml: -------------------------------------------------------------------------------- 1 | block b1 { 2 | 3 | content: BEM.I18N.lang() 4 | 5 | } 6 | 7 | block b2 { 8 | 9 | content: BEM.I18N.lang('ru') 10 | 11 | } -------------------------------------------------------------------------------- /blocks-desktop/b-link/__inner/b-link__inner.ru.md: -------------------------------------------------------------------------------- 1 | Опциональный элемент, в который помещается текстовое содержимое ссылки. 2 | Необходим, когда ссылка содержит графический контент, например, иконку. 3 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/20-b-logo-link.blocks/b-logo/b-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bem/bem-bl/HEAD/blocks-desktop/b-logo/b-logo.examples/20-b-logo-link.blocks/b-logo/b-logo.png -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/_state/b-tv_state_profilaktika.css: -------------------------------------------------------------------------------- 1 | .b-tv_state_profilaktika 2 | { 3 | background:url(b-tv_state_profilaktika.gif); 4 | } 5 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/_dummy/i-bem__i18n_dummy_yes.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'i-bem', 3 | elem: 'html', 4 | mustDeps: [ 5 | { elem: 'i18n', mod: 'dummy', val: 'yes' } 6 | ] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/30-b-logo-slogan.blocks/b-logo/b-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bem/bem-bl/HEAD/blocks-desktop/b-logo/b-logo.examples/30-b-logo-slogan.blocks/b-logo/b-logo.png -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.css: -------------------------------------------------------------------------------- 1 | .b-link__text 2 | { 3 | vertical-align: middle; 4 | } 5 | 6 | .b-link > .b-icon 7 | { 8 | margin: 0 5px 0 0; 9 | 10 | vertical-align: middle; 11 | } 12 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__item/b-menu-vert__item.ru.md: -------------------------------------------------------------------------------- 1 | Элемент вертикального меню, может содержать любой контент, чаще всего это ссылки или псевдо-ссылки. 2 | 3 | Имеет состояния: `[ current, disabled ]` 4 | -------------------------------------------------------------------------------- /blocks-desktop/i-ua/i-ua.examples/10-i-ua.blocks/b-page/b-page.css: -------------------------------------------------------------------------------- 1 | .i-ua_css_standard 2 | { 3 | background-color: #f5f5ea; 4 | } 5 | 6 | .b-page__body 7 | { 8 | background-color: #fff; 9 | } 10 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "expr" : true, 3 | "undef" : true, 4 | "predef" : ["BEM"], 5 | "browser" : true, 6 | "jquery" : true, 7 | "boss" : true, 8 | "sub" : true 9 | } 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - 0.10 5 | - 0.11 6 | 7 | matrix: 8 | allow_failures: 9 | - node_js: 0.11 10 | 11 | branches: 12 | except: 13 | - 0.1 14 | - 0.2 15 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/b-menu-vert.css: -------------------------------------------------------------------------------- 1 | .b-menu-vert__layout, 2 | .b-menu-vert__separator, 3 | .b-menu-vert__layout-unit 4 | { 5 | margin: 0; 6 | padding: 0; 7 | 8 | list-style: none; 9 | } 10 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/custom-predicates.html: -------------------------------------------------------------------------------- 1 |
Elem 2Elem 2
2 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/looped-mix.bemhtml: -------------------------------------------------------------------------------- 1 | block b1, tag: 'a' 2 | block b1, mix: [{ block: 'b2' }] 3 | block b2, tag: 'b' 4 | block b2, mix: [{ mods: { modname: 'modval' } }, { block: 'b1' }] 5 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/40-i-bem-extend.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/i-bem__i18n.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem', elem: 'html' } 4 | ], 5 | shouldDeps: [ 6 | { elem: 'i18n', mod: 'dummy', val:'yes' } 7 | ] 8 | }) 9 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/20-b-link-pseudo.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/30-b-link-inner.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/30-b-page-with-js.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/60-i-bem-pseudo-link.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/_layout/b-menu_layout_horiz-simple.css: -------------------------------------------------------------------------------- 1 | .b-menu_layout_horiz-simple .b-menu__item, 2 | .b-menu_layout_horiz-simple .b-menu__gap 3 | { 4 | display: inline-block; 5 | vertical-align: middle; 6 | } -------------------------------------------------------------------------------- /blocks-desktop/b-link/_pseudo/b-link_pseudo.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-jquery', elem: 'leftclick' } 4 | ], 5 | shouldDeps: [ 6 | { mods: { pseudo: ['yes', 'no']} } 7 | ] 8 | }) 9 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/40-b-link-dynamic-pseudo.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/40-b-page-with-level.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-touch/b-page/b-page.examples/10-simple-bem.ru.md: -------------------------------------------------------------------------------- 1 | Этот пример показывает, как **BEMJSON** описание страницы 2 | превращается в HTML-код. Воспользуйтесь инспектором элементов, 3 | чтобы посмотреть получившуюся разметку. 4 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/b-menu-vert.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-menu' } 4 | ], 5 | shouldDeps: [ 6 | { elem: 'title' }, 7 | { elem: 'item-content' } 8 | ] 9 | }) 10 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/10-b-page-simple.ru.md: -------------------------------------------------------------------------------- 1 | Этот пример показывает, как **BEMJSON** описание страницы 2 | превращается в HTML-код. Воспользуйтесь инспектором элементов, 3 | чтобы посмотреть получившуюся разметку. 4 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-bemjson.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b1", 3 | "content": { 4 | "block": "i-bem", 5 | "elem": "i18n", 6 | "keyset": "kset", 7 | "key": "test" 8 | } 9 | } -------------------------------------------------------------------------------- /blocks-desktop/b-link/_inner/b-link_inner_yes.en.md: -------------------------------------------------------------------------------- 1 | For a convinient usage of an icon inside a link. 2 | Allows you to add a link to an `{ elem: inner }`. Contains css rules, that shift underlining from the link to its `inner` element. -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/60-page-nodeps-bem.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [], 3 | shouldDeps: [], 4 | noDeps: [ 5 | { block: 'i-bem', elem: 'dom', mods: { init: 'auto' } } 6 | ] 7 | }) -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/20-b-icon-css.blocks/b-icon/b-icon.css: -------------------------------------------------------------------------------- 1 | .b-icon_action_images 2 | { 3 | padding: 16px 0 0 16px; 4 | 5 | background: url(//yastatic.net/lego/_/ExOJSanIrX2IAis4l5gO2uX6M1E.png) no-repeat; 6 | } 7 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/30-b-menu-horiz-normal-js.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-bem', 4 | elem: 'dom', 5 | mods: { 'init' : 'auto' } 6 | }] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-text/_type/b-text_type_global.ru.md: -------------------------------------------------------------------------------- 1 | Позволяет стилизировать текст, редактируемый через всевозможные **wysiwyg**-редакторы. 2 | 3 | Не рекомендован к использованию, так как его реализация не соответвует **BEM**-подходу. 4 | -------------------------------------------------------------------------------- /blocks-desktop/i-ua/i-ua.examples/10-i-ua.blocks/b-page/b-page.bemhtml: -------------------------------------------------------------------------------- 1 | block b-page, mix: { 2 | var mix = applyNext() || []; 3 | 4 | mix.push({ block: 'i-ua', mods: { interaction: 'yes' }, js: true }); 5 | return mix; 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .bem/cache 2 | .sass-cache 3 | node_modules/ 4 | npm-debug.log 5 | 6 | .*.xsl 7 | .*.xsl.* 8 | *.sets 9 | !*.sets/.bem/ 10 | 11 | *.decl.js 12 | 13 | .idea 14 | *.iml 15 | 16 | .DS_Store 17 | 18 | .project 19 | .svn/ 20 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n.bemhtml: -------------------------------------------------------------------------------- 1 | block b1 { 2 | content: BEM.I18N('ktest', 'key') 3 | } 4 | 5 | block b2 { 6 | 7 | elem e2, attrs: { 8 | 'data-key': BEM.I18N('ktest', 'key') 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /blocks-test/i-bem/__test/i-bem__test.bemhtml: -------------------------------------------------------------------------------- 1 | block i-bem, elem test { 2 | 3 | cls: 'i-bem', 4 | attrs: { 'data-bem': JSON.stringify({'i-bem__test':{tests:this.ctx.content||null}}).replace(/"/g, '\'')} 5 | content: null 6 | 7 | } 8 | -------------------------------------------------------------------------------- /blocks-common/b-page/__js/b-page__js.bemhtml: -------------------------------------------------------------------------------- 1 | block b-page, elem js { 2 | 3 | bem: false 4 | 5 | tag: 'script' 6 | 7 | attrs: { 8 | src: this.ctx.url, 9 | nonce: this.ctx.nonce || this._nonce 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/re-entrant.bemhtml: -------------------------------------------------------------------------------- 1 | block b1, content: { 2 | return this.invalid || 'ok'; 3 | } 4 | 5 | block b2, content: { 6 | local(this.invalid = 'bye') { 7 | throw new Error('Oh god'); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/i-bem__i18n.i18n/all.js: -------------------------------------------------------------------------------- 1 | var PATH = require('path'), 2 | FS = require('fs'); 3 | 4 | module.exports = { 5 | 'all': { 6 | '': FS.readFileSync(PATH.resolve(__dirname, './core.js'), 'utf8') 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_inner/b-link_inner_yes.ru.md: -------------------------------------------------------------------------------- 1 | Для удобного использования с иконками. Позволяет добавлять в ссылку элемент **inner**. Содержит только **CSS**-правила, 2 | которые переносят подчеркивание с самой ссылки на ее внутренний элемент. 3 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/escaping-this.bemhtml: -------------------------------------------------------------------------------- 1 | block b1, custom: 'ok' 2 | block b1, tag: { 3 | return [ this ].map(function(ctx) { 4 | return this._mode + '-' + ctx.block + ':' + apply({ _mode: 'custom' }); 5 | }, this); 6 | } 7 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/html-02.xml: -------------------------------------------------------------------------------- 1 | Merhaba!

Ulaşmak istediğiniz sayfa sadece Yandex.Browser'da görüntülenebilmektedir. Devam etmek için buraya tıklayın.

-------------------------------------------------------------------------------- /blocks-desktop/b-link/_pseudo/b-link_pseudo_yes.ie.css: -------------------------------------------------------------------------------- 1 | .i-ua_js_yes .b-link_pseudo_yes 2 | { 3 | zoom: 1; 4 | } 5 | 6 | .i-ua_js_yes .b-link_pseudo_yes, 7 | .i-ua_js_yes .b-link_pseudo_yes .b-link__inner 8 | { 9 | position: relative; 10 | } -------------------------------------------------------------------------------- /blocks-desktop/i-ua/i-ua.examples/10-i-ua.blocks/button/button.bemhtml: -------------------------------------------------------------------------------- 1 | block button { 2 | 3 | tag: 'button' 4 | 5 | content: { 6 | elem: 'text', 7 | tag: 'span', 8 | content: applyNext() 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /blocks-touch/i-jquery/__core/i-jquery__core.bemhtml: -------------------------------------------------------------------------------- 1 | block i-jquery, elem core, default: applyCtx({ 2 | block: 'b-page', 3 | elem: 'js', 4 | nonce: this.ctx.nonce || this._nonce, 5 | url: '//yastatic.net/jquery/1.8.3/jquery.min.js' 6 | }) 7 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-254.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "blah", 3 | "content": [ 4 | "", 5 | 0, 6 | true, 7 | false, 8 | null, 9 | "Abstract", 10 | { "elem": "lem", "content": "text" } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/30-b-icon-sprite.blocks/b-icon/b-icon.css: -------------------------------------------------------------------------------- 1 | .b-icon_action_widgets 2 | { 3 | padding: 16px 0 0 16px; 4 | 5 | background: url(http://yastatic.net/lego/_/PnbTopZ1Vv7fGqbO37Ix712qh2A.png) no-repeat -448px 0; 6 | } 7 | -------------------------------------------------------------------------------- /blocks-desktop/i-jquery/__core/i-jquery__core.bemhtml: -------------------------------------------------------------------------------- 1 | block i-jquery, elem core, default: applyCtx({ 2 | block: 'b-page', 3 | elem: 'js', 4 | nonce: this.ctx.nonce || this._nonce, 5 | url: '//yastatic.net/jquery/1.8.3/jquery.min.js' 6 | }) 7 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/_state/b-tv_state_profilaktika.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bem/bem-bl/HEAD/blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/_state/b-tv_state_profilaktika.gif -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/40-b-page-with-level.ru.md: -------------------------------------------------------------------------------- 1 | На уровне переопределения страницы или проекта, использующих библиотеку блоков, можно определить (или переопределить) внешний вид и поведение блоков. 2 | 3 | В данном случае расширен CSS блока `b-page`. 4 | -------------------------------------------------------------------------------- /blocks-desktop/b-search/__layout/b-search__layout.css: -------------------------------------------------------------------------------- 1 | .b-search__layout-input 2 | { 3 | width: 100%; 4 | 5 | vertical-align: middle; 6 | } 7 | 8 | .b-search__layout-button 9 | { 10 | padding-left: 6px; 11 | 12 | vertical-align: middle; 13 | } 14 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/bem-i18n-api.bemhtml: -------------------------------------------------------------------------------- 1 | block b1 { 2 | 3 | attrs: { 4 | 'data-key': BEM.I18N.key('key1') 5 | } 6 | 7 | content: { 8 | BEM.I18N.keyset('ktest'); 9 | return BEM.I18N.key('key2'); 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/param-empty-01.xml: -------------------------------------------------------------------------------- 1 | 2 | soon 3 | 4 | бла-бла-бла 5 | -------------------------------------------------------------------------------- /blocks-desktop/b-search/b-search.css: -------------------------------------------------------------------------------- 1 | .b-search__input 2 | { 3 | width: 100%; 4 | margin: 0; 5 | 6 | -moz-box-sizing: border-box; 7 | -webkit-box-sizing: border-box; 8 | box-sizing: border-box; 9 | } 10 | 11 | .b-search__button 12 | { 13 | margin: 0; 14 | } -------------------------------------------------------------------------------- /blocks-desktop/b-link/_disabled/b-link_disabled_yes.css: -------------------------------------------------------------------------------- 1 | .b-link_disabled_yes, 2 | .b-link_disabled_yes:hover, 3 | a.b-link_disabled_yes:link, 4 | a.b-link_disabled_yes:visited 5 | { 6 | outline: 0; 7 | cursor: default !important; 8 | 9 | color: #ddd !important; 10 | } 11 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_normal.ie.css: -------------------------------------------------------------------------------- 1 | .b-menu-horiz_layout_normal .b-menu-horiz__title, 2 | .b-menu-horiz_layout_normal .b-menu-horiz__layout, 3 | .b-menu-horiz_layout_normal .b-menu-horiz__layout-unit 4 | { 5 | display: inline; 6 | 7 | zoom: 1; 8 | } 9 | -------------------------------------------------------------------------------- /blocks-desktop/i-ua/i-ua.examples/10-i-ua.blocks/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem', elems: ['dom', 'i18n'] }, 4 | { block: 'i-jquery', elems: ['leftclick', 'tap'] }, 5 | { block: 'i-ua', mods: { interaction: 'yes' } } 6 | ] 7 | }) 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/40-b-link-dynamic-pseudo.blocks/b-page/b-page.js: -------------------------------------------------------------------------------- 1 | /** @requires BEM */ 2 | /** @requires BEM.DOM */ 3 | 4 | BEM.DOM.decl('b-page', {}, { 5 | 6 | live : function() { 7 | this.liveBindTo('click', function(e) {}); 8 | } 9 | 10 | }); 11 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_complex.ru.md: -------------------------------------------------------------------------------- 1 | Использование блока с модификатором `{ layout: 'complex' }` принципиально ничем не отличается. 2 | Для блока в такой модификации создаётся разметка на основе таблицы. Такое решение может потребоваться при некоторых дизайнах. 3 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/20-b-page-simple.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'Page with css file linked', 4 | head: [ 5 | { elem: 'css', url: '_20-b-page-simple.css' } 6 | ], 7 | content: [ 8 | 'Page content' 9 | ] 10 | }) 11 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/cache/basic.bemhtml: -------------------------------------------------------------------------------- 1 | block just-random-block, tag: { 2 | // This was failing before: 3 | return apply((((this.x) = (1)))); 4 | } 5 | 6 | block just-random-block-2, tag: { 7 | // This was failing before: 8 | return apply('mode', { wtf: true }); 9 | } 10 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.css: -------------------------------------------------------------------------------- 1 | .b-layout-table 2 | { 3 | font-size: 100%; 4 | 5 | width: 100%; 6 | 7 | border-collapse: collapse; 8 | } 9 | 10 | .b-layout-table__gap, 11 | .b-layout-table__cell 12 | { 13 | padding: 0; 14 | 15 | vertical-align: top; 16 | } 17 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/20-b-icon-css.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-icon', 4 | head: [ 5 | { elem: 'css', url: '_20-b-icon-css.css' } 6 | ], 7 | content: { 8 | block: 'b-icon', 9 | mods: { action: 'images' } 10 | } 11 | }) 12 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/40-b-page-with-level.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'Page with extra level of definition', 4 | head: [ 5 | { elem: 'css', url: '_40-b-page-with-level.css' } 6 | ], 7 | content: [ 8 | 'Page content' 9 | ] 10 | }) 11 | -------------------------------------------------------------------------------- /blocks-common/i-menu/i-menu.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { 4 | block: 'i-bem', 5 | elem: 'dom' 6 | } 7 | ], 8 | shouldDeps: [ 9 | { 10 | block: 'i-jquery', 11 | elems: ['leftclick', 'tap'] 12 | } 13 | ] 14 | }) 15 | -------------------------------------------------------------------------------- /blocks-common/b-page/b-page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { block: 'i-bem', elems: ['html'] }, 4 | { block: 'i-bem', elem: 'dom', mods: { init: 'auto' } }, 5 | { block: 'i-ua' }, 6 | { block: 'i-jquery', elems: 'core' } 7 | ], 8 | shouldDeps: { elems: 'js' } 9 | }); 10 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/30-b-icon-sprite.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-icon', 4 | head: [ 5 | { elem: 'css', url: '_30-b-icon-sprite.css' } 6 | ], 7 | content: { 8 | block: 'b-icon', 9 | mods: { action: 'widgets' } 10 | } 11 | }) 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Библиотека блоков bem-bl 2 | ======================== 3 | 4 | [Описание библиотеки и примеры](http://bem.github.com/bem-bl/index.ru.html). 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/custom-predicates.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b-test", 3 | "content": { 4 | "elem": "elem-1", 5 | "content": [{ 6 | "elem": "elem-2", 7 | "content": "Elem 2" 8 | }, { 9 | "elem": "elem-2", 10 | "content": "Elem 2" 11 | }] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/_layout/b-menu_layout_horiz.css: -------------------------------------------------------------------------------- 1 | .b-menu_layout_horiz .b-menu__list 2 | { 3 | display: inline-table; 4 | vertical-align: middle; 5 | } 6 | 7 | .b-menu_layout_horiz .b-menu__item, 8 | .b-menu_layout_horiz .b-menu__gap 9 | { 10 | display: table-cell; 11 | vertical-align: middle; 12 | } 13 | -------------------------------------------------------------------------------- /.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('bem/lib/levels/project'); 2 | 3 | exports.getTechs = function() { 4 | 5 | return require('bem').util.extend(this.__base() || {}, { 6 | blocks: 'v2/level-proto', 7 | bundles: 'v2/level-proto', 8 | sets: 'v2/level-proto' 9 | }); 10 | 11 | }; 12 | -------------------------------------------------------------------------------- /blocks-common/i-jquery/_version/i-jquery_version.bemhtml: -------------------------------------------------------------------------------- 1 | block i-jquery, default: applyCtx({ 2 | block: 'b-page', 3 | elem: 'js', 4 | nonce: this.ctx.nonce || this._nonce, 5 | url: this.ctx.url || (this.ctx.protocol ? this.ctx.protocol + ':' : '') + '//yastatic.net/jquery/' + this.mods.version + '/jquery.min.js' 6 | }) 7 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/40-perscreen-bem.blocks/b-my-slider/b-my-slider.css: -------------------------------------------------------------------------------- 1 | .b-my-slider 2 | { 3 | font-size: 16px; 4 | 5 | padding: 20px 0 10px; 6 | } 7 | 8 | .b-my-slider .b-menu__item 9 | { 10 | padding: 0 10px; 11 | 12 | -webkit-box-sizing: border-box; 13 | box-sizing: border-box; 14 | } -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/b-menu-vert.en.md: -------------------------------------------------------------------------------- 1 | This block makes HTML markup for a vertical menu. It is based on a helper block `i-menu`. 2 | 3 | There are two types of elements in this block: 4 | 5 | ##### Layout Elements 6 | 7 | * `layout` 8 | * `layout-unit` 9 | 10 | ##### Functional Element 11 | 12 | * `title` 13 | * `item` 14 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [{ 3 | block: 'i-jquery', 4 | elem: 'css-prefix' 5 | },{ 6 | block: 'b-menu', 7 | mods: { 8 | layout: 'horiz', 9 | 'vert-align': 'top' 10 | } 11 | }, { 12 | block: 'i-ua' 13 | }] 14 | }) 15 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/10-simple-bem.blocks/b-my-slider/b-my-slider.css: -------------------------------------------------------------------------------- 1 | .b-my-slider 2 | { 3 | font-size: 16px; 4 | 5 | padding: 20px 0 10px; 6 | } 7 | 8 | .b-my-slider .b-menu 9 | { 10 | padding: 0 10px; 11 | } 12 | 13 | .b-my-slider .b-menu__item + .b-menu__item 14 | { 15 | padding-left: 20px; 16 | } -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/50-perscreen-nonfirst-bem.blocks/b-my-slider/b-my-slider.css: -------------------------------------------------------------------------------- 1 | .b-my-slider 2 | { 3 | font-size: 16px; 4 | 5 | padding: 20px 0 10px; 6 | } 7 | 8 | .b-my-slider .b-menu__item 9 | { 10 | padding: 0 10px; 11 | 12 | -webkit-box-sizing: border-box; 13 | box-sizing: border-box; 14 | } -------------------------------------------------------------------------------- /.bem/levels/examples.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('bem/lib/levels/simple'); 2 | 3 | exports.getTechs = function() { 4 | 5 | return require('bem').util.extend(require('./bundles.js').getTechs() || {}, { 6 | 'title.txt' : require('path').resolve(__dirname, '../techs/i18n.title.txt.js') 7 | }); 8 | 9 | }; 10 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/60-simple-two-bem.blocks/b-my-slider/b-my-slider.css: -------------------------------------------------------------------------------- 1 | .b-my-slider 2 | { 3 | font-size: 16px; 4 | 5 | padding: 20px 0 10px; 6 | } 7 | 8 | .b-my-slider .b-menu 9 | { 10 | padding: 0 10px; 11 | } 12 | 13 | .b-my-slider .b-menu__item + .b-menu__item 14 | { 15 | padding-left: 20px; 16 | } -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/b-tv.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: { block: 'i-bem', elem: 'dom' }, 3 | shouldDeps: [{ 4 | elems: ['click', 'over'], 5 | }, 6 | { 7 | mods: { 8 | state: 'profilaktika', 9 | touched: 'yes' 10 | } 11 | }] 12 | }) -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/20-simple-nonfirst-bem.blocks/b-my-slider/b-my-slider.css: -------------------------------------------------------------------------------- 1 | .b-my-slider 2 | { 3 | font-size: 16px; 4 | 5 | padding: 20px 0 10px; 6 | } 7 | 8 | .b-my-slider .b-menu 9 | { 10 | padding: 0 10px; 11 | } 12 | 13 | .b-my-slider .b-menu__item + .b-menu__item 14 | { 15 | padding-left: 20px; 16 | } -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.examples/30-simple-images-bem.blocks/b-my-slider/b-my-slider.css: -------------------------------------------------------------------------------- 1 | .b-my-slider 2 | { 3 | font-size: 16px; 4 | 5 | padding: 20px 0 10px; 6 | } 7 | 8 | .b-my-slider .b-menu 9 | { 10 | padding: 0 10px; 11 | } 12 | 13 | .b-my-slider .b-menu__item + .b-menu__item 14 | { 15 | padding-left: 20px; 16 | } -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/cache/basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "cache": "key", 3 | "block": "hello", 4 | 5 | "content": [{ 6 | "block": "how" 7 | }, { 8 | "link": "are" 9 | }, { 10 | "block": "you" 11 | }], 12 | 13 | "links": { 14 | "are": { 15 | "tag": "p", 16 | "block": "are" 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.blocks/b-square/b-square.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { 4 | block: 'i-bem', 5 | elem: 'dom' 6 | } 7 | ], 8 | shouldDeps: [ 9 | { 10 | block: 'b-square', 11 | mods: { size: 'big' } 12 | } 13 | ] 14 | }) -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/gh-232.bemhtml: -------------------------------------------------------------------------------- 1 | block para { 2 | default, !this.ctx._wrap, !this.elem: { 3 | apply( 4 | this._mode = '', 5 | this.ctx._wrap = true, 6 | this.ctx = { 7 | elem: 'inner', 8 | mix: [{ block: this.block }], 9 | content: this.ctx 10 | } 11 | ) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /blocks-common/i-ecma/__string/i-ecma__string.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | String.prototype.trim || (String.prototype.trim = function () { 4 | 5 | var str = this.replace(/^\s\s*/, ''), 6 | ws = /\s/, 7 | i = str.length; 8 | 9 | while(ws.test(str.charAt(--i))); 10 | 11 | return str.slice(0, i + 1); 12 | 13 | }); 14 | 15 | })(); -------------------------------------------------------------------------------- /blocks-common/i-jquery/__is-empty-object/i-jquery__is-empty-object.js: -------------------------------------------------------------------------------- 1 | (function($) { 2 | /** 3 | * @deprecated Will be removed in the next major version. jQuery core has the same method. 4 | */ 5 | $.isEmptyObject || ($.isEmptyObject = function(obj) { 6 | for(var i in obj) return false; 7 | return true; 8 | }); 9 | 10 | })(jQuery); 11 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.blocks/b-square/b-square.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | { 4 | block: 'i-bem', 5 | elem: { name: 'dom' } 6 | } 7 | ], 8 | shouldDeps: [ 9 | { 10 | block: 'b-square', 11 | mods: { color: 'green' } 12 | } 13 | ] 14 | }) -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/nested-mix.bemhtml: -------------------------------------------------------------------------------- 1 | block b1, tag: 'a' 2 | block b1, mix: [ 3 | { block: 'b2', mods: { should: 'pass' } }, 4 | { block: 'b3', elem: 'e3' } 5 | ] 6 | block b2, tag: 'b' 7 | block b2, mod should 'pass', mix: [{ mods: { modname: 'modval' } }] 8 | block b3, tag: 'b' 9 | block b3, elem e3, mix: [{ mods: { modname: 1 } }] 10 | -------------------------------------------------------------------------------- /blocks-test/i-jasmine/__runner/i-jasmine__runner.js: -------------------------------------------------------------------------------- 1 | $(window).load(function() { 2 | 3 | jasmine._reporterInstance = new jasmine.TrivialReporter(); 4 | 5 | setTimeout( 6 | function() { 7 | jasmine.getEnv().addReporter(jasmine._reporterInstance); 8 | jasmine.getEnv().execute(); 9 | }, 10 | 10); 11 | 12 | }); -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_normal.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-horiz, mod layout normal { 2 | 3 | content: [ 4 | this.ctx.title, 5 | { 6 | elem: 'layout', 7 | content: this.ctx.content 8 | } 9 | ] 10 | 11 | elem layout, tag: 'ul' 12 | 13 | elem layout-unit, tag: 'li' 14 | 15 | } 16 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.blocks/b-tv/b-tv.bemhtml: -------------------------------------------------------------------------------- 1 | block b-tv { 2 | 3 | js: true 4 | 5 | elem click { 6 | tag: 'input' 7 | attrs: { type: 'button', value: 'Кликать' } 8 | } 9 | 10 | elem over { 11 | tag: 'input' 12 | attrs: { type: 'button', value: 'Наводить' } 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.examples/10-b-icon-src.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-icon', 4 | head: [ 5 | { elem: 'css', url: '_10-b-icon-src.css' } 6 | ], 7 | content: { 8 | block: 'b-icon', 9 | url: 'http://yastatic.net/lego/_/Kx6F6RQnQFitm0qRxX7vpvfP0K0.png', 10 | alt: 'Иконка Серпа' 11 | } 12 | }) 13 | -------------------------------------------------------------------------------- /blocks-common/b-icon/b-icon.en.md: -------------------------------------------------------------------------------- 1 | This is an abstract container for an icon. 2 | 3 | The block has optional attributes: `alt`, `url`, `width`, `height`. 4 | 5 | Set property `url` to make **b-icon** with another image. The same for attributes `alt`, `width` and `height`. 6 | 7 | It is possible to use css sprites and single images for the block by using css-property `background: url(...);` 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_pseudo/b-link_pseudo_yes.css: -------------------------------------------------------------------------------- 1 | .b-link_pseudo_yes 2 | { 3 | color: #1a3dc1; 4 | } 5 | 6 | .i-ua_js_yes .b-link_pseudo_yes 7 | { 8 | text-decoration: none; 9 | 10 | cursor: pointer; 11 | } 12 | 13 | .i-ua_js_yes .b-link_pseudo_yes .b-link__inner 14 | { 15 | text-decoration: none; 16 | 17 | color: inherit; 18 | border-bottom: 1px dotted; 19 | } 20 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/30-b-page-with-js.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'Page with js file linked', 4 | head: [ 5 | { elem: 'css', url: '_30-b-page-with-js.css' }, 6 | { block: 'i-jquery', elem: 'core' }, 7 | { elem: 'js', url: '_30-b-page-with-js.js' } 8 | ], 9 | content: [ 10 | 'Page content' 11 | ] 12 | }) 13 | -------------------------------------------------------------------------------- /blocks-common/i-ecma/__function/i-ecma__function.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | var slice = Array.prototype.slice; 4 | 5 | Function.prototype.bind || (Function.prototype.bind = function(ctx) { 6 | 7 | var fn = this, 8 | args = slice.call(arguments, 1); 9 | 10 | return function () { 11 | return fn.apply(ctx, args.concat(slice.call(arguments))); 12 | } 13 | 14 | }); 15 | 16 | })(); -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/30-b-menu-horiz-normal-js.ru.md: -------------------------------------------------------------------------------- 1 | **JavaScript**-реализация горизонтального меню позволяет динамически переключать активный пункт меню по клику левой кнопкой мыши. 2 | 3 | Во время переключения на JS BEM-объекте, соответствующем меню создаётся событие `current` с данными о том, какой пункт меню выбран. Блоки, использующие меню, могут реагировать на это событие. 4 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/30-b-page-with-js.ru.md: -------------------------------------------------------------------------------- 1 | К страницам с JavaScript функцинальностью также должен быть подключен **jQuery**. 2 | 3 | Для инициализации блоков в JavaScript по `domReady` нужно определить зависимость (`.deps.js`) блока `b-page` от `i-bem__dom_init_auto`. 4 | Это делается на уровне переопределения проекта, использующего библиотеку, или на уровне преопределения конкретной страницы. 5 | -------------------------------------------------------------------------------- /.bem/levels/sets.js: -------------------------------------------------------------------------------- 1 | var PATH = require('path'), 2 | BEM = require('bem'), 3 | SETS = require('bem-sets'), 4 | environ = require('bem-environ'); 5 | 6 | exports.baseLevelPath = SETS.resolveLevel('sets'); 7 | 8 | exports.getTechs = function() { 9 | return BEM.util.extend(this.__base() || {}, { 10 | 'examples' : PATH.resolve(environ.PRJ_ROOT, '.bem/techs/examples.js') 11 | }); 12 | }; 13 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/lib/bemhtml.js: -------------------------------------------------------------------------------- 1 | // 2 | // API 3 | // 4 | exports.translate = require('./bemhtml/api').translate; 5 | exports.parse = require('./bemhtml/api').parse; 6 | exports.compile = require('./bemhtml/api').compile; 7 | 8 | // 9 | // Jail grammar 10 | // 11 | exports.Jail = require('./ometa/jail').Jail; 12 | 13 | // 14 | // Naive-Cache 15 | // 16 | exports.cache = require('./bemhtml/cache'); 17 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_inner/b-link_inner_yes.css: -------------------------------------------------------------------------------- 1 | .b-link_inner_yes:link, 2 | .b-link_inner_yes:hover, 3 | .b-link_inner_yes:visited 4 | { 5 | text-decoration: none; 6 | } 7 | 8 | .b-link_inner_yes .b-link__inner 9 | { 10 | text-decoration: underline; 11 | 12 | color: inherit; 13 | } 14 | 15 | .b-link_inner_yes .b-icon 16 | { 17 | vertical-align: middle; 18 | 19 | margin-right: 5px; 20 | } -------------------------------------------------------------------------------- /.bem/techs/examples.js: -------------------------------------------------------------------------------- 1 | var PATH = require('path'); 2 | 3 | // путь до базовой технологии 4 | exports.baseTechPath = require.resolve('bem/lib/techs/v2/level-proto'); 5 | 6 | // пеопределяем метод `getBaseLevel`, указываем, что в качестве уровня 7 | // для собранных примеров нужно использовать уровень бандлов 8 | exports.getBaseLevel = function() { 9 | return PATH.resolve(__dirname, '../levels/bundles.js'); 10 | }; 11 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/basic-block.html: -------------------------------------------------------------------------------- 1 |
blalba
blalba
2 | -------------------------------------------------------------------------------- /blocks-common/i-menu/i-menu.ru.md: -------------------------------------------------------------------------------- 1 | ##Описание 2 | Блок-помощник для построения абстрактного меню. 3 | 4 | Содержит js-функциональность, которая используется в блоках `b-menu-vert` и `b-menu-horiz`. 5 | 6 | Слушает событие `leftclick` на элементе `item-selector` и переводит в `{ state: 'current' }` тот элемент `item`, 7 | на котором произошло событие. 8 | 9 | Тригерит событие которое можно использовать из других блоков, использующее любое меню. 10 | -------------------------------------------------------------------------------- /blocks-desktop/b-icon/b-icon.bemhtml: -------------------------------------------------------------------------------- 1 | block b-icon { 2 | 3 | tag: 'img' 4 | attrs: { 5 | 6 | var ctx = this.ctx, 7 | a = { src: '//yastatic.net/lego/_/La6qi18Z8LwgnZdsAr1qy1GwCwo.gif', alt: '' }, 8 | props = ['alt', 'width', 'height'], p; 9 | 10 | ctx.url && (a.src = ctx.url); 11 | while(p = props.shift()) ctx[p] && (a[p] = ctx[p]); 12 | 13 | return a; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /blocks-desktop/b-text-list/b-text-list.bemhtml: -------------------------------------------------------------------------------- 1 | block b-text-list, !this.elem { 2 | 3 | tag: 'ul' //по умолчанию ul 4 | 5 | content, this._.isArray(this.ctx.items): { 6 | 7 | var cont = this.ctx.content = []; 8 | 9 | this.ctx.items.forEach(function(e){ 10 | cont.push({elem: 'item', content: e}) 11 | }) 12 | 13 | return cont; 14 | } 15 | 16 | } 17 | 18 | block b-text-list, elem item, tag: 'li' -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.bemhtml: -------------------------------------------------------------------------------- 1 | block b-link { 2 | mix: [{ 3 | block: 'i-pressed-controller', 4 | js: true 5 | }], 6 | tag: 'span' 7 | 8 | attrs: { 9 | var a = {}; 10 | 11 | this.ctx.url && (a.href = this.ctx.url); 12 | this.ctx.target && (a.target = this.ctx.target); 13 | 14 | return a; 15 | } 16 | 17 | this.ctx.url, tag: 'a' 18 | 19 | elem text, tag: 'span' 20 | } 21 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/10-b-logo.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-logo', 4 | head: [ 5 | { elem: 'css', url: '_10-b-logo.css' } 6 | ], 7 | content: { 8 | block: 'b-logo', 9 | content: { 10 | elem: 'icon', 11 | url: '../../../../blocks-desktop/b-logo/examples/10-b-logo.blocks/b-logo/b-logo.png', 12 | alt: 'logo' 13 | } 14 | } 15 | }) 16 | -------------------------------------------------------------------------------- /blocks-touch/b-icon/b-icon.bemhtml: -------------------------------------------------------------------------------- 1 | block b-icon { 2 | tag: 'i' 3 | 4 | this.ctx.url { 5 | tag: 'img' 6 | attrs: { 7 | var a = { 8 | src: this.ctx.url 9 | }; 10 | 11 | this.ctx.width && (a.width = this.ctx.width); 12 | this.ctx.height && (a.height = this.ctx.height); 13 | this.ctx.alt && (a.alt = this.ctx.alt); 14 | 15 | return a; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/local-var.bemhtml: -------------------------------------------------------------------------------- 1 | this._mode === '', block b1 { 2 | true: { 3 | var x; 4 | if (x !== undefined) throw new Error('x should not change'); 5 | x = true; 6 | applyNext(); 7 | } 8 | tag: 'div' 9 | } 10 | 11 | this._mode === '', block b2 { 12 | true: { 13 | var x; 14 | 15 | if (x !== undefined) throw new Error('x should not change'); 16 | x = true; 17 | applyNext(); 18 | } 19 | tag: 'div' 20 | } 21 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_normal.css: -------------------------------------------------------------------------------- 1 | .b-menu-horiz_layout_normal .b-menu-horiz__layout, 2 | .b-menu-horiz_layout_normal .b-menu-horiz__layout-unit 3 | { 4 | margin: 0; 5 | padding: 0; 6 | 7 | list-style: none; 8 | } 9 | 10 | .b-menu-horiz_layout_normal .b-menu-horiz__title, 11 | .b-menu-horiz_layout_normal .b-menu-horiz__layout, 12 | .b-menu-horiz_layout_normal .b-menu-horiz__layout-unit 13 | { 14 | display: inline-block; 15 | } 16 | -------------------------------------------------------------------------------- /blocks-common/i-ecma/__object/i-ecma__object.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Block i-ecma. Shim for some ES5 methods 3 | * 4 | * @block i-ecma 5 | */ 6 | (function() { 7 | 8 | /** 9 | * Возвращает массив свойств объекта 10 | * 11 | * @param {Object} obj объект 12 | * @returns {Array} 13 | */ 14 | Object.keys || (Object.keys = function(obj) { 15 | var res = []; 16 | 17 | for(var i in obj) obj.hasOwnProperty(i) && 18 | res.push(i); 19 | 20 | return res; 21 | }); 22 | 23 | })(); 24 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'Изменение модификатора блока по клику', 4 | head: [ 5 | { elem: 'css', url: '_17-i-bem-square.css', ie: false }, 6 | { elem: 'css', url: '_17-i-bem-square.ie.css', ie: 'lt IE 8' }, 7 | { block: 'i-jquery', elem: 'core' }, 8 | { elem: 'js', url: '_17-i-bem-square.js' } 9 | ], 10 | content: { 11 | block: 'b-square' 12 | } 13 | }) 14 | -------------------------------------------------------------------------------- /blocks-common/b-link/b-link.en.md: -------------------------------------------------------------------------------- 1 | **b-link** block is used inside the other blocks. 2 | 3 | For a simple like set the following bemjson: 4 | 5 | ```js 6 | { 7 | block: 'b-link', 8 | url: 'http://company.yandex.ru', 9 | title: 'Click here to learn more', 10 | target: '_blank', 11 | content: 'The best company all over the world' 12 | } 13 | ``` 14 | 15 | An `url` property transforms info a `href` attribute. The `title` and `target` properties turn into the relevant attributes. 16 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'Обработчик события click', 4 | head: [ 5 | { elem: 'css', url: '_15-i-bem-click.css', ie: false }, 6 | { elem: 'css', url: '_15-i-bem-click.ie.css', ie: 'lt IE 8' }, 7 | { block: 'i-jquery', elem: 'core' }, 8 | { elem: 'js', url: '_15-i-bem-click.js' } 9 | ], 10 | content: { 11 | block: 'b-square', 12 | js: true 13 | } 14 | }) 15 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.en.md: -------------------------------------------------------------------------------- 1 | A **b-menu-horiz** block provides a horizontal menu. The block also has functionality (implemented on JavaScript) that helps to write scripts with reaction on a menu item when becoming selected. 2 | 3 | HTML markup complexity depends on a block modifier. 4 | 5 | The block has a `layout` modifier with three following values: 6 | 7 | * `horiz` 8 | * `complex` 9 | * `normal` 10 | 11 | **Attention**: This block cannot be used without a `layout` modifier. 12 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.bemhtml: -------------------------------------------------------------------------------- 1 | block b-layout-table { 2 | 3 | tag: 'table' 4 | 5 | elem row, tag: 'tr' 6 | 7 | this.elem === 'cell' || this.elem === 'gap' { 8 | tag: 'td' 9 | attrs: { 10 | 11 | var ctx = this.ctx, 12 | a = {}, 13 | props = ['colspan', 'rowspan'], p; 14 | 15 | while(p = props.shift()) ctx[p] && (a[p] = ctx[p]); 16 | 17 | return a; 18 | } 19 | } 20 | 21 | } 22 | 23 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/10-b-layout-table.blocks/b-layout-table/_layout/b-layout-table_layout_60-40.css: -------------------------------------------------------------------------------- 1 | .b-layout-table_layout_60-40 .b-layout-table__cell 2 | { 3 | width: 60%; 4 | padding: 0.4em 0; 5 | 6 | background: #9c0; 7 | } 8 | 9 | .b-layout-table_layout_60-40 .b-layout-table__cell_position_r 10 | { 11 | width: 40%; 12 | 13 | background: #f3a828; 14 | } 15 | 16 | .b-layout-table_layout_60-40 .b-layout-table__inner 17 | { 18 | margin-right: 20px; 19 | } -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_complex.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-horiz, mod layout complex { 2 | 3 | content: [ 4 | { 5 | elem: 'layout', 6 | tag: 'table', 7 | content: { 8 | elem: 'layout-row', 9 | tag: 'tr', 10 | content: this.ctx.content 11 | } 12 | }] 13 | 14 | this.elem === 'layout-unit' || 15 | this.elem === 'separator' || 16 | this.elem === 'gap', tag: 'td' 17 | } 18 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.ru.md: -------------------------------------------------------------------------------- 1 | Наведение на кнопку включает «профилактику», а клик по другой кнопке выключает её. На любое из этих действий блок реагирует, заворачиваясь в красную рамочку. 2 | 3 | Это поведение описано в js-коде блока `b-tv`. Инициализация блока происходит по двум событиям: наверении курсора на один элемент или клике на другой. 4 | 5 | Возможность задать несколько сценариев инициализации позволяет реализовывать сложные блоки, работу с которыми пользователь может начинать по-разному. 6 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/basic/hash.bemhtml: -------------------------------------------------------------------------------- 1 | nay: this.block 2 | a: 1 3 | b: 1 4 | c: 1 5 | d: 1 6 | e: 1 7 | f: 1 8 | g: 1 9 | h: 1 10 | a1: 1 11 | b1: 1 12 | c1: 1 13 | d1: 1 14 | e1: 1 15 | f1: 1 16 | g1: 1 17 | h1: 1 18 | a2: 2 19 | b2: 2 20 | c2: 2 21 | d2: 2 22 | e2: 2 23 | f2: 2 24 | g2: 2 25 | h2: 2 26 | a3: 3 27 | b3: 3 28 | c3: 3 29 | d3: 3 30 | e3: 3 31 | f3: 3 32 | g3: 3 33 | h3: 3 34 | a4: 4 35 | b4: 4 36 | c4: 4 37 | d4: 4 38 | e4: 4 39 | f4: 4 40 | g4: 4 41 | h4: 4 42 | 43 | true: applyNext({ block: 'ok' }) 44 | -------------------------------------------------------------------------------- /blocks-common/i-ecma/__object/i-ecma__object.test.js: -------------------------------------------------------------------------------- 1 | BEM.TEST.decl({ block : 'i-ecma', elem : 'object' }, function(undefined) { 2 | 3 | describe('keys specs', function() { 4 | [ 5 | { data : {}, res : [] }, 6 | { data : { a : 1, b : 2, c : 2, d : undefined }, res : ['a', 'b', 'c', 'd'] } 7 | ].forEach(function(test) { 8 | it('should be correct result', function() { 9 | expect(Object.keys(test.data)).toEqual(test.res); 10 | }); 11 | }); 12 | }); 13 | 14 | }); -------------------------------------------------------------------------------- /blocks-desktop/b-search/__layout/b-search__layout.ru.md: -------------------------------------------------------------------------------- 1 | Элемент `layout` миксируется с блоком `b-layout-table` в **BEMHTML**-шаблоне блока `b-search`. 2 | 3 | Свойства `input`, `button`, `under`, представляют собой элементы для раскладки `[ layout-input, layout-button, layout-under ]`, которые миксируются с элементами `cell` блока `b-layout-table`, преобразуясь в **HTML** в ячейки таблицы. 4 | 5 | Свойство `under` добавляет еще одну строку с ячейкой, в нее можно помещать дополнительную информацию. Например, ссылка «Расширенный поиск» под поисковым полем. 6 | -------------------------------------------------------------------------------- /blocks-common/i-bem/i-bem.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | {block: 'i-jquery', elem: 'inherit'}, 4 | {block: 'i-jquery', elem: 'identify'}, 5 | {block: 'i-jquery', elem: 'is-empty-object'}, 6 | {block: 'i-jquery', elem: 'debounce'}, 7 | {block: 'i-jquery', elem: 'observable'} 8 | ], 9 | shouldDeps: [ 10 | { block: 'i-ecma', elem: 'object' }, 11 | { block: 'i-ecma', elem: 'array' }, 12 | { block: 'i-ecma', elem: 'function' }, 13 | { elem: 'internal' } 14 | ] 15 | }) 16 | -------------------------------------------------------------------------------- /blocks-common/i-ecma/__string/i-ecma__string.test.js: -------------------------------------------------------------------------------- 1 | BEM.TEST.decl({ block : 'i-ecma', elem : 'string' }, function() { 2 | 3 | describe('trim specs', function() { 4 | [ 5 | { data : ' trim ', res : 'trim' }, 6 | { data : ' trim', res : 'trim' }, 7 | { data : 'trim ', res : 'trim' } 8 | ].forEach(function(test) { 9 | it('should be correct result', function() { 10 | expect(test.data.trim()).toEqual(test.res); 11 | }); 12 | }); 13 | }); 14 | 15 | }); -------------------------------------------------------------------------------- /blocks-desktop/i-ua/i-ua.examples/10-i-ua.blocks/b-text/b-text.css: -------------------------------------------------------------------------------- 1 | .b-text__h3 2 | { 3 | font-size: 1.3em; 4 | 5 | padding: 25px; 6 | } 7 | 8 | .b-text__table 9 | { 10 | width: 85%; 11 | margin: 10px auto; 12 | padding: 25px 0; 13 | 14 | background: #fff; 15 | } 16 | 17 | .b-text__td 18 | { 19 | padding: 15px 25px; 20 | 21 | vertical-align: top; 22 | 23 | border-bottom: 1px solid rgba(83, 83, 83, .33); 24 | } 25 | 26 | .b-text__td:not(:last-child) 27 | { 28 | border-right: 1px solid rgba(83, 83, 83, .33); 29 | } 30 | -------------------------------------------------------------------------------- /blocks-common/i-ua/i-ua.bemhtml: -------------------------------------------------------------------------------- 1 | block i-ua { 2 | tag: 'script', 3 | bem: false, 4 | attrs: { 5 | nonce: this.ctx.nonce || this._nonce 6 | }, 7 | content: [ 8 | ';(function(d,e,c,r){', 9 | 'e=d.documentElement;', 10 | 'c="className";', 11 | 'r="replace";', 12 | 'e[c]=e[c][r]("i-ua_js_no","i-ua_js_yes");', 13 | 'if(d.compatMode!="CSS1Compat")', 14 | 'e[c]=e[c][r]("i-ua_css_standart","i-ua_css_quirks")', 15 | '})(document);' 16 | ].join('') 17 | } 18 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_pseudo/b-link_pseudo.bemhtml: -------------------------------------------------------------------------------- 1 | block b-link, (this.mods && this.mods.pseudo), !this.elem { 2 | 3 | tag: (this.ctx.url? 'a' : 'span') 4 | 5 | js: true 6 | 7 | attrs, !this.ctx.url: { 8 | return {} 9 | }, 10 | 11 | content, !this.ctx._wrap, !this.mods.inner: { 12 | apply( 13 | this._mode = '', 14 | this.ctx = { 15 | elem: 'inner', 16 | content: this.ctx.content, 17 | _wrap: true 18 | } 19 | ); 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_complex.css: -------------------------------------------------------------------------------- 1 | .b-menu-horiz_layout_complex .b-menu-horiz__layout 2 | { 3 | font-size: 100%; 4 | 5 | padding: 0; 6 | 7 | border-collapse: collapse; 8 | } 9 | 10 | .b-menu-horiz_layout_complex .b-menu-horiz__gap, 11 | .b-menu-horiz_layout_complex .b-menu-horiz__separator, 12 | .b-menu-horiz_layout_complex .b-menu-horiz__layout-unit 13 | { 14 | padding: 0; 15 | 16 | border-collapse: collapse; 17 | } 18 | 19 | .b-menu-horiz_layout_complex .b-menu-horiz__gap 20 | { 21 | width: 100%; 22 | } 23 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/tests/10-base_bem.blocks/i-bem/__live-ctx/i-bem__live-ctx.test.js: -------------------------------------------------------------------------------- 1 | BEM.TEST.decl({ block : 'i-bem', elem : 'live-ctx' }, function() { 2 | 3 | it('should be callback called once', function() { 4 | var testElem = $('#once-test'), 5 | childBlock = testElem.find('.b-foo').bem('b-foo'), 6 | callback = jasmine.createSpy(); 7 | 8 | BEM.blocks['b-foo'].on(testElem, 'event', callback); 9 | 10 | childBlock.trigger('event'); 11 | expect(callback.callCount).toEqual(1); 12 | 13 | }); 14 | 15 | }); -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/10-b-menu-horiz-normal.blocks/b-menu-horiz/b-menu-horiz.css: -------------------------------------------------------------------------------- 1 | .b-menu-horiz_layout_normal .b-menu-horiz__title 2 | { 3 | margin-right: 10px; 4 | } 5 | 6 | .b-menu-horiz_layout_normal .b-menu-horiz__item 7 | { 8 | margin: 0 0.2em; 9 | padding: 0.3em 0.4em; 10 | } 11 | 12 | .b-menu-horiz_layout_normal .b-menu-horiz__item_state_current 13 | { 14 | background: yellow; 15 | } 16 | 17 | .b-menu-horiz_layout_normal .b-link:link, 18 | .b-menu-horiz_layout_normal .b-link:visited 19 | { 20 | color: #00c; 21 | } 22 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/40-b-link-dynamic-pseudo.blocks/b-lazy-link/b-lazy-link.js: -------------------------------------------------------------------------------- 1 | /** @requires BEM */ 2 | /** @requires BEM.DOM */ 3 | 4 | BEM.DOM.decl('b-lazy-link', { 5 | 6 | onSetMod : { 7 | 'js' : function() { 8 | var _this = this, 9 | _link = this.findBlockOn('b-link'); 10 | console.log(_link); 11 | setTimeout(function(){ 12 | _link.setMod('pseudo', 'yes') 13 | }, 5000); 14 | } 15 | } 16 | 17 | }, { 18 | 19 | live : false 20 | 21 | }); 22 | -------------------------------------------------------------------------------- /blocks-desktop/b-search/b-search.examples/10-b-search.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-search', 4 | head: [ 5 | { elem: 'css', url: '_10-b-search.css' }, 6 | { block: 'i-jquery', elem: 'core' }, 7 | { elem: 'js', url: '_10-b-search.js' } 8 | ], 9 | content: { 10 | block: 'b-search', 11 | attrs: { action: '/search.xml' }, 12 | input: { 13 | elem: 'input', 14 | attrs: { value: 'Text' } 15 | }, 16 | button: { 17 | elem: 'button' 18 | } 19 | } 20 | }) 21 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.bemhtml: -------------------------------------------------------------------------------- 1 | block b-link { 2 | 3 | tag: 'a' 4 | 5 | attrs: { 6 | 7 | var ctx = this.ctx, 8 | props = ['title', 'target'], 9 | p = typeof ctx.url, 10 | a = { 11 | href: ((p === 'undefined' || p === 'string') ? ctx.url : 12 | (p = [], apply(this._buf = p, this._mode = '', this.ctx = ctx.url), 13 | p.join(''))) 14 | }; 15 | 16 | while(p = props.pop()) ctx[p] && (a[p] = ctx[p]); 17 | 18 | return a; 19 | 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /blocks-common/i-bem/i-bem.en.doc.js: -------------------------------------------------------------------------------- 1 | ({"name":"i-bem","elems":[{"name":"dom","mods":[{"name":"init","vals":[{"name":"auto","techs":[{"name":"js"}],"title":"","bemjsonDesc":""}],"title":"","bemjsonDesc":""}],"techs":[{"name":"js"},{"name":"ru.title.txt"}],"title":"","bemjsonDesc":""},{"name":"html","techs":[{"name":"bemhtml"},{"name":"ru.title.txt"}],"title":"","bemjsonDesc":""},{"name":"internal","techs":[{"name":"js"},{"name":"ru.title.txt"}],"title":"","bemjsonDesc":""}],"techs":[{"name":"en.title.txt"},{"name":"js"},{"name":"ru.title.txt"},{"name":"ru.wiki"}],"title":"Helper to create other blocks","bemjsonDesc":""}) -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/15-i-bem-click.ru.md: -------------------------------------------------------------------------------- 1 | `BEM-js` позволяет инициализировать компонент только тогда, когда пользователь начал с ним работать. 2 | 3 | В примерре клик на квадрат включает/выключает модификатор `color_green` у блока `b-square`. 4 | 5 | Для того, чтобы работал `BEM-js`, у блока должен быть модификатор `is-bem:"yes"` и проставлен атрибут `data-bem`. Это выполняется автоматически при помощи шаблона по-моде `js: true`. 6 | 7 | Java-script инициализация блока происходит при помощи `live`-события, подробнее о работе которого можно прочесть в документации на блок [i-bem](/blocks/i-bem/i-bem.md). 8 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/tests/10-base_bem.blocks/i-bem/__init/i-bem__init.test.js: -------------------------------------------------------------------------------- 1 | BEM.TEST.decl({ block : 'i-bem', elem : 'init' }, function() { 2 | 3 | it('initialization should\'t be sync', function() { 4 | var inited = false; 5 | BEM.DOM.decl('b-sync-init', { 6 | onSetMod : { 7 | 'js' : function() { 8 | inited = true; 9 | } 10 | } 11 | }); 12 | BEM.DOM.init($('
')); 13 | expect(inited).toBeTruthy(); 14 | }); 15 | 16 | }); 17 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_simple.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-horiz, mod layout simple { 2 | 3 | default: { 4 | applyNext(this._separator = this.ctx.separator); 5 | } 6 | 7 | content: [ 8 | this.ctx.title, 9 | // XXX: hack, so `isFirst()` will work as we want 10 | { tag: false, content: this.ctx.content } 11 | ] 12 | 13 | elem item { 14 | default: applyCtx([(this.isFirst()? '' : this._separator), this.ctx]) 15 | 16 | tag: (this.elemMods.state? 'span' : false) 17 | } 18 | 19 | elem layout-unit, tag: false 20 | 21 | } 22 | 23 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/20-i-bem-liveinit-multiple.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'Liveinit по нескольким событиям', 4 | head: [ 5 | { elem: 'css', url: '_20-i-bem-liveinit-multiple.css', ie: false }, 6 | { elem: 'css', url: '_20-i-bem-liveinit-multiple.ie.css', ie: 'lt IE 8' }, 7 | { block: 'i-jquery', elem: 'core' }, 8 | { elem: 'js', url: '_20-i-bem-liveinit-multiple.js' } 9 | ], 10 | content: { 11 | block: 'b-tv', 12 | content: [ 13 | { elem: 'click' }, 14 | { elem: 'over' } 15 | ] 16 | } 17 | }) 18 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/60-i-bem-pseudo-link.blocks/b-pseudo-link-example/b-pseudo-link-example.js: -------------------------------------------------------------------------------- 1 | BEM.DOM.decl('b-pseudo-link-example', { 2 | 3 | onSetMod: { 4 | 5 | 'js': function() { 6 | var link = this.findBlockInside('b-link'); 7 | BEM.blocks['b-link'] 8 | .liveCtxBind(link.domElem, 'click', function(){ 9 | link.elem('inner').text('Кликнутая ссылка'); 10 | }, this); 11 | } 12 | 13 | } 14 | 15 | }, { 16 | 17 | live: function() { 18 | this.liveInitOnBlockInsideInit('b-link'); 19 | } 20 | 21 | } 22 | ); 23 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/dynamic-01.xml: -------------------------------------------------------------------------------- 1 | 2 | count 3 | 4 | Найдена 5 | Найдено 6 | Найдено 7 | count 8 | count 9 | 10 | страница. 11 | страницы. 12 | страниц. 13 | 14 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/tests/10-base_bem.blocks/i-bem/__elem-params/i-bem__elem-params.test.js: -------------------------------------------------------------------------------- 1 | BEM.TEST.decl({ block : 'i-bem', elem : 'elem-params' }, function() { 2 | 3 | it('should be valid elem params', function() { 4 | var testElem = $('#elem-params-test'), 5 | block = testElem.find('.b-foo').bem('b-foo'); 6 | 7 | expect(block.elemParams('elem1').param).toEqual('param1'); 8 | expect(block.elemParams(block.elem('elem1')).param).toEqual('param1'); 9 | expect(block.elemParams('elem2').param).toEqual('param2'); 10 | expect(block.elemParams('elem3').param).toBeUndefined(); 11 | }); 12 | 13 | }); -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/_dummy/i-bem__i18n_dummy_yes.bemhtml: -------------------------------------------------------------------------------- 1 | !function oninit() { 2 | (function(global, bem_) { 3 | 4 | if(bem_.I18N) { 5 | return; 6 | } 7 | 8 | /** @global points to global context */ 9 | global.BEM = bem_; 10 | 11 | /** 12 | * `BEM.I18N` API stub 13 | */ 14 | var i18n = bem_.I18N = function(keyset, key) { 15 | return key; 16 | }; 17 | 18 | i18n.keyset = function() { return i18n } 19 | i18n.key = function(key) { return key } 20 | i18n.lang = function() { return } 21 | 22 | })(this, typeof BEM === 'undefined' ? {} : BEM); 23 | }(); 24 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/40-i-bem-extend.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'Изменение/дополнение стандартного поведения блока через модификатор', 4 | head: [ 5 | { elem: 'css', url: '_40-i-bem-extend.css', ie: false }, 6 | { elem: 'css', url: '_40-i-bem-extend.ie.css', ie: 'lt IE 8' }, 7 | { block: 'i-jquery', elem: 'core' }, 8 | { elem: 'js', url: '_40-i-bem-extend.js' } 9 | ], 10 | content: { 11 | block: 'b-link', 12 | mods: { action: 'alert', pseudo: 'yes' }, 13 | url: 'http://www.yandex.ru/', 14 | content: 'Кликни на ссылку' 15 | } 16 | }) 17 | -------------------------------------------------------------------------------- /blocks-desktop/b-text/b-text.ru.md: -------------------------------------------------------------------------------- 1 | ##Описание 2 | 3 | ### Deprecated 4 | 5 | Блок устарел, не рекомендован к использованию и будет удален в следующей мажорной версии. 6 | 7 | Блок `b-text` обеспечивает единообразие оформления. 8 | 9 | Позволяет задавать произвольные элементы, которые продуцируются в одноименные **HTML**-теги. 10 | 11 | Для содержимого блока определены базовые стили заголовков, списков, начертания текста. 12 | 13 | Каждому элементу блока соотвествует в **CSS**-реализации свой класс. Это позволяет избежать каскада при использовании блока, что в свою очередь уменьшает время, затраченное на процесс вычисления размеров и положения элементов на странице. 14 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/basic-block.json: -------------------------------------------------------------------------------- 1 | { 2 | "block": "b-nojs", 3 | "content": 4 | { 5 | "tag": "b", 6 | "content": { 7 | "tag": "i", 8 | "content": [ 9 | { "elem": "eee", "content": 10 | { "tag": "b", "content": "blalba" } }, 11 | { "block": "b2", "elem": "eee", "content": 12 | { "tag": "b", "content": "blalba" } }, 13 | { "block": "b-bla", "mods": { "0-mode": "v2" } }, 14 | { "block": "b-alb" } 15 | ] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/20-b-logo-link.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-logo', 4 | head: [ 5 | { elem: 'css', url: '_20-b-logo-link.css' } 6 | ], 7 | content: [ 8 | { 9 | block: 'b-logo', 10 | content: { 11 | elem: 'link', 12 | url: '/', 13 | title: 'logo', 14 | icon: { 15 | elem: 'icon', 16 | url: '../../../../blocks-desktop/b-logo/examples/20-b-logo-link.blocks/b-logo/b-logo.png', 17 | alt: 'logo' 18 | } 19 | } 20 | } 21 | ] 22 | }) 23 | -------------------------------------------------------------------------------- /blocks-touch/b-page/b-page.ru.md: -------------------------------------------------------------------------------- 1 | ###Поддержка IE9 2 | 3 | У каждого элемента `css` может быть свойство `ie`. 4 | Если это свойство `false`, то будут использоваться такие `condittional comments`, которые предотвратят использование этих стилей в **IE**. При строчном значении этого свойства тег ``, будет обёрнут в соответствующий `conditional comment` для IE9 5 | 6 | ```bemjson 7 | { 8 | block: 'b-page', 9 | title: 'Page with link', 10 | head: [ 11 | { elem: 'css', url: 'example.css', ie: false }, 12 | { elem: 'css', url: 'example.ie.css', ie: 'gte IE 9' }, 13 | { elem: 'js', url: 'example.js' } 14 | ], 15 | content: 'Page' 16 | } 17 | ``` 18 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/files/i-bem/basic-block.bemhtml: -------------------------------------------------------------------------------- 1 | block b-bla, tag: 'span' 2 | block b-bla, mod 0-mode v2, tag: 'yay' 3 | block b-bla, mix: [{ mods: { m2: 'v2' } }] 4 | block b-bla, js: true 5 | block b-alb, attrs: { bbb: 1, title: 2 } 6 | block b-alb, js: { bbb: 1, title: 2 } 7 | 8 | block b-nojs, tag, !this.elem: 'table' 9 | block b-nojs, default, !this.elem, !this.ctx._wrap: { 10 | local( 11 | this.ctx._wrap = true, 12 | this.ctx = { elem: 'run', content: this.ctx }, 13 | this._mode = '') this.apply(); 14 | } 15 | 16 | elem elem1, default: { 17 | local( 18 | this.ctx = this.ctx.content, 19 | this._mode = '') this.apply(); 20 | } 21 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/60-i-bem-pseudo-link.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'Реакция на события вложенных блоков', 4 | head: [ 5 | { elem: 'css', url: '_60-i-bem-pseudo-link.css', ie: false }, 6 | { elem: 'css', url: '_60-i-bem-pseudo-link.ie.css', ie: 'lt IE 8' }, 7 | { block: 'i-jquery', elem: 'core' }, 8 | { elem: 'js', url: '_60-i-bem-pseudo-link.js' } 9 | ], 10 | content: { 11 | block: 'b-pseudo-link-example', 12 | content: { 13 | block: 'b-link', 14 | mods: { pseudo: 'yes', 'is-bem': 'yes' }, 15 | content: 'Некликнутая ссылка' 16 | } 17 | } 18 | }) 19 | -------------------------------------------------------------------------------- /blocks-desktop/i-jquery/__outsideclick/i-jquery__outsideclick.js: -------------------------------------------------------------------------------- 1 | (function($) { 2 | 3 | var outsideClick = $.event.special.outsideclick = { 4 | 5 | add: function(obj) { 6 | 7 | $(document).on('click.' + obj.guid, outsideClick.handler.bind(this)); 8 | 9 | }, 10 | 11 | remove: function(obj) { 12 | 13 | $(document).off('click.' + obj.guid); 14 | 15 | }, 16 | 17 | handler: function(e) { 18 | 19 | if(!$.contains(this, e.target)) { 20 | 21 | e.type = 'outsideclick'; 22 | 23 | $.event.dispatch.apply(this, arguments); 24 | 25 | e.type = 'click'; 26 | 27 | } 28 | 29 | } 30 | 31 | }; 32 | 33 | })(jQuery); -------------------------------------------------------------------------------- /blocks-desktop/i-bem/tests/10-base_bem.blocks/i-bem/__contains-dom-elem/i-bem__contains-dom-elem.js: -------------------------------------------------------------------------------- 1 | BEM.TEST.decl({ block : 'i-bem', elem : 'contains-dom-elem' }, function() { 2 | 3 | var block; 4 | beforeEach(function() { 5 | block = $('#contains-dom-elem-test').find('.b-foo').bem('b-foo'); 6 | }); 7 | 8 | it('should contains inside elems', function() { 9 | expect(block.containsDomElem(block.elem('e1'))).toBeTruthy(); 10 | expect(block.containsDomElem(block.elem('e2'))).toBeTruthy(); 11 | }); 12 | 13 | it('shouldn\'t contains outside elems', function() { 14 | expect(block.containsDomElem($('#no-contains'))).toBeFalsy(); 15 | }); 16 | 17 | }); -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.css: -------------------------------------------------------------------------------- 1 | /* запрещаем тягание и выделение блоков внутри в декстопных браузерах */ 2 | .b-slider .b-link, 3 | .b-slider .b-form-button, 4 | .b-slider .b-ico 5 | { 6 | -webkit-user-drag: none; 7 | -webkit-user-select: none; 8 | } 9 | 10 | .b-slider__inner 11 | { 12 | overflow: hidden; 13 | } 14 | 15 | .b-slider .b-menu 16 | { 17 | float: left; 18 | 19 | white-space: nowrap; 20 | } 21 | 22 | .i-ua_platform_ios .b-slider .b-menu 23 | { 24 | -webkit-transform: translateZ(0); 25 | } 26 | 27 | .i-ua_platform_wp .b-slider .b-menu__item 28 | { 29 | display: inline-block; 30 | } 31 | 32 | .b-slider_animation_yes 33 | { 34 | pointer-events: none; 35 | } -------------------------------------------------------------------------------- /blocks-touch/b-icon/b-icon.examples/10-simple-bem.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'заголовок', 4 | head: [ 5 | { 6 | elem: 'css', 7 | url: '_10-simple-bem.css' 8 | }, 9 | { 10 | elem: 'css', 11 | ie: true, 12 | url: '_10-simple-bem.ie.css' 13 | }, 14 | { 15 | block: 'i-jquery', 16 | elem: 'core' 17 | }, 18 | { 19 | elem: 'js', 20 | url: '_10-simple-bem.js' 21 | } 22 | ], 23 | content: { 24 | block: 'b-icon', 25 | url: 'http://yastatic.net/lego/_/Kx6F6RQnQFitm0qRxX7vpvfP0K0.png' 26 | } 27 | }) 28 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/17-i-bem-square.blocks/b-square/b-square.js: -------------------------------------------------------------------------------- 1 | /** @requires BEM */ 2 | /** @requires BEM.DOM */ 3 | 4 | BEM.DOM.decl('b-square', { 5 | 6 | onSetMod : { 7 | 8 | 'js' : function() { 9 | var square = this; 10 | 11 | this.bindTo('click', function(){ 12 | square.setMod('size', 'big'); 13 | }); 14 | }, 15 | 16 | 'size' : function() { 17 | this.domElem.append('размер1: ', this.domElem.width() + '
'); 18 | 19 | this.afterCurrentEvent(function(){ 20 | this.domElem.append('размер2: ', this.domElem.width()); 21 | }); 22 | } 23 | } 24 | 25 | }); 26 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/lib/bemhtml/checks.js: -------------------------------------------------------------------------------- 1 | var checks = exports; 2 | 3 | checks.treeStructure = function treeStructure(tree) { 4 | var errors = []; 5 | if (tree.tagStr !== '["getp",["string","_mode"],["get","__$ctx"]]') { 6 | errors.push('Top node does not contain `_mode`, looks like one of ' + 7 | 'templates is missing a `_mode` predicate!'); 8 | } 9 | var depth = 0; 10 | for (var current = tree; tree; tree = tree['default']) { 11 | depth++; 12 | } 13 | if (depth > 5) { 14 | errors.push('Seems like a predicate tree contains some irregularities. ' + 15 | 'Please verify that `_mode` predicate is present everywhere'); 16 | } 17 | 18 | return errors; 19 | }; 20 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-horiz, this.mods { 2 | 3 | js: true 4 | 5 | elem item, default: { 6 | applyNext( 7 | this._mode = '', 8 | this.position = this.position - 1, 9 | this.ctx = { 10 | elem: 'layout-unit', 11 | content: this.ctx 12 | } 13 | ); 14 | } 15 | 16 | elem layout-unit, mix: { 17 | var mix = []; 18 | 19 | this.isFirst() && mix.push({ elemMods: { position: 'first' } }); 20 | this.isLast() && mix.push({ elemMods: { position: 'last' } }); 21 | 22 | return mix; 23 | } 24 | 25 | elem 'item-selector', tag: 'span' 26 | 27 | } 28 | -------------------------------------------------------------------------------- /blocks-touch/b-menu/b-menu.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu { 2 | content: [ 3 | this.ctx.content[0] && this.ctx.content[0].elem === 'title' ? this.ctx.content.shift() : null, 4 | { 5 | elem: 'list', 6 | tag: 'ul', 7 | content: this.ctx.content 8 | } 9 | ] 10 | 11 | elem title, tag: 'h3' 12 | 13 | elem item { 14 | tag: 'li' 15 | 16 | this.isFirst(), mix: [{ 17 | elemMods: { 18 | pos: 'first' 19 | } 20 | }] 21 | 22 | this.isLast(), mix: [{ 23 | elemMods: { 24 | pos: 'last' 25 | } 26 | }] 27 | } 28 | 29 | elem gap, tag: 'li' 30 | } 31 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/10-simple-bem.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'заголовок', 4 | head: [ 5 | { 6 | elem: 'css', 7 | url: '_10-simple-bem.css' 8 | }, 9 | { 10 | elem: 'css', 11 | ie: true, 12 | url: '_10-simple-bem.ie.css' 13 | }, 14 | { 15 | block: 'i-jquery', 16 | elem: 'core' 17 | }, 18 | { 19 | elem: 'js', 20 | url: '_10-simple-bem.js' 21 | } 22 | ], 23 | content: { 24 | block: 'b-link', 25 | url: 'http://yandex.ru', 26 | content: 'Самая посещаемая страница Рунета' 27 | } 28 | }) 29 | -------------------------------------------------------------------------------- /blocks-common/i-request-animation-frame/i-request-animation-frame.js: -------------------------------------------------------------------------------- 1 | (function(w) { 2 | if (w.requestAnimationFrame) return; 3 | if ((w.requestAnimationFrame = w.webkitRequestAnimationFrame) && 4 | (w.cancelAnimationFrame = w.webkitCancelAnimationFrame)) return; 5 | var lastTime = 0; 6 | w.requestAnimationFrame = function(callback) { 7 | var currTime = new Date().getTime(), 8 | timeToCall = Math.max(0, 16 - (currTime - lastTime)), 9 | id = setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); 10 | lastTime = currTime + timeToCall; 11 | return id; 12 | }; 13 | w.cancelAnimationFrame = function(id) { 14 | clearTimeout(id); 15 | } 16 | }(window)); 17 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/_pseudo/b-link_pseudo_yes.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Block b-link 3 | * 4 | * @block b-link 5 | */ 6 | 7 | /** 8 | * Pseudolink 9 | * 10 | */ 11 | BEM.DOM.decl({block: 'b-link', modName: 'pseudo', modVal: 'yes'}, { 12 | 13 | _onClick : function(e) { 14 | 15 | e.preventDefault(); 16 | 17 | this.hasMod('disabled', 'yes') || this.afterCurrentEvent(function() { 18 | this.trigger('click'); 19 | }); 20 | 21 | } 22 | 23 | }, { 24 | 25 | live : function() { 26 | 27 | this.__base.apply(this, arguments); 28 | 29 | this.liveBindTo({ modName : 'pseudo', modVal : 'yes' }, 'leftclick', function(e) { 30 | this._onClick(e); 31 | }); 32 | 33 | } 34 | 35 | }); 36 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/10-b-link-link.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-link', 4 | head: [ 5 | { elem: 'css', url: '_10-b-link-link.css' } 6 | ], 7 | content: [ 8 | { 9 | block: 'b-link', 10 | url: 'http://ya.ru', 11 | content: 'Просто ссылка' 12 | }, 13 | { 14 | block: 'b-link', 15 | url: 'http://ya.ru', 16 | title: 'Заголовок', 17 | target: '_blank', 18 | content: 'Ссылка открывающаяся в новом окне' 19 | }, 20 | { 21 | block: 'b-link', 22 | url: 'http://ya.ru', 23 | content: 'Ссылка cо счетчиком' 24 | } 25 | ] 26 | }) 27 | -------------------------------------------------------------------------------- /blocks-desktop/b-link/b-link.examples/40-b-link-dynamic-pseudo.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | js: true, 4 | title: 'b-link_pseudo_yes', 5 | head: [ 6 | { elem: 'css', url: '_40-b-link-dynamic-pseudo.css', ie: false }, 7 | { elem: 'css', url: '_40-b-link-dynamic-pseudo.ie.css', ie: 'lt IE 8' }, 8 | { block: 'i-jquery', elem: 'core'}, 9 | { elem: 'js', url: '_40-b-link-dynamic-pseudo.js' } 10 | ], 11 | content: [ 12 | { 13 | block: 'b-link', 14 | mods: { lazy: 'yes', pseudo: 'no' }, 15 | mix: [{block: 'b-lazy-link', js: true}], 16 | url: '#', 17 | content: 'I am becoming pseudo link in 5 seconds' 18 | } 19 | ] 20 | }) 21 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/20-target-bem.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'заголовок', 4 | head: [ 5 | { 6 | elem: 'css', 7 | url: '_20-target-bem.css' 8 | }, 9 | { 10 | elem: 'css', 11 | ie: true, 12 | url: '_20-target-bem.ie.css' 13 | }, 14 | { 15 | block: 'i-jquery', 16 | elem: 'core' 17 | }, 18 | { 19 | elem: 'js', 20 | url: '_20-target-bem.js' 21 | } 22 | ], 23 | content: { 24 | block: 'b-link', 25 | url: 'http://yandex.ru', 26 | target: '_blank', 27 | content: 'Самая посещаемая страница Рунета' 28 | } 29 | }) 30 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bem-bl", 3 | "version": "2.11.0", 4 | "private": true, 5 | "dependencies": { 6 | "xjst": "~0.10.0", 7 | "ometajs": "~3.3.5", 8 | "dom-js": "~0.0.9", 9 | "estraverse": "~1.5.0", 10 | "esprima": "~1.0.4", 11 | "escodegen": "~1.2.0", 12 | "bem-environ": "~1.4.0" 13 | }, 14 | "devDependencies": { 15 | "bem-sets": "~0.2.2", 16 | "mocha": "1.2.x", 17 | "benchmark": "~1.0.0", 18 | "microtime": "~0.3.1", 19 | "bem": "0.8.x" 20 | }, 21 | "scripts": { 22 | "test": "mocha --ui tdd --growl --reporter spec blocks-common/i-bem/__html/test/*-test.js blocks-common/i-bem/__i18n/test/test-*.js", 23 | "deps": "bem make libs", 24 | "build": "bem make sets --no-colors" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /blocks-touch/b-slider/b-slider.bemhtml: -------------------------------------------------------------------------------- 1 | block b-slider { 2 | js: true 3 | 4 | mix: { 5 | var mix = []; 6 | 7 | this.ctx.indicator && mix.push({ block: 'b-slider-indicator', js: true }); 8 | this.ctx.arrows && mix.push({ block: 'b-slider-arrows', js: true }); 9 | 10 | return mix; 11 | } 12 | 13 | content: { 14 | var mods = { 15 | layout: 'horiz' 16 | }; 17 | 18 | this.ctx.mods && this.ctx.mods['vert-align'] === 'top' && (mods['vert-align'] = 'top'); 19 | 20 | return { 21 | elem: 'inner', 22 | content: { 23 | block: 'b-menu', 24 | mods: mods, 25 | content: this.ctx.content 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /git_hooks/pre-commit/jshint: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | case "${1}" in 4 | --about ) 5 | echo "check *.js files using jshint" 6 | ;; 7 | * ) 8 | 9 | ERROR_DIR=__JSHINT_TMP_DIR 10 | git diff --cached --name-only --diff-filter=ACMR | grep -e '\.js$' --color=auto | grep -v -P -e '\.(deps|bemjson|test)\.js' | xargs git checkout-index -f --prefix=$ERROR_DIR/ 11 | if [ -d $ERROR_DIR ]; then 12 | jshint $ERROR_DIR --config .jshintrc > $ERROR_DIR/error.log 13 | if [ $? -ne 0 ]; then 14 | sed 's/__JSHINT_TMP_DIR\///g;s/\n/\r/g' $ERROR_DIR/error.log 15 | rm -rf $ERROR_DIR 16 | exit 1 17 | fi 18 | rm -rf $ERROR_DIR 19 | fi 20 | 21 | exit 22 | 23 | esac 24 | -------------------------------------------------------------------------------- /blocks-touch/i-jquery/__tap/i-jquery__tap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Плагин предназначен для эмуляции события tap для touch-платформ. 3 | * Создан для сохранения обратной совместимости 4 | * на проектах, использующих одноверменно islands-библиотек и romochka 5 | */ 6 | 7 | (function($) { 8 | 9 | var tap = $.event.special.tap = { 10 | 11 | setup : function() { 12 | 13 | $(this).bind('click', tap.handler); 14 | 15 | }, 16 | 17 | teardown : function() { 18 | 19 | $(this).unbind('click', tap.handler); 20 | 21 | }, 22 | 23 | handler : function(e) { 24 | 25 | if(!e.button) { 26 | e.type = 'tap'; 27 | $.event.dispatch.apply(this, arguments); 28 | e.type = 'click'; 29 | } 30 | 31 | } 32 | 33 | }; 34 | 35 | })(jQuery); 36 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.examples/70-csp-with-nonce.bemjson.js: -------------------------------------------------------------------------------- 1 | ([ 2 | { 3 | block: 'b-page', 4 | title: 'Page with CSP meta-tag', 5 | nonce: 'test-nonce-value', 6 | csp: { 7 | policies: { 8 | 'script-src': [ 'examples.com' ], 9 | 'style-src': ["'self'", "'unsafe-inline'"] 10 | } 11 | }, 12 | head: [ 13 | { elem: 'css', url: '_70-csp-with-nonce.css' }, 14 | { elem: 'css', url: '_70-csp-with-nonce.ie.css', ie: true }, 15 | { elem: 'css', content: 'body { color: blue; }' }, 16 | { block: 'i-jquery', elem: 'core' }, 17 | { elem: 'js', url: '_70-csp-with-nonce.js' } 18 | ], 19 | content: 'Page with CSP meta-tag' 20 | } 21 | ]) 22 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/i-bem__i18n.bemhtml: -------------------------------------------------------------------------------- 1 | block i-bem, elem i18n { 2 | 3 | default: { 4 | if(!this.ctx) return ''; 5 | 6 | var ctx = this.ctx, 7 | keyset = ctx.keyset, 8 | key = ctx.key, 9 | params = ctx.params || {}; 10 | 11 | if(!(keyset || key)) 12 | return ''; 13 | 14 | /** 15 | * Consider `content` is a reserved param that contains 16 | * valid bemjson data 17 | */ 18 | if(ctx.content) { 19 | var cnt; 20 | params.content = (cnt = [], 21 | apply(this._buf = cnt, this._mode = '', 22 | this.ctx = ctx.content), cnt.join('')); 23 | } 24 | 25 | this._buf.push(BEM.I18N(keyset, key, params)); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /blocks-desktop/b-search/b-search.examples/20-b-search-under.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-search with under row', 4 | head: [ 5 | { elem: 'css', url: '_20-b-search-under.css' }, 6 | { block: 'i-jquery', elem: 'core' }, 7 | { elem: 'js', url: '_20-b-search-under.js' } 8 | ], 9 | content: { 10 | block: 'b-search', 11 | attrs: { action: '/search.xml' }, 12 | input: { 13 | elem: 'input', 14 | attrs: { value: 'Text' } 15 | }, 16 | button: { 17 | elem: 'button' 18 | }, 19 | under: [ 20 | { 21 | block: 'b-link', 22 | url: '/', 23 | content: 'Advanced search' 24 | } 25 | ] 26 | } 27 | }) 28 | -------------------------------------------------------------------------------- /blocks-common/i-ecma/__function/i-ecma__function.test.js: -------------------------------------------------------------------------------- 1 | BEM.TEST.decl({ block : 'i-ecma', elem : 'function' }, function() { 2 | 3 | describe('bind specs', function() { 4 | it('should be called with bound context', function() { 5 | var ctx = {}, 6 | expectedCtx, 7 | fn = (function() { expectedCtx = this; }).bind(ctx); 8 | 9 | fn(); 10 | 11 | expect(expectedCtx).toBe(ctx); 12 | }); 13 | 14 | it('should be called with original and bound params', function() { 15 | var ctx = {}, 16 | spy = jasmine.createSpy(), 17 | fn = spy.bind(ctx, 1, 2); 18 | 19 | fn(3, 4); 20 | 21 | expect(spy.mostRecentCall.args).toEqual([1, 2, 3, 4]); 22 | }); 23 | }); 24 | 25 | }); -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.ru.md: -------------------------------------------------------------------------------- 1 | ##Описание 2 | Блок **b-link** — является ссылкой. Используется в других блоках. 3 | 4 | По умолчанию цвет ссылки – #1A3DC1. 5 | 6 | ##Объявление блока на странице 7 | 8 | Пример использования блока: 9 | 10 | ```bemjson 11 | { 12 | block: 'b-link', 13 | url: 'http://company.yandex.ru', 14 | title: 'Click here to learn more', 15 | target: '_blank', 16 | content: 'The best company all over the world' 17 | } 18 | ``` 19 | В результате BEMHTML-преобразований свойство `url` трансформируется в атрибут `href`. Свойства `title` и `target` — в соответствующие атрибуты. 20 | 21 | ``` 22 | 23 | The best company all over the world 24 | 25 | ``` 26 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/complex-01.xml: -------------------------------------------------------------------------------- 1 | 2 | today 3 | сегодня 4 | 5 | 6 | tomorrow 7 | завтра 8 | 9 | day 10 | 11 | month 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.examples/30-b-logo-slogan.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-logo', 4 | head: [ 5 | { elem: 'css', url: '_30-b-logo-slogan.css' } 6 | ], 7 | content: [ 8 | { 9 | block: 'b-logo', 10 | content: { 11 | elem: 'link', 12 | url: '/', 13 | content: [ 14 | { 15 | elem: 'icon', 16 | url: '../../../../blocks-desktop/b-logo/examples/30-b-logo-slogan.blocks/b-logo/b-logo.png' 17 | }, 18 | { 19 | elem: 'slogan', 20 | content: 'Trademark slogan' 21 | } 22 | ] 23 | } 24 | } 25 | ] 26 | }) 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /.bem/techs/bemjson.js.js: -------------------------------------------------------------------------------- 1 | var Template = require('bem/lib/template'); 2 | 3 | exports.API_VER = 2; 4 | 5 | exports.techMixin = { 6 | getCreateResult : function(path, suffix, vars) { 7 | return Template.process([ 8 | "({", 9 | " block: 'b-page',", 10 | " title: '{{bemBlockName}}',", 11 | " head: [", 12 | " { elem: 'css', url: '_{{bemBlockName}}.css', ie: false },", 13 | " { elem: 'css', url: '_{{bemBlockName}}', ie: true }", 14 | " ],", 15 | " content: [", 16 | " 'block content',", 17 | " { block: 'i-jquery', mods: { version: '1.8.3' } },", 18 | " { elem: 'js', url:'_{{bemBlockName}}.js' }", 19 | " ]", 20 | "})"], vars); 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/lib/bemhtml/cache.js: -------------------------------------------------------------------------------- 1 | var cache = exports; 2 | 3 | // 4 | // ### function Cache () 5 | // Naive-cache constructor 6 | // 7 | function Cache() { 8 | this.map = {}; 9 | }; 10 | 11 | // 12 | // ### function create() 13 | // Constructor wrapper 14 | // 15 | cache.create = function create() { 16 | return new Cache(); 17 | }; 18 | 19 | // 20 | // ### function set (key, value) 21 | // #### @key {String} cache key 22 | // #### @value {Any} value 23 | // Put key into cache 24 | // 25 | Cache.prototype.set = function set(key, value) { 26 | this.map[key] = value; 27 | }; 28 | 29 | // 30 | // ### function get (key) 31 | // #### @key {String} cache key 32 | // Get value from the cache 33 | // 34 | Cache.prototype.get = function get(key) { 35 | if (this.map.hasOwnProperty(key)) return this.map[key]; 36 | return undefined; 37 | }; 38 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/20-b-layout-table-rows.blocks/b-layout-table/_layout/b-layout-table_layout_18-20-60.css: -------------------------------------------------------------------------------- 1 | .b-layout-table_layout_18-20-60 .b-layout-table__cell 2 | { 3 | padding: 0.4em 0; 4 | 5 | background: #00cbbd; 6 | } 7 | 8 | .b-layout-table_layout_18-20-60 .b-layout-table__cell_position_l 9 | { 10 | width: 18%; 11 | 12 | background: #9c0; 13 | } 14 | 15 | .b-layout-table_layout_18-20-60 .b-layout-table__cell_position_m 16 | { 17 | width: 20%; 18 | 19 | background: #dc143c; 20 | } 21 | 22 | .b-layout-table_layout_18-20-60 .b-layout-table__cell_position_r 23 | { 24 | width: 60%; 25 | 26 | background: #f3a828; 27 | } 28 | 29 | .b-layout-table_layout_18-20-60 .b-layout-table__gap 30 | { 31 | width: 2%; 32 | padding-left: 20px; 33 | 34 | background: #ccc; 35 | } 36 | -------------------------------------------------------------------------------- /blocks-common/i-jquery/__identify/i-jquery__identify.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Identify plugin 3 | * 4 | * @version 1.0.0 5 | */ 6 | 7 | (function($) { 8 | 9 | var counter = 0, 10 | expando = '__' + (+new Date), 11 | get = function() { 12 | return 'uniq' + ++counter; 13 | }; 14 | 15 | /** 16 | * Makes unique ID 17 | * @param {Object} [obj] Object that needs to be identified 18 | * @param {Boolean} [onlyGet=false] Return a unique value only if it had already been assigned before 19 | * @returns {String} ID 20 | */ 21 | $.identify = function(obj, onlyGet) { 22 | 23 | if(!obj) return get(); 24 | 25 | var key = 'uniqueID' in obj? 'uniqueID' : expando; // Use when possible. native uniqueID for elements in IE 26 | 27 | return onlyGet || key in obj? 28 | obj[key] : 29 | obj[key] = get(); 30 | 31 | }; 32 | 33 | })(jQuery); -------------------------------------------------------------------------------- /blocks-desktop/b-search/b-search.ru.md: -------------------------------------------------------------------------------- 1 | ##Описание 2 | Поисковая форма, содержащая поле ввода (элемент `input`) и кнопку (элемент `button`). Элементы `input` и `button` являются обязательными. 3 | 4 | Блок `b-search`, преобразуется в тег `
`, внутри которого лежит `[элемент layout](#__layout)`, 5 | отвечающий за раскладку блока. 6 | 7 | Если есть необходимость добавить атрибуты элементам блока или самому блоку, достаточно в **BEMJSON** описать свойство `attrs`, и перечислить в нем все необходимые атрибуты. 8 | 9 | ##Объявление блока на странице 10 | 11 | ```js 12 | { 13 | block: 'b-search', 14 | attrs: { action: '/search.xml' }, 15 | input: { 16 | elem: 'input' 17 | }, 18 | button: { 19 | elem: 'button' 20 | }, 21 | under: { 22 | block: 'b-link', 23 | url: '/', 24 | content: 'Advanced search' 25 | } 26 | } 27 | ``` -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/__item-selector/b-menu-vert__item-selector.ru.md: -------------------------------------------------------------------------------- 1 | Этот элемент появляется в меню, когда требуется реакция на клик по пункту меню. 2 | 3 | Реакция на клик может понадобиться, если при выборе пункта меню нужно что-то сделать на клиенте. Например, загрузить контент по **AJAX**. 4 | 5 | Реакция есть только на клик левой кнопкой мыши. В результате клика соответствующий пункт меню (элемент `item`) приобретает модификатор `{ state: 'current' }`, то есть пункт меню становится «выделенным» (текущим). Предыдущий выделенный пункт меню в то же время теряет модификатор `state`. 6 | 7 | В базовой **CSS**-реализации блока не предоставляется код для визуального выделения текущего пункта меню. Такой код можно реализовать на собственном уровне переопределения. 8 | 9 | Элемент может быть представлен в **DOM** отдельным узлом (`span`) или быть смиксованным с другим блоком, чаще всего с псевдо-ссылкой. 10 | -------------------------------------------------------------------------------- /blocks-desktop/i-jquery/__leftclick/i-jquery__leftclick.js: -------------------------------------------------------------------------------- 1 | /** 2 | * leftClick event plugin 3 | * 4 | * Copyright (c) 2010 Filatov Dmitry (alpha@zforms.ru) 5 | * Dual licensed under the MIT and GPL licenses: 6 | * http://www.opensource.org/licenses/mit-license.php 7 | * http://www.gnu.org/licenses/gpl.html 8 | * 9 | * @version 1.0.0 10 | */ 11 | 12 | (function($) { 13 | 14 | var leftClick = $.event.special.leftclick = { 15 | 16 | setup : function() { 17 | 18 | $(this).bind('click', leftClick.handler); 19 | 20 | }, 21 | 22 | teardown : function() { 23 | 24 | $(this).unbind('click', leftClick.handler); 25 | 26 | }, 27 | 28 | handler : function(e) { 29 | 30 | if(!e.button) { 31 | e.type = 'leftclick'; 32 | $.event.dispatch.apply(this, arguments); 33 | e.type = 'click'; 34 | } 35 | 36 | } 37 | 38 | }; 39 | 40 | })(jQuery); -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.bemhtml: -------------------------------------------------------------------------------- 1 | block b-logo { 2 | 3 | elem link, default: { 4 | var ctx = this.ctx, 5 | content = ctx.content || ctx.icon; 6 | 7 | ctx.icon && (ctx.icon.block = 'b-logo'); 8 | 9 | if(this._.isArray(ctx.content)) for (var c in ctx.content) { 10 | ctx.content[c].elem && (ctx.content[c].block = 'b-logo'); 11 | ctx.content[c].tag = 'span'; 12 | } 13 | 14 | ctx.block = 'b-link' 15 | ctx.elem = undefined, 16 | ctx.content = content, 17 | ctx.mix = [{ block: 'b-logo', elem: 'link' }] 18 | 19 | applyCtx(ctx); 20 | } 21 | 22 | elem icon, default: { 23 | applyNext( 24 | this._mode = '', 25 | this.ctx.elem = undefined, 26 | this.ctx.block = 'b-icon', 27 | this.ctx.mix = [{ block: 'b-logo', elem: 'icon' }] 28 | ); 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/40-i-bem-extend.ru.md: -------------------------------------------------------------------------------- 1 | В примере используется стандартный блок `b-link`. Модификатор `pseudo: "yes"` позволяет воспользоваться BEM-js этого блока. Этот js отслеживает событие `onclick` на ссылке и использует `preventDefault`, благодаря которому несмотря на наличие `href` в ссылке, пользователь после клика не уходит со страницы. 2 | 3 | Для того, чтобы реализовать свою реакцию на ссылку, не нужно повторять этот код. Достаточно доопределить поведение блока. Это делается при помощи BEM-js для кастомного модификатора `action: "alert"`. 4 | 5 | В JS-декларации блока указано, что файл описывает только поведение блока `b-link` с модификатором `action` в значении `alert`. Опредлён метод `_onClick` (такой же как в файле `b-link_pseudo_yes.js`) из общей библиотеки блоков, который является для него родительским. 6 | 7 | Вызов родительского метода осуществляется через конструкцию `this.__base.apply` с передачей необходимых параметров. 8 | -------------------------------------------------------------------------------- /blocks-desktop/b-layout-table/b-layout-table.examples/10-b-layout-table.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'b-layout-table', 4 | head: [ 5 | { elem: 'css', url: '_10-b-layout-table.css' } 6 | ], 7 | content: [ 8 | { 9 | block: 'b-layout-table', 10 | mods: { layout: '60-40'}, 11 | content: { 12 | elem: 'row', 13 | content: [ 14 | { 15 | elem: 'cell', 16 | content: { 17 | elem: 'inner', 18 | content: 'First cell' 19 | } 20 | }, 21 | { 22 | elem: 'cell', 23 | elemMods: { position: 'r'}, 24 | content: 'Second cell' 25 | } 26 | ] 27 | } 28 | } 29 | ] 30 | }) 31 | -------------------------------------------------------------------------------- /blocks-touch/b-link/b-link.examples/30-ico-bem.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block: 'b-page', 3 | title: 'заголовок', 4 | head: [ 5 | { 6 | elem: 'css', 7 | url: '_30-ico-bem.css' 8 | }, 9 | { 10 | elem: 'css', 11 | ie: true, 12 | url: '_30-ico-bem.ie.css' 13 | }, 14 | { 15 | block: 'i-jquery', 16 | elem: 'core' 17 | }, 18 | { 19 | elem: 'js', 20 | url: '_30-ico-bem.js' 21 | } 22 | ], 23 | content: { 24 | block: 'b-link', 25 | url: 'http://yandex.ru', 26 | content: [ 27 | { 28 | block: 'b-ico', 29 | src: 'http://yastatic.net/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico' 30 | }, 31 | { 32 | elem: 'text', 33 | content: 'Самая посещаемая страница Рунета' 34 | } 35 | ] 36 | } 37 | }) 38 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/_layout/b-menu-horiz_layout_simple.ru.md: -------------------------------------------------------------------------------- 1 | В некоторых случаях для вывода меню не нужны даже **DOM**-узлы списка, а достаточно просто перечислить ссылки, разделив их пробелом, запятой или каким-либо специальным символом. 2 | 3 | Для вывода такого меню подходит реализация с модификатором `{ layout: 'normal' }`: 4 | 5 | ```js 6 | { 7 | block: 'b-menu-horiz', 8 | mods: { layout: 'simple' }, 9 | separator: ' | ', 10 | content: [ 11 | { 12 | elem: 'item', 13 | elemMods: { state: 'current' }, 14 | content: 'Home' 15 | }, 16 | { 17 | elem: 'item', 18 | content: { 19 | block: 'b-link', 20 | url: '/', 21 | content: 'Products' 22 | }, 23 | ... 24 | ] 25 | } 26 | ``` 27 | 28 | 29 | **BEMJSON**-меню отличается наличием свойства `separator` — того самого специального символа, который разделяет пункты меню. 30 | 31 | Активный пункт меню в данном примере представлен в виде простого текста в теге `span`. 32 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/files/dynamic-02.xml: -------------------------------------------------------------------------------- 1 | 2 | count 3 | Ничего не найдено на страницах Помощи. 4 |

Найдена
5 |

Найдено
6 |

Найдено
7 |
8 | count 9 | 10 | count 11 | 12 | страница. 13 | страницы. 14 | страниц. 15 | 16 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__html/test/jail-test.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'), 2 | ometajs = require('ometajs'), 3 | bemhtml = require('../lib/bemhtml'); 4 | 5 | suite('Jail Grammar', function() { 6 | function unit(name, src, dst) { 7 | test(name, function() { 8 | var ast = ometajs.grammars.BSJSParser.matchAll(src, 'topLevel'), 9 | translated = bemhtml.Jail.match(ast, 'topLevel', ['$']), 10 | out = ometajs.grammars.BSJSTranslator.match(translated, 'trans'); 11 | 12 | assert.equal(out, dst); 13 | }); 14 | } 15 | 16 | unit('global var', 'a', 'a'); 17 | unit('local var', 'var a', 'var $a'); 18 | unit('local var and use', 'var a;a', '{var $a;$a}'); 19 | unit('local var and define', 'var a;a=1', '{var $a;$a = 1}'); 20 | unit('function with local use', 'function a() {var x = 1; return x}', 21 | 'function $a(){var x = 1;return x}'); 22 | unit('function with outer use', 'var x = 1;function a() {return x}', 23 | '{var $x = 1;function $a(){return $x}}'); 24 | }); 25 | -------------------------------------------------------------------------------- /blocks-common/b-menu-vert/b-menu-vert.bemhtml: -------------------------------------------------------------------------------- 1 | block b-menu-vert { 2 | 3 | content: [ 4 | this.ctx.title, 5 | { 6 | elem: 'layout', 7 | content: this.ctx.content 8 | } 9 | ] 10 | 11 | elem layout, tag: 'ul' 12 | 13 | elem item, default: { 14 | applyNext( 15 | this._mode = '', 16 | this.position = this.position - 1, 17 | this.ctx = { 18 | elem: 'layout-unit', 19 | content: [ this.ctx, this.ctx['item-content'] ] 20 | } 21 | ); 22 | 23 | } 24 | 25 | elem layout-unit { 26 | tag: 'li' 27 | mix: { 28 | var mix = []; 29 | 30 | this.isFirst() && mix.push({ elemMods: { position: 'first' } }); 31 | this.isLast() && mix.push({ elemMods: { position: 'last' } }); 32 | 33 | return mix; 34 | } 35 | } 36 | 37 | elem 'item-selector', tag: 'span' 38 | 39 | elem submenu, tag: 'ul' 40 | 41 | } 42 | 43 | -------------------------------------------------------------------------------- /blocks-desktop/i-bem/i-bem.examples/40-i-bem-extend.blocks/b-link/_action/b-link_action_alert.js: -------------------------------------------------------------------------------- 1 | /** 2 | * The block's BEM declaration can state which block (a block with a modifier or a block with a specific modifier value) 3 | * a given JavaScript component refers to. 4 | * 5 | * In this case, the code is triggered on the b-link_action_alert block 6 | * 7 | * You can find various declarations on the i-bem block's wiki page, blocks/i-bem/i-bem.wiki 8 | */ 9 | BEM.DOM.decl({ name: 'b-link', modName: 'action', modVal: 'alert' }, { 10 | 11 | /** 12 | * The _onClick method is named this for a reason. The name should match 13 | * the name of the parent block method, i.e. b-link_pseudo_yes 14 | */ 15 | _onClick: function(e) { 16 | 17 | // this.base Contains a reference to the corresponding method in the "parent" component 18 | this.__base.apply(this, arguments); 19 | 20 | // Pre-defining the base method using our own code 21 | alert('Text message'); 22 | 23 | } 24 | 25 | }); 26 | -------------------------------------------------------------------------------- /blocks-common/b-icon/b-icon.ru.md: -------------------------------------------------------------------------------- 1 | ##Описание 2 | Блок `b-icon` создает контейнер для изображения. Предоставляет возможность добавлять и редактировать изображение без необходимости правки родительского блока. 3 | 4 | ##Атрибуты блока 5 | Имеет опциональные атрибуты блока: 6 | 7 | * `alt` – устанавливает альтернативный текст для изображений. Такой текст позволяет получить текстовую информацию о рисунке при отключенной в браузере загрузке изображений. 8 | * `url` – задавая url, можно подставлять b-icon новую картинку, со своим alt, шириной и высотой. 9 | * `width` устанавливает ширину изображения. Допускается использовать значения в пикселах или процентах. Если установлена процентная запись, то размеры изображения вычисляются относительно родительского элемента — контейнера, где находится тег ``. 10 | * `height` – устанавливает высоту изображения. Допускается использовать значения в пикселах или процентах. Если установлена процентная запись, то размеры изображения вычисляются относительно родительского элемента — контейнера, где находится тег ``. 11 | -------------------------------------------------------------------------------- /blocks-desktop/b-page/b-page.ru.md: -------------------------------------------------------------------------------- 1 | ###Поддержка IE8+ 2 | 3 | У каждого элемента `css` может быть свойство `ie`. 4 | Если это свойство `false`, то будут использоваться такие `condittional comments`, которые предотвратят использование этих стилей в **IE**. При строчном значении этого свойства тег ``, будет обёрнут в соответствующий `conditional comment`, и этот стиль будет грузиться и использоваться указанных браузерах. 5 | 6 | ```bemjson 7 | { 8 | block: 'b-page', 9 | title: 'Page with link', 10 | head: [ 11 | { elem: 'css', url: 'example.css', ie: false }, 12 | { elem: 'css', url: 'example.ie.css', ie: 'gte IE 8' }, 13 | { elem: 'js', url: 'example.js' } 14 | ], 15 | content: 'Page' 16 | } 17 | ``` 18 | 19 | #### Тег `` для использования **IE9** (и выше) в максимальном **compatibility** режиме 20 | 21 | **BEMHTML**: 22 | 23 | ```js 24 | content: [ 25 | ... 26 | { 27 | tag: 'meta', 28 | attrs: { 'http-equiv': 'X-UA-Compatible', content: 'IE=EmulateIE7, IE=edge' } 29 | }, 30 | ... 31 | ``` 32 | -------------------------------------------------------------------------------- /blocks-desktop/b-text/b-text.css: -------------------------------------------------------------------------------- 1 | .b-text__h1, 2 | .b-text__h2, 3 | .b-text__h3 4 | { 5 | font-size: 1.8em; 6 | font-weight: normal; 7 | 8 | margin: 1.5em 0 0.7em 0; 9 | padding: 0; 10 | } 11 | 12 | .b-text__h3 13 | { 14 | font-size: 1.6em; 15 | 16 | margin: 1em 0 0.5em 0; 17 | } 18 | 19 | .b-text__h4 20 | { 21 | font-size: 1.4em; 22 | font-weight: 400; 23 | 24 | margin: 0.6em 0 0.5em 0; 25 | padding: 0; 26 | } 27 | 28 | .b-text__p 29 | { 30 | margin: 0 0 0.8em; 31 | 32 | line-height: 1.4em; 33 | } 34 | 35 | .b-text__pre, 36 | .b-text__tt 37 | { 38 | font: 100% Monaco, Consolas, "Courier New", monospace; 39 | } 40 | 41 | .b-text__pre 42 | { 43 | margin: 0 0 0.8em; 44 | } 45 | 46 | .b-text__ul, 47 | .b-text__ol 48 | { 49 | margin: 0 0 1em; 50 | padding: 0; 51 | } 52 | 53 | .b-text__li 54 | { 55 | margin: 0 0.2em 0.3em 2.5em; 56 | padding: 0; 57 | } 58 | 59 | .b-text__ol .b-text__li 60 | { 61 | list-style: decimal; 62 | } 63 | 64 | .b-text__ul .b-text__li 65 | { 66 | list-style: disc; 67 | } 68 | -------------------------------------------------------------------------------- /blocks-desktop/b-logo/b-logo.ru.md: -------------------------------------------------------------------------------- 1 | ##Описание 2 | 3 | ### Deprecated 4 | 5 | Блок устарел, не рекомендован к использованию и будет удален в следующей мажорной версии. 6 | 7 | Блок **b-logo** использует внутри себя абстрактную иконку **b-icon** и ссылку **b-link**. 8 | Эти блоки миксируются в **BEMHTML**-шаблоне с соответствующими элементами блока **b-logo**. 9 | 10 | ##Объявление блока на странице 11 | Обычно логотип представляет собой ссылку с изображением. **BEMJSON** для этого варианта: 12 | 13 | ```js 14 | { 15 | block: 'b-logo', 16 | content: { 17 | elem: 'link', 18 | url: '/', 19 | title: 'logo', 20 | icon: { 21 | elem: 'icon', 22 | url: 'http://...', 23 | alt: 'logo' 24 | } 25 | } 26 | } 27 | ``` 28 | Представление блока в HTML, после BEMHTML-преобразования: 29 | 30 | ``` 31 | 36 | ``` 37 | -------------------------------------------------------------------------------- /blocks-common/i-system/i-system.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | var timer, 4 | counter = 0, 5 | isIdle = false, 6 | idleInterval = 0, 7 | channel = BEM.channel('sys'), 8 | TICK_INTERVAL = 50; 9 | 10 | /** 11 | * System channel for tick, idle, wakeup messages 12 | */ 13 | BEM.decl('i-system', {}, { 14 | 15 | start : function() { 16 | 17 | $(document).bind('mousemove keydown', function() { 18 | idleInterval = 0; 19 | if(isIdle) { 20 | isIdle = false; 21 | channel.trigger('wakeup'); 22 | } 23 | }); 24 | 25 | this._tick(); 26 | 27 | }, 28 | 29 | _tick : function() { 30 | 31 | var _this = this; 32 | 33 | channel.trigger('tick', { counter : counter++ }); 34 | 35 | if(!isIdle && (idleInterval += TICK_INTERVAL) > 3000) { 36 | isIdle = true; 37 | channel.trigger('idle'); 38 | } 39 | 40 | timer = setTimeout(function() { 41 | _this._tick(); 42 | }, TICK_INTERVAL); 43 | 44 | } 45 | 46 | }).start(); 47 | 48 | })(); 49 | -------------------------------------------------------------------------------- /blocks-touch/i-pressed-controller/i-pressed-controller.js: -------------------------------------------------------------------------------- 1 | BEM.DOM.decl('i-pressed-controller', { 2 | 3 | onSetMod: { 4 | 5 | js: function() { 6 | 7 | this 8 | .bindTo('pointermove', this._onPointerMove) 9 | .bindToDoc('pointerup pointercancel', this._onPointerUp); 10 | 11 | } 12 | 13 | }, 14 | 15 | _onPointerDown: function(e) { 16 | 17 | var that = this; 18 | 19 | that._pressedTimer = setTimeout(function() { 20 | if (!that._isMove) { 21 | that.setMod('pressed', 'yes'); 22 | } 23 | }, 80); 24 | 25 | }, 26 | 27 | _onPointerMove: function() { 28 | 29 | this._isMove = true; 30 | 31 | }, 32 | 33 | _onPointerUp: function() { 34 | 35 | this.delMod('pressed'); 36 | this._isMove = false; 37 | 38 | clearTimeout(this._pressedTimer); 39 | 40 | } 41 | 42 | },{ 43 | 44 | live: function() { 45 | 46 | this.liveBindTo('pointerdown', function() { 47 | this._onPointerDown(); 48 | }); 49 | 50 | } 51 | 52 | }); 53 | -------------------------------------------------------------------------------- /blocks-desktop/b-menu-horiz/b-menu-horiz.examples/30-b-menu-horiz-normal-js.blocks/b-menu-horiz/b-menu-horiz.css: -------------------------------------------------------------------------------- 1 | .b-menu-horiz_layout_normal .b-menu-horiz__title 2 | { 3 | margin-right: 10px; 4 | } 5 | 6 | .b-menu-horiz_layout_normal .b-menu-horiz__item 7 | { 8 | margin: 0 0.3em; 9 | padding: 0.3em 0.5em; 10 | } 11 | 12 | .b-menu-horiz_layout_normal .b-menu-horiz__item_state_current 13 | { 14 | border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | -webkit-border-radius: 3px; 17 | 18 | background: #ff1900; 19 | } 20 | 21 | .b-menu-horiz_layout_normal .b-menu-horiz__item_state_current .b-menu-horiz__item-selector 22 | { 23 | cursor: default !important; 24 | 25 | color: #fff; 26 | } 27 | 28 | .b-menu-horiz_layout_normal .b-menu-horiz__item_state_disabled a.b-menu-horiz__item-selector, 29 | .b-menu-horiz_layout_normal .b-menu-horiz__item_state_disabled a.b-menu-horiz__item-selector:hover 30 | { 31 | cursor: default; 32 | 33 | color: #ccc !important; 34 | } 35 | 36 | .b-menu-horiz_layout_normal .b-menu-horiz__item-selector .b-link__inner 37 | { 38 | border-bottom: 0 !important; 39 | } 40 | -------------------------------------------------------------------------------- /.bem/levels/bundles.js: -------------------------------------------------------------------------------- 1 | var path = require('path'), 2 | environ = require('bem-environ'), 3 | getPrjTechPath = path.join.bind(null, environ.PRJ_ROOT, '.bem/techs'), 4 | getBemBlTechPath = path.join.bind(null, environ.PRJ_ROOT, 'blocks-common/i-bem/bem/techs/v2'); 5 | 6 | exports.getTechs = function() { 7 | 8 | return { 9 | 'bemjson.js': getPrjTechPath('bemjson.js'), 10 | 'bemdecl.js': 'v2/bemdecl.js', 11 | 'deps.js': 'v2/deps.js', 12 | js: 'v2/js-i', 13 | css: 'v2/css', 14 | 'ie.css': 'v2/ie.css', 15 | 'ie6.css': 'v2/ie6.css', 16 | 'ie7.css': 'v2/ie7.css', 17 | 'ie8.css': 'v2/ie8.css', 18 | 'ie9.css': 'v2/ie9.css', 19 | 20 | i18n: getBemBlTechPath('i18n.js'), 21 | 'i18n.js': getBemBlTechPath('i18n.js.js'), 22 | 'i18n.js+bemhtml': getBemBlTechPath('i18n.js+bemhtml.js'), 23 | 'i18n.html': getBemBlTechPath('i18n.html.js'), 24 | 25 | bemhtml: getBemBlTechPath('bemhtml.js'), 26 | html: getBemBlTechPath('html.js') 27 | }; 28 | 29 | }; 30 | 31 | // Create bundles in bemjson.js tech 32 | exports.defaultTechs = ['bemjson.js']; 33 | -------------------------------------------------------------------------------- /blocks-common/i-bem/__i18n/test/test-js-parser.js: -------------------------------------------------------------------------------- 1 | var ASSERT = require('assert'), 2 | PATH = require('path'), 3 | FS = require('fs'), 4 | inspect = require('util').inspect, 5 | PARSER = require('../lib/tanker.js'); 6 | 7 | function readFile(src) { 8 | return FS.readFileSync(PATH.resolve(__dirname, 'files', src), 'utf-8').toString(); 9 | } 10 | 11 | function unit(name) { 12 | var content = { 13 | src: readFile(name + '.xml') 14 | }; 15 | 16 | PARSER.parseXml(content.src, function(xml) { 17 | var js = PARSER.domToJs(xml); 18 | /* 19 | console.log('\n= FILE:', name); 20 | console.log('\n=== XML ===\n', inspect(xml, false, 23), '\n=== END OF XML ===\n'); 21 | console.log('\n=== JAVASCRIPT ===\n', js, '\n=== END OF JAVASCRIPT ===\n'); 22 | */ 23 | }); 24 | } 25 | 26 | unit('dynamic-01'); 27 | unit('dynamic-02'); 28 | unit('dynamic-03'); 29 | unit('param-xml-01'); 30 | unit('html-01'); 31 | unit('html-02'); 32 | unit('entity-01'); 33 | unit('param-empty-01'); 34 | unit('complex-01'); 35 | unit('literal-01'); 36 | unit('literal-02'); 37 | unit('literal-03'); 38 | unit('json-01'); 39 | unit('empty-01'); 40 | -------------------------------------------------------------------------------- /blocks-common/b-page/__csp/b-page__csp.bemhtml: -------------------------------------------------------------------------------- 1 | block b-page, elem csp { 2 | 3 | bem: false 4 | 5 | tag: 'meta' 6 | 7 | attrs: { 8 | 'http-equiv': 'Content-Security-Policy', 9 | 'content': Object.keys(this.ctx.policies).map(function(name) { 10 | return name + ' ' + this.ctx.policies[name].join(' ') + ';'; 11 | }, this).join(' ') 12 | } 13 | 14 | default: { 15 | var ctx = this.ctx, 16 | nonce = this._nonce, 17 | defaultPolicies = { 18 | 'default-src': [ "'self'"] 19 | }, 20 | noncePolicyFields, 21 | policies; 22 | 23 | policies = this.extend(defaultPolicies, ctx.policies); 24 | 25 | // Nonce works only with