kemono.su navbar duplicator

Add another navbar to post end

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name          kemono.su navbar duplicator
// @namespace       http://tampermonkey.net/
// @version        1.2
// @description     Add another navbar to post end
// @match         https://kemono.su/*
// @match         https://kemono.cr/*
// @author         rainbowflesh
// @grant         none
// @license MIT
// ==/UserScript==

(function () {
    'use strict';

    let isNavCloned = false;
    let clonedNav = null;

    function insertAfter(newNode, referenceNode) {
        referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
    }

    function cloneNav() {
        const nav = document.querySelector("nav.post__nav-links");
        const body = document.querySelector("div.post__body");

        if (nav && body && !isNavCloned) {
            clonedNav = nav.cloneNode(true);
            insertAfter(clonedNav, body);
            isNavCloned = true;
            setupHrefObserver(nav, clonedNav);
        }
    }

    function setupHrefObserver(originalNav, clonedNav) {
        // Get the original and cloned "next" links
        const originalNext = originalNav.querySelector(".post__nav-link.next");
        const clonedNext = clonedNav.querySelector(".post__nav-link.next");

        if (!originalNext || !clonedNext) return;

        // Observe changes to the href attribute on the original next link
        const hrefObserver = new MutationObserver(() => {
            // Sync href from original to cloned
            clonedNext.href = originalNext.href;
        });

        hrefObserver.observe(originalNext, { attributes: true, attributeFilter: ['href'] });

        // Initial sync
        clonedNext.href = originalNext.href;
    }

    const bodyObserver = new MutationObserver(() => {
        cloneNav();
    });

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

    window.addEventListener('load', cloneNav);
})();