Skip to content

Commit 93a7b23

Browse files
authored
v1.6.0: 提升速度
1 parent 1e1b444 commit 93a7b23

1 file changed

Lines changed: 49 additions & 70 deletions

File tree

SpeedRunHelper.user.js

Lines changed: 49 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -41,54 +41,42 @@ css.innerHTML = `
4141
.speedrun-minimum #speedrun-restore, .speedrun-maximum #speedrun-restore {display: block;}`;
4242
document.body.append(css);
4343

44-
const videoHandlers = {
45-
'': mainboard,
46-
'series': seriesboard,
47-
'users': usersboard,
48-
game: gameboard
49-
};
50-
51-
document.querySelector('main').addEventListener('contextmenu', (event) => {
52-
let handler = videoHandlers[srWatch] ?? videoHandlers.game;
53-
handler(event);
54-
});
55-
56-
function mainboard(event) {
57-
speedrunRecord(event, 'div.cursor-pointer.x-focus-outline-offset.overflow-hidden', (record) => {
58-
let [rank, time, player] = record.querySelectorAll('a > .truncate, a.x-username-truncate');
59-
return {url: rank.parentNode.href, rank, player, time};
60-
});
61-
}
62-
63-
function seriesboard(event) {
64-
speedrunRecord(event, 'div.cursor-pointer.x-focus-outline-offset.overflow-hidden', (record) => {
65-
let [rank, time, player] = record.querySelectorAll('a > .truncate, a.x-username-truncate');
66-
return {url: rank.parentNode.href, rank, player, time};
67-
});
68-
}
69-
70-
function usersboard(event) {
71-
speedrunRecord(event, 'div.cursor-pointer.x-focus-outline-offset.overflow-hidden', (record) => {
72-
let player = document.querySelector('.x-username > span');
73-
let [rank, time] = record.querySelectorAll('a > .truncate');
74-
return {url: rank.parentNode.href, rank, player, time};
75-
});
76-
}
77-
78-
function gameboard(event) {
79-
speedrunRecord(event, 'tr', (record) => {
80-
let [rank, player, time] = record.querySelectorAll('a');
81-
return {url: rank.href, rank, player, time};
82-
});
83-
}
84-
85-
async function speedrunRecord(event, selector, callback) {
86-
let record = event.target.closest(selector);
87-
if (!record || event.ctrlKey) {
44+
document.querySelector('main').addEventListener('contextmenu', async (event) => {
45+
if (event.ctrlKey || event.altKey || event.shiftKey) {
46+
return;
47+
}
48+
let result;
49+
if (srWatch === '') {
50+
let record = event.target.closest('div.cursor-pointer.x-focus-outline-offset.overflow-hidden');
51+
if (record) {
52+
let [rank, time, player] = record.querySelectorAll('a > .truncate, a.x-username-truncate');
53+
result = { url: rank.parentNode.href, rank, player, time };
54+
}
55+
} else if (srWatch === 'series') {
56+
let record = event.target.closest('div.cursor-pointer.x-focus-outline-offset.overflow-hidden');
57+
if (record) {
58+
let [rank, time, player] = record.querySelectorAll('a > .truncate, a.x-username-truncate');
59+
result = { url: rank.parentNode.href, rank, player, time };
60+
}
61+
} else if (srWatch === 'users') {
62+
let record = event.target.closest('div.cursor-pointer.x-focus-outline-offset.overflow-hidden');
63+
if (record) {
64+
let player = document.querySelector('.x-username > span');
65+
let [rank, time] = record.querySelectorAll('a > .truncate');
66+
result = { url: rank.parentNode.href, rank, player, time };
67+
}
68+
} else {
69+
let record = event.target.closest('tr');
70+
if (record) {
71+
let [rank, player, time] = record.querySelectorAll('a');
72+
result = { url: rank.href, rank, player, time };
73+
}
74+
}
75+
if (!result) {
8876
return;
8977
}
9078
event.preventDefault();
91-
let {url, rank, player, time} = callback(record);
79+
let { url, rank, player, time } = result;
9280
let id = url.slice(url.lastIndexOf('/') + 1);
9381
if (worker[id]) {
9482
return;
@@ -107,28 +95,7 @@ async function speedrunRecord(event, selector, callback) {
10795
let iframe = html.substring(start, end);
10896
console.log(iframe);
10997
createRecordWindow(id, title, top, iframe);
110-
}
111-
112-
const recordHandlers = {
113-
'speedrun-minimum': (pane) => {
114-
pane.classList.add('speedrun-minimum');
115-
pane.classList.remove('speedrun-maximum');
116-
pane.style.cssText = '';
117-
},
118-
'speedrun-maximum': (pane) => {
119-
pane.classList.add('speedrun-maximum');
120-
pane.classList.remove('speedrun-minimum');
121-
pane.style.cssText = '';
122-
},
123-
'speedrun-restore': (pane, id) => {
124-
pane.classList.remove('speedrun-maximum', 'speedrun-minimum');
125-
pane.style.cssText = style[id];
126-
},
127-
'speedrun-remove': (pane) => {
128-
pane.remove();
129-
-- srPane;
130-
}
131-
}
98+
});
13299

133100
document.addEventListener('dragstart', (event) => {
134101
let pane = event.target.closest('div[id^=speedrun-');
@@ -167,9 +134,21 @@ function createRecordWindow(id, title, top, player) {
167134
${player}`;
168135
pane.style.cssText = style[id] = fixedPanePosition(pane.offset);
169136
pane.addEventListener('click', (event) => {
170-
let handler = recordHandlers[event.target.id];
171-
if (handler) {
172-
handler(pane, id);
137+
let { id } = event.target;
138+
if (id === 'speedrun-minimum') {
139+
pane.classList.add('speedrun-minimum');
140+
pane.classList.remove('speedrun-maximum');
141+
pane.style.cssText = '';
142+
} else if (id === 'speedrun-maximum') {
143+
pane.classList.add('speedrun-maximum');
144+
pane.classList.remove('speedrun-minimum');
145+
pane.style.cssText = '';
146+
} else if (id === 'speedrun-restore') {
147+
pane.classList.remove('speedrun-maximum', 'speedrun-minimum');
148+
pane.style.cssText = style[id];
149+
} else if (id === 'speedrun-remove') {
150+
pane.remove();
151+
--srPane;
173152
}
174153
});
175154
document.body.appendChild(pane);

0 commit comments

Comments
 (0)