HabrHider

Скрывайте посты от неугодных вам хабов и блогов на главной, новости, партнерские посты и спонсорские материалы!

当前为 2020-08-20 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name HabrHider
  3. // @namespace http://vitka-k.ru
  4. // @version 0.2.4
  5. // @description Скрывайте посты от неугодных вам хабов и блогов на главной, новости, партнерские посты и спонсорские материалы!
  6. // @author Viktor Karpov <vitka-k.ru>
  7. // @copyright 2020, Viktor Karpov
  8. // @license MIT
  9. // @homepageURL https://github.com/viktor02/HabrHider
  10. // @match https://habr.com/ru/top/*
  11. // @match https://habr.com/ru/all/*
  12. // @grant GM_getValue
  13. // @grant GM_setValue
  14. // @grant GM_openInTab
  15. // @grant GM_registerMenuCommand
  16. // @require https://openuserjs.org/src/libs/sizzle/GM_config.js
  17. // ==/UserScript==
  18.  
  19. // Меню со ссылкой на гитхаб
  20. GM_registerMenuCommand('GitHub', () => {
  21. GM_openInTab('https://github.com/viktor02/HabrHider', {active: true, insert: true});
  22. });
  23.  
  24. // Меню с настройками
  25. GM_registerMenuCommand('Settings', () => {
  26. GM_config.open();
  27. });
  28.  
  29. GM_config.init(
  30. {
  31. 'id': 'HabrHider',
  32. 'fields':
  33. {
  34. 'habs':
  35. {
  36. 'label': 'Скрыть хабы',
  37. 'title': 'Настройки',
  38. 'section': ['Настройки',
  39. 'Вводите хабы в формате регулярных выражений, например так: <b>Карьера в IT-индустрии|Блог компании</b> <br>Внимание: пробелов между | и текстом не должно быть!'],
  40. 'type': 'text',
  41. 'default': ''
  42. },
  43. 'hide_news':
  44. {
  45. 'label': 'Скрыть новости',
  46. 'type': 'checkbox',
  47. 'default': false
  48. },
  49. 'hide_sponsors':
  50. {
  51. 'label': 'Скрыть спонсоров',
  52. 'type': 'checkbox',
  53. 'default': false
  54. },
  55. 'hide_best_companies':
  56. {
  57. 'label': 'Скрыть лучшие компании',
  58. 'type': 'checkbox',
  59. 'default': false
  60. },
  61. 'hide_promo':
  62. {
  63. 'label': 'Скрыть все промоматериалы',
  64. 'type': 'checkbox',
  65. 'default': false
  66. },
  67. 'hide_post_body':
  68. {
  69. 'label': 'Показывать только заголовки',
  70. 'type': 'checkbox',
  71. 'default': false
  72. },
  73. 'improve_post_title':
  74. {
  75. 'label': '(рекомендовано только при применении пред.пункта) Уменьшить заголовки',
  76. 'type': 'checkbox',
  77. 'default': false
  78. }
  79. }
  80. });
  81.  
  82.  
  83. let habs = GM_config.get('habs');
  84. let hide_news = GM_config.get('hide_news');
  85. let hide_sponsors = GM_config.get('hide_sponsors');
  86. let hide_best_companies = GM_config.get('hide_best_companies');
  87. let hide_promo = GM_config.get('hide_promo');
  88. let hide_post_body = GM_config.get('hide_post_body');
  89. let improve_post_title = GM_config.get('improve_post_title');
  90.  
  91. (function() {
  92. 'use strict';
  93. // Поиск строки с хабами на главной
  94. let selectors = "ul.post__hubs.inline-list"
  95. let habs_el = document.querySelectorAll(selectors);
  96.  
  97. for (const element of habs_el) {
  98. const elementText = element.innerText || element.textContent;
  99. if (habs === ""){
  100. break
  101. }
  102. else if (elementText.search(habs) !== -1){
  103. element.parentNode.parentNode.style.display = "none";
  104. }
  105. }
  106.  
  107. if (hide_news === true){
  108. // Скрыть новости на главной
  109. let news_el = document.querySelector(".content-list__item_news-block");
  110. news_el.style.display = "none";
  111. }
  112. if (hide_sponsors === true){
  113. // Скрыть колонку со спонсорами
  114. let sponsors_el = document.querySelector("div.default-block_sidebar:nth-child(1)");
  115. sponsors_el.style.display = "none";
  116. }
  117. if (hide_best_companies === true){
  118. // Скрыть колонку с лучшими компаниями
  119. let companies_el = document.querySelector("#companies_rating");
  120. companies_el.style.display = "none";
  121. }
  122. if (hide_promo === true){
  123. // Скрыть 'Курсы', 'Заказы', прочее
  124. let promo_els = document.querySelectorAll(".promo-block");
  125. for (const element of promo_els) {
  126. element.parentNode.style.display = "none";
  127. }
  128. // Скрыть 'Минуточку внимания'
  129. document.querySelector(".default-block").parentNode.style.display = "none";
  130. }
  131. if (hide_post_body === true){
  132. // Скрываем тело поста, оставляя только заголовок
  133. let post_body_els = document.getElementsByClassName("post__body post__body_crop");
  134. for (const element of post_body_els) {
  135. element.style.display = "none";
  136. }
  137. }
  138. if (improve_post_title === true){
  139. // Уменьшаем заголовок
  140. let improve_post_title_els = document.querySelectorAll(".post__title_link");
  141. console.log(improve_post_title_els);
  142. for (const element of improve_post_title_els) {
  143. element.style.fontSize = "20px";
  144. }
  145. }
  146. })();