Корисник:Endo999/GoogleTrans.js: Разлика помеѓу преработките

Избришана содржина Додадена содржина
ie9 support
 
google api v2 changes and new api key put in
Ред 4:
// selected text translation (up to 500 characters) only on IE, Firefox, and Epiphany, and chrome
 
// this has only been tested on the monobook skinand vector skins
 
/*
DisClaimer
 
The author of this code is not responsible for any
use of it, but will endeavor to fix any problems that is
reported to him. (messages to Endo999)
 
*/
 
 
 
Ред 71 ⟶ 81:
var SCstrGuessLanguage = "Any language";
var SCstrShiftKeyNeeded = "Shift key down to bring up Popup? Turn Option ";
var SCstrNextSentence = "Translate Next Sentence?";
 
var SCbNoShiftKeyBrowser = false;
 
Ред 98 ⟶ 110:
SCPopupBackgroundColor +
';border: 1px solid blue;font-size:14pt;z-index:9999; ' +
'overflow:visible;display:block;line-height:normal;padding:.5em;width:auto;}'
+
'.SCPopupIEA {position:absolute;background-color: ' +
SCPopupBackgroundColor +
';border: 1px solid blue;font-size:14pt;z-index:9998; ' +
'overflow:visible;display:block;line-height:normal;padding:.5em;width:auto;}'
+
Ред 104 ⟶ 121:
 
);
/*
 
function SCGoogleLanguageLoaded() {
Ред 113 ⟶ 130:
google.load("language", "1", {"callback" : SCGoogleLanguageLoaded});
}
*/
 
 
 
// this api key is not strictly necessary, but Google maintains they will email
// you if, for some reason, they withdraw the Google translation services
// the gadget manager is welcome to log onto code.google.com and get his own
// api key.
 
var SCGoogleAPIKeyV2 = "AIzaSyBUpyYOT_9D8lzlKXRWqeVKN8tFshTZXps";
var SCGoogleAPIKey = "ABQIAAAAIL6lIdsFmMh3QB6iZZYqHBT5zsu4IrEqi6aTPGb6EkJ6C2zK0BQyWgLmv16JfxNy3RYUKg7GyR6XAg";
 
//importScriptURI("http://www.google.com/jsapi?callback=SCloadGoogleLanguage&key=" +
// SCGoogleAPIKey);
 
 
Ред 145 ⟶ 161:
}
);
 
var SCnewoptions;
//var SCGoogleLanguageCodes = new Array();
//var SCGoogleLanguageNames = new Array();
 
function SCGoogleLanguageLoaded(response) {
if(1== 0 && response.data && response.data.languages)
{
var i;
for(i=0;i<response.data.languages.length;i++)
{
SCGoogleLanguageCodes[i] =
response.data.languages[i].language;
SCGoogleLanguageNames[i] =
response.data.languages[i].name;
}
}
 
 
SCbGoogleLanguageLoaded = true;
//SCMakeGoogleLanguages();
}
var SCbGoogleLanguageLoaded = false;
var SCloadedScripts = {}; // included-scripts tracker
function SCimportScriptURI(url) {
if (SCloadedScripts[url]) {
// return null;
}
SCloadedScripts[url] = true;
var s = document.createElement('script');
s.setAttribute('src',url);
s.setAttribute('type','text/javascript');
s.setAttribute("charset","utf-8");
// s.setAttribute("charset","utf-8");
document.getElementsByTagName('head')[0].appendChild(s);
// return s;
return;
}
 
 
function SCloadGoogleLanguage() {
var source = 'https://www.googleapis.com/language/translate/v2/languages?target=en&key=' +
SCGoogleAPIKeyV2 +
'&callback=SCGoogleLanguageLoaded';
 
SCimportScriptURI(source);
 
}
 
 
 
