Greasy Fork is available in English.

Remove VK phone confirmation popup

Kak je ya vas nenaviju dermoedi

// ==UserScript==
// @name         Remove VK phone confirmation popup
// @namespace    http://tampermonkey.net/
// @version      3.0.0
// @description  Kak je ya vas nenaviju dermoedi
// @author       Pavel Durov
// @match        https://*.vk.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=vk.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    const POPUP_CLASS = "vkuiPopoutWrapper";
    const VALIDATION_CLASS_PREFIX = "CheckValidationPhone";

    function removeElement(element) {
        if (element && element.parentNode) {
            element.parentNode.removeChild(element);
        }
    }

    function clearBodyStyles() {
        document.body.removeAttribute("style");
    }

    function containsValidationClass(node) {
        if (node.nodeType === 1 && node.classList) {
            for (const className of node.classList) {
                if (className.startsWith(VALIDATION_CLASS_PREFIX)) {
                    return true;
                }
            }
        }
        for (const childNode of node.childNodes) {
            if (containsValidationClass(childNode)) {
                return true;
            }
        }
        return false;
    }

    function handleChanges(mutationsList) {
        for (const mutation of mutationsList) {
            if (mutation.type === "childList") {
                for (const addedNode of mutation.addedNodes) {
                    if (addedNode.nodeType === 1 && addedNode.classList.contains(POPUP_CLASS)) {
                        if (containsValidationClass(addedNode)) {
                            console.debug("VK PHONE CONFIRM:", "Remove element", `"${addedNode.className}"`)
                            removeElement(addedNode);
                            clearBodyStyles();
                        }
                    }
                }
            }
        }
    }

    const observer = new MutationObserver(handleChanges);
    const config = { childList: true, subtree: true };

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