// ==UserScript== // @name Bangumi 译名次要化或删除 // @namespace https://github.com/2Jelly2/Make-Translated-Names-Secondary-or-Removed-on-Bangumi // @version 0.16 // @icon https://bgm.tv/img/favicon.ico // @description Make Translated Names Secondary or Removed on Bangumi. // @author 時計坂しぐれ // @supportURL https://github.com/2Jelly2/Make-Translated-Names-Secondary-or-Removed-on-Bangumi/issues // @grant GM_setValue // @grant GM_getValue // @grant GM_listValues // @grant GM_registerMenuCommand // @match https://chii.in/* // @match https://bgm.tv/* // @match https://bangumi.tv/* // @downloadURL https://update.greasyfork.icu/scripts/478509/Bangumi%20%E8%AF%91%E5%90%8D%E6%AC%A1%E8%A6%81%E5%8C%96%E6%88%96%E5%88%A0%E9%99%A4.user.js // @updateURL https://update.greasyfork.icu/scripts/478509/Bangumi%20%E8%AF%91%E5%90%8D%E6%AC%A1%E8%A6%81%E5%8C%96%E6%88%96%E5%88%A0%E9%99%A4.meta.js // ==/UserScript== ( function() { 'use strict'; const url = location.href; const keys = GM_listValues(); if (!keys.includes("extinctionMode")) { GM_setValue("extinctionMode", false); } // Exchange original title names and translated ones // - with *false* to enable Exchange Mode. (default) // Remove translated title names completely, instead of exchange them with original ones // - with *true* to enable Distinction Mode; const extinctionMode = GM_getValue("extinctionMode"); GM_registerMenuCommand("Extinction Mode: " + (extinctionMode ? "🟢Enabled" : "⚪Disabled"), function(event) { GM_setValue("extinctionMode", !extinctionMode); location.reload(); }); if (url.match(/(chii.in|bgm.tv|bangumi.tv)*(\/|\/timeline)$/) != null) { modifyHomePage(); monitorTo(modifyCards); } else if (url.match(/(chii.in|bgm.tv|bangumi.tv)\/subject\//) != null) { modifySubjectPage(); } else if (url.match(/(chii.in|bgm.tv|bangumi.tv)\/mono$/) != null) { modifyMonoPage(); } else if (url.match(/(chii.in|bgm.tv|bangumi.tv)\/(person|character)\/[0-9]+/) != null) { if (url.match(/(chii.in|bgm.tv|bangumi.tv)\/(person|character)\/[0-9]+\/works(\?.*)?$/) != null) { modifyItems(); modifyPersonPage(); } else { modifyPersonPage(); } } else { modifyItems(); } function monitorTo(func) { func(); const observer = new MutationObserver(function (mutations){func();}); observer.observe(document.body, { childList: true, subtree: true }); } function modifyCards() { var cards = document.getElementsByClassName("card"); for (var i = 0; i < cards.length; i++) { var card = cards[i]; var info = card.parentElement.getElementsByTagName("a")[1]; var subtitle = card.getElementsByClassName("subtitle")[0]; if (card.getAttribute("ignore") == null) { var title = card.getElementsByClassName("title")[0].getElementsByTagName("a")[0]; if (info.getAttribute("data-subject-name") != null) { title.innerText = info.getAttribute("data-subject-name"); } else if(subtitle.innerText != "") { title.innerText = subtitle.innerText; } card.setAttribute("ignore", true); } } } function modifyItems() { var subjects = document.querySelectorAll("li.item"); for (var i = 0; i < subjects.length; i++) { var subject = subjects[i].getElementsByTagName("h3")[0]; var subtitle_element = subject.getElementsByTagName("small")[0]; if (subtitle_element != null) { var title_element = subject.getElementsByTagName("a")[0]; var translated_name = title_element.innerText; title_element.innerText = subtitle_element.innerText; if (!extinctionMode) { subtitle_element.innerText = translated_name; } else { subtitle_element.parentElement.removeChild(subtitle_element); } } } } function modifyPersonPage() { if (extinctionMode) { removeTranslatedNameFromInfobox(); removeSmallTaggedElement(document.querySelectorAll("h1.nameSingle")[0]); var subjects = document.querySelectorAll("li.item"); for (var i = 0; i < subjects.length; i++) { removeSmallTaggedElement(subjects[i].getElementsByClassName("inner")[0]); } } } function modifySubjectPage() { if (extinctionMode) { removeTranslatedNameFromInfobox(); removeTranslatedNameFromEpisodePopup(); var sections = document.getElementsByClassName("subject_section"); for (let i = 0; i < sections.length; i++) { removePopupAttributes(sections[i].getElementsByClassName("avatar")); } var character_boxes = document.getElementsByClassName("user"); for (let i = 0; i < character_boxes.length; i++) { var character = character_boxes[i].getElementsByClassName("tip_j")[0]; character.removeChild(character.getElementsByClassName("tip")[0]); character.removeChild(character.getElementsByTagName("br")[0]); } } } function modifyHomePage() { if (extinctionMode) { removeTranslatedNameFromEpisodePopup(); var cover_lists = document.getElementsByClassName("coverList"); for (let i = 0; i < cover_lists.length; i++) { var covers = cover_lists[i].getElementsByClassName("thumbTip"); for (let j = 0; j < covers.length; j++) { var text = covers[j].getAttribute("data-original-title").split("
", 1)[0]; covers[j].setAttribute("data-original-title", text); } } var watching_subject_titles = document.getElementsByClassName("headerInner"); for (let i = 0; i < watching_subject_titles.length; i++) { removePopupAttributes(watching_subject_titles[i].getElementsByClassName("textTip")); } removePopupAttributes(document.querySelectorAll("a.subjectItem.title.textTip")); } } function modifyMonoPage() { if (extinctionMode) { var cover_lists = document.getElementsByClassName("coversSmall"); for (let i = 0; i < cover_lists.length; i++) { var entities = cover_lists[i].getElementsByTagName("li"); for (let j = 0; j < entities.length; j++) { removeSmallTaggedElement(entities[j].getElementsByClassName("info")[0]); } } } } function removeTranslatedNameFromEpisodePopup() { var ep_popups = document.getElementsByClassName("prg_popup") for (let i = 0; i < ep_popups.length; i++) { var popup = ep_popups[i].getElementsByClassName("tip")[0]; if (popup.innerText.startsWith("中文标题:")) { var translated_text = popup.innerHTML.split("
", 1)[0]; popup.innerHTML = popup.innerHTML.replace(translated_text + "
", ""); } } } function removeTranslatedNameFromInfobox() { var infobox_1st_map = document.getElementById("infobox").getElementsByTagName("li")[0]; if (infobox_1st_map.getElementsByClassName("tip")[0].innerText.endsWith("中文名: ")) { infobox_1st_map.parentElement.removeChild(infobox_1st_map); } } function removeSmallTaggedElement(outerElement) { var elementsTaggedWithSmall = outerElement.getElementsByTagName("small"); if (elementsTaggedWithSmall.length > 0) { outerElement.removeChild(elementsTaggedWithSmall[0]); } } function removePopupAttributes(elementCollection) { for (var i = 0; i < elementCollection.length; i++) { elementCollection[i].removeAttribute("data-original-title"); } } } )();