diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..4b67f9c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +language: node_js + +node_js: + - "0.10" + +branches: + only: + - master + - dev + +install: + - npm install + +script: + - grunt test lint + +after_success: + - grunt coverage coveralls diff --git a/Gruntfile.js b/Gruntfile.js index 36c36cd..e86ab38 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -76,6 +76,9 @@ module.exports = function(grunt) { root: 'test/tmp/' } } + }, + coveralls: { + src: 'coverage/lcov.info' } }); diff --git a/README.md b/README.md index 53d8f05..6be6cf2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # Bemer — БЭМ-шаблонизатор +[](http://badge.fury.io/js/bemer) +[](https://travis-ci.org/tenorok/bemer) +[](https://coveralls.io/r/tenorok/bemer) БЭМ — это методология эффективной разработки веб-приложений. Большое количество информации размещено на официальном сайте [http://ru.bem.info](http://ru.bem.info). @@ -501,6 +504,18 @@ bemer({ block: 'header', elem: 'logo' });
``` +При изменении списка модификаторов автоматически накладываются подходящие шаблоны: +```js +bemer + .match('button', { mods: { theme: 'normal' }}) + .match('button_theme_normal', { tag: 'span' }); +bemer({ block: 'button' }); +``` + +```html + +``` + ###### Поле `elemMods` Тип: `{object}` @@ -521,6 +536,18 @@ bemer({ block: 'header', elem: 'logo' }); ``` +При изменении списка модификаторов автоматически накладываются подходящие шаблоны: +```js +bemer + .match('button__label', { elemMods: { size: 'm' }}) + .match('button__label_size_m', { tag: 'label' }); +bemer({ block: 'button', elem: 'label' }); +``` + +```html + +``` + ###### Поле `mix` Тип: `{array}` diff --git a/modules/Pool.js b/modules/Pool.js index 123742a..a08ee07 100644 --- a/modules/Pool.js +++ b/modules/Pool.js @@ -125,7 +125,8 @@ definer('Pool', /** @exports Pool */ function(array, object) { processedTemplates.push(this.pool[index]); // Если изменился набор модификаторов, шаблоны нужно прогонять заново. - if(!object.isEqual(currentBemjson.mods || {}, node.bemjson().mods || {})) { + if(!object.isEqual(currentBemjson.mods || {}, node.bemjson().mods) || + !object.isEqual(currentBemjson.elemMods || {}, node.bemjson().elemMods)) { index = this.pool.length; } } diff --git a/modules/Template.js b/modules/Template.js index 19008a9..c19a9ae 100644 --- a/modules/Template.js +++ b/modules/Template.js @@ -115,10 +115,12 @@ definer('Template', /** @exports Template */ function( /* jshint maxparams: fals } if(this._matches[i].is(bemjson)) { - processedMods.push({ - modName: mods.modName, - elemModName: mods.elemModName - }); + if(mods.modName !== '' || mods.elemModName !== '') { + processedMods.push({ + modName: mods.modName, + elemModName: mods.elemModName + }); + } return this.transform(object.clone(bemjson), data, baseBemjson, modesFromAnotherTemplates, index); } } diff --git a/package.json b/package.json index 8691143..ba0b225 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "grunt-contrib-uglify": "~0.4.0", "grunt-mocha-istanbul": "~2.1.0", "benchmark": "~1.0.0", - "beautify-benchmark": "~0.2.4" + "beautify-benchmark": "~0.2.4", + "grunt-coveralls": "~1.0.0" } } diff --git a/test/bemerTest.js b/test/bemerTest.js index 758e5e0..a163592 100644 --- a/test/bemerTest.js +++ b/test/bemerTest.js @@ -414,6 +414,92 @@ definer('bemerTest', function(assert, bemer, Helpers) { ); }); + describe('Изменение модификатора блока элемента.', function() { + + it('Добавление нового модификатора блоку', function() { + bemer + .match('header__logo', { + mods: { a: 'foo' } + }) + .match('header_a_foo__logo', { + tag: 'header' + }); + assert.equal(bemer({ block: 'header', elem: 'logo' }), + '