Okoun Check Lite

V pravidelných intervalech kontroluje oblíbené a novou poštu na serveru okoun.cz

// ==UserScript==
// @name        Okoun Check Lite
// @namespace   ocl.okoun.cz
// @description V pravidelných intervalech kontroluje oblíbené a novou poštu na serveru okoun.cz
// @include     https://www.okoun.cz/favourites.jsp?new=1
// @author      BALCARENKO
// @version     1.5
// @grant       none
// ==/UserScript==

(function() {

	// nastaveni
	var SETTINGS = {
		reloadInSeconds: 77,
		hideCategories: false,
		openLinksInNewWindow: true,
	}

	// init
	var TITLE = 'OCL';
	var RELOAD_IN_SECONDS = SETTINGS.reloadInSeconds;
	
	document.body.id = TITLE;
	document.title = TITLE;
	
	// zmenime favico
	setFavicon();
	
	// najdeme link na posticku
	var posta = document.querySelector('.head .menu a[href="/msgbox.jsp"]');
	if(!posta) {
		// pokud nenajdeme, tak je uzivatel odhlasen => konec
		return;
	}
	
	// je-li nova posta, zmenime title a favicon
	if(posta.innerHTML!='Vzkazník') {
		document.title = TITLE + ' - nová pošta';
		setFavicon('mail');
		// po otevreni posty zmenime zpatky
		posta.addEventListener('mouseup',function(e){
			if(e.which == 3) return; // jen leve nebo stredni tlacitko
			document.title = TITLE;
			setFavicon()
		},false);
	}
	
	// pokud je ve strance #sysmsgBox, tak jsme nejspis hned po prihlaseni
	// a nasledny reload by chtel znovu odesilat POST data, proto reload takto
	// toto by melo byt az po kontrole posty, jinak se reload provede i po odhlaseni uzivatele
	if(document.getElementById("sysmsgBox")) {
		location = location.href;
	}
	
	// skryt nadpisy kategorii
	if(SETTINGS.hideCategories) {
		var headers = document.querySelectorAll('.main .main h3');
		for(header of headers) {
			header.style.display = 'none';
		}
	}
	
	// odkazy v zahlavi v novem okne
	if(SETTINGS.openLinksInNewWindow) {
		var links = document.querySelectorAll('.head a, .footer a');
		for(link of links) {
			if(link.href.search(/javascript:|\?new=1/)==-1) { // krom logoutu a reloadu
				link.setAttribute('target','ocl');
			}
		}
	}
	
	// odkazy na audirka
	var items = document.querySelectorAll('.main .item');
	for(var item of items) {
		
		// odkazy (je buď jeden, nebo dva)
		var links = item.getElementsByTagName('a');
		
		// auditko bez nazvu (12. komnata)
		if(links[0].innerHTML.search(/^\s*$/) != -1)
			links[0].innerHTML = '-- bez názvu --';

		// kdyz klikneme na nazev, tak jako by to bylo na nove (= otevre se na nejstrasich z novych)
		if(links.length == 2)
			links[0].href = links[1].href;
		
		// odkazy otevirame v novem okne
		// a po kliknuti skryjeme cely div
		for(var link of links) {
			if(SETTINGS.openLinksInNewWindow)
				link.setAttribute('target','_blank');
			
			link.addEventListener('mouseup', function(e) {
				if(e.which == 3) return; // jen leve nebo stredni tlacitko
				var div = findParentDiv(this);
				if(div)
					div.style.display = 'none';
			}, false);
		}
	}
	
	function findParentDiv(node) {
		var div = node.parentNode;
		if(!div || (div.className.search(/item/) > -1))
			return div;
		findParentDiv(div);
	}
	
	// pripravime si tlacitko s odpoctem
	var countDownButton = document.createElement('button');
	with(countDownButton) {
		id = 'reload-button';
		style = 'display: inline-block; margin-left: 10px';
		innerHTML = 'Načtení za: ' + sec2str(RELOAD_IN_SECONDS);
		onclick = function() {
			clearInterval(interval);
			RELOAD_IN_SECONDS = 1;
			countDown();
		}
	}
	
	// a umistime ho do okouni hlavicky
	var head = document.querySelector('.head');
	if (head) {
		head.insertBefore(countDownButton,head.lastElementChild);
	} else {
		document.body.appendChild(countDownButton);
	}
	
	// zahajime odpocet
	var interval = setInterval(countDown, 1000);
	
	function countDown() {
		countDownButton.innerHTML = 'Načtení za: ' + sec2str(--RELOAD_IN_SECONDS);
		
		if(RELOAD_IN_SECONDS > 0) return;

		// zastavit odpocet a reload kdyz to dojde do nuly
		clearInterval(interval);
		location.reload(true);
	}
	
	function sec2str(nsec) {
	//	var hours = Math.floor(nsec / 3600);
		var minutes = Math.floor(nsec / 60);
		var seconds = (nsec - minutes * 60);
		return minutes + ':' + ('0' + seconds).substr(-2);
	}
	
	// nastaveni ikony
	function setFavicon(what){
		
		//	okoun <link rel="shortcut icon" href="/static/201502020949/favicon.ico" type="image/x-icon">
		var link = document.querySelector('link[rel~="icon"]');
		if(!link) {
			link = document.createElement('link');
			link.setAttribute('rel','icon');
			document.head.appendChild(link);
		}
		
		link.setAttribute('id','favicon');
		if(what=='mail') {
			// blikaci dopisni obalka
			link.type = "image/gif";
			link.href = "data:image/gif;base64,R0lGODlhDAAIALIAAP8IAP///wAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFKAAHACwAAAAADAAIAAADFRi6vPAwqtcCtRZMrfF2UxVmkSQ2CQAh+QQFKAAHACwAAAAADAAIAAADFQi6vPEwqtcAtTZMrfF2UxVmkSQ2CQAh/ntUaGlzIGFuaW1hdGVkIEdJRiBmaWxlIHdhcyBjb25zdHJ1Y3RlZCB1c2luZyBVbGVhZCBHSUYgQW5pbWF0b3IsIHZpc2l0IHVzIGF0IGh0dHA6Ly93d3cudWxlYWQuY29tIHRvIGZpbmQgb3V0IG1vcmUuAVVTU1BDTVQAOw==";
		} else {
			// defaultni ikona OCL
			link.type = "image/gif";
			link.href = "data:image/gif;base64,R0lGODlhEAAQAKECAAAAAICAgP///////yH5BAEKAAIALAAAAAAQABAAAAImlI+pq+DvGIRhzVfbBTltbm0d8o3HByXByk6mRzGGKwt0za71UgAAOw==";
		}
	}

})();