Greasy Fork is available in English.

Bangumi/bgm.tv 显示中文标题,样式优化

我看不懂日文标题啊!

// ==UserScript==
// @name         Bangumi/bgm.tv 显示中文标题,样式优化
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  我看不懂日文标题啊!
// @author       Marsen
// @match        http*://bgm.tv/*
// @match        http*://bangumi.tv/*
// @match        http*://chii.in/*
// @icon         https://bgm.tv/img/favicon.ico
// @grant        GM_addStyle
// @run-at       document-start
// ==/UserScript==

(function () {
    'use strict';
    // 番剧管理器字号放大
    const TINY_MODE_FONT_SIZE = "1.2em";
    // 番剧管理器edit按钮是否启用
    const ENABLE_EDIT = false; // false, true
    const EDIT_BUTTON = "❤"; // edit或自定义

    // 全部页面:移除不常用按钮,页面优化
    GM_addStyle(`
        /* 隐藏doujin天窗联盟 */
        #navNeue2 #navMenuNeue li.doujin {
            display: none;
        }
        #navNeue2 #menuNeue {
            width: inherit;
        }
        /* 搜索框拉长 */
        #headerNeue2 #headerSearch input.textfield {
            width: initial;
        }
        /* 全局输入字体调大 */
        input[type=text], input[type=password], textarea {
            font-size: 1.2em;
        }
    `);
    let pathname = document.location.pathname;
    // 动画详情页:替换H1大标题,保留小字号原标题,话数按钮样式调节
    if (pathname.startsWith("/subject") || pathname.startsWith("/ep")) {
        // prg_list css
        GM_addStyle(`
            /* 话数按钮优化 */
            a.epBtnUnknown, a.epBtnWatched, a.epBtnAir, a.epBtnNA, a.epBtnQueue, a.epBtnToday, a.epBtnDrop {
                border: 1px solid #0000;
                border-radius: 2px;
                font-size: 1.3em !important;
            }
            ul.prg_list a, ul.prg_list a:active, ul.prg_list a:visited {
                padding: 2px;
                margin: 0 4px 6px 0;
            }
            /* hover高亮 */
            a.epBtnUnknown:hover,
            a.epBtnWatched:hover,
            a.epBtnAir:hover,
            a.epBtnNA:hover,
            a.epBtnQueue:hover,
            a.epBtnToday:hover,
            a.epBtnDrop:hover {
                background-color: orange;
                color: white !important;
                border: 1px solid #0000;
            }
            ul.prg_list a:hover {
                padding: 2px;
                -webkit-transform: scale(1.1);
            }
            /* 关灯环境 */
            html[data-theme='dark'] a.epBtnUnknown:hover,
            html[data-theme='dark'] a.epBtnWatched:hover,
            html[data-theme='dark'] a.epBtnAir:hover,
            html[data-theme='dark'] a.epBtnNA:hover,
            html[data-theme='dark'] a.epBtnQueue:hover,
            html[data-theme='dark'] a.epBtnToday:hover,
            html[data-theme='dark'] a.epBtnDrop:hover {
                background-color: orange;
                color: white;
                border: 1px solid #0000;
            }
        `);
        if (pathname.startsWith("/ep")) {
            // 章节讨论区右侧固定
            GM_addStyle(`
                #columnEpB {
                    position: -webkit-sticky;
                    position: sticky;
                    top: 10px;
                }
            `);
        }
        window.addEventListener('DOMContentLoaded', function () {
            let h1Title = document.querySelector("#headerSubject > h1 > a");
            if (h1Title.title != "") {
                let originalTitle = document.createElement("small");
                originalTitle.innerText = h1Title.text + " ";
                h1Title.parentNode.insertBefore(originalTitle, h1Title.nextElementSibling)
                h1Title.text = h1Title.title;
                let rightTitle = document.querySelector("#subject_inner_info > a");
                rightTitle.innerHTML = rightTitle.innerHTML.replace(rightTitle.title, h1Title.text);
            }
        });
    }
    // 登录后首页:替换进度管理标题,按钮样式调节
    else if (pathname == "/") {
        // tinyMode css
        GM_addStyle(`
            /* hide prgsPercentNum */
            #prgsPercentNum {
                display: none;
            }
            /* prg button */
            [id^='prg_'] {
                border: 1px solid #0000 !important;
                border-radius: 2px;
            }
            ul.prg_list {
                padding-top: 0.3em;
                line-height: 100%;
            }
            /* prg button hover */
            .tinyMode ul.prg_list a:hover {
                padding: 2px 2px;
                background-color: orange;
                color: white;
                -webkit-transform: scale(1.1);
            }
            /* 关灯环境 */
            html[data-theme='dark'] .tinyMode a.epBtnNA:hover, html[data-theme='dark'] a.sepBtnNA:hover {
                color: #FFF;
                border-top: initial
            }
        `)
        // 作品标题字号放大
        GM_addStyle(
            `[id^='subjectPanel'] > div.epGird > div > a:nth-last-of-type(1) {
                font-size: ` + TINY_MODE_FONT_SIZE +
            "}"
        );
        // 是否显示edit按钮
        if (ENABLE_EDIT) {
            GM_addStyle(`[id^='sbj_prg_'] {color: pink !important;}`);
        }
        else {
            GM_addStyle(`[id^='sbj_prg_'] {display: none}`);
        }
        // blockMode css
        GM_addStyle(`
            /* 话数按钮优化 */
            a.epBtnUnknown, a.epBtnWatched, a.epBtnAir, a.epBtnNA, a.epBtnQueue, a.epBtnToday, a.epBtnDrop {
                border: 1px solid #0000;
                border-radius: 2px;
                font-size: 1.3em !important;
            }
            ul.prg_list a {
                margin: 0 4px 6px 0;
                padding: 2px;
            }
            /* hover高亮 */
            a.epBtnUnknown:hover, a.epBtnWatched:hover, a.epBtnAir:hover, a.epBtnNA:hover, a.epBtnQueue:hover, a.epBtnToday:hover, a.epBtnDrop:hover {
                background-color: orange;
                color: white;
            }
            ul.prg_list a:hover {
                -webkit-transform: scale(1.1);
            }
        `);

        // 提速,轮询当前已加载的番剧项目,数量有变化就转换一遍
        let lastBgmCount = 0;
        let count = 0;
        const intervalId = setInterval(() => {
            let bgmList = document.querySelectorAll("#cloumnSubjectInfo .epGird .tinyHeader");
            if (bgmList && bgmList.length > lastBgmCount) {
                lastBgmCount = bgmList.length;
                convertTitle();
            }
            count++;
            if (count >= 80) {
                clearInterval(intervalId);
            }
        }, 100);
    }
    
    function convertTitle() {
        // tinyMode
        let tinyModeTitles = document.querySelectorAll("[id^='subjectPanel'] > div.epGird > div > a:nth-last-of-type(1)");
        tinyModeTitles.forEach(function (t) {
            if (t.attributes.title.value != "") {
                t.innerText = t.attributes.title.value;
                t.attributes.title.value = "";
            } else if (t.attributes["data-original-title"] && t.attributes["data-original-title"].value != "") {
                t.innerText = t.attributes["data-original-title"].value;
                t.attributes["data-original-title"].value = "";
            }
        });
        if (ENABLE_EDIT) {
            let edits = document.querySelectorAll("[id^='sbj_prg_']");
            edits.forEach(function (t) {
                t.innerText = EDIT_BUTTON;
            });
        }
        // blockMode
        let blockModeTitles = document.querySelectorAll("[id^='subjectPanel'] > div.header.clearit > div > h3 > a");
        blockModeTitles.forEach(function (t) {
            if (t.attributes.title.value != "") {
                t.innerText = t.attributes.title.value;
                t.attributes.title.value = "";
            } else if (t.attributes["data-original-title"] && t.attributes["data-original-title"].value != "") {
                t.innerText = t.attributes["data-original-title"].value;
                t.attributes["data-original-title"].value = "";
            }
        });
        let blockModeLeftTitles = document.querySelectorAll("#prgSubjectList li a.subjectItem.title.textTip");
        blockModeLeftTitles.forEach(function (t) {
            if (t.attributes.title.value != "") {
                t.querySelector("span").innerHTML = t.attributes.title.value;
                t.attributes.title.value = "";
            } else if (t.attributes["data-original-title"] && t.attributes["data-original-title"].value != "") {
                t.querySelector("span").innerHTML = t.attributes["data-original-title"].value;
                t.attributes["data-original-title"].value = "";
            }
        });
    }
})();