AO3: Go to Comments

When clicking Comments button, jump to Comments section automatically.

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name         AO3: Go to Comments
// @namespace    https://greasyfork.org/en/users/163551-vannius
// @version      1.3
// @license      MIT
// @description  When clicking Comments button, jump to Comments section automatically.
// @author       Vannius
// @match        https://archiveofourown.org/*
// @grant        none
// ==/UserScript==

(function () {
    if (/archiveofourown\.org\/(collections\/[^/]+\/)?works\/[0-9]+/.test(window.location.href)) {
        // Get Comments/Hide Comments tags
        const commentTagTop = document.getElementById('show_comments_link_top');
        const commentTagBottom = document.getElementById('show_comments_link');
        // If there is no comment, commentTagBottom is undefined.
        // And there is no need to add go to comments feature.
        if (!commentTagBottom) return;

        const mutationObserver = new MutationObserver(mutations => {
            const commentFlag = mutations
                .map(x => x.addedNodes.length)
                .reduce((p, x) => p + x);

            if (commentFlag) {
                const sleep = msec => new Promise(resolve => setTimeout(resolve, msec));

                (async () => {
                    await sleep(1000);
                    window.location.href = "#comments_placeholder";
                })();
            }
            mutationObserver.disconnect();
        });

        // Add click event to go to #comments_placeholder
        const target = document.getElementById('comments_placeholder');
        const options = { childList: true };
        for (let commentTag of [commentTagTop, commentTagBottom]) {
            commentTag.addEventListener('click', () => {
                mutationObserver.observe(target, options);
            });
        }
    }
})();