78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
/* 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);
|