// 90 percent of Google requests are for the language list
// better to hardcode it in this case
// list made 8/10/2011
// may have to remake list if Indian regional languages become supported.
var SCGoogleLanguageNames = [
'Afrikaans',
'Albanian',
'Arabic',
'Belarusian',
'Bulgarian',
'Catalan',
'Chinese (traditional)',
'Chinese (simplified)',
'Croatian',
'Czech',
'Danish',
'Dutch',
'English',
'Estonian',
'Filipino',
'Finnish',
'French',
'Galician',
'German',
'Greek',
'Haitian creole',
'Hebrew',
'Hindi',
'Hungarian',
'Icelandic',
'Indonesian',
'Irish',
'Italian',
'Japanese',
'Latvian',
'Lithuanian',
'Macedonian',
'Malay',
'Maltese',
'Norwegian',
'Persian',
'Polish',
'Portuguese',
'Romanian',
'Russian',
'Serbian',
'Slovak',
'Slovenian',
'Spanish',
'Swahili',
'Swedish',
'Thai',
'Turkish',
'Ukrainian',
'Vietnamese',
'Welsh',
'Yiddish'];
var SCGoogleLanguageCodes = [
'af',
'sq',
'ar',
'be',
'bg',
'ca',
'zh-TW',
'zh-CN',
'hr',
'cs',
'da',
'nl',
'en',
'et',
'tl',
'fi',
'fr',
'gl',
'de',
'el',
'ht',
'iw',
'hi',
'hu',
'is',
'id',
'ga',
'it',
'ja',
'lv',
'lt',
'mk',
'ms',
'mt',
'no',
'fa',
'pl',
'pt',
'ro',
'ru',
'sr',
'sk',
'sl',
'es',
'sw',
'sv',
'th',
'tr',
'uk',
'vi',
'cy',
'yi'];
var SCnewoptions =
'<option value="af">Afrikaans</option>'+
'<option value="sq">Albanian</option>'+
'<option value="ar">Arabic</option>'+
'<option value="be">Belarusian</option>'+
'<option value="bg">Bulgarian</option>'+
'<option value="ca">Catalan</option>'+
'<option value="zh-TW">Chinese (traditional)</option>'+
'<option value="zh-CN">Chinese (simplified)</option>'+
'<option value="hr">Croatian</option>'+
'<option value="cs">Czech</option>'+
'<option value="da">Danish</option>'+
'<option value="nl">Dutch</option>'+
'<option value="en">English</option>'+
'<option value="et">Estonian</option>'+
'<option value="tl">Filipino</option>'+
'<option value="fi">Finnish</option>'+
'<option value="fr">French</option>'+
'<option value="gl">Galician</option>'+
'<option value="de">German</option>'+
'<option value="el">Greek</option>'+
'<option value="ht">Haitian creole</option>'+
'<option value="iw">Hebrew</option>'+
'<option value="hi">Hindi</option>'+
'<option value="hu">Hungarian</option>'+
'<option value="is">Icelandic</option>'+
'<option value="id">Indonesian</option>'+
'<option value="ga">Irish</option>'+
'<option value="it">Italian</option>'+
'<option value="ja">Japanese</option>'+
'<option value="lv">Latvian</option>'+
'<option value="lt">Lithuanian</option>'+
'<option value="mk">Macedonian</option>'+
'<option value="ms">Malay</option>'+
'<option value="mt">Maltese</option>'+
'<option value="no">Norwegian</option>'+
'<option value="fa">Persian</option>'+
'<option value="pl">Polish</option>'+
'<option value="pt">Portuguese</option>'+
'<option value="ro">Romanian</option>'+
'<option value="ru">Russian</option>'+
'<option value="sr">Serbian</option>'+
'<option value="sk">Slovak</option>'+
'<option value="sl">Slovenian</option>'+
'<option value="es">Spanish</option>'+
'<option value="sw">Swahili</option>'+
'<option value="sv">Swedish</option>'+
'<option value="th">Thai</option>'+
'<option value="tr">Turkish</option>'+
'<option value="uk">Ukrainian</option>'+
'<option value="vi">Vietnamese</option>'+
'<option value="cy">Welsh</option>'+
'<option value="yi">Yiddish</option>';
 
