Direct YouTube Description URLs

Changes the masked urls in youtube descriptions to their direct versions.

// ==UserScript==
// @name         Direct YouTube Description URLs
// @namespace    https://www.jabedmiah.com
// @version      3.4.1
// @description  Changes the masked urls in youtube descriptions to their direct versions.
// @author       Jabed Miah
// @match        *.youtube.com/watch*
// @icon         https://www.google.com/s2/favicons?domain=youtube.com
// @supportURL   https://github.com/miahj1/direct-youtube-description-urls/issues
// @license      MIT
// ==/UserScript==

(new MutationObserver(elementCheck)).observe(document, {childList: true, subtree: true});

function descEventHandler() {
    const descExpanded = document.getElementsByClassName("style-scope ytd-text-inline-expander")[0];
    const allDescUrls = descExpanded.querySelectorAll("a[target='_blank']");

    for (let i = 0; i < allDescUrls.length; i++) {
        if (allDescUrls[i].href === allDescUrls[i].text) { break; }

        allDescUrls[i].href = allDescUrls[i].text = ytUriDecoder(allDescUrls[i].href);
    }
}

function ytUriDecoder(uglyUrl) {
    let directUrl = uglyUrl.split("q=")[1].split("&v")[0];
    return decodeURIComponent(directUrl)
}

function elementCheck(changes, observer) {
    const desc = document.getElementsByClassName("item style-scope ytd-watch-metadata")[2];

    if (desc) {
        ["click", "mouseenter"].forEach((event) => {
            desc.addEventListener(event, descEventHandler);
        });

        observer.disconnect();
    }
}