CSDNBBSCleaner

csdn论坛一些影响阅读的多余元素清理

  1. // ==UserScript==
  2. // @name CSDNBBSCleaner
  3. // @version 0.2
  4. // @description csdn论坛一些影响阅读的多余元素清理
  5. // @author anonymous
  6. // @match https://bbs.csdn.net/forums/*
  7. // @match https://bbs.csdn.net/topics/*
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @grant GM_deleteValue
  11. // @grant GM_registerMenuCommand
  12. // @grant GM_addStyle
  13. // @run-at document-body
  14. // @namespace https://greatest.deepsurf.us/users/200191
  15. // ==/UserScript==
  16.  
  17. (function() {
  18. 'use strict';
  19. var KEY_BLACK_LIST ="CSDNBBSCleaner_Config_BlackList";
  20. var KEY_NOT_MODERATOR ="CSDNBBSCleaner_Config_isNotModerator";
  21.  
  22. //读取配置
  23. //读取黑名单
  24. // GM_deleteValue(KEY_BLACK_LIST);
  25. let blackList = GM_getValue(KEY_BLACK_LIST, null);
  26. if(blackList == null){
  27. blackList = new Array("CSDN推荐","csdngkk","CSDNedu");
  28. GM_setValue(KEY_BLACK_LIST, blackList);
  29. }
  30. //读取是否版主
  31. let isNotModerator = GM_getValue(KEY_NOT_MODERATOR, false);
  32.  
  33. GM_registerMenuCommand("设置", function(){
  34. //添加菜单设置项
  35. GM_addStyle(`#CSDNBBSCleaner_configDialog{position:absolute;left:0px;top:0px;right:0px;bottom:0px}#CSDNBBSCleaner_config_content{position:absolute;top:0px;right:0px;bottom:0px;left:0px;margin:auto;background:#fff;border:1px solid #ced1d9;border-radius:4px;box-shadow:0 0 3px #ced1d9;color:black;word-break:break-all;display:block;width:500px;height:255px;padding:10px 20px;z-index:9999}#CSDNBBSCleaner_config_content h3{border-bottom:1px solid #ced1d9;font-size:1.5em;font-weight:bold}#CSDNBBSCleaner_config_content h4{border-bottom:1px solid #ced1d9;font-size:1.0em;font-weight:bold;margin:10px 0px}#CSDNBBSCleaner_config_moderator{text-align:center;margin:10px 0px 0px 0px;padding:0}#CSDNBBSCleaner_config_content .very-very-important{font-size:20px;font-weight:bold}.CSDNBBSCleaner_button{margin:0px 20px}`);
  36. let div = document.createElement('div');
  37. div.id="CSDNBBSCleaner_configDialog";
  38. div.innerHTML = `<div id="CSDNBBSCleaner_config_content"><h3>CSDNBBSCleaner配置</h3><input id="CSDNBBSCleaner_config_moderator"type="checkbox">我不是CSDN论坛版主</input><h4>黑名单设置</h4><p style="font-size: 12px">不显示黑名单用户的帖子;黑名单之间以“,”分隔</p><textarea id="CSDNBBSCleaner_blackList">${blackList}</textarea><hr><a id="CSDNBBSCleaner_close"class="close CSDNBBSCleaner_button">关闭</a><a id="CSDNBBSCleaner_save"class="close CSDNBBSCleaner_button">保存</a></div>`;
  39. document.body.appendChild(div);
  40. document.getElementById("CSDNBBSCleaner_config_moderator").checked = isNotModerator;
  41.  
  42. //监听关闭按钮
  43. document.getElementById("CSDNBBSCleaner_close").addEventListener('click', function(){
  44. document.getElementById("CSDNBBSCleaner_configDialog").remove();
  45. })
  46.  
  47. //监听保存按钮
  48. document.getElementById("CSDNBBSCleaner_save").addEventListener('click', function(){
  49. //保存修改后的配置
  50. let newBlackList = document.getElementById("CSDNBBSCleaner_blackList").value.split(',');
  51. while(blackList.length>0){blackList.shift();}
  52. newBlackList.forEach(function(newVal, newIndex) {
  53. if(newVal.length>0){
  54. let isContains = false;
  55. blackList.forEach(function(val, index) {
  56. if (val.indexOf(newVal) >= 0) {
  57. isContains = true;
  58. }
  59. });
  60. if(!isContains)
  61. {
  62. blackList.push(newVal);
  63. }
  64. }
  65. });
  66.  
  67. GM_setValue(KEY_BLACK_LIST, blackList);
  68. isNotModerator= document.getElementById("CSDNBBSCleaner_config_moderator").checked;
  69. GM_setValue(KEY_NOT_MODERATOR, isNotModerator);
  70.  
  71. document.getElementById("CSDNBBSCleaner_configDialog").remove();
  72. })
  73. }, null);
  74.  
  75. let url = location.href;
  76. if (url.indexOf('https://bbs.csdn.net/forums/') >= 0) //列表
  77. {
  78. if(isNotModerator){ //移除管理相关的元素
  79. $(".forums_manage > a").remove();
  80. $(".forums_tab_list > li:nth-last-of-type(1)").remove();
  81. }
  82.  
  83. var authorNodes = $(".forums_author");
  84. for (let index = 0; index < authorNodes.length; index++) {
  85. let authorNode = authorNodes[index];
  86. let author = authorNode.getElementsByTagName('a')[0].innerText;
  87. blackList.forEach(function(val, index) {
  88. if (author.indexOf(val) >= 0) {
  89. authorNode.parentNode.remove();
  90. }
  91. });
  92. }
  93. }
  94. else //帖子
  95. {
  96. $(".post_feed_box").remove();
  97.  
  98. if(isNotModerator){ //移除管理相关的元素
  99. $(".manage_toggle").remove();
  100. $(".drop_menu_wrap").remove();
  101. }
  102.  
  103. var topicNodes = $(".mod_topic_wrap");
  104. for (let index = 0; index < topicNodes.length - 1; index++) {
  105. let topicNode = topicNodes[index];
  106. let authorNodes = topicNode.getElementsByClassName('nick_name');
  107. if (authorNodes != null && authorNodes.length > 0) {
  108. let author = authorNodes[0].innerText;
  109. blackList.forEach(function(val, index) {
  110. if (author.indexOf(val) >= 0) {
  111. topicNode.remove();
  112. }
  113. });
  114. }
  115. }
  116. }
  117. })();