Greasy Fork is available in English.
Replace x.com links with embedded tweets
// ==UserScript== // @name X.com to Twitter.com Embedded Tweet in Voz // @namespace Embedded Tweet in Voz // @version 2.1 // @description Replace x.com links with embedded tweets // @icon https://www.google.com/s2/favicons?sz=64&domain=voz.vn // @author kylyte // @match https://voz.vn/t/* // @match https://voz.vn/conversations/* // @match https://voz.vn/whats-new/profile-posts/* // @match https://voz.vn/u/* // @run-at document-idle // @license GPL-3.0 // ==/UserScript== (function() { 'use strict'; function addTwitterWidgetsScript() { if (!document.querySelector('script[src="//platform.twitter.com/widgets.js"]')) { const script = document.createElement('script'); script.src = "//platform.twitter.com/widgets.js"; script.charset = "utf-8"; document.head.appendChild(script); } } function replaceDivWithBlockquote() { const divs = document.querySelectorAll('div.bbCodeBlock--unfurl'); divs.forEach(div => { const anchor = div.querySelector('a[href^="https://x.com"]'); if (anchor) { const href = anchor.getAttribute('href'); const postIdMatch = href.match(/status\/(\d+)/); if (postIdMatch && postIdMatch[1]) { const postId = postIdMatch[1]; const blockquote = document.createElement('blockquote'); blockquote.className = "twitter-tweet"; const link = document.createElement('a'); link.href = `https://twitter.com/twitterapi/status/${postId}`; link.target = "_blank"; link.textContent = `https://twitter.com/twitterapi/status/${postId}`; blockquote.appendChild(link); div.parentNode.replaceChild(blockquote, div); addTwitterWidgetsScript(); } } }); } window.addEventListener('load', replaceDivWithBlockquote); const observer = new MutationObserver(replaceDivWithBlockquote); observer.observe(document.body, { childList: true, subtree: true }); })();