Skip to content

Commit

Permalink
Throw just a class in edge cases, fixes #10
Browse files Browse the repository at this point in the history
  • Loading branch information
kizu committed Dec 30, 2015
1 parent 0ca71cc commit f1a2ebb
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 22 deletions.
46 changes: 24 additions & 22 deletions lib/bem.jade
Expand Up @@ -24,38 +24,40 @@ mixin b(options)

//- Catch the bemto block
if bemto_classes.length
- var bemto_block = bemto_classes[0].match(new RegExp('^(((?!' + bemto_settings['element'] + '|' + bemto_settings['modifier'] +').)+)'))[1]
- var bemto_block = bemto_classes[0].match(new RegExp('^(((?!' + bemto_settings['element'] + '|' + bemto_settings['modifier'] +').)+)'))
- bemto_block = bemto_block && bemto_block[1]

if !isElement
- bemto_chain[bemto_chain.length] = bemto_block
- bemto_classes[0] = bemto_classes[0]
else if bemto_classes.length && bemto_chain[bemto_chain.length-1]
- bemto_classes[0] = bemto_chain[bemto_chain.length-1] + bemto_settings['element'] + bemto_classes[0]

- var current_block = (isElement ? bemto_chain[bemto_chain.length-1] + bemto_settings['element'] : '') + bemto_block
if bemto_block
- var current_block = (isElement ? bemto_chain[bemto_chain.length-1] + bemto_settings['element'] : '') + bemto_block

//- Adding the block if there is only modifier
- var has_modifier = false
each klass in bemto_classes
if klass && klass.match(new RegExp('^' + current_block + '(?!' + bemto_settings['element'] + '[A-Za-z]' + ')' + bemto_settings['modifier'] + '[A-Za-z]'))
- has_modifier = true
if bemto_classes.indexOf(current_block) === -1 && has_modifier
- bemto_classes[bemto_classes.length] = current_block
//- Adding the block if there is only modifier
- var has_modifier = false
each klass in bemto_classes
if klass.match(new RegExp('^' + current_block + '(?!' + bemto_settings['element'] + '[A-Za-z]' + ')' + bemto_settings['modifier'] + '[A-Za-z]'))
- has_modifier = true
if bemto_classes.indexOf(current_block) === -1 && has_modifier
- bemto_classes[bemto_classes.length] = current_block

each klass, i in bemto_classes
if klass && klass.match(new RegExp('^(?!' + bemto_settings['element'] + ')' + bemto_settings['modifier']))
//- Expanding the modifiers
- bemto_classes[i] = current_block + klass
else if klass && klass.match(new RegExp('^' + bemto_settings['element']))
//- Expanding the mixed in elements
if bemto_chain[bemto_chain.length-2]
- bemto_classes[i] = bemto_chain[bemto_chain.length-2] + klass
else
- bemto_classes[i] = bemto_chain[bemto_chain.length-1] + klass
each klass, i in bemto_classes
if klass.match(new RegExp('^(?!' + bemto_settings['element'] + ')' + bemto_settings['modifier']))
//- Expanding the modifiers
- bemto_classes[i] = current_block + klass
else if klass.match(new RegExp('^' + bemto_settings['element']))
//- Expanding the mixed in elements
if bemto_chain[bemto_chain.length-2]
- bemto_classes[i] = bemto_chain[bemto_chain.length-2] + klass
else
- bemto_classes[i] = bemto_chain[bemto_chain.length-1] + klass

//- Adding prefixes
if bemto_classes[i] && bemto_classes[i].match(new RegExp('^' + current_block + '($|(?=' + bemto_settings['element'] + '|' + bemto_settings['modifier'] + '))'))
- bemto_classes[i] = bemto_settings['prefix'] + bemto_classes[i]
//- Adding prefixes
if bemto_classes[i] && bemto_classes[i].match(new RegExp('^' + current_block + '($|(?=' + bemto_settings['element'] + '|' + bemto_settings['modifier'] + '))'))
- bemto_classes[i] = bemto_settings['prefix'] + bemto_classes[i]

//- Write modified classes to attributes in the correct order
- attributes.class = bemto_classes.sort().join(' ')
Expand Down
8 changes: 8 additions & 0 deletions test/cases/1_basics.html
Expand Up @@ -31,3 +31,11 @@
<bar>foo
</bar>
</foo>
<div class="_">
<div class="lol">
</div>
</div>
<div class="_mod">
<div class="lol">
</div>
</div>
6 changes: 6 additions & 0 deletions test/cases/1_basics.jade
Expand Up @@ -29,3 +29,9 @@ p

+b.FOO
+e.BAR foo

+b._
+e.lol

+b._mod
+e.lol

0 comments on commit f1a2ebb

Please sign in to comment.