// ==UserScript== // @name 一键去除在线翻译网站的换行符 // @namespace https://greasyfork.org/zh-CN/scripts/390059-%E7%BF%BB%E8%AF%91%E6%8F%92%E4%BB%B6-%E5%8E%BB%E9%99%A4%E6%8D%A2%E8%A1%8C // @version 2.1 // @description 在各大在线翻译网站的页面上增加了一个“格式化”按钮,用来移除从PDF等复制过来的文本中包含的回车符、换行符、"\n"等,支持谷歌翻译、百度翻译、网易有道翻译、DeepL翻译 // @author Kevin Chen // @match https://fanyi.baidu.com/* // @match https://fanyi.youdao.com/ // @match https://translate.google.cn/* // @match https://translate.google.com/* // @match https://www.deepl.com/translator // @icon https://translate.google.cn/favicon.ico // @grant GM_addStyle // @run-at document-end // @license MIT // @downloadURL none // ==/UserScript== const LOADING_WAIT_TIME = 500; // Convert string to web element function parseDom(arg) { var d = document.createElement('div'); d.innerHTML = arg; return d.firstChild; } GM_addStyle('.myCustomGoogleButtonClass { color: #1967d2; background: transparent; border-width: 1px; border-radius: 4px; border-style: solid; padding: 0 15px 0 15px; height: 36px; font-size: .875rem; border-color: #dadce0; cursor:pointer} .myCustomGoogleButtonClass:hover {background-color: #f1f5f9; color: #174ea6}'); GM_addStyle('.myCustomBaiduButtonClass {text-align: center; margin-left: 14px; width: 106px; height: 30px; line-height: 30px; font-size: 14px; color: #4395ff; letter-spacing: 2px; background-color: #f9f9f9; border: 1px solid #4395ff;border-radius: 3px}'); GM_addStyle('.myCustomDeeplButtonClass {background-color: #fff; border: 1px solid #e3e3e3; border-radius: 8px; cursor: pointer; margin-right: 10px;margin-bottom: 7px; height: 66px; min-width: 160px; box-shadow: 0px 4px 16px rgb(0 0 0 / 8%); font-weight: 400; font-size: 20px; }'); // 谷歌翻译(中国)CONFIG配置文件 const GOOGLE_TRANSLATE_CN = { host: "translate.google.cn", inputAreaSelector: "textarea", containerSelector: "#yDmH0d > c-wiz nav", translateButtonSelector: "", buttonClass: "myCustomGoogleButtonClass" }; // 谷歌翻译(国际)CONFIG配置文件 const GOOGLE_TRANSLATE = { host: "translate.google.com", inputAreaSelector: "textarea", containerSelector: "#yDmH0d > c-wiz nav", translateButtonSelector: "", buttonClass: "myCustomGoogleButtonClass" }; // 百度翻译CONFIG配置文件 const BAIDU_FANYI = { host: "fanyi.baidu.com", inputAreaSelector: "#baidu_translate_input", containerSelector: "#main-outer > div > div > div.translate-wrap > div.trans-operation-wrapper.clearfix > div.trans-operation.clearfix", translateButtonSelector: "#translate-button", buttonClass: "myCustomBaiduButtonClass" }; // 有道翻译CONFIG配置文件 const YOUDAO_FANYI = { host: "fanyi.youdao.com", inputAreaSelector: "#inputOriginal", containerSelector: "body > div.fanyi > div.fanyi__operations > div.fanyi__operations--left", translateButtonSelector: "#transMachine", buttonClass: "" }; // DeepL翻译CONFIG配置文件 const DL_TRANSLATE = { host: "www.deepl.com", inputAreaSelector: "#dl_translator textarea", containerSelector: "#dl_translator > div.lmt__docTrans-tab-container: first", translateButtonSelector: "#dl_translator > div.lmt__docTrans-tab-container > div > button.switchOption--2o-9u.variant_light--1OFSH.active--WFN-c", buttonClass: "myCustomDeeplButtonClass" }; const FORMAT_CN = "格式化"; const FORMAT_EN = "Format"; // Format code const format = function(hostClass) { var txt = document.querySelector(hostClass.inputAreaSelector).value; for (var i=0;i${FORMAT_CN}`); new_button.onclick = function() { var translate_button = document.querySelector(BAIDU_FANYI.translateButtonSelector); format(BAIDU_FANYI); translate_button.click(); }; container = document.querySelector(BAIDU_FANYI.containerSelector); } else if (host == YOUDAO_FANYI.host) { new_button = parseDom(` ${FORMAT_CN} `); new_button.onclick = function() { var translate_button = document.querySelector(YOUDAO_FANYI.translateButtonSelector); format(YOUDAO_FANYI); translate_button.click(); } container = document.querySelector(YOUDAO_FANYI.containerSelector); } else if (host == DL_TRANSLATE.host) { new_button = parseDom(``); new_button.onclick = function() { var translate_button = document.querySelector(DL_TRANSLATE.translateButtonSelector); format(DL_TRANSLATE); translate_button.click(); } container = document.querySelector(DL_TRANSLATE.containerSelector); } container.appendChild(new_button); return; } setTimeout(function(){ createButton(window.location.host); }, LOADING_WAIT_TIME);