Epiçéki

By de-per_g Last update Apr 29, 2008 — Installed 100 times.
// Epiçéki
// Copyright (c) 2007, 2008 de-per_g
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
// ==UserScript==
// @name           Epiçéki
// @author         de-per_g
// @namespace      https://certifi.ca/Gabriel
// @description    Affiche une photo et des infos en passant la souris sur l'e-mail d'un epitéen
// @include        https://acu.epita.fr/*
// @include        https://*.acu.epita.fr/*
// @include        http://acu.epita.fr/*
// @include        http://*.acu.epita.fr/*
// @include        https://scia.epita.fr/*
// @include        https://*.scia.epita.fr/*
// @include        http://scia.epita.fr/*
// @include        http://*.scia.epita.fr/*
// ==/UserScript==

//Anonymous namespace
(function (){

var manage_preload;


function findPos(obj) {
	var x = 0, y = 0;
	while (obj.offsetParent) {
		x += obj.offsetLeft;
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return [x,y];
}

function checkPopup(ev) {
	var div = document.getElementById('epita-login-popup');
	if (div && div.parentNode && ! div.hasAttribute('force-keep')) {
		pos = findPos(div);
		var thisWidth = pos[0] + div.offsetWidth;
		var thisHeight = pos[1] + div.offsetHeight;
		if (false
			|| ((ev.pageX <= pos[0] + 1)
			|| (ev.pageX >= thisWidth - 1))
			|| ((ev.pageY <= pos[1] + 1)
			|| (ev.pageY >= thisHeight - 1))
		) {
			div.parentNode.removeChild(div);
		}
	}
	return true;
}

function preloadEnabled() {
	return GM_getValue('preload', false);
}

function preloadUI() {
	if (! manage_preload) {
		manage_preload = document.createElement('div');
		manage_preload.cssText = 'font-size: smaller;';
	}
	if (preloadEnabled()) {
		manage_preload.innerHTML = '' +
			'preload ' +
			'<strong>on</strong> ' +
			'<a style="font-weight: lighter;" href="#" onclick="enablePreload(false)">off</a>';
	} else {
		manage_preload.innerHTML = '' +
			'preload ' +
			'<a style="font-weight: lighter;" href="#" onclick="enablePreload(true)">on</a> ' +
			'<strong>off</strong>';
	}
	return manage_preload;
}


var noPhotoURI = 'data:image/jpeg;base64,' +
		'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';
function PhotoURLOfLogin(login) {
	return 'http://epitech.net/intra/photo.php?login='+login;
}

function PhotoURLOfUID(uid) {
	//There are exceptions to these rules
	if (uid >= 14000 && uid < 15000) {
		return 'https://www.acu.epita.fr/intra/photo/2004/'+uid+'.jpg';
	} else if (uid >= 15000 && uid < 16000) {
		return 'https://www.acu.epita.fr/intra/photo/2005/'+uid+'.jpg';
	} else if (uid >= 16000 && uid < 17000) {
		return 'https://www.acu.epita.fr/intra/photo/2006/'+uid+'.jpg';
	} else if (uid >= 17000 && uid < 18000) {
		return 'https://www.acu.epita.fr/intra/photo/2007/'+uid+'.jpg';
	} else if (uid >= 18000 && uid < 19000) {
		return 'https://www.acu.epita.fr/intra/photo/2008/'+uid+'.jpg';
		//return 'https://www.acu.epita.fr/intra/photo/new/'+uid+'.jpg';
	} else if (uid >= 19000 && uid < 20000) {
		return 'https://www.acu.epita.fr/intra/photo/2009/'+uid+'.jpg';
	} else if (uid >= 80000 && uid < 82000) {
		return 'https://www.acu.epita.fr/intra/photo/2010/'+uid+'.jpg';
	} else if (uid >= 40000 && uid < 41000) {
		//There are about 13 of these in my promotion
		GM_log('Problem uid ' + uid);
		return noPhotoURI;
	} else {
		GM_log('Martian uid ' + uid);
		return noPhotoURI;
	}
}

function PhotoURLOfElement(elt) {
	if (elt.hasAttribute('epita-login')) {
		return PhotoURLOfLogin(elt.getAttribute('epita-login'));
	}
	else if (elt.hasAttribute('epita-uid')) {
		return PhotoURLOfUID(elt.getAttribute('epita-uid'));
	}
	else {
		return noPhotoURI;
	}
}

function mouseGoesOut(evt) {
	removeEventListener('mouseout', mouseGoesOut, false);
	var div = document.getElementById('epita-login-popup');
	div.removeAttribute('force-keep');
}

function mouseGoesOver(evt) {
	var login = evt.target.getAttribute('epita-login');
	var uid = evt.target.getAttribute('epita-uid');
	var pos = findPos(evt.target);
	var oldDiv = document.getElementById('epita-login-popup');
	var div = document.createElement('div');

	if (oldDiv)
		oldDiv.parentNode.removeChild(oldDiv);
	div.id = 'epita-login-popup';
	div.setAttribute('popup-owner', evt.target);
	div.setAttribute('force-keep', 'true');
	div.style.cssText = '' +
		'border: 1px black solid;' +
		'background: White;' +
		'color: Black;' +
		'position: absolute;' +
		'z-index: 2009;' +
		'left: '+(pos[0]-1)+'px;' +
		'top: '+(pos[1]-1)+'px;' +
		'text-align: left;' +
		'';
	div.innerHTML = '' +
		'<div></div>' +
		'<img src="'+PhotoURLOfElement(evt.target)+'"/>' +
		'';
	var clone = evt.target.cloneNode(true);
	evt.target.addEventListener('mouseout', mouseGoesOut, false);
	div.firstChild.appendChild(clone);
	div.appendChild(preloadUI());
	document.body.appendChild(div);
}


function scanLogins() {
	var links = document.evaluate(
		"//a[starts-with(@href, 'mailto:') and contains(@href, '@epita.fr')]",
		document,
		null,
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
		null);
	
	for (var i = 0; i < links.snapshotLength; i++) {
		var a = links.snapshotItem(i);
		var pieces = /^mailto:([a-z-]{1,6}_[a-z0-9])@epita\.fr$/(a.href);
		if (pieces)
		{
			a.className += ' with-epita-login';
			a.setAttribute('epita-login', pieces[1]);
			a.addEventListener('mouseover', mouseGoesOver, false);
			if (preloadEnabled) {
				document.createElement('img').setAttribute(
					'src', PhotoURLOfLogin(pieces[1]));
			}
		}
	}

	var links = document.evaluate(
		"//a[contains(@href, '&_id_page=200&')]",
		document,
		null,
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
		null);
	
	for (var i = 0; i < links.snapshotLength; i++) {
		var a = links.snapshotItem(i);
		var pieces = /&_info_id=([0-9]{1,5})(?:&|$)/(a.href);
		if (pieces)
		{
			a.className += ' with-epita-uid';
			a.setAttribute('epita-uid', pieces[1]);
			a.addEventListener('mouseover', mouseGoesOver, false);
			if (preloadEnabled) {
				document.createElement('img').setAttribute(
					'src', PhotoURLOfUID(pieces[1]));
			}
		}
	}

	var links = document.evaluate(
		"//a[contains(@href, '?c=etudiants&')]",
		document,
		null,
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
		null);
	
	for (var i = 0; i < links.snapshotLength; i++) {
		var a = links.snapshotItem(i);
		var pieces = /&p=([0-9]{1,5})(?:&|$)/(a.href);
		if (pieces)
		{
			a.className += ' with-epita-uid';
			a.setAttribute('epita-uid', pieces[1]);
			a.addEventListener('mouseover', mouseGoesOver, false);
			if (preloadEnabled) {
				document.createElement('img').setAttribute(
					'src', PhotoURLOfUID(pieces[1]));
			}
		}
	}
}


function pageLoaded() {
	unsafeWindow.enablePreload = function(state) {
		var s;
		if (state) { s = true; } else { s = false; }
		GM_setValue('preload', s);
	};
	document.addEventListener('mousemove', checkPopup, false);
	scanLogins();
}

window.addEventListener('load', pageLoaded, true);

})();

// vim: set sw=2 ts=2 noet :