YouTube "Lights Out"

By Anmar Mansur Last update Feb 9, 2012 — Installed 55,603 times.

There are 9 previous versions of this script.

// ==UserScript==
// @name           YouTube "Lights Out"
// @namespace      http://greasemonkey.anmarmansur.com/
// @description    Turn the lights out for easier watching of YouTube videos!
// @include        http://*.youtube.com/watch*
// @include        http://youtube.com/watch*
// @include        http://*.youtube.com/user/*
// @include        http://youtube.com/user/*
// @include        https://*.youtube.com/watch*
// @include        https://youtube.com/watch*
// @include        https://*.youtube.com/user/*
// @include        https://youtube.com/user/*
// ==/UserScript==

function addLightsButton()
{
  if (location.href.match(/youtube\.com\/user\//i)) {
    var divNavBar = document.evaluate("//div[@id='playnav-navbar']//tr", document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
    var tdLights = divNavBar.insertBefore(document.createElement('td'), divNavBar.firstChild);
    var buttonLights = tdLights.insertBefore(document.createElement('a'), tdLights.firstChild);
    buttonLights.setAttribute('class', 'navbar-tab inner-box-link-color');
    buttonLights.href='javascript:;'
    buttonLights.appendChild(document.createTextNode("Lights out"));
    var divUPN = document.evaluate("//div[@id='user_playlist_navigator']", document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
    divUPN.style.overflow = "visible";
    var divPlayer = document.evaluate("//div[@id='playnav-player']", document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
  } else {
    var offButton = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAYAAADUFP50AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe1JREFUeNpkU02rcVEUXuc4vkOGRAwpZSgxUZShuQm/4vYO3pzzdsd+jCjyF5QiKQMkmSDymc/97meVm3vvqtXe7bOetZ71rHUUIQS9bLPZVNbrtb7f7wl+Pp/p8XiQ2WymYDCoRyIR4xWrvIDj8VhcLhdyOp1ks9nIYrGQoiiEN5mM+v0+x+Xzed3tdhsMHAwGwuFwkNfrpefzSff7nR3V8B2JkLDT6dBwOKRSqaQrk8lEgFIgEKDr9cqVQA0nDBW32y17OBymWq1GHo+H1NlsxheAQE3TNK4CABwM7HY7mUwmGo1GlEwmmba22+2YyvF4JFVVv1HECSCSrlYr7jUUCrFoGqocDgeyWq3U7Xb5BFUkARhBOJfLJbeDQmClgTcopFIpDsAH0Hr1h17lmPgei8Wo3W6THAup0WhUx6NUlhKJxBfodruxwwDOZrM0nU45LpfLVTRJyUin09RoNHQEoVdIz3Skw7AMi8WCWq0Wj8Llcv37WgBsTbPZ1CEAgOgR4qDnXq9HcuhULpd1v99vfNsc2Hw+r9TrdR10oSKqn04nrlatVv9K0OcrVqU3k6oZUBjjgYJyP0kG8xzfQTCNfhhWz+fzUTweJywHhi17ol8Gqu8uaf0pFotCKicymYwoFApC/gAfP+P+CzAAmPhAEzyJ4TsAAAAASUVORK5CYII=";
    var overButton = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAYAAADUFP50AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUeNpsUltLVFEU/vY5e67OTVMnqSxBKHLK1BBS6gdED+FT89ZLPfVcoNCciaIbBPVeD12g6KWwwgtCFJJBhRReEhlpsshRZ5wZz5mZc/bMbs3IhFmLvdjszfet9a0Lk1KiaunEbKSYWdBUsQJZWIM00xD5HAoCkL6QtqsrHK1iWZlo5rMR/eeE5nYUoToDYA5y7gZjDKW8AZGKQZ9/iUxWR23PgOYPtkaZsAqRdGxQ89YFofp2U6wSHZ1SmJAls/JmNj8FacD65COszAwhePKBxhJzQ9LnErAHOwhogCkuQPFs3GTlP2l+R8mKg3uOYPnVRayaTigsPQ3V00wIg4RzcmclS4VADinAVB/9cYj1Ufg6T0NZfAfOCkkoDi9KYolINuLkIItFugWktKgJJFkxUCzEIK152P09BMmBF/ImRDYBHvDATDwmiW7kPsxRAspMxGJmCTXHuqlJM7D5O2AmlygQh2J5QzAW3pCc7ZTFQubFEzgONcAR8sC+3wZ3716k7l9FqbAKvq0PyYmHsOrboezsCt9Ir/yCPjsMR9MZKrHcFJqtSvXxcncllBov3Hv6kZ2cRHJqBM3H+zWuqvyCv/OskRy/pkEy2LwHNiZcdFF9zkoQXteNzKd5/Bi9hZoT17VAsCXKqpuTXJyOLL+9o/lyC6htscG+T1RmWYoF8H14HCl7C4J9N7UdbUejfzanal8/T0TGnt3VfPWN0PXXWNctJFJt+Db1EZdv39Na2w7/vXKbLdJ/TraGekmqAiOnI2vk8H7sOZ4OjrDNOI4tJmmETcFGtB9sRzwex5epafB/UP8hhsOntEj0iramCwhhwWUHogPnL23F/RZgALZtJ5mXblnLAAAAAElFTkSuQmCC";
    var divWatchHeadline = document.evaluate("//div[@id='watch-headline-user-info']", document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
    divWatchHeadline.appendChild(document.createTextNode("\n"));
    var buttonLights = divWatchHeadline.appendChild(document.createElement('button'));
    divWatchHeadline.appendChild(document.createTextNode("\n"));
    buttonLights.title = 'Lights out';
    buttonLights.setAttribute('class', 'yt-uix-button yt-uix-button-default yt-uix-tooltip');
    buttonLights.setAttribute('data-tooltip-title', 'Lights out');
    var imgLights = buttonLights.appendChild(document.createElement('img'));
    imgLights.alt = '';
    imgLights.src = offButton;
    buttonLights.addEventListener('mouseover', function() { imgLights.src = overButton; }, false);
    buttonLights.addEventListener('mouseout', function() { imgLights.src = offButton; }, false);
    var divPlayer = document.evaluate("//div[@id='watch-player']", document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
  }
  buttonLights.setAttribute('onclick', '; return false;');
  buttonLights.addEventListener('click', function() { lightsOut(); }, false);
  divPlayer.style.zIndex = "200";
}

function lightsOut()
{
  var lightImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAAA1BMVEUAAACnej3aAAAAAXRSTlOzEo46UAAAAA5JREFUGJVjYBgFgwkAAAGQAAHY85U/AAAAAElFTkSuQmCC";
  var mediumImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAAA1BMVEUAAACnej3aAAAAAXRSTlPNpTNmawAAAA5JREFUGJVjYBgFgwkAAAGQAAHY85U/AAAAAElFTkSuQmCC";
  var darkImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAAA1BMVEUCAgJ4xuoaAAAAAXRSTlPnfoivvQAAAA5JREFUGJVjYBgFgwkAAAGQAAHY85U/AAAAAElFTkSuQmCC";
  var outImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAAA1BMVEUCAgJ4xuoaAAAADklEQVQYlWNgGAWDCQAAAZAAAdjzlT8AAAAASUVORK5CYII=";
  
  if(!document.getElementById('lightsOut')) {
    var imgLightsOut = document.createElement('img');
    if (youtubeLightsOutSequence == "immediate_off") {
      imgLightsOut.src = outImg;
    } else {
      imgLightsOut.src = mediumImg;
    }
    imgLightsOut.setAttribute('id', 'lightsOut');
    imgLightsOut.setAttribute('style', 'position:fixed;top:0;left:0;width:100%;height:' + document.documentElement.scrollHeight + 'px;z-index:199;');
    imgLightsOut.addEventListener('click', function () {
        if ((youtubeLightsOutSequence == "dim_only") || (document.getElementById('lightsOut').src == outImg)) {
          if (location.href.match(/youtube\.com\/user\//i)) {
            document.evaluate("//div[@id='playnav-body']", document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue.removeChild(document.getElementById('lightsOut'));
          } else {
            document.body.removeChild(document.getElementById('lightsOut'));
          }
        } else {
          lightsOut();
        }
      }, false);
    if (location.href.match(/youtube\.com\/user\//i)) {
      document.evaluate("//div[@id='playnav-body']", document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue.appendChild(imgLightsOut);
    } else {
      document.body.appendChild(imgLightsOut);
    }
  } else {
    document.getElementById('lightsOut').src = outImg;
  }
}

function addMenuCommands()
{
  GM_registerMenuCommand("Set Lights Dim then Off", function () {
    youtubeLightsOutSequence = "dim_then_off";
    GM_setValue("youtube_lights_out_sequence", youtubeLightsOutSequence);
  });
  GM_registerMenuCommand("Set Lights Dim Only", function () {
    youtubeLightsOutSequence = "dim_only";
    GM_setValue("youtube_lights_out_sequence", youtubeLightsOutSequence);
  });
  GM_registerMenuCommand("Set Lights Immediately Off", function () {
    youtubeLightsOutSequence = "immediate_off";
    GM_setValue("youtube_lights_out_sequence", youtubeLightsOutSequence);
  });
}

var youtubeLightsOutSequence = GM_getValue("youtube_lights_out_sequence", "dim_then_off");

addMenuCommands();
addLightsButton();