Utilisateur:Dr Brains/Unwatchedpages.js

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.
//<source lang=javascript>//<pre>//<nowiki>

var Unwatchedpages_Text_UpdatePage = 'Wikipédia:Pages non suivies';
var Unwatchedpages_Text_UpdatePageTemplate = '{{Wikipédia:Pages non suivies/Intro|1=$1|2=$2|3=$3}}';

var Unwatchedpages_Text_Update = 'Mettre à jour';
 
var Unwatchedpages_Text_DateTemplate = "le $1/$2/$3 à $4:$5";


var Unwatchedpages_APILimit = 4999;

var Unwatchedpages_PageLimit = 9999999;

// --------------------------------------------------------------------------------------------
// Fonction de requête
 
var Unwatchedpages_ajax = {
  http:function(bundle){ var xmlhttp; try{ xmlhttp = new XMLHttpRequest(); }catch(e){ try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ xmlhttp = false; }}}; if(xmlhttp){ xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4){ Unwatchedpages_ajax.httpComplete(xmlhttp,bundle);}}; xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async == false ? false : true); if (bundle.headers) { for (var field in bundle.headers){ try{ xmlhttp.setRequestHeader(field,bundle.headers[field]); }catch(err){}}}; xmlhttp.send(bundle.data ? bundle.data : null); }; return xmlhttp;},
  httpComplete: function(xmlhttp,bundle){ if(xmlhttp.status == 200 || xmlhttp.status == 302){ if(bundle.onSuccess) bundle.onSuccess(xmlhttp,bundle); }else if(bundle.onFailure){ bundle.onFailure(xmlhttp,bundle); }else{ }}
};
 
// --------------------------------------------------------------------------------------------
// Lancement
 
if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1) && (mw.config.get('wgPageName').replace(/_/g, " ") == Unwatchedpages_Text_UpdatePage) ){
     addOnloadHook(Unwatchedpages_AddLink);
}
 
// --------------------------------------------------------------------------------------------
// Ajout du lien "Mettre à jour"
 
function Unwatchedpages_AddLink(){
     if(typeof(Unwatchedpages_LangCustom)=="function") Unwatchedpages_LangCustom();
     if(typeof(Unwatchedpages_SiteCustom)=="function") Unwatchedpages_SiteCustom();
     if(typeof(Unwatchedpages_UserCustom)=="function") Unwatchedpages_UserCustom();
     var OngletsCactions = document.getElementById('p-cactions');
     if(OngletsCactions){
          var CactionsUl = OngletsCactions.getElementsByTagName('ul')[0];
          CactionsUl.innerHTML += '<li><a href="javascript:Unwatchedpages_RunRequest();">'+Unwatchedpages_Text_Update+'</a><span id="Unwatchedpages_Control"></span></li>';
          if(OngletsCactions.className){
               OngletsCactions.className = OngletsCactions.className.replace(/[ ]*emptyPortlet[ ]*/, " ");
          }
     }
}
 
function Unwatchedpages_Alert(text){
     var Span = document.getElementById("Unwatchedpages_Control");
     if(!Span) return;
     if(text) Span.innerHTML = " "+text;
     else Span.innerHTML = "";
}

// --------------------------------------------------------------------------------------------
// Listage des pages

function Unwatchedpages_RunRequest(List, paramcontinue){
     if(typeof(List)!="object") List = new Array();
     if(!paramcontinue) paramcontinue = "";
     var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&generator=allpages'
             + '&gapnamespace=0'
             + '&gapfilterredir=nonredirects'
             + '&gaplimit=' + Unwatchedpages_APILimit
             + '&prop=info&inprop=watchers'
             + paramcontinue;
     Unwatchedpages_Alert("List = "+decodeURIComponent(paramcontinue).split("&gapcontinue=").join(""));
     Unwatchedpages_ajax.http({
          url: URL,
          list: List,
          onSuccess:Unwatchedpages_RunRequest_Done
     });
}

