|
var jumpToCode = (function init () { |
|
|
|
var missingCoverageClasses = [ '.cbranch-no', '.cstat-no', '.fstat-no' ]; |
|
|
|
|
|
var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; |
|
|
|
|
|
var selector = notSelector + missingCoverageClasses.join(', ' + notSelector); |
|
|
|
|
|
var missingCoverageElements = document.querySelectorAll(selector); |
|
|
|
var currentIndex; |
|
|
|
function toggleClass(index) { |
|
missingCoverageElements.item(currentIndex).classList.remove('highlighted'); |
|
missingCoverageElements.item(index).classList.add('highlighted'); |
|
} |
|
|
|
function makeCurrent(index) { |
|
toggleClass(index); |
|
currentIndex = index; |
|
missingCoverageElements.item(index) |
|
.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' }); |
|
} |
|
|
|
function goToPrevious() { |
|
var nextIndex = 0; |
|
if (typeof currentIndex !== 'number' || currentIndex === 0) { |
|
nextIndex = missingCoverageElements.length - 1; |
|
} else if (missingCoverageElements.length > 1) { |
|
nextIndex = currentIndex - 1; |
|
} |
|
|
|
makeCurrent(nextIndex); |
|
} |
|
|
|
function goToNext() { |
|
var nextIndex = 0; |
|
|
|
if (typeof currentIndex === 'number' && currentIndex < (missingCoverageElements.length - 1)) { |
|
nextIndex = currentIndex + 1; |
|
} |
|
|
|
makeCurrent(nextIndex); |
|
} |
|
|
|
return function jump(event) { |
|
switch (event.which) { |
|
case 78: |
|
case 74: |
|
goToNext(); |
|
break; |
|
case 66: |
|
case 75: |
|
case 80: |
|
goToPrevious(); |
|
break; |
|
} |
|
}; |
|
}()); |
|
window.addEventListener('keydown', jumpToCode); |
|
|