| /* eslint-disable */ |
| var jumpToCode = (function init() { |
| // Classes of code we would like to highlight in the file view |
| var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; |
| |
| // Elements to highlight in the file listing view |
| var fileListingElements = ['td.pct.low']; |
| |
| // We don't want to select elements that are direct descendants of another match |
| var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` |
| |
| // Selecter that finds elements on the page to which we can jump |
| var selector = |
| fileListingElements.join(', ') + |
| ', ' + |
| notSelector + |
| missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` |
| |
| // The NodeList of matching elements |
| 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: // n |
| case 74: // j |
| goToNext(); |
| break; |
| case 66: // b |
| case 75: // k |
| case 80: // p |
| goToPrevious(); |
| break; |
| } |
| }; |
| })(); |
| window.addEventListener('keydown', jumpToCode); |