// ==UserScript== // @name NiTwit - From Twitter to Nitter and back // @namespace http://tampermonkey.net/ // @version 0.1.8 // @description Show a button on the top to quickly toggle between Twitter and Nitter.net (or any other instance). // @author Ap // @match *://*.twitter.com/* // @match *://*.nitter.net/* // @match *://*.unofficialbird.com/* // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function () { ("use strict"); let alternateDomain = "https://nitter.net"; // MutationObserver watches for changes in the document let observer = new MutationObserver(function() { if (document.querySelector('.nitter-switch')) { return; } const url = window.location.href; let btnColor, btnText, btnTitle; // Set button color, text and title based on the current URL if (url.includes('twitter.com')) { btnColor = '#ff6c60'; btnText = 'N'; btnTitle = 'Switch to Nitter'; } else if (url.includes(alternateDomain)) { btnColor = '#1d9bf0'; btnText = 'T'; btnTitle = 'Switch to Twitter'; } // Create button let btn = document.createElement('button'); btn.classList.add('nitter-switch'); btn.textContent = btnText; btn.title = btnTitle; btn.style.position = 'fixed'; btn.style.top = '10px'; btn.style.right = '10px'; btn.style.zIndex = '9999'; btn.style.backgroundColor = btnColor; btn.style.color = 'white'; btn.style.borderRadius = '50%'; btn.style.width = '30px'; btn.style.height = '30px'; btn.style.border = 'none'; btn.style.cursor = 'pointer'; btn.style.fontSize = '20px'; btn.style.textAlign = 'center'; btn.style.padding = '0'; btn.style.lineHeight = '30px'; btn.style.transition = 'transform .3s ease'; // Add button to page document.body.appendChild(btn); btn.addEventListener('click', function(){ // Always grab the most current URL let newUrl = ''; if (url.includes('twitter.com')) { newUrl = url.replace('https://twitter.com', alternateDomain); } else if (url.includes(alternateDomain)) { newUrl = url.replace(alternateDomain, 'https://twitter.com'); } // Add "pop" animation this.style.transform = 'scale(1.2)'; setTimeout(() => this.style.transform = 'scale(1)', 300); window.location.href = newUrl; }); }); observer.observe(document, { childList: true, subtree: true }); })();