Skip to content

Commit

Permalink
Add deep search for prefixes in parents classes
Browse files Browse the repository at this point in the history
  • Loading branch information
yoksel committed Jul 7, 2016
1 parent c4644a8 commit bca3954
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 19 deletions.
3 changes: 2 additions & 1 deletion .gitignore
@@ -1,4 +1,5 @@
.DS_Store
.publish
.sass-cache
build
.publish
node_modules
73 changes: 56 additions & 17 deletions assets/js/script.js
Expand Up @@ -21,7 +21,7 @@ var styleElem = doc.createElement('style');
doc.head.appendChild( styleElem );

// DEV ONLY
runDev();
// runDev();

//------------------------------

Expand Down Expand Up @@ -92,6 +92,13 @@ function makeList ( elem, level ) {
var tagName = elem.tagName;
var className = elem.className;

if ( !elem.customDataSet ) {
elem.customDataSet = {
prefixes: {},
level: level
};
}

if ( level === 1 ) {
tagName = 'BODY';
className = '';
Expand All @@ -111,9 +118,9 @@ function makeList ( elem, level ) {

liContent.appendChild ( tagSpan );

if ( className ) {
addClassesAsPrefixes ( elem );

elem.level = level;
if ( className ) {

// Check Bem in levels more then firts child
if ( level > 2 ) {
Expand Down Expand Up @@ -194,22 +201,15 @@ function checkBemForElem ( elem ) {
var parentPrefixes = findPrefixInParentNode( elem );

Array.prototype.forEach.call( elem.classList, function ( classItem ) {
// Check first part of class with __

// Check first part of class with __ (block name)
if ( classItem.split('__').length > 1 ) {
var prefixCorrect = false;
var prefix = classItem.split('__')[0];

if ( elem.parentNode.classList.contains( prefix ) ) {
if ( elem.customDataSet.prefixes[ prefix ]) {
prefixCorrect = true;
}
else {
// Try to find prefix in parent classes prefixes
var parentPrefixes = findPrefixInParentNode( elem );

if ( parentPrefixes[ prefix ] ) {
prefixCorrect = true;
}
}

elem.classList['validBem'][ classItem ] = prefixCorrect;

Expand All @@ -218,7 +218,7 @@ function checkBemForElem ( elem ) {
}
}

// Check first part of class with --
// Check first part of class with -- (modificator)
if ( classItem.split('--').length > 1 ) {
var modifPrefixCorrect = false;
var modifPrefix = classItem.split('--')[0];
Expand Down Expand Up @@ -254,6 +254,33 @@ function findPrefixInParentNode ( elem ) {

//------------------------------

function addClassesAsPrefixes ( elem ) {
var classList = elem.classList;

if ( elem.customDataSet.level > 2 ) {
copyPrefixes( elem );
}

Array.prototype.forEach.call( classList, function ( classItem ) {
// Copy only block names
if ( classItem.split('__').length === 1 &&
classItem.split('--').length === 1 ) {
elem.customDataSet.prefixes[ classItem ] = classItem;
}
});
}

//------------------------------

function copyPrefixes ( elem ) {
var parent = elem.parentNode;
for ( var prefix in parent.customDataSet.prefixes ) {
elem.customDataSet.prefixes[ prefix ] = prefix;
}
}

//------------------------------

function setRange () {
rangeDeep.max = maxDeep;
rangeDeep.value = maxDeep;
Expand All @@ -272,12 +299,12 @@ rangeDeep.oninput = function () {
//------------------------------

function showCodeErrors () {

checkHeadersLevels();
showBemMessage();

}

//------------------------------

function showBemMessage () {
bemMessage.classList.toggle( 'gnr-hidden', ! hasBemWarning );
}
Expand Down Expand Up @@ -360,8 +387,20 @@ function checkIsWholePage( elem ){

//------------------------------

function printCurrentElem( elem ) {
var classes = elem.classList.value ? '.' + elem.classList.value : '';
var preLine = ' — ';

for (var i = 1; i < elem.customDataSet.level; i++) {
preLine += ' — ';
}
console.log( preLine, elem.tagName + classes);
}

//------------------------------

function runDev () {
var testMarkup = '<div class="wrapper"><section class="prices"><div><h2 class="prices__title">Title</h2><div class="prices__content prices__content--disabled">Content</div></div></section><section class="reviews"><div><h2 class="reviews__title">Title</h2><div class="reviews__content">Content</div></div></section><footer class="footer"><div><h2 class="footer__title">Footer Title</h2><div class="footer__content">Footer Content</div></div></footer></div></div>';
var testMarkup = '<div class="wrapper"><section class="prices1"><div><h2 class="prices__title">Title</h2><div class="prices__content prices__content--disabled">Content</div></div></section><section class="reviews"><div><h2 class="reviews__title">Title</h2><div class="reviews__content">Content</div></div></section><footer class="footer"><div><h2 class="footer__title">Footer Title</h2><div class="footer__content">Footer Content</div></div></footer></div></div>';
codeInput.value = testMarkup;
setHeadersDefs();
hasBemWarning = false;
Expand Down
1 change: 0 additions & 1 deletion src/scss/styles.scss
Expand Up @@ -31,7 +31,6 @@ A {
}
}


UL, LI {
padding: 0;
margin: 0;
Expand Down

0 comments on commit bca3954

Please sign in to comment.