Passed
Push — master ( 7fa532...129142 )
by Ahmed
02:32
created

coverage/lcov-report/block-navigation.js   A

Complexity

Total Complexity 10
Complexity/F 1.67

Size

Lines of Code 78
Function Count 6

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 50
dl 0
loc 78
rs 10
c 0
b 0
f 0
wmc 10
mnd 4
bc 4
fnc 6
bpm 0.6666
cpm 1.6666
noi 0
1
/* eslint-disable */
2
var jumpToCode = (function init() {
3
    // Classes of code we would like to highlight in the file view
4
    var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
5
6
    // Elements to highlight in the file listing view
7
    var fileListingElements = ['td.pct.low'];
8
9
    // We don't want to select elements that are direct descendants of another match
10
    var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
11
12
    // Selecter that finds elements on the page to which we can jump
13
    var selector =
14
        fileListingElements.join(', ') +
15
        ', ' +
16
        notSelector +
17
        missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
18
19
    // The NodeList of matching elements
20
    var missingCoverageElements = document.querySelectorAll(selector);
21
22
    var currentIndex;
23
24
    function toggleClass(index) {
25
        missingCoverageElements
26
            .item(currentIndex)
27
            .classList.remove('highlighted');
28
        missingCoverageElements.item(index).classList.add('highlighted');
29
    }
30
31
    function makeCurrent(index) {
32
        toggleClass(index);
33
        currentIndex = index;
34
        missingCoverageElements.item(index).scrollIntoView({
35
            behavior: 'smooth',
36
            block: 'center',
37
            inline: 'center'
38
        });
39
    }
40
41
    function goToPrevious() {
42
        var nextIndex = 0;
43
        if (typeof currentIndex !== 'number' || currentIndex === 0) {
44
            nextIndex = missingCoverageElements.length - 1;
45
        } else if (missingCoverageElements.length > 1) {
46
            nextIndex = currentIndex - 1;
47
        }
48
49
        makeCurrent(nextIndex);
50
    }
51
52
    function goToNext() {
53
        var nextIndex = 0;
54
55
        if (
56
            typeof currentIndex === 'number' &&
57
            currentIndex < missingCoverageElements.length - 1
58
        ) {
59
            nextIndex = currentIndex + 1;
60
        }
61
62
        makeCurrent(nextIndex);
63
    }
64
65
    return function jump(event) {
66
        switch (event.which) {
67
            case 78: // n
68
            case 74: // j
69
                goToNext();
70
                break;
71
            case 66: // b
72
            case 75: // k
73
            case 80: // p
74
                goToPrevious();
75
                break;
76
        }
77
    };
78
})();
79
window.addEventListener('keydown', jumpToCode);
80