iTranslator

👆👆👆 多功能网页翻译工具,支持所有网站划词翻译,支持快捷键翻译和独立面板翻译,选择单词或段落后,按快捷键即可快速翻译(快捷键可自定义更换),可设置翻译字体颜色、翻译结果显示位置,独立翻译 面板支持显示多个翻译结果,方便对比翻译结果,支持多种语言互相翻译,全面支持百度翻译、彩云小译、有道翻译、阿里翻译、必应翻译、搜狗翻译、爱词霸翻译。👆👆👆

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name         iTranslator
// @version      2.9.0
// @author       SCI Great
// @homepage     https://www.hezibuluo.com/159129.html
// @namespace    https://www.hezibuluo.com/159129.html
// @description  👆👆👆 多功能网页翻译工具,支持所有网站划词翻译,支持快捷键翻译和独立面板翻译,选择单词或段落后,按快捷键即可快速翻译(快捷键可自定义更换),可设置翻译字体颜色、翻译结果显示位置,独立翻译  面板支持显示多个翻译结果,方便对比翻译结果,支持多种语言互相翻译,全面支持百度翻译、彩云小译、有道翻译、阿里翻译、必应翻译、搜狗翻译、爱词霸翻译。👆👆👆
// @require      https://unpkg.com/[email protected]/dist/sweetalert2.all.min.js
// @require      https://unpkg.com/[email protected]/crypto-js.js
// @require      https://unpkg.com/[email protected]/dist/jquery.min.js
// @license      AGPL-3.0-or-later
// @grant        unsafeWindow
// @grant        GM_info
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_addElement
// @grant        GM_openInTab
// @grant        GM_setClipboard
// @grant        GM_xmlhttpRequest
// @grant        GM_registerMenuCommand
// @run-at       document-end
// @compatible   chrome
// @compatible   firefox
// @compatible   safari
// @compatible   opera
// @compatible   edge
// @connect      qq.com
// @connect      sssam.com
// @connect      ooopn.com
// @connect      scigreat.com
// @connect      bing.com
// @connect      baidu.com
// @connect      iciba.com
// @connect      sogou.com
// @connect      youdao.com
// @connect      taobao.com
// @connect      google.com
// @connect      alibaba.com
// @connect      ydstatic.com
// @connect      caiyunai.com
// @connect      googleapis.com
// @connect      volcengine.com
// @connect      reverso.net
// @connect      *
// @match        *://*/*
// @icon         data:image/png;base64,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
// ==/UserScript==

