NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name youtube.com - Dark Mode
// @description Automatically switch on dark mode. Useful for incognito tabs.
// @namespace yuriy.ershov@gmail.com
// @match *://www.youtube.com/*
// @run-at document-idle
// @noframes
// @version 1.0
// @copyright 2020, Yury Ershov <yuriy.ershov@gmail.com>
// @license MIT; https://spdx.org/licenses/
// @author Yury Ershov <yuriy.ershov@gmail.com>
// @homepageURL https://github.com/ershov/userscripts
// @homepageURL https://greasyfork.org/en/scripts?q=ershov
// @homepageURL https://openuserjs.org/scripts/ershov/
// @supportURL https://github.com/ershov/userscripts/issues
// @grant none
// @inject-into content
// ==/UserScript==
// ==OpenUserJS==
// @author ershov
// @collaborator ershov
// ==/OpenUserJS==
/* jshint esversion: 6 */
(function() {
'use strict';
let IsDark = ()=>!!document.querySelector("html[dark]");
let IsSpinner = ()=>{
let e = document.querySelector("ytd-popup-container iron-dropdown div#spinner");
return !e || getComputedStyle(e).display != "none";
}
let HasSettings = ()=>!!document.querySelector("button#button[aria-label=Settings]");
let ClickSettings = ()=>
[...document.querySelectorAll("button#button[aria-label=Settings]")].forEach(e=>e.click());
let ClickDarkModeMenu = ()=>
[...document.querySelectorAll("ytd-toggle-theme-compact-link-renderer")].
filter(e=>e.innerText=="Dark theme: Off").
forEach(e=>e.click());
let ClickDarkModeSwitch = ()=>
[...document.querySelectorAll("div#submenu div#caption-container")].
filter(e=>e.innerText=="DARK THEME").
forEach(e=>
[...e.querySelectorAll("div#toggleButton")].forEach(e=>e.click()))
if (IsDark()) return;
let WaitSettings = ()=>{
if (!HasSettings()) {
setTimeout(WaitSettings, 300);
return;
}
ClickSettings();
let WaitNoSpinner = ()=>{
if (IsSpinner()) {
setTimeout(WaitNoSpinner, 1000);
return;
}
ClickDarkModeMenu();
ClickDarkModeSwitch();
setTimeout(()=>document.body.click(), 500);
};
setTimeout(WaitNoSpinner, 500);
};
setTimeout(WaitSettings, 1000);
})();