-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
131 lines (120 loc) · 3.38 KB
/
Copy pathscript.js
File metadata and controls
131 lines (120 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
function scroll_up() {
window.scrollBy(0, -20);
}
function scroll_down() {
window.scrollBy(0, 20);
}
function calc_scroll_percent(scroll_y) {
const total_height =
document.documentElement.scrollHeight - window.innerHeight;
const scroll_percent = (scroll_y / total_height) * 100;
return scroll_percent;
}
function handle_scroll() {
let scroll_pos = window.scrollY;
const line_counter = document.getElementById("line-counter");
let scroll_percent = Math.ceil(calc_scroll_percent(scroll_pos));
if (scroll_percent >= 100) {
line_counter.innerHTML = " Manual page c0ba1t(1) (END)";
line_counter.style.filter = "invert(0%)";
} else {
if (isNaN(scroll_percent)) {
scroll_percent = 0;
}
line_counter.innerHTML =
" Manual page c0ba1t(1) " + scroll_percent + "%";
line_counter.style.filter = "invert(0%)";
}
// line_counter.innerHTML += " (press h for help)";
if (document.getElementById("mainContainer").style.display === "none") {
line_counter.innerHTML += " (press q to go back)";
} else {
line_counter.innerHTML += " (press h for help)";
}
line_counter.style.display = "block";
}
//makes sure init scroll% is accurate
handle_scroll();
document.addEventListener("scroll", () => {
handle_scroll();
});
function is_number(key) {
return !isNaN(parseInt(key)) && isFinite(key);
}
let str_num = "";
let was_g_last = false;
document.addEventListener("keydown", function(e) {
const line_counter = document.getElementById("line-counter");
let add_num = true;
let repeat = 1;
let key = e.key;
if (key == "Backspace") {
str_num = str_num.substr(0, str_num.length - 1);
if (str_num.length == 0) {
handle_scroll();
} else {
line_counter.style.filter = "invert(100%)";
line_counter.innerHTML = ":" + str_num;
}
}
if (is_number(key) && add_num) {
str_num = str_num + key;
line_counter.style.filter = "invert(100%)";
line_counter.innerHTML = ":" + str_num;
} else if (add_num == false) {
//do nothing
} else {
if (key == "Escape") {
str_num = "";
was_g_last = false;
repeat = 0;
line_counter.style.filter = "invert(100%)";
line_counter.innerHTML = "ESC";
}
if (str_num != "") {
repeat = Number(str_num);
}
if (key == "g") {
if (was_g_last) {
document.documentElement.scrollTop = 0;
handle_scroll();
repeat = 0;
} else {
was_g_last = true;
}
} else {
was_g_last = false;
}
if (key == "G") {
document.documentElement.scrollTop =
document.documentElement.scrollHeight;
handle_scroll();
repeat = 0;
}
switch (key) {
case "h":
document.getElementById("mainContainer").style.display = "none";
document.getElementById("helpContainer").style.display = "block";
line_counter.style.display = "none";
handle_scroll();
break;
case "q":
document.getElementById("mainContainer").style.display = "block";
document.getElementById("helpContainer").style.display = "none";
line_counter.style.display = "none";
handle_scroll();
break;
case "j":
for (let i = 0; i < repeat; i++) {
scroll_down();
}
break;
case "k":
for (let i = 0; i < repeat; i++) {
scroll_up();
}
break;
}
str_num = "";
}
});