(function() {
    'use strict';
    let sciid = "itranslator";
    let tgoing, randomID, toLang;
    let odata = {}, tdata = {}, kdata = {}, initOption = {};
    let $ = jQuery, doc = $(document), site = document.URL.toString();
    const itran_ico = "data:image/png;base64,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";
    const tt_ico = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABStJREFUeF7tm09sVEUcx7/zgiHBhBMcShpZ4kW8CC4HtqLs3owhBlg9QldUYtSbJ+OB9mA8eVMT8U+3cNSKMYR46xqwS0I3oAfxYloNEZP2ZCIJh77x/XZ3HtPdee/9Zt7b7f7pnNq+mfm932d+/2beVGDMmxhz/bEJQH5Bvg3gvACe2QIwUgK/ArjYKIvP+iU/BEDKC+DTfgmOkyOBd/oFQQdwZ4tWvouFBH5plMWhfixGCODIAlngwDS5XBZeP95mUAFguSwiA3R+Qa4IICeB1Takmgf8dKssqrbQhhpAp7IEJABTDeDNckFkBmBiF7Dv8ZbYxhpXfHQ/jgVEjSYQGx5Kd04JZSGRgjID8OZB4PzBlpyXfwTuP0gHIQ0AksyFMLIAFIRGWRyIW4qRBtBWfCYuJrABkI/HtRP7H7nAW9eBv/+L7s1xjzgXUDMfuiJzj/koSoFpSBRNEskV4qyADeDW6XQ+rY+++icw24ifjwNAB7HDx3Tw+4xxVh+l5VdFzfRsJAAoxY58JxeNliBQWz4tSpkAoBR39a/uqfJ7AHIDahfvmrMAZQlypawtIATwjSzCw2Ln28W5gbUFkHJf3O0GwEmDP7zYWwAUEwJXWBlbAKR41J4mKqaMlAVsAwBAbmAKdlFlsbUFUACjONDZOHXA5y/0Nga4JGprAC5COsf0Kgu4vNs2gDCHJpwIqUqQVs9UB5x44lEdQFWeqdy9kB9iF6CXp0bKm/b7nDqA+uzbBTTWW8VQXLMphV1MX41hu0CSEA6ApDn059sAOs4Ep+pn0x7argKi5kPM3ixUw5OiobGADAAoA1v14ZUUhHEEAAlZqxcuN3eHYwkAwOpS4VLzqGxcAWCpcKmpe2YAen0snmEMaMaCzAHYpDhO3840uA0gfRrcxH3QLaDr42jPLSC/IAf28/hU/UwFEHMc1+H26bKAQb4gEaz+hUAx85E3V+OOfl0A6PmgXpGZqp9dOTd5Mvfs7vbHRwDv/vaRo+qtYUYAqWbs0eCp+vQcICvfHv4YEzv3hFIIwO1/f3eWOhQAjtUrRR/+4kt7n8cHT76xSdlra9fx4R9fji4A3e8/efp9HN79VFNZWnX6+f7Ddbxy+73RAXC0XsntAHLBih8PavUKgPB09+ej801FadWvrd0AAaFGFkB/c2l9dwHXPK6bP/n9Pw/XQfFAWYNrMBwaAHrwe+4mfQBGMx4QGGquwXAoAOirrwc9igHKDVyDYSIAyr0m31L7aFu/c3GBuJVWgdE1GHIAGM/g1MB+AFDBz6TkucmTeH3ylLMbOAPw4R3QDxW5IGwtQDf/r+5d6Sp6JnbuDWsDSo22wTARQKF+ZlFAdN278eCVbhSqxusmcTBsAei5Pwmyixs4A9APFJNeTH9uA4BKXpXquDLISr6+9z23e/JeIGELOhMQZF9HpbeyAaAHv7hiRwdlawWJFkCVmQffmAlIIbIEAcwvFS6zLijbADDl/qil1V3FpiZIBNBaNbuDiLgMwQUQlfujANj2V/OwAJAVCGzMmYJhRI0QecWdC4Br/kq+qxuwAJCQtivQ1TPj1RMdRFYWoObkbnRUWUzjuGPYAGwgZAGAHcZTdrQCoEGIvo6qHTOZ3o3rAin1Yg+3BqBmbrnERhHwjgOSCqXQNUbaAthoIzq2N1eJcSStHO54ZwvgCujsF1Vau86XbpyoLhXmX6M5+vavs0mFVTqFrEabL0hYTeHYuQ0hNpA6Ts0Z1rwio1ZeDeibBXDecCv6jD2A/wH84i9uy3XNpQAAAABJRU5ErkJggg==";
    const cog_svg = '<span icon="cog"class="iTran-icon iTran-icon-cog"><svg data-icon="cog"width="14"height="14"viewBox="0 0 16 16"><path d="M15.19 6.39h-1.85c-.11-.37-.27-.71-.45-1.04l1.36-1.36c.31-.31.31-.82 0-1.13l-1.13-1.13a.803.803 0 00-1.13 0l-1.36 1.36c-.33-.17-.67-.33-1.04-.44V.79c0-.44-.36-.8-.8-.8h-1.6c-.44 0-.8.36-.8.8v1.86c-.39.12-.75.28-1.1.47l-1.3-1.3c-.3-.3-.79-.3-1.09 0L1.82 2.91c-.3.3-.3.79 0 1.09l1.3 1.3c-.2.34-.36.7-.48 1.09H.79c-.44 0-.8.36-.8.8v1.6c0 .44.36.8.8.8h1.85c.11.37.27.71.45 1.04l-1.36 1.36c-.31.31-.31.82 0 1.13l1.13 1.13c.31.31.82.31 1.13 0l1.36-1.36c.33.18.67.33 1.04.44v1.86c0 .44.36.8.8.8h1.6c.44 0 .8-.36.8-.8v-1.86c.39-.12.75-.28 1.1-.47l1.3 1.3c.3.3.79.3 1.09 0l1.09-1.09c.3-.3.3-.79 0-1.09l-1.3-1.3c.19-.35.36-.71.48-1.1h1.85c.44 0 .8-.36.8-.8v-1.6a.816.816 0 00-.81-.79zm-7.2 4.6c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"></path></svg></span>';
    const copy_svg = '<span icon="copy"class="iTran-icon iTran-icon-copy"><svg data-icon="copy"width="12"height="12"viewBox="0 0 16 16"><path d="M15 0H5c-.55 0-1 .45-1 1v2h2V2h8v7h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 10H2V6h8v8z"></path></svg></span>';
    const spin_svg = '<span icon="pin"class="iTran-icon iTran-icon-pin"><svg data-icon="pin"width="14"height="14"viewBox="0 0 16 16"><path d="M9.41.92c-.51.51-.41 1.5.15 2.56L4.34 7.54C2.8 6.48 1.45 6.05.92 6.58l3.54 3.54-3.54 4.95 4.95-3.54 3.54 3.54c.53-.53.1-1.88-.96-3.42l4.06-5.22c1.06.56 2.04.66 2.55.15L9.41.92z"></path></svg></span>';
    const close_svg = '<span icon="close"class="iTran-icon iTran-icon-close"><svg data-icon="close"width="18"height="18"viewBox="0 0 16 16"><path d="M9.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L8 6.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L6.59 8 3.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L9.41 8z"></path></svg></span>';
    const share_svg = '<span icon="share"class="iTran-icon iTran-icon-share"><svg data-icon="share"width="12"height="12"viewBox="0 0 16 16"><path d="M10.99 13.99h-9v-9h4.76l2-2H.99c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V7.24l-2 2v4.75zm4-14h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L7.29 7.28a1 1 0 00-.3.71 1.003 1.003 0 001.71.71l5.29-5.29V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.56-.45-1.01-1-1.01z"></path></svg></span>';
    const search_svg = '<span icon="search"class="iTran-icon iTran-icon-search"><svg data-icon="search"width="14"height="14"viewBox="0 0 16 16"><path d="M15.55 13.43l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"></path></svg></span>';
    const def = {
        sgt  : "aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20vdGV4dD9rZXl3b3JkPQ==",
        ali  : "aHR0cHM6Ly90cmFuc2xhdGUuYWxpYmFiYS5jb20vYXBpL3RyYW5zbGF0ZS90ZXh0",
        alicsrf : "aHR0cHM6Ly90cmFuc2xhdGUuYWxpYmFiYS5jb20vYXBpL3RyYW5zbGF0ZS9jc3JmdG9rZW4=",
        ydt  : "aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tL3RyYW5zbGF0ZV9vP3NtYXJ0cmVzdWx0PWRpY3Qmc21hcnRyZXN1bHQ9cnVsZQ==",
        ydm  : "aHR0cDovL20ueW91ZGFvLmNvbS90cmFuc2xhdGU=",
        bing : "aHR0cHM6Ly9jbi5iaW5nLmNvbQ==",
        icb  : "aHR0cHM6Ly9pZmFueWkuaWNpYmEuY29tL2luZGV4LnBocD9jPXRyYW5zJm09ZnkmY2xpZW50PTYmYXV0aF91c2VyPWtleV93ZWJfZmFueWkmc2lnbj0=",
        ticb : "NmtleV93ZWJfZmFueWlpZmFueWl3ZWI4aGM5czk4ZQ==",
        cai  : "aHR0cHM6Ly9hcGkuaW50ZXJwcmV0ZXIuY2FpeXVuYWkuY29tL3Yx",
        cait : "Mzk3NWw2bHI1cGNidmlkbDZqbDI=",
        huoshan: "aHR0cHM6Ly90cmFuc2xhdGUudm9sY2VuZ2luZS5jb20vY3J4L3RyYW5zbGF0ZS92MQ==",
        reverso: "aHR0cHM6Ly9hcGkucmV2ZXJzby5uZXQvdHJhbnNsYXRlL3YxL3RyYW5zbGF0aW9u",
        wxapp: "aHR0cHM6Ly93eGFwcC50cmFuc2xhdG9yLnFxLmNvbS9hcGkvdHJhbnNsYXRl",
        transmart: "aHR0cHM6Ly90cmFuc21hcnQucXEuY29tL2FwaS9pbXQ=",
        
        t_setting: /scigreat\.com\/s\/app/i,
        t_tua  : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/188.0.5845.188 Safari/537.36",
        t_ydt  : "&smartresult=dict&client=fanyideskweb&bv=11b89db74b56b4ba918674d36e95a672&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_REALTlME",
        t_tip  : "脚本安装成功,请重新刷新网页使用吧!功能简介如下:\r\n\r\n(1) 多功能网页翻译工具,支持多种翻译引擎\r\n\r\n(2) 快捷键翻译:选中文字,按 T 翻译,按 Y 取消(快捷键可修改)\r\n\r\n(3) 独立面板翻译:可显示多个翻译结果,支持多种语言翻译\r\n\r\n(4) 可自定义更换翻译结果显示位置,自定义更换翻译字体颜色",
        t_itran: 
            `<div id="iTranslator">
                <div id="iTran-btn">
                    <img src="${itran_ico}" alt="点击展开翻译结果" title="点击展开翻译结果">
                </div>
                <div id="iTran-panel">
                    <div class="iTran-front">
                        <div class="iTran-header">
                            <div class="iTran-left">
                                <div class="switch-pin">
                                    <button type="button" class="iTran-button spin-btn" title="固定翻译面板">${spin_svg}</button>
                                </div>
                            </div>
                            <div class="iTran-center" title="按住不放可以拖动"></div>
                            <div class="iTran-right">
                                <button type="button" class="iTran-button isearch-icon" title="打开搜索框">${search_svg}</button>
                                <a role="button" target="_blank" title="打开设置页面" class="iTran-button cog-btn">${cog_svg}</a>
                                <button type="button" title="关闭" class="iTran-button iclose-btn">${close_svg}</button>
                            </div>
                        </div>
                        <div class="iTran-search isearch">
                            <div class="quick-isearch">
                                <textarea placeholder="输入文本,按搜索图标翻译..." class="iTran-input iTran-fill"></textarea>
                                <button type="button" class="iTran-button isearch-btn" title="翻译文本">${search_svg}</button>
                            </div>
                        </div>
                    </div>
                    <div class="iTran-body"></div>
                </div>
            </div>`
    };
    const message = {
        success: (text) => { toast.fire({ title: text, icon: "success" }) },
        error: (text) => { toast.fire({ title: text, icon: "error" }) },
        warning: (text) => { toast.fire({ title: text, icon: "warning" }) },
        info: (text) => { toast.fire({ title: text, icon: "info" }) },
        question: (text) => { toast.fire({ title: text, icon: "question" }) }
    };
    const toast = Swal.mixin({
        toast: true,
        position: "top",
        showConfirmButton: false,
        timer: 3000,
        timerProgressBar: false,
        didOpen: (toast) => {
            toast.addEventListener("mouseenter", Swal.stopTimer);
            toast.addEventListener("mouseleave", Swal.resumeTimer);
        }
    });
    const base = {
        d(str) {
            return decodeURIComponent(escape(atob(str)));
        },
        e(str) {
            return btoa(unescape(encodeURIComponent(str)));
        },
        deURL(str) {
            return decodeURIComponent(str);
        },
        enURL(str) {
            return encodeURIComponent(str);
        },
        setV(name, value) {
            GM_setValue(name, value);
        },
        getV(name) {
            return GM_getValue(name);
        },
        delV(name) {
            GM_deleteValue(name);
        },
        isType(obj) {
            return Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();
        },
        get(url, type) {
            return new Promise((resolve, reject) => {
                GM_xmlhttpRequest({
                    method: "GET", url,
                    responseType: type || "json",
                    onload: (res) => {
                        resolve(res.response || res.responseText)
                    },
                    onerror: () => {
                        reject("")
                    }
                });
            });
        },
        post(url, data, headers, h) {
            if (this.isType(data) === "object") {
                data = JSON.stringify(data);
            }
            if (headers === undefined || headers.length == 0) {
                headers = h === undefined ?
                    { "Content-Type": "application/x-www-form-urlencoded" } :
                    { "Content-Type": "application/json", "User-Agent": def.t_tua }
            }
            return new Promise((resolve, reject) => {
                GM_xmlhttpRequest({
                    method: "POST", url, data, headers,
                    responseType: "json",
                    onload: (res) => {
                        resolve(res.response || res.responseText);
                    },
                    onerror: () => {
                        reject("");
                    }
                });
            });
        },
        addStyle(id, tag, css) {
            let styleDom = document.getElementById(id), added = null; 
            if (styleDom) return;
            try {
                added = GM_addStyle(css);
            } catch {}
            if (!added) {
                let style = document.createElement(tag);
                style.id = id;
                style.textContent = css;
                if (document.head) document.head.appendChild(style);
            }
        },
        initConfig() {
            initOption = {
                "itran_quick_open": true,
                "itran_panel_open": true,
                "itran_panel_size": 13,
                "itran_panel_eng": ["必应翻译"],
                "itran_tkey": [false, false, false, false, false, false],
                "itran_key": ["T", "Y"],
                "itran_tolang": "自动检测",
                "itran_place": "句后",
                "itran_icopos": "右上",
                "itran_engine": "必应翻译",
                "itran_color": "#1b538c"
            };
            odata = base.getV("odata");
            if (odata === undefined) {
                odata = initOption;
                base.setV("odata", initOption);
            }
            if (odata) {
                for (const k in initOption) {
                    if (odata[k] === undefined) {
                        odata[k] = initOption[k];
                        base.setV("odata", odata);
                    }
                }
            }
        },
        async getBaseData() { 
            let tdata_time = base.getV("tdata_time");
            if (tdata_time === undefined || Date.now() - tdata_time > 8e8) {
                base.setV("tdata", "eyJpdHJhbiI6Imh0dHBzOi8vd3d3LnNjaWdyZWF0LmNvbS9zL2FwcC8/dD1pdHJhbnNsYXRvciIsInNvZnR3YXJlIjoiaHR0cHM6Ly93d3cuc2NpZ3JlYXQuY29tL2FkL3NvZnR3YXJlIn0=");
                base.setV("tdata_time", Date.now());
                if (tdata_time === undefined) {
                    alert(def.t_tip);
                    location.reload();
                }
            }
            if (base.getV("odata")) {
                odata = base.getV("odata");
            }
            if (base.getV("tdata")) {
                tdata = JSON.parse(base.d(base.getV("tdata")));
            }
            if (base.getV("kdata") === undefined || base.getV("kdata_time") === undefined || Date.now() - base.getV("kdata_time") > 7.2e6) {
                upToken.all();
            }
        },
        addInitStyle() {
            let color = odata.itran_color;
            let bw = base.getV("itran_width");
            let sb = base.getV("itran_so_open");
            let sh = base.getV("itran_so_height");
            let size = odata.itran_panel_size;
            let css = `#iTran-panel{width:${bw ? bw : 240}px}.iTran-search{height:${sb ? "auto" : 0}}.iTran-result p,.iTran-heading,.iTran-fill{font-size:${size}px!important}.iTran-fill{height: ${sh ? sh : 66}px}.itranslator_span{color: ${color}}`;
            css +=
`.itranslator_span {
    font-weight:bold;
    font-family:Times New Roman,STKaiTi,KaiTi,sans-serif,Georgia,Segoe UI,Microsoft Yahei
}
#iTran-btn {
    top:0;
    left:0;
    display:none;
    position:absolute;
    z-index:9999999999
}
#iTran-btn img {
    cursor:pointer;
    width:20px;
    height:20px;
    background-color:#ffffff;
    border:1px solid #aeaeae;
    border-radius:4px;
    padding:2px;
    box-sizing:content-box
}
#iTran-btn img:hover {
    border:1px solid #ff9900
}
#iTran-panel {
    top:0;
    left:0;
    display:none;
    min-width:280px;
    max-width:320px;
    position:absolute;
    font-size:13px;
    border-radius:3px;
    box-sizing:border-box;
    z-index:999999999;
    color:#333;
    background-color:#f5f8fa;
    box-shadow:0px 0px 10px #0000004d;
}
#iTran-panel,.iTran-fill {
    font-family:Times New Roman,Arial,STKaiti,KaiTi,sans-serif,Segoe UI,Microsoft Yahei!important
}
#iTran-panel.spin,#iTran-panel.iTran-spin {
    position:fixed;
}
.iTran-body {
    padding:0 10px;
    max-height:580px;
    margin-bottom:10px;
    flex-grow:1;
    overflow:auto;
    scrollbar-width:thin;
}
.iTran-body::-webkit-scrollbar {
    width:6px;
    background-color:rgba(0,0,0,0);
    -webkit-border-radius:100px
}
.iTran-body::-webkit-scrollbar:hover {
    background-color:rgba(0,0,0,0.09)
}
.iTran-body::-webkit-scrollbar-thumb:vertical {
    background:rgba(0,0,0,0.5);
    -webkit-border-radius:100px
}
.iTran-body::-webkit-scrollbar-thumb:vertical:active {
    background:rgba(0,0,0,0.61);
    -webkit-border-radius:100px
}
.iTran-input {
    background:#fff;
    border-radius:3px;
    border:thin solid #aaaaaa;
    color:#182026;
    font-weight:400;
    outline:0;
    transition:box-shadow .1s cubic-bezier(.4,1,.75,.9);
    vertical-align:middle
}
.iTran-header {
    display:flex;
    margin-bottom:10px;
    padding:4px 6px 4px 10px;
    border-bottom:1px solid #e8e8e8
}
.iTran-center {
    cursor:pointer;
    flex-grow:1;
    align-self:stretch
}
.iTran-left,.iTran-right {
    display:flex
}
.iTran-button {
    position:relative!important;
    margin:0 0 0 1px;
    padding:0;
    min-height:20px;
    min-width:20px;
    max-height:20px;
    max-width:20px;
    background:0 0;
    box-shadow:none;
    align-items:center;
    border:none;
    border-radius:3px;
    cursor:pointer;
    display:inline-flex;
    flex-direction:row;
    font-size:14px;
    justify-content:center;
    text-align:left;
    vertical-align:middle
}
.quick-isearch {
    position:relative;
    padding:0 10px 10px 10px
}
.iTran-search {
    overflow:hidden;
    transition:transform .2s cubic-bezier(.4,1,.75,.9)
}
.iTran-fill {
    width:100%;
    padding:5px;
    margin:0;
    font-size:13px;
    min-height:44px;
    max-height:250px;
    max-width:100%;
    min-width:100%;
    line-height:1.3;
    box-sizing:border-box
}
.isearch-btn {
    display:none;
    position:absolute!important;
    opacity:0.6;
    right:18px;
    bottom:18px;
    min-height:18px;
    min-width:18px;
    padding:0 7px;
    color:#fff;
    background-color:#137cbd
}
.isearch-btn:hover {
    opacity:1
}
.iTran-card {
    margin:8px 0;
    padding:2px 5px;
    background-color:#fff;
    border-radius:3px;
    border:thin dashed #aaaaaa;
    transition:transform .2s cubic-bezier(.4,1,.75,.9),box-shadow .2s cubic-bezier(.4,1,.75,.9)
}
.iTran-card .iTran-button {
    visibility:hidden
}
.iTran-card:hover .iTran-button {
    visibility:visible
}
.iTran-card:first-child {
    margin-top:0
}
.iTran-card:last-child {
    margin-bottom:0
}
.iTran-card .iTran-icon {
    position:relative;
    margin-left:1px
}
.iTran-icon {
    display:inline-block;
    flex:0 0 auto;
    vertical-align:text-bottom
}
.iTran-icon:not(:empty):before {
    content:""!important;
    box-sizing:inherit;
    content:unset!important
}
.iTran-icon>svg {
    display:block
}
.iTran-icon>svg:not([fill]) {
    fill:currentColor
}
.iTran-legend {
    display:flex;
    align-items:center;
    justify-content:space-between
}
.legend-left {
    display:flex;
    align-items:center
}
.engine-icon {
    display:inline-block;
    width:14px;
    height:14px;
    background-size:contain;
    margin-right:3px
}
.iTran-heading {
    font-size:13px;
    font-weight:400;
    margin:0 2px 0 0;
    letter-spacing:0;
}
.iTran-result p {
    margin:2px 0;
    font-size:13px;
    font-weight:bold;
    line-height:1.3;
    text-align:left;
    letter-spacing:0;
    overflow-wrap:break-word
}
.iTran-icon-pin {
    transition:transform 0.2s,color 0.2s;
    transform:rotate(-45deg)
}
.iTran-spin .iTran-icon-pin,.spin .iTran-icon-pin {
    transform:rotate(-70deg)
}
.iTran-button .iTran-icon {
    color:#5c7080
}
.iTran-button .iTran-icon:first-child:last-child {
    margin:0 -7px
}
.iTran-button:hover {
    background:rgba(167,182,194,.3);
    box-shadow:none;
    color:#182026;
    text-decoration:none
}
.quick-isearch .iTran-icon {
    color:#ffffff
}
.isearch-btn:hover {
    background:rgba(16,107,163)
}
.iTran-active {
    background:rgba(115,134,148,.3);
}
.iTran-button:disabled {
    color:rgba(92,112,128,.6);
    background-color:initial;
    pointer-events:none;
}
.iTran-button:disabled .iTran-icon {
    color:inherit;
}`;
            base.addStyle("itran_style", "style", css);
            $("body").append(def.t_itran);
            $(".cog-btn").attr("href", tdata.itran);
        },
        registerMenu() {
            GM_registerMenuCommand("选项设置", () => {
                GM_openInTab(tdata.itran, { active: true })
            });
            GM_registerMenuCommand("免费软件", () => {
                GM_openInTab(tdata.software, { active: true })
            });
            GM_registerMenuCommand("打开翻译", () => {
                $("#iTran-panel").show().css({
                    left: $(window).width() / 2,
                    top: $(window).scrollTop()
                });
            });
        },
        pageListener() {
            let obj = $("#iTran-panel");
            let twidth = $(window).width();
            let theight = $(window).height();
            obj.on("mousemove", (e) => {
                obj.unbind("mousedown");
                obj.css("cursor", "default");
                let left, top, yy;
                let scroll = $(window).scrollTop();
                let now_left = obj.offset().left;
                let oWidth = obj.width(), oHeight = obj.height();
                let now_top = obj.offset().top - scroll;
                let isSpin = $('.iTran-spin').css('display') === 'block' ? true : false;
                let moveTop = e.clientX - now_left > 0 && e.clientX - now_left < oWidth && e.clientY - now_top > 0 && e.clientY - now_top < 30;
                let moveRight = e.clientX - now_left > 0 && e.clientX - now_left < 10 && e.clientY - now_top > 30 && e.clientY - now_top < oHeight;
                let moveLeft = e.clientX - now_left > oWidth - 10 && e.clientX - now_left < oWidth && e.clientY - now_top > 30 && e.clientY - now_top < oHeight;
                if (moveTop || moveRight || moveLeft) {
                    obj.on("mousedown", (e) => {
                        let isMoving = true, x = e.pageX - now_left;
                        if (moveTop) {
                            let y = e.pageY - now_top;
                            doc.on({
                                "mousemove": (e) => {
                                    left = e.pageX - x < 0 ? 0 : (e.pageX - x + oWidth > twidth ? twidth - oWidth : e.pageX - x);
                                    top = e.pageY - y < 0 ? 0 : (e.pageY - y + oHeight > theight ? theight - oHeight : e.pageY - y);
                                    top = isSpin ? top : top + scroll;
                                    yy = isSpin ? e.pageY - y : e.pageY - y + scroll;
                                    isMoving && obj.css({
                                        "left": e.pageX - x,
                                        "top": yy
                                    });
                                },
                                "mouseup": () => {
                                    isMoving && obj.css({
                                        "left": left,
                                        "top": top
                                    });
                                    isMoving = false;
                                }
                            });
                        }
                        if (moveRight) {
                            let w = e.pageX + oWidth;
                            obj.css("cursor", "w-resize");
                            doc.on({
                                "mousemove": (e) => {
                                    isMoving && obj.css({
                                        "width": w - e.pageX,
                                        "left": e.pageX - x
                                    });
                                },
                                "mouseup": () => {
                                    base.setV('itran_width', oWidth);
                                    isMoving = false;
                                }
                            });
                        }
                        if (moveLeft) {
                            let w = e.pageX - oWidth;
                            obj.css("cursor", "e-resize");
                            doc.on({
                                "mousemove": (e) => {
                                    isMoving && obj.css({ "width": e.pageX - w });
                                },
                                "mouseup": () => {
                                    base.setV('itran_width', oWidth);
                                    isMoving = false;
                                }
                            });
                        }
                    });
                }
            });
            if (def.t_setting.test(site)) {
                $("#itranslator").attr("version", GM_info.script.version);
                setTimeout(() => {
                    for (const k in odata) {
                        const spa = `#${sciid} #${k}`, vv = odata[k];
                        if (vv === undefined) continue;
                        switch (k) {
                            case "itran_place": case "itran_engine": case "itran_icopos":
                            case "itran_panel_size": case "itran_tolang":
                                $(`${spa} dd[lay-value="${vv}"]`).trigger("click");
                                $(`${spa} dd:contains("${vv}")`).trigger("click");
                                break;
                            case "itran_key": {
                                let tk = odata.itran_tkey;
                                let tkey = vv[0];
                                let hkey = vv[1];
                                if (tk[2]) tkey = "Shift+" + tkey;
                                if (tk[1]) tkey = "Alt+" + tkey;
                                if (tk[0]) tkey = "Ctrl+" + tkey;
                                if (tk[5]) hkey = "Shift+" + hkey;
                                if (tk[4]) hkey = "Alt+" + hkey;
                                if (tk[3]) hkey = "Ctrl+" + hkey;
                                $("#" + k).val(tkey)
                                    .attr("ctrlkey", tk[0] ? tk[0] : "")
                                    .attr("altkey", tk[1] ? tk[1] : "")
                                    .attr("shiftkey", tk[2] ? tk[2] : "")
                                    .attr("tkey", vv[0]);
                                $("#h" + k).val(hkey)
                                    .attr("ctrlkey", tk[3] ? tk[3] : "")
                                    .attr("altkey", tk[4] ? tk[4] : "")
                                    .attr("shiftkey", tk[5] ? tk[5] : "")
                                    .attr("tkey", vv[1]);
                            } break;
                            case "itran_color":
                                $(spa + " input").val(vv);
                                $(spa + " .layui-colorpicker-trigger-span").css({ background: vv });
                                break;
                            case "itran_panel_eng": {
                                if (vv && Array.isArray(vv)) {
                                    for (const i of vv) {
                                        $(`${spa} input[name="${i}"]`).each((_, e) => $(e.nextSibling).trigger("click"));
                                    }
                                }
                            } break;
                            case "itran_quick_open": case "itran_panel_open":
                                if (vv === true) {
                                    const checked = $(`${spa} input:checked`).length;
                                    if (!checked) $(`${spa} .layui-form-switch`).trigger("click");
                                }
                                break;
                            default:
                                break;
                        }
                    }
                }, 500);
            }
            doc.on("click", ".itranSave", () => {
                const option = {};
                for (const k in odata) {
                    const spa = `#${sciid} #${k}`, vv = odata[k];
                    switch (k) {
                        case "itran_color": case "itran_place":
                        case "itran_engine": case "itran_icopos":
                        case "itran_panel_size": case "itran_tolang":
                            {
                                let input = $(spa + " input").val();
                                option[k] = input !== undefined ? input : vv;
                            }
                            break;
                        case "itran_key":
                            option.itran_tkey = [
                                Boolean($(spa).attr("ctrlkey")),
                                Boolean($(spa).attr("altkey")),
                                Boolean($(spa).attr("shiftkey")),
                                Boolean($("#h" + k).attr("ctrlkey")),
                                Boolean($("#h" + k).attr("altkey")),
                                Boolean($("#h" + k).attr("shiftkey"))
                            ];
                            option[k] = [];
                            option[k][0] = $(spa).attr("tkey") || vv[0];
                            option[k][1] = $("#h" + k).attr("tkey") || vv[1];
                            break;
                        case "itran_panel_eng":
                            option[k] = [];
                            $(spa + "_order span[data-order-cid]").each((i, e) => {
                                const cc = $(e).attr("data-order-cid");
                                if (cc) option[k].push(cc);
                            });
                            break;
                        case "itran_quick_open": case "itran_panel_open":
                            {
                                let inout = $(spa + " input")[0];
                                if (inout) option[k] = inout.checked;
                            }
                            break;
                        default:
                            option[k] = vv;
                            break;
                    }
                }
                base.setV("odata", option);
                upToken.all();
            });
            doc.on("click", ".itranReset", (e) => {
                if (confirm("提示:即将进行初始化,所有设置将重置,确认吗?")) {
                    base.setV("odata", initOption);
                    message.success("初始化设置成功,重启插件中!");
                    setTimeout(() => {
                        location.replace(tdata.itran);
                    }, 1.5e3);
                }
            });
            doc.on("click", ".itranDelete", (e) => {
                let del_time = base.getV("del_time");
                if (del_time === undefined || Date.now() - del_time > 2e7) {
                    if (confirm("警告:除非插件无法使用,否则不要删除所有数据,你确认吗?")) {
                        base.delV("tdata_time");
                        base.delV("kdata_time");
                        base.setV("odata", initOption);
                        base.setV("del_time", Date.now());
                        message.success("所有数据删除成功,重启插件中!");
                        setTimeout(() => {
                            location.replace(tdata.itran);
                        }, 1.5e3);
                    }
                } else {
                    alert("提示:6小时内删除过所有数据,请6小时后重试!");
                }
            });

            doc.on("click", ".isearch-icon", () => {
                if ($(".isearch-icon").is(".iTran-active")) {
                    $(".isearch-icon").removeClass("iTran-active");
                    $(".iTran-search").height("0");
                    base.setV("itran_so_open", false);
                } else {
                    $(".isearch-icon").addClass("iTran-active");
                    $(".iTran-search").height("auto");
                    base.setV("itran_so_open", true);
                }
            });
            doc.on("click", ".spin-btn", () => {
                let obj = $("#iTran-panel");
                let top = obj.offset().top;
                let scroll = $(window).scrollTop();
                if ($(".spin-btn").is(".iTran-active")) {
                    $(".spin-btn").removeClass("iTran-active");
                    $("#iTran-panel").removeClass("iTran-spin");
                    obj.css("top", top);
                } else {
                    $(".spin-btn").addClass("iTran-active");
                    $("#iTran-panel").addClass("iTran-spin");
                    obj.css("top", top - scroll);
                }
            });
            doc.on("click", ".icopy-btn", (e) => {
                let txt = $(e.currentTarget).parent().parent().parent().find(".iTran-result p").text();
                GM_setClipboard(txt);
                message.success("复制成功!");
            });
            doc.on("keyup", ".iTran-fill", () => {
                $(".iTran-fill").val() === "" ? $(".isearch-btn").hide() : $(".isearch-btn").css("display", "inline-flex");
            });
            doc.on("click", ".iclose-btn", () => { 
                $("#iTran-panel").removeClass("iTran-spin").hide();
                $(".spin-btn").removeClass("iTran-active");
            });
            doc.on("click", ".isearch-btn", () => {
                let value = $(".iTran-fill").val();
                let height = $(".iTran-fill").height();
                utils.showResult(value);
                base.setV("itran_so_height", height);
            });
            if (base.getV("itran_so_open")) { 
                $(".isearch-icon").addClass("iTran-active")
            } else {
                $(".isearch-icon").removeClass("iTran-active");
            }
        }
    };

    let upToken = {
        async bing() {
            try {
                const res = await base.get(base.d(def.bing) + '/translator');
                kdata.ig = res.match(/IG:"([A-Za-z0-9]+)"/)[1];
                [, kdata.bingkey, kdata.bingtoken] = res.match(/var params_AbusePreventionHelper\s*=\s*\[([0-9]+),\s*"([^"]+)",[^\]]*\];/);
                kdata.bingiid = $(res).find("#rich_tta").attr("data-iid");
                base.setV("kdata", kdata);
            } catch {}
        },
        async ali() {
            try {
                const csrf = await base.get(base.d(def.alicsrf));
                kdata.alicsrf = csrf.token;
                base.setV("kdata", kdata);
            } catch {}
        },
        async cai() {
            try {
                kdata.caiyunid = CryptoJS.MD5(Math.random().toString()).toString();
                const data = { "browser_id": kdata.caiyunid };
                const header = { "Content-Type": "application/json", "X-Authorization": "token:" + base.d(def.cait), "origin": "https://fanyi.caiyunapp.com" };
                const res = await base.post(base.d(def.cai) + '/user/jwt/generate', data, header);
                kdata.caiyunjwt = res.jwt;
                base.setV("kdata", kdata);
            } catch {}
        },
        all() {
            this.bing();
            this.ali();
            this.cai();
            base.setV("kdata_time", Date.now());
        }
    };

    let utils = {
        getTransInfo(e, node, engine) {
            let t_num = 0;
            $(".itranslator_span").each((i, v) => {
                let m = parseInt($(v).attr("value"));
                if (m > t_num) t_num = m;
            });
            if (e) {
                let sp, tspan = document.createElement("span");
                let eng = engine ? engine : odata.itran_engine;
                let num = {
                    "必应翻译": 2500,
                    "有道翻译": 1000
                };
                if (!engine || e.length > 5e3) {
                    $(tspan).addClass("itranslator_span").attr("value", ++t_num).text(" " + odata.itran_engine + "等待中... ");
                    node.insertNode(tspan);
                }
                if (e.length > 5e3) {
                    $(tspan).text(" 字数过多,翻译暂不可用,请减少字数重试...");
                } else {
                    tspan = engine === undefined ? tspan : node;
                    sp = engine === undefined ? " " : "";
                    if (!num[eng] || e.length < num[eng]) {
                        utils.getTransText(e, tspan, eng);
                    } else {
                        $(tspan).text(sp + eng + "只能翻译" + num[eng] + "字符以内,请减少字数重试...");
                    }
                }
            } else {
                $(".itranslator_span[value=" + t_num + "]").remove();
            }
        },
        async getTransText(e, ele, eng) {
            let url, data, header, sign, num = 0, res = "", resTxt = "";
            let ee = e.replace(/[,:“”‘’{}【】。、・=「」『』()〔〕[]-~?!……]/g, "");
            let langMap = { "自动检测": "auto", "中文": "zh", "英语": "en", "法语": "fr", "日语": "ja", "德语": "de", "俄语": "ru", "韩语": "ko", "西班牙": "es" };
            let langZH = { "有道翻译": "zh-CHS", "必应翻译": "zh-Hans", "搜狗翻译": "zh-CHS" };
            tgoing = true
            kdata = base.getV("kdata");
            e = e.replace(/\r|\n|\r\n/g," ");
            let fromLang = "auto";
            toLang = (/[\u4E00-\u9FA5]/g.test(ee) && !/[\u0800-\u4e00]/g.test(ee)) ? "en" : "zh";
            toLang = odata.itran_tolang === "自动检测" ? toLang : langMap[odata.itran_tolang];
            if (toLang === "zh" && langZH[eng]) {
                toLang = langZH[eng];
            }
            switch(eng) {
                case "彩云小译":
                    while (!resTxt.length && num < 2) {
                        data = { "source": [e], "trans_type": `auto2${toLang}`, "detect": true, "browser_id": kdata.caiyunid };
                        header = { "Content-Type": "application/json", "X-Authorization": "token:" + def.cait, "T-Authorization": kdata.caiyunjwt };
                        res = await base.post(base.d(def.cai) + "/translator", data, header);
                        resTxt = res.target && res.target[0] ? res.target[0] : "";
                        !resTxt.length && await upToken.cai();
                        num++;
                    };
                    break;
                case "阿里翻译":
                    while (!resTxt.length && num < 2) {
                        data = `srcLang=auto&tgtLang=${toLang}&domain=general&_csrf=${kdata.alicsrf}&query=${base.enURL(e)}`;
                        res = await base.post(base.d(def.ali), data);
                        resTxt = res.data ? res.data.translateText : "";
                        !resTxt.length && await upToken.ali();
                        num++;
                    };
                    break;
                case "有道翻译":
                    data = "type=AUTO&inputtext=" + base.enURL(e);
                    res = await base.post(base.d(def.ydm), data);
                    resTxt = $(res).find("#translateResult li").text() || "";
                    break;
                case "搜狗翻译":
                    utils.transOutput("", ele, base.d(def.sgt) + base.enURL(e) + "&transto=" + toLang);
                    break;
                case "火山翻译":
                    while (!resTxt.length && num < 2) {
                        try {
                            if (fromLang === "auto") fromLang = "detect";
                            data = { "text": e, "source_language": fromLang, "target_language": toLang };
                            header = { "Content-Type": "application/json" };
                            res = await base.post(base.d(def.huoshan), data, header);
                            if (res) {
                                resTxt = res.translation ? res.translation : "";
                            }
                        } catch (err) { }
                        !resTxt.length && num++;
                    }
                    break;
                case "Reverso":
                    while (!resTxt.length && num < 2) {
                        try {
                            fromLang = /[\u4E00-\u9FA5]/.test(e) ? "chi" : "eng";
                            data = { "format": "text", "from": fromLang, "to": toLang, "input": e, "options": { "contextResults": true, "languageDetection": true, "origin": "translation.web", "sentenceSplitter": true } };
                            header = { "Content-Type": "application/json", "x-reverso-origin": "translation.web" };
                            res = await base.post(base.d(def.reverso), data, header);
                            if (res && res.translation) {
                                for (const i of res.translation) {
                                    resTxt += i;
                                }
                            }
                        } catch (err) { }
                        !resTxt.length && num++;
                    }
                    break;
                case "Transmart":
                    while (!resTxt.length && num < 2) {
                        try {
                            const clientKey = "tencent_transmart_crx_" + window.btoa(navigator.userAgent).slice(0, 100);
                            data = { "header": { "fn": "auto_translation", client_key: clientKey }, "type": "plain", "model_category": "normal", "text_domain": "general", "source": { "lang": fromLang, "text_list": [e] }, "target": { "lang": toLang } };
                            header = { "Content-Type": "application/json", "Host": "transmart.qq.com", "Origin": "https://transmart.qq.com", "Referer": "https://transmart.qq.com/" };
                            res = await base.post(base.d(def.transmart), data, header);
                            if (res && res.auto_translation) {
                                resTxt = res.auto_translation[0] ? res.auto_translation[0] : "";
                            }
                        } catch (err) { }
                        !resTxt.length && num++;
                    }
                    break;
                case "WxApp":
                    while (!resTxt.length && num < 2) {
                        try {
                            const param = new URLSearchParams({
                                source: fromLang,
                                target: toLang,
                                sourceText: e,
                                platform: "WeChat_APP",
                                candidateLangs: "en|zh",
                                guid: "oqdgX0SIwhvM0TmqzTHghWBvfk22"
                            }).toString();
                            res = await base.get(`${base.d(def.wxapp)}?${param}`);
                            if (res && res.targetText) {
                                resTxt = res.targetText;
                            }
                        } catch (err) { }
                        !resTxt.length && num++;
                    }
                    break;
                case "必应翻译":
                default:
                    while (!resTxt.length && num < 2) {
                        url = `${base.d(def.bing)}/ttranslatev3?isVertical=1&&IG=${kdata.ig}&IID=${kdata.bingiid}`;
                        data = `fromLang=auto-detect&to=${toLang}&token=${kdata.bingtoken}&key=${kdata.bingkey}&text=${base.enURL(e)}`;
                        res = await base.post(url, data);
                        resTxt = res[0] ? res[0].translations[0].text : "";
                        !resTxt.length && await upToken.bing();
                        num++;
                    };
                    break;
            }
            if (resTxt) utils.transOutput(resTxt, ele);
        },
        async transOutput(e, ele, url) {
            let node = $(ele);
            let sp = node.is(".itranslator_span") ? " " : "";
            if (url && url.length > 0) {
                let res = await base.get(url);
                if (res) e += $(res).find("#trans-result").text();
                tgoing = false;
                e.length > 0 ? node.text(sp + e + sp) : node.text(sp + "翻译暂不可用,请稍后重新尝试...");
            } else {
                tgoing = false;
                e.length > 0 ? node.text(sp + e + sp) : node.text(sp + "翻译暂不可用,请稍后重新尝试...");
            }
            setTimeout(() => {
                tgoing = false;
            }, 3e3);
        },
        showResult(e) {
            $(".iTran-body").empty();
            $(".iTran-fill").val(e);
            $("#iTran-panel").show();
            randomID = (Math.floor(Math.random() * 9e2) + 1e2).toString();
            const engToEid = {
                "彩云小译": "cai",
                "阿里翻译": "ali",
                "有道翻译": "ydt",
                "搜狗翻译": "sgt",
                "火山翻译": "hst",
                "Reverso": "reverso",
                "Transmart": "transmart",
                "WxApp": "wxapp",
                "必应翻译": "bing"
            };
            for(let eng of odata.itran_panel_eng) {
                let eid = engToEid[eng];
                let itran_card =
                    `<div class="iTran-card ${eid}${randomID}">
                        <div class="iTran-legend">
                            <div class="legend-left">
                                <span class="engine-icon" style="background-image: url(${tt_ico});"></span>
                                <div class="iTran-heading">${eng}</div>
                            </div>
                            <div class="legend-right">
                                <button type="button" title="复制翻译结果" class="iTran-button icopy-btn">${copy_svg}</button>
                            </div>
                        </div>
                        <div class="iTran-result"><p></p></div>
                    </div>`;
                $(".iTran-body").append(itran_card);
                utils.getTransInfo(e, `.${eid}${randomID} .iTran-result p`, eng, true);
            }
            setInterval(() => {
                let height = $(".iTran-body").css("height");
                let maxheight = $(".iTran-body").css("max-height");
                if (height === maxheight) {
                    $(".iTran-body").css("padding", "0 4px 0 10px");
                } else {
                    $(".iTran-body").css("padding", "0 10px");
                }
            }, 1e3);
        }
    };
    let main = {
        init() {
            base.initConfig();
            base.getBaseData();
            base.addInitStyle();
            base.registerMenu();
            base.pageListener();
            start.keyT();
            start.panelT();
        }
    };
    let start = {
        keyT() {
            doc.on("keydown", (e) => {
                if (odata.itran_quick_open && !def.t_setting.test(site)) {
                    let keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
                    if (
                        !tgoing &&
                        e.ctrlKey == odata.itran_tkey[0] &&
                        e.altKey == odata.itran_tkey[1] &&
                        e.shiftKey == odata.itran_tkey[2] &&
                        keyCode == odata.itran_key[0].charCodeAt(0)
                    ) {
                        let isCont, startNode, selected = window.getSelection();
                        selected && (isCont = selected.toString().trim()) && (startNode = selected.getRangeAt(0));
                        if (isCont.length > 0) {
                            if (odata.itran_place == "句前") {
                                startNode.collapse(true);
                            } else {
                                startNode.collapse(false);
                            }
                            utils.getTransInfo(isCont, startNode);
                        }
                    } else if (
                        e.ctrlKey == odata.itran_tkey[3] &&
                        e.altKey == odata.itran_tkey[4] &&
                        e.shiftKey == odata.itran_tkey[5] &&
                        keyCode == odata.itran_key[1].charCodeAt(0) &&
                        $(".itranslator_span").length > 0
                    ) {
                        utils.getTransInfo();
                    }
                }
            });
        },
        panelT() {
            if (odata.itran_panel_open && !def.t_setting.test(site)) {
                let isSpin, isIcon, isSelecting;
                let isPanel, isShow, isCont, selected;
                let iTranBtn = $("#iTran-btn");
                let iTranPanel = $("#iTran-panel");
                let icopos = {
                    "右上": [16, -32],
                    "右下": [16, 16],
                    "左上": [-32, -32],
                    "左下": [-32, 16]
                };
                let eX = icopos[odata.itran_icopos]?.[0] || 16;
                let eY = icopos[odata.itran_icopos]?.[1] || 16;
                doc.on({
                    "selectionchange": () => {
                        isSelecting = true;
                    },
                    "mousedown": (e) => {
                        const parents = $(e.target).parents();
                        isSpin = $(".iTran-spin").css("display") === "block" ? true : false;
                        isShow = iTranPanel.css("display") === "block" ? true : false;
                        isPanel = parents.is("#iTran-panel");
                        isIcon = parents.is("#iTran-btn");
                        !isIcon && iTranBtn.removeAttr("style");
                        if (!isIcon && !isPanel && !isSpin && isShow) {
                            iTranPanel.removeClass("iTran-spin").removeAttr("style");
                            $(".spin-btn").removeClass("iTran-active");
                        }
                    },
                    "mouseup": (e) => {
                        selected = window.getSelection();
                        selected && (isCont = selected.toString().trim());
                        if (!isSpin && !isPanel && !isIcon && isSelecting && isCont) {
                            let obj = $("#iTran-panel");
                            let twidth = $(window).width();
                            let xpos = e.pageX + eX + 26 + obj.width() > twidth ? twidth - obj.width() - 26 : e.pageX + eX;
                            iTranBtn.show().css({
                                left: e.pageX + eX + "px",
                                top: e.pageY + eY + "px"
                            });
                            iTranPanel.css({
                                left: xpos + 26 + "px",
                                top: e.pageY + eY + "px"
                            });
                        }
                        if (isSpin && !isPanel && !isIcon && isSelecting && isCont) {
                            utils.showResult(isCont);
                        }
                        isSelecting = false;
                    }
                });
                iTranBtn.on("click", () => {
                    iTranBtn.removeAttr("style");
                    utils.showResult(isCont);
                });
            }
        }
    };
    main.init();
})();