var SCTranslateableLanguages = [
'af',
'sq',
'ar',
'be',
'bg',
'ca',
'zh-CN',
'zh-TW',
'hr',
'cs',
'da',
'nl',
'en',
'et',
'tl',
'fi',
'fr',
'gl',
'de',
'el',
'ht',
'iw',
'hi',
'hu',
'is',
'id',
'ga',
'it',
'ja',
'lv',
'lt',
'mk',
'ms',
'mt',
'no',
'fa',
'pl',
'pt',
'ro',
'ru',
'sr',
'sk',
'sl',
'es',
'sw',
'sv',
'th',
'tr',
'uk',
'vi',
'cy',
'yi'];
 
function SCMakeGoogleLanguages()
{
var l;
var lcode;
var newoptions = "";
var bLangNotSupported = true;
var b2digitsLangNotSupported = true;
var language2digits = "";
// alert("scmakegooglelanguages");
 
 
var i;
var j;
for (i=0;i<SCGoogleLanguageCodes.length;i++)
{
l = SCGoogleLanguageNames[i];
lcode = SCGoogleLanguageCodes[i];
var bTranslateable=false;
for(j=0;j<SCTranslateableLanguages.length;j++)
{
if(SCTranslateableLanguages[j].toLowerCase()
== lcode.toLowerCase() )
bTranslateable = true;
}
if(!bTranslateable)
continue;
 
if(!l.match(/UNKNOWN/i))
newoptions +=
'<option value="' + lcode + '">' + (l.substring(0,1).toUpperCase() + l.substring(1).toLowerCase()) + '</option>'+"\n";
}
SCnewoptions = newoptions;
 
 
}
 
function SCMakeGoogleLanguages1()
{
var l;
Ред 247 ⟶ 572:
 
var SCgooglereference3 = '\')">X</a>';
 
var SCgooglereference4 =
'';
 
 
 
Ред 258 ⟶ 587:
var SClanguageprompt2 =
'</a></small>&nbsp;';
 
var SCnextsentencestr =
'\&nbsp;\&nbsp;<small><a class="SCyWikipedia" href="javascript:SCnextsentence(\'translate\')">' + SCstrNextSentence +'</a></small>';
 
 
 
Ред 270 ⟶ 603:
 
var SCdonthide = false; // for change of language
var SCdontposition=false; // automatic next sentence
var SCwindows = 0; // number of yellow windows
var SCMaxwindows = 1; // max number of yellow windows
Ред 317 ⟶ 651:
var SCShiftKey=false;
var SCbIsIE9=false;
var SCbIsIE6=false;
var SCbIsOpera11=false;
var SCbIsFirefox35Like=false;
var SCbIsFirefox35 = false;
 
if(SCPersistantLoad(SCGoogleTransPersistString) == "1")
Ред 331 ⟶ 669:
)
SCbIsIE8 = true;
if(navigator.userAgent.indexOf('MSIE 6') != -1)
SCbIsIE6 = true;
if(navigator.userAgent.match(/MSIE ([0-9]+)/))
{
Ред 378 ⟶ 718:
{
SCbIsOpera = true;
 
if(navigator.userAgent.match(/Version\/([0-9]+)\.([0-9]+)/))
{
var version1 = new Number(RegExp.$1);
var version2 = new Number(RegExp.$2);
// if(version1 >= 11)
// SCbIsOpera11 = true;
SCbIsOpera11 = false;
}
 
}
if(navigator.appName.match(/Netscape/i))
Ред 383 ⟶ 733:
SCbIsMozilla = true;
}
if(navigator.userAgent.match(/Firefox\/([0-9]+)\.([0-9]+)/))
{
var version1 = new Number(RegExp.$1);
var version2 = new Number(RegExp.$2);
if(version1 >= 3 && version2 >= 5)
SCbIsFirefox35 = true;
if(version1 >= 4)
SCbIsFirefox35 = true;
}
 
