- youtube.com - Turn On Dark Mode

Automatically switch on dark mode. Useful for incognito tabs.

  1. // ==UserScript==
  2. // @name - youtube.com - Turn On Dark Mode
  3. // @namespace Yury Ershov
  4. // @match *://www.youtube.com/*
  5. // @run-at document-idle
  6. // @noframes
  7. // @grant none
  8. // @version 1.0
  9. // @author Yury Ershov
  10. // @description Automatically switch on dark mode. Useful for incognito tabs.
  11. // @inject-into content
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16.  
  17. let IsDark = ()=>!!document.querySelector("html[dark]");
  18. let IsSpinner = ()=>{
  19. let e = document.querySelector("ytd-popup-container iron-dropdown div#spinner");
  20. return !e || getComputedStyle(e).display != "none";
  21. }
  22. let HasSettings = ()=>!!document.querySelector("button#button[aria-label=Settings]");
  23. let ClickSettings = ()=>
  24. [...document.querySelectorAll("button#button[aria-label=Settings]")].forEach(e=>e.click());
  25. let ClickDarkModeMenu = ()=>
  26. [...document.querySelectorAll("ytd-toggle-theme-compact-link-renderer")].
  27. filter(e=>e.innerText=="Dark theme: Off").
  28. forEach(e=>e.click());
  29. let ClickDarkModeSwitch = ()=>
  30. [...document.querySelectorAll("div#submenu div#caption-container")].
  31. filter(e=>e.innerText=="DARK THEME").
  32. forEach(e=>
  33. [...e.querySelectorAll("div#toggleButton")].forEach(e=>e.click()))
  34.  
  35. if (IsDark()) return;
  36.  
  37. let WaitSettings = ()=>{
  38. if (!HasSettings()) {
  39. setTimeout(WaitSettings, 300);
  40. return;
  41. }
  42. ClickSettings();
  43. let WaitNoSpinner = ()=>{
  44. if (IsSpinner()) {
  45. setTimeout(WaitNoSpinner, 1000);
  46. return;
  47. }
  48. ClickDarkModeMenu();
  49. ClickDarkModeSwitch();
  50. setTimeout(()=>document.body.click(), 500);
  51. };
  52. setTimeout(WaitNoSpinner, 500);
  53. };
  54.  
  55. setTimeout(WaitSettings, 1000);
  56. })();