Torn ID in profile title

Shows the player ID next to their name in the profile heading for easy copy/pasting (e.g. turns "Sulsay's profile" into "Sulsay [2173590]").

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         Torn ID in profile title
// @namespace    https://github.com/sulsay/torn
// @version      1.0
// @description  Shows the player ID next to their name in the profile heading for easy copy/pasting (e.g. turns "Sulsay's profile" into "Sulsay [2173590]").
// @author       Sulsay [2173590]
// @match        https://www.torn.com/profiles.php*
// ==/UserScript==

(function() {
    let originalHeadingTextContent = '';

    const heading = Array.from(document.querySelectorAll('h4')).find(h4 => {
        originalHeadingTextContent = h4.textContent.trim();
        return originalHeadingTextContent.endsWith(' Profile')
    });
    if (heading === undefined) {
        // Profile heading not found or already altered
        return;
    }

    const playerIdMatches = window.location.search.match(/XID=(\d+)/);
    if (playerIdMatches === null) {
        // Viewing profile without the XID query param
        return;
    }

    const apostrophePosition = originalHeadingTextContent.indexOf("'");
    const playerName = originalHeadingTextContent.substr(0, apostrophePosition);
    const playerId = parseInt(playerIdMatches[1], 10);

    heading.textContent = `${playerName} [${playerId}]`;
})();