if(SCbIsFirefox35 || SCbIsSafari || SCbIsChrome||SCbIsOpera11)
SCbIsFirefox35Like = true;
 
 
 
Ред 1.705 ⟶ 2.068:
 
// place meaning within translation window
function SCInsertTranslation(label,text1,translatedword)
{
// var translatedword = SCrequest.responseText;
Ред 1.712 ⟶ 2.075:
// var translation = translatedword.split("|");
// translation[0] id of window
// translation[1] word
// translation[2] translated word
// var meaning = translation[2];
var meaning = translatedword;
if(meaning == '\n')
meaning = "NOT FOUND!!";
Ред 1.732 ⟶ 2.096:
// SCbInsertSpan = false;
 
var ob = document.getElementById(translation[0]label);
if(ob)
{
Ред 1.740 ⟶ 2.104:
var span1 = document.createElement("SPAN");
var newid = "x" + translation[0]label;
span1.setAttribute("id",newid);
Ред 1.773 ⟶ 2.137:
var span2overflow = (SCposx+span2.scrollWidth+1) - doclength;
if(span2overflow > 0&&!SCdontposition)
{
Ред 1.786 ⟶ 2.150:
}
 
if(bIsInLink && typeof popupVersion != "undefined" && !SCdontposition)
{
span2.parentNode.style.top = (SCposy - span2.parentNode.offsetHeight + yadjust) + pixelstring;
Ред 1.798 ⟶ 2.162:
}
//else alert("no id:" + translatedword);
SCdontposition = false;
 
}
Ред 2.748 ⟶ 3.113:
else return false;
}
 
function SCgoogleLookup(text,label)
{
SClabel = label;
SCtext = text;
if(typeof SCbaseurl != "undefined")
{
SCgoogletranslate =
"http://translate.google.com/translate?hl=en" + "&tl=" + SCtranslateTo +"&u=" +
encodeURIComponent(SCbaseurl + "?" + SCbaseparamlist);
}
else
{
SCgoogletranslate =
"http://translate.google.com/translate?hl=en" + "&tl=" + SCtranslateTo +"&u=" +
encodeURIComponent(document.location.href);
}
 
var sourceText = encodeURIComponent(text);
 
var source = 'https://www.googleapis.com/language/translate/v2?key=' +
SCGoogleAPIKeyV2 /*+'&source='+SCtranslateFrom*/+'&target=' +
SCtranslateTo +
'&callback=SCTranslatedText&q=' + sourceText
;
 
SCimportScriptURI(source);
 
}
var SCtextDetect="";
function SCGoogleDetectV2(text)
{
SCtextDetect = text;
var sourceText = encodeURIComponent(text);
 
var source = 'https://www.googleapis.com/language/translate/v2?key=' +
SCGoogleAPIKeyV2 /*+'&source='+SCtranslateFrom*/+'&target=' +
SCtranslateTo +
'&callback=SCDetectedText&q=' + sourceText
;
 
SCimportScriptURI(source);
 
}
function SCDetectedText(response)
{
if(response.error)
alert(response.error.message);
else
if(response.data && response.data.translations)
{
SCTranslatedFromLanguage=response.data.translations[0].detectedSourceLanguage;
// SCTTS(SCtextDetect,"en");
}
}
var SCTranslatedFromLanguage="";
 
