22// @name Nyaa Torrent Helper
33// @name :zh Nyaa 助手
44// @namespace https://github.com/jc3213/userscript
5- // @version 1.2.3
5+ // @version 1.2.4
66// @description Nyaa Torrent ease to access torrent info and preview, filter search result, and aria2c intergration
77// @description :zh 能便捷操作 Nyaa 的种子信息,预览缩微图,过滤搜索结果,联动aria2c
88// @author jc3213
@@ -88,24 +88,26 @@ let hotkeyMap = {
8888 'ArrowLeft' : ( event ) => ctrlButton ( event , active . previousElementSibling ) ,
8989 'ArrowRight' : ( event ) => ctrlButton ( event , active . nextElementSibling ) ,
9090 'KeyC' : ( event ) => altHandler ( event , copyToClipboard ) ,
91- 'KeyJ ' : ( event ) => altHandler ( event , downloadWithAria2 ) ,
91+ 'KeyD ' : ( event ) => altHandler ( event , downloadWithAria2 ) ,
9292 'KeyF' : ( event ) => altHandler ( event , filterTorrents ) ,
9393 'KeyE' : ( event ) => altShiftHandler ( event , clearStorage ) ,
9494} ;
9595
9696let filterMap = {
97- '' ( result ) {
98- torrents . forEach ( ( tr ) => tr . classList . remove ( 'nyaa-hidden' ) ) ;
97+ '' ( result ) {
98+ for ( let tr of torrents ) {
99+ tr . classList . remove ( 'nyaa-hidden' ) ;
100+ }
99101 keyword = '' ;
100102 delete filterMap [ result ] ;
101103 } ,
102- _default_ ( result ) {
104+ _default_ ( result ) {
103105 let regexp = new RegExp ( result . replace ( / [ ? . \( \) \[ \] + ] / g, '\\$&' ) , 'i' ) ;
104- torrents . forEach ( ( tr ) => {
106+ for ( let tr of torrents ) {
105107 regexp . test ( tr . info . name )
106108 ? tr . classList . remove ( 'nyaa-hidden' )
107109 : tr . classList . add ( 'nyaa-hidden' ) ;
108- } ) ;
110+ }
109111 filterMap [ result ] = filterMap [ '' ] ;
110112 keyword = result ;
111113 }
@@ -122,23 +124,32 @@ function filterTorrents() {
122124
123125async function copyToClipboard ( ) {
124126 if ( ! confirm ( i18n . oncopy ) ) return ;
125- let info = await Promise . all ( [ ...selected ] . map ( async ( tr ) => await getClipboardInfo ( tr ) ) ) ;
127+ let data = [ ] ;
128+ for ( let tr of selected ) {
129+ data . push ( getClipboardInfo ( tr ) ) ;
130+ }
131+ let info = await Promise . all ( data ) ;
126132 let copy = info . join ( '\n\n' ) ;
127133 navigator . clipboard . writeText ( copy ) ;
128134 alert ( copy ) ;
129135}
130136
131137function downloadWithAria2 ( ) {
132138 if ( ! confirm ( i18n . aria2c ) ) return ;
133- let params = [ ...selected ] . map ( ( tr ) => ( { url : tr . info . magnet } ) ) ;
139+ let params = [ ] ;
140+ for ( let tr of selected ) {
141+ params . push ( tr . info . magnet ) ;
142+ }
134143 postMessage ( { aria2c : 'aria2c_download' , params } ) ;
135144 alert ( i18n . onsend ) ;
136145}
137146
138147async function clearStorage ( ) {
139148 if ( ! confirm ( i18n . clear ) ) return ;
140149 GM_deleteValues ( GM_listValues ( ) ) ;
141- torrents . forEach ( ( tr ) => tr . classList . remove ( 'nyaa-cached' ) ) ;
150+ for ( let tr of torrents ) {
151+ tr . classList . remove ( 'nyaa-cached' ) ;
152+ }
142153 alert ( i18n . onclear ) ;
143154}
144155
@@ -148,7 +159,7 @@ document.addEventListener('keydown', (event) => {
148159} ) ;
149160
150161// get torrent info
151- document . querySelectorAll ( 'table > tbody > tr' ) . forEach ( ( tr ) => {
162+ for ( let tr of document . querySelectorAll ( 'table > tbody > tr' ) ) {
152163 let [ , name , link , size ] = tr . children ;
153164 let a = [ ...name . children ] . at ( - 1 ) ;
154165 let url = a . href ;
@@ -166,7 +177,7 @@ document.querySelectorAll('table > tbody > tr').forEach((tr) => {
166177 let copy = await getClipboardInfo ( tr ) ;
167178 navigator . clipboard . writeText ( copy )
168179 } else if ( altKey ) {
169- postMessage ( { aria2c : 'aria2c_download' , params : [ { url : magnet } ] } ) ;
180+ postMessage ( { aria2c : 'aria2c_download' , params : [ magnet ] } ) ;
170181 } else {
171182 getTorrentPreview ( tr , layerY , layerX ) ;
172183 }
@@ -187,7 +198,7 @@ document.querySelectorAll('table > tbody > tr').forEach((tr) => {
187198 tr . classList . toggle ( 'nyaa-checked' ) ;
188199 }
189200 } ) ;
190- } ) ;
201+ }
191202
192203async function getTorrentDetail ( tr ) {
193204 let { url, name, torrent, magnet, size} = tr . info ;
@@ -202,7 +213,11 @@ async function getTorrentDetail(tr) {
202213 let text = await fetch ( url ) . then ( ( res ) => res . text ( ) ) . catch ( ( err ) => working . delete ( url ) ) ;
203214 let result = text . match ( / < d i v [ ^ > ] * i d = [ " ' ] t o r r e n t - d e s c r i p t i o n [ " ' ] [ ^ > ] * > ( [ \s \S ] * ?) < \/ d i v > / i) [ 1 ] ;
204215 let urls = result . match ( / h t t p s ? : \/ \/ [ ^ \] & ) * ] + / g) ;
205- urls ?. forEach ( ( url ) => url . match ( / .( j p e ? g | p n g | g i f | a v i f | b m p | w e b p ) / ) ? image . add ( url ) : site . add ( url ) ) ;
216+ if ( urls ) {
217+ for ( let url of urls ) {
218+ url . match ( / .( j p e ? g | p n g | g i f | a v i f | b m p | w e b p ) / ) ? image . add ( url ) : site . add ( url ) ;
219+ }
220+ }
206221 info = { site : [ ...site ] , image : [ ...image ] } ;
207222 GM_setValue ( url , info ) ;
208223 tr . classList . add ( 'nyaa-cached' ) ;
0 commit comments