diff --git a/lib/bem.jade b/lib/bem.jade index 8f888ce..e5d8caf 100644 --- a/lib/bem.jade +++ b/lib/bem.jade @@ -24,7 +24,8 @@ 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 @@ -32,30 +33,31 @@ mixin b(options) 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(' ') diff --git a/test/cases/1_basics.html b/test/cases/1_basics.html index dc6bcfa..286e6f8 100644 --- a/test/cases/1_basics.html +++ b/test/cases/1_basics.html @@ -31,3 +31,11 @@ foo +
+
+
+
+
+
+
+
diff --git a/test/cases/1_basics.jade b/test/cases/1_basics.jade index dd86938..779f590 100644 --- a/test/cases/1_basics.jade +++ b/test/cases/1_basics.jade @@ -29,3 +29,9 @@ p +b.FOO +e.BAR foo + ++b._ + +e.lol + ++b._mod + +e.lol