in frontend/src/index.js [139:224]
async function showFile(source, file, revision, selectedLine) {
selectedLine = selectedLine !== undefined ? parseInt(selectedLine) : -1;
let language;
if (file.path.endsWith("cpp") || file.path.endsWith("h")) {
language = "cpp";
} else if (file.path.endsWith("c")) {
language = "c";
} else if (
file.path.endsWith("js") ||
file.path.endsWith("jsm") ||
file.path.endsWith("mjs") ||
file.path.endsWith("jsx")
) {
language = "javascript";
} else if (file.path.endsWith("css")) {
language = "css";
} else if (file.path.endsWith("py")) {
language = "python";
} else if (file.path.endsWith("java")) {
language = "java";
}
const context = {
navbar: buildNavbar(file.path, revision),
language,
lines: source.map((line, nb) => {
const coverage = file.coverage[nb];
let cssClass = "";
let hits = null;
if (coverage !== undefined && coverage >= 0) {
cssClass = coverage > 0 ? "covered" : "uncovered";
// Build a nicer coverage string for counts
if (coverage >= 1000000) {
hits = {
nb: parseInt(coverage / 1000000),
unit: "M",
};
} else if (coverage >= 1000) {
hits = {
nb: parseInt(coverage / 1000),
unit: "k",
};
} else if (coverage > 0) {
hits = {
nb: coverage,
unit: "",
};
}
}
// To make line numbers start from 1
nb = nb + 1;
// Override css class when selected
if (nb === selectedLine) {
cssClass = "selected";
}
return {
nb,
hits,
coverage,
line: line || " ",
css_class: cssClass,
route: buildRoute({ line: nb }),
};
}),
};
hide("message");
hide("history");
const output = render("file_coverage", context, "output");
// Scroll to line
if (selectedLine > 0) {
const line = output.querySelector("#l" + selectedLine);
line.scrollIntoView({
behavior: "smooth",
block: "center",
});
}
// Highlight source code once displayed
Prism.highlightAll(output);
}