function Unwatchedpages_RunRequest_Done(Req, data){
     var List = data.list;
     var ObjetXML = Req.responseXML;
     var Pages = ObjetXML.getElementsByTagName('page');
     for(a=0;a<Pages.length;a++){
          var Page = Pages[a];
          var Watchers = Page.getAttribute('watchers');
          if(parseInt(Watchers)==0 ){
               var TitrePage = Unwatchedpages_UnHTMLize(Page.getAttribute('title'));
               List.push("# [["+TitrePage+"]]");
          }
     }
     var ListContinue = ObjetXML.getElementsByTagName('query-continue')[0];
     if(ListContinue && List.length < Unwatchedpages_PageLimit){
          var AutreRequeteContinue = '&gapcontinue=' + encodeURIComponent(ListContinue.firstChild.getAttribute("gapcontinue"));
          Unwatchedpages_RunRequest(List, AutreRequeteContinue);
     }else{
          Unwatchedpages_CreatePage(List);
      }
}


function Unwatchedpages_UnHTMLize(string) {
      var entities = new Array('amp','lt','gt','quot');
      var chars = new Array('&','<','>','"');
      if(!string) return "";
      for (var i=0; i<entities.length; i++) {
            var regex = new RegExp("&"+entities[i]+";", "g");
            string = string.replace(regex, chars[i]);
      }
      return string;
}
 
// --------------------------------------------------------------------------------------------
// Création de la liste

function Unwatchedpages_CreatePage(List){

      var Now = new Date();
      var Minutes   = Now.getMinutes()
      if(Minutes<10){ var ZeroMinutes = "0" ; }else{ var ZeroMinutes = ""; }
      var Heures   = Now.getHours()
      if(Heures<10){ var ZeroHeures = "0" ; }else{ var ZeroHeures = ""; }
      var Jour   = Now.getDate();
      if(Jour<10){ var ZeroJour = "0" ; }else{ var ZeroJour = ""; }
      var Mois = Now.getMonth() + 1;
      if(Mois<10){ var ZeroMois = "0" ; }else{ var ZeroMois = ""; }
      var Annee  = Now.getYear();
      if (Annee < 2000){ Annee = Annee + 1900; }

      var SubPageName = Annee + ZeroMois + Mois + ZeroJour + Jour + ZeroHeures + Heures + ZeroMinutes + Minutes
      var ThisDate = Unwatchedpages_Text_DateTemplate;
      ThisDate = ThisDate.split("$1").join(ZeroJour + Jour);
      ThisDate = ThisDate.split("$2").join(ZeroMois + Mois);
      ThisDate = ThisDate.split("$3").join(Annee);
      ThisDate = ThisDate.split("$4").join(ZeroHeures + Heures);
      ThisDate = ThisDate.split("$5").join(ZeroMinutes + Minutes);

      var ListPage = Unwatchedpages_Text_UpdatePage + "/" + SubPageName;

      var UpdatePageText = Unwatchedpages_Text_UpdatePageTemplate;
      UpdatePageText = UpdatePageText.split("$1").join(ThisDate);
      UpdatePageText = UpdatePageText.split("$2").join(ListPage);
      UpdatePageText = UpdatePageText.split("$3").join(List.length);
      
      var ListPageText = List.join("\n");

      var Params = {updatepage:Unwatchedpages_Text_UpdatePage,
                    updatepagetext:UpdatePageText,
                    listpage:ListPage,
                    listpagetext:ListPageText
      };
      Unwatchedpages_UpdateUpdatePage(Params);
}

function Unwatchedpages_UpdateUpdatePage(UpdateParams){
      var Page = UpdateParams.updatepage;
      var Text = UpdateParams.updatepagetext;
      var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query'
              + '&prop=info&intoken=edit&titles='+encodeURIComponent(Page);
      Unwatchedpages_Alert("Update = "+Page);
      Unwatchedpages_ajax.http({
           url: URL,
           page: Page,
           text: Text,
           updateparams: UpdateParams,
           onSuccess:Unwatchedpages_UpdateUpdatePage_Done
      });
}

