666f6f
Scriptwright
|
// ==UserScript==
// @name Highlight2Translate
// @namespace google
// @include *
// ==/UserScript==
//create the main div and set it's style.
window.div=document.createElement("div");
var divStyle="position:absolute;display:none;z-index:1000;border-left:solid 0.5px #0000AA;border-top:solid 1px #0000AA;border-right:solid 2.5px #0000AA;border-bottom:solid 2px #0000AA;background-color:white;padding-left:5px;padding: 1pt 3pt 1pt 3pt;font-size: 10pt;color: #000000;";
window.div.setAttribute("style",divStyle);
document.body.appendChild(window.div);
//create the language dropdown.
window.select=document.createElement('select');
var i = 0;
window.select.options[i++]=new Option("Albanian", "sq", false, false);
window.select.options[i++]=new Option("Arabic", "ar", false, false);
window.select.options[i++]=new Option("Bulgarian", "bg", false, false);
window.select.options[i++]=new Option("Catalan", "ca", false, false);
window.select.options[i++]=new Option("Chinese (Simplified)", "zh-CN", false, false);
window.select.options[i++]=new Option("Chinese (Traditional)", "zh-TW", false, false);
window.select.options[i++]=new Option("Croatian", "hr", false, false);
window.select.options[i++]=new Option("Czech", "cs", false, false);
window.select.options[i++]=new Option("Danish", "da", false, false);
window.select.options[i++]=new Option("Dutch", "nl", false, false);
window.select.options[i++]=new Option("English", "en", true, true);
window.select.options[i++]=new Option("Estonian", "et", false, false);
window.select.options[i++]=new Option("Filipino", "tl", false, false);
window.select.options[i++]=new Option("Finnish", "fi", false, false);
window.select.options[i++]=new Option("French", "fr", false, false);
window.select.options[i++]=new Option("Galician", "gl", false, false);
window.select.options[i++]=new Option("German", "de", false, false);
window.select.options[i++]=new Option("Greek", "el", false, false);
window.select.options[i++]=new Option("Hebrew", "iw", false, false);
window.select.options[i++]=new Option("Hindi", "hi", false, false);
window.select.options[i++]=new Option("Hungarian", "hu", false, false);
window.select.options[i++]=new Option("Indonesian", "id", false, false);
window.select.options[i++]=new Option("Italian", "it", false, false);
window.select.options[i++]=new Option("Japanese", "ja", false, false);
window.select.options[i++]=new Option("Korean", "ko", false, false);
window.select.options[i++]=new Option("Latvian", "lv", false, false);
window.select.options[i++]=new Option("Lithuanian", "lt", false, false);
window.select.options[i++]=new Option("Maltese", "mt", false, false);
window.select.options[i++]=new Option("Norwegian", "no", false, false);
window.select.options[i++]=new Option("Persian", "fa", false, false);
window.select.options[i++]=new Option("Polish", "pl", false, false);
window.select.options[i++]=new Option("Portuguese", "pt", false, false);
window.select.options[i++]=new Option("Romanian", "ro", false, false);
window.select.options[i++]=new Option("Russian", "ru", false, false);
window.select.options[i++]=new Option("Serbian", "sr", false, false);
window.select.options[i++]=new Option("Slovak", "sk", false, false);
window.select.options[i++]=new Option("Slovenian", "sl", false, false);
window.select.options[i++]=new Option("Spanish", "es", false, false);
window.select.options[i++]=new Option("Swedish", "sv", false, false);
window.select.options[i++]=new Option("Thai", "th", false, false);
window.select.options[i++]=new Option("Turkish", "tr", false, false);
window.select.options[i++]=new Option("Ukrainian", "uk", false, false);
window.select.options[i++]=new Option("Vietnamese", "vi", false, false);
window.div.appendChild(window.select);
//create the separator span.
window.separator=document.createElement("span");
window.separator.innerHTML=":";
window.div.appendChild(window.separator);
//create the translation span.
window.span=document.createElement("span");
window.div.appendChild(window.span);
//when the google scripts are loaded, add a mouseup event to the page
function languageLoaded() {
window.addEventListener("mouseup", window.mouseUp, false);
window.addEventListener("change", window.select.change, false);
}
window.select.change=function(e){
unsafeWindow.google.language.detect(window.text, window.detectLanguage);
}
//the mouseup event get the highlighted text and pass the text to window.detectLanguage function
window.mouseUp=function (event){
if (event.target==window.div)
return;
var elms = window.div.getElementsByTagName('*');
for(i=0;i<=elms.length;i++)
if (event.target==elms[i]) {
return;
}
window.event=event;
window.div.style.display="none";
window.text=window.getSelection();
if (window.text=="")
return;
unsafeWindow.google.language.detect(window.text,window.detectLanguage);
}
//detect the language of the hightlighted text and translate it
window.detectLanguage=function(result) {
window.text = window.text.toString();
unsafeWindow.google.language.translate(window.text,result.language,window.select[window.select.selectedIndex].value,translateResult);
}
//if translation exists, display the translation box with the translation
window.translateResult=function(result){
if (result.translation)
{
window.span.innerHTML=result.translation;
if (window.event != null)
{
//you can customize the horizontal position of the translation box by changing "10" to other numbers
window.div.style.left=(window.event.clientX+window.scrollX+10).toString()+"px";
//you can customize the vertical position of the translation box by changing "10" to other numbers
window.div.style.top=(window.event.clientY+window.scrollY+10).toString()+"px";
window.div.style.display="inline";
}
}
}
//include the google ajax language api script
unsafeWindow.doneLoadingJSAPI = function() { unsafeWindow.google.load('language','1', {"callback" : languageLoaded}); }
var script = document.createElement('script'); script.src = 'http://www.google.com/jsapi?callback=doneLoadin...; script.type = "text/javascript"; document.getElementsByTagName('head')[0].appendChild(script);
|