function SCTranslatedText(response) {
// if (result.translation||result.error)
if(response.error && SCtranslateFrom!=SCTranslatedFromLanguage )
{
SCGoogleDetectV2(SCtext);
if(SCtranslateFrom != SCTranslatedFromLanguage)
{
SCtranslateFrom = SCTranslatedFromLanguage;
SCgoogleLookup(SCtext,SClabel);
}
return;
}
else if(response.error)
return;
{
var nbspstr = "";
var i;
var SClanguagestrlength = SCGetGoogleLanguage(SCtranslateTo).length + 10;
if(SClanguagestrlength < SCSourcestrlength)
SClanguagestrlength = SCSourcestrlength+10;
// if(result.translation)
{
for(i=response.data.translations[0].translatedText.length;i<SClanguagestrlength;i++)
{
nbspstr+="&nbsp;";
}
}
 
var pretranslatedword = "";
var numofwords = SClinkword.split(/\s/).length;
if(numofwords == 1)
pretranslatedword = SClinkword + ": ";
 
// var insertstring = SClabel + '|' + SCtext + '|' +
var insertstring =
SClanguageprompt1 + '-> ' + SCGetGoogleLanguage(SCtranslateTo) + SClanguageprompt2 +
SCgooglereference2 +
SClabel + SCgooglereference3 +
'<div class="SCxText">' +
((response.data)?
(pretranslatedword +
response.data.translations[0].translatedText
)
:response.error.message) + nbspstr +'</div>' +
'<div><br>' +
SCgooglereference4 +
SCgooglereference1 +
SCgoogletranslate +
SCgooglereference1a +
((numofwords>1)?
SCnextsentencestr:"")
+ '</div>'
;
SCInsertTranslation(SClabel,SCtext,insertstring);
 
}
}
 
function SCMakeGoogleLanguagesOptions(obj)
{
var i;
var l,lcode;
var i=0,j=0;
for(j=0;j<SCGoogleLanguageCodes.length;j++)
{
lcode = SCGoogleLanguageCodes[j];
l = SCGoogleLanguageNames[j];
 
if(lcode=="")
continue;
var newoption = new Option(l,lcode);
obj.options[i] = newoption;
i++;
}
}
 
 
function SCgoogleLookup1(text,label)
{
SClabel = label;
Ред 2.780 ⟶ 3.294:
 
var pretranslatedword = "";
if(var numofwords = SClinkword.split(/\s/).length == 1);
if(numofwords == 1)
pretranslatedword = SClinkword + ": ";
 
// var insertstring = SClabel + '|' + SCtext + '|' +
var insertstring =
SClanguageprompt1 + '→ ' + SCGetGoogleLanguage(SCtranslateTo) + SClanguageprompt2 +
SCgooglereference2 +
Ред 2.795 ⟶ 3.311:
SCgooglereference1 +
SCgoogletranslate +
SCgooglereference1a +
((numofwords>1)?
SCnextsentencestr:"")
+ '</div>'
;
 
SCInsertTranslation(SClabel,SCtext,insertstring);
 
}
Ред 2.810 ⟶ 3.328:
SCScreenSize();
function SCGetGoogleLanguage(lcode)
{
var l;
var i;
for (i=0;i<SCGoogleLanguageCodes.length;i++)
{
l = SCGoogleLanguageNames[i];
if(lcode == SCGoogleLanguageCodes[i])
return (l.substring(0,1).toUpperCase() + l.substring(1).toLowerCase());
}
return "undefined";
}
 
function SCGetGoogleLanguage1(lcode)
{
var l;
Ред 2.900 ⟶ 3.431:
}
);
 
