Utilisateur:Aither/rcautohilight.js

Un article de Wikipédia, l'encyclopédie libre.

Note : Après avoir publié la page, vous devrez forcer son rechargement pour voir les changements : Mozilla / Konqueror / Firefox : Shift-Ctrl-R, Internet Explorer / Opera : Ctrl-F5, Safari : Cmd-R.

// <pre><nowiki>
 
// Recent Changes Autohilight
 
//function refresh1min()
//{
//    // the timeout value should be the same as in the "refresh" meta-tag
//    setTimeout( "refresh()", 60000 );
//}
 
//if (location.href.indexOf('Special:Recentchanges') != -1) {
//  addLoadEvent(refresh1min);
//}
 
// Track suspect users
var WRCUcookieminutes = 60;
 
// Track suspect pages
var WRCPcookieminutes = 15;
 
var revertColor   = '#ffdfdf';
var suspectColor  = Array('#ffffbf', '#ffdfbf', '#ffdfdf');
var avertColor    = '#dfffdf';
var adminColor    = '#efefff';
 
var reguser = Array();
reguser.push(new RegExp('Special:Contributions&target=([^"]+)'));
//reguser.push(new RegExp('Special:Contributions&amp;target=([^"]+)'));
reguser.push(new RegExp('Special:Contributions/([^"]+)'));
 
// $1 = page, $2 = user
var regdelete = Array();
regdelete.push(new RegExp('^\\(a effac. . (.+) . \\(le contenu .tait : . .* . et l\'unique contributeur en .tait . (.+) .'));
regdelete.push(new RegExp('^\\(a effac. . (.+) . \\(le contenu .tait : . .*'));
regdelete.push(new RegExp('^\\(a effac. . (.+) . \\(Contenait avant blanchiment : .+'));
regdelete.push(new RegExp('^\\(a effac. . (.+) . : Contenait avant blanchiment : '));
regdelete.push(new RegExp('^\\(a effac. . (.+) . \\(bac . sable\\)'));
regdelete.push(new RegExp('^\\( *[Bb]lanchi:'));
 
// $1 = page, $2 = user
var regprotect = Array();
regprotect.push(new RegExp('^\\(a prot.g. . (.+) . : Semi-protection : Page vandalis.e par (.+) '));
 
// $1 = user
var regrevert = Array();
regrevert.push(new RegExp('^\\(Revert to revision \\d+ using '));
regrevert.push(new RegExp('^\\([Rr].vocation des modifications de (.+) et restauration d\'une pr.c.dente version de '));
regrevert.push(new RegExp('^\\([Rr].vocation des modifications de (.+) \\(retour . la pr.c.dente version de '));
regrevert.push(new RegExp('^\\([Rr].vocation des modifications de (.+) et retour . la version de '));
regrevert.push(new RegExp('^\\([Rr].vocation des modifications de (.+)\.'));
regrevert.push(new RegExp('^\\(rv modifications de (.+) &gt; retour . la version de '));
regrevert.push(new RegExp('^\\(revert suite à vandalisme de (.+) et restauration de la version de '));
regrevert.push(new RegExp('^\\([Rr].vocation'));
regrevert.push(new RegExp('^\\([Rr]evert'));
regrevert.push(new RegExp('^\\(rv'));
regrevert.push(new RegExp('[Vv]andalisme'));
regrevert.push(new RegExp('bac . sable'));
 
// $1 = user
var regavert = Array();
regavert.push(new RegExp('vandal'));
regavert.push(new RegExp('{{subst:'));
regavert.push(new RegExp('^\\(bienvenue d.butant\\)$'));
regavert.push(new RegExp('spammeu?r'));
 
 
 
