// ==UserScript== // @name Get Twitter Icons Back // @namespace Pionxzh // @version 1.0.1 // @author Pionxzh // @description Restore the old icon on Twitter // @license MIT // @icon https://abs.twimg.com/favicons/twitter.2.ico // @match https://twitter.com/* // @match https://x.com/* // @downloadURL none // ==/UserScript== (function () { 'use strict'; var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var sentinel_umd = { exports: {} }; (function(module, exports) { (function(root, factory) { { module.exports = factory(); } })(commonjsGlobal, function() { var isArray = Array.isArray, selectorToAnimationMap = {}, animationCallbacks = {}, styleEl, styleSheet, cssRules; return { /** * Add watcher. * @param {array} cssSelectors - List of CSS selector strings * @param {Function} callback - The callback function */ on: function(cssSelectors, callback) { if (!callback) return; if (!styleEl) { var doc = document, head = doc.head; doc.addEventListener("animationstart", function(ev, callbacks, l, i) { callbacks = animationCallbacks[ev.animationName]; if (!callbacks) return; ev.stopImmediatePropagation(); l = callbacks.length; for (i = 0; i < l; i++) callbacks[i](ev.target); }, true); styleEl = doc.createElement("style"); head.append(styleEl); styleSheet = styleEl.sheet; cssRules = styleSheet.cssRules; } (isArray(cssSelectors) ? cssSelectors : [cssSelectors]).map(function(selector, animId, isCustomName) { animId = selectorToAnimationMap[selector]; if (!animId) { isCustomName = selector[0] == "!"; selectorToAnimationMap[selector] = animId = isCustomName ? selector.slice(1) : "sentinel-" + Math.random().toString(16).slice(2); cssRules[styleSheet.insertRule( "@keyframes " + animId + "{from{transform:none;}to{transform:none;}}", cssRules.length )]._id = selector; if (!isCustomName) { cssRules[styleSheet.insertRule( selector + "{animation-duration:0.0001s;animation-name:" + animId + ";}", cssRules.length )]._id = selector; } selectorToAnimationMap[selector] = animId; } (animationCallbacks[animId] = animationCallbacks[animId] || []).push(callback); }); }, /** * Remove watcher. * @param {array} cssSelectors - List of CSS selector strings * @param {Function} callback - The callback function (optional) */ off: function(cssSelectors, callback) { (isArray(cssSelectors) ? cssSelectors : [cssSelectors]).map(function(selector, animId, callbackList, i) { if (!(animId = selectorToAnimationMap[selector])) return; callbackList = animationCallbacks[animId]; if (callback) { i = callbackList.length; while (i--) { if (callbackList[i] === callback) callbackList.splice(i, 1); } } else { callbackList = []; } if (callbackList.length) return; i = cssRules.length; while (i--) { if (cssRules[i]._id == selector) styleSheet.deleteRule(i); } delete selectorToAnimationMap[selector]; delete animationCallbacks[animId]; }); }, /** * Reset watchers and cache */ reset: function() { selectorToAnimationMap = {}; animationCallbacks = {}; if (styleEl) styleEl.parentNode.removeChild(styleEl); styleEl = 0; } }; }); })(sentinel_umd); var sentinel_umdExports = sentinel_umd.exports; const sentinel = /* @__PURE__ */ getDefaultExportFromCjs(sentinel_umdExports); function onloadSafe(fn) { if (document.readyState === "complete") { fn(); } else { window.addEventListener("load", fn); } } main(); const twitterIconSvg = ''; function main() { const sheet = new CSSStyleSheet(); sheet.replaceSync(` .old-twitter-icon { height: 1.75rem; width: 20px; max-width: 100%; fill: currentcolor; color: rgba(29,155,240,1.00); vertical-align: text-bottom; position: relative; -ms-flex-positive: 1; -webkit-box-flex: 1; -webkit-flex-grow: 1; flex-grow: 1; -moz-user-select: none; -ms-user-select: none; -webkit-user-select: none; user-select: none; display: inline-block; }`); document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet]; onloadSafe(() => { const placeHolderIconSelector = "#placeholder > svg"; sentinel.on(placeHolderIconSelector, (svg) => { console.log("place", svg); svg.innerHTML = twitterIconSvg; sentinel.off(placeHolderIconSelector); }); const selector = "h1 a[href='/home'] svg"; sentinel.on(selector, (svg) => { console.log("svg", svg); svg.innerHTML = twitterIconSvg; sentinel.off(selector); }); }); } })();