Custom Change Color Script

Change specific colors to another on selected domains

As of 2024-11-26. See the latest version.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name            Custom Change Color Script
// @name:ru         Пользовательский скрипт для замены цветов
// @namespace       http://tampermonkey.net/
// @version         1.1
// @description:en  Change specific colors to another on selected domains
// @description:ru  Заменяет указанные цвета на других доменах
// @author          shaman
// @match           *://*/*
// @grant           none
// @license         GPL-3.0
// @description Change specific colors to another on selected domains
// ==/UserScript==

const SOURCE_COLOR = '#5cdd8b'; // целевой hex цвет
const TARGET_COLOR = '#93fab9'; // новый hex цвет
const ALLOWED_DOMAINS = ['example.com', 'anotherdomain.com']; // Список доменов

(function() {
    'use strict';

    const currentDomain = window.location.hostname;

    if (!ALLOWED_DOMAINS.some(domain => currentDomain.includes(domain))) {
        return;
    }

    function hexToRgb(hex) {
        const bigint = parseInt(hex.slice(1), 16);
        const r = (bigint >> 16) & 255;
        const g = (bigint >> 8) & 255;
        const b = bigint & 255;
        return `rgb(${r}, ${g}, ${b})`;
    }

    const sourceRgb = hexToRgb(SOURCE_COLOR);
    const targetColor = TARGET_COLOR;

    function updateColors() {
        document.querySelectorAll('*').forEach(el => {
            const styles = getComputedStyle(el);
            if (styles.color === sourceRgb) {
                el.style.setProperty('color', targetColor, 'important');
            }
            if (styles.backgroundColor === sourceRgb) {
                el.style.setProperty('background-color', targetColor, 'important');
            }
            if (styles.borderColor === sourceRgb) {
                el.style.setProperty('border-color', targetColor, 'important');
            }
        });
    }

    function processShadowRoots(node) {
        if (node.shadowRoot) {
            updateColorsInShadow(node.shadowRoot);
        }
        node.childNodes.forEach(child => processShadowRoots(child));
    }

    function updateColorsInShadow(shadowRoot) {
        shadowRoot.querySelectorAll('*').forEach(el => {
            const styles = getComputedStyle(el);
            if (styles.color === sourceRgb) {
                el.style.setProperty('color', targetColor, 'important');
            }
            if (styles.backgroundColor === sourceRgb) {
                el.style.setProperty('background-color', targetColor, 'important');
            }
            if (styles.borderColor === sourceRgb) {
                el.style.setProperty('border-color', targetColor, 'important');
            }
        });
    }

    const observer = new MutationObserver(() => {
        updateColors();
        processShadowRoots(document.body);
    });

    observer.observe(document.body, { childList: true, subtree: true });

    updateColors();
    processShadowRoots(document.body);
})();