Commit | Line | Data |
---|---|---|
ffe0b2f4 JC |
1 | (() => { |
2 | const comments = document.querySelector(".comment-tree > tbody"); | |
3 | ||
4 | let selectedComment = comments.firstElementChild | |
5 | selectedComment.style.outline = '1px dashed black'; | |
6 | ||
7 | const visible = (element) => { | |
8 | let bounds = element.getBoundingClientRect(); | |
9 | return bounds.top >= 0 && bounds.bottom <= window.innerHeight; | |
10 | } | |
11 | ||
12 | const changeWithVisibleCallback = (comment, callback) => { | |
13 | if (comment == null) { | |
14 | return; | |
15 | } | |
16 | selectedComment.style.outline = ''; | |
17 | selectedComment = comment; | |
18 | selectedComment.style.outline = '1px dashed black'; | |
19 | if (!visible(comment)) { | |
20 | callback(); | |
21 | } | |
22 | } | |
23 | ||
24 | const change = (comment) => { | |
25 | changeWithVisibleCallback(comment, () => {}); | |
26 | } | |
27 | ||
28 | // Curry callback for moving downpage | |
29 | const changeDownpage = (comment) => { | |
30 | changeWithVisibleCallback(comment, () => {window.scrollTo(0, window.scrollY + comment.offsetHeight)}); | |
31 | } | |
32 | ||
33 | // Curry callback for moving up page | |
34 | const changeUppage = (comment) => { | |
35 | changeWithVisibleCallback(comment, () => {window.scrollTo(0, window.scrollY - comment.offsetHeight)}); | |
36 | } | |
ec8ce8db | 37 | |
ffe0b2f4 JC |
38 | document.addEventListener("click", (e) => { |
39 | change(e.target.closest("tr.athing")); | |
40 | }) | |
41 | document.addEventListener("keydown", (e) => { | |
42 | if (e.isComposing) { | |
ec8ce8db | 43 | return; |
ffe0b2f4 | 44 | } |
ec8ce8db JC |
45 | switch (e.key) { |
46 | case "j": | |
47 | do { | |
48 | changeDownpage(selectedComment.nextElementSibling); | |
49 | } while (selectedComment.classList.contains("noshow")); | |
50 | break; | |
51 | case "k": | |
52 | do { | |
53 | changeUppage(selectedComment.previousElementSibling); | |
54 | } while (selectedComment.classList.contains("noshow")); | |
55 | break; | |
56 | case "m": | |
57 | case "Enter": | |
58 | let togg = selectedComment.querySelector(".togg"); | |
59 | let more = selectedComment.querySelector(".morelink"); | |
60 | if (togg) { | |
61 | togg.click(); | |
62 | } | |
63 | else if (more) { | |
64 | more.click(); | |
65 | } | |
66 | break; | |
67 | case "p": | |
68 | while (selectedComment.querySelector("td.ind").firstElementChild.width != 0) { | |
69 | changeUppage(selectedComment.previousElementSibling); | |
70 | } | |
71 | break; | |
72 | default: | |
73 | //noop | |
ffe0b2f4 JC |
74 | } |
75 | }) | |
76 | })(); |