Leetcode Difficulty Hider

Replace difficulty labels with "Hidden" and apply custom styles.

// ==UserScript==
// @name         Leetcode Difficulty Hider
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Replace difficulty labels with "Hidden" and apply custom styles.
// @author       You
// @match        https://leetcode.com/*
// @exclude      https://leetcode.com/
// @exclude      https://leetcode.com
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
    'use strict';

    // Helper function to replace text content and apply styles
    function replaceText(element, customText = "Hidden") {
        if (element.dataset.processed || element.closest("svg")) return; // Skip already processed elements

        // Store the original text
        const originalText = element.textContent.trim();

        // Replace text with "Hidden" and apply styles
        element.textContent = customText;
        element.style.color = "orchid";
        element.dataset.processed = "true";

        // Add hover functionality to show the original text
        element.addEventListener("mouseenter", () => {
            element.textContent = originalText;
            element.style.color = ""; // Reset to original colour
            element.style.fontStyle = "";
            element.style.fontWeight = "";
        });
        element.addEventListener("mouseleave", () => {
            element.textContent = customText;
            element.style.color = "orchid";
        });
    }

    // Apply the text replacement to specific elements
    function applyReplacements() {
        const selectors = [
            ".text-sd-hard",
            ".text-sd-medium",
            ".text-sd-easy",
            '[role="cell"] > .text-pink.dark\\:text-dark-pink',
            '[role="cell"] > .text-yellow.dark\\:text-dark-yellow',
            '[role="cell"] > .text-olive.dark\\:text-dark-olive',
            ".text-difficulty-hard",
            ".text-difficulty-medium",
            ".text-difficulty-easy",
            ".text-lc-yellow-60.dark\\:text-dark-lc-yellow-60",
            ".text-lc-red-60.dark\\:text-dark-lc-red-60",
            ".text-lc-green-60.dark\\:text-dark-lc-green-60",
            ".text-yellow",
            ".text-pink",
            ".text-green",
            ".text-olive"
        ];

        const elements = document.querySelectorAll(selectors.join(","));
        elements.forEach((element) => replaceText(element));
    }

    // Run the replacement initially
    applyReplacements();

    // Observe changes in the DOM to handle dynamic content
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            mutation.addedNodes.forEach((node) => {
                if (node.nodeType === Node.ELEMENT_NODE) {
                    applyReplacements();
                }
            });
        });
    });

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