From 54559251b062883d195f88a4a399f25c35e169d5 Mon Sep 17 00:00:00 2001 From: ververcpp Date: Thu, 12 Jun 2014 18:53:09 +0800 Subject: [PATCH] First release ver:0.6.0 --- background.js | 215 +++++++++++++++++ icons/icon128.png | Bin 0 -> 9249 bytes icons/icon16.png | Bin 0 -> 696 bytes icons/icon19.png | Bin 0 -> 835 bytes icons/icon38.png | Bin 0 -> 2064 bytes icons/icon48.png | Bin 0 -> 2647 bytes manifest.json | 51 +++++ popup.html | 52 +++++ popup.js | 121 ++++++++++ selection.js | 128 +++++++++++ style/fonts/YDdict-Icon-font.eot | Bin 0 -> 7508 bytes style/fonts/YDdict-Icon-font.svg | 22 ++ style/fonts/YDdict-Icon-font.ttf | Bin 0 -> 7340 bytes style/fonts/YDdict-Icon-font.woff | Bin 0 -> 5044 bytes style/fonts/YDdict-Icon.css | 8 + style/inPage.css | 89 ++++++++ style/style.css | 368 ++++++++++++++++++++++++++++++ utility.js | 104 +++++++++ 18 files changed, 1158 insertions(+) create mode 100644 background.js create mode 100644 icons/icon128.png create mode 100644 icons/icon16.png create mode 100644 icons/icon19.png create mode 100644 icons/icon38.png create mode 100644 icons/icon48.png create mode 100644 manifest.json create mode 100644 popup.html create mode 100644 popup.js create mode 100644 selection.js create mode 100644 style/fonts/YDdict-Icon-font.eot create mode 100644 style/fonts/YDdict-Icon-font.svg create mode 100644 style/fonts/YDdict-Icon-font.ttf create mode 100644 style/fonts/YDdict-Icon-font.woff create mode 100644 style/fonts/YDdict-Icon.css create mode 100644 style/inPage.css create mode 100644 style/style.css create mode 100644 utility.js diff --git a/background.js b/background.js new file mode 100644 index 0000000..4821159 --- /dev/null +++ b/background.js @@ -0,0 +1,215 @@ +function ChaZD(queryWord, sendResponse) { + var url = urls.dict + queryWord; + console.log("Query url: " + url); + var queryResult = {}; + var self = this; + var xhr = new XMLHttpRequest(); + + xhr.open("GET", url, true); + xhr.onreadystatechange = function() { + if (xhr.readyState != 4) return; + var resultObj = self.parseResult.call(self, xhr.responseText); + sendResponse(resultObj); + } + xhr.send(); +} + +ChaZD.prototype.checkErrorCode = function (errorCode) { + var response = { + "message": "", + "error": 0 + }; + switch (errorCode) { + case 0: + response["message"] = "query success"; + break; + case 20: + response["message"] = "要翻译的文本过长"; + response["error"] = 1; + break; + case 30: + response["message"] = "无法进行有效的翻译"; + response["error"] = 1; + break; + case 40: + response["message"] = "不支持的语言类型"; + response["error"] = 1; + break; + case 50: + response["message"] = "无效的key"; + response["error"] = 1; + break; + case 60: + response["message"] = "无辞典结果"; + response["error"] = 1; + break; + default: + } + return response; +} + +ChaZD.prototype.parseResult = function (responseText) { + var result = JSON.parse(responseText); + var resultObj = {}; + var validResult = this.checkErrorCode(result["errorCode"]); + if (!validResult["error"]) { + var titleBlock = this.initTitle(result); + resultObj.titleBlock = titleBlock; + if (result["basic"] !== undefined) { + var basicBlock = this.parseBasicResult(result); + resultObj.basicBlock = basicBlock + } + + if (result["web"] !== undefined) { + var webBlock = this.parseWebResult(result); + resultObj.webBlock = webBlock; + } + } + resultObj.validMessage = validResult["message"]; + return resultObj; +} + +ChaZD.prototype.initTitle = function (result) { + var translation = result["translation"]; + console.log(translation + " " + result["translation"] ); + var queryWord = result["query"]; + + var voiceContainer = this.initVoice(queryWord); + var titleWord = fmt(frames.titleWord, queryWord, voiceContainer); + var titleTranslation = fmt(frames.titleTranslation, translation.toString()); + + return fmt(frames.titleContainer, titleWord, titleTranslation); +} + +ChaZD.prototype.parseBasicResult = function (result) { + var basic = result["basic"]; + var queryWord = result["query"]; + + var phoneticBlock = this.parseBasicPhonetic(basic, queryWord); + var explainsBlock = this.parseBasicExplains(basic, queryWord); + + var basicContainer = fmt(frames.basicContainer, phoneticBlock, explainsBlock); + return basicContainer; +} + +ChaZD.prototype.parseBasicPhonetic = function (basic, queryWord) { + var ukPhonetic = basic["uk-phonetic"]; + var usPhonetic = basic["us-phonetic"]; + + if (ukPhonetic !== undefined && usPhonetic !== undefined) { + var ukVoice = this.initVoice(queryWord, 1); + var ukPhoneticContainer = fmt(frames.ukPhoneticContainer, "[" + ukPhonetic + "]" + ukVoice); + + var usVoice = this.initVoice(queryWord, 2); + var usPhoneticContainer = fmt(frames.usPhoneticContainer, "[" + usPhonetic + "]" + usVoice); + + return fmt(frames.phoneticContainer, ukPhoneticContainer, usPhoneticContainer); + } + + return fmt(frames.phoneticContainer, "", ""); +} + +ChaZD.prototype.initVoice = function (queryWord, type) { + var src = urls.voice + queryWord; + if(type !== undefined) + src = src + "&type=" + type; + var title = ""; + if(type === 1){ + title = "英音"; + } else if (type === 2){ + title = "美音"; + } else { + title = "真人发音"; + } + + return fmt(frames.voiceContainer, src, title); +} + +ChaZD.prototype.parseBasicExplains = function (basic, queryWord) { + var explains = basic["explains"]; + var i; + var explainsContent = ""; + for (i = 0; i < explains.length; i++) { + var currentExplain = explains[i]; + + var haveProperty = currentExplain.indexOf(" "); + var property = (haveProperty !== -1) ? currentExplain.slice(0, haveProperty) : ""; + var propertyTitle = this.parseProperty(property); + var propertyContainer = fmt(frames.propertyContainer, propertyTitle, property); + var explainText = (haveProperty !== -1) ? currentExplain.slice(haveProperty) : currentExplain; + + var explain = fmt(frames.explain, propertyContainer, explainText); + explainsContent += explain; + } + + return fmt(frames.explainsContainer, fmt(frames.explainsList, explainsContent)); +} + +ChaZD.prototype.parseProperty = function (property) { + var propertyText = ""; + switch (property) { + case "adj." : + propertyText = "形容词"; + break; + case "adv." : + propertyText = "副词"; + break; + case "n." : + propertyText = "名词"; + break; + case "vi." : + propertyText = "不及物动词"; + break; + case "vt." : + propertyText = "及物动词"; + break; + case "prep." : + propertyText = "介词"; + break; + case "conj." : + propertyText = "连词"; + break; + case "int." : + propertyText = "感叹词"; + break; + case "abbr." : + propertyText = "代词"; + break; + case "pron." : + propertyText = ""; + break; + default : + } + + return propertyText; +} + + + +ChaZD.prototype.parseWebResult = function (result) { + var web = result["web"]; + var webExplainsContent = ""; + var i; + for (i = 0; i < web.length ; i++) { + var webEplain = fmt(frames.webEplain, web[i].key + web[i].value); + webExplainsContent += webEplain; + } + + return fmt(frames.webExplainsContainer, fmt(frames.webEplainsList, webExplainsContent)); +} + +/* +ChaZD.prototype.parsePhrase = function (queryWord, key) { + var words = []; + words = queryWord.split(/\s+/); +} +*/ + +chrome.runtime.onMessage.addListener( + function(message, sender, sendResponse){ + console.log("message from sender:" + JSON.stringify(message)); + console.log("sender is " + JSON.stringify(sender)); + new ChaZD(message.queryWord, sendResponse); + + return true; +}); diff --git a/icons/icon128.png b/icons/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..25d11a62b88290e5ab3549e610364a9d4a285121 GIT binary patch literal 9249 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 F{U6jb>^A@a literal 0 HcmV?d00001 diff --git a/icons/icon16.png b/icons/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..dbff9d5a46b4420d51108962e343fb0d49593e47 GIT binary patch literal 696 zcmV;p0!RIcP)NfIE*5zzUQASVC<{A?a!v(!K$so+|62B)Ip z#55-Y^j|h!zpB9X0<1k)W+0Eei=qIY=Y|jlpf%Ijj_r~Olo!J6_VM=3F04ZrYxgq< z{1Das4z6cYm`ctYND!DH@Zj9q^Kf9k+wGyUtz(-E zzI-K#%8tQGNvC5d7VFTB9?qZBu)2B?mzI;v2Ln)Pv{s|-z_j|<*f_u(U5&(b-2l6L z26?(zSxG}vCCn3us*21515mqEAnl;Ft*@7%$Qn0vQ$wAX340dq{ zU=C;@+@Dekg)(fCB!6!KKKU-b`-bX)iKox*KszmsorR%;!Re(U3opxPH7w-w3*ZHy zRBEExwDIuKRj8VXSWF(C1qPs#4BdfcdBiM-_aD9^stCy5I0G@lqw(VqwVK7O#}hJc z-kyb`M8+L7$%<_vQIQ4Mjt?~|KqiAC1VEVNUidh&Jti-8RwFyW{{_(K)HY4RMAC~h zh{!QD18W$)PwfBbLHge-JlcK(p-nop*ID+{0000RbVXQnQ*UN;cVTj606}tecV%IA eWpW@!a%E*8G%hf*uhS<00000k%u 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"] + + } ], + + "browser_action": { + "default_popup": "popup.html", + "default_icon": { + "38": "icons/icon38.png", + "19": "icons/icon19.png" + } + }, + + "icons": { + "16": "icons/icon16.png", + "48": "icons/icon48.png", + "128": "icons/icon128.png" + }, + + "commands": { + "_execute_browser_action": { + "suggested_key": { + "default": "Ctrl+Shift+F", + "mac": "MacCtrl+Shift+F" + } + } + } +} \ No newline at end of file diff --git a/popup.html b/popup.html new file mode 100644 index 0000000..b3b2405 --- /dev/null +++ b/popup.html @@ -0,0 +1,52 @@ + + + + + Youdao Dictionary + + + +
+ + +
+ +
+ +
+

+ Tips: 你可以通过“Ctrl+Shift+F”快速启动词典, + 也可以在这里自定义快捷键哦:) +