// next sentence processing
var SCselnode;
var SCseloffset;
var SCselnodeend;
var SCseloffsetend;
var SCffrange=null;
var SCffrecursioncounter=0;
var SCffrecursionbreak=1000;
 
 
function SCgetnextcharacterinffrange()
{
var debug=false;
if(++SCffrecursioncounter > SCffrecursionbreak)
return "";
 
var rangeset = "";
if(debug)
alert("0:" + SCselnodeend.nodeType+":"+SCselnodeend.nodeName+":"+SCselnodeend.length);
if(SCselnodeend.nodeType != 3)
{
var children = SCselnodeend.childNodes;
var i;
for(i=0;i<children.length;i++)
{
SCselnodeend = children[i];
SCseloffsetend=0;
if(debug)alert("to 1:"+SCselnodeend.nodeName);
rangeset = SCgetnextcharacterinffrange();
if(debug)alert("from 1:"+SCselnodeend.nodeName);
 
if(rangeset != "")
break;
}
}
else if(SCselnodeend.nodeType==3 &&
SCselnodeend.length <=SCseloffsetend
)
{
var node = SCselnodeend;
while(node.parentNode)
{
 
if(++SCffrecursioncounter > SCffrecursionbreak)
return "";
 
var nextsibling = node.nextSibling;
if(nextsibling != null)
{
SCselnodeend = nextsibling;
node = node.nextSibling;
SCseloffsetend = 0;
if(debug)alert("to 2:"+SCselnodeend.nodeName);
 
rangeset = SCgetnextcharacterinffrange();
if(debug)alert("from 2:"+SCselnodeend.nodeName);
 
if(rangeset != "")
break;
}
else
{
SCselnodeend = node.parentNode.nextSibling;
SCseloffsetend = 0;
while(node && !SCselnodeend)
{
node = node.parentNode;
SCselnodeend = node.nextSibling;
}
if(!node || !SCselnodeend)
{
rangeset = "";
break;
}
if(debug)alert("to 3:"+SCselnodeend.nodeName);
 
rangeset = SCgetnextcharacterinffrange();
if(debug)alert("from 3:"+SCselnodeend.nodeName+":"+rangeset);
 
if(rangeset != "")
break;
node = SCselnodeend;
}
}
}
else if(SCselnodeend.nodeType==3 &&
SCselnodeend.length > SCseloffsetend)
{
SCffrange.setEnd(SCselnodeend,++SCseloffsetend)
rangeset = SCffrange.toString().substr(
SCffrange.toString().length-1,1);
}
return rangeset;
}
function SCFFnextsentence(action)
{
 
var sel = window.getSelection();
if(sel == null || sel.toString() == "")
return false;
SCffrange = sel.getRangeAt(0);
try {
window.getSelection().removeRange(SCffrange);
} catch(err) { }
var retc = SCffrange.collapse(false);
 
SCseloffset=SCffrange.startOffset;
SCseloffsetend=SCffrange.endOffset;
SCselnodeend=SCffrange.endContainer
SCselnode = SCffrange.startContainer
 
var nextchar = SCgetnextcharacterinffrange();
var loopbreak=10000;
var loopcounter = 0;
var minsentencelength = 10;
var sentencelength = 0;
while((nextchar != "" && nextchar != '.' && nextchar != '?' && nextchar != ';')|| sentencelength < minsentencelength)
{
sentencelength++;
SCffrecursioncounter = 0;
nextchar = SCgetnextcharacterinffrange();
if(1==0 && nextchar.match(/\./))
{
var answer=confirm(nextchar);
if(answer)
break;
}
if(++loopcounter > loopbreak)
{
alert("loop break set");
break;
}
}
 
try {
window.getSelection().removeAllRanges();
window.getSelection().addRange(SCffrange);
} catch(err){
alert("failure1");
}
 
var containernode= SCselnodeend;
while(containernode && !containernode.offsetHeight)
{
containernode = containernode.parentNode;
}
if(containernode && action.match(/tts|translate/))
{
 
SCposx = SCfindPosX(containernode)+
Math.floor(containernode.offsetWidth/2);
SCposy = SCfindPosY(containernode) +
containernode.offsetHeight;
}
if(action.match(/tts/i))
SCTTS(SCffrange.toString(),"en");
else if(action.match(/translate/))
{
SCdonthide = false;
SCdonthide1 = false;
SChidespan(SCcurrentLink);
// SCpposx = SCposx;
// SCpposy = SCpoxy;
SCShiftKey = true;
SCSetInLink(SCffrange.toString(),null,null,0," ",
SCffrange.toString().split(/\s+/),false);
SCShiftKey = false;
// SCpposx = SCposx;
// SCpposy = SCpoxy;
SClastposx = SCposx;
SClastposy = SCposy;
SCdonthide = true;
SCdontposition = true;
}
 
}
function SCnextsentence(action)
{
var debug = false;
var obj;
if(SCbIsFirefox35Like)
{
SCFFnextsentence(action);
return;
}
else
if(SCbIsIE||SCbIsOpera11)
{
obj = SCIeRange.duplicate();
var objtext = SCIeRange.text;
obj.collapse(false);
// var obj1 = obj.duplicate();
// check for [99] -- wikipedia footnotes
 
obj.expand("character");
var loopbreak = 5000;
var loopcounter = 0;
while(obj.text.substr(obj.text.length-1,1).match(/\s|\[/))
{
if(++loopcounter > loopbreak)
break;
obj.expand("character");
if(debug)alert("0:"+obj.text);
}
if(1==1)
{
//obj.expand("character");
//if(debug)alert("1:"+obj.text);
 
loopcounter = 0;
while(obj.text.substr(obj.text.length-1,1).match(/\s|[0-9]/))
{
if(++loopcounter > loopbreak)
break;
obj.expand("character");
if(debug)alert("2:"+obj.text);
 
}
// if(obj.text.substr(obj.text.length-1,1).match(/\]/))
{
if(obj.text.substr(obj.text.length-1,1).match(/\]/))
obj.collapse(false);
if(debug)alert("3:"+obj.text);
obj.expand("character");
var minsentencelength = 10;
var sentencelength=0;
while(!obj.text.substr(obj.text.length-1,1).match(/[.?;一,。、]/)|| sentencelength < minsentencelength)
{
sentencelength++;
obj.expand("character");
if(++loopcounter > loopbreak)
break;
}
 
}
 
}
else
{
var retc = obj.expand("sentence");
if(debug)alert("4:"+obj.text);
}
 
SCIeRange = obj;
try {
retc = SCIeRange.select();
if(debug)alert("done");
} catch(err) {
// alert("select fail: "+retc);
}
SCIERangeBottom(); // set SCposx and SCposy
 
 
if(action.match(/tts/i))
SCTTS(SCIeRange.text,"en");
else if(action.match(/translate/))
{
SCdonthide = false;
SCdonthide1 = false;
SChidespan(SCcurrentLink);
 
SCShiftKey = true;
SCSetInLink(SCIeRange.text,null,null,0," ",
SCIeRange.text.split(/\s+/),false);
SCShiftKey = false;
 
// SCpposx = SCposx;
// SCpposy = SCposy;
SClastposx = SCposx;
SClastposy = SCposy;
SCdonthide = true;
SCdontposition=true;
}
 
}
}
 
