|
|
|
var currentIndex = 0
|
|
|
|
|
|
|
|
function findScrollParent(node) {
|
|
|
|
if (!node) {
|
|
|
|
return node
|
|
|
|
}
|
|
|
|
|
|
|
|
if (node.classList.contains('content') || node.tagName === 'body') {
|
|
|
|
return node
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return findScrollParent(node.parentNode)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function nav(offset) {
|
|
|
|
var items = document.querySelectorAll('.items:not(.disabled)')
|
|
|
|
|
|
|
|
currentIndex += offset
|
|
|
|
if (currentIndex < 0) {
|
|
|
|
currentIndex += items.length
|
|
|
|
}
|
|
|
|
if (currentIndex >= items.length) {
|
|
|
|
currentIndex -= items.length
|
|
|
|
}
|
|
|
|
items[currentIndex].focus()
|
|
|
|
if (items[currentIndex].getBoundingClientRect().y + items[currentIndex].getBoundingClientRect().height + 50 > document.documentElement.scrollHeight) {
|
|
|
|
findScrollParent(items[currentIndex]).scrollBy(0, 50)
|
|
|
|
}
|
|
|
|
items[currentIndex].addEventListener('keydown', handleKeyDown)
|
|
|
|
}
|
|
|
|
|
|
|
|
function handleKeyDown(e) {
|
|
|
|
if (e.target.classList.contains('items')) {
|
|
|
|
switch (e.key) {
|
|
|
|
case 'ArrowUp':
|
|
|
|
e.preventDefault()
|
|
|
|
e.stopPropagation()
|
|
|
|
nav(-1)
|
|
|
|
break
|
|
|
|
case 'ArrowDown':
|
|
|
|
e.preventDefault()
|
|
|
|
e.stopPropagation()
|
|
|
|
nav(1)
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (e.target.name !== 'INPUT') {
|
|
|
|
switch (e.key) {
|
|
|
|
case 'ArrowUp':
|
|
|
|
case 'ArrowDown':
|
|
|
|
e.preventDefault()
|
|
|
|
e.stopPropagation()
|
|
|
|
nav(0)
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
window.addEventListener('load', function (e) {
|
|
|
|
// Select first item
|
|
|
|
var items = document.querySelectorAll('.items:not(.disabled)')
|
|
|
|
if (items.length > 0) {
|
|
|
|
items[0].focus()
|
|
|
|
items[0].addEventListener('keydown', handleKeyDown)
|
|
|
|
}
|
|
|
|
|
|
|
|
document.body.addEventListener('keydown', handleKeyDown)
|
|
|
|
})
|