DC - MobileFixes

Fix player interactions with draggable boxes

// ==UserScript==
// @name         DC - MobileFixes
// @namespace    http://tampermonkey.net/
// @version      0.14
// @description  Fix player interactions with draggable boxes
// @author       Ajira
// @match        https://www.dreadcast.net/Main
// @match        https://www.dreadcast.eu/Main
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    /* TODO ==============================================
       - Should loop on class identified objects like AITL
    =================================================== */

    // Stop event propagation
    function disableEvent(event) {
        event.stopPropagation();
    }

    // Trigger fix only if a dialogbox is popup
    document.getElementById("zone_lightBox").addEventListener('DOMNodeInserted', function() {
        // Check if the dialogbox contains a digicode input
        var digiInput = document.getElementById("lb_textinput_digicode");
        if (digiInput === null) { return; }
        // Search the parent form of the digicode
        var digiForm = digiInput.parentNode.parentNode;
        if (digiForm === null) { return; }
        // Search the dialogbox which contains the form
        var digiBox = digiForm.parentNode.parentNode;
        if (digiBox === null) { return; }
        // Disable draggable event which are in conflict with input click on mobile
        digiBox.removeEventListener("touchstart", disableEvent);
        digiBox.addEventListener("touchstart", disableEvent, true);
    }, false);

    /* === FROM HERE ==========================
       Other experiments
       - Allow scrolling on long AITL offers
       - Allow to enter price in exchanges form
       - Allow to use decks
       - Allow to set price in centrale
    ======================================== */

    // Trigger fix only if a databox is popup
    document.getElementById("zone_dataBox").addEventListener('DOMNodeInserted', function() {
        // Check if the databox contains an aitl offer page
        var aitlPages = document.getElementsByClassName("aitl_page");
        if (aitlPages.length == 0) { return; }
        // Search for the AITL box
        var aitlBox = aitlPages[0].parentNode.parentNode.parentNode.parentNode;
        if (aitlBox === null) { return; }
        // Disable draggable event which are in conflict with scroll
        aitlBox.removeEventListener("touchstart", disableEvent);
        aitlBox.addEventListener("touchstart", disableEvent, true);
    }, false);

    // Trigger fix only if a dialogbox is popup
    document.getElementById("zone_dataBox").addEventListener('DOMNodeInserted', function() {
        // Check if the dialogbox contains a exchange input
        var priceInput = document.getElementById("champ_credits");
        if (priceInput === null) { return; }
        // Search the parent form of the exchange
        var priceForm = priceInput.parentNode.parentNode;
        if (priceForm === null) { return; }
        // Search the dialogbox which contains the form
        var priceBox = priceForm.parentNode;
        if (priceBox === null) { return; }
        // Disable draggable event which are in conflict with input click on mobile
        priceBox.removeEventListener("touchstart", disableEvent);
        priceBox.addEventListener("touchstart", disableEvent, true);
    }, false);

    // Trigger fix only if a dialogbox is popup
    document.getElementById("zone_dataBox").addEventListener('DOMNodeInserted', function() {
        // Check if the databox contains a deck
        var deckFroms = document.getElementsByClassName("deck_main");
        if (deckFroms.length == 0) { return; }
        // Search for the deck screen
        var deckScreen = deckFroms[0].parentNode.parentNode.parentNode;
        if (deckScreen === null) { return; }
        // Disable draggable event which are in conflict with scroll
        deckScreen.removeEventListener("touchstart", disableEvent);
        deckScreen.addEventListener("touchstart", disableEvent, true);
    }, false);

    // Trigger fix only if a dialogbox is popup
    document.getElementById("zone_lightBox").addEventListener('DOMNodeInserted', function() {
        // Check if the dialogbox contains price input
        var centraleForm = document.getElementById("lb_form_centrale_vente_prix");
        if (centraleForm == null) { return; }
        console.info(centraleForm);
        // Centrale form dialogbox
        var centraleBox = centraleForm.parentNode.parentNode.parentNode.parentNode;
        if (centraleBox === null) { return; }
        console.info(centraleBox);
        // Disable draggable event which are in conflict with input click on mobile
        centraleBox.removeEventListener("touchstart", disableEvent);
        centraleBox.addEventListener("touchstart", disableEvent, true);
    }, false);

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址