// only works for IE
function SCIERangeBottom()
{
var returnSelectedText="";
var debug = false;
var userSelection;
 
 
if(SCbIsIE||SCbIsOpera11) // IE
{
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;
if(collection.length == 0)
{
range = document.selection.createRange();
collection = range.getClientRects();
s = range.text;
if(collection.length == 0 && 1==0)
alert("unbingo!");
}
 
var zoomSCposx = SCposx;
var zoomSCposy = SCposy;
 
for(i=0;i<collection.length;i++)
{
var topp = collection[i].top;
var bottomm = collection[i].bottom;
var leftt = collection[i].left;
var rightt = collection[i].right;
 
if((SCbIsIE||SCbIsOpera11) && typeof screen.deviceXDPI != "undefined")
{
topp = Math.floor(topp *(screen.logicalYDPI/screen.deviceYDPI));
bottomm = Math.floor(bottomm *(screen.logicalYDPI/screen.deviceYDPI));
leftt = Math.floor(leftt *(screen.logicalXDPI/screen.deviceXDPI));
rightt = Math.floor(rightt *(screen.logicalXDPI/screen.deviceXDPI));
 
 
}
 
leftt +=
document.body.scrollLeft+
document.documentElement.scrollLeft;
rightt +=
document.body.scrollLeft+
document.documentElement.scrollLeft;
topp +=
document.body.scrollTop+
document.documentElement.scrollTop;
bottomm +=
document.body.scrollTop+
document.documentElement.scrollTop;
 
if(i==collection.length-1)
{
SCposx = Math.floor(leftt + (rightt-leftt)/2);
SCposy = Math.floor(bottomm);
return true;
}
}
 
}
}
}
 
//SCloadGoogleLanguage();