Makeshift Theme Switch

Very simple temporary theme switcher for any page

// ==UserScript==
// @name         Makeshift Theme Switch
// @namespace    https://mkps.app/
// @version      1.0.3
// @description  Very simple temporary theme switcher for any page
// @author       MK
// @license      MIT
// @match        *://*/*
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJRSURBVHgB1Ve9etMwFD0BBjbCxob6BMDWrWZjwysT7hMkI1vsJ6CMmUjeoB2ZUJ+g6Rto7NZ265aeW0upoji25KRfv57vu5Ed3Z8j6Uq6Bp4Zg1jFsiyHbHLKJ0pGUZSh7b6hLCiGckbdU0Sik4AEHgwGo+VyOfYCdsHQZkabOe1Nm+Lrts6qqkZsZDTfKG8RDyGaUfIsy2611gukEiDzv2x+dQQWx1eUD9hOREgMSeJfNAEGv0A96jZU1PtBx1MGeM/3wxbdQ+oo6p6FHa8agv9m8xnd8BPtJEK/sL63E7BrPkYclPecIQ7jyWSy5n+1C8hOsfkfONaUc8rP4H+HGeotWGBzh2yzFf0DxpMWb7yOSaBoqPT1kd9DXoRLU6AZbbZCVGahlBd/CXJsjmDNKeKhO2xH9mCrCfAlx+YU5nZZ3PLEJGas7dD955bge4MTUbqgg4VVjj0FY21l0NoRUC2OMvRDl+2R/LgcSJnefUH5BFKmd194TMIGyDErZ8QX1Pv2KXDjE/CDaNm48mCTaI6nwalPwHgdKlB8h/3DUCp5cLtAjkyXiMpexXMWFUcsKgqkw6D54JKZvqSchEexTMfIUyxEGBw9Ah/TuY418C+ja+y+Gw66SrAQ/i74g92gU4OHBKSoMOiPc/TAioBNimP0x0f0wFpNyJrNsHaTvMiQDkXbKX3cpRg11YQl+h0+qyt2JwKWRAF7UCRCIRHb7gI3E5ITBvFYIBGtX0byRcN1lVpe6v6u6Z2R8xSJSPk4VaiTU6on5REylLm7wF4c7gGJsMHpGS98EgAAAABJRU5ErkJggg==
// @grant        GM_addStyle
// @grant        GM_registerMenuCommand
// ==/UserScript==

(() => {
	"use strict";

	const SESSION_STORAGE_KEY = "MK_userscript_makeshiftThemeSwitch_status";

	const STYLE = `
		html, img, canvas, embed, video, object, iframe {
			filter: invert(1) hue-rotate(180deg);
		}
	`;

	let styleElement = null;

	function main() {
		setState(getStoredIsOn());
		GM_registerMenuCommand("Switch theme", switchTheme);
	}

	function switchTheme() {
		setState(styleElement == null);
	}

	function setState(on) {
		if (styleElement) {
			if (!on) {
				styleElement.remove();
				styleElement = null;
				setStoredIsOn(false);
			}
		} else if (on) {
			styleElement = GM_addStyle(STYLE);
			setStoredIsOn(true);
		}
	}

	function getStoredIsOn() {
		return sessionStorage.getItem(SESSION_STORAGE_KEY) == "true";
	}

	function setStoredIsOn(value) {
		sessionStorage.setItem(SESSION_STORAGE_KEY, value);
	}

	main();
})();