Twitter: view more replies and remove useless sections

View more replies and remove useless sections from twitter

当前为 2023-07-13 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Twitter: view more replies and remove useless sections
  3. // @description View more replies and remove useless sections from twitter
  4. // @author MK
  5. // @namespace max44
  6. // @homepage https://greasyfork.org/en/users/309172-max44
  7. // @match *://twitter.com/*
  8. // @match *://mobile.twitter.com/*
  9. // @icon https://www.google.com/s2/favicons?domain=twitter.com
  10. // @version 2.0.4
  11. // @license MIT
  12. // @require https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
  13. // @require https://openuserjs.org/src/libs/sizzle/GM_config.js
  14. // @grant GM.getValue
  15. // @grant GM.setValue
  16. // @grant GM_registerMenuCommand
  17. // @run-at document-idle
  18. // ==/UserScript==
  19.  
  20. (function () {
  21. 'use strict';
  22.  
  23. //Remove filter from sensitive content and secure scrollbars
  24. var css = `
  25. /*No filter for sensitive content*/
  26. .r-yfv4eo {
  27. filter: none !important;
  28. }
  29.  
  30. /*Make scrollbars always visible*/
  31. html {
  32. overflow: auto !important;
  33. }
  34.  
  35. /*Background for "you might like" tweets*/
  36. .might-like {
  37. opacity: 0.45 !important;
  38. }
  39. `;
  40.  
  41. GM_config.init({
  42. id: 'twitter_view_more_replies',
  43. title: 'Settings for ' + GM_info.script.name,
  44. fields: {
  45. 'fldShowAddReplies': {
  46. 'label': 'Automatically show additional replies, including those that may contain offensive content',
  47. 'labelPos': 'above',
  48. 'type': 'checkbox',
  49. 'default': true
  50. },
  51. 'fldHideTabExplore': {
  52. 'label': 'Hide "Explore" tab in left column',
  53. 'labelPos': 'above',
  54. 'type': 'checkbox',
  55. 'default': false
  56. },
  57. 'fldHideTrends4You': {
  58. 'label': 'Hide "Trends for you" section in timeline and tweet (right column)',
  59. 'labelPos': 'above',
  60. 'type': 'checkbox',
  61. 'default': true
  62. },
  63. 'fldHideRelevantPeople': {
  64. 'label': 'Hide the list of relevant people in tweet replies (right column)',
  65. 'labelPos': 'above',
  66. 'type': 'checkbox',
  67. 'default': false
  68. },
  69. 'fldHideAnalytics': {
  70. 'label': 'Hide tweet analytics in timeline and tweet replies (except the active tweet itself)',
  71. 'labelPos': 'above',
  72. 'type': 'checkbox',
  73. 'default': true
  74. },
  75. 'fldHideSeeMore': {
  76. 'label': 'Hide "see more tweets" dialog if you do not log in',
  77. 'labelPos': 'above',
  78. 'type': 'checkbox',
  79. 'default': true
  80. },
  81. 'fldYouMightLike': {
  82. 'options': ['  Do nothing', '  Make less visible', '  Hide'],
  83. 'label': '<br>"You might like" tweets in the timeline',
  84. 'type': 'radio',
  85. 'default': '  Make less visible'
  86. }
  87. }
  88. })
  89.  
  90. GM_registerMenuCommand('Settings', () => {
  91. GM_config.open();
  92. })
  93.  
  94. const rootCallback = function (mutationsList, observer) {
  95. //==== Hide inline promtps :: timeline
  96. $( "div[data-testid='cellInnerDiv'] > div > div > div > div[data-testid='inlinePrompt']" ).parent().parent().parent().parent().hide(); //any language
  97.  
  98. //==== Hide sensitive content warning :: timeline and tweet
  99. $( "article div:not([role='button']) > div[role='button'][tabindex='0'][style^='backdrop-filter: blur']" ).parent().parent().hide(); //any language
  100.  
  101. //==== Hide tweet analytics :: timeline and tweet replies (except the active tweet itself)
  102. if (GM_config.fields['fldHideAnalytics'].value) {
  103. //Full icon with number of views
  104. $( "div[data-testid='cellInnerDiv'] article:not([tabindex='-1']) a[href$='/analytics'][role='link']" ).parent().hide(); //any language
  105. //Grey svg icon under retweeted tweets
  106. $( "div[data-testid='cellInnerDiv'] article:not([tabindex='-1']) div[aria-label='View Tweet analytics'][role='button']" ).parent().hide(); //en
  107. $( "div[data-testid='cellInnerDiv'] article:not([tabindex='-1']) div[aria-label='Переглянути аналітику твіта'][role='button']" ).parent().hide(); //uk
  108. $( "div[data-testid='cellInnerDiv'] article:not([tabindex='-1']) div[aria-label='查看推文分析'][role='button']" ).parent().hide(); //zh
  109. //$( "div[data-testid='cellInnerDiv'] article:not([tabindex='-1']) div[aria-label='查看推文分析'][role='button']" ).parent().hide(); //zh - traditional - the same text as zh
  110. $( "div[data-testid='cellInnerDiv'] article:not([tabindex='-1']) div[aria-label='Ver estadísticas del Tweet'][role='button']" ).parent().hide(); //es
  111. $( "div[data-testid='cellInnerDiv'] article:not([tabindex='-1']) div[aria-label='Voir les statistiques des Tweets'][role='button']" ).parent().hide(); //fr
  112. $( "div[data-testid='cellInnerDiv'] article:not([tabindex='-1']) div[aria-label='ツイートアナリティクスを表示'][role='button']" ).parent().hide(); //ja
  113. }
  114.  
  115. //==== Hide "see more tweets" dialog if you do not log in :: everywhere
  116. if (GM_config.fields['fldHideSeeMore'].value) {
  117. $( "div[data-testid='sheetDialog'] div > div > span > a[href='/signup']" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //any language
  118. }
  119.  
  120. //==== Mark "You might like" tweets :: timeline only
  121. if (window.location.href.indexOf("twitter.com/home") > 0) {
  122. if (GM_config.fields['fldYouMightLike'].value == '  Make less visible') {
  123. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('You might like')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().addClass("might-like"); //en
  124. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('Вам може сподобатись')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().addClass("might-like"); //uk
  125. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('你可能会喜欢')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().addClass("might-like"); //zh
  126. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('你可能會喜歡')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().addClass("might-like"); //zh-traditional
  127. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('Tal vez te guste')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().addClass("might-like"); //es
  128. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('Vous pourriez aimer')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().addClass("might-like"); //fr
  129. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('あなたへのおすすめ')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().addClass("might-like"); //ja
  130.  
  131. } else if (GM_config.fields['fldYouMightLike'].value == '  Hide') {
  132. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('You might like')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //en
  133. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('Вам може сподобатись')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //uk
  134. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('你可能会喜欢')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //zh
  135. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('你可能會喜歡')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //zh-traditional
  136. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('Tal vez te guste')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //es
  137. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('Vous pourriez aimer')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //fr
  138. $( "div[data-testid='cellInnerDiv'] div[style='-webkit-line-clamp: 2;'][data-testid='socialContext'] > span > span:contains('あなたへのおすすめ')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //ja
  139. }
  140. }
  141.  
  142. //==== Click "Show replies" button :: tweet
  143. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > div > span:contains('Show replies')" ).click(); //en
  144. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > div > span:contains('Показати відповіді')" ).click(); //uk
  145. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > div > span:contains('显示回复')" ).click(); //zh
  146. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > div > span:contains('顯示回覆')" ).click(); //zh-traditional
  147. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > div > span:contains('Mostrar respuestas')" ).click(); //es
  148. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > div > span:contains('Voir les réponses')" ).click(); //fr
  149. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > div > span:contains('返信を表示')" ).click(); //ja
  150.  
  151. //==== Click "Show more replies" button :: tweet
  152. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > span:contains('Show more replies')" ).click(); //en
  153. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > span:contains('Показати більше відповідей')" ).click(); //uk
  154. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > span:contains('显示更多回复')" ).click(); //zh
  155. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > span:contains('顯示更多回覆')" ).click(); //zh-traditional
  156. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > span:contains('Mostrar más respuestas')" ).click(); //es
  157. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > span:contains('Voir plus de réponses')" ).click(); //fr
  158. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'] > div > div > span:contains('返信をさらに表示')" ).click(); //ja
  159.  
  160. //==== Click "Show additional replies, including those that may contain offensive content" button :: tweet
  161. if (GM_config.fields['fldShowAddReplies'].value) {
  162. $( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Show')" ).click(); //en. "not blur" condition - to avoid click on "show sensitive content" button, as it hangs browser with Japanese interface; "not aria-label" - to avoid automatic redirection to communities in browser with Japanese interface
  163. $( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Показати')" ).click(); //uk
  164. $( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('显示')" ).click(); //zh
  165. $( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('顯示')" ).click(); //zh-traditional
  166. $( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Mostrar')" ).click(); //es
  167. $( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Voir')" ).click(); //fr
  168. $( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('表示')" ).click(); //ja
  169. }
  170.  
  171. //==== Click "The following media includes potentially sensitive content" button :: timeline and tweet
  172. $( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('View')" ).click(); //en. "not blur" condition - to avoid click on "show sensitive content" button, as it hangs browser with Japanese interface; "not aria-label" - to avoid automatic redirection to communities in browser with Japanese interface
  173. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Показати')" ).click(); //uk
  174. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('显示')" ).click(); //zh
  175. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('顯示')" ).click(); //zh-traditional
  176. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Mostrar')" ).click(); //es
  177. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Voir')" ).click(); //fr
  178. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('表示')" ).click(); //ja
  179.  
  180. //==== Click "Visibility limited: hateful conduct" :: replies
  181. //https://twitter.com/afinotakingsley/status/1665983992288477184
  182. $( "div[data-testid='primaryColumn'] article a[role='link'] > div > span > span:contains('View')" ).click(); //en
  183.  
  184. //==== Click "Caution: This profile may include potentially sensitive content" button :: profile
  185. //https://twitter.com/Olliewildwings
  186. $( "div[data-testid='primaryColumn'] div[role='button'][tabindex='0'][data-testid='empty_state_button_text']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Yes, view profile')" ).click(); //en. "not blur" condition - to avoid click on "show sensitive content" button, as it hangs browser with Japanese interface; "not aria-label" - to avoid automatic redirection to communities in browser with Japanese interface
  187. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Показати')" ).click(); //uk
  188. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('显示')" ).click(); //zh
  189. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('顯示')" ).click(); //zh-traditional
  190. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Mostrar')" ).click(); //es
  191. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('Voir')" ).click(); //fr
  192. //$( "div[data-testid='primaryColumn'] article div[role='button'][tabindex='0']:not([style^='backdrop-filter: blur']):not([aria-label]) > div > span > span:contains('表示')" ).click(); //ja
  193.  
  194. //==== Hide tab "# Explore" (left column)
  195. if (GM_config.fields['fldHideTabExplore'].value) {
  196. $( "header nav[role='navigation'] > a[href='/explore']" ).hide();
  197. }
  198.  
  199. //==== Hide section "Who to follow" :: timeline (right column)
  200. $( "aside[aria-label='Who to follow']" ).parent().hide(); //en
  201. $( "aside[aria-label='Рекомендовані']" ).parent().hide(); //uk
  202. $( "aside[aria-label='推荐关注']" ).parent().hide(); //zh
  203. $( "aside[aria-label='跟隨誰']" ).parent().hide(); //zh-traditional
  204. $( "aside[aria-label='A quién seguir']" ).parent().hide(); //es
  205. $( "aside[aria-label='Suggestions']" ).parent().hide(); //fr
  206. $( "aside[aria-label='おすすめユーザー']" ).parent().hide(); //ja
  207.  
  208. //==== Hide section "Who to follow" :: user profile
  209. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Who to follow')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //en
  210. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Рекомендації')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //uk
  211. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('推荐关注')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //zh
  212. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('跟隨誰')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //zh-traditional
  213. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('A quién seguir')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //es
  214. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Qui suivre')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //fr
  215. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('おすすめユーザー')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //ja
  216.  
  217. //==== Hide section "Relevant people" :: tweet (right column)
  218. if (GM_config.fields['fldHideRelevantPeople'].value) {
  219. $( "div > aside[aria-label='Relevant people']" ).parent().hide(); //en
  220. $( "div > aside[aria-label='Пов’язані люди']" ).parent().hide(); //uk
  221. $( "div > aside[aria-label='相关用户']" ).parent().hide(); //zh
  222. $( "div > aside[aria-label='相關人士']" ).parent().hide(); //zh-traditional
  223. $( "div > aside[aria-label='Personas relevantes']" ).parent().hide(); //es
  224. $( "div > aside[aria-label='Personnes pertinentes']" ).parent().hide(); //fr
  225. $( "div > aside[aria-label='関連性の高いアカウント']" ).parent().hide(); //ja
  226. }
  227.  
  228. //==== Hide section "Trends for you" :: timeline and tweet (right column)
  229. if (GM_config.fields['fldHideTrends4You'].value) {
  230. $( "section[role='region'] > div[aria-label='Timeline: Trending now']" ).parent().parent().hide(); //en
  231. $( "section[role='region'] > div[aria-label='Стрічка: Актуальне зараз']" ).parent().parent().hide(); //uk
  232. $( "section[role='region'] > div[aria-label='时间线:当前趋势']" ).parent().parent().hide(); //zh
  233. $( "section[role='region'] > div[aria-label='時間軸:流行趨勢']" ).parent().parent().hide(); //zh-traditional
  234. $( "section[role='region'] > div[aria-label='Cronología: Tendencias del momento']" ).parent().parent().hide(); //es
  235. $( "section[role='region'] > div[aria-label='Fil d\'actualités : Tendance actuellement']" ).parent().parent().hide(); //fr
  236. $( "section[role='region'] > div[aria-label='タイムライン: トレンド']" ).parent().parent().hide(); //ja
  237. }
  238.  
  239. //==== Hide section "What's happening" :: timeline (right column)
  240. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('What's happening')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //en
  241. //$( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //uk - not found
  242. //$( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //zh - not found
  243. //$( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //zh-traditional - not found
  244. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Qué está pasando')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //es
  245. //$( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //fr - not found
  246. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('いまどうしてる?')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //ja
  247.  
  248. //==== Hide section "Discover more" :: tweet
  249. $( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Discover more')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide(); //en
  250. $( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Дізнавайтеся більше')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide(); //uk
  251. $( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('发现更多')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide(); //zh
  252. $( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('探索更多')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide(); //zh-traditional
  253. $( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Descubre más')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide(); //es
  254. $( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Découvrez plus')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide(); //fr
  255. $( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('もっと見つける')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide(); //ja
  256.  
  257. //==== Hide section "More tweets" :: tweet - when you do not log in. Seems twitter has only English interface in this case
  258. $( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('More Tweets')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //en
  259. //$( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Дізнавайтеся більше')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //uk
  260. //$( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('发现更多')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //zh
  261. //$( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('探索更多')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //zh-traditional
  262. //$( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Descubre más')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //es
  263. //$( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Découvrez plus')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //fr
  264. //$( "div[data-testid='cellInnerDiv'] h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('もっと見つける')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //ja
  265.  
  266. //==== Hide section "Trends for you" :: explore
  267. $( "div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Trends for you')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //en
  268. $( "div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Тренди для вас')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //uk
  269. $( "div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('你的趋势')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //zh
  270. $( "div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('你的流行趨勢')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //zh-traditional
  271. $( "div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Tendencias para ti')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //es
  272. $( "div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Tendances pour vous')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //fr
  273. //$( "div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //ja - not found
  274.  
  275. //==== Hide message "You seem to be in a new location" :: explore
  276. $( "div > div > div > div > div > h1 > span:contains('You seem to be in a new location')" ).parent().parent().parent().parent().parent().parent().hide(); //en
  277. $( "div > div > div > div > div > h1 > span:contains('Схоже, ви перебуваєте в новому місці')" ).parent().parent().parent().parent().parent().parent().hide(); //uk
  278. $( "div > div > div > div > div > h1 > span:contains('你似乎到了一个新位置')" ).parent().parent().parent().parent().parent().parent().hide(); //zh
  279. $( "div > div > div > div > div > h1 > span:contains('你似乎位於新的位置')" ).parent().parent().parent().parent().parent().parent().hide(); //zh-traditional
  280. $( "div > div > div > div > div > h1 > span:contains('Parece que estás en una nueva ubicación')" ).parent().parent().parent().parent().parent().parent().hide(); //es
  281. $( "div > div > div > div > div > h1 > span:contains('Vous semblez vous trouver dans un nouveau lieu')" ).parent().parent().parent().parent().parent().parent().hide(); //fr
  282. //$( "div > div > div > div > div > h1 > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide(); //ja - not found
  283.  
  284. //==== Hide section "Topics to follow" :: user profile
  285. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Topic to follow')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //en
  286. //$( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //uk - not found
  287. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('要关注的话题')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //zh
  288. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('可跟隨的主題')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //zh-traditional
  289. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Temas para seguir')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //es
  290. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Sujets à suivre')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //fr
  291. $( "div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('おすすめトピック')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //ja
  292.  
  293. //==== Hide section "Suggested topics" :: more -> topics
  294. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('Suggested Topics')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //en
  295. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //uk - not found
  296. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //zh - not found
  297. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //zh-traditional - not found
  298. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('Temas sugeridos')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //es
  299. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('Sujets suggérés')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //fr
  300. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('おすすめトピック')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //ja
  301.  
  302. //==== Hide section "Discover new Lists" :: lists
  303. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('Discover new Lists')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //en
  304. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //uk - not found
  305. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //zh - not found
  306. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //zh-traditional - not found
  307. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('Descubre Listas nuevas')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //es
  308. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //fr - not found
  309. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('新しいリストを見つける')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //ja
  310.  
  311. //==== Hide section "Expand your timeline with Topics" :: timeline
  312. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('Expand your timeline with Topics')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //en
  313. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //uk - not found
  314. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //zh - not found
  315. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //zh-traditional - not found
  316. $( "div[style='-webkit-line-clamp: 3;'] > span:contains('Amplía tu cronología con Temas')" ).parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide().next().hide().next().hide(); //es
  317. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //fr - not found
  318. //$( "div[style='-webkit-line-clamp: 3;'] > span:contains('???')" ).parent().parent().parent().parent().parent().parent().hide().next().hide().next().hide().next().hide(); //ja - not found
  319.  
  320. //==== Hide message "Concerned about your digital security?" :: timeline
  321. $( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('Concerned about your digital security?')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //en
  322. $( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('Є сумніви щодо цифрової безпеки?')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //uk
  323. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //zh - not found
  324. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //zh-traditional - not found
  325. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //es - not found
  326. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //fr - not found
  327. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //ja - not found
  328.  
  329. //==== Hide button "Open app" :: tweet on mobile browser
  330. $( "div[aria-label='Open app']" ).parent().hide(); //en
  331. $( "div[aria-label='Відкрити додаток']" ).parent().hide(); //uk
  332. $( "div[aria-label='打开应用']" ).parent().hide(); //zh
  333. $( "div[aria-label='開啟應用程式']" ).parent().hide(); //zh-traditional
  334. $( "div[aria-label='Abrir aplicación']" ).parent().hide(); //es
  335. $( "div[aria-label='Ouvrir l\'application']" ).parent().hide(); //fr
  336. //$( "div[aria-label='???']" ).parent().hide(); //ja - not found
  337.  
  338. //==== Hide button "Get the app" :: timeline on mobile browser
  339. $( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('Get the app')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //en
  340. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //uk - not found
  341. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //zh - not found
  342. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //zh-traditional - not found
  343. //$( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('???')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //es - not found
  344. $( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('Ouvrir l\'application')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //fr
  345. $( "div[data-testid='inlinePrompt'] > h1[role='heading'] > span > span > span:contains('アプリを開く')" ).parent().parent().parent().parent().parent().parent().parent().hide().next().hide(); //ja
  346.  
  347. //==== Hide button "Get the app" :: tweet on mobile browser
  348. $( "div > div > div[role='button'][aria-label='Get the app']" ).parent().parent().hide(); //en
  349. //$( "div > div > div[role='button'][aria-label='???']" ).parent().parent().hide(); //uk - not found
  350. //$( "div > div > div[role='button'][aria-label='???']" ).parent().parent().hide(); //zh - not found
  351. //$( "div > div > div[role='button'][aria-label='???']" ).parent().parent().hide(); //zh-traditional - not found
  352. //$( "div > div > div[role='button'][aria-label='???']" ).parent().parent().hide(); //es - not found
  353. $( "div > div > div[role='button'][aria-label='Ouvrir l\'application']" ).parent().parent().hide(); //fr
  354. $( "div > div > div[role='button'][aria-label='アプリを開く']" ).parent().parent().hide(); //ja
  355.  
  356. //==== Hide tweet "Promoted" :: timeline
  357. $( "div[data-testid='placementTracking'] > div > article > div > div > div > div > div > div > div > div > div > span:contains('Promoted')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //en
  358. $( "div[data-testid='placementTracking'] > div > article > div > div > div > div > div > div > div > div > div > span:contains('Реклама')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //uk
  359. $( "div[data-testid='placementTracking'] > div > article > div > div > div > div > div > div > div > div > div > span:contains('推荐')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //zh
  360. $( "div[data-testid='placementTracking'] > div > article > div > div > div > div > div > div > div > div > div > span:contains('推廣')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //zh-traditional
  361. $( "div[data-testid='placementTracking'] > div > article > div > div > div > div > div > div > div > div > div > span:contains('Promocionado')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //es
  362. $( "div[data-testid='placementTracking'] > div > article > div > div > div > div > div > div > div > div > div > span:contains('Sponsorisé')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //fr - not found
  363. $( "div[data-testid='placementTracking'] > div > article > div > div > div > div > div > div > div > div > div > span:contains('プロモーション')" ).parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().parent().hide(); //ja - not found
  364.  
  365. //==== Hide tweet "Promoted Tweet" :: user profile
  366. $( "div[data-testid='cellInnerDiv'] > div > div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Promoted Tweet')" ).parent().parent().parent().parent().parent().parent().hide(); //en
  367. $( "div[data-testid='cellInnerDiv'] > div > div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Рекламований твіт')" ).parent().parent().parent().parent().parent().parent().hide(); //uk
  368. $( "div[data-testid='cellInnerDiv'] > div > div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('推广推文')" ).parent().parent().parent().parent().parent().parent().hide(); //zh
  369. $( "div[data-testid='cellInnerDiv'] > div > div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('推廣推文')" ).parent().parent().parent().parent().parent().parent().hide(); //zh-traditional
  370. $( "div[data-testid='cellInnerDiv'] > div > div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Tweet promocionado')" ).parent().parent().parent().parent().parent().parent().hide(); //es
  371. $( "div[data-testid='cellInnerDiv'] > div > div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('Tweet sponsorisé')" ).parent().parent().parent().parent().parent().parent().hide(); //fr
  372. $( "div[data-testid='cellInnerDiv'] > div > div > div > h2 > div[style='-webkit-line-clamp: 3;'] > span:contains('プロモツイート')" ).parent().parent().parent().parent().parent().parent().hide(); //ja - not found
  373.  
  374. };
  375.  
  376. const rootNode = document.querySelector("#react-root");
  377. if (rootNode != null) {
  378. const rootObserver = new MutationObserver(rootCallback);
  379. rootObserver.observe(rootNode, {childList: true, subtree: true, attributes: false, characterData: false});
  380. }
  381.  
  382. if (typeof GM_addStyle != 'undefined') {
  383. GM_addStyle(css);
  384. } else if (typeof PRO_addStyle != 'undefined') {
  385. PRO_addStyle(css);
  386. } else if (typeof addStyle != 'undefined') {
  387. addStyle(css);
  388. } else {
  389. var node = document.createElement('style');
  390. node.type = 'text/css';
  391. node.appendChild(document.createTextNode(css));
  392. document.documentElement.appendChild(node);
  393. }
  394.  
  395. })();