11// ==UserScript==
22// @name 知乎增强
3- // @version 1.3.1
3+ // @version 1.3.2
44// @author X.I.U
5- // @description 移除登录弹窗、一键收起回答、收起当前回答/评论(点击两侧空白处)、置顶显示时间、显示问题时间、区分问题文章、默认高清原图、默认站外直链
5+ // @description 移除登录弹窗、一键收起回答、收起当前回答/评论(点击两侧空白处)、快捷回到顶部(右键两侧空白处)、 置顶显示时间、显示问题时间、区分问题文章、默认高清原图、默认站外直链
66// @match *://www.zhihu.com/*
77// @match *://zhuanlan.zhihu.com/*
88// @icon https://static.zhihu.com/heifetz/favicon.ico
1919// @namespace https://greasyfork.org/scripts/412205
2020// ==/UserScript==
2121
22- var menu_collapsedAnswer = GM_getValue ( 'xiu2_menu_collapsedAnswer' ) ,
23- menu_collapsedNowAnswer = GM_getValue ( 'xiu2_menu_collapsedNowAnswer' ) ,
24- menu_publishTop = GM_getValue ( 'xiu2_menu_publishTop' ) ,
25- menu_allTime = GM_getValue ( 'xiu2_menu_allTime' ) ,
26- menu_typeTips = GM_getValue ( 'xiu2_menu_typeTips' ) ,
27- menu_directLink = GM_getValue ( 'xiu2_menu_directLink' ) ,
28- menu_collapsedAnswer_ID , menu_collapsedNowAnswer_ID , menu_publishTop_ID , menu_typeTips_ID , menu_allTime_ID , menu_directLink_ID , menu_feedBack_ID ;
29- if ( menu_collapsedAnswer == null ) { menu_collapsedAnswer = true ; GM_setValue ( 'xiu2_menu_collapsedAnswer' , menu_collapsedAnswer ) } ;
30- if ( menu_collapsedNowAnswer == null ) { menu_collapsedNowAnswer = true ; GM_setValue ( 'xiu2_menu_collapsedNowAnswer' , menu_collapsedNowAnswer ) } ;
31- if ( menu_publishTop == null ) { menu_publishTop = true ; GM_setValue ( 'xiu2_menu_publishTop' , menu_publishTop ) } ;
32- if ( menu_allTime == null ) { menu_allTime = true ; GM_setValue ( 'xiu2_menu_allTime' , menu_allTime ) } ;
33- if ( menu_typeTips == null ) { menu_typeTips = true ; GM_setValue ( 'xiu2_menu_typeTips' , menu_typeTips ) } ;
34- if ( menu_directLink == null ) { menu_directLink = true ; GM_setValue ( 'xiu2_menu_directLink' , menu_directLink ) } ;
22+ var menu_ALL = [
23+ [ 'menu_collapsedAnswer' , '一键收起回答' , '一键收起回答' , true ] ,
24+ [ 'menu_collapsedNowAnswer' , '收起当前回答/评论(点击两侧空白处)' , '收起当前回答/评论' , true ] ,
25+ [ 'menu_backToTop' , '快捷回到顶部(右键两侧空白处)' , '快捷回到顶部' , true ] ,
26+ [ 'menu_publishTop' , '置顶显示时间' , '置顶显示时间' , true ] ,
27+ [ 'menu_allTime' , '完整显示时间' , '完整显示时间' , true ] ,
28+ [ 'menu_typeTips' , '区分问题文章' , '区分问题文章' , true ] ,
29+ [ 'menu_directLink' , '默认站外直链' , '默认站外直链' , true ]
30+ ] , menu_ID = [ ] ;
31+ for ( let i = 0 ; i < menu_ALL . length ; i ++ ) { // 如果读取到的值为 null 就写入默认值
32+ if ( GM_getValue ( menu_ALL [ i ] [ 0 ] ) == null ) { GM_setValue ( menu_ALL [ i ] [ 0 ] , menu_ALL [ i ] [ 3 ] ) } ;
33+ }
3534registerMenuCommand ( ) ;
3635
3736// 注册脚本菜单
3837function registerMenuCommand ( ) {
39- var menu_collapsedAnswer_ , menu_collapsedNowAnswer_ , menu_publishTop_ , menu_typeTips_ , menu_allTime_ , menu_directLink_ ;
40- if ( menu_feedBack_ID ) { // 如果反馈菜单ID不是 null,则删除所有脚本菜单
41- GM_unregisterMenuCommand ( menu_collapsedAnswer_ID ) ;
42- GM_unregisterMenuCommand ( menu_collapsedNowAnswer_ID ) ;
43- GM_unregisterMenuCommand ( menu_publishTop_ID ) ;
44- GM_unregisterMenuCommand ( menu_allTime_ID ) ;
45- GM_unregisterMenuCommand ( menu_typeTips_ID ) ;
46- GM_unregisterMenuCommand ( menu_directLink_ID ) ;
47- GM_unregisterMenuCommand ( menu_feedBack_ID ) ;
48- menu_collapsedAnswer = GM_getValue ( 'xiu2_menu_collapsedAnswer' ) ;
49- menu_collapsedNowAnswer = GM_getValue ( 'xiu2_menu_collapsedNowAnswer' ) ;
50- menu_publishTop = GM_getValue ( 'xiu2_menu_publishTop' ) ;
51- menu_allTime = GM_getValue ( 'xiu2_menu_allTime' ) ;
52- menu_typeTips = GM_getValue ( 'xiu2_menu_typeTips' ) ;
53- menu_directLink = GM_getValue ( 'xiu2_menu_directLink' ) ;
38+ if ( menu_ID . length > menu_ALL . length ) { // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单
39+ for ( let i = 0 ; i < menu_ID . length ; i ++ ) {
40+ GM_unregisterMenuCommand ( menu_ID [ i ] ) ;
41+ }
5442 }
55-
56- if ( menu_collapsedAnswer ) { menu_collapsedAnswer_ = "√" ; } else { menu_collapsedAnswer_ = "×" ; }
57- if ( menu_collapsedNowAnswer ) { menu_collapsedNowAnswer_ = "√" ; } else { menu_collapsedNowAnswer_ = "×" ; }
58- if ( menu_publishTop ) { menu_publishTop_ = "√" ; } else { menu_publishTop_ = "×" ; }
59- if ( menu_allTime ) { menu_allTime_ = "√" ; } else { menu_allTime_ = "×" ; }
60- if ( menu_typeTips ) { menu_typeTips_ = "√" ; } else { menu_typeTips_ = "×" ; }
61- if ( menu_directLink ) { menu_directLink_ = "√" ; } else { menu_directLink_ = "×" ; }
62-
63- menu_collapsedAnswer_ID = GM_registerMenuCommand ( `[ ${ menu_collapsedAnswer_ } ] 一键收起回答` , function ( ) { menu_switch ( menu_collapsedAnswer , 'xiu2_menu_collapsedAnswer' , '一键收起回答' ) } ) ;
64- menu_collapsedNowAnswer_ID = GM_registerMenuCommand ( `[ ${ menu_collapsedNowAnswer_ } ] 收起当前回答/评论(点击两侧空白处)` , function ( ) { menu_switch ( menu_collapsedNowAnswer , 'xiu2_menu_collapsedNowAnswer' , '收起当前回答' ) } ) ;
65- menu_publishTop_ID = GM_registerMenuCommand ( `[ ${ menu_publishTop_ } ] 置顶显示时间` , function ( ) { menu_switch ( menu_publishTop , 'xiu2_menu_publishTop' , '置顶显示时间' ) } ) ;
66- menu_allTime_ID = GM_registerMenuCommand ( `[ ${ menu_allTime_ } ] 完整显示时间` , function ( ) { menu_switch ( menu_allTime , 'xiu2_menu_allTime' , '完整显示时间' ) } ) ;
67- menu_typeTips_ID = GM_registerMenuCommand ( `[ ${ menu_typeTips_ } ] 区分问题文章` , function ( ) { menu_switch ( menu_typeTips , 'xiu2_menu_typeTips' , '区分问题文章' ) } ) ;
68- menu_directLink_ID = GM_registerMenuCommand ( `[ ${ menu_directLink_ } ] 默认站外直链` , function ( ) { menu_switch ( menu_directLink , 'xiu2_menu_directLink' , '默认站外直链' ) } ) ;
69- menu_feedBack_ID = GM_registerMenuCommand ( '反馈 & 建议' , function ( ) { window . GM_openInTab ( 'https://github.com/XIU2/UserScript#xiu2userscript' , { active : true , insert : true , setParent : true } ) ; } ) ;
43+ for ( let i = 0 ; i < menu_ALL . length ; i ++ ) { // 循环注册脚本菜单
44+ menu_ALL [ i ] [ 3 ] = GM_getValue ( menu_ALL [ i ] [ 0 ] ) ;
45+ 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 ] } ` ) } ) ;
46+ }
47+ menu_ID [ menu_ID . length ] = GM_registerMenuCommand ( '反馈 & 建议' , function ( ) { window . GM_openInTab ( 'https://github.com/XIU2/UserScript#xiu2userscript' , { active : true , insert : true , setParent : true } ) ; } ) ;
7048}
7149
7250// 菜单开关
7351function menu_switch ( menu_status , Name , Tips ) {
74- if ( menu_status ) {
52+ if ( menu_status == 'true' ) {
7553 GM_setValue ( `${ Name } ` , false ) ;
7654 GM_notification ( { text : `已关闭 [${ Tips } ] 功能\n(刷新网页后生效)` , timeout : 3500 } ) ;
7755 } else {
@@ -81,14 +59,24 @@ function menu_switch(menu_status, Name, Tips) {
8159 registerMenuCommand ( ) ; // 重新注册脚本菜单
8260} ;
8361
62+ // 返回菜单值
63+ function menu_value ( menuName ) {
64+ for ( let menu of menu_ALL ) {
65+ if ( menu [ 0 ] == menuName ) {
66+ return menu [ 3 ]
67+ }
68+ }
69+ }
70+
71+
8472// 置顶显示时间 - 首页,来自:https://greasyfork.org/scripts/402808
8573function topTime_index ( )
8674{
8775 $ ( ".TopstoryItem" ) . each ( function ( ) {
8876 if ( ! ( $ ( this ) . find ( ".ContentItem-time" ) . hasClass ( "full" ) ) && $ ( this ) . find ( ".ContentItem-time" ) . length > 0 && $ ( this ) . find ( ".ContentItem-time" ) . find ( "span" ) . text ( ) != null )
8977 {
9078 // 完整显示时间
91- if ( menu_allTime )
79+ if ( menu_value ( ' menu_allTime' ) )
9280 {
9381 if ( $ ( this ) . find ( ".ContentItem-time" ) . text ( ) . indexOf ( "发布于" ) == - 1 && $ ( this ) . find ( ".ContentItem-time" ) . text ( ) . indexOf ( "编辑于" ) > - 1 ) //只有"编辑于"时增加具体发布时间data-tooltip
9482 {
@@ -106,7 +94,7 @@ function topTime_index()
10694 }
10795
10896 //发布时间置顶
109- if ( menu_publishTop )
97+ if ( menu_value ( ' menu_publishTop' ) )
11098 {
11199 if ( ! $ ( this ) . find ( ".ContentItem-time" ) . parent ( ) . hasClass ( "ContentItem-meta" ) )
112100 {
@@ -141,7 +129,7 @@ function topTime_question()
141129 if ( ! ( $ ( this ) . find ( ".ContentItem-time" ) . hasClass ( "full" ) ) && $ ( this ) . find ( ".ContentItem-time" ) . length > 0 && $ ( this ) . find ( ".ContentItem-time" ) . find ( "span" ) . text ( ) != null )
142130 {
143131 // 完整显示时间
144- if ( menu_allTime )
132+ if ( menu_value ( ' menu_allTime' ) )
145133 {
146134 if ( $ ( this ) . find ( ".ContentItem-time" ) . text ( ) . indexOf ( "发布于" ) == - 1 && $ ( this ) . find ( ".ContentItem-time" ) . text ( ) . indexOf ( "编辑于" ) > - 1 ) //只有"编辑于"时增加具体发布时间data-tooltip
147135 {
@@ -159,7 +147,7 @@ function topTime_question()
159147 }
160148
161149 //发布时间置顶
162- if ( menu_publishTop )
150+ if ( menu_value ( ' menu_publishTop' ) )
163151 {
164152 if ( ! $ ( this ) . find ( ".ContentItem-time" ) . parent ( ) . hasClass ( "ContentItem-meta" ) )
165153 {
@@ -193,7 +181,7 @@ function topTime_zhuanlan()
193181 $ ( ".Recommendations-Main" ) . hide ( ) ;
194182
195183 // 完整显示时间
196- if ( menu_allTime )
184+ if ( menu_value ( ' menu_allTime' ) )
197185 {
198186 if ( $ ( ".ContentItem-time" ) . text ( ) . indexOf ( "编辑于" ) > - 1 && ! $ ( ".ContentItem-time" ) . hasClass ( "done" ) )
199187 {
@@ -205,7 +193,7 @@ function topTime_zhuanlan()
205193 }
206194
207195 //发布时间置顶
208- if ( menu_publishTop && $ ( ".Post-Header" ) . find ( ".ContentItem-time" ) . length == 0 )
196+ if ( menu_value ( ' menu_publishTop' ) && $ ( ".Post-Header" ) . find ( ".ContentItem-time" ) . length == 0 )
209197 {
210198 $ ( ".ContentItem-time" ) . css ( { "padding" :"0px 0px 0px 0px" , "margin-top" : "14px" } ) ;
211199 $ ( ".ContentItem-time" ) . appendTo ( $ ( ".Post-Header" ) )
@@ -219,7 +207,7 @@ function topTime_search()
219207 if ( ! ( $ ( this ) . find ( ".ContentItem-time" ) . hasClass ( "full" ) ) && $ ( this ) . find ( ".ContentItem-time" ) . length > 0 && $ ( this ) . find ( ".ContentItem-time" ) . find ( "span" ) . text ( ) != null )
220208 {
221209 // 完整显示时间
222- if ( menu_allTime )
210+ if ( menu_value ( ' menu_allTime' ) )
223211 {
224212 if ( $ ( this ) . find ( ".ContentItem-time" ) . text ( ) . indexOf ( "发布于" ) == - 1 && $ ( this ) . find ( ".ContentItem-time" ) . text ( ) . indexOf ( "编辑于" ) > - 1 ) //只有"编辑于"时,增加具体发布时间data-tooltip
225213 {
@@ -237,7 +225,7 @@ function topTime_search()
237225 }
238226
239227 //发布时间置顶
240- if ( menu_publishTop )
228+ if ( menu_value ( ' menu_publishTop' ) )
241229 {
242230 if ( ! $ ( this ) . find ( ".ContentItem-time" ) . parent ( ) . hasClass ( "SearchItem-meta" ) )
243231 {
@@ -258,7 +246,7 @@ function topTime_people()
258246 if ( ! ( $ ( this ) . find ( ".ContentItem-time" ) . hasClass ( "full" ) ) && $ ( this ) . find ( ".ContentItem-time" ) . length > 0 && $ ( this ) . find ( ".ContentItem-time" ) . find ( "span" ) . text ( ) != null )
259247 {
260248 // 完整显示时间
261- if ( menu_allTime )
249+ if ( menu_value ( ' menu_allTime' ) )
262250 {
263251 if ( $ ( this ) . find ( ".ContentItem-time" ) . text ( ) . indexOf ( "发布于" ) == - 1 && $ ( this ) . find ( ".ContentItem-time" ) . text ( ) . indexOf ( "编辑于" ) > - 1 ) //只有"编辑于"时增加具体发布时间data-tooltip
264252 {
@@ -276,7 +264,7 @@ function topTime_people()
276264 }
277265
278266 //发布时间置顶
279- if ( menu_publishTop )
267+ if ( menu_value ( ' menu_publishTop' ) )
280268 {
281269 if ( ! $ ( this ) . find ( ".ContentItem-time" ) . parent ( ) . hasClass ( "ContentItem-meta" ) )
282270 {
@@ -365,7 +353,7 @@ function originalPic(){
365353
366354// 一键收起回答
367355function collapsedAnswer ( ) {
368- if ( menu_collapsedAnswer ) {
356+ if ( menu_value ( ' menu_collapsedAnswer' ) ) {
369357 let button_Add = `<button id="collapsed-button" data-tooltip="收起回答" data-tooltip-position="left" data-tooltip-will-hide-on-click="false" aria-label="收起回答" type="button" class="Button CornerButton Button--plain"><svg class="ContentItem-arrowIcon is-active" aria-label="收起回答" fill="currentColor" viewBox="0 0 24 24" width="24" height="24"><path d="M16.036 19.59a1 1 0 0 1-.997.995H9.032a.996.996 0 0 1-.997-.996v-7.005H5.03c-1.1 0-1.36-.633-.578-1.416L11.33 4.29a1.003 1.003 0 0 1 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.005z"></path></svg></button>`
370358 let style_Add = document . createElement ( 'style' ) ;
371359 style_Add . innerHTML = '.CornerButton{margin-bottom:8px !important;}.CornerButtons{bottom:45px !important;}' ;
@@ -384,7 +372,8 @@ function collapsedAnswer(){
384372
385373// 收起当前回答、评论(监听点击事件,点击网页两侧空白处)
386374function collapsedNowAnswer ( selectors ) {
387- if ( menu_collapsedNowAnswer ) {
375+ backToTop ( selectors )
376+ if ( menu_value ( 'menu_collapsedNowAnswer' ) ) {
388377 document . querySelector ( selectors ) . onclick = function ( event ) {
389378 if ( event . target == this ) {
390379 let rightButton = document . querySelector ( '.ContentItem-actions.Sticky.RichContent-actions.is-fixed.is-bottom' )
@@ -433,6 +422,19 @@ function collapsedNowAnswer(selectors){
433422}
434423
435424
425+ // 回到顶部(监听点击事件,鼠标右键点击网页两侧空白处)
426+ function backToTop ( selectors ) {
427+ if ( menu_value ( 'menu_backToTop' ) ) {
428+ document . querySelector ( selectors ) . oncontextmenu = function ( event ) {
429+ if ( event . target == this ) {
430+ event . preventDefault ( ) ;
431+ window . scrollTo ( 0 , 0 )
432+ }
433+ }
434+ }
435+ }
436+
437+
436438//获取元素是否在可视区域
437439function isElementInViewport ( el ) {
438440 let rect = el . getBoundingClientRect ( ) ;
@@ -450,7 +452,7 @@ function isElementInViewport(el) {
450452var postNum ;
451453// 区分问题文章
452454function addTypeTips ( ) {
453- if ( menu_typeTips ) {
455+ if ( menu_value ( ' menu_typeTips' ) ) {
454456 // URL 匹配正则表达式
455457 let patt_zhuanlan = / z h u a n l a n .z h i h u .c o m / ,
456458 patt_question = / q u e s t i o n \/ \d + / ,
@@ -570,7 +572,7 @@ function EventXMLHttpRequest() {
570572
571573
572574 setInterval ( originalPic , 100 ) ; // 默认高清原图
573- if ( menu_directLink ) setInterval ( directLink , 100 ) ; // 默认站外直链
575+ if ( menu_value ( ' menu_directLink' ) ) setInterval ( directLink , 100 ) ; // 默认站外直链
574576
575577
576578 if ( window . location . href . indexOf ( "question" ) > - 1 ) { // 回答页 //
@@ -595,6 +597,8 @@ function EventXMLHttpRequest() {
595597 EventXMLHttpRequest ( ) ; // 区分问题文章
596598 }
597599 } else if ( window . location . href . indexOf ( "zhuanlan" ) > - 1 ) { // 文章 //
600+ backToTop ( "article.Post-Main.Post-NormalMain" )
601+ backToTop ( "div.Post-Sub.Post-NormalSub" )
598602 setInterval ( topTime_zhuanlan , 300 ) ; // 置顶显示时间
599603 } else if ( window . location . href . indexOf ( "column" ) > - 1 ) { // 专栏 //
600604 collapsedAnswer ( ) ; // 一键收起回答
0 commit comments