summaryrefslogtreecommitdiffstats
path: root/coverage/lcov-report/block-navigation.js
diff options
context:
space:
mode:
Diffstat (limited to 'coverage/lcov-report/block-navigation.js')
-rw-r--r--coverage/lcov-report/block-navigation.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js
new file mode 100644
index 00000000..0c719038
--- /dev/null
+++ b/coverage/lcov-report/block-navigation.js
@@ -0,0 +1,63 @@
+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);