Skip to content

Instantly share code, notes, and snippets.

@thekalinga
Last active September 17, 2020 19:52
Show Gist options
  • Save thekalinga/b754dc7f3979bfad6bfa217a9e521afc to your computer and use it in GitHub Desktop.
Save thekalinga/b754dc7f3979bfad6bfa217a9e521afc to your computer and use it in GitHub Desktop.
Twitter- Prepare tweets for screenshots
// ==UserScript==
// @name Twitter: Prepare tweets for screenshots
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://*twitter.com/*/status/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
function undo() {
addToggleableClasses();
removeClass(document.getElementsByTagName('body')[0], 'toggle');
toggle.src = showNavIcon;
}
function apply() {
addToggleableClasses();
addClass(document.getElementsByTagName('body')[0], 'toggle');
toggle.src = hideNavIcon;
}
function addToggleClass(el) {
if (!hasClass(el, 'toggleable')) {
addClass(el, 'toggleable');
}
}
function addToggleableClasses() {
document.querySelectorAll('h2[role="heading"]').forEach(heading => {
if (heading.textContent === 'Tweet') {
var container = heading.parentNode.parentNode
.parentNode.parentNode
.parentNode.parentNode
.parentNode.parentNode;
addToggleClass(container);
}
});
var actionContainers = document.querySelectorAll('div[aria-label*="replies"]');
actionContainers.forEach(actionContainer => {
addToggleClass(actionContainer);
});
actionContainers = document.querySelectorAll('div[aria-label*="reply"]');
actionContainers.forEach(actionContainer => {
addToggleClass(actionContainer);
});
actionContainers = document.querySelectorAll('div[aria-label*="Reply"]');
actionContainers.forEach(actionContainer => {
var container = actionContainer.parentNode.parentNode;
addToggleClass(container);
});
var analyticsLinks = document.querySelectorAll('a[href$="/analytics"]');
analyticsLinks.forEach(analyticsLink => {
addToggleClass(analyticsLink);
});
var statInfoLinks = document.querySelectorAll('a[href$="/retweets"]');
statInfoLinks.forEach(statInfoLink => {
var statInfoContainer = statInfoLink.parentNode.parentNode;
addToggleClass(statInfoContainer);
});
document.querySelectorAll('span').forEach(threadHeaderSpan => {
if (threadHeaderSpan.textContent === 'Thread') {
var container = threadHeaderSpan;
do {
container = container.parentNode;
} while (container.parentNode.parentNode.dataset.testid !== 'primaryColumn');
addToggleClass(container);
}
});
// for tweets of one's own
document.querySelectorAll('span').forEach(likesSpan => {
if (likesSpan.textContent === 'Likes' || likesSpan.textContent === 'Like') {
var container = likesSpan.parentNode.parentNode
.parentNode;
addToggleClass(container);
}
});
document.querySelectorAll('span').forEach(addAnotherTweetSpan => {
if (addAnotherTweetSpan.textContent === 'Add another Tweet') {
var container = addAnotherTweetSpan;
do {
container = container.parentNode;
} while (!container.hasAttribute('href'));
addToggleClass(container.parentNode.parentNode);
}
});
// blacken
document.querySelectorAll('time').forEach(timeEl => {
var headerRow = timeEl.parentNode.parentNode.parentNode.parentNode.parentNode;
addToggleClass(headerRow);
var profilePicContainer = headerRow.parentNode.previousSibling;
addToggleClass(profilePicContainer);
// var garbageContainer = headerRow.parentNode.previousSibling;
// addToggleClass(garbageContainer);
});
document.querySelectorAll('[data-testid="tweet"]').forEach(tweet => {
addToggleClass(tweet.previousSibling);
});
document.querySelectorAll('[data-testid="tweet"]').forEach(tweet => {
if (tweet.childNodes[1].childNodes[1]?.childNodes?.length == 4) {
addToggleClass(tweet.childNodes[1].childNodes[1].childNodes[0]);
}
});
var anchorNode = document.evaluate("//span[contains(., 'Twitter Web App')]", document, null, XPathResult.ANY_TYPE, null).iterateNext();
if (anchorNode !== null) {
var heading = anchorNode.parentNode.parentNode.parentNode.parentNode.parentNode.previousSibling;
addToggleClass(heading);
}
}
var showing = false;
var hideNavIcon = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB3aWR0aD0iMTAwJSIKICAgaGVpZ2h0PSIxMDAlIgogICB2aWV3Qm94PSIwIDAgMjA0OCAxNzkyIj4KICA8cGF0aAogICAgIGQ9Ik0wIDg5NnEwLTEzMCA1MS0yNDguNXQxMzYuNS0yMDQgMjA0LTEzNi41IDI0OC41LTUxaDc2OHExMzAgMCAyNDguNSA1MXQyMDQgMTM2LjUgMTM2LjUgMjA0IDUxIDI0OC41LTUxIDI0OC41LTEzNi41IDIwNC0yMDQgMTM2LjUtMjQ4LjUgNTFoLTc2OHEtMTMwIDAtMjQ4LjUtNTF0LTIwNC0xMzYuNS0xMzYuNS0yMDQtNTEtMjQ4LjV6TTE0MDggMTQwOHExMDQgMCAxOTguNS00MC41dDE2My41LTEwOS41IDEwOS41LTE2My41IDQwLjUtMTk4LjUtNDAuNS0xOTguNS0xMDkuNS0xNjMuNS0xNjMuNS0xMDkuNS0xOTguNS00MC41LTE5OC41IDQwLjUtMTYzLjUgMTA5LjUtMTA5LjUgMTYzLjUtNDAuNSAxOTguNSA0MC41IDE5OC41IDEwOS41IDE2My41IDE2My41IDEwOS41IDE5OC41IDQwLjV6IgogICAgIGlkPSJwYXRoMiIKICAgICBzdHlsZT0iZmlsbDojMDA5NGQ3O2ZpbGwtb3BhY2l0eToxIiAvPgo8L3N2Zz4=';
var showNavIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAyMDQ4IDE3OTIiPjxwYXRoIGZpbGw9InJnYigxODksMTg5LDE4OSkiIGQ9Ik0xMTUyIDg5NnEwLTEwNC00MC41LTE5OC41dC0xMDkuNS0xNjMuNS0xNjMuNS0xMDkuNS0xOTguNS00MC41LTE5OC41IDQwLjUtMTYzLjUgMTA5LjUtMTA5LjUgMTYzLjUtNDAuNSAxOTguNSA0MC41IDE5OC41IDEwOS41IDE2My41IDE2My41IDEwOS41IDE5OC41IDQwLjUgMTk4LjUtNDAuNSAxNjMuNS0xMDkuNSAxMDkuNS0xNjMuNSA0MC41LTE5OC41ek0xOTIwIDg5NnEwLTEwNC00MC41LTE5OC41dC0xMDkuNS0xNjMuNS0xNjMuNS0xMDkuNS0xOTguNS00MC41aC0zODZxMTE5IDkwIDE4OC41IDIyNHQ2OS41IDI4OC02OS41IDI4OC0xODguNSAyMjRoMzg2cTEwNCAwIDE5OC41LTQwLjV0MTYzLjUtMTA5LjUgMTA5LjUtMTYzLjUgNDAuNS0xOTguNXpNMjA0OCA4OTZxMCAxMzAtNTEgMjQ4LjV0LTEzNi41IDIwNC0yMDQgMTM2LjUtMjQ4LjUgNTFoLTc2OHEtMTMwIDAtMjQ4LjUtNTF0LTIwNC0xMzYuNS0xMzYuNS0yMDQtNTEtMjQ4LjUgNTEtMjQ4LjUgMTM2LjUtMjA0IDIwNC0xMzYuNSAyNDguNS01MWg3NjhxMTMwIDAgMjQ4LjUgNTF0MjA0IDEzNi41IDEzNi41IDIwNCA1MSAyNDguNXoiLz48L3N2Zz4=';
var toggle = document.createElement('img');
toggle.src = showNavIcon;
toggle.style.position = 'fixed';
toggle.style.bottom = "10px";
toggle.style.right = "10px";
toggle.style.width = "20px";
toggle.style.height = "20px";
toggle.style.cursor = "pointer";
toggle.style.zIndex = "9999";
toggle.addEventListener("click", function() {
if (!showing) {
apply();
} else {
undo();
}
showing = !showing;
});
document.getElementsByTagName('body')[0].appendChild(toggle);
var newStyleToBeApplied = document.createElement('style');
newStyleToBeApplied.type= 'text/css';
newStyleToBeApplied.innerHTML = `
.toggle .toggleable {
display: none;
}
.toggle article div {
font-size: 15px !important;
}
/*
.toggle .toggle-blacken {
color: black;
background-color: black;
}
*/
`;
document.getElementsByTagName('head')[0].appendChild(newStyleToBeApplied);
function hasClass(el, className) {
if (el.classList) {
return el.classList.contains(className);
} else {
return !!el.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)'));
}
}
function addClass(el, className) {
if (el.classList) {
el.classList.add(className);
}
else if (!hasClass(el, className)) {
el.className += " " + className;
}
}
function removeClass(el, className) {
if (el.classList) {
el.classList.remove(className);
} else if (hasClass(el, className)) {
var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
el.className=el.className.replace(reg, ' ');
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment