All files / xstate/coverage block-navigation.js

0% Statements 0/27
0% Branches 0/15
0% Functions 0/6
0% Lines 0/27

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64                                                                                                                               
var jumpToCode = (function init () {
  // Classes of code we would like to highlight
  var missingCoverageClasses = [ '.cbranch-no', '.cstat-no', '.fstat-no' ];
 
  // 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 = 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);