Greasy Fork

Greasy Fork is available in English.

AO3: Tag Hider

Add hide/show tags button to browsing pages, hide/show data button to viewing pages on AO3.

当前为 2018-06-19 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        AO3: Tag Hider
// @namespace    http://greasyfork.icu/en/users/163551-vannius
// @version     1.5
// @description Add hide/show tags button to browsing pages, hide/show data button to viewing pages on AO3.
// @author       Vannius
// @match        http*://archiveofourown.org/*
// @grant       GM_addStyle
// ==/UserScript==

(function() {
    // Config
    const MAX_TAGS_ON_BROWSING_PAGE = 15;
    const HIDE_WORK_DATA_AUTOMATICALLY_ON_VIEW_PAGE = true;


    if (/archiveofourown\.org\/(collections\/[^\/]+\/)?works\/[0-9]+/.test(window.location.href)) {
        //viewing page
        const dataTag = document.getElementsByClassName('work meta group')[0];

        // Make Show Data/Hide Data button
        const btn = document.createElement('a');
        btn.appendChild(document.createTextNode(''));

        // Hide or Show data
        if (HIDE_WORK_DATA_AUTOMATICALLY_ON_VIEW_PAGE) {
            dataTag.style.display = 'none';
            btn.textContent = 'Show Data'
        }else{
            dataTag.style.display = 'block';
            btn.textContent = 'Hide Data'
        }

        // Add click event
        btn.addEventListener('click', function() {
            if (dataTag.style.display == 'none') {
                dataTag.style.display = 'block';
                btn.textContent = 'Hide Data'
            }else{
                dataTag.style.display = 'none';
                btn.textContent = 'Show Data'
            }
        });

        // Add Show Data/Hide Data button to menu
        const liTag = document.createElement('li');
        liTag.appendChild(btn);

        const fragment = document.createDocumentFragment();
        fragment.appendChild(document.createTextNode('    '));
        fragment.appendChild(liTag);
        fragment.appendChild(document.createTextNode('\n\n'));

        const menu = document.getElementsByClassName('work navigation actions')[0];
        menu.appendChild(fragment);
    } else {
        // browsing page
        const articles = document.getElementById('main').getElementsByClassName('blurb');

        // Add style for Show Tags/Hide Tags Button.
        GM_addStyle("button.taghider {padding: 0.5px 2px;}");
        GM_addStyle("button.taghider:hover {color: #900; box-shadow: inset 2px 2px 2px #bbb;}");
        GM_addStyle("button.taghider:focus {color: #900; box-shadow: inset 2px 2px 2px #bbb;}");
        GM_addStyle("button.taghider:active {background: #ccc; box-shadow: inset 1px 1px 3px #333;}");

        // Add Show Tags/Hide Data Tags to each article.
        for (let article of articles) {
            const ao3tag = article.getElementsByClassName('tags commas')[0];

            // Make Show Tags/Hide Data Tags
            const btn = document.createElement('button');
            btn.type = 'button';
            btn.className = 'taghider';
            btn.appendChild(document.createTextNode(''));

            // Hide or Show tags
            if (ao3tag.children.length > MAX_TAGS_ON_BROWSING_PAGE) {
                ao3tag.style.display = 'none';
                btn.textContent = 'Show Tags';
            }else{
                ao3tag.style.display = 'block';
                btn.textContent = 'Hide Tags';
            }

            // Add click event
            btn.addEventListener('click', function() {
                if (ao3tag.style.display == 'none') {
                    ao3tag.style.display = 'block';
                    btn.textContent = 'Hide Tags';
                }else{
                    ao3tag.style.display = 'none';
                    btn.textContent = 'Show Tags';
                }
            });

            // Add Show Data/Hide Data button to right after fandoms.
            const fandomTag = article.getElementsByClassName('header module')[0].children[1];
            const fragment = document.createDocumentFragment();
            fragment.appendChild(document.createTextNode(' '));
            fragment.appendChild(btn);
            fandomTag.insertBefore(fragment, fandomTag.lastChild);
        }
    }
})();