Skip to content
This repository was archived by the owner on Feb 4, 2018. It is now read-only.

Commit 44eab42

Browse files
authored
Merge pull request #99 from bem-sdk/issue-37_fix
fix(belongsTo): should not detect belonging between modifiers
2 parents 6664366 + 6302109 commit 44eab42

File tree

4 files changed

+12
-16
lines changed

4 files changed

+12
-16
lines changed

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,7 @@ const BemEntityName = require('@bem/entity-name');
241241

242242
const buttonName = new BemEntityName({ block: 'button' });
243243
const buttonTextName = new BemEntityName({ block: 'button', elem: 'text' });
244-
const buttonTextBoldName = new BemEntityName(
245-
{ block: 'button', elem: 'text', mod: { name: 'bold', val: true } }
246-
);
244+
const buttonTextBoldName = new BemEntityName({ block: 'button', elem: 'text', mod: 'bold' });
247245

248246
buttonTextName.belongsTo(buttonName); // true
249247
buttonName.belongsTo(buttonTextName); // false

index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ declare class BemEntityName {
1212
readonly type: BemSDK.EntityName.TYPE;
1313

1414
isSimpleMod(): boolean | null;
15+
belongsTo(entityName: BemEntityName): boolean;
1516
toString(): string;
1617
valueOf(): BemSDK.EntityName.StrictRepresentation;
1718
inspect(depth: number, options: object): string;

index.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -318,9 +318,7 @@ class BemEntityName {
318318
*
319319
* const buttonName = new BemEntityName({ block: 'button' });
320320
* const buttonTextName = new BemEntityName({ block: 'button', elem: 'text' });
321-
* const buttonTextBoldName = new BemEntityName(
322-
* { block: 'button', elem: 'text', mod: { name: 'bold', val: true } }
323-
* );
321+
* const buttonTextBoldName = new BemEntityName({ block: 'button', elem: 'text', mod: 'bold' });
324322
*
325323
* buttonTextName.belongsTo(buttonName); // true
326324
* buttonName.belongsTo(buttonTextName); // false
@@ -332,11 +330,10 @@ class BemEntityName {
332330
* @returns {boolean}
333331
*/
334332
belongsTo(entityName) {
335-
return entityName && entityName.id !== this.id && this.id.startsWith(entityName.id) &&
336-
(entityName.type !== 'block' || this.type !== 'elemMod') &&
337-
(!entityName.elem || this.elem === entityName.elem) &&
338-
(!entityName.modName || this.modName === entityName.modName) &&
339-
(!entityName.modVal || entityName.modVal === true || this.modVal === entityName.modVal);
333+
if (entityName.block !== this.block) { return false; }
334+
335+
return entityName.type === TYPES.BLOCK && (this.type === TYPES.BLOCK_MOD || this.type === TYPES.ELEM)
336+
|| entityName.elem === this.elem && (entityName.type === TYPES.ELEM && this.type === TYPES.ELEM_MOD);
340337
}
341338

342339
/**

test/belongs-to.test.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,27 +82,27 @@ test('should not detect belonging between block and its elem mod', t => {
8282
t.false(blockName.belongsTo(elemModName));
8383
});
8484

85-
test('should not detect belonging between block and its elem with the same mod', t => {
85+
test('should not detect belonging between block mod and its elem with the same mod', t => {
8686
const blockModName = new BemEntityName({ block: 'block', mod: 'mod' });
8787
const elemModName = new BemEntityName({ block: 'block', elem: 'elem', mod: 'mod' });
8888

8989
t.false(elemModName.belongsTo(blockModName));
9090
t.false(blockModName.belongsTo(elemModName));
9191
});
9292

93-
test('should resolve belonging between boolean and key-value mod of block', t => {
93+
test('should not detect belonging between boolean and key-value mod of block', t => {
9494
const boolModName = new BemEntityName({ block: 'block', mod: { name: 'mod', val: true } });
9595
const modName = new BemEntityName({ block: 'block', mod: { name: 'mod', val: 'key' } });
9696

97-
t.true(modName.belongsTo(boolModName));
97+
t.false(modName.belongsTo(boolModName));
9898
t.false(boolModName.belongsTo(modName));
9999
});
100100

101-
test('should resolve belonging between boolean and key-value mod of element', t => {
101+
test('should not detect belonging between boolean and key-value mod of element', t => {
102102
const boolModName = new BemEntityName({ block: 'block', elem: 'elem', mod: { name: 'mod', val: true } });
103103
const modName = new BemEntityName({ block: 'block', elem: 'elem', mod: { name: 'mod', val: 'key' } });
104104

105-
t.true(modName.belongsTo(boolModName));
105+
t.false(modName.belongsTo(boolModName));
106106
t.false(boolModName.belongsTo(modName));
107107
});
108108

0 commit comments

Comments
 (0)