您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Master Duel Meta 卡片名称、效果翻译
// ==UserScript== // @name MDM 翻译 // @description Master Duel Meta 卡片名称、效果翻译 // @version 0.3 // @author Fwindy // @match https://www.masterduelmeta.com/* // @icon https://www.google.com/s2/favicons?domain=masterduelmeta.com // @namespace https://github.com/Fwindy // @connect ygocdb.com // @grant GM_xmlhttpRequest // @grant window.onurlchange // @license MIT // ==/UserScript== (function () { "use strict" onload = () => { translate() const observer = new MutationObserver(tooltipTranslate) const config = { attributes: false, childList: true, characterData: false, } observer.observe(document.querySelector("#tooltip-root"), config) } if (window.onurlchange === null) { window.addEventListener("urlchange", translate) } function translate () { if (location.href.match(/masterduelmeta.com\/cards/)?.length > 0) { const hrefName = decodeURIComponent( decodeURI(/([^\/]*)$/.exec(location.href)[0]) ) const cardName = document.getElementsByClassName("h1")[0] const cardType = document.getElementsByClassName("monster-types")[0] const cardDescription = document.getElementsByClassName("card-desc")[0] GM_xmlhttpRequest({ method: "GET", url: "https://ygocdb.com/api/v0/?search=" + hrefName, responseType: "json", onload: function (r) { if (r.status === 200) { const result = r.response.result.filter( (x) => x.en_name === hrefName || x.wiki_en === hrefName )[0] || r.response.result[0] cardName.innerText = result.cn_name if (cardType?.innerText) cardType.innerText = /^[^\/]*/.exec( result.text.types )[0] if (result.text.pdesc) { [...cardDescription.children].forEach(x => x.remove()) const defaultClass = cardDescription.parentElement.className appendNode(cardDescription, defaultClass+' pendulum-eff', '[灵摆效果]') appendNode(cardDescription, defaultClass, result.text.pdesc) appendNode(cardDescription, defaultClass+' monster-eff', '[怪兽效果]') appendNode(cardDescription, defaultClass, result.text.desc) } else { cardDescription.innerText = result.text.desc } } }, }) } } function tooltipTranslate () { const cardName = document.querySelector( "#tooltip-root div.card-specs > div.spec-container > span > b" ) const cardType = document.querySelector("#tooltip-root span.monster-types > b") const cardDescription = document.querySelector("#tooltip-root span.card-desc") if (cardName?.innerText) { GM_xmlhttpRequest({ method: "GET", url: "https://ygocdb.com/api/v0/?search=" + cardName.innerText, responseType: "json", onload: function (r) { if (r.status === 200) { const result = r.response.result.filter( (x) => x.en_name === cardName.innerText || x.wiki_en === cardName.innerText )[0] || r.response.result[0] if (result?.cn_name) { cardName.innerText = result.cn_name if (cardType) cardType.innerText = /^[^\/]*/.exec( result.text.types )[0] if (result.text.pdesc) { [...cardDescription.children].forEach(x => x.remove()) const defaultClass = cardDescription.parentElement.className appendNode(cardDescription, defaultClass+' pendulum-eff', '[灵摆效果]') appendNode(cardDescription, defaultClass, result.text.pdesc) appendNode(cardDescription, defaultClass+' monster-eff', '[怪兽效果]') appendNode(cardDescription, defaultClass, result.text.desc) } else { cardDescription.innerText = result.text.desc } } } }, }) } } function appendNode (target, className, text) { const span = document.createElement('span') span.className = className span.innerText = text target.appendChild(span) } })()