You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					64 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					64 lines
				
				1.9 KiB
			| 
											3 years ago
										 | 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); |