Codeforces Verdict Hidden Tool

The tool show codeforces submission status without which test case. For competitors practicing for the domjudge environment.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Codeforces Verdict Hidden Tool
// @namespace    http://tampermonkey.net/
// @version      1.0.1
// @description  The tool show codeforces submission status without which test case. For competitors practicing for the domjudge environment.
// @license      MIT
// @author       jakao
// @match        https://codeforces.com/*
// @icon         https://i.imgur.com/ldVBpM1.jpeg
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function removeOnTest() {
        console.log('?!?');
        let walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false), nextNode;
        let node;

        while (node = walker.nextNode()) {
            let textContent = node.nodeValue;
            let index = textContent.indexOf(' on test');

            if (index !== -1) {
                node.nodeValue = textContent.substring(0, index);
                nextNode = walker.nextNode();
                nextNode.nodeValue = "";
            }
            else{
                let pretestIndex = textContent.indexOf(' on pretest');
                if (pretestIndex !== -1) {
                    node.nodeValue = textContent.substring(0, pretestIndex);
                    nextNode = walker.nextNode();
                    nextNode.nodeValue = "";
                }
            }
        }
        console.log('???');
    }

    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            if (mutation.addedNodes.length) {
                removeOnTest();
            }
        });
    });
    console.log('!!!');

    const observerConfig = {
        childList: true,
        subtree: true,
        characterData: true
    };

    removeOnTest();

    observer.observe(document.body, observerConfig);
})();