User:Endo999/dictionarylookup1.js
// this javascript isolates the text word under the
//cursor when it rests on a word for 1.5 seconds
// works in Firefox 1,2.0,3 and IE 6.0,7,8, chrome
// works in Windows Safari, and Opera
// does not work in Konqueror(that I know of, code is disabled for Konqueror)
// with the Google language javascript api this does dictionary lookup
// in several languages.
// the word isolated is translated
// and the translation is placed back in the new window
// on IE, Firefox, chrome, and Epiphany a cursor place over
// selected text (up to 500 characters) will use
// that text
// author: endo999
// author: Paul Cheffers
// email: paul@securecottage.com
// 2008
//
// this webpage is placed in the public domain by the author
// the default languages(the from language is redundant as Google guesses
// the language) but SCLanguageDefaultTo is important is you are porting
// to another Wikipedia Language
// the following variables need to be set in the calling javascript routine
// this gives a gadget manager the ability to set the literals and defaults
// of the system to the languages they wish
// default from and to language
/*
var SCLanguageDefaultTo = 'en';
var SCLanguageDefaultFrom='pt-PT';
- /
// default literals for system
// must be set in calling javascript routine
/*
var SCstrSource = "Source";
var SCstrLanguage = "Language";
var SCstrGoogle = "Google";
var SCstrCloseWindow = "Close Window";
var SCstrSelectLanguage = "Select language (from | to)";
var SCstrWikipedialanguage = "Wikipedia language";
var SCstrDictionary = "Dictionary";
var SCstrWikipedia = "Wikipedia";
var SCstrPopupHelp = "GoogleTrans help?";
var SCstrTurnOffPopups = "Turn GoogleTrans off?";
var SCstrTurnOnPopups = "Turn GoogleTrans on?";
var SCstrTranslationPopups ="GoogleTrans";
var SCstrOff = " (off)";
var SCstrOn = " (on)";
var SCstrChangeOptions = "Change options for GoogleTrans";
var SCstrTranslatePage = "Google: translate page?";
var SCstrHelpUrl =
"http://en.wikipedia.org/w/index.php?title=User:Endo999/dictionarylookuphelp.html&ctype=text/html";
var SCstrSingleWord = "Translation of single words";
var SCstrSelectedText = "Translation of selected text (> 500 characters)";
var SCstrKonqueror = "This feature is not supported on Konqueror";
var SCstrTextTooLarge = "Text element too large to parse!";
var SCstrTextTooLarge = "Text element too large to parse!";
var SCPopupBackgroundColor = "beige";
- /
// set this in main gadget file
// restrictive environments don't like wikipedia.org to set cookies with
//document.domain = "wikipedia.org"
var SCSourcestrlength = SCstrSource.length + SCstrGoogle + 2;
var SCMinLength = 22;
var SCgooglereference1 =
//'' +
''+ SCstrSource +':
'onMouseover="javascript:SCdonthide=true;" ' + 'onclick="javascript:window.open(\''; var SCgooglereference1a = '\')">' + SCstrGoogle + '
var SCgooglereference2 =
'X';
var SClanguageprompt1 =
'
'onMouseover="javascript:SCdonthide=true;" ' + '>'; var SClanguageprompt2 = '
var SClabel="";
var SCtext="";
var SCtranslate="FrenchToEnglish";
var SCtranslateFrom = SCLanguageDefaultFrom;
var SCtranslateTo = SCLanguageDefaultTo;
var SCTooManyTextElements=250;
var SCdonthide = false; // for change of language
var SCwindows = 0; // number of yellow windows
var SCMaxwindows = 1; // max number of yellow windows
var SCscreenWidth = 0, SCscreenHeight = 0;
var SCwrheight=250, SCwrwidth=300;
var SCscrOfX = 0, SCscrOfY = 0;
var SCWikihtml="", SCDicthtml="";
var SCbInsertSpan=false;
var SCalttranslate="";
var SCWikipedialanguage="en.wikipedia.org";
var SCshowwrad = false;
var SCbIsIE = false;
var SCbIsKonqueror = false;
var SCbIsOpera = false;
var SCbIsMozilla = false;
var SCdebug = false;
var SCclientX=0;
var SCclientY=0;
var SCposx = 0; // position of cursor
var SCposy = 0;
var SCPosYAdjust = 42; // if over link with title drop popup window a little
var SCpposx = -1; // previous position of cursor
var SCpposy = -1;
var SCsrcElement=null;
var SCbIsKonquerorEvent=false;
var SCbMouseClicked=false;
var SChInterval = null;
//var SCMaxWordLength = 50;
var SCselectedText = "";
var SCrangeCurx = 0;
var SCrangeCury = 0;
var SCrangeCurx1 = 0;
var SCrangeCury1 = 0;
var SCselectionarray = new Array();
var SCselectionstart = new Array();
var SCselectionend = new Array();
var SCselectionarrayposition = new Array();
var SCselection = new Array();
var SCMaxWordLength=495;
var SCIeRange;
var SCSelectionType;
var SCbIsWordInSelection=false;
var SCTranslationPopups=true;
var SCbIsChrome=false;
var SCShiftKey=false;
if(SCPersistantLoad("TranslationPopups") == "1")
SCTranslationPopups = true;
else SCTranslationPopups = false;
if(navigator.appVersion.match(/MSIE/i))
{
SCbIsIE = true;
}
var SCbIsSafari = false;
if(navigator.appVersion.match(/Safari/i))
{
SCbIsSafari = true;
}
if(navigator.appVersion.match(/Chrome/i))
{
SCbIsSafari = false;
SCbIsChrome = true;
}
if(navigator.appVersion.match(/Konqueror/i))
{
SCbIsKonqueror = true;
}
if(navigator.appName.match(/Opera/i))
{
SCbIsOpera = true;
}
if(navigator.appName.match(/Netscape/i))
{
SCbIsMozilla = true;
}
var SCnn=(document.layers)?true:false;
var SCie=(document.all)?true:false;
function SCkeyUp(e)
{
var evt=(e)?e:(window.event)?window.event:null;
if(evt)
{
var key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
}
if (e.shiftKey==1)
SCShiftKey = true;
else SCShiftKey = false;
}
function SCkeyDown(e)
{
var evt=(e)?e:(window.event)?window.event:null;
if(evt)
{
var key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
}
if (e.shiftKey==1)
SCShiftKey = true;
else SCShiftKey = false;
if(key == 27 && SCdebug == false) // escape key
{
// SCdebug = true;
// SCdeleteEvents();
}
else if(key == 27 && SCdebug == true)
{
// SCdebug = false;
// SCcreateEvents();
}
}
function SCdeleteEvents()
{
document.onkeydown=null;
document.onmousedown = null;
document.body.onmousemove = null;
document.body.onmouseout = null;
}
function SCeventhook(hook,func)
{
if(document.addEventListener)
document.addEventListener(hook, func, false);
else
document.attachEvent("on" + hook, func);
}
function SCcreateEvents()
{
SCeventhook("keyup",SCkeyUp);
SCeventhook("keydown",SCkeyDown);
SCeventhook("mousedown",SCcaptureMousedown);
SCeventhook("mousemove",SCcaptureMousemove);
SCeventhook("mouseout",SCcaptureMouseout);
}
var shiftkeyneeded = SCPersistantLoad('shiftkeyneeded');
if(shiftkeyneeded == "0")
SCShiftKeyNeeded = false;
else SCShiftKeyNeeded = true;
var SCpersistlangFrom = SCPersistantLoad('languageFrom');
if(SCpersistlangFrom != "")
SCtranslateFrom = SCpersistlangFrom;
var SCpersistlangTo = SCPersistantLoad('languageTo');
if(SCpersistlangTo != "")
SCtranslateTo = SCpersistlangTo;
var SCwikilang = SCPersistantLoad('Wikipedialanguage');
if(SCwikilang != "")
SCWikipedialanguage = SCwikilang;
else SCPersistantSave('Wikipedialanguage',SCWikipedialanguage);
SChInterval = setInterval("SCinterval()",1000);
var SCbIsOutsideClientArea = false;
function SCcaptureMouseout(evt)
{
SCbIsOutsideClientArea = true;
SCbMouseClicked = false;
}
var SClastposx=0;
var SClastposy=0;
var SCbInSCInterval = false;
function SCinterval()
{
if(SCbIsKonqueror)
return; // current dont work on Konqueror
try {
if(SCbInSCInterval)
return;
SCbInSCInterval = true;
if(SCbIsMozilla)
{
if(SCsrcElement &&
SCsrcElement.toString().match(/HTMLHtmlElement/i))
SCbIsOutsideClientArea = true;
}
if(SCbIsKonqueror||SCbIsOpera)
{
if(SCsrcElement &&
SCsrcElement.toString().match(/HTMLBodyElement/i))
SCbIsOutsideClientArea = true;
else SCbIsOutsideClientArea = false;
}
else
if(SCbIsIE)
{
SCgetScrollXY();
SCScreenSize();
if(SCposx > SCscreenWidth+SCscrOfX-4 ||
SCposy > SCscreenHeight+SCscrOfY-4)
SCbIsOutsideClientArea = true;
}
var mes = document.getElementById("SCmessage");
if(mes && SCsrcElement)
mes.innerHTML = bIsOutsideClientArea + ":" +
SCbMouseClicked + ":" +
SCposx+","+SCposy+"::"+SCsrcElement.toString();
var posx = SCpposx - SCposx;
if(posx < 0) posx = - posx;
var posy = SCpposy - SCposy;
if(posy < 0) posy = - posy;
if(!SCbMouseClicked && posx < 4 &&
posy < 4
&& !document.getElementById(SCcurrentLink))
{
if(SCsrcElement &&
!(SClastposx == SCposx
&& SClastposy == SCposy)
&& !SCbIsOutsideClientArea
)
{
SCFindElementUnderMouseOver(SCsrcElement);
if(!SCShiftKeyNeeded)
{
SClastposx = SCposx;
SClastposy = SCposy;
}
}
}
else if(document.getElementById(SCcurrentLink)
&&
(posx > 4 || posy > 4)
&& !SCbIsOutsideClientArea
)
SChidespan(SCcurrentLink);
if(!SCdonthide && !SCbMouseClicked)
{
SCpposx = SCposx;
SCpposy = SCposy;
}
SCbInSCInterval = false;
} catch(e) {SCbInSCInterval = false; }
}
function SCcaptureMousemove(evt)
{
SCbIsOutsideClientArea = false;
SCFindPositionOfMouseClick(evt);
var posx = SCposx - SCpposx;
var posy = SCposy - SCpposy;
if(posx < 0) posx = - posx;
if(posy < 0) posy = - posy;
if(!(posx < 4 && posy < 4))
SCbMouseClicked = false;
}
// capture right mouse click
function SCcaptureMousedown(evt)
{
var mouseClick;
if(evt) mouseClick = evt.which;
else mouseClick = window.event.button;
if(/*mouseClick == 1 &&*/ SCbIsOutsideClientArea==false)
{
SCbMouseClicked = true;
}
}
//http://www.quirksmode.org/js/events_properties.html
function SCFindPositionOfMouseClick(e) {
SCposx = 0;
SCposy = 0;
if (!e) var e = window.event;
if (e.pageX || e.pageY) {
SCposx = e.pageX;
SCposy = e.pageY;
}
else if (e.clientX || e.clientY) {
if(1==1)
{
SCclientX=e.clientX;
SCclientY=e.clientY;
SCposx = e.clientX + document.body.scrollLeft
+ document.documentElement.scrollLeft;
SCposy = e.clientY + document.body.scrollTop
+ document.documentElement.scrollTop;
}
else
{
SCposx = window.event.x+document.body.scrollLeft;
SCposy = window.event.y+document.body.scrollTop;
}
}
// SCposx and SCposy contain the mouse position relative to the document
if (e.target)
{
SCsrcElement = e.target;
}
else if (e.srcElement)
{
SCsrcElement = e.srcElement;
}
}
// find the element under the mouse click
// see http://www.quirksmode.org/js/events_properties.html
function SCFindElementUnderMouseOver(targ) {
if(!targ)
return;
if(!SCTranslationPopups)
return;
if(SCShiftKeyNeeded && SCShiftKey == false)
return;
if (targ.nodeType == 3) // defeat Safari bug
{
targ = targ.parentNode;
}
if(targ.nodeName == "TEXTAREA" ||
targ.nodeName == "INPUT")
return; // if input area just return
// only scan through text elements
var SelectionNode=null;
var SelectionOffset=null;
var SelectionAnchorNode = null;
var SelectionAnchorOffset=null;
var children = targ.childNodes;
var ntextchildren = 0;
for(i=0;i { if(children.item(i).nodeType == 3) ntextchildren++; } // if there are too many text elements to parse just return if(ntextchildren > SCTooManyTextElements) { window.status = SCstrTextTooLarge; return; } if(!(SCbIsIE||SCbIsOpera) && window.getSelection) { var userSelection = window.getSelection(); SCselectedText = userSelection.toString(); SelectionNode = userSelection.focusNode; SelectionOffset = userSelection.focusOffset; SelectionAnchorNode = userSelection.anchorNode; SelectionAnchorOffset = userSelection.anchorOffset; for(i=0;i { /* if(userSelection.containsNode(children[i],false)) SCselection[i] = true; else */ if(userSelection.containsNode(children[i],true)) { SCselectionarray[i] = new Array(); SCselectionstart[i] = -1; SCselectionend[i] = -1; SCAreWordsInSelection(userSelection,SCselectionarray[i], children[i],i) SCselection[i] = false; } else { SCselectionarray[i] = new Array(); SCselection[i] = false; SCselectionstart[i] = -1; SCselectionend[i] = -1; } } } else if(SCbIsIE) { SCIeRange = document.selection.createRange(); SCIeRange1 = SCIeRange.duplicate(); SCSelectionType = document.selection.type; } /* var userSelection=""; if(!SCbIsIE && window.getSelection) { userSelection = window.getSelection(); } */ for(i=0;i { if(children.item(i).nodeType == 3) { var bBreak = false; if(SCfindwordin(targ,children.item(i),i)==true) bBreak = true; if(bBreak) break; } } if(SelectionNode && window.getSelection && window.getSelection.toString()!="") { try { var userSelection = window.getSelection(); if(userSelection) { userSelection.collapse(SelectionAnchorNode,SelectionAnchorOffset); userSelection.extend(SelectionNode,SelectionOffset); } } catch(e) { } } // else if(SCbIsIE) // SCIeRange1.select(); } // parent is tag, child must be text node // 1) separate child text element into // a) SCleft span of all words left of current // b) SCcurrent: span of current word // c) SCright: span of all words right of current word // 2) do binarylookup-like search of SCcurrent // span to see if it is over the cursor position // function SCfindwordin(parent,child,childindex) { var debug = SCdebug; SCbIsWordInSelection = false; var words = child.nodeValue.split(/[\s\r\n]+/); var delimiter = " "; var firstcharacter = ""; var lastcharacter = ""; // put a limit on the size of the text element: 4000 words if(words.length > 4000) { window.status = SCstrTextTooLarge; return false; } // if a selection text item then we dont have to do // the search, we can proceed from here // if Wikipedia then dont do // only check here if IE if(typeof SCtranslateFrom != "undefined" && SCtranslateFrom != "Wikipedia") { if(SCbIsIE) { SCselectedText = SCNotTooBigAndInSelection(parent,child,words); if(SCselectedText != "") { SCbIsWordInSelection = true; SCSetInLink(SCselectedText,parent,child,mid,delimiter,words,false); return true; } } } if(child.nodeValue.substring(0,1).match(/[\s\r\n]/)) firstcharacter = delimiter; if(child.nodeValue.match(/[\s\r\n]$/)) lastcharacter = delimiter; // if language is Chinese, split every letter // not on whitespace, as above if(typeof SCtranslateFrom != "undefined" && ((SCtranslateFrom.match("zh","i") || SCtranslateFrom == "ja")|| (SCtranslateFrom == "Wikipedia" && (SCalttranslateFrom.match("zh","i") || SCalttranslateFrom == "ja" ))) ) { var tempnodeValue = child.nodeValue; tempnodeValue.replace(/[\s\r\n]+/," "); words = tempnodeValue.split(""); // words = child.nodeValue.split(""); delimiter = ""; } // no sense in searching if(words.length <= 0) return false; var html1="",html2="",currentword=""; var i,j; var high = words.length; var mid = Math.floor(high/2); var low = 0; var oldmid = -1; var iRepetition = 0; while(1) { if(oldmid == mid) break; // have failed, don't repeat if(++iRepetition > 20) break; // no element is that large if(typeof words[mid] == "undefined") break; // have failed, don't repeat html1 = firstcharacter; // usually nil // create SCleft text string /* for(j=0;j { html1 += words[j] + delimiter; } */ if(mid > 0) { html1 += words.slice(0,mid).join(delimiter); html1 += delimiter; } // create SCright text string /* html2 = ""; for(j=mid+1;j { html2 += words[j] + ((j!=words.length-1)? delimiter:""); } */ if(mid+1 < words.length) { html2 = words.slice(mid+1,words.length).join(delimiter); if(html2 != "") html2 += lastcharacter; } // SCcurrent text string currentword = words[mid]; if(html2 != "") currentword += delimiter; if(html2 == "" && lastcharacter != "") currentword += lastcharacter; // sometimes words[mid] is nil // if the case just back up one and continue if(currentword == delimiter) // ie, space after period { if(debug) alert("resetting currentword"); if(mid { mid++; if(oldmid == mid) oldmid-=2; } else break; continue; } var left = document.createElement('SPAN'); left.setAttribute("id","SCleft"); var right = document.createElement('SPAN'); right.setAttribute("id","SCright"); var current = document.createElement('SPAN'); current.setAttribute("id","SCcurrent"); var str1 = document.createTextNode(html1); var str2 = document.createTextNode(html2); var str3 = document.createTextNode(currentword); left.appendChild(str1); right.appendChild(str2); current.appendChild(str3); // replace child text region with // left,current, and right span elements // TO GET CURSOR POSITIONING parent.replaceChild(right,child); parent.insertBefore(current,right); parent.insertBefore(left,current); var SCcurrent = document.getElementById("SCcurrent"); var SCleft = document.getElementById("SCleft"); var SCright = document.getElementById("SCright"); if(debug) { // debugging code SCcurrent.style.backgroundColor = "yellow"; SCleft.style.backgroundColor="red"; SCright.style.backgroundColor="orange"; } var Curx = SCfindPosX(SCcurrent); var Cury = SCfindPosY(SCcurrent); var Curx1 = Curx + SCcurrent.offsetWidth; var Cury1 = Cury + SCcurrent.offsetHeight; var Leftx = SCfindPosX(SCleft); var Lefty = SCfindPosY(SCleft); var Leftx1 = Leftx + SCleft.offsetWidth; var Lefty1 = Lefty + SCleft.offsetHeight; var Rightx = SCfindPosX(SCright); var Righty = SCfindPosY(SCright); var Rightx1 = Rightx + SCright.offsetWidth; var Righty1 = Righty + SCright.offsetHeight; // special processing for IE var bInsertForIE = false; var bUpForIE = false; var bDownForIE = false; var bBreakForIE = false; if(SCbIsIE) { var sElem = ""; sElem = SCcurrent.componentFromPoint( SCclientX,SCclientY); if(sElem == "") { bInsertForIE = true; } else { var sElem1 = ""; var sElem2 = ""; sElem1 = SCleft.componentFromPoint( SCclientX,SCclientY); sElem2 = SCright.componentFromPoint( SCclientX,SCclientY); if(sElem1 == "outside" && sElem2 == "outside") bBreakForIE=true; if(sElem1 == "") bUpForIE = true; if(sElem2 == "") bDownForIE = true; } } if(debug) { alert(Curx+","+Curx1+":"+Cury+","+Cury1+"::"+SCposx+","+SCposy + ":::" + high+","+mid+","+low); alert(Lefty+","+Lefty1+":"+Righty+","+Righty1+"::"+SCposx+","+SCposy + ":::" + high+","+mid+","+low); } var currentHeight = SCcurrent.offsetHeight; var currentWidth = SCcurrent.offsetWidth; parent.removeChild(right); parent.removeChild(current); parent.replaceChild(child,left); // parent.replaceChild(child,span1); // if cursor below whole element then fail if(1==0 && SCposy > Righty1 && Righty < Righty1 && Lefty1 != Righty1 ) { if(debug)alert("left break"); break; } // if cursor before whole element then fail if(1==0 &&SCposy < Lefty && Lefty < Lefty1) { if(debug)alert("right break"); break; } if(bBreakForIE) break; oldmid = mid; var SCbCursorOverSelection=false; if(!SCbIsIE&&!SCbIsOpera) { if(SCselection[childindex] == true) { SCbCursorOverSelection=true; } else if(SCselectionarray[childindex].length>=mid && SCselectionarray[childindex][mid] == true) { SCbCursorOverSelection=true; } } if((SCposx >= Curx && SCposx <= Curx1 && SCposy >= Cury && SCposy <= Cury1) || bInsertForIE) { var linkText = words[mid]; if(!SCbIsIE && SCbCursorOverSelection && SCtranslateFrom != "Wikipedia") { linkText = SCselectedText; SCbIsWordInSelection = true; } SCSetInLink(linkText,parent,child,mid,delimiter,words,true); return true; } if(bUpForIE) { high = mid; mid = Math.floor((low + high)/2); } else if(bDownForIE) { low = mid; mid = Math.floor((low + high)/2); } else if(Cury > SCposy) // go up in element { high = mid; mid = Math.floor((low + high)/2); } else if(Cury1 < SCposy) // go down in element { low = mid; mid = Math.floor((low + high)/2); } else if(SCposx < Curx) // go up in element { high = mid; mid = Math.floor((low + high)/2); } else if(SCposx > Curx1) // go down in element { low = mid; mid = Math.floor((low + high)/2); } } return false; } var SCindex = 0; // for ids of translation windows // put the translation window near the cursor point var SCcurrentLink = ""; var SClinkword = ""; function SCSetInLink(word,parent,child,wordindex,delimiter,words,bIsSearchDone) { if(SCwindows >= SCMaxwindows) return; SCwindows++; var linkname = "SC" + (++SCindex); SCcurrentLink = linkname; SClinkword = word; if(word.length > SCMaxWordLength) { word = word.substring(0,SCMaxWordLength); word += "..."; } if((SCtranslateFrom == "ja" || SCtranslateFrom.match("zh","i")) && !SCbIsWordInSelection ) // && SCtranslateTo != "en") {//ch|ja to non en language // translate to next punctuation mark var i; var wordlist=""; var beginindex = (wordindex > 0)?wordindex-1:0; var endindex = words.length-1; for(i=beginindex;i<=endindex;i++) { if(words[i].match(/\s/)) break; wordlist += words[i]; } word = wordlist; } var str1 = document.createTextNode(word); var a1 = document.createElement("DIV"); a1.setAttribute("id",linkname); if(!SCbIsIE) a1.setAttribute("class","SCPopup"); else a1.className = "SCPopupIE"; if(!SCbIsIE) { a1.setAttribute("onMousedown",'SChidespan("' + linkname + '")'); } a1.setAttribute("onMouseover","SCdonthide=true;"); a1.setAttribute("onMouseout","SCdonthide=false;"); SCbInsertSpan = false; if(SCtranslateFrom != "Wikipedia") { a1.appendChild(str1); SCWikihtml = SCWikipediaLink(wordindex,delimiter,words).innerHTML; SCDicthtml = ""; } else { a1.appendChild(SCWikipediaLink(wordindex,delimiter,words)); SCWikihtml=""; SCDicthtml=word; if(!SCbIsIE) { a1.setAttribute("onMousedown",""); a1.firstChild.setAttribute("onMousedown",""); } } var thebody = document.getElementsByTagName("BODY"); // var html = document.getElementsByTagName("HTML"); var item = document.getElementById("SCitem"); if(item) item.appendChild(a1); if(SCtranslateFrom == "Wikipedia") { SCsetLanguageDefault("wikipedialanguageoptions", "Wikipedialanguage") } // cursorposition is absolute, positioning of // webpage elements may upset translation window // positioning, so append this window to body. // position window SCPositionPopup(linkname,true); if(SCtranslateFrom != "Wikipedia") { var theword = word; if((SCtranslateFrom.match("zh","i") || SCtranslateFrom == "ja") && !SCbIsWordInSelection ) { var currword = word; var beginindex = (wordindex > 0)?wordindex-1:0; var endindex = (wordindex < words.length-1)? wordindex+1:wordindex; var numwords = endindex - beginindex; if(numwords == 2) theword += " " + words[beginindex]+currword +" "+currword + words[endindex]; else if(numwords == 1 && beginindex == wordindex) theword += " " + currword + words[endindex]; else if(numwords == 1 && endindex == wordindex) theword += " " + words[beginindex] + currword; beginindex = wordindex; // we use cedit and edict for english stuff if(SCtranslateTo == "en"&&1==0) { endindex = (wordindex+10 < words.length)? wordindex+10:words.length-1; var i; var wordlist=""; for(i=beginindex;i<=endindex;i++) { if(words[i].match(/[\r\n\s]/)) break; wordlist += words[i]; } if(i-beginindex > 2) theword += " " + wordlist; } else {//ch|ja to non en language // translate to next punctuation mark var i; var wordlist=""; endindex = words.length-1; for(i=beginindex;i<=endindex;i++) { if(words[i].match(/\s/)) break; words[i] = words[i].replace(/\'/g,"\u0026#39;"); words[i] = words[i].replace(/\"/g,"\u0026quot;"); wordlist += words[i]; } theword = wordlist; } } SCasyncGet(linkname, theword); } } // is the current element in a link and does this link have a title? function SCIsSrcElementInALink() { if(!SCsrcElement) return false; if(SCsrcElement.nodeName.match(/^a$/i) && ((SCsrcElement.getAttribute("title") != null && SCsrcElement.getAttribute("title") != "") || typeof popupVersion != "undefined") ) return true; var Elem = SCsrcElement; while(Elem.parentNode) { if(Elem.nodeName.match(/^a$/i) && ((Elem.getAttribute("title") != null && Elem.getAttribute("title") != "") || typeof popupVersion != "undefined") ) return true; Elem = Elem.parentNode; } return false; } function SCPositionPopup(linkname,bAdjust) { var a2 = document.getElementById(linkname); var thebody = document.getElementsByTagName("BODY"); var posyadjust = 0; var posxadjust = 0; var bAdjustPosition = SCIsSrcElementInALink(); if(bAdjustPosition && typeof popupVersion != "undefined" && bAdjust) posyadjust = -SCPosYAdjust; else if(bAdjustPosition) posyadjust = SCPosYAdjust; if(a2 && a2.style) { if(SCbIsIE) { // for ie // body overflow needs to be set // a2.style.position = "absolute"; a2.style.left = SCposx; a2.style.top = SCposy + posyadjust; a2.onMouseover=new Function("SCdonthide=true;"); a2.onMouseout=new Function("SCdonthide=false;"); // if in ie the initial span goes over the right // side of screen var doclength = SCfinddoclength(a2); var a2overflow = (SCposx+a2.scrollWidth+1) - doclength; if(a2overflow > 0) { var newposx = SCposx - a2overflow; // a2.style.position="absolute"; a2.style.left = newposx; a2.style.top=SCposy + posyadjust; } } else { // a2 element returns 0 for following function var doclength = SCfinddoclength(thebody[0]); var a2overflow = (SCposx+a2.scrollWidth+1) - doclength; if(a2overflow > 0) { var newposx = SCposx - a2overflow; // a2.style.position="absolute"; a2.style.left = newposx + "px"; a2.style.top=(SCposy + posyadjust) + "px"; // } else { a2.style.left = (SCposx) + "px"; a2.style.top = (SCposy + posyadjust) + "px"; } } // a2.style.display="block"; } } // after translation window has been left clicked // remove it function SChidespan(id) { if(SCdonthide) return; // so change of language can be done try { SCwindows--; if(SCwindows < 0) SCwindows = 0; var ob = document.getElementById(id); //alert(ob.innerHTML) if(SCbIsOpera && !ob) alert("ob not found"); if(SCbIsOpera && 1==0) { ob = document.getElementById("SCitem"); // delete all children while(ob.childNodes.length>0) { ob.removeChild(ob.childNodes[0]); } } else { var styl = ob.style; styl.display = "none"; if(ob && ob.parentNode) ob.parentNode.removeChild(ob); else if(SCbIsOpera) alert("maybe no parentnode"); } } catch(err) { if(SCbIsOpera) alert("unable to hide " + id); } // clear the html SCWikihtml = ""; SCDicthtml = ""; } function SCfinddoclength(obj) { var ScrollBarOffset = 0; if(SCbIsIE) { ScrollBarOffset = 20; } if(SCbIsOpera) return window.innerWidth; else return document.body.clientWidth-ScrollBarOffset; // minus the scroll bar if IE if (obj.offsetParent) { while (obj.offsetParent) { obj = obj.offsetParent; } } return obj.offsetWidth; } // code from http://www.quirksmode.org/js/findpos.html function SCfindPosX(obj) { var curleft = 0; if(!obj) return 0; if (obj.offsetParent) { while (obj.offsetParent) { curleft += obj.offsetLeft obj = obj.offsetParent; } } else if (obj.x) { curleft += obj.x; } return curleft; } // code from http://www.quirksmode.org/js/findpos.html function SCfindPosY(obj) { var curtop = 0; if(!obj) return 0; if (obj.offsetParent) { while (obj.offsetParent) { curtop += obj.offsetTop obj = obj.offsetParent; } } else if (obj.y) { curtop += obj.y; } return curtop; } // place meaning within translation window function SCInsertTranslation(translatedword) { // var translatedword = SCrequest.responseText; var translation = translatedword.split("|"); // translation[0] id of window // translation[1] word // translation[2] translated word var meaning = translation[2]; if(meaning == '\n') meaning = "NOT FOUND!!"; meaning = meaning.replace(/\\u0026#39;/gi,"'"); meaning = meaning.replace(/\\u0026quot;/gi,'"'); if(SCtranslateFrom == "Wikipedia" && !SCbInsertSpan) { SCDicthtml = meaning; return; } SCbInsertSpan = true; // SCbInsertSpan = false; var ob = document.getElementById(translation[0]); if(ob) { try{ var span1 = document.createElement("SPAN"); var newid = "x" + translation[0]; span1.setAttribute("id",newid); span1.innerHTML = meaning; if(SCbIsIE) { var newfunction = new Function("SCdonthide=false;"); span1.onmouseout = newfunction; var newfunction1 = new Function("SCdonthide=true;"); span1.onmouseover = newfunction1; } ob.replaceChild(span1,ob.firstChild); var span2 = document.getElementById(newid); var bIsInLink = SCIsSrcElementInALink(); var pixelstring = "px"; if(SCbIsIE) pixelstring = ""; // the following code handles the IE // case where the yellow window goes // to the right of the body if(!SCbIsSafari) { var doclength = SCfinddoclength(span2.parentNode); var span2overflow = (SCposx+span2.scrollWidth+1) - doclength; if(span2overflow > 0) { var newposx = SCposx - span2overflow; span2.parentNode.style.position="absolute"; span2.parentNode.style.left = newposx; span2.parentNode.style.top=SCposy; if(bIsInLink && typeof popupVersion == "undefined") span2.parentNode.style.top = (SCposy + SCPosYAdjust) + pixelstring; } } if(bIsInLink && typeof popupVersion != "undefined") { span2.parentNode.style.top = (SCposy - span2.parentNode.offsetHeight) + pixelstring; } } catch(err) { alert("unable to set innerHTML"); } } //else alert("no id:" + translatedword); } // issue Google Ajax request function SCasyncGet(id,word) { var languagepath = "en|fr"; // consult SCtranslate for language translation if(typeof SCtranslateFrom != "undefined" && typeof SCtranslateTo != "undefined" ) { languagepath = SCtranslateFrom + "|" + SCtranslateTo; } var persistantlanguagepathFrom = SCPersistantLoad('languageFrom'); var persistantlanguagepathTo = SCPersistantLoad('languageTo'); if(persistantlanguagepathFrom != "" && persistantlanguagepathTo != "") languagepath = persistantlanguagepathFrom + "|" + persistantlanguagepathTo; if(languagepath=="Wikipedia") languagepath = "en|fr"; // if(languagepath == "Wikipedia") // { // } // else { // google limits to 500 characters of translation if(word.length > SCMaxWordLength) word = word.substring(0,SCMaxWordLength); var bIsSelectedText = "NO"; if(SCbIsWordInSelection) bIsSelectedText = "YES"; SCgoogleLookup(word,id); } } function SCreplaceHtml(obj,newhtml) { while(obj.childNodes.length>0) { obj.removeChild(obj.childNodes[0]); } var newspan = document.createElement("SPAN"); newspan.innerHTML = newhtml obj.appendChild(newspan); } function SClanguageChange(obj,id) { var langoptions = obj.options[ obj.selectedIndex ].value; if(id.match(/From/)) { SCtranslateFrom = langoptions; SCPersistantSave('languageFrom',SCtranslateFrom); } else if(id.match(/To/)) { SCtranslateTo = langoptions; SCPersistantSave('languageTo',SCtranslateTo); } // SCtranslate = langoptions; //SCdonthide = false; //SChidespan(SCcurrentLink); } function SCwikipedialanguageChange(obj) { var langoptions = obj.options[ obj.selectedIndex ].value; SCWikipedialanguage = langoptions; SCPersistantSave('Wikipedialanguage',SCWikipedialanguage); var objWiki = document.getElementById(SCcurrentLink); if(!objWiki) { alert("objWiki failed: " + SCcurrentLink); } var arrLinks = objWiki.getElementsByTagName("A"); var i; for(i=0;i { var theonclick = arrLinks[i].getAttribute("onclick"); if(!theonclick) continue; if(theonclick.toString().match(/^(.*)..\.wikipedia\.org\?(.*)$/mi)) { var newonclick = RegExp.$1 + SCWikipedialanguage +".wikipedia.org" + '?' + RegExp.$2; if(SCbIsIE) { if(newonclick.match(/\{(\s*javascript:)?(.*)\}/mi) || newonclick.match(/(javascript:)?(.*)/mi)) { var newfunction = new Function("return " + RegExp.$2 + ";"); arrLinks[i].onclick = newfunction; } } else arrLinks[i].setAttribute("onclick",newonclick); } } } function SCSettings() { var linkname = "SC" + (++SCindex); SCcurrentLink = linkname; var str1 = document.createTextNode(""); var a1 = document.createElement("DIV"); a1.setAttribute("id",linkname); if(!SCbIsIE) // firefox accepts these attributes // ie does not { a1.setAttribute("onMousedown",'SChidespan("' + linkname + '")'); a1.setAttribute("class","SCPopup"); /* a1.setAttribute("style","text-decoration:none;background-color:" + SCPopupBackgroundColor + ";border: 1px solid blue;position:absolute;font-size:14pt;z-index:9999;overflow:visible;display:none;line-height:normal;"); */ } if(SCbIsIE) { a1.className="SCPopupIE"; // a1.setAttribute("href",'javascript:SChidespan("' + linkname + '")'); } a1.setAttribute("onMouseover","SCdonthide=true;"); a1.setAttribute("onMouseout","SCdonthide=false;"); a1.appendChild(str1); if(!SCbIsIE) { a1.setAttribute("onMousedown",""); // a1.firstChild.setAttribute("onMousedown",""); } var thebody = document.getElementsByTagName("BODY"); // var html = document.getElementsByTagName("HTML"); var item = document.getElementById("SCitem"); if(item) item.appendChild(a1); SCPositionPopup(linkname,false); SCmakevisiblelanguagechange(); } function SCHideSettings() { SCdonthide=false; SCPersistantSave('TranslationPopups',(SCTranslationPopups)?"1":"0"); var popsid = document.getElementById("ca-TransPopsId"); if(!popsid) return; var anchor1 = popsid.getElementsByTagName( "a" )[0]; if(!anchor1) return; var text1; if(SCTranslationPopups) text1 = document.createTextNode(SCstrTranslationPopups + SCstrOn); else text1 = document.createTextNode(SCstrTranslationPopups + SCstrOff); // delete text from anchor in tab while(anchor1.childNodes.length>0) { anchor1.removeChild(anchor1.childNodes[0]); } // replace text in anchor in tab anchor1.appendChild(text1); SChidespan(SCcurrentLink); } function SCSaveShiftKeyNeeded() { SCPersistantSave("shiftkeyneeded",SCShiftKeyNeeded?"1":"0"); } var SCnewhtml = ""; function SCmakevisiblelanguagechange() { var obj = document.getElementById(SCcurrentLink); if(!obj) { alert("unable to get object: SCmakevisiblelanguagechange " + SCcurrentLink); return; } SCdonthide = true; var persistantlanguageFrom = SCPersistantLoad('languageFrom'); if(persistantlanguageFrom == "") persistantlanguageFrom = SCLanguageDefaultFrom; var persistantlanguageTo = SCPersistantLoad('languageTo'); if(persistantlanguageTo == "") persistantlanguageTo = SCLanguageDefaultTo; var newhtml = 'X' + ' '' + SCstrSelectLanguage + ' '' + ' SCstrSingleWord + SCstrOn + ' SCstrSelectedText + ((SCbIsIE || (SCbIsMozilla&&!(SCbIsOpera||SCbIsKonqueror )))?SCstrOn:SCstrOff) + ((SCbIsKonqueror)?SCstrKonqueror + ' ' ; var newspan = document.createElement("DIV"); newspan.setAttribute("onMouseover","javascript:SCdonthide=true;"); if(SCbIsIE) { newspan.onmouseover = new Function("SCdonthide=true;"); } newspan.innerHTML = newhtml; var i; while(obj.childNodes.length>0) { obj.removeChild(obj.childNodes[0]); } // obj.replaceChild(newspan,obj.firstChild); obj.appendChild(newspan); if(SCbIsSafari) obj.setAttribute("onMousedown",""); // obj.innerHTML = newhtml; SCsetLanguageDefault("languageoptionsFrom","languageFrom"); SCsetLanguageDefault("languageoptionsTo","languageTo"); } function SCsetLanguageDefault(id,key) { var i; var obj = document.getElementById(id); if(!obj) return; var defaultlanguage = SCPersistantLoad(key); if(defaultlanguage == "") { // if(typeof SCtranslate == "undefined") { if(key.match(/From/)) defaultlanguage = SCLanguageDefaultFrom; else if(key.match(/To/)) defaultlanguage = SCLanguageDefaultTo; } // else defaultlanguage = SCtranslate; } if(!obj || (obj && !obj.options)) { alert("setLanguageDefault: bad object passed!" + id + ":" + key); } for(i=0;i { obj.options[i].selected = false; if(obj.options[i].value.match(defaultlanguage,"i")) { obj.options[i].selected = true; } } if(SCbIsSafari) { obj.setAttribute("style","text-decoration:underline"); } } function SCPersistantSave(key,value) { /* if(SCbIsIE) SCUserDataSave(key,value); else if(typeof globalStorage != "undefined") SCGlobalStorageSave(key,value); else */ SCsetcookieVal(key,value); } function SCPersistantLoad(key) { /* if(SCbIsIE) return SCUserDataLoad(key); else if(typeof globalStorage != "undefined") return SCGlobalStorageLoad(key); else */ return SCgetcookieVal(key); } function SCUserDataSave(key,value) { SCPersistElement.setAttribute(key,value); SCPersistElement.save("oXMLStore"); } function SCUserDataLoad(key) { SCPersistElement.load("oXMLStore"); var retc = SCPersistElement.getAttribute(key); if(retc == null) retc = ""; return retc; } function SCGlobalStorageSave(key,value) { if(globalStorage) { eval ("globalStorage['www.securecottage.com']." + key + "='" + value + "'"); } } function SCGlobalStorageLoad(key) { var retc = ""; if(globalStorage) { retc = eval ("globalStorage['wikipedia.org']." + key ); if (retc == null) return ""; return retc.value; } return ""; } function SCsetcookieVal(cookieKey,cookieValue) { var ExpireDate = new Date(); ExpireDate.setYear(ExpireDate.getYear() + 1910); document.cookie = cookieKey + '=' + cookieValue + "; path=/; " // + "domain=" + document.domain + "; " + "expires=" + ExpireDate.toGMTString(); } function SCgetcookieVal(cookieName) { var aCookie = ""; var thisCookie; aCookie = document.cookie; thisCookie = aCookie.split("; "); var i; var retCookie = ""; for(i=0;i { if(cookieName == thisCookie[i].split("=")[0].substring(0,cookieName.length)) { retCookie = thisCookie[i].split("=")[1]; break; } } return retCookie; } function SCwikichange(obj) { var parobj = document.getElementById(SCcurrentLink); if(parobj && SCWikihtml != "") { SCalttranslateFrom = SCtranslateFrom; SCalttranslateTo = SCtranslateTo; SCtranslateFrom = "Wikipedia"; SCDicthtml = parobj.innerHTML; if(SCbIsIE||SCbIsSafari) SCreplaceHtml(parobj,SCWikihtml); else parobj.innerHTML = SCWikihtml; SCsetLanguageDefault("wikipedialanguageoptions", "Wikipedialanguage") if(SCbIsSafari) parobj.setAttribute("onMousedown",""); // SChidewradd(); } } function SCdictionarychange(obj) { var parobj = document.getElementById(SCcurrentLink); if(parobj && SCDicthtml != "") { SCtranslateFrom = SCalttranslateFrom; SCtranslateTo = SCalttranslateTo; SCtranslateFrom = SCPersistantLoad('languageFrom'); SCtranslateTo = SCPersistantLoad('languageTo'); if(SCtranslateFrom == "") SCtranslateFrom = SCLanguageDefaultFrom; if(SCtranslateTo == "") SCtranslateTo = SCLanguageDefaultTo; SCWikihtml = parobj.innerHTML; if(SCbIsIE||SCbIsSafari) SCreplaceHtml(parobj,SCDicthtml); else parobj.innerHTML = SCDicthtml; if(parobj && !SCbIsIE) { parobj.setAttribute("onMousedown",'SChidespan("' + SCcurrentLink + '")'); } if(!SCbInsertSpan) { SCasyncGet(SCcurrentLink,SCDicthtml); SCbInsertSpan=true; } } } function SCWikipediaLink(wordindex,delimiter,words) { var i,j; var newhtml = '
' onMouseover="javascript:SCdonthide=true;"' + ' onMouseout="javascript:SCdonthide=false;">' + newhtml += newhtml += ' ' var numwords=4; if((SCtranslateFrom.match("zh","i") || SCtranslateFrom == "ja" ) || (SCtranslateFrom == "Wikipedia" && (SCalttranslateFrom.match("zh","i") || SCalttranslateFrom == "ja" )) ) numwords = 10; var wordindexend = wordindex + numwords; if(wordindexend > words.length-1) wordindexend = words.length-1; for(i=wordindex;i<=wordindexend;i++) { var linktext = ""; for(j=wordindex;j<=i;j++) { var theword=""; if(words[j].match(/^(.*)\'s$/)) theword = RegExp.$1; else theword = words[j]; theword = theword.replace(/\'/g,"\u0026#39;"); theword = theword.replace(/\"/g,"\u0026quot;"); linktext += theword; if(j
linktext += delimiter; } } newhtml +=' var newspan = document.createElement("SPAN"); newspan.innerHTML = newhtml; return newspan; } //http://www.howtocreate.co.uk/tutorials/javascript/browserwindow function SCScreenSize() { if( typeof( window.innerWidth ) == 'number' ) { //Non-IE SCscreenWidth = window.innerWidth; SCscreenHeight = window.innerHeight; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode' SCscreenWidth = document.documentElement.clientWidth; SCscreenHeight = document.documentElement.clientHeight; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { //IE 4 compatible SCscreenWidth = document.body.clientWidth; SCscreenHeight = document.body.clientHeight; } } //http://www.howtocreate.co.uk/tutorials/javascript/browserwindow function SCgetScrollXY() { if( typeof( window.pageYOffset ) == 'number' ) { //Netscape compliant SCscrOfY = window.pageYOffset; SCscrOfX = window.pageXOffset; } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) { //DOM compliant SCscrOfY = document.body.scrollTop; SCscrOfX = document.body.scrollLeft; } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) { //IE6 standards compliant mode SCscrOfY = document.documentElement.scrollTop; SCscrOfX = document.documentElement.scrollLeft; } } // is the current cursor position inside // a selected area. The selected area must be // within one node and be on the same line // only works for IE function SCNotTooBigAndInSelection(theparent,thechild) { if(!SCbIsIE) return ""; var retWordList = SCIsInSelection(theparent,thechild); if(retWordList == "" || retWordList == null) return ""; var retWordArray = retWordList.split(/[\r\n\s]+/); return retWordList; } // only works for IE function SCIsInSelection(theparent,thechild) { var returnSelectedText=""; var debug = false; var userSelection; if(SCbIsIE) // IE { var debug=false; if(SCSelectionType.match(/none/i)||SCSelectionType == ""||SCSelectionType == null) return ""; if(SCSelectionType.match(/text/i)) { var range = SCIeRange; var s = range.text; var collection = range.getClientRects(); var i; for(i=0;i { var leftt = collection[i].left + document.body.scrollLeft+ document.documentElement.scrollLeft; var rightt = collection[i].right + document.body.scrollLeft+ document.documentElement.scrollLeft; var topp = collection[i].top + document.body.scrollTop+ document.documentElement.scrollTop; var bottomm = collection[i].bottom + document.body.scrollTop+ document.documentElement.scrollTop; if(SCposx >= leftt && SCposx <= rightt && SCposy >= topp && SCposy <= bottomm ) return s; if(debug) alert(collection[i].left+"-"+collection[i].right+"_"+ collection[i].top +"_"+collection[i].bottom+"__"+ leftt+":" + ":" + rightt + ":" + ":"+document.body.scrollLeft +":"+ document.documentElement.scrollLeft + ":"+topp+":" +bottomm+":"+":" +document.body.scrollTop+":" + document.documentElement.scrollTop +":" +SCposx+":"+SCposy); } return ""; } } } function SCgetRangeObject(selectionObject) { // Safari! var range = document.createRange(); range.setStart(selectionObject.anchorNode,selectionObject.anchorOffset); range.setEnd(selectionObject.focusNode,selectionObject.focusOffset); return range; } function SCAreWordsInSelection(userSelection,SCselectionarray,child,childindex) { var range = SCgetRangeObject(userSelection); var str = child.nodeValue; if(str == "" || str == null) return; var delimiter = /^[\r\n ]+/ var delimiter1 = /^\S+/; var bNoSpace = false; if(SCtranslateFrom.match("zh","i") || SCtranslateFrom == "ja") { bNoSpace = true; } SCselectionstart[childindex] = -1; SCselectionend[childindex] = -1; var range1 = document.createRange(); var i,j,k; for(i=0,j=0;i { if(SCisPointInRange(range,range1,child,i)) { if(SCselectionstart[childindex] == -1) SCselectionstart[childindex] = i; SCselectionend[childindex] = i; } if(str.substring(i).match(delimiter)) continue; else { if(SCisPointInRange(range,range1,child,i)) { SCselectionarray[j] = true; } else SCselectionarray[j] = false; j++; } k=i; for(k=i;!bNoSpace && k { if(SCisPointInRange(range,range1,child,k)) SCselectionend[childindex] = k; if(!str.substring(k).match(delimiter1)) break; } i=k; } } function SCOldAreWordsInSelection(userSelection,SCselectionarray,child,childindex) { var range = SCgetRangeObject(userSelection); var str = child.nodeValue; if(str == "" || str == null) return; var delimiter = /^[\r\n ]+/ var delimiter1 = /^\S+/; var bNoSpace = false; if(SCtranslateFrom.match("zh","i") || SCtranslateFrom == "ja") { bNoSpace = true; } SCselectionstart[childindex] = -1; SCselectionend[childindex] = -1; var range1 = document.createRange(); var i,j,k; for(i=0,j=0;i { if(range.isPointInRange(child,i)) { if(SCselectionstart[childindex] == -1) SCselectionstart[childindex] = i; SCselectionend[childindex] = i; } if(str.substring(i).match(delimiter)) continue; else { if(range.isPointInRange(child,i)) { SCselectionarray[j] = true; } else SCselectionarray[j] = false; j++; } k=i; for(k=i;!bNoSpace && k { if(!str.substring(k+1).match(delimiter1)) break; } i=k; if(range.isPointInRange(child,i)) SCselectionend[childindex] = i; } } function SCisPointInRange(range,range1,child,i) { if(SCbIsMozilla) return range.isPointInRange(child,i); range1.setStart(child,i); range1.setEnd(child,i); if(range.compareBoundaryPoints(Range.START_TO_START,range1) <= 0 && range.compareBoundaryPoints(Range.END_TO_END,range1) >= 0) return true; else return false; } function SCgoogleLookup(text,label) { SClabel = label; SCtext = text; SCgoogletranslate = "http://translate.google.com/translate?hl=en" + "&tl=" + SCtranslateTo +"&u=" + encodeURIComponent(document.location.href); google.language.translate(text, "", SCtranslateTo, function(result) { if (result.translation||result.error) { var nbspstr = ""; var i; var SClanguagestrlength = SCGetGoogleLanguage(SCtranslateTo).length + 10; if(SClanguagestrlength < SCSourcestrlength) SClanguagestrlength = SCSourcestrlength+10; if(result.translation) { for(i=result.translation.length;i { nbspstr+=" "; } } var pretranslatedword = ""; if(SClinkword.split(/\s/).length == 1) pretranslatedword = SClinkword + ": "; var insertstring = SClabel + '|' + SCtext + '|' + SClanguageprompt1 + '->' + SCGetGoogleLanguage(SCtranslateTo) + SClanguageprompt2 + SCgooglereference2 + SClabel + SCgooglereference3 + ' ((result.translation)? (pretranslatedword + result.translation) :result.error.message) + nbspstr +' ' SCgooglereference1 + SCgoogletranslate + SCgooglereference1a + ' ; SCInsertTranslation(insertstring); } }); } SCScreenSize(); function SCGetGoogleLanguage(lcode) { var l; for (l in google.language.Languages) { if(lcode == google.language.Languages[l]) return l; } return "undefined"; } function SCMakeGoogleLanguages() { var l; var lcode; var newoptions = ""; for (l in google.language.Languages) { lcode = google.language.Languages[l]; if(google.language.isTranslatable(lcode)) { if(!l.match(/UNKNOWN/i)) newoptions += ''+"\n"; } } SCnewoptions = newoptions; } SCScreenSize(); addOnloadHook( function () { SCcreateEvents(); } ); addOnloadHook( function () { var bPops = SCPersistantLoad('TranslationPopups'); var title = SCstrTranslationPopups; if(bPops == "1" || bPops == "") { SCTranslationPopups = true; title += SCstrOn; if(bPops == "") SCPersistantSave('TranslationPopups','1'); } else { SCTranslationPopups = false; title += SCstrOff; } // SCMakeGoogleLanguages(); addPortletLink('p-cactions',"javascript:SCSettings()", title, "ca-TransPopsId", SCstrChangeOptions, ""); } );
' +
' +
' +
' +
' : '') +
'
Wikipedia language
' +
';
Close Window
' +