Greasy Fork is available in English.

YuryMod - YouTube - whitelist channels in Adblock Plus

Helps whitelist YouTube channels in Adblock Plus

// ==UserScript==
// @name        YuryMod - YouTube - whitelist channels in Adblock Plus
// @namespace   http://forums.mozillazine.org/memberlist.php?mode=viewprofile&u=261941
// @author      Gingerbread Man
// @credits     Eyeo GmbH, Gantt, rimmington
// @description Helps whitelist YouTube channels in Adblock Plus
// @include     http://*.youtube.com/*
// @include     https://*.youtube.com/*
// @version     1.7
// @grant       none
// @license     http://creativecommons.org/licenses/by-sa/4.0/
// @supportURL  https://adblockplus.org/forum/viewtopic.php?f=1&t=23697
// ==/UserScript==

var updateHref = function (url) {
  window.history.replaceState(history.state, "", url);
};

var activate = function () {  
  var uo = document.querySelector('#watch7-content link[href*="/user/"]');
  var uv = document.querySelector('.yt-user-info > a[href*="/channel/"]');
  var channelName = (uo && uo.href.slice(uo.href.lastIndexOf("/")+1)) || (uv && uv.textContent);

  if (channelName) {
    addMenu(channelName);
    if (!(location.href.search("&user=") != -1)){
        updateHref(location.href+"&user="+channelName);
    }
  }
}

// For static pages
activate();

// For dynamic content changes, like when clicking a video on the main page.
// This bit is based on Gantt's excellent Download YouTube Videos As MP4 script:
// https://github.com/gantt/downloadyoutube
var observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if (mutation.addedNodes !== null) {
      for (i = 0; i < mutation.addedNodes.length; i++) {
        if (mutation.addedNodes[i].id == "watch7-main-container") {
          activate();
          break;
        }
      }
    }
  });
});
observer.observe(document.body, {childList: true, subtree: true});

