Last active
September 17, 2020 19:52
-
-
Save thekalinga/b754dc7f3979bfad6bfa217a9e521afc to your computer and use it in GitHub Desktop.
Twitter- Prepare tweets for screenshots
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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