🏠 Home 

X.com Xtreme Xperience

6/4/2024, 10:48:37 AM


Install this script?
// ==UserScript==
// @name        X.com Xtreme Xperience
// @namespace   Violentmonkey Scripts
// @match       https://x.com/*
// @grant       none
// @version     3.0
// @author      whey.party
// @description 6/4/2024, 10:48:37 AM
// @license     MIT
// ==/UserScript==
(function() {
'use strict';
// Create a link element for the font import
var fontLink = document.createElement('link');
fontLink.rel = 'stylesheet';
fontLink.href = 'https://fonts.googleapis.com/css2?family=Spline+Sans+Mono:ital,wght@0,300..700;1,300..700&display=swap';
// Append the link element to the document head
document.head.appendChild(fontLink);
// Create a style element to override border-radius
var style = document.createElement('style');
style.type = 'text/css';
style.appendChild(document.createTextNode(`
* {
font-family: 'Spline Sans Mono', monospace !important;
border-radius: 0 !important;
-webkit-border-radius: 0 !important;
-moz-border-radius: 0 !important;
-ms-border-radius: 0 !important;
-o-border-radius: 0 !important;
}
.r-1kqtdi0 {
border-color: rgb(90 90 90) !important;
}
.r-1igl3o0 {
border-bottom-color: rgb(90 90 90) !important;
}
.r-45ll9u.r-1v2oles{
border: 1px solid rgb(90 90 90) !important;
}
.r-2sztyj{
border-top-color: rgb(90 90 90) !important;
}
.r-1vtznih{
background-color: grey !important;
}
`));
// Append the style element to the document head
document.head.appendChild(style);
// Function to convert RGB to a comparable string
function rgbToString(r, g, b) {
return `rgb(${r}, ${g}, ${b})`;
}
// Function to replace background and text color
function replaceColors(element) {
// Define the target colors
const targetBgColor = rgbToString(29, 155, 240);
const targetTextColor = rgbToString(29, 155, 240);
const computedStyle = getComputedStyle(element);
// Replace background color and set text color to black
if (computedStyle.backgroundColor === targetBgColor || computedStyle.background === targetBgColor) {
element.style.backgroundColor = 'white';
element.style.color = 'black';
// Apply the text color to all child elements recursively
element.querySelectorAll('*').forEach(child => {
child.style.color = 'black';
});
}
// Replace text color with grey and add underline if it's a link
if (computedStyle.color === targetTextColor) {
element.style.color = 'grey';
if (element.tagName.toLowerCase() === 'a') {
element.style.textDecoration = 'underline';
}
}
}
// Function to replace colors in all elements
function processAllElements() {
// Get all elements in the document
const allElements = document.querySelectorAll('*');
// Iterate over all elements to find and replace the target colors
allElements.forEach(replaceColors);
}
// Function to check for the element with class public-DraftEditorPlaceholder-inner and set its inner text
function checkForBlazeYourGlory() {
const placeholderElement = document.querySelector('.public-DraftEditorPlaceholder-inner');
if (placeholderElement) {
placeholderElement.innerText = "𝔹laze your glory!";
}
}
// Define the replacement SVG content
var replacementSVGReply = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M11 20L1 12l10-8v5c5.523 0 10 4.477 10 10c0 .273-.01.543-.032.81a9.002 9.002 0 0 0-7.655-4.805L13 15h-2zm-2-7h4.034l.347.007c1.285.043 2.524.31 3.676.766A7.982 7.982 0 0 0 11 11H9V8.161L4.202 12L9 15.839z"></path></svg>';
var replacementSVGBoost = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M12 23a7.5 7.5 0 0 0 7.5-7.5c0-.866-.23-1.697-.5-2.47c-1.667 1.647-2.933 2.47-3.8 2.47c3.995-7 1.8-10-4.2-14c.5 5-2.796 7.274-4.138 8.537A7.5 7.5 0 0 0 12 23m.71-17.765c3.241 2.75 3.257 4.887.753 9.274c-.761 1.333.202 2.991 1.737 2.991c.688 0 1.384-.2 2.119-.595a5.5 5.5 0 1 1-9.087-5.412c.126-.118.765-.685.793-.71c.424-.38.773-.717 1.118-1.086c1.23-1.318 2.114-2.78 2.566-4.462"></path></svg>'
var replacementSVGLike = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M14.6 8H21a2 2 0 0 1 2 2v2.105c0 .26-.051.52-.15.761l-3.095 7.515a1 1 0 0 1-.925.62H2a1 1 0 0 1-1-1V10a1 1 0 0 1 1-1h3.482a1 1 0 0 0 .817-.424L11.752.851a.5.5 0 0 1 .632-.159l1.814.908a2.5 2.5 0 0 1 1.305 2.852zM7 10.588V19h11.16L21 12.105V10h-6.4a2 2 0 0 1-1.938-2.493l.903-3.548a.5.5 0 0 0-.261-.57l-.661-.331l-4.71 6.672c-.25.354-.57.645-.933.858M5 11H3v8h2z"></path></svg>'
var replacementSVGUnlike = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M2 9h3v12H2a1 1 0 0 1-1-1V10a1 1 0 0 1 1-1m5.293-1.293l6.4-6.4a.5.5 0 0 1 .654-.047l.853.64a1.5 1.5 0 0 1 .553 1.57L14.6 8H21a2 2 0 0 1 2 2v2.104a2 2 0 0 1-.15.762l-3.095 7.515a1 1 0 0 1-.925.619H8a1 1 0 0 1-1-1V8.414a1 1 0 0 1 .293-.707"></path></svg>'
var replacementSVGBook = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M5 2h14a1 1 0 0 1 1 1v19.143a.5.5 0 0 1-.766.424L12 18.03l-7.234 4.536A.5.5 0 0 1 4 22.143V3a1 1 0 0 1 1-1m13 2H6v15.432l6-3.761l6 3.761z"></path></svg>'
var replacementSVGBell = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M5 18h14v-6.969C19 7.148 15.866 4 12 4s-7 3.148-7 7.031zm7-16c4.97 0 9 4.043 9 9.031V20H3v-8.969C3 6.043 7.03 2 12 2M9.5 21h5a2.5 2.5 0 0 1-5 0"></path></svg>'
var replacementSVGMessage = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1m17 4.238l-7.928 7.1L4 7.216V19h16zM4.511 5l7.55 6.662L19.502 5z"></path></svg>'
var replacementSVGLists = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M20 22H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1m-1-2V4H5v16zM8 7h8v2H8zm0 4h8v2H8zm0 4h5v2H8z"></path></svg>'
var replacementSVGComm = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M2 22a8 8 0 1 1 16 0h-2a6 6 0 0 0-12 0zm8-9c-3.315 0-6-2.685-6-6s2.685-6 6-6s6 2.685 6 6s-2.685 6-6 6m0-2c2.21 0 4-1.79 4-4s-1.79-4-4-4s-4 1.79-4 4s1.79 4 4 4m8.284 3.703A8.002 8.002 0 0 1 23 22h-2a6.001 6.001 0 0 0-3.537-5.473zm-.688-11.29A5.5 5.5 0 0 1 21 8.5a5.499 5.499 0 0 1-5 5.478v-2.013a3.5 3.5 0 0 0 1.041-6.609z"></path></svg>'
var replacementSVGProfile = '<svg xmlns="http://www.w3.org/2000/svg" width={48} height={48} viewBox="0 0 24 24"><path fill="currentColor" d="M4 22a8 8 0 1 1 16 0h-2a6 6 0 0 0-12 0zm8-9c-3.315 0-6-2.685-6-6s2.685-6 6-6s6 2.685 6 6s-2.685 6-6 6m0-2c2.21 0 4-1.79 4-4s-1.79-4-4-4s-4 1.79-4 4s1.79 4 4 4"></path></svg>'
// Function to replace children of target SVG elements
function replaceSVGChildren() {
// Find all buttons with data-testid="reply"
var replyButtons = document.querySelectorAll('button[data-testid="reply"]');
// Iterate over each found button
replyButtons.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGReply;
});
});
// Find all buttons with data-testid="reply"
var boostButtons = document.querySelectorAll('button[data-testid="retweet"]');
// Iterate over each found button
boostButtons.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGBoost;
});
});
// Find all buttons with data-testid="reply"
var likeButtons = document.querySelectorAll('button[data-testid="like"]');
// Iterate over each found button
likeButtons.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGLike;
});
});
// Find all buttons with data-testid="reply"
var unlikeButtons = document.querySelectorAll('button[data-testid="unlike"]');
// Iterate over each found button
unlikeButtons.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGUnlike;
});
});
// Find all buttons with data-testid="reply"
var bookButtons = document.querySelectorAll('button[data-testid="bookmark"]');
// Iterate over each found button
bookButtons.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGBook;
});
});
// Find all buttons with data-testid="reply"
var navBell = document.querySelectorAll('a[href="/notifications"]');
// Iterate over each found button
navBell.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGBell;
});
});
// Find all buttons with data-testid="reply"
var navMessages = document.querySelectorAll('a[href="/messages"]');
// Iterate over each found button
navMessages.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGMessage;
});
});
// Find all buttons with data-testid="reply"
var navLists = document.querySelectorAll('a[href*="/lists"]');
// Iterate over each found button
navLists.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGLists;
});
});
// Find all buttons with data-testid="reply"
var navBook = document.querySelectorAll('a[href*="/i/bookmarks"]');
// Iterate over each found button
navBook.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGBook;
});
});
// Find all buttons with data-testid="reply"
var navComm = document.querySelectorAll('a[href*="/communities"]');
// Iterate over each found button
navComm.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGComm;
});
});
// Find all buttons with data-testid="reply"
var navProfile = document.querySelectorAll('a[data-testid="AppTabBar_Profile_Link"]');
// Iterate over each found button
navProfile.forEach(function(inner) {
// Find any SVG elements inside descendants of the button
var svgElements = inner.querySelectorAll('svg');
// Iterate over each found SVG element
svgElements.forEach(function(svg) {
// Replace the innerHTML of the SVG with the replacement content
svg.innerHTML = replacementSVGProfile;
});
});
}
// Lookup table
const lookup = {
//'a': '𝕒', 'b': '𝕓', 'c': '𝕔', 'd': '𝕕', 'e': '𝕖', 'f': '𝕗', 'g': '𝕘', 'h': '𝕙', 'i': '𝕚', 'j': '𝕛', 'k': '𝕜', 'l': '𝕝', 'm': '𝕞', 'n': '𝕟', 'o': '𝕠', 'p': '𝕡', 'q': '𝕢', 'r': '𝕣', 's': '𝕤', 't': '𝕥', 'u': '𝕦', 'v': '𝕧', 'w': '𝕨', 'x': '𝕩', 'y': '𝕪', 'z': '𝕫',
'x': '𝕩', 's': '𝕩', 'S': '𝕏',
'A': '𝔸', 'B': '𝔹', 'C': 'ℂ', 'D': '𝔻', 'E': '𝔼', 'F': '𝔽', 'G': '𝔾', 'H': 'ℍ', 'I': '𝕀', 'J': '𝕁', 'K': '𝕂', 'L': '𝕃', 'M': '𝕄', 'N': 'ℕ', 'O': '𝕆', 'P': 'ℙ', 'Q': 'ℚ', 'R': 'ℝ', 'S': '𝕏', 'T': '𝕋', 'U': '𝕌', 'V': '𝕍', 'W': '𝕎', 'X': '𝕏', 'Y': '𝕐', 'Z': 'ℤ',
//'A': '𝕏', 'B': '𝕏', 'C': '𝕏', 'D': '𝕏', 'E': '𝕏', 'F': '𝕏', 'G': '𝕏', 'H': '𝕏', 'I': '𝕏', 'J': '𝕏', 'K': '𝕏', 'L': '𝕏', 'M': '𝕏', 'N': '𝕏', 'O': '𝕏', 'P': '𝕏', 'Q': '𝕏', 'R': '𝕏', 'S': '𝕏', 'T': '𝕏', 'U': '𝕏', 'V': '𝕏', 'W': '𝕏', 'X': '𝕏', 'Y': '𝕏', '𝕏': '𝕏'
};
// Lookup table for predefined vocabulary replacements
const wordLookup = {
// Example entries
real: '𝕋𝕣𝕦𝕥𝕙',
fact: '𝕋𝕣𝕦𝕥𝕙',
post: '𝕏ost',
tweet: '𝕏ost',
twitter: '𝕏',
car: 'automo𝕏',
phone: 'tele𝕏',
house: 'domi𝕏',
computer: 'cyber𝕏',
internet: 'net𝕏',
food: 'nutri𝕏',
drink: 'hydr𝕏',
shirt: 'cloth𝕏',
shoes: 'foot𝕏',
chair: 'sea𝕏',
table: 'surfa𝕏',
money: 'capi𝕏',
work: 'proje𝕏',
sleep: 'rest𝕏',
book: 'readi𝕏',
movie: 'cinem𝕏',
music: 'soni𝕏',
game: 'play𝕏',
friend: 'bud𝕏',
family: 'kin𝕏',
pet: 'compan𝕏',
love: 'affec𝕏',
happy: 'joyfu𝕏',
sad: 'mourn𝕏',
angry: 'furi𝕏',
smart: 'brani𝕏',
dumb: 'ignoran𝕏',
funny: 'humori𝕏',
serious: 'solemn𝕏',
fast: 'swi𝕏',
slow: 'gradu𝕏',
big: 'mega𝕏',
small: 'min𝕏',
beautiful: 'elegan𝕏',
ugly: 'grotes𝕏',
nice: 'pleasan𝕏',
mean: 'cruel𝕏',
cool: 'chill𝕏',
hot: 'blazi𝕏',
cold: 'chill𝕏',
smart: 'brani𝕏',
dumb: 'ignoran𝕏',
rich: 'lu𝕏u𝕏',
poor: 'humbl𝕏',
happy: 'joyfu𝕏',
sad: 'mourn𝕏',
angry: 'furi𝕏',
healthy: 'wellne𝕏',
sick: 'illne𝕏',
clean: 'puri𝕏',
dirty: 'grimy𝕏',
safe: 'secur𝕏',
dangerous: 'hazar𝕏',
good: 'opti𝕏',
bad: 'negati𝕏',
right: 'correct𝕏',
wrong: 'incorre𝕏',
true: 'authen𝕏',
false: 'falla𝕏',
win: 'victo𝕏',
lose: 'defea𝕏',
begin: 'commen𝕏',
end: 'conclu𝕏',
start: 'initia𝕏',
stop: 'cease𝕏',
buy: 'purcha𝕏',
sell: 'trade𝕏',
happy: 'joyfu𝕏',
sad: 'mourn𝕏',
angry: 'furi𝕏',
posted: '𝕏osted',
reply: '𝕏eply',
replies: '𝕏eplies',
search: '𝕏ear𝕏'
// Add more as needed
};
// Function to replace the first capital letter in a word based on the lookup table
function replaceFirstCapital(word) {
// Special case to replace "Ex" with "X"
if (word.startsWith("Ex")) {
return word.replace("Ex", "𝕏");
}
if (word.startsWith("ex")) {
return word.replace("ex", "𝕩");
}
// Special case to replace "Ex" with "X"
if (word.startsWith("E𝕩")) {
return word.replace("E𝕩", "𝕏");
}
// Special case to replace "Ex" with "X"
if (word.startsWith("e𝕩")) {
return word.replace("e𝕩", "𝕩");
}
// Special case to replace "ks" with "X"
if (word.includes("ks")) {
return word.replace("ks", "𝕩");
}
// Special case to replace "ks" with "X"
if (word.includes("k𝕩")) {
return word.replace("k𝕩", "𝕩");
}
if (word.includes("Ks")) {
return word.replace("Ks", "x");
}
// Special case to replace "ks" with "X"
if (word.includes("K𝕩")) {
return word.replace("K𝕩", "𝕏");
}
//if (word === word.toUpperCase()) {
//    return word; // Return the word unchanged if it is all caps
//}
return word.replace(/([A-Z])/, (match) => lookup[match] || match);
}
// Function to replace words based on the word lookup table
//function replaceVocabulary(word) {
//    return wordLookup[word] || word;
//}
// Function to replace words based on the word lookup table
function replaceVocabulary(word) {
// Check if the word exists in the lookup table (case insensitive)
const lowerCaseWord = word.toLowerCase(); // Convert word to lowercase
return wordLookup[lowerCaseWord] || word; // Check lookup table with lowercase word
}
//function replaceCharacters(str) {vocabulary
//    let replacedWord = replaceVocabulary(word);
//    return str.split('').map(char => lookup[char] || char).join('');
//}
// Function to replace characters in a string based on the lookup table
//function replaceCharacters(text) {
//    return text.split(' ').map(word => replaceFirstCapital(word)).join(' ');
//}
// Function to replace characters and vocabulary in a string based on the lookup tables
function replaceCharacters(text) {
// Split the text into words
let words = text.split(' ');
// Iterate through each word
for (let i = 0; i < words.length; i++) {
let word = words[i];
// First replace predefined vocabulary
let replacedWord = replaceVocabulary(word);
// Create an array to store the replaced characters
let replacedCharacters = [];
// Iterate through each character in the word
for (let j = 0; j < replacedWord.length; j++) {
let char = replacedWord[j];
// Replace the character with its corresponding value from the lookup table
replacedCharacters.push(lookup[char.toLowerCase()] || char);
}
// Replace the word with the replaced characters
words[i] = replacedCharacters.join('');
}
// Join the words back into a single string and return
return replaceFirstCapital(words.join(' '));
}
// Function to replace the contents of all span elements
function replaceSpanContents() {
// Get all span elements
const spans = document.querySelectorAll('span');
// Replace the contents of each span element
spans.forEach(span => {
// Check if the span contains only text nodes
const containsOnlyText = Array.from(span.childNodes).every(node => node.nodeType === Node.TEXT_NODE);
// Check if the span has data-text attribute set to "true"
const hasTextAttribute = span.getAttribute('data-text') === 'true';
// Exclude the span if it has data-text attribute set to "true"
if (containsOnlyText && !hasTextAttribute) {
span.textContent = replaceCharacters(span.textContent);
}
});
}
// Observe for new elements added to the document
//const observer = new MutationObserver(processAllElements);
//observer.observe(document.body, { childList: true, subtree: true });
// Observe for new elements added to the document
const observer = new MutationObserver(function() {
processAllElements();
});
observer.observe(document.body, { childList: true, subtree: true });
// Run the functions on page load
window.addEventListener('load', function() {
processAllElements();
setInterval(replaceSVGChildren, 50);
setInterval(checkForBlazeYourGlory, 50);
setInterval(replaceSpanContents, 50);
});
})();