onemillioncheckboxes

HAHHAHAHA

Per 28-06-2024. Zie de nieuwste versie.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         onemillioncheckboxes
// @namespace    none
// @version      0.1
// @description  HAHHAHAHA
// @author       YOU (idc tbh)
// @license      MIT
// @match        https://onemillioncheckboxes.com/
// @grant        none
// ==/UserScript==
(function() {
    'use strict';
    let isSelecting = false;
    let startX, startY, endX, endY;
    let selectionBox;
    let totalChecked = 0;
    let startTime;
    function isElementInViewport(el) {
        const rect = el.getBoundingClientRect();
        return (
            rect.top >= 0 &&
            rect.left >= 0 &&
            rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
            rect.right <= (window.innerWidth || document.documentElement.clientWidth)
        );
    }
    function clickCheckbox(checkbox) {
        if (!checkbox.checked) { // Check if checkbox is not already checked
            checkbox.click();
            totalChecked++;
        }
    }
    function selectCheckboxesInArea(startX, startY, endX, endY) {
        const allCheckboxes = document.querySelectorAll('input[type="checkbox"]');
        let nearestUnchecked = null;
        let minDistance = Number.MAX_SAFE_INTEGER;
        let checkedCount = 0;
        startTime = performance.now();
        for (let checkbox of allCheckboxes) {
            if (!checkbox.checked && isElementInViewport(checkbox)) {
                const checkboxRect = checkbox.getBoundingClientRect();
                const checkboxX = checkboxRect.left + window.scrollX;
                const checkboxY = checkboxRect.top + window.scrollY;
                if (checkboxX >= startX && checkboxX <= endX && checkboxY >= startY && checkboxY <= endY) {
                    const centerX = (startX + endX) / 2;
                    const centerY = (startY + endY) / 2;
                    const distance = Math.sqrt(Math.pow(checkboxX - centerX, 2) + Math.pow(checkboxY - centerY, 2));
                    if (distance < minDistance) {
                        nearestUnchecked = checkbox;
                        minDistance = distance;
                    }
                    let currentTime = performance.now();
                    let elapsedTime = currentTime - startTime;
                    let delay = Math.max(0, (checkedCount * 1000) / 5 - elapsedTime);
                    setTimeout(() => {
                        clickCheckbox(checkbox);
                    }, delay);
                    checkedCount++;
                }
            }
        }
        if (nearestUnchecked) {
            clickCheckbox(nearestUnchecked);
        }
    }
    function startSelection() {
        isSelecting = true;
        document.body.style.cursor = 'crosshair';
        selectionBox = document.createElement('div');
        selectionBox.style.position = 'absolute';
        selectionBox.style.border = '2px solid red';
        selectionBox.style.pointerEvents = 'none';
        document.body.appendChild(selectionBox);
        document.addEventListener('mousedown', handleMouseDown);
        document.addEventListener('mousemove', handleMouseMove);
        document.addEventListener('mouseup', handleMouseUp);
    }
    function handleMouseDown(event) {
        if (isSelecting) {
            startX = event.pageX;
            startY = event.pageY;
            selectionBox.style.left = startX + 'px';
            selectionBox.style.top = startY + 'px';
            selectionBox.style.width = '0';
            selectionBox.style.height = '0';
            selectionBox.style.display = 'block';
        }
    }
    function handleMouseMove(event) {
        if (isSelecting) {
            endX = event.pageX;
            endY = event.pageY;
            let boxWidth = Math.abs(endX - startX);
            let boxHeight = Math.abs(endY - startY);
            selectionBox.style.width = boxWidth + 'px';
            selectionBox.style.height = boxHeight + 'px';
            selectionBox.style.left = Math.min(endX, startX) + 'px';
            selectionBox.style.top = Math.min(endY, startY) + 'px';
        }
    }
    function handleMouseUp() {
        if (isSelecting) {
            isSelecting = false;
            document.body.style.cursor = 'default';
            selectionBox.style.display = 'none';
            selectCheckboxesInArea(Math.min(startX, endX), Math.min(startY, endY), Math.max(startX, endX), Math.max(startY, endY));
            document.removeEventListener('mousedown', handleMouseDown);
            document.removeEventListener('mousemove', handleMouseMove);
            document.removeEventListener('mouseup', handleMouseUp);
        }
    }
    document.addEventListener('keydown', function(event) {
        if (event.altKey && event.key === 'x') {
            startSelection();
        }
    });
})();