-
Notifications
You must be signed in to change notification settings - Fork 0
/
berserk.js
127 lines (104 loc) · 4.13 KB
/
berserk.js
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
// ==UserScript==
// @name lichessZerk
// @version 1.1.1.2.1
// @grant none
// @run-at document-idle
// @include /^https:\/\/lichess\.org\/([a-zA-Z0-9\/]){6,}
// ==/UserScript==
setTimeout(function()
{
var berserkAlwaysDiv;
var berserkBackDiv;
var berserkAlwaysCheckbox;
var berserkBackCheckbox;
var zerked = false; // makes a few things more readable
var cName; // stores the class of the tournament-defining component (tournament-lobby or tournament-game), in order to add the elements to the correct div
// storage functions. remember berserking preferences between games
function getStorage(v)
{
return localStorage[v] === 'true';
}
function setStorage(v, val)
{
localStorage[v] = val;
}
function clickZerkLoop()
{
if (document.getElementsByClassName("fbt go-berserk")[0] != undefined && !zerked)
{
document.getElementsByClassName("fbt go-berserk")[0].click();
zerked = true;
}
if (!zerked)
{
setTimeout(clickZerkLoop, 50);
}
}
function backZerkLoop()
{
if (document.getElementsByClassName("rclock rclock-top")[0].getElementsByClassName("berserked top")[0] != undefined)
{
clickZerkLoop();
}
if (!zerked && berserkBackCheckbox.checked)
{
setTimeout(backZerkLoop, 150);
}
}
// looks at which boxes are checked and performs actions
function checkBoxes()
{
if (!zerked && document.getElementsByClassName("game__tournament").length > 0) // only try to click the buttons if you are actually playing (not in lobby or observing a tournament game)
{
if (berserkAlwaysCheckbox.checked)
{
clickZerkLoop();
}
if (berserkBackCheckbox.checked)
{
backZerkLoop();
}
}
}
// checks if page is a tournament lobby or tournament game
if (document.getElementsByClassName("tour__meta").length > 0 || document.getElementsByClassName("game__tournament-link").length > 0 || document.getElementsByClassName("game__tournament").length > 0)
{
cName = (document.getElementsByClassName("tour__meta").length > 0) ? "tour__meta" : "game__meta";
// cosmetics and buttons. div that will contain the new elements
var theDiv = document.getElementsByClassName(cName)[0];
// defines the text-accompanying elements
berserkAlwaysCheckbox = document.createElement("input");
berserkAlwaysCheckbox.id = "berserkAlwaysCheckbox";
berserkAlwaysCheckbox.type = "checkbox";
berserkBackCheckbox = document.createElement("input");
berserkBackCheckbox.id = "berserkBackCheckbox";
berserkBackCheckbox.type = "checkbox";
// defines the divs that will contain the checkboxes and adds them
berserkAlwaysDiv = document.createElement("div");
berserkAlwaysDiv.id = "berserk-always";
berserkAlwaysDiv.appendChild(berserkAlwaysCheckbox);
berserkAlwaysDiv.appendChild(document.createTextNode(" Berserk always"));
berserkBackDiv = document.createElement("div");
berserkBackDiv.id = "berserk-back";
berserkBackDiv.appendChild(berserkBackCheckbox);
berserkBackDiv.appendChild(document.createTextNode(" Berserk back"));
// after everything is setup, add things to the div
theDiv.appendChild(berserkAlwaysDiv);
theDiv.appendChild(berserkBackDiv);
// adds listeners to checkboxes
berserkAlwaysCheckbox.addEventListener("click", function()
{
setStorage("berserkAlwaysCheckbox", this.checked);
checkBoxes();
});
berserkBackCheckbox.addEventListener("click", function()
{
setStorage("berserkBackCheckbox", this.checked);
checkBoxes();
});
berserkAlwaysCheckbox.checked = getStorage("berserkAlwaysCheckbox");
berserkBackCheckbox.checked = getStorage("berserkBackCheckbox");
checkBoxes();
console.log("loaded berserk script");
}
}, 250);