Greasy Fork

Greasy Fork is available in English.

WarframeMarketTranslationPlus

WarframeMarket Translation 增强版,翻译 WarframeMarket 的商品对照中英文,英文游戏购买可以直接快速看见商品名,不需要开两个网页对照了,改自Boomer的WarframeMarket Translation http://greasyfork.icu/users/1327824

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         WarframeMarketTranslationPlus
// @version      1.1
// @description  WarframeMarket Translation 增强版,翻译 WarframeMarket 的商品对照中英文,英文游戏购买可以直接快速看见商品名,不需要开两个网页对照了,改自Boomer的WarframeMarket Translation http://greasyfork.icu/users/1327824
// @author       Kaboy
// @match        https://warframe.market/zh-hans/profile/*
// @icon         https://warframe.market/favicon.ico
// @grant        unsafeWindow
// @license      MIT
// @namespace
// @namespace 
// ==/UserScript==

// 定义一个空数组来记录值,记录该商品的行是否被生成过出售语句中
const recordedValues = ["想要卖"];
// 创建一个标志来跟踪是否已经插入
let isInserted = false;

// 创建允许快速复制的快速出售裂罅武器文本框
function createPurpleCardSellsStatementTextBox() {
    // 如果已经插入过,则不再执行
    if (isInserted) {
        return;
    }

    // 查找目标元素位置
    var targetElement = document.querySelector('#panel > section.flex--root.ad__line--je1R0 > div.container');

    // 创建一个新的 div 元素
    var purpleCardSellsStatementTextBox = document.createElement('div');

    // 使用正确的方法设置类名
    purpleCardSellsStatementTextBox.classList.add('row', 'auction-entry__body', 'no-gutters');

    // 组装武器名称
    const outputString = recordedValues.join(" ");
    // purpleCardSellsStatementTextBox.textContent = outputString;

    // 创建一个 span 元素
    var purpleCardSellsStatementSpan = document.createElement('span');
    purpleCardSellsStatementSpan.textContent = outputString;

    // 将 span 元素添加到 div 中
    purpleCardSellsStatementTextBox.appendChild(purpleCardSellsStatementSpan);
    // 将新的 div 元素插入到目标元素中
    targetElement.appendChild(purpleCardSellsStatementTextBox);

    // 设置标志为 true,表示已经插入过
    isInserted = true;



}
function handleTrans1() {

            var commonProductPath = document.querySelector("#panel > section.user__profile.content--UwhYJ.grow--Q24fj > div.content__header--mFlr5.flex-root > div.container > div > ul > li:nth-child(1) > a");
            var crackTheCommodityPath = document.querySelector("#panel > section.user__profile.content--UwhYJ.grow--Q24fj > div.content__header--mFlr5.flex-root > div.container > div > ul > li:nth-child(2) > a");

            // 判断当前是否在普通 "订单" 页面
            if (commonProductPath.className == "link smartLink--bBcyL active") {
                // 商品内容
                let ProductContents = document.querySelectorAll("div.orders--uU9cA > div > div")
                // let ProductContents = document.getElementsByClassName("infinite-translate");
                let WarframeMarketWantToSell = ProductContents[0];
                let re =`div.orders--uU9cA > div > div >`
                let WarframeMarketWantToSellNode = Array.from(document.querySelectorAll( `${re} div`));
                // 测试使用
                // console.log("WarframeMarketWantToSellNode 长度为 :" + WarframeMarketWantToSellNode.length);

                // 加宽显示
                document.querySelector("div.content__body--qkyqR.flex--root > div.skin.flex--left")?.classList?.remove('flex--left')
                document.querySelector("div.content__body--qkyqR.flex--root > div:nth-child(1) > div").style.width = '280px'
                document.querySelector(`div.order__content--ORU7n`).style.width='1300px'

                // 使用 for 循环遍历WarframeMarketWantToSellNode并修改匹配的元素
                for (let i = 0; i < WarframeMarketWantToSellNode.length; i++) {

                    // 选择 商品的超链接 从中截取英文名称
                    let selector =  `${re} div:nth-child(${i+1}) > div > div.order-own__item-name--K7IDS > a`;
                    // let selector = `#panel > section.user__profile.content--UwhYJ.grow--Q24fj > div.content__body--qkyqR.flex--root > div.container > div.order__content--ORU7n > div.sellOrders--nsRSO.listingSell > div.infinite-scroll > div > div:nth-child(${i + 1}) > div.order-own__item-name--K7IDS > a`;

                    //减少宽度
                    document.querySelectorAll(`${re} div:nth-child(${i+1}) > div`).forEach(x=>x.style.width='580px');

                    let selectorElement = document.querySelector(selector);
                    // 给超链接标签添加些缩进,方便更好的复制
                    // 处理 英文名称
                    if (!selectorElement)
                        continue
                    let SelectorTheEnglishNameOfTheProduct = selectorElement.getAttribute("href").replace("/zh-hans/items/", "").replace(/\?.+/g, "");
                    // 选择 商品名称
                    let elementToModify = selector + ` > span`;
                    let elementToModifyElement = document.querySelector(elementToModify);

                    let formattedName = SelectorTheEnglishNameOfTheProduct.replace(/(?:^|_)(\w)/g, (match, p1) => p1.toUpperCase()).replace(/_/g, '').replace(/(\w)([A-Z])/g, '$1 $2');
                    formattedName = formattedName.charAt(0).toUpperCase() + formattedName.slice(1);
                    // 将首字母大写


                    let selectorElement2 = document.querySelectorAll(selector)[1];
                    let SelectorTheEnglishNameOfTheProduct2;
                    let formattedName2;
                    if (selectorElement2){
                        SelectorTheEnglishNameOfTheProduct2 = selectorElement2.getAttribute("href").replace("/zh-hans/items/", "").replace(/\?.+/g, "");
                        formattedName2 = SelectorTheEnglishNameOfTheProduct2.replace(/(?:^|_)(\w)/g, (match, p1) => p1.toUpperCase()).replace(/_/g, '').replace(/(\w)([A-Z])/g, '$1 $2');
                        formattedName2 = formattedName2.charAt(0).toUpperCase() + formattedName2.slice(1);
                        let elementToModifyElement2 = document.querySelectorAll(elementToModify)[1];
                        if (!elementToModifyElement2.innerHTML.includes("|"))
                            elementToModifyElement2.innerHTML = elementToModifyElement2.innerHTML + " | " + "( " + formattedName2 + " )";
                    }

                    // 如果该行已经插入过内容则跳过,判断条件为 被插入了 " | "
                    if (elementToModifyElement.innerHTML.includes("|")) {
                        continue; // 包含 "|"
                    } else {
                        // 执行插入语句
                        (function (index) {
                            // 在这里执行你想要的修改操作,例如:
                            elementToModifyElement.innerHTML = elementToModifyElement.innerHTML + " | " + "( " + formattedName + " )";

                            // 从图片alt里面获取中文


                            let imgPath =  `${re} div:nth-child(${i + 1}) > div > div.order-own__item-icon--aCi6u > a > img`; // 需要确保选择的是 img 元素
                            let generalMerchandisePictureElements = document.querySelector(imgPath);

                            console.log('图片元素:', generalMerchandisePictureElements);

                            let imgAlt = generalMerchandisePictureElements ? generalMerchandisePictureElements.alt : null;

                            // 调试输出
                            console.log('图片alt:', imgAlt);

                            // 写个复制按钮。方便复制名称
                            const button = document.createElement('button');
                            button.className = "btn btn__light--c9XBJ";
                            button.tabIndex = 0;
                            button.type = "button";
                            button.innerHTML = `
                            <div>
                                <svg class="wfm-icon icon-check" viewBox="0 0 512 512">
                                    <use xlink:href="/static/build/resources/wfm-icons-ef054e.svg#icon-check"></use>
                                </svg>
                                <span>` + "复制" + `</span>
                            </div>
                        `;
                            button.imgAlt = imgAlt;

                            // 添加点击事件监听器
                            button.addEventListener('click', function () {
                                if (imgAlt) {
                                    navigator.clipboard.writeText(imgAlt).then(() => {
                                        console.log('复制成功:', imgAlt);
                                    }).catch(err => {
                                        console.error('复制失败:', err);
                                    });
                                } else {
                                    console.log('没有内容可以复制');
                                }
                            });

                            // 将按钮插入到合适的位置
                            let buttonContainer = document.querySelector( `${re} div:nth-child(${index + 1}) > div > div.order-own__buttons--E1wap > div:nth-child(1)`); // 更新为你的按钮容器选择器
                            // let buttonContainer = document.querySelector(`#panel > section.user__profile.content--UwhYJ.grow--Q24fj > div.content__body--qkyqR.flex--root > div.container > div.order__content--ORU7n > div.sellOrders--nsRSO.listingSell > div.infinite-scroll > div > div:nth-child(${index + 1}) >  div.order-own__buttons--E1wap > div:nth-child(1)`); // 更新为你的按钮容器选择器

                            if (buttonContainer) {
                                buttonContainer.appendChild(button);
                            }
                        })(i);
                    }
                }

            }




            // 判断当前是否在裂罅 "拍卖" 页面
            if (crackTheCommodityPath.className == "link smartLink--bBcyL active") {

                // 商品内容
                let ProductContents = document.getElementsByClassName("infinite-translate");
                let WarframeMarketWantToSell = ProductContents[0];
                let WarframeMarketWantToSellNode = Array.from(WarframeMarketWantToSell.childNodes);
                // console.log("WarframeMarketWantToSellNode 长度为 :" + WarframeMarketWantToSellNode.length);

                // 使用 for 循环遍历WarframeMarketWantToSellNode并修改匹配的元素
                for (let i = 0; i < WarframeMarketWantToSellNode.length; i++) {

                    // 裂罅商品路径
                    let crackTheCommodityPath = `#panel > section.user__profile.content--UwhYJ.grow--Q24fj > div.content__body--qkyqR.flex--root > div.container > div.infinite-scroll > div > section:nth-child(${i + 1}) > div.row.auction-entry__header.no-gutters > div:nth-child(1) > div > a`;
                    // 图片路径
                    var crackProductImagePath = crackTheCommodityPath + " > img";
                    // 名称路径
                    var crackTradeNamePath = crackTheCommodityPath + " > span";

                    // 选择商品的超链接从中截取英文名称
                    // 裂罅商品图片元素
                    let crackedProductImageElements = document.querySelector(crackProductImagePath);
                    // 获取到当前图片src里面的文字文本
                    var attribute = crackedProductImageElements.getAttribute("src");
                    // 处理文字文本取出英文武器名称
                    var theEnglishCrackNameObtained = attribute.substring(attribute.indexOf("/thumbs/") + "/thumbs/".length, attribute.indexOf(".", attribute.indexOf("/thumbs/")));
                    // 一行代码实现找到/thumbs/和第一个.之间的内容

                    let elementToModifyElement = document.querySelector(crackTradeNamePath);
                    // 如果该行已经插入过内容则跳过,判断条件为 被插入了 " | "



                    if (elementToModifyElement.innerHTML.includes("|")) {
                        continue; // 包含 "|"
                    } else {
                        // 执行插入语句
                        (function (index) {


                            // 在这里执行你想要的修改操作,例如:
                            theEnglishCrackNameObtained.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
                            var name = elementToModifyElement.innerHTML.substring(elementToModifyElement.innerHTML.indexOf(" ") + 1);
                            // 转驼峰
                            theEnglishCrackNameObtained = theEnglishCrackNameObtained.charAt(0).toUpperCase() + theEnglishCrackNameObtained.slice(1);
                            // 将原本的武器名称保留
                            var theOriginalNameOfTheWeapon = elementToModifyElement.innerHTML.trim();
                            // 组装处理好的文本语句
                            elementToModifyElement.style.paddingLeft = "20px"; // 添加缩进
                            elementToModifyElement.innerHTML = elementToModifyElement.innerHTML + " |  武器名称:( " + theEnglishCrackNameObtained + " ) 裂罅编号:( " + name + " )";


                            // 以下是快速裂罅紫卡出售语句组装
                            // 价格路径和价格处理
                            let pricePath = `#panel > section.user__profile.content--UwhYJ.grow--Q24fj > div.content__body--qkyqR.flex--root > div.container > div.infinite-scroll > div > section:nth-child(${i + 1}) > div.row.auction-entry__body.no-gutters > div.auction-entry__bids.col-12.col-sm-6.col-md-5.col-lg-4 > div > div > div > div > b`;
                            var platinumPrice = document.querySelector(pricePath).innerHTML;
                            // 检查数组中是否包含 当前商品行数
                            // 将 商品 添加到出售语句中 将 商品行数 添加到数组中
                            // 遍历 recordedValues 数组
                            let alreadyExists = false;

                            // 遍历 recordedValues 数组,检查是否包含 theOriginalNameOfTheWeapon
                            for (let item of recordedValues) {
                                if (item.includes(theOriginalNameOfTheWeapon)) {
                                    alreadyExists = true; // 找到匹配项
                                    break; // 找到后退出循环
                                }
                            }

                            if (!alreadyExists) {
                                recordedValues.push("[" + theOriginalNameOfTheWeapon + "] " + platinumPrice + "P");
                                console.log(theOriginalNameOfTheWeapon);
                            }

                        })(i);
                    }
                }

                // 执行裂罅快速语句插入文本框
                // 鼠标轮滚滚到最下面了
                if (window.scrollY + window.innerHeight >= document.documentElement.scrollHeight) {
                    createPurpleCardSellsStatementTextBox();
                }

            }

            function addIndent(crackTheCommodityPath) {
                let selectorElement = document.querySelector(crackTheCommodityPath);
                if (!selectorElement) return;
            }

        }

function handleTrans0() {
    (function () {
        "use strict";

        // todo: 方法二
        // 监听滚轮事件
        window.addEventListener("wheel", handleTrans1);

    })()
}

window.addEventListener("wheel", handleTrans0);
setTimeout(handleTrans1,500)
setInterval(handleTrans1,800)