Skip to content

Commit 7211d40

Browse files
committed
新增 [快捷回到顶部](右键两侧空白处) 功能; 优化 脚本菜单相关代码
1 parent 8f446b2 commit 7211d40

1 file changed

Lines changed: 64 additions & 60 deletions

File tree

Zhihu-Enhanced.user.js

Lines changed: 64 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
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
@@ -19,59 +19,37 @@
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+
}
3534
registerMenuCommand();
3635

3736
// 注册脚本菜单
3837
function 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
// 菜单开关
7351
function 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
8573
function 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
// 一键收起回答
367355
function 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
// 收起当前回答、评论(监听点击事件,点击网页两侧空白处)
386374
function 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
//获取元素是否在可视区域
437439
function isElementInViewport(el) {
438440
let rect = el.getBoundingClientRect();
@@ -450,7 +452,7 @@ function isElementInViewport(el) {
450452
var postNum;
451453
// 区分问题文章
452454
function addTypeTips() {
453-
if(menu_typeTips){
455+
if(menu_value('menu_typeTips')){
454456
// URL 匹配正则表达式
455457
let patt_zhuanlan = /zhuanlan.zhihu.com/,
456458
patt_question = /question\/\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

Comments
 (0)