This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.9 KiB
63 lines
1.9 KiB
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);
|
|
|