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&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 (.+) > 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>