Greasy Fork 支持简体中文。

点击(最终幻想XIV || 最终幻想14 || FFXIV || FF14)中文维基的物品名复制物品名或跳转至Universalis

个人简陋制作 点击复制最终幻想XIV中文维基的物品名 一键跳转Universalis

// ==UserScript==
// @name         点击(最终幻想XIV || 最终幻想14 || FFXIV || FF14)中文维基的物品名复制物品名或跳转至Universalis
// @version      0.8
// @author       Atail
// @description  个人简陋制作 点击复制最终幻想XIV中文维基的物品名 一键跳转Universalis
// @match        ff14.huijiwiki.com/wiki/*
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js
// @grant        GM_notification
// @license      GNU GPLv3
// @namespace http://tampermonkey.net/
// ==/UserScript==

'use strict'

const copyIt = (name) => {
    let dom = document.createElement("textarea");
    dom.value = name;
    dom.setAttribute('style', 'display: block;width: 1px;height: 1px;');
    document.body.appendChild(dom);
    dom.select();
    let result = document.execCommand('copy');
    document.body.removeChild(dom);
    const chromeNotification = {
        text: "『" + name + "』复制成功",
        title: "提示",
        image: "https://av.huijiwiki.com/site_avatar_ff14_l.png?r=0.97450500%201644674382",
        timeout: 2000,
    }
    GM_notification(chromeNotification, () => {});
}

$(document).ready(() => {
    try {
        // 设置按钮CSS
        const extraCss = document.createElement("style")
        extraCss.type = "text/css"
        extraCss.innerHTML = ".copy-btn{border: 1px dashed #d9d9d9; border-radius: 2px; color: #FFFFFF; font-size: 14px; line-height: 1.5715; margin-left: 10px; background: #1C1C1C;}";
        document.getElementsByTagName("head")[0].appendChild(extraCss)
    } catch (error) {
        console.log("CSS错误:", error)
    }

    try {
        // 标题面板
        const infobox_item_name_title = document.getElementsByClassName('infobox-item--name-title')[0];
        let itemName = infobox_item_name_title.innerText;
        const copyBtn = document.createElement("button");
        copyBtn.innerHTML = "复制";
        copyBtn.className = "copy-btn";
        copyBtn.addEventListener("click", () => {
            copyIt(itemName);
        });
        infobox_item_name_title.appendChild(copyBtn)

        // 跳转
        let noforSale = true;

        try {
            const color_warning = document.getElementsByClassName("color-warning")[0];
            for (let i = 0; i < color_warning.childNodes.length; i++) {
                const item = color_warning.childNodes[i];
                noforSale = item.innerText == "不可在市场出售" ? false : noforSale
            }
        } catch (error) {
            console.log("universalis错误:", error)
        }

        if (noforSale) {
            const copyBtn = document.createElement("button");
            copyBtn.innerHTML = "跳转到universalis";
            copyBtn.className = "copy-btn";
            copyBtn.addEventListener("click", () => {
                const external = document.getElementsByClassName("external");
                let itemid = 0;
                for (let i = 0; i < external.length; i++) {
                    if (external[i].innerText.includes("Garland")) {
                        const itemurl = external[i].href;
                        const lidx = itemurl.lastIndexOf("/");
                        itemid = itemurl.substring(lidx, itemurl.length)
                    }
                }
                window.location.href = "https://universalis.app/market" + itemid;
            });
            infobox_item_name_title.appendChild(copyBtn)
        }
    } catch (error) {
        console.log("标题面板错误:", error)
    }

    try {
        // 各语言名称面板
        const img_v_align_baseline = document.getElementsByClassName('img-v-align-baseline')[0].childNodes;
        img_v_align_baseline.forEach((child, index) => {
            const itemName = child.innerText;
            const copyBtnMuti = document.createElement("button");
            copyBtnMuti.innerHTML = "复制"
            copyBtnMuti.className = "copy-btn";
            copyBtnMuti.addEventListener("click", () => {
                copyIt(itemName);
            });
            child.appendChild(copyBtnMuti)
        })
    } catch (error) {
        console.log("各语言名称面板错误:", error)
    }

    try {
        // 制作配方面板
        const item_craft_list = document.getElementsByClassName('item-craft-list')[0].childNodes[0].childNodes[1].childNodes;
        item_craft_list.forEach((child, index) => {
            const copyBtnMuti = document.createElement("button");
            copyBtnMuti.innerHTML = "复制"
            copyBtnMuti.className = "copy-btn";
            copyBtnMuti.addEventListener("click", () => {
                let itemName = child.innerText;
                const idx = itemName.indexOf(" ×");
                if (idx != -1) {
                    itemName = itemName.substring(0, idx);
                }
                copyIt(itemName);
            });
            child.appendChild(copyBtnMuti)
        })
    } catch (error) {
        console.log("制作配方面板错误:", error)
    }

    try {
        // 兑换获得面板
        const spanlist = document.getElementsByTagName('span')
        let count = 0;
        for (let i = 0; i < spanlist.length; i++) {
            const thisSpan = spanlist[i];
            thisSpan.innerText == "通过兑换获得" ? count++ : null;
            if (thisSpan.innerText == "通过兑换获得" && count > 1) {
                const wikitable = thisSpan.parentNode.nextSibling;
                const wikiTableTrList = wikitable.childNodes[0].childNodes[0].childNodes;
                const listarray = [].slice.call(wikiTableTrList);
                const trueList = listarray.slice(1, listarray.length);
                for (let j = 0; j < trueList.length; j++) {
                    const tdList = trueList[j].childNodes;
                    for (let k = 0; k < tdList.length - 1; k++) {
                        const copyBtnMuti = document.createElement("button");
                        copyBtnMuti.innerHTML = "复制"
                        copyBtnMuti.className = "copy-btn";
                        copyBtnMuti.addEventListener("click", () => {
                            let itemName = tdList[k].childNodes[0].innerText;
                            const idx = itemName.indexOf(" ×");
                            if (idx != -1) {
                                itemName = itemName.substring(0, idx);
                            }
                            copyIt(itemName);
                        });
                        tdList[k].childNodes[0].appendChild(copyBtnMuti)
                    }
                }
            }
        }
    } catch (error) {
        console.log("兑换面板错误:", error)
    }

    try {
        // 兑换面板
        const spanlist = document.getElementsByTagName('span')
        let count = 0;
        for (let i = 0; i < spanlist.length; i++) {
            const thisSpan = spanlist[i];
            thisSpan.innerText == "用于兑换" ? count++ : null;
            if (thisSpan.innerText == "用于兑换" && count > 1) {
                const wikitable = thisSpan.parentNode.nextSibling;
                const wikiTableTrList = wikitable.childNodes[0].childNodes[0].childNodes;
                const listarray = [].slice.call(wikiTableTrList);
                const trueList = listarray.slice(1, listarray.length);
                for (let j = 0; j < trueList.length; j++) {
                    const tdList = trueList[j].childNodes;
                    for (let k = 0; k < tdList.length - 1; k++) {
                        const copyBtnMuti = document.createElement("button");
                        copyBtnMuti.innerHTML = "复制"
                        copyBtnMuti.className = "copy-btn";
                        copyBtnMuti.addEventListener("click", () => {
                            let itemName = tdList[k].childNodes[0].innerText;
                            const idx = itemName.indexOf(" ×");
                            if (idx != -1) {
                                itemName = itemName.substring(0, idx);
                            }
                            copyIt(itemName);
                        });
                        tdList[k].childNodes[0].appendChild(copyBtnMuti)
                    }
                }
            }
        }
    } catch (error) {
        console.log("兑换面板错误:", error)
    }
})