Skip to content

Commit

Permalink
Merge pull request #44 from bem/issue-37
Browse files Browse the repository at this point in the history
Simplified API: custom naming convention
  • Loading branch information
Andrew Abramov committed Nov 5, 2014
2 parents 54dc215 + 44d5059 commit de78b58
Show file tree
Hide file tree
Showing 11 changed files with 26 additions and 31 deletions.
10 changes: 4 additions & 6 deletions README.md
Expand Up @@ -264,9 +264,9 @@ bemNaming.isElemMod({ block: 'block',
Custom naming convention
------------------------

To use your own naming convention to define strings that represent BEM-entities we need to create instance of `BEMNaming`-class.
Use `bemNaming` function to create instance to manage naming of your own naming convention.

Constructor `BEMNaming` gets the object from the following options:
Function `bemNaming` gets the object from the following options:

* **String** `elem` — separates element's name from block. Default as `__`.
* **String** `mod` — separates names and values of modifiers from blocks and elements. Default as `_`.
Expand All @@ -275,8 +275,7 @@ Constructor `BEMNaming` gets the object from the following options:
Example:

```js
var BEMNaming = bemNaming.BEMNaming;
var myNaming = new BEMNaming({
var myNaming = bemNaming({
elem: '-',
mod: '--',
wordPattern: '[a-zA-Z0-9]+' // because element and modifier's separators include
Expand Down Expand Up @@ -304,8 +303,7 @@ Read more in the [Guidelines](http://cssguidelin.es/#bem-like-naming).
Example:

```js
var BEMNaming = bemNaming.BEMNaming;
var csswizardry = new BEMNaming({
var csswizardry = bemNaming({
elem: '__',
mod: '--'
});
Expand Down
10 changes: 4 additions & 6 deletions README.ru.md
Expand Up @@ -264,9 +264,9 @@ bemNaming.isElemMod({ block: 'block',
Собственный стиль
-----------------

Чтобы использовать собственный стиль для описания строк, представляющих БЭМ-сущности, потребуется создать инстанс `BEMNaming`-класса.
Используйте функцию `bemNaming`, чтобы создать новый объект для работы в вашем собственном стиле.

Конструктор `BEMNaming` принимает объект из следующих опций:
Функция принимает объект из следующих опций:

* **String** `elem` — отделяет имя элемента от блока. По умолчанию  `__`.
* **String** `mod` — отделяет названия и значения модификаторов от блоков и элементов. По умолчанию  `_`.
Expand All @@ -275,8 +275,7 @@ bemNaming.isElemMod({ block: 'block',
Пример:

```js
var BEMNaming = bemNaming.BEMNaming;
var myNaming = new BEMNaming({
var myNaming = bemNaming({
elem: '-',
mod: '--',
wordPattern: '[a-zA-Z0-9]+' // т.к. сепараторы элемента и модификаотра включают
Expand All @@ -303,8 +302,7 @@ myNaming.stringify({ // 'blockName-elemName--boolElemMod'
Пример:

```js
var BEMNaming = bemNaming.BEMNaming;
var csswizardry = new BEMNaming({
var csswizardry = bemNaming({
elem: '__',
mod: '--'
});
Expand Down
20 changes: 11 additions & 9 deletions lib/bem-naming.js
Expand Up @@ -162,17 +162,19 @@ BEMNaming.prototype._parse = function (obj) {

var defineAsGlobal = true,
originalNaming = new BEMNaming(),
bemNaming = {
BEMNaming: BEMNaming,
validate: function () { return originalNaming.validate.apply(originalNaming, arguments); },
parse: function () { return originalNaming.parse.apply(originalNaming, arguments); },
stringify: function () { return originalNaming.stringify.apply(originalNaming, arguments); },
isBlock: function () { return originalNaming.isBlock.apply(originalNaming, arguments); },
isElem: function () { return originalNaming.isElem.apply(originalNaming, arguments); },
isBlockMod: function () { return originalNaming.isBlockMod.apply(originalNaming, arguments); },
isElemMod: function () { return originalNaming.isElemMod.apply(originalNaming, arguments); }
bemNaming = function (options) {
return new BEMNaming(options);
};

bemNaming.BEMNaming = BEMNaming;
bemNaming.validate = function () { return originalNaming.validate.apply(originalNaming, arguments); };
bemNaming.parse = function () { return originalNaming.parse.apply(originalNaming, arguments); };
bemNaming.stringify = function () { return originalNaming.stringify.apply(originalNaming, arguments); };
bemNaming.isBlock = function () { return originalNaming.isBlock.apply(originalNaming, arguments); };
bemNaming.isElem = function () { return originalNaming.isElem.apply(originalNaming, arguments); };
bemNaming.isBlockMod = function () { return originalNaming.isBlockMod.apply(originalNaming, arguments); };
bemNaming.isElemMod = function () { return originalNaming.isElemMod.apply(originalNaming, arguments); };

// Node.js
if (typeof exports === 'object') {
module.exports = bemNaming;
Expand Down
2 changes: 1 addition & 1 deletion test/harry-roberts/isBlock.test.js
@@ -1,4 +1,4 @@
var naming = require('../lib/harry-roberts-naming');
var naming = require('../../lib/bem-naming')({ elem: '__', mod: '--' });

describe('harry roberts', function () {
describe('isBlock', function () {
Expand Down
2 changes: 1 addition & 1 deletion test/harry-roberts/isBlockMod.test.js
@@ -1,4 +1,4 @@
var naming = require('../lib/harry-roberts-naming');
var naming = require('../../lib/bem-naming')({ elem: '__', mod: '--' });

describe('harry roberts', function () {
describe('isBlockMod', function () {
Expand Down
2 changes: 1 addition & 1 deletion test/harry-roberts/isElem.test.js
@@ -1,4 +1,4 @@
var naming = require('../lib/harry-roberts-naming');
var naming = require('../../lib/bem-naming')({ elem: '__', mod: '--' });

describe('harry roberts', function () {
describe('isElem', function () {
Expand Down
2 changes: 1 addition & 1 deletion test/harry-roberts/isElemMod.test.js
@@ -1,4 +1,4 @@
var naming = require('../lib/harry-roberts-naming');
var naming = require('../../lib/bem-naming')({ elem: '__', mod: '--' });

describe('harry roberts', function () {
describe('isElemMod', function () {
Expand Down
2 changes: 1 addition & 1 deletion test/harry-roberts/parse.test.js
@@ -1,5 +1,5 @@
var demand = require('should'),
naming = require('../lib/harry-roberts-naming');
naming = require('../../lib/bem-naming')({ elem: '__', mod: '--' });

describe('harry roberts', function () {
describe('parse', function () {
Expand Down
2 changes: 1 addition & 1 deletion test/harry-roberts/stringify.test.js
@@ -1,4 +1,4 @@
var naming = require('../lib/harry-roberts-naming');
var naming = require('../../lib/bem-naming')({ elem: '__', mod: '--' });

describe('harry roberts', function () {
describe('stringify', function () {
Expand Down
2 changes: 1 addition & 1 deletion test/harry-roberts/validate.test.js
@@ -1,4 +1,4 @@
var naming = require('../lib/harry-roberts-naming');
var naming = require('../../lib/bem-naming')({ elem: '__', mod: '--' });

describe('harry roberts', function () {
describe('validate', function () {
Expand Down
3 changes: 0 additions & 3 deletions test/lib/harry-roberts-naming.js

This file was deleted.

0 comments on commit de78b58

Please sign in to comment.