Aller au contenu

Utilisateur:Ltrlg/scripts/DeluxeHistory.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/**
 * Nom : DeluxeHistory
 * Auteur : Dake
 * Basé sur du code Ajax de GôTô
 * Dernière mise à jour : 11 mars 2008
 * Commentaires : Retouches en cours par Ltrlg
 * {{Projet:JavaScript/Script|DeluxeHistory}}
 */
 
var sysopsDeluxeHistory = null;
var botsDeluxeHistory = null;
 
function extractUsers(res) {
	pattern = /title\=\"Utilisateur:(.*?)\"/g;
	s = "";
	while((result = pattern.exec(res)) != null) {
		result = result[1].replace(''', '\'');
		s += result  + "||";
	}
	return s;
}
 
function getBots() {
	try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
	} catch (e) { /* mange l'exception */ }
 
	if (!cookies.get("botsDeluxeHistory")) {
		ajax.conn.onreadystatechange = function () {
			if (ajax.conn.readyState == 4) {
				botsDeluxeHistory = extractUsers(ajax.getResult())
				// conservé pour une semaine
				cookies.setWithDelay("botsDeluxeHistory", botsDeluxeHistory, 1000*3600*24*7)
				getSysops();
			}
		}
		ajax.sendRequest("//fr.wikipedia.org/w/index.php?title=Special:Listusers&group=bot&limit=500&offset=0&action=raw", "GET", true)
	} else {
		botsDeluxeHistory = cookies.get("botsDeluxeHistory")
		getSysops();
	}
}
 
function getSysops() {
	try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
	} catch (e) { /* mange l'exception */ }
 
	if (!cookies.get("sysopsDeluxeHistory")) {
		ajax.conn.onreadystatechange = function () {
			if (ajax.conn.readyState == 4) {
				sysopsDeluxeHistory = extractUsers(ajax.getResult())
				// conservé pour une semaine
				cookies.setWithDelay("sysopsDeluxeHistory", sysopsDeluxeHistory, 1000*3600*24*7)
				deluxeHistoryProcess();
			}
		}
		ajax.sendRequest("//fr.wikipedia.org/w/index.php?title=Special:Listusers&group=sysop&limit=500&offset=0&action=raw", "GET", true)
	} else {
		sysopsDeluxeHistory = cookies.get("sysopsDeluxeHistory")
		deluxeHistoryProcess();
	}
}
 
// code by Martin Honnen
function getOuterHTML (node) {
	if (node.nodeType == 3) {
		return node.nodeValue;
	} else if (node.nodeType == 1) {
		var html = '';
		html += '<' + node.nodeName;
		for (var a = 0; a < node.attributes.length; a++) html += ' ' + node.attributes[a].nodeName + '="' + node.attributes[a].nodeValue + '"';
		if (node.childNodes.length == 0) {
			html += ' \/>';
		} else {
			html += '>';
		}
		for (var c = 0; c < node.childNodes.length; c++) html += getOuterHTML(node.childNodes[c]);
		html += '<\/' + node.nodeName + '>';
	}
	return html;
}
 
function deluxeHistoryProcess() {
	var sysopsList = sysopsDeluxeHistory.split("||")
	var botsList = botsDeluxeHistory.split("||")
	var users = new Object;
 
 	// Expressions régulières pour le type de modification
		var Events = new Array();
		function addEvent(regexp, img, desc) { Events.push( { regexp: regexp, img: img, desc: desc }); }
		addEvent(/((R|r)(é|e)vocation|(R|r)v |(R|r)evert|(V|v)andal(isme|e)|(A|a)nnulation)/, '//upload.wikimedia.org/wikipedia/commons/thumb/0/05/Gtk-undo-ltr.svg/20px-Gtk-undo-ltr.svg.png', 'Révocation');
		// addEvent(/(a restauré|a (e|é)ffacé|(s|S)uppression)/, '//upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Crystal_Clear_action_exit.png/20px-Crystal_Clear_action_exit.png', 'Suppression / restauration');
		addEvent(/((R|r)enommage|a déplacé|a renommé)/, '//upload.wikimedia.org/wikipedia/commons/thumb/4/45/Crystal_Clear_action_2rightarrow.png/20px-Crystal_Clear_action_2rightarrow.png', 'Renommage');
		addEvent(/((s|S)emi-(p|P)rotection|(P|p)rotection|(A|a) protégé)/, '//upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Crystal_Clear_action_lock.png/20px-Crystal_Clear_action_lock.png', 'Protection');
 
	$('#pagehistory li').each(function() {
 
		var lien = $(this).children('.history-user').children('.mw-userlink');
		var username = lien.text();
		var userlinktitle = lien.attr('title')
 
 		// Recherche du statut de l’utilisateur
			var className = "history-user-normal";
			if( typeof users[username] === 'undefined' ) {
				// ip ? 
				if ( /Contributions\//.test(userlinktitle) ) {
					className = "history-user-ip";
				} else {
					// bot ?
					if ( botsList.indexOf(username) > -1 ) {
						className = "history-user-bot";
					}
 
					// sysop ? 
					// Un bot sysop est alors coloré comme sysop
					if ( sysopsList.indexOf(username) > -1 ) {
						className = "history-user-sysop";
					}
				}
				users[username] = className;
			} else {
				className = users[username];
			}
		
		// Ajout de la classe
		$(this).addClass(className)
		
		// Recherche du type de modification
			var comment = $(this).children('.comment');
			var commenttext = comment.text();
			for(var i=0; i<Events.length; i++) {
				if( Events[i].regexp.test(commenttext) ) {
					comment.prepend($('<img />')
						.attr('src', Events[i].img)
						.attr('alt', Events[i].desc)
						.attr('title', Events[i].desc)
						.addClass('deluxehistory-action-icon')
						);
				}
			}
		
	});
}
 
if ( mw.config.get('wgAction') === "history") addOnloadHook( getBots );