function Unwatchedpages_UpdateUpdatePage_Done(Req, data){
      var UpdateParams = data.updateparams;
      var Page = data.page;
      var Text = data.text;      
      var EditParam = new Array();
      var ObjetXML = Req.responseXML;
      var PageItem = ObjetXML.getElementsByTagName("page")[0];
      EditParam["token"] = encodeURIComponent(PageItem.getAttribute("edittoken"));
      EditParam["text"] = encodeURIComponent(Text);
      EditParam["title"] = encodeURIComponent(Page);
      EditParam["watchlist"] = "nochange";
      var Params = new Array();
      for(var Param in EditParam){
            Params.push(Param+"="+EditParam[Param]);
      }
      Params = Params.join("&");
      var headers = new Array();
      headers['Content-Type'] = 'application/x-www-form-urlencoded';
      Unwatchedpages_ajax.http({ url: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=edit',
                    method: "POST", headers: headers,
                    data: Params,
                    updateparams: UpdateParams,
                    onSuccess: Unwatchedpages_UpdateListPage
      });
}

function Unwatchedpages_UpdateListPage(Req, data){
      var UpdateParams = data.updateparams;
      var Page = UpdateParams.listpage;
      var Text = UpdateParams.listpagetext;
      var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=info&intoken=edit&titles='+encodeURIComponent(Page);
     Unwatchedpages_Alert("Update = "+Page);
      Unwatchedpages_ajax.http({
           url: URL,
           page: Page,
           text: Text,
           updateparams: UpdateParams,
           onSuccess:Unwatchedpages_UpdateListPage_Done
      });
}

function Unwatchedpages_UpdateListPage_Done(Req, data){
      var Page = data.page;
      var Text = data.text;      
      var EditParam = new Array();
      var ObjetXML = Req.responseXML;
      var PageItem = ObjetXML.getElementsByTagName("page")[0];
      EditParam["token"] = encodeURIComponent(PageItem.getAttribute("edittoken"));
      EditParam["text"] = encodeURIComponent(Text);
      EditParam["title"] = encodeURIComponent(Page);
      EditParam["watchlist"] = "nochange";
      var Params = new Array();
      for(var Param in EditParam){
            Params.push(Param+"="+EditParam[Param]);
      }
      Params = Params.join("&");
      var headers = new Array();
      headers['Content-Type'] = 'application/x-www-form-urlencoded';
      Unwatchedpages_ajax.http({ url: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=edit',
                    method: "POST", headers: headers,
                    data: Params,
                    page: Page,
                    onSuccess: Unwatchedpages_DeletePage
      });
}

function Unwatchedpages_DeletePage(Req, data){
      var Page = data.page;
      var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=info&intoken=delete&titles='+encodeURIComponent(Page);
      Unwatchedpages_Alert("Delete = "+Page);
      Unwatchedpages_ajax.http({
           url: URL,
           page: Page,
           onSuccess:Unwatchedpages_DeletePage_Done
      });
}

function Unwatchedpages_DeletePage_Done(Req, data){
      var Page = data.page;
      
      var DeleteParam = new Array();
      var ObjetXML = Req.responseXML;
      var PageItem = ObjetXML.getElementsByTagName("page")[0];
      DeleteParam["token"] = encodeURIComponent(PageItem.getAttribute("deletetoken"));
      DeleteParam["title"] = encodeURIComponent(Page);
      DeleteParam["reason"] = encodeURIComponent(" - ");
      DeleteParam["watchlist"] = "nochange";
      var Params = new Array();
      for(var Param in DeleteParam){
            Params.push(Param+"="+DeleteParam[Param]);
      }
      Params = Params.join("&");
      var headers = new Array();
      headers['Content-Type'] = 'application/x-www-form-urlencoded';
      Unwatchedpages_ajax.http({ url: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=delete',
                    method: "POST", headers: headers,
                    data: Params,
                    onSuccess: function(){ window.location = document.URL; }
      });
}

//</nowiki></pre></source>