Utilisateur:Dr Brains/ArticlesRecentsBOT.js
//((Boîte déroulante début|titre=[[Utilisateur:Dr Brains/ArticlesRecentsBOT.js]]))<source lang=javascript>
//<pre><nowiki>
// ############################################################################################################
// Bot de mise à jour des modèles ((Articles récents))
// Page de démarrage : [[Utilisateur:Dr Bot/Scripts/Articles récents BOT]]
// Voir aussi le gadget : [[MediaWiki:Gadget-ArticlesRecents.js]]
// Licence : Domaine public
// ############################################################################################################
// ///////////////////////////////////////////////////// VARIABLES /////////////////////////
/* paramètre "nmMax" par défaut */
var ArticlesRecentsBOT_TailleListe = 10;
/* Modèle par défaut */
var ArticlesRecentsBOT_ModeleDefautDebut = '<noinclude>((Articles récents\n'
+ '|pageportail=$1\n'
+ '|catégorie=$2\n'
+ '|nbMax=$3\n'
+ '|defilant=oui\n'
+ '|hauteur=250\n'
+ '|listeRecents=</noinclude>\n'
+ '$4\n'
+ '<noinclude>\n'
+ '))</noinclude>\n'
/* Commentaires */
// Début liste articles récents //
var ArticlesRecentsBOT_DebutListeRecents = '<!-- Ce tableau est créé automatiquement par un robot. Articles Récents DEBUT -->\n';
// Fin liste articles récents //
var ArticlesRecentsBOT_FinListeRecents = '<!-- Ce tableau est créé automatiquement par un robot. Articles Récents FIN -->\n';
/* Résumé de modification */
var ArticlesRecentsBOT_ResumeModif = 'Bot : [[$1|Mise à jour]] des [[Modèle:Articles récents|((Articles récents))]] ';
/* Publication automatique par défaut */
var ArticlesRecentsBOT_UpdateAll = true;
/* Page de commencement */
ArticlesRecentsBOT_UpdateFrom = 1
/* Renouvellement automatique par défaut */
var ArticlesRecentsBOT_AutomaticMode = true;
/* Nombre maxi de nouveaux articles listés dans le résumé de modif */
var ArticlesRecentsBOT_MaxInSummary = 1;
/* Liste des pages à mettre à jour */
var ArticlesRecentsBOT_ListToUpdate = new Array();
var ArticlesRecentsBOT_ListToUpdateCount = -1;
// ///////////////////////////////////////////////////// FONCTION DE REQUÊTE ///////////////
var ArticlesRecentsBOT_ajax = {
http: function(bundle) {
// mandatory: bundle.url
// optional: bundle.async
// optional: bundle.method
// optional: bundle.headers
// optional: bundle.data
// optional: bundle.onSuccess (xmlhttprequest, bundle)
// optional: bundle.onFailure (xmlhttprequest, bundle)
// optional: bundle.otherStuff OK too, passed to onSuccess and onFailure
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)
ArticlesRecentsBOT_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) {
//Argos42 : pour rendre LiveRC fonctionnel sur chrome
}
}
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 {
// A activer en debug mode ?
// alert(xmlhttp.status+xmlhttp.responseText);
}
}
};
// ///////////////////////////////////////////////////// LANCEMENT /////////////////////////
if( (mw.config.get('wgAction')!="edit")&&(mw.config.get('wgAction')!="submit")&&(mw.config.get('wgPageName').indexOf("/Articles_récents_BOT")!=-1) ){
importStylesheet('Utilisateur:Dr Brains/ArticlesRecentsBOT.css');
addOnloadHook(ArticlesRecentsBOT_addLinks);
}
// ///////////////////////////////////////////////////// CRÉATION DES LIENS /////////////////////////
function ArticlesRecentsBOT_addLinks(){
var buttonDiv = document.getElementById("ListToUpdate_Run");
if(buttonDiv){
var link = '<a href="javascript:ArticlesRecentsBOT_RunAll();" title="Lancer la mise à jour de toutes les pages de la liste">' + buttonDiv.innerHTML + '</a>';
buttonDiv.innerHTML = link;
}
var listDiv = document.getElementById("ListToUpdate");
if(listDiv){
var Count = -1;
var Liens = listDiv.getElementsByTagName('a');
for(var a=0;a<Liens.length;a++){
if(Liens[a].href.indexOf("javascript:")==-1){
Count++
Liens[a].id = "LinkToUpdate_"+Count;
var UpdateLink = document.createElement('a');
UpdateLink.href = "javascript:ArticlesRecentsBOT_RunOne("+Count+");";
UpdateLink.title = "Lancer la mise à jour";
UpdateLink.innerHTML = '<img height="15" width="15" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Crystal_Clear_action_exit.svg/50px-Crystal_Clear_action_exit.svg.png" alt="Lancer la mise à jour de cette page">';
Liens[a].parentNode.insertBefore(UpdateLink, Liens[a]);
a++
Liens[a].parentNode.insertBefore(document.createTextNode(' - '), Liens[a]);
}
}
}
var NewPagesDiv = document.getElementById("ListToUpdate_CheckNewPages");
if(NewPagesDiv){
var NewPageLink = '<a href="javascript:ArticlesRecentsBOT_CheckNewPages();" title="Rechercher de nouvelles pages à mettre à jour">' + NewPagesDiv.innerHTML + '</a>';
NewPagesDiv.innerHTML = NewPageLink;
}
if(mw.config.get('wgUserGroups').indexOf('bot')!=-1){
ArticlesRecentsBOT_RunAll();
setTimeout("window.location.reload();", 1000*3600);
}
}
// ///////////////////////////////////////////////////// PRÉPARATION MISE À JOUR 1 PAGE /////////////////////////
function ArticlesRecentsBOT_RunOne(Count){
var Link = document.getElementById("LinkToUpdate_"+Count);
if(Link){
ArticlesRecentsBOT_UpdateAll = false;
ArticlesRecentsBOT_ListToUpdateCount++
ArticlesRecentsBOT_ListToUpdate[ArticlesRecentsBOT_ListToUpdateCount] = Link.innerHTML;
ArticlesRecentsBOT_Update(0);
}
}
// ///////////////////////////////////////////////////// PRÉPARATION MISE À JOUR TOUTES LES PAGES /////////////////////////
function ArticlesRecentsBOT_RunAll(){
var listDiv = document.getElementById("ListToUpdate");
if(listDiv){
if(mw.config.get('wgUserGroups').indexOf('bot')==-1){
ArticlesRecentsBOT_UpdateAll = confirm('Publication automatique ?');
ArticlesRecentsBOT_UpdateFrom = prompt('Commencer à quelle page',ArticlesRecentsBOT_UpdateFrom);
if((!ArticlesRecentsBOT_UpdateFrom)||(ArticlesRecentsBOT_UpdateFrom=='')) ArticlesRecentsBOT_UpdateFrom = 1;
ArticlesRecentsBOT_UpdateFrom = parseInt(ArticlesRecentsBOT_UpdateFrom);
if(ArticlesRecentsBOT_UpdateFrom<1) ArticlesRecentsBOT_UpdateFrom = 1;
ArticlesRecentsBOT_AutomaticMode = confirm('Renouvellement automatique ?');
}
var Liens = listDiv.getElementsByTagName('a');
for(var a=0;a<Liens.length;a++){
if(Liens[a].href.indexOf("javascript:")==-1){
ArticlesRecentsBOT_ListToUpdateCount++
ArticlesRecentsBOT_ListToUpdate[ArticlesRecentsBOT_ListToUpdateCount] = Liens[a].innerHTML;
}
}
ArticlesRecentsBOT_Update((ArticlesRecentsBOT_UpdateFrom-1));
}
}
// ///////////////////////////////////////////////////// REQUÊTE PAGE À METTRE À JOUR /////////////////////////
function ArticlesRecentsBOT_Update(position){
if(!position) position=0;
var Page = ArticlesRecentsBOT_ListToUpdate[position];
if(!Page){
if(ArticlesRecentsBOT_AutomaticMode&&ArticlesRecentsBOT_UpdateAll){
ArticlesRecentsBOT_Update(0);
}else{
alert('Travail terminé !');
window.location.reload();
}
return;
}
ArticlesRecentsBOT_ajax.http({ url: mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(Page) + '&action=render',
onSuccess: ArticlesRecentsBOT_UpdateDone,
position:position
});
}
function ArticlesRecentsBOT_UpdateDone(Req, data){
var position = data.position;
var Page = ArticlesRecentsBOT_ListToUpdate[position];
while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
document.body.innerHTML = '<center><h1 id="firstHeading" class="firstHeading" >'
+ (position+1) + '/' + ArticlesRecentsBOT_ListToUpdate.length +' : '+ Page
+ '</h1></center>'
+ Req.responseText;
window.scrollTo(0,0);
var Cadres = document.getElementsByTagName('div');
for(var s=0;s<Cadres.length;s++){
if( $(Cadres[s]).hasClass('categoryRecentChanges') ){
var ParamCategorie = Cadres[s].firstChild.innerHTML;
var ParamPage = Cadres[s].firstChild.title;
var TailleListe = Cadres[s].firstChild.className;
}
}
if(typeof(TailleListe)!='number') TailleListe = ArticlesRecentsBOT_TailleListe;
var NewCategory = new Array();
ArticlesRecentsBOT_CheckCategory({position:position, paramPage:ParamPage, ParamCategory:ParamCategorie, paramTailleListe:TailleListe});
}
// ///////////////////////////////////////////////////// REQUÊTE PAGES DE LA CATÉGORIE /////////////////////////
function ArticlesRecentsBOT_CheckCategory(Args){
var position = Args.position;
var ParamPage = Args.paramPage;
var ParamCategorie = Args.ParamCategory;
var TailleListe = Args.paramTailleListe;
if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
var APILimit=4999;
}else{
var APILimit=499;
}
var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=query&format=xml'
+ '&list=categorymembers'
+ '&cmdir=descending'
+ '&cmsort=timestamp'
+ '&cmlimit=' + TailleListe
+ '&cmtitle='+ ParamCategorie;
ArticlesRecentsBOT_ajax.http({ url: URL,
onSuccess: ArticlesRecentsBOT_CheckCategoryDone,
args:Args
});
}
function ArticlesRecentsBOT_CheckCategoryDone(Req, data){
var Args = data.args;
var position = Args.position;
var ParamPage = Args.paramPage;
var ParamCategorie = Args.ParamCategory;
var TailleListe = Args.paramTailleListe;
var NewRecents = new Array();
var ObjetXML = Req.responseXML;
var Pages = ObjetXML.getElementsByTagName('cm');
for(a=0;a<Pages.length;a++){
var TitrePage = Pages[a].getAttribute('title');
var NS = Pages[a].getAttribute('ns');
if(NS==="0" && NewRecents.indexOf(TitrePage)==-1){
NewRecents.push(TitrePage);
}
}
Args.paramNewRecents = NewRecents;
var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(ParamPage) + '&action=edit';
ArticlesRecentsBOT_ajax.http({ url: URL,
onSuccess: ArticlesRecentsBOT_Edit,
args:Args
});
}
// ///////////////////////////////////////////////////// ÉDITION /////////////////////////
function ArticlesRecentsBOT_Edit(Req, data){
var Args = data.args;
var position = Args.position;
var ParamPage = Args.paramPage;
var ParamCategorie = Args.ParamCategory;
var TailleListe = Args.paramTailleListe;
var NewRecents = Args.paramNewRecents;
while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
document.body.innerHTML = Req.responseText;
var wpSave = document.getElementById("wpSave");
if(!wpSave){
ArticlesRecentsBOT_Update((position+1));
return;
}
var ContenuPage = document.getElementById("wpTextbox1").value;
var AncienResumeModif = document.editform.wpSummary.value;
var NouvelleListeRecents = ArticlesRecentsBOT_DebutListeRecents;
for(var r=0;r<NewRecents.length;r++){
NouvelleListeRecents += '# [[' + NewRecents[r] + ']]\n';
}
NouvelleListeRecents += ArticlesRecentsBOT_FinListeRecents;
if(
(ContenuPage.indexOf(ArticlesRecentsBOT_DebutListeRecents)!=-1) &&
(ContenuPage.indexOf(ArticlesRecentsBOT_FinListeRecents)!=-1) ){
var debutTexte = ContenuPage.substring(0, ContenuPage.indexOf(ArticlesRecentsBOT_DebutListeRecents));
AncienModele = ContenuPage.substring(0, ContenuPage.indexOf(ArticlesRecentsBOT_FinListeRecents)) + ArticlesRecentsBOT_FinListeRecents;
AncienModele = AncienModele.replace(debutTexte, "");
finTexte = ContenuPage.split(debutTexte).join('').split(AncienModele).join('');
var TexteFinal = debutTexte + NouvelleListeRecents + finTexte;
}else{
var TexteFinal = ArticlesRecentsBOT_ModeleDefautDebut;
TexteFinal = TexteFinal.split('$1').join(ParamPage);
TexteFinal = TexteFinal.split('$2').join(ParamCategorie);
TexteFinal = TexteFinal.split('$3').join(TailleListe);
TexteFinal = TexteFinal.split('$4').join(NouvelleListeRecents);
}
if(TexteFinal == ContenuPage){
ArticlesRecentsBOT_Update((position+1));
return;
}
var SommaireFinal = ArticlesRecentsBOT_ResumeModif.split('$1').join(mw.config.get('wgPageName').replace(/_/g," "));
if(NewRecents.length>0){
for(var r=0;r<ArticlesRecentsBOT_MaxInSummary;r++){
if(NewRecents[r]) SommaireFinal += ' ; + [[' + NewRecents[r] + ']]';
}
if(NewRecents[ArticlesRecentsBOT_MaxInSummary]) SommaireFinal += ' ; ... ';
}
document.getElementById ("wpTextbox1").value = TexteFinal ;
document.editform.wpSummary.maxlength = "400";
document.editform.wpSummary.value = SommaireFinal ;
document.editform.wpMinoredit.checked = "checked";
document.editform.wpWatchthis.checked = "checked";
if(!ArticlesRecentsBOT_UpdateAll){
var SurEtCertain = confirm('Sauvegarder la modification ?');
if(!SurEtCertain) return;
}
var EditForm = document.editform
var EditParam = new Array();
EditParam["token"] = encodeURIComponent(EditForm.wpEditToken.value);
EditParam["title"] = encodeURIComponent(ParamPage);
EditParam["watchlist"] = "nochange";
EditParam["minor"] = "1";
if(mw.config.get('wgUserGroups').indexOf("bot")!=-1) EditParam["bot"] = "";
EditParam["summary"] = encodeURIComponent(SommaireFinal);
EditParam["text"] = encodeURIComponent(TexteFinal);
var Params = new Array();
for(var Param in EditParam){
if(EditParam[Param] || EditParam[Param]=="") Params.push(Param+"="+EditParam[Param]);
}
Params = Params.join("&");
var headers = new Array();
headers['Content-Type'] = 'application/x-www-form-urlencoded';
ArticlesRecentsBOT_ajax.http({ url : mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=edit',
method : "POST", headers: headers, data: Params,
onSuccess : ArticlesRecentsBOT_EditDone,
position : position
});
}
function ArticlesRecentsBOT_EditDone(Req, data){
ArticlesRecentsBOT_Update((data.position+1));
}
// ///////////////////////////////////////////////////// RECHERCHE PAGES UTILISANT LE MODELE /////////////////////////
function ArticlesRecentsBOT_CheckNewPages(){
var listDiv = document.getElementById("ListToUpdate");
if(listDiv){
var OldPages = new Array();
var Liens = listDiv.getElementsByTagName('a');
for(var a=0;a<Liens.length;a++){
if(Liens[a].href.indexOf("javascript:")==-1){
OldPages.push(Liens[a].innerHTML);
}
}
ArticlesRecentsBOT_GetTransclusions(OldPages);
}
}
function ArticlesRecentsBOT_GetTransclusions(OldPages, ActualPages, GetContinue){
if(!ActualPages) ActualPages = new Array();
if(!GetContinue) GetContinue = "";
var APILimit = 499;
if((mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1)){
APILimit = 4999;
}
var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=embeddedin&eilimit='+APILimit+'&einamespace=0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|100|101|102|103|104|105&eititle=Modèle:Articles récents' + GetContinue;
var NouvelleRequete = sajax_init_object();
NouvelleRequete.open("GET", AdresseRequete, true);
NouvelleRequete.onreadystatechange = function() {
if(NouvelleRequete.readyState != 4) return;
var ObjetXML = NouvelleRequete.responseXML;
var Pages = ObjetXML.getElementsByTagName('ei');
for(var a=0;a<Pages.length;a++){
var ActualPage = Pages[a].getAttribute('title')
if(ActualPage.indexOf("/")!=-1) ActualPages.push(ActualPage);
}
var QueryContinue = ObjetXML.getElementsByTagName('query-continue')[0];
if(QueryContinue){
var EContinue = '&eicontinue=' + encodeURIComponent(QueryContinue.getElementsByTagName('embeddedin')[0].getAttribute('eicontinue'));
ArticlesRecentsBOT_GetTransclusions(OldPages, ActualPages, EContinue);
}else{
var NewPages = new Array();
for(var b=0;b<ActualPages.length;b++){
var Match = false;
for(var c=0;c<OldPages.length;c++){
if(OldPages[c] == ActualPages[b]) Match = true;
}
if(!Match){
var Key = ActualPages[b].replace(/.*:/, "");
NewPages.push(Key+"||"+ActualPages[b]);
}
}
if(NewPages.length == 0){
alert('Pas de nouvelles pages à mettre à jour');
return;
}
NewPages = NewPages.sort();
var Div = document.getElementById("ListToUpdate_CheckNewPages");
if(Div){
var List = document.createElement('ol');
for(var i=0;i<NewPages.length;i++){
var PageTitle = NewPages[i].split("||")[1];
var Li = document.createElement('li');
var A = document.createElement('a');
A.href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join(PageTitle);
A.title = PageTitle
A.appendChild(document.createTextNode(PageTitle));
Li.appendChild(document.createTextNode("# [["));
Li.appendChild(A);
Li.appendChild(document.createTextNode("]]"));
List.appendChild(Li);
}
Div.appendChild(List);
}else{
alert('Nouvelles pages :\n\n' + NewPages.join('\n') );
}
}
}
NouvelleRequete.send(null);
}
// ############################################################################################################
//</nowiki></pre></source>((Boîte déroulante fin))
Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.