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>