Star Citizen RSI Specturm - Auto Dark Mode

2025-05-05

// ==UserScript==
// @name        Star Citizen RSI Specturm - Auto Dark Mode
// @namespace   Kyan Violentmonkey Scripts
// @match       *://robertsspaceindustries.com/spectrum/*
// @grant       none
// @version     1.1.1
// @license     MIT
// @author      Kyan
// @description 2025-05-05
// ==/UserScript==
;(function () {
    'use strict';

    console.log("[Auto Dark Mode] Start.")

    /* Functions */
    const is_dark = () => document.querySelector("#app").classList.contains("theme-dark")
    const is_light = () => document.querySelector("#app").classList.contains("theme-light")
    const to_dark = () => {
        document.querySelector("#app").classList.remove("theme-light")
        document.querySelector("#app").classList.add("theme-dark")
    }
    const to_light = () => {
        document.querySelector("#app").classList.remove("theme-dark")
        document.querySelector("#app").classList.add("theme-light")
    }
    const is_prefer_dark = () => window.matchMedia("(prefers-color-scheme: dark)").matches
    const is_prefer_light = () => window.matchMedia("(prefers-color-scheme: light)").matches
    const when_ready = (callback) => {
        let timer = window.setInterval(() => {
            console.log("[Auto Dark Mode] Waiting")
            if (document.querySelector("#app") && !document.querySelector("#app").classList.contains("loading")) {
                console.log("[Auto Dark Mode] Ready")
                clearInterval(timer)
                callback()
            }
        }, 1000)
        window.setTimeout(() => clearInterval(timer), 15000)
    }

    /* Main */
    when_ready(() => {
        if (is_dark() && is_prefer_light()) {
            to_light()
        } else if (is_light() && is_prefer_dark()) {
            to_dark()
        } else {
            console.log(`[Auto Dark Mode] Prefer: ${is_prefer_light()?"✓":"✗"}Light, ${is_prefer_dark()?"✓":"✗"}Dark`)
            console.log(`[Auto Dark Mode] Current: ${is_light()?"✓":"✗"}Light, ${is_dark()?"✓":"✗"}Dark`)
        }
    })
})();