From 2cff1e6cb00df02f39b4b8f298675a87387d467c Mon Sep 17 00:00:00 2001 From: example Date: Wed, 23 Jan 2019 09:45:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=AD=E6=96=87=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BC=98=E5=8C=96UI?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- translate/translate-dictionary.js | 96 ++++++++++++++++--------------- translate/translate.js | 4 +- 2 files changed, 53 insertions(+), 47 deletions(-) diff --git a/translate/translate-dictionary.js b/translate/translate-dictionary.js index f311193..0e21883 100644 --- a/translate/translate-dictionary.js +++ b/translate/translate-dictionary.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 划词翻译:多词典查询 // @namespace http://tampermonkey.net/ -// @version 1.8 +// @version 1.9 // @description 划词翻译调用“有道词典(有道翻译)、金山词霸、Bing 词典(必应词典)、沪江小D、谷歌翻译” // @author https://github.com/barrer // @match http://*/* @@ -376,14 +376,21 @@ var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; - link.href = URL.createObjectURL(new Blob([style.textContent], { + link.href = URL.createObjectURL(new Blob(['\ufeff', style.textContent], { type: 'text/css;charset=UTF-8' })); - // 翻译图标、内容面板、当前选中文本、当前翻译引擎 + // 翻译图标、内容面板、翻译内容列表、当前选中文本、当前翻译引擎、当前翻译面板内容列表数组 var icon = document.createElement('tr-icon'), content = document.createElement('tr-content'), + contentList = document.createElement('div'), selected, - engineId; + engineId, + idsType; + // 初始化内容面板 + var largeHeight = document.createElement('div'); // 防止滚动条闪来闪去 + largeHeight.style.height = '10000px'; + content.appendChild(contentList); + content.appendChild(largeHeight); // 发音引擎 var audioEngines = []; // [{name: 'abc', url: 'http://*.mp3', ...}, ...] // 翻译引擎结果集 @@ -431,37 +438,37 @@ id: 'icon-dict', image: 'data:image/png;base64,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', trigger: function (text) { - var idsType = idsExtension.LIST_DICT; + idsType = idsExtension.LIST_DICT; if (text != text.toLowerCase()) { idsType = idsExtension.LIST_DICT_LOWER_CASE; } ajax('http://open.iciba.com/huaci_v3/dict.php?word=' + encodeURIComponent(text), function (rst) { engineResult[ids.ICIBA] = parseIciba(rst); - showContent(idsType); + showContent(); }, function (rst) { engineResult[ids.ICIBA] = htmlToDom('error: 无法连接翻译服务'); - showContent(idsType); + showContent(); }); ajax('http://dict.youdao.com/jsonapi?xmlVersion=5.1&jsonversion=2&q=' + encodeURIComponent(text), function (rst) { engineResult[ids.YOUDAO] = parseYoudao(rst); - showContent(idsType); + showContent(); }, function (rst) { engineResult[ids.YOUDAO] = htmlToDom('error: 无法连接翻译服务'); - showContent(idsType); + showContent(); }); ajax('https://cn.bing.com/dict/search?q=' + encodeURIComponent(text), function (rst) { engineResult[ids.BING] = parseBing(rst); - showContent(idsType); + showContent(); }, function (rst) { engineResult[ids.BING] = htmlToDom('error: 无法连接翻译服务'); - showContent(idsType); + showContent(); }); ajax('https://dict.hjenglish.com/w/' + encodeURIComponent(text), function (rst) { engineResult[ids.HJENGLISH] = parseHjenglish(rst); - showContent(idsType); + showContent(); }, function (rst) { engineResult[ids.HJENGLISH] = htmlToDom('error: 无法连接翻译服务'); - showContent(idsType); + showContent(); }, { headers: { 'Cookie': 'HJ_SID=' + uuid() + '; HJ_SSID_3=' + uuid() + '; HJ_CST=1; HJ_CSST_3=1; HJ_UID=' + uuid() @@ -470,24 +477,24 @@ if (text != text.toLowerCase()) { // 小写再请求一次 ajax('http://open.iciba.com/huaci_v3/dict.php?word=' + encodeURIComponent(text.toLowerCase()), function (rst) { engineResult[ids.ICIBA_LOWER_CASE] = parseIciba(rst); - showContent(idsType); + showContent(); }, function (rst) { engineResult[ids.ICIBA_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务'); - showContent(idsType); + showContent(); }); ajax('http://dict.youdao.com/jsonapi?xmlVersion=5.1&jsonversion=2&q=' + encodeURIComponent(text.toLowerCase()), function (rst) { engineResult[ids.YOUDAO_LOWER_CASE] = parseYoudao(rst); - showContent(idsType); + showContent(); }, function (rst) { engineResult[ids.YOUDAO_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务'); - showContent(idsType); + showContent(); }); ajax('https://cn.bing.com/dict/search?q=' + encodeURIComponent(text.toLowerCase()), function (rst) { engineResult[ids.BING_LOWER_CASE] = parseBing(rst); - showContent(idsType); + showContent(); }, function (rst) { engineResult[ids.BING_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务'); - showContent(idsType); + showContent(); }); } } @@ -496,6 +503,7 @@ id: 'icon-google', image: 'data:image/png;base64,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', trigger: function (text) { + idsType = idsExtension.LIST_GOOGLE; var url = 'https://translate.google.cn/translate_a/single?client=gtx&dt=t&dt=bd&dj=1&source=input&hl=zh-CN&sl=auto'; url += '&tk=' + token(text); if (hasChineseByRange(text)) @@ -504,10 +512,10 @@ url += '&tl=zh-CN&q=' + text; ajax(url, function (rst) { engineResult[ids.GOOGLE] = parseGoogle(rst); - showContent(idsExtension.LIST_GOOGLE); + showContent(); }, function (rst) { engineResult[ids.GOOGLE] = htmlToDom('error: 无法连接翻译服务'); - showContent(idsExtension.LIST_GOOGLE); + showContent(); }); } }]; @@ -522,8 +530,10 @@ if (!isDrag()) { // 没有拖动鼠标抬起的时候触发点击事件 if (engineId == obj.id) return; // 已经是当前翻译引擎 - else - cleanContent(); // 清空之前翻译结果 + contentList.innerHTML = ''; // 清空翻译内容列表 + content.style.display = 'block'; // 立马显示翻译面板 + content.scrollTop = 0; // 翻译面板滚动到顶端 + content.scrollLeft = 0; // 翻译面板滚动到左端 engineId = obj.id; // 翻译引擎 ID engineActivateShow(); // 显示翻译引擎指示器 audioEngines = []; // 清空发音引擎 @@ -769,7 +779,7 @@ }); } /**翻译引擎结果集状态判断*/ - function isAllDone(idsType) { + function isAllDone() { var rst = false; idsType.forEach(function (id, i) { if (i == 0) @@ -783,9 +793,9 @@ return rst; } /**显示内容面板*/ - function showContent(idsType) { + function showContent() { log('showContent:', idsType, engineResult); - if (isAllDone(idsType)) { + if (isAllDone()) { log('showContent allDone'); } log('showContent rendering'); @@ -803,14 +813,14 @@ audioEngines.forEach(function (obj) { audio.appendChild(getPlayButton(obj)); }); - // 翻译内容 - content.innerHTML = ''; + contentList.innerHTML = ''; // 清空翻译内容列表 // 比较大小写内容 var needDel = {}; for (var key in idsExtension.lowerCaseMap) { if (engineResult[key] && engineResult[idsExtension.lowerCaseMap[key]] && - engineResult[key].innerHTML == engineResult[idsExtension.lowerCaseMap[key]].innerHTML) { + (engineResult[key].innerHTML == engineResult[idsExtension.lowerCaseMap[key]].innerHTML || + engineResult[key].innerHTML.toLowerCase() == engineResult[idsExtension.lowerCaseMap[key]].innerHTML.toLowerCase())) { needDel[key] = key; } } @@ -820,20 +830,14 @@ var title = document.createElement('div'); title.innerHTML = idsExtension.names[id]; title.setAttribute('class', 'list-title'); - content.appendChild(title); + contentList.appendChild(title); } - content.appendChild(engineResult[id]); + contentList.appendChild(engineResult[id]); } }); if (engineId != 'icon-google') { // 谷歌翻译不显示发音图标 - content.insertBefore(audio, content.childNodes[0]); + contentList.insertBefore(audio, contentList.childNodes[0]); } - var largeHeight = document.createElement('div'); // 防止滚动条闪来闪去 - largeHeight.style.height = '10000px'; - content.appendChild(largeHeight); - content.style.display = 'block'; - content.scrollTop = 0; - content.scrollLeft = 0; } /**隐藏翻译引擎指示器*/ function engineActivateHide() { @@ -856,13 +860,6 @@ engineActivateHide(); forceStopDrag(); } - /**清空翻译面板*/ - function cleanContent() { - content.innerHTML = ''; - var largeHeight = document.createElement('div'); // 防止滚动条闪来闪去 - largeHeight.style.height = '10000px'; - content.appendChild(largeHeight); - } /**发音*/ function play(obj) { if (isDrag()) { // 拖动时候不触发发音 @@ -1043,6 +1040,15 @@ if (oald) html += '
《牛津高阶英汉双解词典第八版》
' + oald.outerHTML + '
'; } + // 计算机翻译 + var machineTrans = doc.querySelector('.smt_hw'); + if (machineTrans && machineTrans.innerHTML.indexOf('计算机翻译') != -1) { + var parent = machineTrans.parentNode; + var zhText = parent.querySelector('.p1-11'); + if (zhText) { + html += '
' + zhText.outerHTML + '
';; + } + } } catch (error) { log(error); html += error; diff --git a/translate/translate.js b/translate/translate.js index 05dd3f1..e240ccf 100644 --- a/translate/translate.js +++ b/translate/translate.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Translate // @namespace http://tampermonkey.net/ -// @version 4.0 +// @version 4.1 // @description 划词翻译调用“金山词霸、有道词典(有道翻译)、Google Translate(谷歌翻译)、沪江小D、搜狗翻译、必应词典(必应翻译)、Microsoft Translator(必应在线翻译)、海词词典、百度翻译、Oxford Learner's Dictionaries、Oxford Dictionaries、Merriam-Webster、汉典、PDF 划词翻译”网页翻译 // @author https://github.com/barrer // @match http://*/* @@ -92,7 +92,7 @@ var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; - link.href = URL.createObjectURL(new Blob([style.textContent], { + link.href = URL.createObjectURL(new Blob(['\ufeff', style.textContent], { type: 'text/css;charset=UTF-8' })); var gm = {