// ==UserScript==
// @name Orangoo Spell Check
// @author Sombria
// @version 1.2
// ==/UserScript==
// ******************* USER SETTINGS - BEGIN ***********************************
// ******************* USTAWIENIA UŻYTKOWNIKA - POCZĄTEK ***********************
// można wyłączyć button Orangoo - false zamieniamy na true
// you can disable Orangoo's button. Replace false with true
var OSC_disableButton = false;
// typ buttona: 'image' - w formie obrazka, 'text' - w formie tekstowej
// button type: 'image', 'text'
var OSC_buttonType = 'text';
// ******************* USER SETTINGS - to be continued *************************
// ******************* USTAWIENIA UŻYTKOWNIKA - CDN ****************************
if (window.location.hostname.indexOf('orangoo.com') >= 0) {
if (window.top != window) { // zmiany tylko jeśli Orangoo jest w ramce
// ******************* USER SETTINGS - continuation ****************************
// ******************* USTAWIENIA UŻYTKOWNIKA - CD *****************************
// Domyślny język sprawdzania pisowni. Np. 'pl', 'en', 'de'. Jeśli pusty ''
// Orangoo Spell używa zapamiętanego w ciasteczkach lub domyślnie angielskiego
// default language, ex. 'pl', 'en'. If it become empty , Orangoo will remember (in cookies) language used last time.
var OSC_defaultLang = '';
// true - automatyczne rozpoczęcie sprawdzania przy starcie
// false - wyłączenie automatycznego sprawdzania
// You can adjust automatic start spelling chceck after opening that window. To do that You must replace true with false.
var OSC_autoSpellCheck = true;
// ******************* USER SETTINGS - END *************************************
// ******************* USTAWIENIA UŻYTKOWNIKA - KONIEC *************************
var messageSource = null; // dokument wysyłający tekst do tłumaczenia
// wyłączenie funkcji ładującej flagi
opera.defineMagicFunction('preload', function(){});
// drobna zmiana, żeby można było wywoływać automatyczne spr. pisowni
// i poprawiająca pozycjonowanie podpowiedzi
window.opera.addEventListener('BeforeScript',function(ev) {
if(ev.element.src.indexOf('static/js_generated.js')>-1)
ev.element.text = ev.element.text.replace('AJS.AEV(span_chck, "click", AJS.$b(fn, this), true);','span_chck.onclick = AJS.$b(fn, this);').replace('abs_pos.y -= this.edit_layer.scrollTop;','');
}, false);
document.addEventListener('DOMContentLoaded', function(e) {
// usunięcie zbędnych elementów strony
document.getElementById('container').removeChild(document.getElementById('top'));
var tab = document.getElementById('content').childNodes;
for (var i=tab.length-1; i>=0; i--)
if (tab[i].tagName=='CENTER' || tab[i].tagName=='IMG')
document.getElementById('content').removeChild(tab[i]);
// i zmiana wyglądu
var styl = document.createElement('style');
styl.innerHTML = 'body {width:500px;} textarea {width:460px !important; height:280px !important;} #content_text table {width:460px !important;} #content_text, #content {padding-bottom:0; padding-top:0;text-align:left;} #content {left:17px; top:0; position:fixed;} #lang_list {width:350px; border:solid 2px #b91479; position:absolute; z-index:10; left:10px; top:30px; background-color:white;} .lang_cell {text-align:center; background-color: #ecefff;} .lang_cell:hover {background-color: #FBEC72;} .lang_cell a {text-decoration:none; font-family: verdana, helvetica, sans-serif; font-size: 11px;}';
document.body.appendChild(styl);
// ustawienie języka podanego jako domyślny
if (suppored_langs[OSC_defaultLang]) setLanguage(OSC_defaultLang);
// utworzenie własnego okienka wyboru języka (domyślne jest za duże)
var langList = document.createElement('div');
var temp = '
';
styl = 0;
for (var k in suppored_langs) {
if (styl == 3) {
styl = 0;
temp += '
';
}
temp += '| ' + suppored_langs[k] + ' | ';
styl++;
}
langList.innerHTML = temp + '
';
var langCellClick = function() {
langList.style.display = 'none';
setLanguage(this.id.slice(5));
}
tab = langList.getElementsByTagName('td');
for (var i=tab.length-1; i>=0; i--)
tab[i].onclick = langCellClick;
document.body.appendChild(langList);
langList.style.display = 'none';
// i podpięcie tego okienka zamiast domyślnego
googie.spelling_state_observer = function(current_state) {
if(current_state == "spell_check") {
change_lang_elm.className = "googie_check_spelling_link";
change_lang_elm.onclick = function() {
if (langList.style.display == 'none')
langList.style.display = 'block';
else
langList.style.display = 'none';
};
}
else if(current_state == "resume_editing") {
change_lang_elm.className = "googie_no_style";
change_lang_elm.onclick = null;
}
};
googie.spelling_state_observer("spell_check");
// utworzenie linka do Orangoo
temp = document.createElement('div');
temp.innerHTML = 'Powered by Orangoo Spell Check';
temp.style = 'float:right;';
document.getElementById('content').appendChild(temp);
// utworzenie przycisków OK Cancel
// kliknięcie w przyciski powoduje wysłanie wiadomości ze zmienionym tekstem do dokumentu nadrzędnego
for (var i=0; i<2; i++) {
temp = document.createElement('input');
temp.type = 'button';
temp.value = (i == 0) ? 'Cancel' : 'OK';
temp.onclick = function() {
if (messageSource)
messageSource.postMessage('OSC__' + ((this.value == 'OK') ? document.getElementById('ta').value : ''));
}
document.getElementById('content').appendChild(temp);
}
e.target.removeEventListener(e.type,arguments.callee,false);
}, false);
// otrzymanie wiadomości z tekstem do tłumaczenia
document.addEventListener('message', function(e) {
if (e.data.indexOf('OSC__') == 0) {
document.getElementById('ta').value = e.data.slice(5);
messageSource = e.source;
if (OSC_autoSpellCheck && e.data.length>5) googie.spell_span.onclick();
}
}, false);
}} else {
// -----------------------------------------------------------------------------
// ------------------------ na pozostałych stronach ----------------------------
var OSC_variables = {};
document.addEventListener('DOMContentLoaded', function(e) {
if (document.OSC_text) return; // wyjście, jeśli to okienko z orangoo
var _tab = document.getElementsByTagName('textarea');
if (_tab.length == 0) return; // wyjście, jeśli nie ma pól tekstowych
OSC_variables.currentTextarea = _tab[0]; // pole textarea, które aktualnie posiada focus
OSC_variables.window = null; // okienko Orangoo
OSC_variables.selection = null; // zaznaczony tekst
for (var i=0; i<_tab.length; i++) {
// pole tekstowe ustawia zmienną OSC_variables.currentTextarea kiedy otrzyma focus i włącza przycisk
_tab[i].addEventListener('focus', function() {
OSC_variables.currentTextarea = this;
OSC_variables.focused = true;
if (!OSC_disableButton) OSC_variables.setButtonPos(this);
}, false);
// przy opuszczaniu pola tekstowego przycisk jest chowany
if (!OSC_disableButton)
_tab[i].addEventListener('blur', function() {
OSC_variables.focused = false;
window.setTimeout('if(!OSC_variables.focused)OSC_variables.button.style.display="none"',100);
}, false);
}
// otrzymanie wiadomości ze zmienionym tekstem powoduje zamknięcie okienka Orangoo i podmianę tekstu
document.addEventListener('message', function(e) {
if (OSC_variables.window && e.data.indexOf('OSC__') == 0) {
OSC_variables.currentTextarea.focus();
if (e.data.length > 5) {
if (OSC_variables.selection && OSC_variables.selection.text.length>0) {
OSC_variables.selection.text = e.data.slice(5);
OSC_variables.selection.collapse(false);
OSC_variables.selection.select();
} else OSC_variables.currentTextarea.value = e.data.slice(5);
}
OSC_variables.window.close();
}
}, false);
if (OSC_disableButton) return; //wyłączony button Orangoo - wyjście
// funkcja pozycjonująca przycisk
OSC_variables.setButtonPos = function(_textarea) {
var getAbsolutePos = function(_e) {
var _pos = {'left': _e.offsetLeft, 'top': _e.offsetTop};
if(_e.offsetParent) {
var _tmp = getAbsolutePos(_e.offsetParent);
_pos.left += _tmp.left;
_pos.top += _tmp.top;
}
return _pos;
}
var _pos = getAbsolutePos(_textarea);
OSC_variables.button.style.left = (_pos.left+_textarea.offsetWidth-100)+'px';
OSC_variables.button.style.top = (_pos.top+_textarea.offsetHeight)+'px';
OSC_variables.button.style.display = 'block';
}
if (OSC_buttonType=='image'){
//utworzenie obrazka, po kliknięciu którego uruchamia się Orangoo
//OSC_variables.imgSrc = 'http://files.myopera.com/Sombria/1/orangoo_milk2.png';
OSC_variables.imgSrc = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAYCAYAAADqK5OqAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAA1ySURBVHja7Fl5jF1VGf%2Fd5d379m326cx0mVLAlpZSloCpINtASNQAYoyyJIAGjSZoTWzcQ8IfRv9pI7aiFSkYlxhJwADGQqElQgu0dKG0tct0WkqXNzNv3nvz3n138%2FvOXeZ2OsCUVRNucvLevfec8%2B3f9%2FvukQAoNGLZbPZb69ev%2F3kul4NlWeBLkiRMvj6KZ9N5N53Ldd0zfjfV8%2Ff7jOVIJpNYvnz50Nq1a39Aj7fTOEZjlIYh45PrY78%2BMcL%2FwKVOZ5LjOCKsRGjRvW3bcOkZh5kSi0FV1dNSB8%2BxTFMMXifLMjRdh0rzeW7w3qFfJ9iL9onRe1lRTtuP6XGaDNf4e%2FJ85oH%2FR9cwTZ5rBjwwDZqj0N5Mh2kok%2BgwH8wXLRb%2FefB%2FXidknIIG8xLoxib%2BeA3zwjzx%2Fh%2BIEYQwzaZQgOwLYdJ9vVYTDOqJBBKpFGKaFjLIa8ScahWNRkMwyu%2FT2axQgDAS7WfQu6ZhiLliDjGeTKcRp%2F0mG5aV06jXYdDg%2BaxYmgA9Hkcqk0Gc%2BAj2DozGBmAaPN8kOkyTla%2FRGp4fpzytBvzQ%2FjyH5WQZWQam1aS1LDfLyLQCGoGMzAfzyYPn8hp%2Bx3N5f57%2FbsZQJxfCcPj3FgtTqwKHB6HOnIlEtYz4lleAnpk4kcihPj4ujKFQQWclCgZpnVo6itTLLyF28BBRUWANXA%2BwEdj7eO83DyG2cwvMQ4fhprMY6%2BrBcEe3EKTAxiZjBHzwpVhNqK9thrpnF%2BxqHejqQml2P0bjaeF9LKyIssAIlgn93%2BuROLgXcm0cVjKF0px5qNkU1e2dkIgWGyIwtPDo40ch12vQu7qhbH6RlKOg2dOHUdtTeK5YRNKnQTECc7wKd2iQ5ncgMV6DvfVVVGj%2BsWRBOGmW%2BGIHCSLu7YCGPBUiiQ6tNorc7x%2BAdvIoFE2H1DMHWmsLMqt%2Fjb43tqA6NoZKuSy8juez16j7dkK5%2Fz5o659HIZ1EuiUPOd%2FqeSsbaNNzkH63CgoJl5jVD%2B21rSj%2B%2BRG0792OyuioEIA9WQ74cGxIa34F9bcPIl4uIZfUkXj6KfT86WHoZlWs4YiSIvOxZhXc3bsg3%2FRVyF%2B6HdLx4yg88jB6Nz6LJGwRFawcpiHoPPUYUuuehJaME1TMQ1l0AWJPP4mOP%2FwG6WYZY0SDvTygEauXkX3kQaTeGoSixyH19kNt70Bq1QPo3%2F0qjGol5OvdkN4pRgjyKjOlcL51LEirV8A%2B73yMnHsBKE9AjlHa%2Bcx10G65EfITj6O7VsI4pR2HhWIPNin816yGMnc2zOU%2FxPitd8O6%2BTakCi0iRAWNOXOhff9HUG%2F6CmKfvxmJ%2B%2B6HMqsH%2BVc2QTO99BHww3tKL29AczNF39duR%2Bx7P4N6z3eg%2FvincKo1dO7aBpNSjk1OoPjz1QMULbt2oPa5m%2BDmW6DM6EPirjspnCQ4l12KY44q0hCnSDF%2F7w4oz65D6bMDMAoUJTEdSncf4j8hGuThnevXQbJNwRfzJLsUTatXkhz9KC24BEjlIZGDKkuvQeL2W%2BE%2B8Q%2B0jR4WzsQpDj5MPaNIEITo192%2FG%2FZwCaXOGWFBhL%2BZcsElkFsLaB3cR6HvFSSxfuQ4XDKKNXADRh2ZnrskrC6KcpgqOvrgUGQ4flgj1wL105eBiEAlb7ODPoUHF8vt2xBbeC7GZi2A0fRqgTZ7LuRz5pDCD00UUX9Nc9MGMuoMlGt11CoV73lxBim2A%2FLBwRBQiP1Juc2%2F%2FRHOxUtQcaSwRxKKK7RBvXwp3DePIFUZFXWD18gHSC%2F0bKT%2FbJEBWC%2BBkuXFF5Je8ige3OcBE9rPPdNICAzAv%2B6RfZDyKdhUV5xA0bwZzyEG5ZmdcIZPCM8QqIO9dvgk5PYCKnUqUlQvuEgpfkEXUUCD1xu1MaoHe%2BFs3Qj50OuQKMUgn6RI89ATe6qISEodbpPmtraiXPE8SyhRVhDr64Kd4sg9lXeXi3ZaF4BCAAimKRHtdIKiWRIOIVIjz6f05rgGjER2wmt9PiVaI3d0wU0qaMnGQxmd%2FW%2BQonMwjIYwTKgX1luaUu%2BsbkiUioTifUTJvE3LCKE1g6E2YacdkZ8Dbwstqidh5RQ4SZsKohpCT9ekNXlSHXlYFOJF64x8dA%2Fsv%2F8S0hsvQFLJT9p7vFSRpQLmF7EgNfJ%2BVsyCqXhpyg68joXKJmAlmiFP4f79PTDrJ6EpskBnQkEUc6ZWhzV%2FPpKEdBKEXMS6hgEnLcNWPThr%2B5AziHiphZwwCzDmCBCgRXpxihpssj5HrRvRi6uRXtKS0Js8SZa3M8Qp6EjxsbPA4HRvpZJwUgzXTA8D%2BxCP30mEVtw4R0Qn9FQ69CwnpcLloUsThTqIAmayfALlx1dBX3Id6v0XId3WLlJOM0bGzhAs1TyPDrA8GKpmdNiaOxGtLBzbN86GiIcoSvBGe%2BmLlmJ85wa0Ng6hnFkAqzEOZ%2Fs%2FofR1wpy9CFktIfiVWdmFHBlBIahNMjHspGjg9MIRKd6rlBGIxriqC%2BOJ6KF7U7NILinshQRP7HDkfG6SZM61iYgTvdG7wFT5nZCR2j2XUpGJguY1SgxHRdFkDx0fhWvX4PTPRyKTFUIFIekmiHFnopFBJMKab%2B6g9woqnecQsqp4zRErPZEnpdJa14s44V3MExuW0gHiqheRkfyLGEUPr6H%2FAp15QkBt7UXxlnuB%2FS8it%2FtxmBsehTM2DP2GbyCWygplhlGTLlLKaYdcHUQyHhO9CAONQBZzZIjet5KxO0JIm5izhPTSICjt1a9GRC%2BSQVDVIrnOWiDohGBkOoVZ5Fk%2FEoRVucPt%2BRS0rpnQjm4iqJnwOkof2jX2PEs5vAXOjIX0Q4U1QDKaFwUKuZbwZI4qH20JL1bjcCn%2B9MawUCgzLzXGYJzcA0esi4v5QWR60UDrNK%2FbFvv5kcXFQCEhdfK2oDmT%2FTUuIbvUeVdAmn891Iu%2BAO3y22BI%2BoSsfkTJagzphQOEsMrojRuChmjqmIex42ge2Qn1%2FBugpHIihfEatYNgek8%2F3AMbSS%2FxsFtmfpv%2F2QglW4DRuRC5QkEYIuZ3z9NBR1JQ3ILCJJMiC1ffDYdya8vhdWiXq0g0Sqhv%2Bgus0aNIXvV16ESQiYk0dnKQmH4NUlxHrn4Qhbgi8migGN47NWsx1GIr7C2Pou34S5Befxq1zY9RKJOHJ%2BJod95CVvc%2FX3DKPvAKXNmGTsWzQz7hwUof33MTKEsueqwjyChOKKw1tAPDz6yC2b0YNSWDcsPGyMgoysPDGBsZEYP7G%2BFsNBJnXYjU%2BVfA3Psv9NqHkZeouSO6Yy%2BsRebiG6k3WiC6fc2HtAzTC1fcSfzqaD3yDDqUmtBLY%2FNfYZzYj%2BzANxHPFMQa%2FqKgTPGJZKqa4E7VMYvwynWicM29sEr7yTMISYyMQ%2B9dhNQlt8C0bGg%2BkqEwgZopIn32tUgvploC7hkoY3DrHg3HZAYtV38b1cOEzWMUbekOxNpmiwLsGmPkUQ4MWRdhzLVCp3f60rsgU92p16nIUjoR%2BygqshfeiIxBKYFQjKl4ayi%2FoTlCsJWKhrXtMeiZHFSJosuNQVeTqCoaSk5aNFExiqAUeSrLmb%2Foy7BmDsIYIQhbHqLUmEbhyrsJZbWQJzQ8JXL0cd7naGS9XPtdmCcIoldJL6UxaDMWkF6%2BCJOb0KAZ9NdF0pHtI3M30HtgBAHZeZEa%2Bf4i%2BXhZI%2BXyQDSvcT5VbC9ifNiJbCuFYqs3jwtysxmmOckvzGwshYpWIX%2FlxH5cN7gypnNinxgJIL4dsbCdc4IwheLXCvFtR%2FZAgeRDZsfvsDk1ZM65nDzyAJrVo1DtYSGq5ZCR7QbIL6njX4KT5X7UxvLIkrfCV67STd07DURkZHoiDQWIzNcJP4%2FqJTxP4HkUlQi%2BpUU%2FAEoMJ8CdqBUxhDCC61vHCrB8UMlDBU0%2BaAlytsDf0tTzWEnsmdGi7yX60%2FY75TCEGzESIHSCaO70P6ydRi%2BAf6wcvk0X0HbVPbCbNfEJwzUILpsV1Ev7UN7%2FHJTaLkh6n%2FdVlgbXlCkPZpg30SG7p316cP3m8JSPnQHKDIzlyxY6omeEcRoN3xAiGtRIWBgBlHKnIPphnqy9Xa4845M1%2F5OyQFZkSBdZz2E4gihNJWacixp15c7g8%2BATRM3vbeSIY0z7xGwK3t7pZM137qZ%2FmlaPGGGiT6jVaju2bt1aGRgYyDDK%2BKiPMj%2BQyzeCUTmG4YPPQ8u2Id99qUBc3OOwIdKFIkarabR29SCeyohjx6DR%2FLCONxkwMBTfuXMnH2se8SOh6WegMOL5V503b96yFStWLFuyZEnx%2FXrnB2GE92S0iCJc%2F9xCnAHw8%2BAdeSVje06ZAr1FOtnpKvdMzq2HCZWtXLnyJRrL6HabHwWBEdyoEeAf%2Bl9MoTqfFBAPvqF9XMd%2B0xXe76QlSqdSOpVSyLsVUr47Wi6bTdOk7OS4xUIh1lIsalRgpROlklEul21xwkfv3DMh9B7EMAyjVK%2FXX%2FSjIEBIAUo6RcFSpLb8X17loSFpkuO4ud5ex38nR%2Foih58vu%2BMO6RcPPfRRyRzQdyJ6dqcCIJMNIeGT60OJjujNfwUYANheaAORTctUAAAAAElFTkSuQmCC';
OSC_variables.button = document.createElement('img');
OSC_variables.button.src = OSC_variables.imgSrc;
OSC_variables.button.style = 'display:none;position:absolute;';
OSC_variables.button.onclick = OSC_variables.check;
document.body.appendChild(OSC_variables.button);
}
else {
OSC_variables.button = document.createElement('div');
OSC_variables.button.textContent = 'Orangoo';
OSC_variables.button.style = 'display:none;position:absolute;text-decoration:underline;font-size:medium;text-align:right;cursor:pointer;width:100px;';
OSC_variables.button.onclick = OSC_variables.check;
document.body.appendChild(OSC_variables.button);
}
// wyrównanie przycisku przy zmianie rozmiaru okna
document.addEventListener('resize', function(e) {
if (OSC_variables.button.style.display == 'block')
OSC_variables.setButtonPos(OSC_variables.currentTextarea);
}, false);
// e.target.removeEventListener(e.type,arguments.callee,false);
}, false);
// funkcja wywołująca sprawdzanie pisowni - może być uruchamiana z poziomu interfejsu Opery
OSC_variables.check = function () {
// wyjście jeśli nie ma pól tekstowych
if (!OSC_variables.currentTextarea) return;
// pobranie tekstu do tłumaczenia
OSC_variables.currentTextarea.focus();
var _text = '';
if (document.selection) {
OSC_variables.selection = document.selection.createRange();
_text = OSC_variables.selection.text;
}
if (_text == '') _text = OSC_variables.currentTextarea.value;
// wywołanie okienka Orangoo i wysłanie do niego tekstu do tłumaczenia
OSC_variables.window = null;
OSC_variables.window = window.open('', 'OSC', 'width=500,height=350');
OSC_variables.window.document.open();
OSC_variables.window.document.write('Orangoo Spell Check');
OSC_variables.window.document.close();
OSC_variables.window.document.OSC_text = _text;
OSC_variables.window.document.document.getElementById("OSC_frame").src = "http://orangoo.com/spell/";
OSC_variables.window.focus();
}
}