UNPKG

flow-coverage-report

Version:

Generate an HTML report of the flow coverage data

113 lines (99 loc) 3.12 kB
$(function() { // Convert the text area into a CodeMirror area in readOnly mode. var cm = CodeMirror.fromTextArea(document.querySelector("textarea"), { readOnly: true, lineNumbers: true, mode: "text/typescript", scrollbarStyle: "simple", gutters: [ "Flow-lineuncovered", "CodeMirror-linenumbers" ] }); // TODO: handle corrupted coverage data? var coverageData = JSON.parse(document.querySelector("#file-coverage-data").textContent); var uncoveredLocs = coverageData.expressions.uncovered_locs; // Create uncovered range markers. for (var loc of uncoveredLocs) { cm.markText( {line: loc.start.line - 1, ch: loc.start.column - 1}, {line: loc.end.line - 1, ch: loc.end.column}, { className: "cm-flow-uncovered", } ); } // Create uncovered ranges scrollbar annotations. var scrollbarAnnotations = cm.annotateScrollbar({ className: "cm-flow-uncovered", listenForUpdates: false, }); scrollbarAnnotations.update(uncoveredLocs.map(function (loc) { return { from: {line: loc.start.line - 1, ch: loc.start.column -1}, to: {line: loc.end.line - 1, ch: loc.start.column}, }; })); // Create the line gutters. for (var i = 0; i < cm.lineCount(); i++) { var count = uncoveredLocs.reduce(function (acc, loc) { if (i >= loc.start.line - 1 && i <= loc.end.line - 1) { acc += 1; } return acc; }, 0); if (count > 0) { var el = document.createElement("div"); el.textContent = count + "x"; el.style.textAlign = "center"; el.style.fontSize = "0.6em"; var color = "rgba(255,0,0," + count * 0.2 + ")"; el.style.background = color; cm.setGutterMarker(i, "Flow-lineuncovered", el); } } // Refresh the uncovered range markers background alpha // (number of time the marker span appears in an uncovered range * alpha step). CodeMirror.on(cm, "viewportChange", function(cm, marker){ for (var el of document.querySelectorAll(".cm-flow-uncovered")) { var count = Array.from(el.classList).filter(function (cls) { if (cls !== "cm-flow-uncovered") { return false; } return true; }).length; var color = "rgba(255,0,0," + count * 0.2 + ")"; el.style.background = color; } }); // Configure the dropdowns $('.ui.dropdown.uncovered-locations') .dropdown({ action: 'hide', onChange: function (value) { if (value == "") { return; } $('.ui.dropdown.uncovered-locations').dropdown('set value', ""); cm.scrollIntoView({line: parseInt(value)}, 150); } }); $('.ui.dropdown.syntax-highlighting') .dropdown({ onChange: function (value) { var mode = "typescript"; switch (value) { case "es": mode = "text/typescript"; break; case "js": mode = "javascript"; break; default: mode = ""; } console.log("SET MODE", mode); cm.setOption("mode", mode); } }); });