// Add the context menu to the user name below the video
// Only works in Firefox
function addMenu(channelName) {
    var uh = document.getElementById("watch7-user-header");
    var menu = document.createElement("div");
    menu.setAttribute("id", "abpfilter");
    menu.setAttribute("style", "float: left;width: 32px;height: 24px;");
    var mione = document.createElement("button");
    // Adblock Plus is a registered trademark of Eyeo GmbH.
    mione.setAttribute("title", "Adblock Plus: add exception"); 
    mione.setAttribute("style","width: 96%;height: 91%;margin-left: 10px;cursor: pointer;background: no-repeat url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACwVBMVEX////+/v7c3Nzc3NzZ2dn////+/v7b29vZ2dnZ2dnZ2dnZ2dnZ2dnc3NzZ2dnZ2dn////Z2dnc3NzZ2dnZ2dnZ2dnc3NzZ2dnZ2dnZ2dnZ2dnb29vZ2dnc3NzZ2dnZ2dnZ2dnc3Nza2tra2trc3NzZ2dna2trZ2dnZ2dnZ2dn////ABAC/AwC+AgDaKADBBgDECgDGDQC/AgDKEgDPGADTHgDHDgDGDADz09HJEQDBBQDDCADZ2dnABQDPGQC9AADOFwDCBwDMFADRHADXIwDECQDfLwDFDADDCQDNFwDy0tHIEADklJO9AQDRGwD21dHbKQDBcmvijo7ijY359PT31dH16un01NHjlJPcKwDdppzWIwDQGgDijo3UIADikJDLFADLEwDZJgCnFgDIDwC+AQDdLADjNADMFQDVIQDHDQDSHQDXJADJEAD79fThMgDjk5PdOgDu0tHkoZy/cWvjxsXpxsXkkpDWoJz1ysXYJADeLQDq0tHxysXpvrjij4/GGwDEFwDHcGvZgH3hrKrPcmvff2vywbjNe2v99fTVbVjfn5z26enEGADaoZznpJzv1tHjX0LTnpzMR0Lpin3moJznu7j0393emo3Qfmv76+nWrKqyCQDaj43gRSbTNgDnbVjAcWupMSayDQDoxsXdubjSn5zToJzmiX3kfmvnOQDtgGvZRSbGGgDCFgDIEgD69PS9SUK5EwC8GADcrqrrvbjs1NHaKwDceGvNWVjCDgDTg3336un69fTekI31q5y3AgCaBACeBgDBFgDcKgCvGgCuHgCuIACvIQCwIgCyIQC/IwDWJgDIHgCmEwDij47qubjVb2vdeWvjkZDbYljqin3eeGvTbmvTHwDv3t3kk5HklJLjkpLjkZHt1dHhjY3femvryMXKMCbjk5LBPybadmvbpZzfZljivLjleWvmx8XoiRsRAAAAKnRSTlMA+vDzPPv56j0vOjQx7DU3+ivvLenz6/HvMO3r6vE5OPLy8fDtMvMs6CqoAvZYAAACk0lEQVR4XnWT43scbRSHZzbZjdomTZvafs9wbTO2baO2bdu2bdu2X/8VfWau3XSyae+vv3uuOc8B5iO0s0FAx/aYH6E9xSBA4m/0Eoknm83llIwkSRlVbm6S9OggzHuLIgrjKZLQMRw6gqSaJEECI1yEF5aTRsbqYTk8VsZIIiPEl7dDOUUwetYtVZWVlamkblbPEFl495CfuYywOtWqenlxka2oWF6vUjutRBzeqSuXh/HfW1lprLwqWmEymRTRVfJYKWslvuNt26A8Ev0f5TVamyXPXqt8o6y151ls2hpkfOCMLnhhPMk4pVqbIkFZnVs3ri63WpmgsGmlTob8iHfDDGCmjHp1rE1hL3CU0Ek3kugSR4FdYYtV640UGDiBZNhLMZoXBXV0YmJ6+tgV2fQ/mRpNzJOnDMkLqAL3MIDhDroCeF5WvAKe1wQvUDrPN3gLX0uyXQB/z/kEE13PAJJHjIRROl6QMex0GJPRQI9vBJg1dA1MavwCMGXqNJjA8AIqYQbM/B/+c1UCzL48t2FeJRKUpvkCYQEsXASLkcCxZCknZGoAlvmE5ZC2chWs5oSctTmwDgkc6zcw3ho2As8mvobNAFuQkLx123aW8b5iB+zctTsD9rgA9u7bD3AAveLgocNSj87bhyNw9NjxE3DS24dTp88A5FXVu60EL5jPQto5ueU8XKABcfHfP+m/ACxyFct3so845crVa2gW10tvOm7dvnP33v0Hjoelj/hZPJZEYYF9xSm/m+ZzvF8ghgUGiFN/vQ+j8f6hGMYZEfmtN4rLReEo5g08v/VOvsMjw1DYbPhv9Xt8wECsmeAAPLXlXcTxC9vC+Cy8rCycPxuhMQgHAXjQYMyP4CiDgCF/+IIfXc31lIg7B4YAAAAASUVORK5CYII=');background-size: contain;");
    menu.appendChild(mione);
    uh.appendChild(menu);
    uh.setAttribute("contextmenu","abpfilter");

    function abpShowFilter() {
        var fpo = "@@||youtube.com/*&user=";
        var fpt = "$document";
        var ffl = fpo+channelName+fpt;
        var wh = document.getElementById("watch8-action-buttons");
        var wlf = wh.parentNode.querySelector("#whitelistfilter");
        if (!wlf && ffl) {
            var div = document.createElement("div");
            div.setAttribute("id","whitelistfilter");
            div.setAttribute("style", "margin-bottom: 20px;");
            div.innerHTML = "Add the following filter to Adblock Plus:";
            var textarea = document.createElement("textarea");
            textarea.setAttribute("style", "display: block; font-family: monospace");
            textarea.setAttribute("spellcheck","false");
            textarea.setAttribute("rows","1");
            textarea.setAttribute("cols",ffl.length);
            textarea.innerHTML = ffl;
            div.appendChild(textarea);
            wh.parentNode.insertBefore(div, wh);
            textarea.focus();
        }
        else wh.parentNode.removeChild(wlf);
    }

    mione.addEventListener("click",abpShowFilter,false);
}