Nyaa link

Provides nyaa link

// ==UserScript==
// @name         Nyaa link
// @license MIT
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Provides nyaa link
// @author       You
// @match        *://*.kitsu.app/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Function to handle the main logic
    const processPage = () => {
        try {
            // Find the <li> element containing <strong>Japanese (Romaji)</strong>
            const targetLi = Array.from(document.querySelectorAll('li')).find(li => {
                return li.querySelector('strong')?.textContent.trim() === 'Japanese (Romaji)';
            });

            if (!targetLi) return; // Exit if not found

            // Extract the text inside the <span> element within the found <li>
            const spanContent = targetLi.querySelector('span')?.textContent.trim();

            if (!spanContent) return; // Exit if no span content

            // Sanitize the string for use in a URL
            const sanitizedString = encodeURIComponent(spanContent);

            // Construct the URL
            const queryUrl = `https://nyaa.si/?q=${sanitizedString}`;

            // Check if the link already exists to avoid duplicates
            if (document.querySelector(`a[href='${queryUrl}']`)) return;

            // Create an image element for the favicon
            const faviconImg = document.createElement('img');
            faviconImg.src = 'https://nyaa.si/static/favicon.png';
            faviconImg.alt = 'Link';
            faviconImg.style.width = '16px'; // Optional: Adjust the size
            faviconImg.style.height = '16px';

            // Create the link element
            const linkElement = document.createElement('a');
            linkElement.href = queryUrl;
            linkElement.target = '_blank'; // Open in a new tab
            linkElement.appendChild(faviconImg);
            linkElement.className = 'nyaa-link'; // Add a unique class name

            // Append the link to the end of the element with class "media--title"
            const targetContainer = document.querySelector('.media--title');

            if (targetContainer) {
                const existingLinks = document.querySelectorAll('.nyaa-link');
                existingLinks.forEach(link => link.remove());
                targetContainer.appendChild(linkElement);
            }
        } catch (error) {
            console.error('Error occurred in the script:', error);
        }
    };

    // Observe DOM changes continuously for dynamic React updates
    const observeDOMChanges = () => {
        const observer = new MutationObserver(() => {
            processPage(); // Check and process whenever the DOM changes
        });

        observer.observe(document.body, { childList: true, subtree: true });
    };

    // Observe URL changes (useful for React sites)
    let previousUrl = location.href;
    const observeURLChanges = () => {
        const urlObserver = new MutationObserver(() => {
            if (location.href !== previousUrl) {
                previousUrl = location.href;
                processPage(); // Re-run the logic on URL change
            }
        });

        urlObserver.observe(document.body, { childList: true, subtree: true });
    };

    // Initial setup
    processPage();
    observeDOMChanges();
    observeURLChanges();
})();