// ==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 = 'image'; // ******************* 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 += ''; styl++; } langList.innerHTML = temp + '
' + suppored_langs[k] + '
'; 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(); } }