Word and Image Blocker

Block words, phrases and images associated with those phrases. For the UI to add and delete words and phrases to block, please also install the following, https://greasyfork.org/en/scripts/481834-word-and-image-blocker-settings-ui

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Word and Image Blocker
// @namespace    https://github.com/def-initive/
// @version      1.1
// @description  Block words, phrases and images associated with those phrases. For the UI to add and delete words and phrases to block, please also install the following, https://greasyfork.org/en/scripts/481834-word-and-image-blocker-settings-ui
// @author       def-initive
// @match        *://*/*
// @exclude      *://github.com/*
// @exclude      *://greasyfork.org/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    // Function to hide images in element, its parents, and siblings
    function hideImagesInElementAndSiblings(element) {
        // Hide images in the element itself
        var imagesInElement = element.querySelectorAll('img');
        imagesInElement.forEach(function (image) {
            image.style.display = "none";
        });

        // Hide images in siblings
        var siblings = Array.from(element.parentElement.children);
        siblings.forEach(function (sibling) {
            if (sibling !== element) {
                var imagesInSibling = sibling.querySelectorAll('img');
                imagesInSibling.forEach(function (image) {
                    image.style.display = "none";
                });
            }
        });
    }

    // Function to hide direct parent containers and their siblings' images
    // containing occurrences of a phrase on a webpage
    function hideParentAndSiblings(phrase) {
        var textNodes = document.createTreeWalker(
            document.body,
            NodeFilter.SHOW_TEXT,
            null,
            false
        );

        var elementsToRemove = [];

        while (textNodes.nextNode()) {
            var textNode = textNodes.currentNode;
            var match = textNode.nodeValue.match(new RegExp(phrase, 'gi'));

            if (match) {
                var parentContainer = textNode.parentElement;
                elementsToRemove.push(parentContainer);
            }
        }

        elementsToRemove.forEach(function (element) {
            // Check if the element is part of the UI created by "Blocked Phrases Settings"
            if (!element.closest('.blocked-phrases-settings-container')) {
                // Hide parent containers
                element.style.color = "black";
                element.style.backgroundColor = "black";

                // Hide images in siblings
                hideImagesInElementAndSiblings(element);
            }
        });
    }

    // Load target phrases from local storage
    var storedPhrases = localStorage.getItem('blockedPhrases');
    var targetPhrases = storedPhrases ? JSON.parse(storedPhrases) : [];

    // Hide direct parent containers and images in their siblings
    targetPhrases.forEach(function (phrase) {
        hideParentAndSiblings(phrase);
    });

    // Observe changes in the DOM to handle dynamically loaded content
    var observer = new MutationObserver(function (mutations) {
        mutations.forEach(function (mutation) {
            if (mutation.addedNodes && mutation.addedNodes.length > 0) {
                targetPhrases.forEach(function (phrase) {
                    hideParentAndSiblings(phrase);
                });
            }
        });
    });

    // Configuration of the observer
    var observerConfig = {
        childList: true,
        subtree: true
    };

    // Start observing the DOM
    observer.observe(document.body, observerConfig);

})();