Greasy Fork

来自缓存

Bangumi 评分隐藏

隐藏Bangumi中首页、条目页、搜索页和标签页的全站评分

// ==UserScript==
// @name         Bangumi 评分隐藏
// @namespace    https://bgm.tv/user/662064
// @version      2.3.1
// @description  隐藏Bangumi中首页、条目页、搜索页和标签页的全站评分
// @author       板斧青凤
// @match        https://bgm.tv/subject/*
// @match        https://bangumi.tv/subject/*
// @match        https://bgm.tv/subject_search/*
// @match        https://bangumi.tv/subject_search/*
// @match        https://bgm.tv/
// @match        https://bangumi.tv/
// @match        https://bgm.tv/*/tag/*
// @match        https://bangumi.tv/*/tag/*
// @match        https://bgm.tv/*/browser*
// @match        https://bangumi.tv/*/browser*
// @match        https://bgm.tv/person/*/works*
// @match        https://bangumi.tv/person/*/works*
// @match        https://bgm.tv/user/*/timeline
// @match        https://bangumi.tv/user/*/timeline
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    function createToggleButton(text, onClick, isTagPage) {
        const button = document.createElement('button');
        button.textContent = text;
        button.style.cssText = isTagPage ? 'margin: 10px;' : 'display: block; margin: 10px auto; text-align: center;';
        button.addEventListener('click', onClick);
        return button;
    }

    function hideElements(elements) {
        elements.forEach(element => {
            element.style.display = 'none';
        });
    }

    function toggleElementsDisplay(elements, button) {
        const isHidden = elements[0].style.display === 'none';
        elements.forEach(element => {
            element.style.display = isHidden ? '' : 'none';
        });
        button.textContent = isHidden ? '隐藏评分' : '显示评分';
    }

    function observeAndHideElements(selectors, callback) {
        const observer = new MutationObserver((mutationsList, observer) => {
            const elements = Array.from(document.querySelectorAll(selectors));
            if (elements.length > 0) {
                hideElements(elements);
                observer.disconnect();
                if (typeof callback === 'function') {
                    callback(elements);
                }
            }
        });
        observer.observe(document.documentElement, { childList: true, subtree: true });
    }

    function handleSubjectPage() {
        observeAndHideElements('div[class*="global_rating"], div[id="ChartWarpper"]', (elementsToHide) => {
            const ratingDiv = document.querySelector('div[rel="v:rating"]');
            if (ratingDiv) {
                const toggleButton = createToggleButton('显示评分', () => {
                    toggleElementsDisplay(elementsToHide, toggleButton);
                }, false);
                ratingDiv.parentNode.insertBefore(toggleButton, ratingDiv);
            }
        });
    }

    function handleTimeline() {
        observeAndHideElements('.starstop-one, .fade', (elementsToHide) => {
            const timelineTabs = document.getElementById('timelineTabs');
            if (timelineTabs) {
                const toggleButton = createToggleButton('显示评分', () => {
                    toggleElementsDisplay(elementsToHide, toggleButton);
                }, false);
                const li = document.createElement('li');
                li.appendChild(toggleButton);
                timelineTabs.appendChild(li);
            }
        });
    }

    function handleBrowserToolsPage() {
        observeAndHideElements('.starstop-s, .fade', (elementsToHide) => {
            const browserTools = document.getElementById('browserTools');
            if (browserTools) {
                const toggleButton = createToggleButton('显示评分', () => {
                    toggleElementsDisplay(elementsToHide, toggleButton);
                }, true);
                browserTools.appendChild(toggleButton);
            }
        });
    }

    if (/subject\/\d+/.test(window.location.pathname)) {
        handleSubjectPage();
    } else if (/^\/user\/.*\/timeline/.test(window.location.pathname) || window.location.pathname === '/') {
        handleTimeline();
    } else if (
        /subject_search/.test(window.location.pathname) ||
        /\/tag\//.test(window.location.pathname) ||
        /\/browser/.test(window.location.pathname) ||
        /\/person\/\d+\/works/.test(window.location.pathname)
    ) {
        handleBrowserToolsPage();
    }
})();