MDM 翻译

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)
    }
})()
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元