diff --git a/Zhihu-Enhanced.user.js b/Zhihu-Enhanced.user.js index 22301e7..c84dbe5 100644 --- a/Zhihu-Enhanced.user.js +++ b/Zhihu-Enhanced.user.js @@ -1,8 +1,8 @@ // ==UserScript== // @name 知乎增强 -// @version 1.2.5 +// @version 1.2.6 // @author X.I.U -// @description 移除登录弹窗、一键收起回答、置顶显示时间、显示问题时间、区分问题文章、默认高清原图、默认站外直链 +// @description 移除登录弹窗、一键收起回答、收起当前回答(点击空白处)、置顶显示时间、显示问题时间、区分问题文章、默认高清原图、默认站外直链 // @match *://www.zhihu.com/* // @match *://zhuanlan.zhihu.com/* // @icon https://static.zhihu.com/heifetz/favicon.ico @@ -19,12 +19,14 @@ // ==/UserScript== var menu_collapsedAnswer = GM_getValue('xiu2_menu_collapsedAnswer'), + menu_collapsedNowAnswer = GM_getValue('xiu2_menu_collapsedNowAnswer'), menu_publishTop = GM_getValue('xiu2_menu_publishTop'), menu_allTime = GM_getValue('xiu2_menu_allTime'), menu_typeTips = GM_getValue('xiu2_menu_typeTips'), menu_directLink = GM_getValue('xiu2_menu_directLink'), - menu_collapsedAnswer_ID, menu_publishTop_ID, menu_typeTips_ID, menu_allTime_ID, menu_directLink_ID, menu_feedBack_ID; + menu_collapsedAnswer_ID, menu_collapsedNowAnswer_ID, menu_publishTop_ID, menu_typeTips_ID, menu_allTime_ID, menu_directLink_ID, menu_feedBack_ID; if (menu_collapsedAnswer == null){menu_collapsedAnswer = true; GM_setValue('xiu2_menu_collapsedAnswer', menu_collapsedAnswer)}; +if (menu_collapsedNowAnswer == null){menu_collapsedNowAnswer = true; GM_setValue('xiu2_menu_collapsedNowAnswer', menu_collapsedNowAnswer)}; if (menu_publishTop == null){menu_publishTop = true; GM_setValue('xiu2_menu_publishTop', menu_publishTop)}; if (menu_typeTips == null){menu_typeTips = true; GM_setValue('xiu2_menu_typeTips', menu_typeTips)}; if (menu_allTime == null){menu_allTime = true; GM_setValue('xiu2_menu_allTime', menu_allTime)}; @@ -33,14 +35,16 @@ registerMenuCommand(); // 注册脚本菜单 function registerMenuCommand() { - var menu_collapsedAnswer_, menu_publishTop_, menu_typeTips_, menu_allTime_, menu_directLink_; + var menu_collapsedAnswer_, menu_collapsedNowAnswer_, menu_publishTop_, menu_typeTips_, menu_allTime_, menu_directLink_; if (menu_feedBack_ID){ // 如果反馈菜单ID不是 null,则删除所有脚本菜单 GM_unregisterMenuCommand(menu_collapsedAnswer_ID); + GM_unregisterMenuCommand(menu_collapsedNowAnswer_ID); GM_unregisterMenuCommand(menu_publishTop_ID); GM_unregisterMenuCommand(menu_typeTips_ID); GM_unregisterMenuCommand(menu_directLink_ID); GM_unregisterMenuCommand(menu_feedBack_ID); menu_collapsedAnswer = GM_getValue('xiu2_menu_collapsedAnswer'); + menu_collapsedNowAnswer = GM_getValue('xiu2_menu_collapsedNowAnswer'); menu_publishTop = GM_getValue('xiu2_menu_publishTop'); menu_allTime = GM_getValue('xiu2_menu_allTime'); menu_typeTips = GM_getValue('xiu2_menu_typeTips'); @@ -48,12 +52,14 @@ function registerMenuCommand() { } if (menu_collapsedAnswer){menu_collapsedAnswer_ = "√";}else{menu_collapsedAnswer_ = "×";} + if (menu_collapsedNowAnswer){menu_collapsedNowAnswer_ = "√";}else{menu_collapsedNowAnswer_ = "×";} if (menu_publishTop){menu_publishTop_ = "√";}else{menu_publishTop_ = "×";} if (menu_typeTips){menu_typeTips_ = "√";}else{menu_typeTips_ = "×";} if (menu_allTime){menu_allTime_ = "√";}else{menu_allTime_ = "×";} if (menu_directLink){menu_directLink_ = "√";}else{menu_directLink_ = "×";} menu_collapsedAnswer_ID = GM_registerMenuCommand(`[ ${menu_collapsedAnswer_} ] 一键收起回答`, function(){menu_switch(menu_collapsedAnswer,'xiu2_menu_collapsedAnswer','一键收起回答')}); + menu_collapsedNowAnswer_ID = GM_registerMenuCommand(`[ ${menu_collapsedNowAnswer_} ] 收起当前回答(点击空白处)`, function(){menu_switch(menu_collapsedNowAnswer,'xiu2_menu_collapsedNowAnswer','收起当前回答')}); menu_publishTop_ID = GM_registerMenuCommand(`[ ${menu_publishTop_} ] 置顶显示时间`, function(){menu_switch(menu_publishTop,'xiu2_menu_publishTop','置顶显示时间')}); menu_publishTop_ID = GM_registerMenuCommand(`[ ${menu_allTime_} ] 完整显示时间`, function(){menu_switch(menu_allTime,'xiu2_menu_allTime','完整显示时间')}); menu_typeTips_ID = GM_registerMenuCommand(`[ ${menu_typeTips_} ] 区分问题文章`, function(){menu_switch(menu_typeTips,'xiu2_menu_typeTips','区分问题文章')}); @@ -294,7 +300,7 @@ function directLink () { else if ($(this).attr("href").indexOf("link.zhihu.com/?target=") > -1) { external_href = $(this).attr("href"); new_href = external_href.substring(external_href = $(this).attr("href").indexOf("link.zhihu.com/?target=") + "link.zhihu.com/?target=".length); - console.log(`${new_href}`) + //console.log(`${new_href}`) $(this).attr("href", decodeURIComponent(new_href)); } else { @@ -360,8 +366,8 @@ function originalPic(){ // 一键收起回答 function collapsedAnswer(){ if(menu_collapsedAnswer){ - var button_Add = `` - var style_Add = document.createElement('style'); + let button_Add = `` + let style_Add = document.createElement('style'); style_Add.innerHTML = '.CornerButton{margin-bottom:8px !important;}.CornerButtons{bottom:45px !important;}'; document.head.appendChild(style_Add); $(".CornerAnimayedFlex").prepend(button_Add); @@ -375,21 +381,43 @@ function collapsedAnswer(){ } } +// 收起当前回答(收起回答) +function collapsedNowAnswer_2(){ + let rightButton = document.querySelector('.ContentItem-actions.Sticky.RichContent-actions.is-fixed.is-bottom') + if(rightButton) { + rightButton = rightButton.querySelector('.ContentItem-rightButton') + if(rightButton && rightButton.attributes[0].name === "data-zop-retract-question") { + rightButton.click(); + } + } +} + +// 收起当前回答(监听点击事件) +function collapsedNowAnswer(selectors){ + if(menu_collapsedNowAnswer){ + document.querySelector(selectors).onclick = function(event){ + if (event.target==this) { + collapsedNowAnswer_2(); + } + } + } +} + var postNum; // 区分问题文章 function addTypeTips() { if(menu_typeTips){ // URL 匹配正则表达式 - var patt_zhuanlan = /zhuanlan.zhihu.com/, + let patt_zhuanlan = /zhuanlan.zhihu.com/, patt_question = /question\/\d+/, patt_question_answer = /answer\/\d+/, patt_video = /\/zvideo\//, patt_tip = /zhihu_e_tips/ - var postList = document.querySelectorAll('h2.ContentItem-title a'); + let postList = document.querySelectorAll('h2.ContentItem-title a'); postNum = document.querySelectorAll('small.zhihu_e_tips'); //console.log(`${postList.length} ${postNum.length}`) if (postList.length > postNum.length){ - for(var num = postNum.length;num文章 ` + postList[num].innerHTML @@ -477,36 +505,48 @@ function EventXMLHttpRequest() { } }) + setInterval(originalPic,100); // 默认高清原图 if(menu_directLink) setInterval(directLink, 100); // 默认站外直链 - // 每个页面对应的功能函数 - if(window.location.href.indexOf("question") > -1){ // 回答页 // + + if(window.location.href.indexOf("question") > -1){ // 回答页 // if(window.location.href.indexOf("waiting") == -1){ collapsedAnswer(); // 一键收起回答 + collapsedNowAnswer(".QuestionPage"); + collapsedNowAnswer(".Question-main"); } setInterval(topTime_question, 300); // 置顶显示时间 - }else if(window.location.href.indexOf("search") > -1){ // 搜索结果页 // + }else if(window.location.href.indexOf("search") > -1){ // 搜索结果页 // collapsedAnswer(); // 一键收起回答 + collapsedNowAnswer("main div"); + collapsedNowAnswer(".Search-container"); setInterval(topTime_search, 300); // 置顶显示时间 EventXMLHttpRequest(); // 区分问题文章 - }else if(window.location.href.indexOf("topic") > -1){ // 话题页 // + }else if(window.location.href.indexOf("topic") > -1){ // 话题页 // if(window.location.href.indexOf("unanswered") == -1){ collapsedAnswer(); // 一键收起回答 + collapsedNowAnswer("main.App-main"); + collapsedNowAnswer(".ContentLayout"); setInterval(topTime_search, 300); // 置顶显示时间 EventXMLHttpRequest(); // 区分问题文章 } - }else if(window.location.href.indexOf("zhuanlan") > -1){ // 文章 // + }else if(window.location.href.indexOf("zhuanlan") > -1){ // 文章 // removeLogin(); // 移除登录弹窗 setInterval(topTime_zhuanlan, 300); // 置顶显示时间 - }else if(window.location.href.indexOf("column") > -1){ // 专栏 // + }else if(window.location.href.indexOf("column") > -1){ // 专栏 // collapsedAnswer(); // 一键收起回答 + collapsedNowAnswer("main div"); setInterval(topTime_zhuanlan, 300); // 置顶显示时间 }else if(window.location.href.indexOf("people") > -1 || window.location.href.indexOf("org") > -1){ // 用户主页 // collapsedAnswer(); // 一键收起回答 + collapsedNowAnswer("main div"); + collapsedNowAnswer(".Profile-main"); setInterval(topTime_people, 300); // 置顶显示时间 - }else{ // 首页 // + }else{ // 首页 // collapsedAnswer(); // 一键收起回答 + collapsedNowAnswer("main div"); + collapsedNowAnswer(".Topstory-container"); setInterval(topTime_index, 300); // 置顶显示时间 EventXMLHttpRequest(); // 区分问题文章 }