Twitter spam hider

Hides "who to follow" and "trending now" spam on Twitter's web app by scanning the page for it every second.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name     Twitter spam hider
// @description Hides "who to follow" and "trending now" spam on Twitter's web app by scanning the page for it every second.
// @author   Gercomsci
// @namespace  https://greasyfork.org/de/users/771568-gercomsci
// @version  1.0 beta (2022-02-09)
// @include  https://*.twitter.com/*
// @include  https://twitter.com/*
// @include  https://mobile.twitter.com/*
// (redundant URLs to ensure for compatibility)
// @grant    none
// @license  GPL 3.0
// ==/UserScript==

function hideTwitterSpam() {
// Check if element exists, to prevent an error from terminating the loop.
if ( document.querySelectorAll('[aria-label="Who to follow"]')[0] /* Check if exists */
  && document.querySelectorAll('[aria-label="Who to follow"]')[0].parentNode.style.display != 'none' ) /* Check if not already hidden to prevent repeated console output */ {
     console.log ("Hiding \"Who to follow\" spam")
     document.querySelectorAll('[aria-label="Who to follow"]')[0].parentNode.style.display = 'none'; // hide
  }

if ( document.querySelectorAll('[aria-label="Timeline: Trending now"]')[0] /* Check if exists */
  && document.querySelectorAll('[aria-label="Timeline: Trending now"]')[0].parentNode.style.display != 'none' )  /* Check if not already hidden to prevent repeated console output */ {
     console.log ("Hiding \"Trends for you\" spam")
     document.querySelectorAll('[aria-label="Timeline: Trending now"]')[0].parentNode.style.display = 'none'; // hide
  }
}

hideTwitterSpamInterval = setInterval(hideTwitterSpam, 1000); // Searches for spam and hides it every second. 

// This is the best possible solution on a ReactJS-based site, since it uses randomized CSS class names, meaning the only way to hide spam selectively is to make JavaScript code locate it on the page continuously, whack-a-mole style.