More Racing Info (Mobile)

Show Torn's race name and start time on mobile view

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         More Racing Info (Mobile)
// @namespace    heartflower.torn.com
// @version      1.0.2
// @description  Show Torn's race name and start time on mobile view
// @author       Heartflower [2626587]
// @match        https://www.torn.com/page.php?sid=racing*
// @match        https://www.torn.com/loader.php?sid=racing*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=torn.com
// ==/UserScript==

(function() {
    'use strict';

    function addInfo() {
        // Check if page is fully loaded in yet
        let wrapper = document.body.querySelector('.racing-main-wrap');
        if (!wrapper) {
            setTimeout(addInfo, 100);
            return;
        }

        // Check if custom race tab
        let customEventsWrap = wrapper.querySelector('.custom-events-wrap');
        if (!customEventsWrap) {
            setTimeout(addInfo, 100);
            return;
        }

        // If already added, don't add again
        let existingDivs = document.body.querySelector('.hf-race-name');
        if (existingDivs) {
            return;
        }

        // Fetch all races
        let ul = customEventsWrap.querySelector('.events-list');
        let races = ul.children;

        // Loop through all races and get the correct information
        for (var i = 0; i < races.length; i++) {
            let race = races[i];

            // Fetch the header (visible info);
            let headerContainer = race.querySelector('.ui-accordion-header');
            let headerUL = headerContainer.querySelector('.event-info');

            // Fetch the current track information
            let trackLI = headerUL.querySelector('.track');
            trackLI.style.lineHeight = 'normal';

            // Fetch the current car information
            let carLI = headerUL.querySelector('.car');
            carLI.style.lineHeight = 'normal';

            // Fetch the info (visible upon click info)
            let infoContainer = race.querySelector('.ui-accordion-content');
            let infoUL = infoContainer.querySelector('.event-info');

            // Fetch the race name
            let nameElement = infoUL.querySelector('.name');
            let name = nameElement.textContent.trim();

            // Fetch the start time
            let startTimeElement = infoUL.querySelector('.startTime');
            let startTime = startTimeElement.textContent.trim();

            // Show the race name on the header, above the track
            let nameDiv = document.createElement('div');
            nameDiv.className = 'hf-race-name';
            nameDiv.textContent = name;
            nameDiv.style.color = '#15AABF';
            trackLI.insertBefore(nameDiv, trackLI.firstChild);

            // Show the race bame on the header, above the car requirement
            let startTimeDiv = document.createElement('div');
            startTimeDiv.className = 'hf-start-time';
            startTimeDiv.textContent = 'Start Time: ' + startTime;
            startTimeDiv.style.color = '#15AABF';
            carLI.insertBefore(startTimeDiv, carLI.firstChild);
        }
    }

    // Attach click event listener
    document.body.addEventListener('click', handleButtonClick);

    // Redo function when button is clicked
    function handleButtonClick(event) {
        const clickedElement = event.target;
        const isAnchor = clickedElement.tagName === 'a' || clickedElement.closest('a') !== null;

        if (isAnchor) {
            setTimeout(addInfo, 100);
        }
    }

    addInfo();

})();