@@ -41,54 +41,42 @@ css.innerHTML = `
4141.speedrun-minimum #speedrun-restore, .speedrun-maximum #speedrun-restore {display: block;}` ;
4242document . 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
133100document . 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