-
Notifications
You must be signed in to change notification settings - Fork 1
/
BHV-links.user.js
137 lines (95 loc) · 4.09 KB
/
BHV-links.user.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
128
129
130
131
132
133
134
135
136
137
// ==UserScript==
// @name BHV links for chess.com
// @version 2023.06.02
// @description puts a BHV button into the left menubar, replaces archive game links to BHV links
// @author bmacho
// @match https://www.chess.com/game/live/*
// @match https://www.chess.com/games/archive*
// @match https://www.chess.com/member/*
// @match https://www.chess.com/play/online*
// @icon data:image/gif;base64,R0lGODlhEAAQAPIAAAAAAE13N2CQPG6fQpK7SAAAAAAAAAAAACH5BAUKAAAALAAAAAAQABAAAAM1CLrTsxAKQlqI0VksnbgcM3yhaIGcoH1oGrylSMZAM5fO22a5zmkDHSwiUBWFO6SQFVEKFwkAOw==
// @namespace none
// @grant none
// @updateURL https://github.com/bmacho/bughouse-viewer/raw/main/BHV-links.user.js
// @run-at document-idle
// ==/UserScript==
let replace_archive = true
let put_BHV_button = true
let is_member = location.pathname.slice(0, 8) == "/member/"
let is_archive = location.pathname.slice(0, 15) == "/games/archive/"
let is_livegame = location.pathname.slice(0, 11) == "/game/live/"
let is_play_onl = location.pathname.slice(0, 12) == "/play/online"
if ( put_BHV_button && ( is_livegame || is_play_onl ) ) {
console.log( "live game or an archive" )
// waits until the menu appears, then calls add_button()
var sidebar_upper;
(function wait(){
let sidebar_upper = document.getElementById("sb").children[2];
if ( sidebar_upper ) {
add_button( sidebar_upper )
} else {
setTimeout(wait, 100);
}
})();
}
if ( replace_archive && (is_archive || is_member ) ) {
// waits until the table loads
var tbody;
(function wait(){
let tbody = document.getElementsByTagName("tbody")[0]
if ( tbody ) {
// for debug purposes
console.log(tbody)
window.tb = tbody
if (is_member) {
for (let ch of tbody.children) {
replaceArchive_Member(ch)
}
}
if (is_archive) {
for (let ch of tbody.children) {
replaceArchive_Archive(ch)
}
}
} else {
setTimeout(wait, 50);
}
})();
}
function replaceArchive_Archive ( row ) {
// call it on the '.children' of the 'tbody' of the table that contains links to archive games
// on a /games/archive page
let isbughouse = row.innerHTML.includes(' bughouse"') // it is a row that points to a bughouse game
if ( isbughouse ) {
row.innerHTML = row.innerHTML
.replaceAll("https://www.chess.com/game/live/", "https://bmacho.github.io/bughouse-viewer/view.html?game_id=")
.replaceAll("https://www.chess.com/analysis/game/live/", "https://bmacho.github.io/bughouse-viewer/view.html?game_id=")
}
}
function replaceArchive_Member ( row ) {
// call it on the '.children' of the 'tbody' of the table that contains links to archive games
// on a /member page
let isbughouse = row.innerHTML.includes(' bughouse"') // it is a row that points to a bughouse game
if ( isbughouse ) {
row.innerHTML = row.innerHTML
.replaceAll("/game/live/", "https://bmacho.github.io/bughouse-viewer/view.html?game_id=")
}
}
function add_button( sidebar_upper ) {
var review_button = document.createElement("div");
review_button.innerHTML = "[open in BHV]"
review_button.style.textAlign = "center"
review_button.style.marginRight = "auto"
review_button.style.marginLeft = "auto"
review_button.style.cursor = "pointer"
review_button.addEventListener ("click", openBHV)
review_button.addEventListener ("auxclick", openBHV)
sidebar_upper.appendChild(review_button)
}
function openBHV() {
// we put semicolons here so the code can be copy-pasted for the bookmarklet
let game_id = location.pathname.slice(11) ;
let board_obj = document.getElementById("board-single") ;
let flip = board_obj ? board_obj.classList.contains("flipped") ? "&flip=true" : "" : "" ;
window.open("https://bmacho.github.io/bughouse-viewer/view.html?game_id=" + game_id + flip, "_blank") ;
}