Advertisement
lkulknmiu

Untitled

Nov 15th, 2022
1,195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         Fck Twitter
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  try to take over the world!
  6. // @author       You
  7. // @match        https://twitter.com/*
  8. // @grant        none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12.     'use strict';
  13.  
  14.     //Prepare the ability to listen to URL-changes. Jeez.
  15.     history.pushState = ( f => function pushState(){
  16.         var ret = f.apply(this, arguments);
  17.         window.dispatchEvent(new Event('pushstate'));
  18.         window.dispatchEvent(new Event('locationchange'));
  19.         return ret;
  20.     })(history.pushState);
  21.  
  22.     history.replaceState = ( f => function replaceState(){
  23.         var ret = f.apply(this, arguments);
  24.         window.dispatchEvent(new Event('replacestate'));
  25.         window.dispatchEvent(new Event('locationchange'));
  26.         return ret;
  27.     })(history.replaceState);
  28.  
  29.     function addGlobalStyle(css) {
  30.         var head, style;
  31.         head = document.getElementsByTagName('head')[0];
  32.         if (!head) { console.log("fuckityfuck"); return; }
  33.         style = document.createElement('style');
  34.         style.type = 'text/css';
  35.         style.innerHTML = css;
  36.         head.appendChild(style);
  37.     }
  38.  
  39.     console.log("attempting to override css.");
  40.     addGlobalStyle('header.r-16y2uox { flex-grow: 0; margin-left: 2em } ');
  41.     //addGlobalStyle('.r-rthrr5 { width: -moz-available; } ');
  42.     addGlobalStyle('.r-1ye8kvj { max-width: 900px !important; }');
  43.     addGlobalStyle('.css-1dbjc4n.r-x572qd.r-1d6w8o1.r-1867qdf.r-1phboty.r-rs99b7.r-1ifxtd0.r-1udh08x {display: none}');
  44.  
  45.  
  46.     function forceScrollbar() {
  47.         if (htmlNode.style.overflowY != "scroll") {
  48.             console.log("forcibly fixing the damn scrollbars");
  49.             htmlNode.style.overflowY = "scroll";
  50.             htmlNode.style.overscrollBehaviorY = "none";
  51.             htmlNode.style.fontSize = "15px";
  52.             htmlNode.marginRight = 0;
  53.         }
  54.     }
  55.  
  56.     const htmlNode = document.getElementsByTagName('html')[0];
  57.     let intCounter = 0;
  58.     const intId = setInterval( () => {
  59.         console.log("interval run: " + intCounter++)
  60.         forceScrollbar();
  61.         if (intCounter > 10) {
  62.             clearInterval(intId);
  63.             setInterval(forceScrollbar, 2000);
  64.         }
  65.     }, 500);
  66.  
  67.     function switchToNewest() {
  68.         console.log("attempting to switch to newest tweets");
  69.         const headlineClass = "css-4rbku5 css-901oao css-1hf3ou5 r-18jsvk2 r-37j5jr r-adyw6z r-b88u0q r-135wba7 r-bcqeeo r-1vvnge1 r-qvutc0"
  70.         const headline = document.getElementsByClassName(headlineClass)[0];
  71.         //document.getElementsByClassName("css-1dbjc4n r-aqfbo4 r-14lw9ot r-j5o65s r-rull8r r-qklmqi r-gtdqiz r-1gn8etr r-1g40b8q")[0]?.firstChild;
  72.  
  73.         //console.log("headline:")
  74.         //console.log(headline)
  75.         //console.log(document.getElementsByClassName(headlineClass));
  76.  
  77.         const openNewestMenuClass = "css-18t94o4 css-1dbjc4n r-1niwhzg r-sdzlij r-1phboty r-rs99b7 r-2yi16 r-1qi8awa r-1ny4l3l r-o7ynqc r-6416eg r-lrvibr";
  78.         const openNewestMenuButton = Array.from(document.getElementsByClassName(openNewestMenuClass))
  79.           .filter((e) => e.attributes['aria-label']?.nodeValue.includes("Timeline") || e.attributes['aria-label']?.nodeValue.includes("Top Tweets"))[0];
  80.  
  81.         //Get NewestMenu via its surrounding element to determine classname at load
  82.         //console.log(document.getElementsByClassName("css-1dbjc4n r-obd0qt r-1pz39u2 r-1777fci r-15ysp7h r-s8bhmr")[1].children[0].className)
  83.         //console.log(document.getElementsByClassName(openNewestMenuClass))
  84.  
  85.         const newestClass = "css-901oao r-18jsvk2 r-37j5jr r-a023e6 r-16dba41 r-rjixqe r-bcqeeo r-qvutc0";
  86.         let newestButton = Array.from(document.getElementsByClassName(newestClass))
  87.           .filter((e) => e.textContent?.includes("Tweets"))[0];
  88.  
  89.         if ((!["Neueste Tweets", "Startseite", "Thread", "Home", "Latest Tweets" ].includes(headline?.textContent) ) || !newestButton?.textContent.includes("Tweets") ) {
  90.             console.log("unexpected contents!");
  91.             console.log("headline:")
  92.             console.log(headline)
  93.             console.log("openMenuBtn:");
  94.             console.log(openNewestMenuButton)
  95.             console.log("newest btn/tab:")
  96.             console.log(newestButton)
  97.         }
  98.  
  99.         if (headline?.textContent == "Startseite" || headline?.textContent == "Home" || newestButton?.classList.contains("r-majxgm")) {
  100.             console.log("Firing clicks.");
  101.             openNewestMenuButton?.click();
  102.  
  103.             const goToNewestButton = document.getElementsByClassName("css-1dbjc4n r-1loqt21 r-18u37iz r-1ny4l3l r-ymttw5 r-1yzf0co r-o7ynqc r-6416eg r-13qz1uu")[0];
  104.             if (goToNewestButton) {
  105.                 console.log("goToNewestButton: " + goToNewestButton.textContent);
  106.                 if (!goToNewestButton.textContent.includes("abheften")){
  107.                     goToNewestButton?.click()
  108.                 } else {
  109.                     openNewestMenuButton?.click();
  110.                 }
  111.             } else {
  112.                 console.warn("newestButton not found");
  113.             }
  114.  
  115.             newestButton = Array.from(document.getElementsByClassName(newestClass)).filter((e) => e.textContent?.includes("Tweets"))[0];
  116.             console.log("newestButton: ");
  117.             console.log(newestButton);
  118.             if (newestButton?.textContent !== "Tweets"){
  119.                 newestButton?.click();
  120.             }
  121.         } else {
  122.             console.log("Already showing the newest tweets (" + headline?.textContent + " ;" + newestButton?.classList + ")");
  123.             console.log(headline)
  124.         }
  125.     }
  126.  
  127.     console.log("starting mode-switch timers");
  128.     setTimeout( switchToNewest, 1200);
  129.     //setTimeout( switchToNewest, 10000);
  130.  
  131.  
  132.     function handleWindowEvent() {
  133.         console.log("window event fired!");
  134.         setTimeout( switchToNewest, 400);
  135.         setTimeout( switchToNewest, 800);
  136.     }
  137.  
  138.     window.addEventListener('locationchange', handleWindowEvent)
  139.  
  140.  
  141. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement