All pastes #331127 Raw Edit

nowotny

public text v1 · immutable
#331127 ·published 2007-01-28 16:08 UTC
rendered paste body
// ==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 = '<table id="lang_list"><tr>';
		styl = 0;
		for (var k in suppored_langs) {
			if (styl == 3) {
				styl = 0;
				temp += '</tr><tr>';
			}
			temp += '<td class="lang_cell" id="lang_' + k + '"><span><a href="#" class="googie_check_spelling_link">' + suppored_langs[k] + '</a></span></td>';
			styl++;
		}
		langList.innerHTML = temp + '</tr></table>';
		
		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&#281;cie tego okienka zamiast domy&#347;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 <a href="http://orangoo.com/spell/" target="_blank">Orangoo Spell Check</a>';
		temp.style = 'float:right;';
		document.getElementById('content').appendChild(temp);
		// utworzenie przycisków OK Cancel
		// klikni&#281;cie w przyciski powoduje wys&#322;anie wiadomo&#347;ci ze zmienionym tekstem do dokumentu nadrz&#281;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&#347;ci z tekstem do t&#322;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&#322;ych stronach ----------------------------

	var OSC_variables = {};
		
	document.addEventListener('DOMContentLoaded', function(e) {
		if (document.OSC_text) return; // wyj&#347;cie, je&#347;li to okienko z orangoo

		var _tab = document.getElementsByTagName('textarea');
		if (_tab.length == 0) return; // wyj&#347;cie, je&#347;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&#261; OSC_variables.currentTextarea kiedy otrzyma focus i w&#322;&#261;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&#347;ci ze zmienionym tekstem powoduje zamkni&#281;cie okienka Orangoo i podmian&#281; 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&#322;&#261;czony button Orangoo - wyj&#347;cie
		
			// funkcja pozycjonuj&#261;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&#281;ciu którego uruchamia si&#281; 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&#322;uj&#261;ca sprawdzanie pisowni - mo&#380;e by&#263; uruchamiana z poziomu interfejsu Opery
	OSC_variables.check = function () {
			// wyj&#347;cie je&#347;li nie ma pól tekstowych
		if (!OSC_variables.currentTextarea) return; 
		
			// pobranie tekstu do t&#322;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&#322;anie okienka Orangoo i wys&#322;anie do niego tekstu do t&#322;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('<html><head><title>Orangoo Spell Check</title><script language="javascript" type="text/javascript"> document.OSC_text = ""; var OSC_onload = function() {  document.getElementById("OSC_frame").contentDocument.postMessage("OSC__"+document.OSC_text); };document.addEventListener("message", function(e) {if (e.uri.indexOf("orangoo.com/spell/")>=0 && e.data.indexOf("OSC__") == 0) {opener.document.postMessage(e.data);}}, false);</script></head><body style="padding:0;margin:0"><iframe id="OSC_frame" style="margin:0;padding:0;width:100%;height:100%;border:none;" onload="OSC_onload()"></iframe></body></html>');
		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();
	}
	
}