forked from AmineB/ycombinator-keys
Compare commits
3 Commits
e04ab7aacc
...
27e1c54451
Author | SHA1 | Date | |
---|---|---|---|
27e1c54451 | |||
3e431c552b | |||
86026e4839 |
@ -5,7 +5,7 @@
|
||||
// @match *://news.ycombinator.com/*
|
||||
// @icon https://gitea.amine-bouabdallaoui.fr/AmineB/ycombinator-keys/raw/branch/main/icons/48.png
|
||||
// @grant none
|
||||
// @version 10
|
||||
// @version 11
|
||||
// @author AmineB
|
||||
// @description Ycombinator keyboard nav.
|
||||
// @downloadURL https://gitea.amine-bouabdallaoui.fr/brian6932/ycombinator-keys/raw/branch/main/keyboard-watcher.user.js
|
||||
@ -38,75 +38,74 @@ const
|
||||
query[selected].lastChild.firstChild.firstChild.focus(focusInvisible)
|
||||
},
|
||||
keydown = event => {
|
||||
if (input.has(globalThis.document.activeElement.tagName))
|
||||
return
|
||||
switch (event.key) {
|
||||
case 'j':
|
||||
const lastIndex = query.length - 1
|
||||
if (selected === lastIndex)
|
||||
return
|
||||
if (!input.has(event.target.tagName))
|
||||
switch (event.key) {
|
||||
case 'j':
|
||||
const lastIndex = query.length - 1
|
||||
if (selected === lastIndex)
|
||||
return
|
||||
|
||||
if (selected !== -1)
|
||||
query[selected].style.boxShadow = ''
|
||||
if (selected !== -1)
|
||||
query[selected].style.boxShadow = ''
|
||||
|
||||
let hiddenChain = 0
|
||||
while (selected < lastIndex) {
|
||||
const hidden = query[++selected].classList.contains('noshow')
|
||||
hiddenChain = hiddenChain * hidden + hidden
|
||||
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
|
||||
case 'k':
|
||||
if (selected <= 0)
|
||||
return
|
||||
|
||||
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()
|
||||
if (!hidden) {
|
||||
lastCollapsed = query[selected].classList.contains('coll') ? selected : undefined
|
||||
break
|
||||
}
|
||||
else
|
||||
query[selected].nextSibling.querySelector('a.clicky.hider')?.click()
|
||||
}
|
||||
|
||||
if (selected + 1 <= query.length)
|
||||
selected -= hiddenChain * (selected - hiddenChain === lastCollapsed)
|
||||
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
|
||||
globalThis.open(query[selected].querySelector('div.reply a').href, '_self')
|
||||
return
|
||||
case 'R':
|
||||
if (!isComment())
|
||||
case 'k':
|
||||
if (selected <= 0)
|
||||
return
|
||||
|
||||
query[selected].style.boxShadow = ''
|
||||
|
||||
while (selected >= 0 && query[--selected].classList.contains('noshow'));
|
||||
highlightSelected()
|
||||
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)
|
||||
}
|
||||
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
|
||||
globalThis.open(query[selected].querySelector('div.reply a').href, '_self')
|
||||
return
|
||||
case 'R':
|
||||
if (!isComment())
|
||||
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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user