Aller au contenu

Utilisateur:Sacamol/HistoryDeluxe.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.
// {{Catégorisation JS}} 

/////////////////////////////////////// RECUPERACTION DE LA LISTE DES BOTS ET SYSOPS ///////////////////////////////////////


//

function GetUsersInGroup_UpdateUserList(Group, CookieName, UserList, UserContinue){
      if((!Group)||(!CookieName)) return;
      if(!UserList) UserList = new Array();
      if(!UserContinue) UserContinue = '';
      var APILimit = 499;
      if((mw.config.get('wgUserName')=="sysop")||(mw.config.get('wgUserName')=="bot")) APILimit = 4999;
      var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') 
             + '/api.php?format=xml&action=query&list=allusers'
             + '&aulimit='+APILimit
             + '&augroup='+Group
             + UserContinue;
      var NouvelleRequete = new XMLHttpRequest();      
      NouvelleRequete.open("GET", url, true);
      NouvelleRequete.send(null);
      NouvelleRequete.onreadystatechange = function() {
            if(NouvelleRequete.readyState == 4 && NouvelleRequete.status == 200) {
                  var ObjetXML = NouvelleRequete.responseXML; 
                  var Users = ObjetXML.getElementsByTagName('u');
                  for(a=0;a<Users.length;a++){
                        var UserName = Users[a].getAttribute('name');
                        if(UserName) UserList.push(UserName);
                  } 
                  var UserContinue = ObjetXML.getElementsByTagName('query-continue')[0];          
                  if(UserContinue){
                        var AutreRequeteContinue = '&aufrom=' + UserContinue.getElementsByTagName('allusers')[0].getAttribute('aufrom');
                        GetUsersInGroup_UpdateUserList(Group, CookieName, UserList, AutreRequeteContinue);
                  }else{
                        var cookieValue = UserList.join(';');
                        var now = new Date();
                        var CookieDelay = new Date(now.getTime() + 1000 * 60 * 60 * 24 * 7 );
                        document.cookie = escape(CookieName) + '=' + escape(cookieValue) + '; EXPIRES=' + CookieDelay.toGMTString()  + "; PATH=/" ; 
                        window.location.reload();
                  }
            }
      }
}

function GetUsersInGroup_GetUserList(Group, cookieName){
      var cookieValue = false;
      var posName = document.cookie.indexOf(escape(cookieName) + '=' );
      if (posName != -1) {
            var posValue = posName + (escape(cookieName) + '=' ).length;
            var endPos = document.cookie.indexOf(';', posValue) ;
            if (endPos != -1) {
                  cookieValue = unescape(document.cookie.substring(posValue, endPos));
            } else {
                  cookieValue = unescape(document.cookie.substring(posValue));
            }
      }
      if(cookieValue){
            return decodeURIComponent(cookieValue);
      }else{ 
            return false;
      }
}

// Effacement du cookie du gadget
HistoryDeluxe_DeleteOldCookie("botsDeluxeHistory");
HistoryDeluxe_DeleteOldCookie("sysopsDeluxeHistory");

if(typeof(wgBotMembers)=="undefined"){
      wgBotMembers = GetUsersInGroup_GetUserList('bot', 'User-Group-bot');
      if(!wgBotMembers){
            GetUsersInGroup_UpdateUserList('bot', 'User-Group-bot');
      }else{
            wgBotMembers = wgBotMembers.split(';');
      }
}

if(typeof(wgSysopMembers)=="undefined"){
      wgSysopMembers = GetUsersInGroup_GetUserList('sysop', 'User-Group-sysop');
      if(!wgSysopMembers){ 
            GetUsersInGroup_UpdateUserList('sysop', 'User-Group-sysop');
      }else{
            wgSysopMembers = wgSysopMembers.split(';');
      }
}


// Effacement du cookie du gadget actuel (risque de saturation des cookies)

function HistoryDeluxe_DeleteOldCookie(CookieName){
      var now = new Date();
      var CookieDelay = new Date(now.getTime() + 100 );
      document.cookie = escape(CookieName) + '=' + escape("no") + '; EXPIRES=' + CookieDelay.toGMTString()  + "; PATH=/" ; 
}