function RCcreateCookie(name,value,minutes)
{
	if (minutes)
	{
		var date = new Date();
		date.setTime(date.getTime()+(minutes*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name + "=" + value + expires + "; path=/";
}
 
function RCreadCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
 
function isRCAHUser(li, func, user) {
  var strregex = new RegExp(' [ak]u(' + func + ')=' + user);
  if (RCreadCookie(escape("WRCU" + user)) != null && strregex.test(li.title) == false) {
    li.title += ' ku(' + func + ')=' + user;
    return (1);
  }
  return (0);
}
 
function RCAHAddUser(li, func, user) {
  if (!isRCAHUser(li, func, user)) {
    li.title += ' au(' + func + ')=' + user;
    RCcreateCookie(escape("WRCU" + user), func, WRCUcookieminutes);
  }
}
 
function isRCAHPage(li, func, page) {
  var strregex = new RegExp(' [ak]p(' + func + ')=' + page);
  if (RCreadCookie(escape("WRCP" + page)) != null && strregex.test(li.title) == false) {
    li.title += ' kp(' + func + ')=' + page;
    return (1);
  }
  return (0);
}
 
function RCAHAddPage(li, func, page) {
  if (!isRCAHPage(li, func, page)) {
    li.title += ' ap(' + func + ')=' + page;
    RCcreateCookie(escape("WRCP" + page), func, WRCPcookieminutes);
  }
}
 
function RCAutoHilight() {
  if (location.href.indexOf('Special:Recentchanges') == -1) {
    return;
  }
 
  // vandalisme -> tracer user + article
  // avertissement -> tracer user
 
  var l = document.getElementById('bodyContent').getElementsByTagName('ul');
 
  for (var idxul = l.length - 1; idxul >= 0 ; idxul--) {
    if (l[idxul].className == 'special') {
      var m = l[idxul].getElementsByTagName('li');
 
      for (var i = m.length - 1; i >= 0; i--) {
        var comment = null;
        var n = m[i].getElementsByTagName('span');
 
        for (var j = 0; j < n.length; j++) {
          if (n[j].className == 'comment') {
            comment = n[j];
            break;
          }
        }
 
        var n = m[i].getElementsByTagName('a');
        if (n.length < 0) {
          continue;
        }
 
        var page = n[0].title.split('/')[0];
        var subpage = n[0].title.split('/')[1];
        var splitpage = page.split(':');
 
        var namespace;
        var pagename;
        if (splitpage.length == 1) {
          namespace = '';
          pagename  = splitpage[0].split('/')[0];
        }
        if (splitpage.length == 2) {
          namespace = splitpage[0];
          pagename  = splitpage[1].split('/')[0];
        }
        //m[i].title += ' namespace=' + namespace; 
        //m[i].title += ' pagename=' + pagename; 
        //m[i].title += ' subpage=' + subpage; 
 
        // ajouter check user + hilight
 
        var editor = '';
	var suspectlevel = 0;
        for (var j=(namespace=='Special')?1:2; j < n.length; j++) {
          for (var k = 0; k < reguser.length; k++) {
            if (reguser[k].test(n[j].href)) {
              var resuser = reguser[k].exec(n[j].href);
              editor = resuser[1];
              //m[i].title += ' editor=' + editor; 
              if (isRCAHUser(m[i], 'editor', editor)) {
                m[i].style.backgroundColor = suspectColor[suspectlevel];
	        suspectlevel+= (suspectlevel < suspectColor.length)?1:0;
              }
            }
            break;
          }
        }
 
        if (editor == '') {
          m[i].style.backgroundColor = '#7f7f7f';
          //m[i].title += ' editor=?'; 
        }
 
        if (isRCAHPage(m[i], 'global', page)) {
          m[i].style.backgroundColor = suspectColor[suspectlevel];
	  suspectlevel+= (suspectlevel < suspectColor.length)?1:0;
        }
 
        if (comment == null) {
          continue;
        }
 
        if (namespace == 'Special' && pagename == "Log" && subpage == "delete") {
          m[i].style.backgroundColor = adminColor;
          for (var j = 0; j < regdelete.length; j++) {
            if (regdelete[j].test(comment.innerHTML)) {
              var resdelete = regdelete[j].exec(comment.innerHTML);
              if ( resdelete.length >= 1 ) {
                RCAHAddPage(m[i], 'delete', resdelete[1]);
              }
              if ( resdelete.length >= 2 ) {
                RCAHAddUser(m[i], 'delete', resdelete[2]);
              }
              break;
            }
          }
          continue;
        }
 
        if (namespace == 'Special' && pagename == "Log" && subpage == "protect") {
          m[i].style.backgroundColor = adminColor;
          for (var j = 0; j < regprotect.length; j++) {
            if (regprotect[j].test(comment.innerHTML)) {
              var resprotect = regprotect[j].exec(comment.innerHTML);
              if ( resprotect.length >= 1 ) {
                RCAHAddPage(m[i], 'protect', resprotect[1]);
              }
              if ( resdelete.length >= 2 ) {
                RCAHAddUser(m[i], 'protect', resprotect[2]);
              }
              break;
            }
          }
          continue;
        }
 
        if (namespace == 'Discussion Utilisateur' && pagename != editor) {
          // modif page utilisateur -> detecter averts
          for (var j = 0; j < regavert.length; j++) {
            if (regavert[j].test(comment.innerHTML)) {
              m[i].style.backgroundColor = avertColor;
              RCAHAddUser(m[i], 'avert', pagename);
              break;
            }
          }
          continue;
        }
 
        if (namespace == 'Special') {
	  continue;
	}
 
        // page normale -> detecter reverts
        for (var j = 0; j < regrevert.length; j++) {
          if (regrevert[j].test(comment.innerHTML)) {
            m[i].style.backgroundColor = revertColor;
            RCAHAddPage(m[i], 'revert', page);
 
            var resrevert = regrevert[j].exec(comment.innerHTML);
 
            if (resrevert.length >= 1) {
              for (var k = 0; k < reguser.length; k++) {
                if (reguser[k].test(resrevert[1])) {
                  var resuser = reguser[k].exec(resrevert[1]);
                  if (resuser.length >= 1) {
                    RCAHAddUser(m[i], 'revert', resuser[1]);
                  }
                  break;
                }
              }
            } else {
              m[i].title += ' au(revert)=?';
              break;
            }
          }
        }
      }
    }
  }
 
  //dump(dumpRCAHPages() + "\n");
  //dump(dumpRCAHUsers() + "\n");
}
 
addLoadEvent(RCAutoHilight);
 
// </nowiki></pre>