NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Twitter Cleaner // @namespace https://openuserjs.org/scripts/freeos // @version 1.0.4 // @description Cleans the Twitter UI // @copyright 2019, freeos (https://openuserjs.org/users/freeos) // @license MIT; https://opensource.org/licenses/MIT // @include https://twitter.com/* // @include https://twitter.com/i/notifications/* // @exclude https://twitter.com/i/moments/* // @require https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js // @grant GM_addStyle // ==/UserScript== /* Clean up the Twitter UI: - Left side: - more compact - remove "Explore" - Right side: - remove Trends, "Who to follow", Footer - Center: - more compact - remove "Who to follow" - remove list header */ let options = { hideExplore: true, hideListHeader: true }; this.$ = this.jQuery = jQuery.noConflict(true); $(document).ready(function () { switch (document.domain) { case "twitter.com": changeCSS(); cleanUIOnce(); setInterval(cleanUI, 1000); break; } }); function changeCSS() { let css = ` nav[aria-label="Primary"]>a { padding-top: 0px !important; padding-bottom: 0px !important; } nav[aria-label="Primary"]>a>div { padding-top: 2px !important; padding-bottom: 2px !important; } nav[aria-label="Footer"] { display: none !important; } .css-1dbjc4n.r-1iusvr4.r-16y2uox.r-5f2r5o.r-m611by:empty { display: none !important; } article div[role="group"] { margin-top: 2px !important; } `; GM_addStyle(css); } function cleanUI() { if (!urlContains("following") && !urlContains("followers")) { // remove Who to Follow divs from the feed var whoToFollowDivs = $('div.r-1w50u8q[data-testid="UserCell"]'); if (whoToFollowDivs) { whoToFollowDivs.each(function () { let that = $(this); if (that.parent() && that.parent().parent()) { that.parent().parent().hide(); } }); } // remove "Show more" who to follow from the feed whoToFollowDivs = $('a[href*="related_users"]'); if (whoToFollowDivs) { whoToFollowDivs.each(function () { let that = $(this); if (that.parent() && that.parent().parent()) { that.parent().parent().hide(); } }); } // remove "Who to follow" line from the feed whoToFollowDivs = $('span:contains("Who to follow")'); if (whoToFollowDivs) { whoToFollowDivs.each(function () { let that = $(this); if (that.parent() && that.parent().parent() && that.parent().parent().parent() && that.parent().parent().parent().parent() && that.parent().parent().parent().parent().parent()) { that.parent().parent().parent().parent().parent().hide(); } }); } // remove empty divs whoToFollowDivs = $('div.css-1dbjc4n.r-1adg3ll:empty'); if (whoToFollowDivs) { whoToFollowDivs.each(function () { let that = $(this); if (that.parent()) { that.parent().hide(); } }); } // remove empty divs whoToFollowDivs = $('div[aria-label*="Tweets"]>div>div>div>div.css-1dbjc4n.r-1adg3ll>.css-1dbjc4n:empty'); if (whoToFollowDivs) { whoToFollowDivs.each(function () { let that = $(this); if (that.parent() && that.parent().parent()) { that.parent().parent().hide(); } }); } } // remove Who to Follow divs from the right side var whoToFollowRightDivs = $('div.r-1ila09b[data-testid="UserCell"]'); if (whoToFollowRightDivs) { whoToFollowRightDivs.first().parent().parent().parent().remove(); } // remove "Trends for you" on the right side let removeDivs = $('span:contains("Trends for you")'); if (removeDivs) { removeDivs.each(function () { let that = $(this).closest('section'); if (that.parent() && that.parent().parent() && that.parent().parent().parent()) { that.parent().parent().parent().hide(); } }); } if (options.hideExplore) { // remove "Explore" from the left side removeDivs = $('nav[aria-label="Primary"] span:contains("Explore")'); if (removeDivs) { removeDivs.each(function () { let that = $(this).closest('a'); if (that) { that.hide(); } }); } } let isAtTopOfPage = window.pageYOffset === 0; if (urlContains("lists") && options.hideListHeader && isAtTopOfPage) { removeDivs = $('div[aria-label*="Timeline: List"]> div:first-child> div:first-child> div:first-child'); if (removeDivs) { removeDivs.each(function () { let that = $(this); if (that) { that.hide(); } }); } // image css selector: // div[aria-label*="Timeline: List"]> div:first-child> div:first-child> div:first-child> div:first-child> div:first-child } } function hideElement(cssSelector) { let removeDivs = $(cssSelector); if (removeDivs) { removeDivs.each(function () { let that = $(this); if (that) { that.hide(); } }); } } function cleanUIOnce() { // keep it for future use } function urlContains(strVal) { return window.location.href.indexOf(strVal) != -1 }