Compare commits

..

1 Commits

Author SHA1 Message Date
2b47851785 Rewrite 2025-05-16 01:03:32 -04:00

View File

@ -38,74 +38,75 @@ const
query[selected].lastChild.firstChild.firstChild.focus(focusInvisible) query[selected].lastChild.firstChild.firstChild.focus(focusInvisible)
}, },
keydown = event => { keydown = event => {
if (!input.has(event.target.tagName)) if (input.has(globalThis.document.activeElement.tagName))
switch (event.key) { return
case 'j': switch (event.key) {
const lastIndex = query.length - 1 case 'j':
if (selected === lastIndex) const lastIndex = query.length - 1
return if (selected === lastIndex)
if (selected !== -1)
query[selected].style.boxShadow = ''
let hiddenChain = 0
while (selected < lastIndex) {
const hidden = query[++selected].classList.contains('noshow')
hiddenChain = hiddenChain * hidden + hidden
if (!hidden) {
lastCollapsed = query[selected].classList.contains('coll') ? selected : undefined
break
}
}
selected -= hiddenChain * (selected - hiddenChain === lastCollapsed)
highlightSelected()
return return
case 'k':
if (selected <= 0)
return
if (selected !== -1)
query[selected].style.boxShadow = '' query[selected].style.boxShadow = ''
while (selected >= 0 && query[--selected].classList.contains('noshow')); let hiddenChain = 0
highlightSelected() while (selected < lastIndex) {
return const hidden = query[++selected].classList.contains('noshow')
case 'h': hiddenChain = hiddenChain * hidden + hidden
if (globalThis.location.pathname === '/hidden')
for (const selector of query[selected].nextSibling.querySelectorAll('a'))
if (selector.innerText === 'un-hide') {
selector.click()
break
}
else
query[selected].nextSibling.querySelector('a.clicky.hider')?.click()
if (selected + 1 <= query.length) if (!hidden) {
highlightSelected() lastCollapsed = query[selected].classList.contains('coll') ? selected : undefined
break
}
}
selected -= hiddenChain * (selected - hiddenChain === lastCollapsed)
highlightSelected()
return
case 'k':
if (selected <= 0)
return return
case 'c':
globalThis.open('https://news.ycombinator.com/item?id=' + query[selected].id, '_self') query[selected].style.boxShadow = ''
while (selected >= 0 && query[--selected].classList.contains('noshow'));
highlightSelected()
return
case 'h':
if (globalThis.location.pathname === '/hidden')
for (const selector of query[selected].nextSibling.querySelectorAll('a'))
if (selector.innerText === 'un-hide') {
selector.click()
break
}
else
query[selected].nextSibling.querySelector('a.clicky.hider')?.click()
if (selected + 1 <= query.length)
highlightSelected()
return
case 'c':
globalThis.open('https://news.ycombinator.com/item?id=' + query[selected].id, '_self')
return
case 'C':
globalThis.open('https://news.ycombinator.com/item?id=' + query[selected].id)
return
case 'r':
if (!isComment())
return return
case 'C': globalThis.open(query[selected].querySelector('div.reply a').href, '_self')
globalThis.open('https://news.ycombinator.com/item?id=' + query[selected].id) return
case 'R':
if (!isComment())
return return
case 'r': globalThis.open(query[selected].querySelector('div.reply a').href)
if (!isComment()) return
return case 'u':
globalThis.open(query[selected].querySelector('div.reply a').href, '_self') globalThis.open((isComment() ? query[selected] : query[selected].nextSibling).querySelector('a.hnuser').href, '_self')
return return
case 'R': case 'U':
if (!isComment()) globalThis.open((isComment() ? query[selected] : query[selected].nextSibling).querySelector('a.hnuser').href)
return }
globalThis.open(query[selected].querySelector('div.reply a').href)
return
case 'u':
globalThis.open((isComment() ? query[selected] : query[selected].nextSibling).querySelector('a.hnuser').href, '_self')
return
case 'U':
globalThis.open((isComment() ? query[selected] : query[selected].nextSibling).querySelector('a.hnuser').href)
}
}, },
listen = () => globalThis.document.addEventListener('keydown', keydown) listen = () => globalThis.document.addEventListener('keydown', keydown)