/////////////////////////////////////// LANCEMENTS ///////////////////////////////////////

if((wgBotMembers)&&(wgSysopMembers)){     
      importStylesheet('Utilisateur:Dr Brains/HistoryDeluxe.css');

      if(mw.config.get('wgAction')=="history"){ 
            addOnloadHook(HistoryDeluxe_History);
      } else if((mw.config.get('wgCanonicalSpecialPageName')=="Watchlist")&&((document.URL.indexOf("edit")==-1)||(document.URL.indexOf("raw")==-1))){
            addOnloadHook(HistoryDeluxe_Watchlist);
      } else if(mw.config.get('wgCanonicalSpecialPageName')=="Recentchanges"){
            addOnloadHook(HistoryDeluxe_Recentchanges);
      } else if(mw.config.get('wgCanonicalSpecialPageName')=="Recentchangeslinked"){
            addOnloadHook(HistoryDeluxe_Recentchangeslinked);
      } else if(mw.config.get('wgCanonicalSpecialPageName')=="Newpages"){
            addOnloadHook(HistoryDeluxe_Newpages);
      } else if(mw.config.get('wgCanonicalSpecialPageName')=="Log"){
            addOnloadHook(HistoryDeluxe_Log);
      } else if(mw.config.get('wgCanonicalSpecialPageName')=="AbuseLog"){
            addOnloadHook(HistoryDeluxe_AbuseLog);
      } else{
            addOnloadHook(HistoryDeluxe_OtherPages);
      }
}

/////////////////////////////////////// FONCTIONS GENERALES ///////////////////////////////////////

function HistoryDeluxe_History(){
      var HistoryPage = document.getElementById('pagehistory');
      if(!HistoryPage) return;
      var Lis = HistoryPage.getElementsByTagName('li');
      for(var a=0;a<Lis.length;a++){
            $(Lis[a]).addClass(HistoryDeluxe_UserGroupClassName(Lis[a]));
      }
}

function HistoryDeluxe_Watchlist(){
      // Liste de suivi normale
      var Uls = document.getElementsByTagName('ul');
      for(var a=0;a<Uls.length;a++){
            if($(Uls[a]).hasClass("special")){
                  var Lis = Uls[a].getElementsByTagName('li');
                  for(var b=0;b<Lis.length;b++){
                        $(Lis[b]).addClass(HistoryDeluxe_UserGroupClassName(Lis[b]));
                  }
            }
      }
      // Liste de suivi "améliorée"
      var TDs = document.getElementsByTagName('td');
      for(var a=0;a<TDs.length;a++){
            var TD = TDs[a];
            var User = HistoryDeluxe_GetUserName(TD);
            if(User){
                  $(TD).addClass(HistoryDeluxe_UserGroupClassName(TD));
            }
      }
}

function HistoryDeluxe_Recentchanges(){
      // RC normale
      var Uls = document.getElementsByTagName('ul');
      for(var a=0;a<Uls.length;a++){
            if($(Uls[a]).hasClass("special")){
                  var Lis = Uls[a].getElementsByTagName('li');
                  for(var b=0;b<Lis.length;b++){
                        $(Lis[b]).addClass(HistoryDeluxe_UserGroupClassName(Lis[b]));
                  }
            }
      }
      // RC "améliorées"
      var TDs = document.getElementsByTagName('td');
      for(var a=0;a<TDs.length;a++){
            var TD = TDs[a];
            var User = HistoryDeluxe_GetUserName(TD);
            if(User){
                  $(TD).addClass(HistoryDeluxe_UserGroupClassName(TD));
            }
      }
}

