MediaWiki:Gadget-ArticlesManquants.js
Apparence
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./*
== Code JavaScript ==
* Licence : Domaine public
{{Catégorisation JS|ArticlesManquants}}
{{Boîte déroulante/début|titre=Articles Manquants et Liens Rouges}}<!--
*/
// --><source lang=javascript>
// Adresses API
// Liste des pages
// '/w/api.php?action=query&list=categorymembers&cmlimit='+APILimit+'&cmtitle=' + CATEGORIE + '&cmcontinue='
// Liste des liens
// '/w/api.php?action=query&prop=links&titles='+PAGE+'&plnamespace=0&pllimit='+APILimit+'&plcontinue='
var WantedPages_ModeleDefautDebut = '{{Articles manquants\n'
+ '|pageportail=$1\n'
+ '|catégorie=$2\n'
+ '|hauteur=\n'
+ '|intro=\n'
+ '}}\n'
var WantedPages_ModeleDefautFin = '{{Articles manquants fin}}\n';
var WantedPages_ResumeModif = 'Mise à jour du modèle {{Articles manquants}} ([[:$1]]).';
var RedPages_DebutModele = '<!-- Ce tableau est créé automatiquement par un robot. Pages Rouges DEBUT -->\n';
var RedPages_FinModele = '<!-- Ce tableau est créé automatiquement par un robot. Pages Rouges FIN -->\n'
var WantedPages_DebutModele = '<!-- Ce tableau est créé automatiquement par un robot. Articles Manquants DEBUT -->\n';
var WantedPages_FinModele = '<!-- Ce tableau est créé automatiquement par un robot. Articles Manquants FIN -->\n'
var WantedPages_DebutTableauTriable = '{| class="wikitable centre sortable" width="100%"\n'
var WantedPages_DebutTableauTriable2 = '{| class="wikitable centre sortable"\n'
var WantedPages_Minimum = 10;
var WantedPages_CreateRecapTable = true;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var WantedPages_Adresse = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=";
var WantedPages_StartButton = '<img height="50" width="50" src="/media/wikipedia/commons/thumb/4/4a/Crystal_Clear_action_exit.svg/50px-Crystal_Clear_action_exit.svg.png" alt="Lancer la mise à jour">';
var WantedPages_WorkingButton = '<img height="50" width="50" src="/media/wikipedia/commons/d/de/Ajax-loader.gif" alt="Mise à jour en cours">';
var WantedPages_SavedArgs = false;
var WantedPages_TimeoutArgs = false;
// ///////////////////////////////////////////////////// FONCTION DE REQUÊTE ///////////////
var WantedPages_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)
WantedPages_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 { }
}
};
// ///////////////////////////////////////////////////// recherche des modèles de la page et ajout des liens de mise à jour
function WantedPages_MakeLinks(){
var count=-1;
var Cadres = document.getElementsByTagName('div');
for(s=0;s<Cadres.length;s++){
if( $(Cadres[s]).hasClass('categoryWantedPages')){
count++
Cadres[s].id = 'WantedPages_'+count;
var ParamCategorie = Cadres[s].firstChild.innerHTML;
var ParamPage = Cadres[s].firstChild.title;
var NewButton = '<a id="WantedPagesLink_'+count+'" href="javascript:WantedPages_GetParams('+count+ ');" title="Catégorie ' + ParamCategorie.replace(/Catégorie:/ig,'') + ' - Page '+ParamPage+'" >'+WantedPages_StartButton+'</a>' ;
Cadres[s].innerHTML += NewButton ;
}
}
}
if((mw.config.get('wgAction')!="edit")&&(mw.config.get('wgAction')!="submit")){ $(WantedPages_MakeLinks); }
function WantedPages_GetParams(ID){
var Modele = document.getElementById('WantedPages_'+ID);
if(!Modele) return;
var Cadre = Modele.firstChild;
if(!Cadre) return;
var ParamCategorie = Cadre.innerHTML;
var ParamPage = Cadre.title;
var Pop1 = 'Limite basse du nombre d\'occurrences :\n'
var Minimum = prompt(Pop1, WantedPages_Minimum);
if(Minimum){
if(Minimum!=''){
Minimum = parseInt(Minimum);
if(Minimum!="NaN") WantedPages_Minimum = Minimum;
}
}
WantedPages_CreateRecapTable = confirm('Générer le tableau récapitulatif ?');
var Pop2 = 'Catégorie à vérifier :\n'
+ '* '+ParamCategorie+'\n\n'
+ 'Page à mettre à jour :\n'
+ '* '+ParamPage+'\n\n'
+ 'Minimum :\n'
+ '* '+WantedPages_Minimum+'\n\n'
+ 'Tableau récapitulatif :\n'
+ '* '+(WantedPages_CreateRecapTable ? 'oui' : 'non')+'\n\n'
+ 'Continuer ?';
var SurEtCertain = confirm(Pop2);
if(SurEtCertain){
Modele.innerHTML += '<br /><span id="WorkingFunction" ></span><br /><span id="WorkingPage" ></span>';
WantedPages_CheckCategory({paramPage:ParamPage, paramCategory:ParamCategorie});
var Lien = document.getElementById('WantedPagesLink_'+ID)
if(Lien){
Lien.innerHTML = WantedPages_WorkingButton ;
Lien.title = "Arrêter la mise à jour" ;
Lien.href = "javascript:window.location.reload();";
Lien.blur();
}
}
}
// ///////////////////////////////////////////////////// REQUÊTE PAGES DE LA CATÉGORIE /////////////////////////
function WantedPages_CheckCategory(Args){
if(!Args.PageList) Args.PageList = new Array();
if(!Args.ParamContinue) Args.ParamContinue='';
if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
var APILimit=8999;
}else{
var APILimit=999;
}
document.getElementById('WorkingFunction').innerHTML = "Listage des pages";
document.getElementById('WorkingPage').innerHTML = Args.paramCategory+ ' ' + Args.ParamContinue;
var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=categorymembers&cmlimit='+APILimit
+ '&cmtitle=' + encodeURIComponent(Args.paramCategory)
+ Args.ParamContinue
WantedPages_ajax.http({ url: URL,
onSuccess: WantedPages_CheckCategoryDone,
args:Args
});
}
function WantedPages_CheckCategoryDone(Req, data){
var Args = data.args;
var ObjetXML = Req.responseXML;
var Pages = ObjetXML.getElementsByTagName('cm');
for(a=0;a<Pages.length;a++){
var TitrePage = Pages[a].getAttribute('title').split(mw.config.get('wgFormattedNamespaces')[1]+":").join("");
var NS = Pages[a].getAttribute('ns');
if((NS==="0" ||NS =="1") && Args.PageList.indexOf(TitrePage)==-1){
Args.PageList.push(TitrePage);
}
}
var AutreRequeteNecessaire = ObjetXML.getElementsByTagName('query-continue')[0];
if(AutreRequeteNecessaire){
Args.ParamContinue = '&cmcontinue=' + encodeURIComponent(AutreRequeteNecessaire.firstChild.getAttribute('cmcontinue'));
WantedPages_CheckCategory(Args);
}else{
WantedPages_GetLinks(Args);
}
}
// ///////////////////////////////////////////////////// REQUÊTE LIENS DE CHAQUE PAGE /////////////////////////
function WantedPages_GetSavedLinks(){
WantedPages_GetLinks(WantedPages_SavedArgs);
}
function WantedPages_GetLinks(Args){
if(!Args.position) Args.position = 0;
if(!Args.RedLinkTable) Args.RedLinkTable = new Array();
if(!Args.RedLinks) Args.RedLinks = 0;
if(!Args.PageLinkTable) Args.PageLinkTable = new Array();
if(!Args.TotalLinks) Args.TotalLinks = 0;
if(!Args.ParamContinue) Args.ParamContinue = '';
WantedPages_SavedArgs = Args;
var Page = Args.PageList[Args.position];
if(!Page){
WantedPages_SortLinks(Args);
return;
}
if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
var APILimit=8999;
}else{
var APILimit=599;
}
var AdresseRequete = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?format=xml&action=query&generator=links&titles='+encodeURIComponent(Page)+'&prop=info&gpllimit='+APILimit+'&gplnamespace=0'+Args.ParamContinue;
document.getElementById('WorkingFunction').innerHTML = "Listage des liens";
document.getElementById('WorkingPage').innerHTML = Page;
WantedPages_ajax.http({ url: AdresseRequete,
onSuccess: WantedPages_GetLinksDone,
args:Args
});
WantedPages_TimeoutArgs = setTimeout("WantedPages_GetSavedLinks()", 10*1000);
}
var Test = "";
function WantedPages_GetLinksDone(Req, data){
clearTimeout(WantedPages_TimeoutArgs);
var Args = data.args;
var ObjetXML = Req.responseXML;
var Links = ObjetXML.getElementsByTagName('page');
for(a=0;a<Links.length;a++){
var TitrePage = Links[a].getAttribute('title');
var NS = Links[a].getAttribute('ns');
if(NS!=0 && NS!="0") continue;
if(TitrePage.indexOf("Modèle discussion:")!=-1) continue;
if(TitrePage.indexOf(")")!=-1 && TitrePage.indexOf("(")==-1) continue;
Args.TotalLinks++
var Missing = Links[a].getAttribute('missing');
if(Missing!=null && Args.PageList.indexOf(""+TitrePage)==-1){
Test += "* "+Args.PageList[Args.position]+" : "+TitrePage+"\n"
Args.RedLinks++
var RedLinkLigne = '$1$2|-\n'
+ '| [[Special:Whatlinkshere/'+TitrePage+'|$1 occurrences]]\n'
+ '| [['+TitrePage+']]\n'
Args.RedLinkTable.push(RedLinkLigne);
}
}
var AutreRequeteNecessaire = ObjetXML.getElementsByTagName('query-continue')[0];
if(AutreRequeteNecessaire){
Args.ParamContinue = '&gplcontinue=' + encodeURIComponent(AutreRequeteNecessaire.getElementsByTagName('links')[0].getAttribute('gplcontinue'));
WantedPages_GetLinks(Args);
}else{
var Avancement = Math.round( ( (Args.TotalLinks-Args.RedLinks) / Args.TotalLinks ) * 100 );
var zeroAvancement = "";
if(Avancement<10) zeroAvancement += "0";
if(Avancement<100) zeroAvancement += "0";
var PageLinkLigne = '|-\n'
+ '| [['+Args.PageList[Args.position]+']]\n'
+ '| align="right" | '+Args.RedLinks+'\n'
+ '| align="right" | '+Args.TotalLinks+'\n'
+ '| {{Avancement|'+ Avancement+'|||||'+zeroAvancement+Avancement+'%}}\n'
Args.PageLinkTable[Args.position] = PageLinkLigne;
Args.position++
Args.TotalLinks = 0;
Args.RedLinks = 0;
Args.ParamContinue = "";
WantedPages_GetLinks(Args);
}
}
// ///////////////////////////////////////////////////// TRI DES LIENS /////////////////////////
function WantedPages_SortLinks(Args){
var ParamPage = Args.paramPage;
var ParamCategorie = Args.paramCategory
var RedLinkTable = Args.RedLinkTable;
var PageLinkTable = Args.PageLinkTable;
document.getElementById('WorkingFunction').innerHTML = "Triage des liens";
document.getElementById('WorkingPage').innerHTML = '';
var TempLinkList = RedLinkTable.sort();
var NewRedLinkTable = new Array();
var NewRedLinkTableCount = new Array();
var index = 0;
var NbLiens = 1;
for(var a=0;a<TempLinkList.length;a++){
if(TempLinkList[a]==TempLinkList[(a+1)]){
NbLiens++
}else{
NewRedLinkTable[index] = TempLinkList[a];
NewRedLinkTableCount[index] = NbLiens;
index++
NbLiens = 1;
}
}
for(var a=0;a<NewRedLinkTable.length;a++){
var Occurrences = NewRedLinkTableCount[a];
var ZeroOccurrences = "";
if(Occurrences<10) ZeroOccurrences +="0";
if(Occurrences<100) ZeroOccurrences +="0";
if(Occurrences<1000) ZeroOccurrences +="0";
if(Occurrences>(WantedPages_Minimum-1)){
NewRedLinkTable[a] = NewRedLinkTable[a].split('$1').join(ZeroOccurrences + Occurrences);
}else{
NewRedLinkTable[a] = false;
}
}
NewRedLinkTable = NewRedLinkTable.sort();
for(var a=0;a<NewRedLinkTable.length;a++){
if(NewRedLinkTable[a]) NewRedLinkTable[a] = NewRedLinkTable[a].split('$2')[1];
}
var NewArgs = {paramPage:ParamPage, paramCategorie:ParamCategorie, paramRedLinkTable:NewRedLinkTable, paramPageLinkTable:PageLinkTable}
var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(ParamPage) + '&action=edit';
WantedPages_ajax.http({ url: AdresseRequete,
onSuccess: WantedPages_Edit,
args:NewArgs
});
}
// ///////////////////////////////////////////////////// ÉDITION /////////////////////////
function WantedPages_Edit(Req, data){
var Args = data.args;
var ParamPage = Args.paramPage;
var ParamCategorie = Args.paramCategorie;
var NewRedLinkTable = Args.paramRedLinkTable;
var PageLinkTable = Args.paramPageLinkTable;
while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
document.body.innerHTML = Req.responseText;
var Aujourdhui = new Date();
var Minutes = Aujourdhui.getMinutes()
if(Minutes<10){ var ZeroMinutes = "0" ; }else{ var ZeroMinutes = "";}
var Heures = Aujourdhui.getHours()
if(Heures<10){ var ZeroHeures = "0" ; }else{ var ZeroHeures = "";}
var Jour = Aujourdhui.getDate();
if(Jour<10){ var ZeroJour = "0" ; }else{ var ZeroJour = "";}
var Mois = Aujourdhui.getMonth() + 1;
if(Mois<10){ var ZeroMois = "0" ; }else{ var ZeroMois = "";}
var Annee = Aujourdhui.getFullYear();
var TitreHaut = '\'\'Tableau [[Modèle:Articles manquants/Documentation|mis à jour]] le ' + ZeroJour + Jour + '/' + ZeroMois + Mois + '/' + Annee + ' à ' + ZeroHeures + Heures + ':' + ZeroMinutes + Minutes + '\'\'\n';
var TableauTriable = WantedPages_DebutTableauTriable
+ '|+ ' + TitreHaut
+ '|-\n'
+ '! align="center" | Occurences\n'
+ '! align="center" | Page\n';
// ---------------- Classement pages demandées ----------------
for(a=(NewRedLinkTable.length-1);a>-1;a--){
if(NewRedLinkTable[a]) TableauTriable += NewRedLinkTable[a];
}
TableauTriable += '|}\n';
var TableauComplet = WantedPages_DebutModele+TableauTriable+WantedPages_FinModele;
var TableauTriableRedPages = ''
if(WantedPages_CreateRecapTable){
TableauTriableRedPages += WantedPages_DebutTableauTriable2
+ '|+ ' + TitreHaut
+ '|-\n'
+ '! align="center" width="40%" | Page\n'
+ '! align="center" width="20%" | Liens rouges\n'
+ '! align="center" width="20%" | Total liens\n'
+ '! align="center" width="20%" | Avancement\n';
for(a=0;a<PageLinkTable.length;a++){
TableauTriableRedPages += PageLinkTable[a];
}
TableauTriableRedPages += '|}\n';
}
var TableauCompletRedPages = RedPages_DebutModele+TableauTriableRedPages +RedPages_FinModele;
WantedPages_ModeleDefautDebut = WantedPages_ModeleDefautDebut.split('$1').join(ParamPage);
WantedPages_ModeleDefautDebut= WantedPages_ModeleDefautDebut.split('$2').join(ParamCategorie);
//alert(WantedPages_ModeleDefautDebut);
var ContenuPage = document.getElementById("wpTextbox1").value;
var AncienResumeModif = document.editform.wpSummary.value;
if( (ContenuPage.indexOf(WantedPages_DebutModele)!=-1)&&(ContenuPage.indexOf(WantedPages_FinModele)!=-1) ){
// ----------------- Déja le modèle : remplacement tableau
debutTexte = ContenuPage.substring(0, ContenuPage.indexOf(WantedPages_DebutModele));
AncienModele = ContenuPage.substring(0, ContenuPage.indexOf(WantedPages_FinModele)) + WantedPages_FinModele;
AncienModele = AncienModele.replace(debutTexte, "");
finTexte = ContenuPage.split(debutTexte).join('').split(AncienModele).join('');
var TexteFinal = debutTexte + TableauComplet + finTexte;
}else{
// ------------------------------------------------Pas de modèle : ajout modèle + tableau
var TexteFinal = WantedPages_ModeleDefautDebut + TableauComplet + WantedPages_ModeleDefautFin + ContenuPage;
}
if( (TexteFinal.indexOf(RedPages_DebutModele)!=-1)&&(TexteFinal.indexOf(RedPages_FinModele)!=-1) ){
// ----------------- Déja le modèle : remplacement tableau
var newdebutTexte = TexteFinal.substring(0, TexteFinal.indexOf(RedPages_DebutModele));
var newAncienModele = TexteFinal.substring(0, TexteFinal.indexOf(RedPages_FinModele)) + RedPages_FinModele;
newAncienModele = newAncienModele.replace(newdebutTexte, "");
var newfinTexte = TexteFinal.split(newdebutTexte).join('').split(newAncienModele).join('');
TexteFinal = newdebutTexte + TableauCompletRedPages + newfinTexte;
}else{
// ------------------------------------------------Pas de modèle : ajout modèle + tableau
var TexteFinal = WantedPages_ModeleDefautDebut + TableauCompletRedPages + WantedPages_ModeleDefautFin + TexteFinal;
}
document.getElementById ("wpTextbox1").value = TexteFinal ;
document.editform.wpSummary.value = AncienResumeModif + WantedPages_ResumeModif.split('$1').join(ParamCategorie);
document.editform.submit();
}
//</source>{{Boîte déroulante/fin}}