Utilisateur:Ltrlg/scripts/DeluxeHistory.js
Apparence
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 );