YouTube - whitelist channels in Adblock Plus

Helps whitelist YouTube channels in Adblock Plus

  1. // ==UserScript==
  2. // @name YouTube - whitelist channels in Adblock Plus
  3. // @namespace http://forums.mozillazine.org/memberlist.php?mode=viewprofile&u=261941
  4. // @author Gingerbread Man
  5. // @credits Eyeo GmbH, Gantt, rimmington
  6. // @description Helps whitelist YouTube channels in Adblock Plus
  7. // @include http://*.youtube.com/*
  8. // @include https://*.youtube.com/*
  9. // @version 1.7
  10. // @grant none
  11. // @license http://creativecommons.org/licenses/by-sa/4.0/
  12. // @supportURL https://adblockplus.org/forum/viewtopic.php?f=1&t=23697
  13. // ==/UserScript==
  14.  
  15. var updateHref = function (url) {
  16. window.history.replaceState(history.state, "", url);
  17. };
  18.  
  19. var activate = function () {
  20. if (location.href.search("&user=") != -1) return;
  21. var uo = document.querySelector('#watch7-content link[href*="/user/"]');
  22. var uv = document.querySelector('.yt-user-info > a[href*="/channel/"]');
  23. var channelName = (uo && uo.href.slice(uo.href.lastIndexOf("/")+1)) || (uv && uv.textContent);
  24.  
  25. if (channelName) {
  26. addMenu(channelName);
  27. updateHref(location.href+"&user="+channelName);
  28. }
  29. }
  30.  
  31. // For static pages
  32. activate();
  33.  
  34. // For dynamic content changes, like when clicking a video on the main page.
  35. // This bit is based on Gantt's excellent Download YouTube Videos As MP4 script:
  36. // https://github.com/gantt/downloadyoutube
  37. var observer = new MutationObserver(function(mutations) {
  38. mutations.forEach(function(mutation) {
  39. if (mutation.addedNodes !== null) {
  40. for (i = 0; i < mutation.addedNodes.length; i++) {
  41. if (mutation.addedNodes[i].id == "watch7-main-container") {
  42. activate();
  43. break;
  44. }
  45. }
  46. }
  47. });
  48. });
  49. observer.observe(document.body, {childList: true, subtree: true});
  50.  
  51. // Add the context menu to the user name below the video
  52. // Only works in Firefox
  53. function addMenu(channelName) {
  54.  
  55. var uh = document.getElementById("watch7-user-header");
  56. var menu = document.createElement("menu");
  57. menu.setAttribute("id", "abpfilter");
  58. menu.setAttribute("type", "context");
  59. var mione = document.createElement("menuitem");
  60. // Adblock Plus is a registered trademark of Eyeo GmbH.
  61. mione.setAttribute("label", "Adblock Plus: toggle whitelist filter");
  62. mione.setAttribute("icon","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhlQTFRFKaFfJ6BdsOnR////3vbtnlUNvHAVq+fOnuLFjty66fnzM6prKqNhPbN2iEAGgtexftaufCgCj927b8+j9/37neLE0/Pm+/37YsmYqFoPSbqCbFoMw4IWrWoRkpxSrXwZxXkX1fHhjJlMXYk3d14SWHouV1cMr2IRR1INq1wPkU4JaU4LcXUW5PbtvnAVbFUMqmkQb1oO4vXrklQKkr6B0fLklUcKq3wYbFcOkmAQsGURsGEStGcSm1AMo8uWxeC49fz5zn4albBoo1kPl0wKnVQNiV0Qvm8U5vfvrWsRsG0RlWkSVXkt0enOo6dYjkcHVHUtgFUNzOXIjnMZTnIq/f38VGcZc6lfsnARcZdDo6dXVHUri3IXtGkTVXYtotOkqFkPT3MqfzEFsmsSkUwJXkAIgDoFosiRncePYciXxYQX4PTow3QWaGkcaWwfVHQrVXMkVGUVVGARY0cKlVcN+/36+fz5WH8vqs2YkkUKfGURgD0FVcKNcFoOlVwRdKVYVnoniF4PxePCjFcNaZdJ0/Dfo3EWsN67lFUKmE4LfmURlEkK7/ftR7qBYYcylJ5Sq20QVMGMom0WjkcIfzQFoKRSznwaflIMyn0ZjEIHnqRTlVQKiZlNbaFajHIXtWkSW4U2o2QOtOC+a5tSnVINi6tfr2YRynsZaX8yo2UOflAKmMePwd23lUwKeWURkUcIj30YsmoSAAAA7psQygAAALN0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAPKb/oAAABCElEQVR42mLYtGkTOxMUsAM5DJs2iXJEGchGeHlO8OMQBQkIcc5aZiPjrpc132oqp9AmBn4BuY1sOcsdp81QYEvuF+BnEFZS9+6aJB8zz7ytap3lHGEGCUnrpcxOG5hL7YuYxe0CMxlqNGPTeyqCmSPL+phbQvMmMkgl1DVlBOmIrPENE6l3yO1l4HVWMSrXLeQyyW7g8lg9nZeB23YFSyuLMkuB4gIWteYl3Aw8lXPbFy8KFzON1xCTdjXjYWDwSS0u0bcwrHVr1F41W5WBgZEhwLjbZSEr68rOtR1xQO4mRoZ8vpmTtVLW+/NFMzCCPMfIECKYNiWpWjARyAcJAEWgAMjfBBBgAJM4T1pkCARcAAAAAElFTkSuQmCC");
  63. menu.appendChild(mione);
  64. document.body.appendChild(menu);
  65. uh.setAttribute("contextmenu","abpfilter");
  66.  
  67. function abpShowFilter() {
  68. var fpo = "@@||youtube.com/*&user=";
  69. var fpt = "$document";
  70. var ffl = fpo+channelName+fpt;
  71. var wh = document.getElementById("watch8-action-buttons");
  72. var wlf = wh.parentNode.querySelector("#whitelistfilter");
  73. if (!wlf && ffl) {
  74. var div = document.createElement("div");
  75. div.setAttribute("id","whitelistfilter");
  76. div.innerHTML = "Add the following filter to Adblock Plus:";
  77. var textarea = document.createElement("textarea");
  78. textarea.setAttribute("style", "display: block; font-family: monospace");
  79. textarea.setAttribute("spellcheck","false");
  80. textarea.setAttribute("rows","1");
  81. textarea.setAttribute("cols",ffl.length);
  82. textarea.innerHTML = ffl;
  83. div.appendChild(textarea);
  84. wh.parentNode.appendChild(div);
  85. textarea.focus();
  86. }
  87. else wh.parentNode.removeChild(wlf);
  88. }
  89.  
  90. mione.addEventListener("click",abpShowFilter,false);
  91.  
  92. }