Greasy Fork

Greasy Fork is available in English.

Antimisclic

Évitez les clics involontaires lors de l'utilisation de Chess.com

当前为 2024-03-09 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Antimisclic
// @namespace    YGL
// @version      1.0
// @description  Évitez les clics involontaires lors de l'utilisation de Chess.com
// @license      GPL-3.0
// @author       Benjamin Moine
// @match        https://www.chess.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var detectionDelay = 1000; // Définir le délai de détection par défaut (en millisecondes)
    var audioSrc = ''; // Chemin du fichier audio
    var antiMisclicActivated = false; // Variable pour suivre l'état du script
    var configDelayButton = null; // Bouton pour configurer le délai de détection
    var configSoundButton = null; // Bouton pour configurer le son de refus de clic

    // Fonction pour détecter les glissements de doigts tactiles
    function handleTouchMove(event) {
        if (!antiMisclicActivated) return; // Sortir de la fonction si le script n'est pas activé

        var lastTouch = handleTouchMove.lastTouch || {};
        var now = Date.now();
        var timeDiff = now - (lastTouch.time || 0);
        var touch = event.touches[0]; // Prendre la première touche pour simplifier

        // Calculer la distance parcourue depuis le dernier mouvement
        var deltaX = touch.clientX - (lastTouch.x || 0);
        var deltaY = touch.clientY - (lastTouch.y || 0);
        var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);

        // Calculer la vélocité
        var velocity = distance / timeDiff;

        // Vérifier si la distance parcourue est anormalement grande en un court laps de temps
        // et si la vélocité est également significative
        if (timeDiff > detectionDelay && distance > 50 && velocity > 1.5) {
            // Vérifier si le mouvement est principalement horizontal ou vertical
            var angle = Math.abs(Math.atan2(deltaY, deltaX));

            if (angle < Math.PI / 4 || angle > 3 * Math.PI / 4) {
                // Mouvement principalement horizontal
                console.log("Détection d'un glissement de doigt horizontal !");
                event.preventDefault(); // Empêcher le comportement par défaut (clic)
                // Jouer le son de refus de clic
                if (audioSrc) {
                    playAudio(audioSrc);
                }
            } else {
                // Mouvement principalement vertical
                console.log("Détection d'un glissement de doigt vertical !");
            }
        }

        handleTouchMove.lastTouch = {
            x: touch.clientX,
            y: touch.clientY,
            time: now
        };
    }

    // Fonction pour jouer un fichier audio
    function playAudio(src) {
        var audio = new Audio(src);
        audio.play();
    }

    // Fonction pour activer ou désactiver le script
    function toggleScript() {
        antiMisclicActivated = !antiMisclicActivated;
        var message = antiMisclicActivated ? "Antimisclic activé" : "Activer Antimisclic";
        console.log(message);
        configDelayButton.style.display = antiMisclicActivated ? 'none' : 'block'; // Masquer le bouton de configuration du délai lorsque le script est activé
        configSoundButton.style.display = antiMisclicActivated ? 'none' : 'block'; // Masquer le bouton de configuration du son lorsque le script est activé
        configSoundButton.textContent = antiMisclicActivated ? 'Désactiver Antimisclic' : 'Choix du clic';
        configSoundButton.style.backgroundColor = antiMisclicActivated ? 'green' : 'blue';
        button.textContent = antiMisclicActivated ? 'Antimisclic Activé' : 'Activer Antimisclic';
        button.style.backgroundColor = antiMisclicActivated ? 'green' : 'blue';
    }

    // Fonction pour ouvrir la configuration du délai
    function openDelayConfig() {
        var delay = prompt("Veuillez entrer le délai de détection (en millisecondes) :", detectionDelay);
        detectionDelay = parseInt(delay) || detectionDelay; // Utiliser la valeur par défaut si la saisie n'est pas valide
        configDelayButton.style.display = 'none'; // Cacher le bouton après avoir configuré le délai
    }

    // Fonction pour ouvrir la configuration du son
    function openSoundConfig() {
        var soundUrl = prompt("Veuillez entrer l'URL du fichier audio :", audioSrc);
        audioSrc = soundUrl.trim(); // Utiliser l'URL saisie
        configSoundButton.style.display = 'none'; // Cacher le bouton après avoir configuré le son
    }

    // Ajouter un gestionnaire d'événements pour les mouvements tactiles sur le plateau
    document.addEventListener('touchmove', handleTouchMove);

    // Créer un bouton pour activer/désactiver le script
    var button = document.createElement('button');
    button.textContent = 'Activer Antimisclic';
    button.style.backgroundColor = 'blue';
    button.style.color = 'white';
    button.style.position = 'fixed';
    button.style.top = '10px'; // Aligner en haut
    button.style.left = '50%';
    button.style.transform = 'translateX(-50%)'; // Centrer horizontalement
    button.onclick = toggleScript;
    document.body.appendChild(button);

    // Créer un bouton pour configurer le délai de détection
    configDelayButton = document.createElement('button');
    configDelayButton.textContent = 'Configurer le délai';
    configDelayButton.style.backgroundColor = 'blue';
    configDelayButton.style.color = 'white';
    configDelayButton.style.position = 'fixed';
    configDelayButton.style.top = '10px'; // Aligner en haut
    configDelayButton.style.left = 'calc(50% + 120px)'; // Décaler à droite du bouton "Activer Antimisclic"
    configDelayButton.onclick = openDelayConfig;
    configDelayButton.style.display = 'none'; // Cacher par défaut
    document.body.appendChild(configDelayButton);

    // Créer un bouton pour configurer le son de refus de clic
    configSoundButton = document.createElement('button');
    configSoundButton.textContent = 'Choix du clic';
    configSoundButton.style.backgroundColor = 'blue';
    configSoundButton.style.color = 'white';
    configSoundButton.style.position = 'fixed';
    configSoundButton.style.top = '10px'; // Aligner en haut
    configSoundButton.style.left = 'calc(50% + 240px)'; // Décaler à droite du bouton de configuration du délai
    configSoundButton.onclick = openSoundConfig;
    configSoundButton.style.display = 'none'; // Cacher par défaut
    document.body.appendChild(configSoundButton);

    // Ajouter un gestionnaire d'événements pour les combinaisons de touches de raccourci pour activer/désactiver le script
    document.addEventListener('keydown', function(event) {
        if (event.ctrlKey && event.altKey && event.key === 'j') {
            toggleScript();
        }
    });

    // Ajouter un gestionnaire d'événements pour les combinaisons de touches de raccourci pour ouvrir la configuration du délai
    document.addEventListener('keydown', function(event) {
        if (event.ctrlKey && event.altKey && event.key === 'o') {
            configDelayButton.style.display = 'block'; // Afficher le bouton de configuration du délai
        }
    });

    // Ajouter un gestionnaire d'événements pour les combinaisons de touches de raccourci pour ouvrir la configuration du son
    document.addEventListener('keydown', function(event) {
        if (event.ctrlKey && event.altKey && event.key === 's') {
            configSoundButton.style.display = 'block'; // Afficher le bouton de configuration du son
        }
    });

    // Ajouter un gestionnaire d'événements pour les combinaisons de touches de raccourci pour cacher le bouton de configuration du délai
    document.addEventListener('keydown', function(event) {
        if (event.ctrlKey && event.altKey && event.key === 'o') {
            configDelayButton.style.display = 'none'; // Cacher le bouton de configuration du délai
        }
    });

})();