Skip to content

Commit

Permalink
add className parser for block #195
Browse files Browse the repository at this point in the history
  • Loading branch information
ovvost committed Jun 30, 2015
1 parent b6d8d09 commit 261d11f
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 0 deletions.
21 changes: 21 additions & 0 deletions lib/namer.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ var reClassMod = /^_([\-0-9a-zA-Z]+)(?:_(\S+))?$/;
var be = '__';
var mm = '_';

// класс элемента модуля
var reElementClass = new RegExp('^([\-0-9a-zA-Z]+)' + be + '([\-0-9a-zA-Z]+)');

/**
* Готовит значение для сохранения в модификаторе класса.
*
Expand Down Expand Up @@ -90,6 +93,24 @@ exports.modificatorClass = function(name, value) {
}
};

exports.parseElementClass = function(classList) {
if (_.isString(classList)) {
classList = classList.match(/\S+/g) || [];
}

var matches = [];
_.any(classList, function(oneClass) {
matches = reElementClass.exec(oneClass);
return !!matches;
});
if (!_.isEmpty(matches)) {
return {
module: matches[1],
element: matches[2]
};
}
};

/**
* Вычисляет объект модификаторов блока из списка классов на нём.
*
Expand Down
38 changes: 38 additions & 0 deletions tests/namer.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -234,4 +234,42 @@ describe('Namer', function() {
});
});

describe.only('.parseElementClass', function() {
it('Правильно вычисляет модуль и элемент для className == ""', function() {
var className = '';

assert.deepEqual(namer.parseElementClass(className), undefined);
});

it('Правильно вычисляет модуль и элемент для className == " "', function() {
var className = ' ';

assert.deepEqual(namer.parseElementClass(className), undefined);
});

it('Правильно вычисляет модуль и элемент для className == "otherClass"', function() {
var className = 'otherClass';

assert.deepEqual(namer.parseElementClass(className), undefined);
});

it('Правильно вычисляет модуль и элемент для className == "module_element "', function() {
var className = 'module_element ';

assert.deepEqual(namer.parseElementClass(className), undefined);
});

it('Правильно вычисляет модуль и элемент для className == "module__element"', function() {
var className = 'module__element';

assert.deepEqual(namer.parseElementClass(className), { module: 'module', element: 'element' });
});

it('Правильно вычисляет модуль и элемент для className == " otherClass module__element "', function() {
var className = ' otherClass module__element ';

assert.deepEqual(namer.parseElementClass(className), { module: 'module', element: 'element' });
});
});

});

0 comments on commit 261d11f

Please sign in to comment.