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
{{Boîte déroulante début|titre=Articles Manquants et Liens Rouges}}<!--
*/
// --><source lang=javascript>
// Adresses API
// Liste des pages
// wgServer + '/w/api.php?action=query&list=categorymembers&cmlimit='+APILimit+'&cmtitle=' + CATEGORIE + '&cmcontinue='
// Liste des liens
// wgServer+'/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_Adresse = wgServer + wgScript + "?title=";
if( (wgAction!="edit")&&(wgAction!="submit") ){
addOnloadHook(WantedPages_MakeLinks);
}
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">';
// recherche des modèles de la page et ajout des liens de mise à jour
var WantedPagesAnalysisDivCount = 0;
function WantedPages_MakeLinks(){
var Cadres = document.getElementsByTagName('div');
for(s=0;s<Cadres.length;s++){
if( hasClass(Cadres[s], 'categoryWantedPages') ){
WantedPagesAnalysisDivCount++
Cadres[s].id = 'WantedPages_'+WantedPagesAnalysisDivCount;
var ParamCategorie = Cadres[s].firstChild.innerHTML;
var ParamPage = Cadres[s].firstChild.title;
var NewButton = '<a id="WantedPagesLink_'+WantedPagesAnalysisDivCount+'" href="javascript:WantedPages_GetParams('+WantedPagesAnalysisDivCount+ ');" title="Catégorie ' + ParamCategorie.replace(/Catégorie:/ig,'') + ' - Page '+ParamPage+'" >'+WantedPages_StartButton+'</a>' ;
Cadres[s].innerHTML += NewButton ;
}
}
}
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 Pop = 'Catégorie à vérifier :\n'
+ '* '+ParamCategorie+'\n\n'
+ 'Page à mettre à jour :\n'
+ '* '+ParamPage+'\n\n'
+ 'Continuer ?';
var SurEtCertain = confirm(Pop);
if(SurEtCertain){
Modele.innerHTML += '<br /><span id="WorkingFunction" ></span><br /><span id="WorkingPage" ></span>';
WantedPages_CheckCategory(ParamPage, 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(ParamPage, ParamCategorie, ParamContinue, PageList){
if(!PageList) PageList = new Array();
if(!ParamContinue) ParamContinue='';
if( (wgUserGroups.indexOf("sysop")!=-1)||(wgUserGroups.indexOf("bot")!=-1) ){
var APILimit=4999;
}else{
var APILimit=499;
}
document.getElementById('WorkingFunction').innerHTML = "Listage des pages";
document.getElementById('WorkingPage').innerHTML = ParamCategorie;
var NouvelleRequete = sajax_init_object()
var AdresseRequete = wgServer + '/w/api.php?action=query&list=categorymembers&cmlimit='+APILimit+'&cmtitle=' + ParamCategorie.replace(/&/g,"%26") + '&cmcontinue=' + ParamContinue;
NouvelleRequete.open("GET", AdresseRequete, true);
NouvelleRequete.onreadystatechange = function() {
if(NouvelleRequete.readyState != 4 || NouvelleRequete.status != 200) return;
var ElementTraitement = document.createElement('div');
ElementTraitement.innerHTML = NouvelleRequete.responseText;
var Informations = ElementTraitement.getElementsByTagName('span');
var AutreRequeteNecessaire = false;
for(a=0;a<Informations.length;a++){
var ContenuInformation = Informations[a].innerHTML;
if(ContenuInformation.indexOf('ns="0"')!=-1){
var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
TitrePage = WantedPages_Clean(TitrePage);
PageList.push(TitrePage);
}
if(ContenuInformation.indexOf('cmcontinue=')!=-1){
AutreRequeteNecessaire = true;
var AutreRequeteContinue = ContenuInformation.split('cmcontinue="')[1].split('"')[0];
AutreRequeteContinue = WantedPages_Clean(AutreRequeteContinue);
}
}
if(AutreRequeteNecessaire==true){
WantedPages_CheckCategory(ParamPage, ParamCategorie, AutreRequeteContinue, PageList);
}else{
WantedPages_GetLinks(0, ParamPage, ParamCategorie, PageList);
}
}
NouvelleRequete.send(null);
}
// ///////////////////////////////////////////////////// REQUÊTE LIENS DE CHAQUE PAGE /////////////////////////
function WantedPages_GetLinks(position, ParamPage, ParamCategorie, PageList, RedLinkTable, PageLinkTable){
if(!RedLinkTable) RedLinkTable = new Array();
if(!PageLinkTable) PageLinkTable = new Array();
var Page = PageList[position];
//alert(position + ' - ' + Page);
if(!Page){
WantedPages_SortLinks(ParamPage, ParamCategorie, RedLinkTable, PageLinkTable);
return;
}
document.getElementById('WorkingFunction').innerHTML = "Listage des liens";
document.getElementById('WorkingPage').innerHTML = Page;
var NouvelleRequete = sajax_init_object()
var AdresseRequete = wgServer+wgScript+'?title='+Page.replace(/&/g,"%26")+'&action=render';
NouvelleRequete.open("GET", AdresseRequete, true);
NouvelleRequete.onreadystatechange = function() {
if(NouvelleRequete.readyState != 4 || NouvelleRequete.status != 200) return;
var ElementTraitement = document.createElement('div');
//ElementTraitement.style.display = "none";
ElementTraitement.innerHTML = NouvelleRequete.responseText;
//document.body.appendChild(ElementTraitement);
var Liens = ElementTraitement.getElementsByTagName('a');
var RedLinkCount = 0;
var LinkCount = 0;
for(var a=0;a<Liens.length;a++){
var Lien = Liens[a];
var Cible = Lien.title;
var Href = Lien.href;
if((hasClass(Lien, "external"))||(Href.indexOf('#')!=-1)||(Href.indexOf('javascript:')!=-1)) continue;
LinkCount++
if((hasClass(Lien, "new")&&(Cible.indexOf('(page inexistante)')!=-1)&&(Href.indexOf('&redlink=1')!=-1))){
RedLinkCount++
Cible = Cible.replace(/ \(page.*/g, "")
var RedLinkLigne = '$1$2|-\n'
+ '| [[Special:Whatlinkshere/'+Cible+'|$1 occurrences]]\n'
+ '| [['+Cible+']]\n'
RedLinkTable.push(RedLinkLigne);
}
}
var Avancement = Math.round( ( (LinkCount-RedLinkCount) / LinkCount ) * 100 );
var zeroAvancement = "";
if(Avancement<10) zeroAvancement += "0";
if(Avancement<100) zeroAvancement += "0";
var PageLinkLigne = '|-\n'
+ '| [['+Page+']]\n'
+ '| align="right" | '+RedLinkCount+'\n'
+ '| align="right" | '+LinkCount+'\n'
+ '| {{Avancement|'+ Avancement+'|||||'+zeroAvancement+Avancement+'%}}\n'
PageLinkTable[position] =PageLinkLigne;
//alert(PageLinkTable[position]);
WantedPages_GetLinks((position+1), ParamPage, ParamCategorie, PageList, RedLinkTable, PageLinkTable);
}
NouvelleRequete.send(null);
}
// ///////////////////////////////////////////////////// TRI DES LIENS /////////////////////////
function WantedPages_SortLinks(ParamPage, ParamCategorie, RedLinkTable, 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 = -1;
for(var a=0;a<TempLinkList.length;a++){
if(TempLinkList[a]!=TempLinkList[(a+1)]){
index++
NewRedLinkTable[index] = TempLinkList[a];
NewRedLinkTableCount[index] = 1 ;
}else{
NewRedLinkTableCount[index] = (NewRedLinkTableCount[index]+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){
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];
}
WantedPages_Edit(ParamPage, ParamCategorie, NewRedLinkTable, PageLinkTable);
}
// ///////////////////////////////////////////////////// ÉDITION /////////////////////////
function WantedPages_Edit(ParamPage, ParamCategorie, NewRedLinkTable, PageLinkTable){
var ajaxRequest = sajax_init_object();
var AdresseRequete = WantedPages_Adresse + ParamPage.replace(/&/g, "%26") + '&action=edit';
ajaxRequest.open("GET", AdresseRequete, true);
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState != 4 || ajaxRequest.status != 200) return;
while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
document.body.innerHTML = ajaxRequest.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.getYear();
if (Annee < 2000){
Annee = Annee + 1900;
}
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 = 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=(PageLinkTable.length-1);a>-1;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);
var SurEtCertain = confirm('Sauvegarder la modification ?');
if(SurEtCertain) document.editform.submit();
}
ajaxRequest.send(null);
}
// ///////////////////////////////////////////////////// NETTOYAGE REQUÊTES API /////////////////////////
function WantedPages_Clean(text){
while(text.indexOf('&')!=-1){
text = text.split('&').join("&");
if(text.indexOf('&')==-1) break;
}
while(text.indexOf(''')!=-1){
text = text.split(''').join("'");
if(text.indexOf(''')==-1) break;
}
while(text.indexOf('"')!=-1){
text = text.split('"').join('"');
if(text.indexOf('"')==-1) break;
}
while(text.indexOf(' ')!=-1){
text = text.split(' ').join(' ');
if(text.indexOf(' ')==-1) break;
}
return text;
}
//</source>{{Boîte déroulante fin}}