function HistoryDeluxe_Recentchangeslinked(){
      // RC liées normales
      var Uls = document.getElementsByTagName('ul');
      for(var a=0;a<Uls.length;a++){
            if($(Uls[a]).hasClass("special")){
                  var Lis = Uls[a].getElementsByTagName('li');
                  for(var b=0;b<Lis.length;b++){
                        $(Lis[b]).addClass(HistoryDeluxe_UserGroupClassName(Lis[b]));
                  }
            }
      }
      // RC liées "améliorées"
      var TDs = document.getElementsByTagName('td');
      for(var a=0;a<TDs.length;a++){
            var TD = TDs[a];
            var User = HistoryDeluxe_GetUserName(TD);
            if(User){
                  $(TD).addClass(HistoryDeluxe_UserGroupClassName(TD));
            }
      }
}

function HistoryDeluxe_Newpages(){
      var Content = document.getElementById('bodyContent');
      if(!Content) Content=document.getElementById('mw_contentholder');
      if(!Content) Content=document.getElementById('article');
      var List = Content.getElementsByTagName('ul')[0];
      if(!List) return;
      var Lis = List.getElementsByTagName('li');
      for(var b=0;b<Lis.length;b++){
            if(HistoryDeluxe_UserGroupClassName(Lis[b]))
            $(Lis[b]).addClass(HistoryDeluxe_UserGroupClassName(Lis[b]));
      }
}

function HistoryDeluxe_Log(){
      var Content = document.getElementById('bodyContent');
      if(!Content) Content=document.getElementById('mw_contentholder');
      if(!Content) Content=document.getElementById('article');

      var List = Content.getElementsByTagName('ul')[0];
      if(!List) return;
      var Lis = List.getElementsByTagName('li');
      for(var b=0;b<Lis.length;b++){
            if(HistoryDeluxe_UserGroupClassName(Lis[b]))
            $(Lis[b]).addClass(HistoryDeluxe_UserGroupClassName(Lis[b]));
      }
}

function HistoryDeluxe_AbuseLog(){
      var Content = document.getElementById('bodyContent');
      if(!Content) Content=document.getElementById('mw_contentholder');
      if(!Content) Content=document.getElementById('article');

      var List = Content.getElementsByTagName('ul')[0];
      if(!List) return;
      var Lis = List.getElementsByTagName('li');
      for(var b=0;b<Lis.length;b++){
            if(HistoryDeluxe_UserGroupClassName(Lis[b]))
            $(Lis[b]).addClass(HistoryDeluxe_UserGroupClassName(Lis[b]));
      }
}

function HistoryDeluxe_OtherPages(){
      var Uls = document.getElementsByTagName('ul');
      for(var a=0;a<Uls.length;a++){
            if($(Uls[a]).hasClass("special")){
                  var Lis = Uls[a].getElementsByTagName('li');
                  for(var b=0;b<Lis.length;b++){
                        $(Lis[b]).addClass(HistoryDeluxe_UserGroupClassName(Lis[b]));
                  }
            }
      }
}

/////////////////////////////////////// FONCTIONS SUBALTERNES ///////////////////////////////////////

function HistoryDeluxe_UserGroupClassName(Li){            
      var LiClass = "UserIs-User";
      var UserName = HistoryDeluxe_GetUserName(Li);
      if(wgBotMembers.indexOf(UserName)!=-1) LiClass = "UserIs-Bot";
      if(wgSysopMembers.indexOf(UserName)!=-1) LiClass = "UserIs-Sysop";
      if(HistoryDeluxe_IsIP(UserName))  LiClass = "UserIs-IP";
      return LiClass;
}

function HistoryDeluxe_GetUserName(Li){      
      var AllLinks = HistoryDeluxe_getElementsByClassName("mw-userlink", "a", Li);
//      var AllLinks = getElementsByClassName(Li, "a", "mw-userlink");
      if(AllLinks.length==1){
            return AllLinks[0].innerHTML;
      }
      return false;
}

function HistoryDeluxe_IsIP(UserName){
      var ipv4 = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/; 
      var ipv6 = /\w{1,4}\:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}/;  
      if (ipv4.exec(UserName) || ipv6.exec(UserName)) {
            return true;
      }
      return false;
}

function HistoryDeluxe_getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|s)" + className + "(s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i ];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}