SPAM

So Pictures A Many! ... Shh, it's a perfect acronym. This script will hide a comment when it contains more than 3 images / embeds, with the option to show it anyway. With 6 images or more, it gets deleted.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name        SPAM
// @version     3.6
// @description So Pictures A Many! ... Shh, it's a perfect acronym. This script will hide a comment when it contains more than 3 images / embeds, with the option to show it anyway. With 6 images or more, it gets deleted.
// @author      Valognir (https://www.deviantart.com/valognir)
// @namespace   https://greasyfork.org/en/scripts/417286-spam
// @run-at      document-start
// @match       *://*.deviantart.com/*
// @exclude     *://*.deviantart.com/*realEstateId*
// ==/UserScript==

(function() {
    'use strict';

    // looking to change the numbers or somethin? here you go.
    // number of images / embeds within a comment before its content...

    // ...gets hidden, with the option to show it anyway.
    let hides = 3;

    // ...gets deleted.
    let yeets = 10;

    // that's all, better don't touch the stuff below.

    let css = `
.yeeted {
    display: flex;
    flex-wrap: wrap;
}
.heya, .toggle {
    text-align: center;
    opacity: .6;
    font-size: 12px;
}

.heya {
    font-family: "Comic Sans MS";
    flex-grow: 1;
}

.toggle {
    width: 45px;
    color: var(--g-typography-primary);
    border: 1px solid currentColor;
    background: none;
    font-weight: bold;
}

.toggle:hover {
    color: var(--C14);
}

.toggle + div {
    height: 0;
}

.heya i {
    font-style: italic;
}
`;


    function waitForBody() {
        if (document.body) {
            const styleNode = document.createElement('style');
            const headElement = document.head;
            console.log("[SPAM]", headElement);
            styleNode.appendChild(document.createTextNode(css));
            headElement.appendChild(styleNode);

            const observer = new MutationObserver(function(mutations) {
                const comments = document.querySelectorAll('div[data-commentid] .ds-surface-secondary>div:last-child:not(.yeeted)');
                comments.forEach(function (element){
                    console.log(element);
                    const imgs = element.querySelectorAll('div[data-editor-viewer] img[srcset]');
                    if (imgs.length >= yeets) {
                        element.classList.add('yeeted');
                        element.innerHTML = '<span class="heya">spam identified.<br>yeet!</span>';
                    } else if (imgs.length >= hides) {
                        element.classList.add('yeeted');
                        element.insertAdjacentHTML('afterbegin', '<span class="heya more">can\'t <i>picture</i> what\'s in here. wanna check?</span><button class="toggle">Yes</button>');
                    }
                });

                const toggleButtons = document.querySelectorAll('.heya+.toggle');

                if (toggleButtons.length > 0) {
                    toggleButtons.forEach(function(element) {
                        if (!element.classList.contains('click')) {
                            element.classList.add('click');
                            element.addEventListener('click', function () {
                                if (element.nextElementSibling.style.height !== 'auto') {
                                    element.nextElementSibling.style.height = 'auto';
                                    element.previousElementSibling.innerHTML = 'huh, so that\'s what\'s in here. wanna hide it again?';
                                } else {
                                    element.nextElementSibling.style.height = '0px';
                                    element.previousElementSibling.innerHTML = 'can\'t <i>picture</i> what\'s in here. wanna check?';
                                }
                            });
                        }
                    });
                }
            });
            observer.observe(document, { childList: true, subtree: true });
            console.log("[SPAM] Loading screen added.");
        } else {
            setTimeout(waitForBody, 100); // Retry after 100ms
            console.log("[SPAM] Body not found. Retrying.");
        }
    }
    waitForBody();
})();