Status Icon Attack Link

Adds a quick attack link on the activity icon on the item market

// ==UserScript==
// @name         Status Icon Attack Link
// @namespace    http://tampermonkey.net/
// @version      1.01
// @description  Adds a quick attack link on the activity icon on the item market
// @author       ThatJimmyGuy [2924303]
// @license      MIT
// @run-at       document-end
// @match        https://www.torn.com/page.php?sid=ItemMarket*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=torn.com
// @grant        unsafeWindow
// ==/UserScript==

(function() {
    'use strict';

    const targetWindow = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window;


    function addAnchorToRow(node) {
        try
        {
            const attackLinkBase = "https://www.torn.com/loader.php?sid=attack&user2ID="

            console.log(node.querySelectorAll(".linkWrap___ZS6r9"));
            let playerID = node.querySelectorAll(".linkWrap___ZS6r9")[1].getAttribute("href").split("=")[1];
            let userStatusElement = node.querySelector(".userStatusWrap___ljSJG");

            let newAttackAnchorElement = document.createElement("a");
            newAttackAnchorElement.setAttribute("href", attackLinkBase + playerID);
            newAttackAnchorElement.setAttribute("target", "_blank");

            node.insertBefore(newAttackAnchorElement, userStatusElement);
            newAttackAnchorElement.appendChild(userStatusElement);
        }
        catch(error)
        {
            console.error("Error: ", error);
        }
    }

    function checkAddedElements(mutationList, observer)
    {
        for (const mutation of mutationList) {
            if (mutation.type === "childList" && mutation.addedNodes.length) {
                Array.from(mutation.addedNodes).forEach(node => {
                    try
                    {
                        if (node.className.includes("rowWrapper___me3Ox"))
                        {
                            addAnchorToRow(node.querySelector(".userInfoBox___LRjPl"));
                        }
                        if (node.className.includes("sellerList___kgAh_"))
                        {
                            node.childNodes.forEach(listItem => {
                                if (listItem.className.includes("rowWrapper___me3Ox"))
                                {
                                    addAnchorToRow(listItem.querySelector(".userInfoBox___LRjPl"));
                                }
                            })
                        }
                    } catch(error) {
                        console.error("Error: ", error);
                    }
                })
            }
        }
    }

    let observer = new MutationObserver(checkAddedElements);
    observer.observe(document.querySelector(".item-market"), {subtree: true, childList: true});
})();