Track aliexpress parcel

Opens parcelsapp with the tracking code of your order

// ==UserScript==
// @name         Track aliexpress parcel
// @namespace    http://tampermonkey.net/
// @version      0.12
// @description  Opens parcelsapp with the tracking code of your order
// @author       You
// @match        https://trade.aliexpress.com/order_detail.htm*
// @match        https://*.aliexpress.com/store/*
// @match        https://*.aliexpress.com/p/order/index.html*
// @match        https://*.aliexpress.com/p/order/detail.html*
// @match        https://*.aliexpress.com/p/tracking/index.html*
// @match        https://track.aliexpress.com/logisticsdetail.htm*
// @icon         https://www.google.com/s2/favicons?domain=aliexpress.com
// @grant        none
// @license MIT
// ==/UserScript==

let popoverTimer = 0;
let divToObserve = '.comet-popover-wrap';

let observer = new IntersectionObserver((entries, observer) => {
    entries.forEach(entry => {
        track();
        observer.unobserve(entry.target); // Stop observing this element
    });
}, {
    threshold: 0.1 // Adjust if needed. 0.1 means 10% of the element is visible
});

let existingDivs = document.querySelectorAll(divToObserve);
existingDivs.forEach(div => {
    observer.observe(div);
});

document.addEventListener('DOMNodeInserted', function(e) {
    if (e.target.nodeType === 1 && e.target.matches && e.target.matches(divToObserve)) {
        observer.observe(e.target);
    }
});

function insertTrackingLink (trackingDiv) {
    clearInterval(popoverTimer);
    if (trackingDiv && !trackingDiv.innerText.includes('🔗')) {
        let trackingCode = trackingDiv.innerText;
        var linkParcelapp = "https://parcelsapp.com/tracking/" + trackingCode;
        var link17Track = "https://t.17track.net/en#nums=" + trackingCode;
        var linkOrdertracker = "https://www.ordertracker.com/track/" + trackingCode;
        trackingDiv.innerHTML = "<span>" + trackingCode +
            " <a href='" + linkParcelapp + "' target='_blank' readonly> Track 1 🔗</a>" +
            " <a href='" + link17Track + "' target='_blank'> Track 2 🔗</a>" +
            " <a href='" + linkOrdertracker + "' target='_blank'> Track 3 🔗</a>" +
            "</span>";
    }
}

function trackNewStyle () {
    let trackingDivs = document.querySelectorAll('.order-track-popover-title p:nth-of-type(2) span');
    trackingDivs.forEach(trackingDiv => {
        insertTrackingLink(trackingDiv);
    });
}

function track () {
    let trackingDivSelectors = [
        '.tracking-no span',
        'div.tracking-wrap div:nth-of-type(2) span'
    ];

    let trackingDiv = document.querySelector('.tracking-wrap:nth-of-type(3) span:nth-of-type(2)');
    trackingDiv && insertTrackingLink(trackingDiv);

    let trackButtons = document.querySelectorAll("a.comet-btn.comet-btn-block.order-item-btn");
    trackButtons.forEach(trackButton => {
        trackButton.addEventListener('mouseenter', () => {
            popoverTimer = setInterval(trackNewStyle, 0.5e3);
        })
    });
}

function changeTarget() {
    var links = document.querySelectorAll('a[ae_button_type="productList_click"]');
    for (var i = 0; i < links.length; i++) {
        var $el = links[i];
//        $el.href = $el.dataset.href;
        $el.setAttribute('target', '_blank');
    }
    links = document.querySelectorAll('a[ae_object_type="product"]');
    var a;
    for (i = 0; i < links.length; i++) {
        $el = links[i];
//        $el.href = $el.dataset.href;
        $el.setAttribute('target', '_blank');
    }
    var div;
    links = document.querySelectorAll('div[ae_object_type="product"]');
    for (i = 0; i < links.length; i++) {
        $el = links[i];
        div = document.createElement('a');
//        div.href = $el.dataset.href;
        div.innerHTML = 'new tab link';
        div.setAttribute('target', '_blank');
        $el.parentNode.insertBefore( div, $el.nextSibling );
    }
}

(function() {
    'use strict';
    setTimeout(track, 5e3);
    setTimeout(changeTarget, 5e3);
})();