Greasy Fork is available in English.
Modifies the CSS classes to automatically show all censored media on Twitter / X in desktop mode and adjusts specific elements based on class, while ignoring certain popups.
// ==UserScript==
// @name Show Twitter Censored Media
// @namespace http://tampermonkey.net/
// @version 1.3
// @description Modifies the CSS classes to automatically show all censored media on Twitter / X in desktop mode and adjusts specific elements based on class, while ignoring certain popups.
// @author Xaikyre
// @match https://twitter.com/*
// @match https://x.com/*
// @license MIT
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Function to check if specific popup is open
function isPopupOpen() {
return !!document.querySelector('.css-175oi2r.r-sdzlij.r-1phboty.r-rs99b7.r-lrvibr.r-136ojw6.r-2yi16.r-1qi8awa.r-1loqt21.r-o7ynqc.r-6416eg.r-1ny4l3l');
}
// Function to modify classes of children for specific parent divs
function modifyChildClasses() {
if (isPopupOpen()) return; // Skip modifications if popup is open
const parentDivs = document.querySelectorAll('.css-175oi2r.r-18u37iz.r-9aw3ui.r-4amgru.r-14gqq1x');
parentDivs.forEach(parentDiv => {
const children = parentDiv.querySelectorAll('.css-175oi2r.r-1udh08x, .css-175oi2r.r-yfv4eo');
children.forEach(child => {
child.className = 'css-175oi2r r-1adg3ll r-1ny4l3l';
});
});
}
// Function to remove specific divs by a complex class string
function removeSpecificDivs() {
if (isPopupOpen()) return; // Skip removal if popup is open
const elements = document.querySelectorAll('.css-175oi2r.r-1awozwy.r-1p0dtai.r-zchlnj.r-1cmwbt1.r-1777fci.r-edyy15.r-u8s1d.r-1d2f490.r-ipm5af');
elements.forEach(element => element.remove());
}
// Additional modifications based on new requirements
function additionalModifications() {
if (isPopupOpen()) return; // Skip modifications if popup is open
const targetParentDivs = document.querySelectorAll('.css-175oi2r');
targetParentDivs.forEach(parentDiv => {
// Modify specific child div classes
const modifiableDivs = parentDiv.querySelectorAll('.css-175oi2r.r-l3hqri.r-1udh08x.r-1867qdf.r-16y2uox, .css-175oi2r.r-yfv4eo.r-16y2uox');
modifiableDivs.forEach(div => {
if (div.classList.contains('r-l3hqri')) {
div.className = 'css-175oi2r r-1867qdf r-16y2uox';
} else if (div.classList.contains('r-yfv4eo')) {
div.className = 'css-175oi2r r-16y2uox';
}
});
// Remove specific div
const removableDivs = parentDiv.querySelectorAll('.css-175oi2r.r-drfeu3.r-1p0dtai.r-eqz5dr.r-16y2uox.r-1777fci.r-1d2f490.r-ymttw5.r-1f1sjgu.r-u8s1d.r-zchlnj.r-ipm5af.r-1867qdf');
removableDivs.forEach(div => div.remove());
});
}
// MutationObserver for dynamic content handling
const observer = new MutationObserver(mutations => {
mutations.forEach(() => {
if (!isPopupOpen()) { // Only run modifications if the popup is not open
modifyChildClasses();
removeSpecificDivs();
additionalModifications();
}
});
});
const config = { childList: true, subtree: true };
observer.observe(document.body, config);
// Initial call to functions
modifyChildClasses();
removeSpecificDivs();
additionalModifications();
})();