// ==UserScript== // @name Wplace Map Themes // @name:fr Wplace Map Themes // @namespace https://github.com/CreepsoOff/wplace-dark-themes // @version 0.0.1 // @description Switch Wplace map between 4 themes // @description:fr Basculer entre les 4 thèmes de la map wplace // @author Creepso // @match *://*.wplace.live/* // @icon https://www.google.com/s2/favicons?sz=64&domain=wplace.live // @run-at document-start // @license GPL-3.0 license // @downloadURL none // ==/UserScript== (() => { "use strict"; // Available themes const themesMap = { liberty_wplace: { url: "https://maps.wplace.live/styles/liberty", iconColor: "#000000", buttonBackground: "#ffffff", name: "Liberty Wplace", }, bright_wplace: { url: "https://maps.wplace.live/styles/bright", iconColor: "#000000", buttonBackground: "#ffffff", name: "Bright Wplace", }, dark_black_wplace: { url: "https://maps.wplace.live/styles/dark", iconColor: "#ffffff", buttonBackground: "#000000", name: "Dark Black Wplace", }, dark_blue_wplace: { url: "https://maps.wplace.live/styles/fiord", iconColor: "#ffffff", buttonBackground: "#000055", name: "Dark Blue Wplace", }, }; const defaultTheme = "liberty_wplace"; const originalThemeUrl = "https://maps.wplace.live/styles/liberty"; // Load stored theme or fallback to default const stored = localStorage.getItem("MapTheme"); const mapTheme = stored && themesMap[stored] ? stored : defaultTheme; const selectedTheme = themesMap[mapTheme]; // Override fetch to replace style URL const __ufetch = unsafeWindow.fetch; unsafeWindow.fetch = function (configArg, ...restArg) { const url = (typeof configArg === "string" && configArg) || (configArg && configArg.url) || ""; if (url === originalThemeUrl) { return __ufetch(selectedTheme.url); } return __ufetch(configArg, ...restArg); }; // Handle theme change unsafeWindow.changeMapTheme = function (event) { const theme = event.target.getAttribute("data-theme"); if (!themesMap[theme]) return; localStorage.setItem("MapTheme", theme); location.reload(); }; // Add theme button and dropdown const observer = new MutationObserver((_, obs) => { const host = document.querySelector("div.flex.flex-col.items-center.gap-3"); if (!host) return; obs.disconnect(); const items = Object.entries(themesMap) .map(([id, t]) => { const active = mapTheme === id ? ' style="font-weight:600;"' : ""; return `