// ==UserScript== // @name POE 网页市集道具转英文2 // @namespace http://tampermonkey.net/ // @version 0.0.4 // @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/cn-poe-export-db@0.0.11/dist/db.global.js // @require https://unpkg.com/pob-building-creater@0.0.10/dist/creater.global.js // @require https://unpkg.com/cn-poe-translator@0.2.2/dist/translator.global.js // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; 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 setButton = () => { const targets = Array.from(document.querySelectorAll('.row[data-id]')); console.log(targets); if (!targets || !targets.length) return; targets.forEach(target => { if (target.querySelector('.copy-en')) return; 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(); }); }); }; const observer = new MutationObserver((mutationsList, observer) => { for (let mutation of mutationsList) { if (mutation.target.className !== 'resultset') return; setButton(); } }); console.log('翻译复制初始化'); const targetNode = document.querySelector('body'); const config = { childList: true, subtree: true }; observer.observe(targetNode, config); })();