@andypf/json-viewer
Version:
A javascript library to visualize json nicely
76 lines (61 loc) • 2.28 kB
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) {
if (document.getElementById("fileSearch") === document.activeElement && document.activeElement != null) {
// if we're currently focused on the search input, we don't want to navigate
return
}
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)