11// ==UserScript==
22// @name 全球主机交流论坛增强
3- // @version 1.0.5
3+ // @version 1.0.6
44// @author X.I.U
5- // @description 自动无缝翻页、自动显示帖子内被隐藏的回复
6- // @match *://www. hostloc.com/*
5+ // @description 自动无缝翻页、自动显示帖子内隐藏回复
6+ // @match *://hostloc.com/*
77// @icon https://www.hostloc.com/favicon.ico
88// @grant GM_xmlhttpRequest
99// @grant GM_registerMenuCommand
1818// ==/UserScript==
1919
2020( function ( ) {
21- var menu_thread_pageLoading = GM_getValue ( 'xiu2_menu_thread_pageLoading' ) ,
22- menu_showhide = GM_getValue ( 'xiu2_menu_showhide' ) ;
23- var menu_thread_pageLoading_ID , menu_showhide_ID , menu_feedBack_ID ;
24- if ( menu_thread_pageLoading == null ) { menu_thread_pageLoading = true ; GM_setValue ( 'xiu2_menu_thread_pageLoading' , menu_thread_pageLoading ) } ;
25- if ( menu_showhide == null ) { menu_showhide = true ; GM_setValue ( 'xiu2_menu_showhide' , menu_showhide ) } ;
21+ var menu_ALL = [
22+ [ 'menu_thread_pageLoading' , '帖子内自动翻页' , '帖子内自动翻页' , true ] ,
23+ [ 'menu_showhide' , '自动显示隐藏回复' , '自动显示隐藏回复' , true ]
24+ ] , menu_ID = [ ] ;
25+ for ( let i = 0 ; i < menu_ALL . length ; i ++ ) { // 如果读取到的值为 null 就写入默认值
26+ if ( GM_getValue ( menu_ALL [ i ] [ 0 ] ) == null ) { GM_setValue ( menu_ALL [ i ] [ 0 ] , menu_ALL [ i ] [ 3 ] ) } ;
27+ }
2628 registerMenuCommand ( ) ;
2729
2830 // 注册脚本菜单
2931 function registerMenuCommand ( ) {
30- let menu_thread_pageLoading_ , menu_showhide_ ;
31- if ( menu_feedBack_ID ) { // 如果反馈菜单ID不是 null,则删除所有脚本菜单
32- GM_unregisterMenuCommand ( menu_thread_pageLoading_ID ) ;
33- GM_unregisterMenuCommand ( menu_showhide_ID ) ;
34- GM_unregisterMenuCommand ( menu_feedBack_ID ) ;
35- menu_thread_pageLoading = GM_getValue ( 'xiu2_menu_thread_pageLoading' ) ;
36- menu_showhide = GM_getValue ( 'xiu2_menu_showhide' ) ;
32+ if ( menu_ID . length > menu_ALL . length ) { // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单
33+ for ( let i = 0 ; i < menu_ID . length ; i ++ ) {
34+ GM_unregisterMenuCommand ( menu_ID [ i ] ) ;
35+ }
3736 }
38-
39- if ( menu_thread_pageLoading ) { menu_thread_pageLoading_ = "√" ; } else { menu_thread_pageLoading_ = "×" ; }
40- if ( menu_showhide ) { menu_showhide_ = "√" ; } else { menu_showhide_ = "×" ; }
41-
42- menu_thread_pageLoading_ID = GM_registerMenuCommand ( `[ ${ menu_thread_pageLoading_ } ] 帖子内自动翻页` , function ( ) { menu_switch ( menu_thread_pageLoading , 'xiu2_menu_thread_pageLoading' , '帖子内自动翻页' ) } ) ;
43- menu_showhide_ID = GM_registerMenuCommand ( `[ ${ menu_showhide_ } ] 自动显示隐藏回复` , function ( ) { menu_switch ( menu_showhide , 'xiu2_menu_showhide' , '自动显示隐藏回复' ) } ) ;
44- menu_feedBack_ID = GM_registerMenuCommand ( '反馈 & 建议' , function ( ) { window . GM_openInTab ( 'https://github.com/XIU2/UserScript#xiu2userscript' , { active : true , insert : true , setParent : true } ) ; } ) ;
37+ for ( let i = 0 ; i < menu_ALL . length ; i ++ ) { // 循环注册脚本菜单
38+ menu_ALL [ i ] [ 3 ] = GM_getValue ( menu_ALL [ i ] [ 0 ] ) ;
39+ menu_ID [ i ] = GM_registerMenuCommand ( `[ ${ menu_ALL [ i ] [ 3 ] ?'√' :'×' } ] ${ menu_ALL [ i ] [ 1 ] } ` , function ( ) { menu_switch ( `${ menu_ALL [ i ] [ 3 ] } ` , `${ menu_ALL [ i ] [ 0 ] } ` , `${ menu_ALL [ i ] [ 2 ] } ` ) } ) ;
40+ }
41+ menu_ID [ menu_ID . length ] = GM_registerMenuCommand ( '反馈 & 建议' , function ( ) { window . GM_openInTab ( 'https://github.com/XIU2/UserScript#xiu2userscript' , { active : true , insert : true , setParent : true } ) ; } ) ;
4542 }
4643
4744 // 菜单开关
4845 function menu_switch ( menu_status , Name , Tips ) {
49- if ( menu_status ) {
46+ if ( menu_status == 'true' ) {
5047 GM_setValue ( `${ Name } ` , false ) ;
5148 GM_notification ( { text : `已关闭 [${ Tips } ] 功能\n(刷新网页后生效)` , timeout : 3500 } ) ;
5249 } else {
5653 registerMenuCommand ( ) ; // 重新注册脚本菜单
5754 } ;
5855
56+ // 返回菜单值
57+ function menu_value ( menuName ) {
58+ for ( let menu of menu_ALL ) {
59+ if ( menu [ 0 ] == menuName ) {
60+ return menu [ 3 ]
61+ }
62+ }
63+ }
64+
5965 // 默认 ID 为 0
6066 var curSite = { SiteTypeID : 0 } ;
6167
111117 // URL 判断
112118 if ( patt_thread . test ( location . pathname ) || patt_thread_2 . test ( location . search ) ) {
113119 // 帖子内
114- if ( menu_thread_pageLoading ) curSite = DBSite . thread ;
120+ if ( menu_value ( ' menu_thread_pageLoading' ) ) curSite = DBSite . thread ;
115121 // 自动显示帖子内被隐藏的回复
116122 showPosts ( ) ;
117123 } else if ( patt_forum . test ( location . pathname ) || patt_forum_2 . test ( location . search ) ) {
154160
155161 // 自动显示帖子内被隐藏的回复
156162 function showPosts ( ) {
157- if ( menu_showhide ) {
163+ if ( menu_value ( ' menu_showhide' ) ) {
158164 let showposts = document . querySelector ( '#hiddenpoststip a' ) ;
159165 if ( showposts ) { // 如果存在
160166 showposts . click ( ) ;
266272
267273
268274 function getElementByXpath ( e , t , r ) {
269- r = r || document , t = t || r ;
270- try {
271- return r . evaluate ( e , t , null , XPathResult . FIRST_ORDERED_NODE_TYPE , null ) . singleNodeValue ;
272- } catch ( t ) {
273- return void console . error ( "无效的xpath" ) ;
274- }
275+ r = r || document , t = t || r ;
276+ try {
277+ return r . evaluate ( e , t , null , XPathResult . FIRST_ORDERED_NODE_TYPE , null ) . singleNodeValue ;
278+ } catch ( t ) {
279+ return void console . error ( "无效的xpath" ) ;
280+ }
275281 }
276282
277283
278284 function getAllElements ( e , t , r , n , o ) {
279- let getAllElementsByXpath = function ( e , t , r ) {
280- return r = r || document , t = t || r , r . evaluate ( e , t , null , XPathResult . ORDERED_NODE_SNAPSHOT_TYPE , null ) ;
281- }
282-
283- var i , s = [ ] ;
284- if ( ! e ) return s ;
285- if ( r = r || document , n = n || window , o = o || void 0 , t = t || r , "string" == typeof e ) i = 0 === e . search ( / ^ c s s ; / i) ? function getAllElementsByCSS ( e , t ) {
286- return ( t || document ) . querySelectorAll ( e ) ;
287- } ( e . slice ( 4 ) , t ) : getAllElementsByXpath ( e , t , r ) ; else {
288- if ( ! ( i = e ( r , n , o ) ) ) return s ;
289- if ( i . nodeType ) return s [ 0 ] = i , s ;
290- }
291- return function makeArray ( e ) {
292- var t , r , n , o = [ ] ;
293- if ( e . pop ) {
294- for ( t = 0 , r = e . length ; t < r ; t ++ ) ( n = e [ t ] ) && ( n . nodeType ? o . push ( n ) : o = o . concat ( makeArray ( n ) ) ) ;
295- return a ( ) ( o ) ;
296- }
297- if ( e . item ) {
298- for ( t = e . length ; t ; ) o [ -- t ] = e [ t ] ;
299- return o ;
285+ let getAllElementsByXpath = function ( e , t , r ) {
286+ return r = r || document , t = t || r , r . evaluate ( e , t , null , XPathResult . ORDERED_NODE_SNAPSHOT_TYPE , null ) ;
300287 }
301- if ( e . iterateNext ) {
302- for ( t = e . snapshotLength ; t ; ) o [ -- t ] = e . snapshotItem ( t ) ;
303- return o ;
288+
289+ var i , s = [ ] ;
290+ if ( ! e ) return s ;
291+ if ( r = r || document , n = n || window , o = o || void 0 , t = t || r , "string" == typeof e ) i = 0 === e . search ( / ^ c s s ; / i) ? function getAllElementsByCSS ( e , t ) {
292+ return ( t || document ) . querySelectorAll ( e ) ;
293+ } ( e . slice ( 4 ) , t ) : getAllElementsByXpath ( e , t , r ) ; else {
294+ if ( ! ( i = e ( r , n , o ) ) ) return s ;
295+ if ( i . nodeType ) return s [ 0 ] = i , s ;
304296 }
305- } ( i ) ;
297+ return function makeArray ( e ) {
298+ var t , r , n , o = [ ] ;
299+ if ( e . pop ) {
300+ for ( t = 0 , r = e . length ; t < r ; t ++ ) ( n = e [ t ] ) && ( n . nodeType ? o . push ( n ) : o = o . concat ( makeArray ( n ) ) ) ;
301+ return a ( ) ( o ) ;
302+ }
303+ if ( e . item ) {
304+ for ( t = e . length ; t ; ) o [ -- t ] = e [ t ] ;
305+ return o ;
306+ }
307+ if ( e . iterateNext ) {
308+ for ( t = e . snapshotLength ; t ; ) o [ -- t ] = e . snapshotItem ( t ) ;
309+ return o ;
310+ }
311+ } ( i ) ;
306312 }
307313} ) ( ) ;
0 commit comments