A Universal Dark Theme

Universal Dark Mode to fix flashbang sites like fitgirl repacks or wikipedia

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         A Universal Dark Theme
// @description  Universal Dark Mode to fix flashbang sites like fitgirl repacks or wikipedia
// @match        *://*/*
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @run-at       document-idle
// @version      2.0
// @author       TallTacoTristan
// @license MIT
// @namespace https://greasyfork.org/users/1253611
// ==/UserScript==
  function applyDarkTheme() {
    var style = document.createElement('style');
    style.innerHTML = `
      body, p, span, div, a, h1, h2, h3, h4, h5, h6, li, td:not(video) {
        color: #008080!important;
      }
      body, p, span, div, a, h1, h2, h3, h4, h5, h6, li, td[style*='background-image'] {
        background-color: #000000!important;
        background-image: none!important;
      }
      input[type='text'], input[type='password'], textarea, select {
        background-color: #D8BFD8!important;
        position: relative;
        z-index: 9999;
      }
      /* Add this rule to change non-interactable elements to black */
      body *:not(input[type='text']):not(input[type='password']):not(textarea):not(select) {
        background-color: #000000!important;
        color: #008080!important;
      }
    `;
    document.head.appendChild(style);
  }

  // Check if the current hostname is excluded
  if (!(localStorage.getItem("excluded") === window.location.hostname)) {
    applyDarkTheme();
  }

  // Create your button element
  var includeButton = document.createElement('button');
  includeButton.innerHTML = 'Include';

  var excludeButton = document.createElement('button');
  excludeButton.innerHTML = 'Exclude';

  // Append the buttons to the body of the page
  var buttonContainer = document.createElement('div');
  buttonContainer.style.position = 'fixed';
  buttonContainer.style.top = '10px';
  buttonContainer.style.right = '10px';
  buttonContainer.style.zIndex = '9999';
  buttonContainer.appendChild(includeButton);
  buttonContainer.appendChild(excludeButton);
  document.body.appendChild(buttonContainer);

  // Add functionality to the buttons
  includeButton.addEventListener('click', function() {
    localStorage.removeItem("excluded", window.location.hostname); //make sure this matches
    location.reload();
  });

  excludeButton.addEventListener('click', function() {
    localStorage.setItem("excluded", window.location.hostname); // Change "excluded" to something else if multiple userscripts use this code
    location.reload();
  });

  // Check the localStorage for the user's preference
  var showButtons = GM_getValue('showButtons', true);
  buttonContainer.style.display = showButtons? 'block' : 'none';

  // Register the GM menu commands
  GM_registerMenuCommand("Hide Buttons", function() {
    buttonContainer.style.display = 'none';
    GM_setValue('showButtons', false);
  }, 'h');

  GM_registerMenuCommand("Show Buttons", function() {
    buttonContainer.style.display = 'block';
    GM_setValue('showButtons', true);
  },'s');

  GM_registerMenuCommand("Include Current Site", function() {
    localStorage.removeItem("excluded", window.location.hostname);
    applyDarkTheme();
  });

  GM_registerMenuCommand("Exclude Current Site", function() {
    localStorage.setItem("excluded", window.location.hostname); // Change "excluded" to something else if multiple userscripts use this code
    location.reload();
  });