NiTwit - From Twitter to Nitter and back

Injects a button on the top to quickly toggle between Twitter and Nitter.net (or any other instance).

目前为 2023-08-11 提交的版本。查看 最新版本

// ==UserScript==
// @name         NiTwit - From Twitter to Nitter and back
// @namespace    http://tampermonkey.net/
// @version      0.1.11
// @description  Injects 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
// ==/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 = "24px";
		btn.style.height = "24px";
		btn.style.border = "none";
		btn.style.cursor = "pointer";
		btn.style.fontFamily = "-apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif";
		btn.style.fontSize = "14px";
		btn.style.fontWeight = "700";
		btn.style.textAlign = "center";
		btn.style.padding = "0";
		btn.style.lineHeight = "24px";
		btn.style.transition = "transform .15s ease";

		// Add button to page
		document.body.appendChild(btn);

		btn.addEventListener("click", function () {
			// Always grab the most current URL
			let url = window.location.href;
			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)"), 150);

			window.location.href = newUrl;
		});
	});

	observer.observe(document, { childList: true, subtree: true });
})();