Webmail Ad Blocker

Block ads on the right side of the screen when using Gmail, Yahoo Mail, Hotmail and Outlook.com which expand your message space

// ==UserScript==
// @name         Webmail Ad Blocker
// @namespace    https://greasyfork.org/en/scripts/37967-webmail-ad-blocker
// @homepage     https://jasonsavard.com/Webmail-Ad-Blocker
// @source       https://chrome.google.com/webstore/detail/webmail-ad-blocker/cbhfdchmklhpcngcgjmpdbjakdggkkjp
// @icon         https://lh3.googleusercontent.com/rWx1KZ5jxbPmkvb8asXNoo5AnfthpZf554TbjYQuW_xPoPgzzzPtr9SQ0El1OvOQvaWEa6gvotA
// @version      5.0.6
// @description  Block ads on the right side of the screen when using Gmail, Yahoo Mail, Hotmail and Outlook.com which expand your message space
// @author       Jason Savard
// @supportURL   https://jasonsavard.com/wiki/Webmail_Ad_Blocker
// @match        https://mail.google.com/*
// @match        https://*.mail.live.com/*
// @match        https://outlook.live.com/*
// @match        https://*.mail.yahoo.com/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    var init = function() {
        var email;
        var addStyle = function(css) {
            var s = document.createElement('style');
            s.setAttribute('id', 'webmailAdBlocker');
            s.setAttribute('type', 'text/css');
            s.appendChild(document.createTextNode(css));
            return (document.getElementsByTagName('head')[0] || document.documentElement)
                .appendChild(s);
        };
        if (document.documentElement instanceof HTMLHtmlElement) {
            var addCSS = false;
            var css = "@namespace url(http://www.w3.org/1999/xhtml); ";
            var webmailName;
            if (document.location.href.match("mail.google.")) {
                addCSS = true;
                webmailName = "gmail";
                // Hide People Widget: extension used to show ads/peoplewidget by default before June 12th, 2016
                // Old version
                css += " #fi #fic {margin-right:100px !important} ";
                css += " #fi #rh {margin-left:-115px !important;width:95px !important} ";
                css += " #fi .rh {display:none !important} ";
                // Use for keeping right area visible for moving elements out of if using absolute like the Maps or Calendar events
                //css += " .iY .Bu:last-child > .nH {height: 0px !important;overflow: hidden !important;width: 1px !important} "; /* Ads Area - Jason: change from 0px to 1px cause right area was moving after loading */
                //chrome.runtime.sendMessage({name:"insertCSS", css:"  body:not(.xE) .Bs .Bu:last-child .nH[style*=\"width\"] {display: none !important} "});
                //css += " body:not(.xE) .m .Bs .Bu:not(:first-child) {display: none !important} "; /* .m is because the .bu happen above if right side chat is enabled. Completeling remove last bu and .xiu1Fc is used for excluding popout view it's the class of the <html> tag */
                css += " body:not(.xE) div[role='main'] .Bu:not(:first-child) {display: none !important} "; /* Using div[role='main'] because i found out that .Bs and .Bu was used higher up in the node atleast with right side chat etc. */
                //css += " .iY .Bu:first-child + .Bu {display: none !important} "; /* Separator column */
                //css += " .iY {width: 100% !important} "; /* Message area */
                // End People Widget
                // Hide ad below people widget
                css += " .Bs .Bu:last-child .oM {display:none !important} "; /* ads*/
                css += " .Bs .Bu:last-child .u8 {display:none !important} "; /* about these links */
                // hover ad when scrolling down
                css += " .AT {display:none !important} ";
                // new comment: ad above promotions emails -- old comment: ad above message area
                css += " .aKB .a2q {padding-bottom:0} ";
                css += " .aKB .a2q .F.cf {display:none !important} ";
                // Ad below email content (refer to ghazel@gmail.com for html or Mike Tirakis has reported it to me, a bit suspicious)
                css += " .z0DeRc {display:none !important} ";
                // another ad below by Christian Szita
                css += " .nH.hx .nH.PS {display:none !important} ";
                // Ad below email content (refer to ghazel@gmail.com for html or Mike Tirakis has reported it to me, a bit suspicious)
                css += " iframe[src*='http://pagead2.googlesyndication.com'] {display:none !important} ";
                // Ad for Checker Plus for Gmail
                //if (!ls["adForCheckerPlusForGmailShown"]) {
                //chrome.runtime.sendMessage({name:"showNotification"});
                //}
            }
            if (document.location.href.match("mail.live.")) {
                addCSS = true;
                webmailName = "hotmail";
                css += " iframe[id='dapIfM0'], iframe[id='dapIfM1'], .c_ads_ad, div[name='Advertisement'] {display:none !important} "; /* most ads:including ad below folders */
                css += " .Managed .WithSkyscraper #MainContent {right:0 !important} "; // with preview pane (default)
                css += " .Unmanaged .WithSkyscraper #MainContent {margin-right:0 !important} "; // no preview pane
                css += " .Managed .WithRightRail #MainContent {right:0 !important} "; // with preview pane (default)
                css += " .Unmanaged .WithRightRail #MainContent {margin-right:0 !important} "; // no preview pane
                css += " #SkyscraperContent {display:none !important} ";
                css += " #RadAd_Skyscraper {display:none !important} ";
                // outlook.com
                css += " #ManagedContentWrapper {padding-right:0 !important} ";
                css += " #RightRailContainer {display:none !important} ";
                // outlook.com version 2? refer to https://jasonsavard.com/forum/discussion/comment/1251#Comment_1251
                css += " .WithRightRail {right:0 !important} ";
            }
            if (document.location.href.match("outlook.live.")) {
                addCSS = true;
                webmailName = "outlook";
                css += " #primaryContainer > div:not(._n_f)[style*='width: 160'], #primaryContainer > div:not(._n_f)[style*='width:160'] {display:none !important;right:0 !important} ";
                css += " #primaryContainer > div:not(._n_f)[style*='right: 160'], #primaryContainer > div:not(._n_f)[style*='right:160'] {right:0 !important} ";
                css += " #primaryContainer > div:not(._n_f)[style*='width: 165'], #primaryContainer > div:not(._n_f)[style*='width:165'] {display:none !important;right:0 !important} ";
                css += " #primaryContainer > div:not(._n_f)[style*='right: 165'], #primaryContainer > div:not(._n_f)[style*='right:165'] {right:0 !important} ";
                css += " #primaryContainer > div:not(._n_f)[style*='width: 305'], #primaryContainer > div:not(._n_f)[style*='width:305'] {display:none !important;right:0 !important} ";
                css += " #primaryContainer > div:not(._n_f)[style*='right: 305'], #primaryContainer > div:not(._n_f)[style*='right:305'] {right:0 !important} ";
                // bottom ad when window is resized narrow
                css += " #primaryContainer > div[style*='bottom: 95'] {bottom:0 !important} ";
                css += " #primaryContainer > div._n_h {height:0 !important} ";
                // outlook.com v3
                css += " ._2qPmszDwBfYpF7PO9Mn3KN, ._2KxiN0IH0mUjw-Bw6WdAoB {display:none !important} ";
                css += " .stQe7wknhnXCAAroiyvBY, ._2deFj-S8jd1C_MSRZoRvlY, ._1K0cujP_EBzCd77bTesW1q {display:none !important} ";
                css += " ._254GqExCxnOxmPy7kKATP2, .fbAdLoaded {display:none !important} "; // when closing "Other" instead of "Focus"
            }
            if (document.location.href.match("mail.yahoo.")) {
                addCSS = true;
                webmailName = "yahoo";
                css += " *[class*='ad_slug'] {display:none !important} "; /* welcome page ad, empty inbox ad etc. */
                css += " div[id='MNW'] {display:none !important} "; /* Classic Yahoo:Ad above folder */
                css += " div[id='northbanner'] {display:none !important} "; /* Classic Yahoo:top banner */
                css += " iframe[src*='http://ad.'] {display:none !important} "; /* Classic Yahoo:top banner in calendar */
                // Beta version
                css += " #theAd {display:none !important} "; // right ad
                css += " #theMNWAd {display:none !important} "; // ad above inbox says... Sahil Best - sexy_sam28@ymail.com
                css += " #shellcontent {right:0 !important} "; // right ad
                css += " #slot_LREC {display:none !important} "; // What's new landing page ad
                css += " #slot_REC {display:none !important} "; // left ad
                css += " #slot_MON {display:none !important} "; // Spam box ad
                css += " #toolbar {right:0 !important} "; // right ad (stretches the toolbar)
                css += " .messagepane .right-ar {right:0 !important} "; // right arrow - for at&t yahoo
                // yahoo started using display:block !important   so i had to find an alternative to hiding by shrinking the size of div layer
                css += " .mb-rec-ad {display:none !important; height:0 !important; border:none !important; overflow-x:hidden !important} "; // ad in left column
                css += " .mb-list-ad {display:none !important; height:0 !important; border:none !important; overflow-x:hidden !important} "; // ad just above inbox
                css += " li[data-test-id='infinite-scroll-AD'] {display:none !important} "; // new add above inbox
                // Beta version (with page by page view option)
                css += " #main, #yucs, #yuhead-bucket {max-width:none !important} ";
                css += " .fullpage #main, .fullpage #yucs, .fullpage #yuhead-bucket {margin-right:0 !important} ";
                var foldersPane = document.getElementById("foldersPane");
                if (foldersPane) {
                    var contentWidth = window.innerWidth - foldersPane.clientWidth - 10;
                    css += " #welcomeAdsContainer {display:none !important} "; /* On Home tab (welcome screen of yahoo mail */
                    css += " #mainTabView {width:" + contentWidth + "px !important} ";
                    css += " #mainTablePane {width:100% !important} ";
                    css += " .PagedTableView_container {width:100% !important} ";
                    css += " div[id^='imcSession_'] {width:" + contentWidth + "px !important} "; /* Text/Chat message window */
                    css += " #ym-skyhider {display:none !important} "; /* seperator for the right side area */
                    css += " #largePane {display:none !important} "; /* Right side wrapper */
                    css += " #largeFrame {display:none !important} "; /* Ad area */
                    css += " #ym-skyscroller {display:none !important} "; /* Ad scrolling arrow */
                }
                // Empty Spam folder - hide video ad
                css += " #emptyFolderVideo .videopane {display:none !important} ";
                css += " .wide-right-rail .frost-container {right:0 !important} ";
                // Yahoo v2
                css += " #Atom a[data-test-id=pencil-ad] {display:none !important} ";
                css += " div[data-test-id='comms-properties-bar'] {flex-direction: column !important;height: auto !important} ";
                css += " div[data-test-id='comms-properties'] {flex-direction: column !important;margin-top: 14px !important} ";
                css += " div[data-test-id='comms-properties'] > a {margin-right: 0 !important; margin-bottom: 14px !important} ";
                css += " div[data-test-id='message-read-contact-card'] {display:none !important} ";
                css += " span[data-test-id='settings-link-label'] {display:none !important} ";
                css += " div[data-test-id='right-rail-ad'] {display:none !important} ";
            }
            if (addCSS) {
                addStyle(css);
            }
            return true;
        }
        return true;
    };
    init();
})();