+
不再显示Tips
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+ + Powered By 有道翻译 +
+ + + +
+
+ + + + \ No newline at end of file diff --git a/popup.js b/popup.js new file mode 100644 index 0000000..fed233d --- /dev/null +++ b/popup.js @@ -0,0 +1,121 @@ +var button = $("search"); +var tipsContainer = $("tips"); +var input = $("query_word"); +var queryResultContainer = $("query_result"); + +function queryInPopup() { + if (!tipsContainer.classList.contains("unshow")) + tipsContainer.classList.add("unshow"); + input.select(); + if (queryResultContainer.classList.contains("unshow")) + queryResultContainer.classList.remove("unshow"); + queryResultContainer.innerHTML = "ψ(._. )>词典君正在翻译。。。"; + chrome.extension.sendMessage({queryWord: input.value}, function(response) { + //alert("response from xhr: " + JSON.stringify(response)); + var resultObj = response; + var resultBlock = ""; + if (resultObj.validMessage == "query success") { + resultBlock += resultObj.titleBlock; + if (resultObj.basicBlock !== undefined) { + resultBlock += resultObj.basicBlock; + } + if (resultObj.webBlock !== undefined) { + resultBlock += resultObj.webBlock; + } + queryResultContainer.innerHTML = resultBlock; + var voiceCollection = document.querySelectorAll(".voice_container"); + for (var i = 0; i < voiceCollection.length; i++) { + var src = voiceCollection[i].getAttribute("data-src"); + var audioBlock = document.createElement("audio"); + audioBlock.setAttribute("src", src); + voiceCollection[i].appendChild(audioBlock); + audioBlock.addEventListener("ended", function(event) { + this.load(); + }) + voiceCollection[i].addEventListener("click", function(event) { + this.firstChild.play(); + }) + } + } else { + queryResultContainer.innerHTML = resultObj.validMessage + "
词典君崩溃了(┬_┬)"; + } + }); +} + +button.addEventListener("click", function(event) { + queryInPopup(); +}); + +input.focus(); +input.addEventListener("keyup", function(event) { + if (event.keyCode === 13) { + queryInPopup(); + } +}); + +function createLink(link, url) { + link.addEventListener("click", function(event) { + chrome.tabs.create({'url': url}); + }); +} + +var issue = $("issue"); +var email = $("email"); +var source = $("source"); +var keySet = $("key_set"); + +createLink(email, "mailto:ververcpp@gmail.com"); +createLink(source, "https://github.com/ververcpp/ChaZD"); +createLink(issue, "https://github.com/ververcpp/ChaZD/issues/new"); +createLink(keySet, "chrome://extensions/configureCommands") + +var setting_button = $("setting_button"); +setting_button.addEventListener("click", function(event) { + //alert(JSON.stringify( $("settings").style)); + this.classList.toggle("setting_button_clicked"); + $("settings").classList.toggle("unshow"); +}) + +var mouseSelect = $("mouseSelect"); +var showPositionSide = $("showPositionSide"); +var showPositionNear = $("showPositionNear"); +var showDuration = $("showDuration"); +var currentDuration = $("currentDuration"); +var turnOffTips = $("turn_off_tips"); +var tips = $("tips"); + +chrome.storage.sync.get(null, function(items) { + mouseSelect.checked = items["mouseSelect"]; + if (items.showTips) { + tips.classList.remove("unshow"); + } + if (items.showPosition === "side") { + showPositionSide.checked = true; + } else if (items.showPosition === "near") { + showPositionNear.checked = true; + } + currentDuration.innerHTML = showDuration.value = items["duration"]; +}); + +turnOffTips.addEventListener("click", function(event) { + tips.classList.add("unshow"); + updateSetting("showTips", false); +}) + +mouseSelect.addEventListener("click", function(event) { + var isChecked = event.target.checked; + updateSetting("mouseSelect", isChecked); +}); + +showPositionSide.addEventListener("click", function(event) { + updateSetting("showPosition", "side"); +}); + +showPositionNear.addEventListener("click", function(event) { + updateSetting("showPosition", "near"); +}); + +showDuration.addEventListener("click", function(event) { + currentDuration.innerHTML = event.target.value; + updateSetting("duration", event.target.value); +}) \ No newline at end of file diff --git a/selection.js b/selection.js new file mode 100644 index 0000000..3ef8092 --- /dev/null +++ b/selection.js @@ -0,0 +1,128 @@ +var resultSideList = document.createElement("div"); +resultSideList.setAttribute("class", "ChaZD_result_side_list"); +document.body.appendChild(resultSideList); + +function queryInPage(event) { + var selection = window.getSelection(); + var selectText = trim(selection.toString()); + var selectRange = selection.getRangeAt(0).getBoundingClientRect(); + if(selectText == "" || !(/[a-zA-Z\s]/.test(selectText))) return; + console.log("Selected Text at %s : %s", location.href, selectText); + var currentSettings = {}; + chrome.storage.sync.get(null, function(items) { + console.log("[Settings after select]"); + for( var key in items) { + currentSettings[key] = items[key]; + console.log(" %s : %s", key, currentSettings[key]); + } + if(!currentSettings["mouseSelect"]) return; + var duration = currentSettings["duration"] + if(currentSettings["showPosition"] == "side") { + //console.log("in 1"); + showResultSide(selectText, duration); + } + if(currentSettings["showPosition"] == "near") { + //console.log("in 2"); + showResultNear(selectText, selectRange, duration, event); + } + }); +} + +function showResultSide(text, duration) { + if(isExist(text)) return; + var resultSideContainer = document.createElement("div"); + resultSideContainer.setAttribute("class", "ChaZD_result_container"); + resultSideContainer.setAttribute("data-text", text); + resultSideContainer.innerHTML = "ψ(._. )>划词君正在翻译。。。"; + chrome.runtime.sendMessage({queryWord: text}, function(response) { + var resultObj = response; + resultSideContainer.innerHTML = ""; + if(resultObj.validMessage === "query success") { + resultSideContainer.innerHTML += resultObj.titleBlock; + if(resultObj.basicBlock) + resultSideContainer.innerHTML += resultObj.basicBlock; + else { + var unableMessage = "╮(╯▽╰)╭划词君无能为力啊
复制给词典君试试吧↗" + resultSideContainer.innerHTML += unableMessage; + } + } + }); + setTimeout(function(){ + resultSideList.appendChild(resultSideContainer); + }, 100); + + setTimeout(function(){ + //resultSideContainer.classList.add("result_side_container_timeup"); + resultSideList.removeChild(resultSideContainer); + }, 1000*duration); +} + +function showResultNear(text, range, duration, event) { + if(isExist(text)) return; + var showNearPosition = {}; + //文本框中选取的内容返回的left top 为0,此时采集鼠标的位置 + if (range.left === 0 && range.top === 0) { + range = { left: event.clientX, top: event.clientY, height: 15}; + } + + var left = range.left + document.body.scrollLeft; + var top = range.top + document.body.scrollTop; + var clientHeight = 0; + // + clientHeight = (document.documentElement.clientHeight > document.body.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight; + console.log("clientHeight : " + clientHeight); + if (range.top >= 150) { + var bottom = clientHeight - top; + showNearPosition = { left: left, bottom: bottom }; + } else { + showNearPosition = { left: left, top: top + range.height + 5 }; + } + + var resultNearContainer = document.createElement("div"); + resultNearContainer.setAttribute("class", "ChaZD_result_container"); + resultNearContainer.setAttribute("data-text", text); + resultNearContainer.style.position = "absolute"; + resultNearContainer.style.left = showNearPosition.left + "px"; + if (showNearPosition.bottom) { + resultNearContainer.style.bottom = showNearPosition.bottom + "px"; + } + if (showNearPosition.top) { + resultNearContainer.style.top = showNearPosition.top + "px"; + } + resultNearContainer.innerHTML = "ψ(._. )>划词君正在翻译。。。"; + chrome.runtime.sendMessage({queryWord: text}, function(response) { + var resultObj = response; + resultNearContainer.innerHTML = ""; + if(resultObj.validMessage === "query success") { + resultNearContainer.innerHTML += resultObj.titleBlock; + if(resultObj.basicBlock) + resultNearContainer.innerHTML += resultObj.basicBlock; + else { + var unableMessage = "╮(╯▽╰)╭划词君无能为力啊
复制给词典君试试吧↗" + resultNearContainer.innerHTML += unableMessage; + } + } + }); + setTimeout(function() { + document.body.appendChild(resultNearContainer); + }, 100); + setTimeout(function() { + document.body.removeChild(resultNearContainer); + }, 1000 * duration); +} + +function isExist(text) { + var resultContainerCollection = document.getElementsByClassName("ChaZD_result_container"); + var length = resultContainerCollection.length; + if (length !== 0) { + for (var i = 0; i < length; i++) { + if (resultContainerCollection[i].getAttribute("data-text") === text) + return true; + } + } + return false; +} + + +document.body.addEventListener("mouseup", queryInPage); + diff --git a/style/fonts/YDdict-Icon-font.eot b/style/fonts/YDdict-Icon-font.eot new file mode 100644 index 0000000000000000000000000000000000000000..a94640d3473a89845ccd997264b7a44609cef419 GIT binary patch literal 7508 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 literal 0 HcmV?d00001 diff --git a/style/fonts/YDdict-Icon-font.svg b/style/fonts/YDdict-Icon-font.svg new file mode 100644 index 0000000..abccde4 --- /dev/null +++ b/style/fonts/YDdict-Icon-font.svg @@ -0,0 +1,22 @@ + + + +Copyright (C) 2014 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/style/fonts/YDdict-Icon-font.ttf b/style/fonts/YDdict-Icon-font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f1e93159d27fd36749d4ffdd4018c3968a262a35 GIT binary patch literal 7340 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 CVhqXv literal 0 HcmV?d00001 diff --git a/style/fonts/YDdict-Icon.css b/style/fonts/YDdict-Icon.css new file mode 100644 index 0000000..c512336 --- /dev/null +++ b/style/fonts/YDdict-Icon.css @@ -0,0 +1,8 @@ +@font-face { + font-family: "YDdict-Icon"; + src: url("YDdict-Icon-font.eot"); + src: url("YDdict-Icon-font.svg") format("svg"), + url("YDdict-Icon-font.woff") format("woff"); + font-weight: normal; + font-style: normal; +} \ No newline at end of file diff --git a/style/inPage.css b/style/inPage.css new file mode 100644 index 0000000..a8462b4 --- /dev/null +++ b/style/inPage.css @@ -0,0 +1,89 @@ +.ChaZD_result_side_list { + position: fixed; + right: 5px; + top: 5px; + margin: 0; + padding: 0; + width: 250px; + z-index: 99999999; + text-align: left; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; +} + +.ChaZD_result_container { + width: 250px; + background-color: #ffdb70; + padding: 5px; + margin: 2px; + opacity: 0.9; + border: 1px solid rgba(209, 209, 209, 1); + border-radius: 2px; + z-index: 99999999; +} + +.ChaZD_result_container .title_container { + color: rgba(41, 94, 255, 1); + display: flex; + max-width: 100%; + font-size: 18px; + margin-bottom: 10px; +} + +.ChaZD_result_container .title_container .title_word { + position: relative; + max-width: 100%; + text-align: left; +} + +.ChaZD_result_container .title_container .title_translation { + display: none; +} + +/*Result Block -- basic container*/ +.ChaZD_result_container .basic_container { + +} + +/*Result Block -- basic container -- phonetic container*/ +.ChaZD_result_container .phonetic_container { + display: none; +} + +/* +.ChaZD_result_container .voice_container::after { + content: '\E803'; + font-family: "YDdict-Icon"; + + -webkit-transition: color 0.2s linear; + transition : color 0.2s linear; +} + +.ChaZD_result_container .voice_container:hover { + color: rgba(119, 110, 101, 1); +} +*/ + +/*Result Block -- basic container -- explains container*/ +.ChaZD_result_container .explains_container { + font-size: 14px; + margin-top: 10px; +} + +.ChaZD_result_container .explains_list { + list-style: none; + margin: 0; + padding: 0; +} + +.ChaZD_result_container .explains_list li { + margin-bottom: 5px; +} + +.ChaZD_result_container .property_container { + margin-right: 5px; +} + +.ChaZD_result_container .voice_container { + display: none; +} \ No newline at end of file diff --git a/style/style.css b/style/style.css new file mode 100644 index 0000000..f47513b --- /dev/null +++ b/style/style.css @@ -0,0 +1,368 @@ +@import url(fonts/YDdict-Icon.css); + +body { + margin: 0.5em; + padding: 0; + width: 300px; + background-color: #faf8ef; + color: #776e65; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; +} + +ul { + list-style: none; + margin: 0; + padding: 0; +} + +.input_container{ + position: relative; + margin: 0; + border: 1px solid #dbd8e4; + box-shadow: -0.2px -0.2px 0.2px 0.2px ; + border-radius: 3px; +} + +.input_container:after { + content: ""; + display: block; + clear: both; +} + +.input_area { + display: block; + padding: 2px; + border: none; + font-size: 1.3em; + width: 270px; + margin: 0 0 0 17px; +} + +.input_area:focus { + outline: none; +} + +.query_button { + display: block; + height: 100%; + float: left; + border: 0; + border-radius: 1px; + margin: 0; + padding: 4px; + background-color: transparent; + line-height: 19px; + color: rgba(0, 0, 0, 0.2); + +} + +.query_button:focus { + outline-color: transparent; +} + +.query_button:hover { + color: rgba(0, 0, 0, 1); +} + +.query_button:active { + color: rgba(235, 0, 0, 1); +} + +.query_button::after { + content: '\E800'; + -webkit-transition: color 0.2s linear; + transition: color 0.2s linear; + font-size: 0.8em; + font-family: "YDdict-Icon"; +} + + + +/*Result Block*/ +.result_container { + margin-top: 10px; + padding: 4px; +} + +.unshow { + display: none; +} + +/*Result Block -- title contaniner*/ +.title_container { + margin-left: 10px; + display: flex; + min-width: 50%; + max-width: 100%; + font-size: 22px; +} + +.title_container .title_phonetic { + display: none; +} + +.title_container .title_word { + position: relative; + max-width: 50%; + text-align: left; +} + +.title_container .title_word .voice_container { + display: inline-block; + margin-left: 10px; + +} + +.title_container .title_word .voice_container::after { + content: '\E804'; + font-family: "YDdict-Icon"; + font-size: 70%; +} + +.title_container .title_translation { + flex:1; + margin-left: 10px; + text-align: justify; + max-width: 50%; +} + + +/*Result Block -- basic container*/ +.basic_container { + margin-top: 10px; +} + +/*Result Block -- basic container -- phonetic container*/ +.phonetic_container { + margin-left: 10px; + font-size: 1em; +} + +.uk_phonetic_container::before { + content: "英 "; + color: #776e65; +} + +.us_phonetic_container::before { + content: "美 "; + color: #776e65; +} + +.uk_phonetic_container, .us_phonetic_container { + display: inline-block; + margin-right: 10px; + color: red; +} + +.voice_container { + cursor: pointer; + display: inline-block; + margin-left: 10px; + color: rgba(119, 110, 101, 0.2); +} + +.voice_container::after { + content: '\E803'; + font-family: "YDdict-Icon"; + + -webkit-transition: color 0.2s linear; + transition : color 0.2s linear; +} + +.voice_container:hover { + color: rgba(119, 110, 101, 1); +} + + +/*Result Block -- basic container -- explains container*/ +.explains_container { + font-size: 14px; + margin-top: 10px; +} + +.explains_list { + border: 1px solid #F0EFF0; + border-radius: 1px; + padding: 10px; +} + +.explains_list li { + margin-bottom: 5px; +} + +.property_container { + margin-right: 5px; +} + +/*Result Block -- web explains container*/ +.web_explains_container { + font-size: 14px; + margin-top: 20px; + position: relative; +} + +.web_title { + position: absolute; + top: -5px; + left: 10px; + background-color: #faf8ef; + font-weight: bold; +} + +.web_title::before { + content: '\E802'; + font-family: "YDdict-Icon"; + margin-right: 5px; + color: #ccbb1e; +} + +.web_explains_list { + border: 1px solid #F0EFF0; + border-radius: 1px; + padding: 10px; + padding-top: 20px; +} + +.web_explains_list li { + margin-bottom: 5px; +} + +.tips_container { + position: relative; + padding: 5px; + font-size: 0.4em; + color: rgba(0, 0, 0, 0.4); +} + +.tips_container p { + margin: 0; + margin-top: 10px; + padding: 0; +} + +.tips_container .link { + color: rgba(0, 161, 194, 1); + cursor: pointer; + -webkit-transition: color 0.2s linear; + transition : color 0.2s linear; +} + +#turn_off_tips { + position: absolute; + right: 5px; + bottom: 5px; + cursor: pointer; + text-decoration: underline; +} + +footer { + font-size: 0.3em; + text-align: center; + position: relative; +} + +footer img { + position: relative; + top:4px; + width: 50px; +} + +.contact_info { + font-size: 0.3em; + font-family: "YDdict-Icon"; + position: absolute; + bottom:0; + right: 0; +} + +.link{ + cursor: pointer; + text-decoration: none; + color: rgba(0, 0, 0, 0.2); + opacity: 0.5; +} + +.link:hover{ + color: rgba(0, 0, 0, 1); +} + +#email::after { + content: '\E806'; + + -webkit-transition: color 0.2s linear; + transition : color 0.2s linear; +} + +#issue::after { + content: '\E805'; + + -webkit-transition: color 0.2s linear; + transition : color 0.2s linear; +} + +#source::after { + content: '\E807'; + + -webkit-transition: color 0.2s linear; + transition : color 0.2s linear; +} + +.setting_button { + position: absolute; + bottom:0; + left: 0; + cursor: pointer; + font-size: 0.3em; + font-family: "YDdict-Icon"; +} + +.setting_button_clicked { + color: #000000; +} + +.setting_button::after { + content: "\E80A"; + -webkit-transition: color 0.2s linear; + transition : color 0.2s linear; +} + +.setting_block { + margin: 5px 0; + padding: 10px; + position: relative; + text-align: justify; + border: 1px solid #F0EFF0; + border-radius: 1px; + background-color: #f2ecd4; +} + +.setting_block div { + margin-top: 5px; +} + +.setting_block label { + margin-left: 5px; +} + +.setting_block input { + margin: 0; +} + +input[type="range"] { + width: 100px; + position: relative; + top:3px; +} + +#save { + position: absolute; + top: 0; + right: 0; +} + +#cancel { + position: absolute; + top: 25px; + right: 0; +} diff --git a/utility.js b/utility.js new file mode 100644 index 0000000..5da35c7 --- /dev/null +++ b/utility.js @@ -0,0 +1,104 @@ +var api = { + key: 1116151381, + keyfrom : "youdaocidian" +}; + +var urls = { + dict : "http://fanyi.youdao.com/openapi.do?keyfrom=" + api.keyfrom +"&key="+ api.key +"&type=data&doctype=json&version=1.1&q=", + voice : "http://dict.youdao.com/dictvoice?audio=" +}; + +var settings = { + mouseSelect : true, //是否启用划词翻译 + showPosition : "side", //划词翻译结果显示的位置 + duration : 5, //翻译结果显示的时间 + showTips : true //是否显示Tips +} + +var frames = { + //title frame + titleContainer : "
#{1}#{2}
", + titleWord : "
#{1}#{2}
", + voiceContainer : "
", + titleTranslation : "
#{1}
", + + //basic frame + basicContainer : "
#{1}#{2}
", + + //basic phonetic frame + phoneticContainer : "
#{1}#{2}
", + ukPhoneticContainer : "
#{1}
", + usPhoneticContainer : "
#{1}
", + + //basic explain frame + explainsContainer : "
#{1}
", + explainsList : "
    #{1}
", + explain : "
  • #{1}#{2}
  • ", + propertyContainer : "#{2}", + + //web explain frame + webExplainsContainer : "
    网络释义及短语
    #{1}
    ", + webEplainsList : "
      #{1}
    ", + webEplain : "
  • #{1}
  • " +} + +chrome.storage.sync.get(null,function(items) { + //console.log(JSON.stringify(items)); + if (items["mouseSelect"] === undefined ) { + console.log("storage 是空的"); + chrome.storage.sync.set(settings); + } else { + console.log("[Current Settings]") + for(var key in items){ + settings[key] = items[key]; + console.log(" %s : %s", key, settings[key]); + } + } +}); + +chrome.storage.onChanged.addListener(function(changes) { + for (var key in changes) { + console.log("Settings Update, [%s] %s => %s", key, changes[key].oldValue, changes[key].newValue); + } +}); + +function $(id) { + return document.getElementById(id) +} + +//判断一个初始化后的对象是否为空 +function isEmpty(obj) { + for (var name in obj) { + return false; + } + return true; +} + +function updateSetting(key, newValue) { + //this.key = key; + console.log("Set %s value to '%s'", key, newValue); + settings[key] = newValue; + chrome.storage.sync.set(settings); +} + +/* + * 文本模板函数fmt, @greatghoul + * 参考TransIt。 + */ +function fmt() { + var args = arguments; + return args[0].replace(/#{(.*?)}/g, function(match, prop) { + return function(obj, props) { + var prop = /\d+/.test(props[0]) ? parseInt(props[0]) : props[0]; + if (props.length > 1) { + return arguments.callee(obj[prop], props.slice(1)); + } else { + return obj[prop]; + } + }(typeof args[1] === 'object' ? args[1] : args, prop.split(/\.|\[|\]\[|\]\./)); + }); +} + +function trim(str) { + return str.replace(/(^\s*)|(\s*$)/g, ""); +} \ No newline at end of file