Greasy Fork

Greasy Fork is available in English.

POE 网页市集道具转英文2

流放之路国服网页市集物品转换为国际服pob物品工具

目前为 2023-10-20 提交的版本,查看 最新版本

// ==UserScript==
// @name         POE 网页市集道具转英文2
// @namespace    http://tampermonkey.net/
// @version      0.0.3
// @description  流放之路国服网页市集物品转换为国际服pob物品工具
// @author       Rxdey
// @match        https://poe.game.qq.com/trade/*
// @icon         https://poecdn.game.qq.com/protected/image/tencent/favicon-32x32.png?v=1&key=WDwrBirzWbDsbHkc0BgCMQ
// @require      https://unpkg.com/[email protected]/dist/db.global.js
// @require      https://unpkg.com/[email protected]/dist/creater.global.js
// @require      https://unpkg.com/[email protected]/dist/translator.global.js
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';
    console.log('翻译复制初始化');

    const copyToClipboard = (txt, cb = () => { }) => {
        const node = document.createElement('textarea');
        node.value = txt;
        node.class = 'copy-txt';
        document.body.appendChild(node);
        node.select();
        document.execCommand('Copy');
        document.body.removeChild(node);
        cb();
    };
    const targetNode = document.querySelector('body');
    const config = { childList: true, subtree: true };



    const observer = new MutationObserver((mutationsList, observer) => {
        for (let mutation of mutationsList) {
            if (!["childList", "subtree"].includes(mutation.type)) return;
            if (!mutation.addedNodes || !mutation.addedNodes.length || mutation.addedNodes[0].className !== 'row' || !mutation.addedNodes[0].dataset) return;
            // console.log(observer)
            const target = mutation.addedNodes[0];
            if (!target.__vue__ || !target.__vue__.itemText) return;
            console.dir(target);
            // 新增按钮
            const leftEl = target.querySelector('.left');
            if (!leftEl) return;
            const btn = document.createElement('div');
            btn.className = 'copy-en';
            btn.title = '复制为英文';
            btn.setAttribute('style', `position: absolute;
            left: 84px;
            bottom: 8px;
            color: #fff;
            font-size: 14px;
            cursor: pointer;
            text-decoration: underline;`);
            btn.innerText = '复制为英文';
            leftEl.appendChild(btn);
            btn.addEventListener('click', () => {
                const text = target.__vue__.itemText;
                // 不先放里面翻译不完整
                let textarea = document.createElement('textarea');
                textarea.value = text;
                const factory = CnPoeTranslator.newBasicTranslatorFactory(CnPoeExportDb);
                const textTranslator = factory.getTextTranslator();
                const res = textTranslator.translate(textarea.value);
                textarea = null;
                copyToClipboard(res);
                target.__vue__.itemTextCopied();
            });
        }
    });
    observer.observe(targetNode, config);

    // observer.disconnect();
})();