Modèle:Images utilisées
Fonctions
modifierCe modèle est destiné à créer un tableau triable à partir des pages d'une catégorie (typiquement Portail:TRUC/Articles liés, mais cela peut être n'importe quelle catégorie). Le tableau est inséré entre les modèles {{Images utilisées}} et {{Images utilisées fin}} dans un cadre défilant à la hauteur paramétrable pour faciliter l'inclusion dans un cadre de portail ou de projet.
Un code javascript permet de mettre à jour le tableau de façon automatisée.
Paramètres
modifier- {{{pageportail}}} : Titre de la page à mettre à jour par le script (obligatoire)
- {{{catégorie}}} : catégorie à checker ( catégorie:Portail:TRUC/Articles liés ) (obligatoire)
- {{{defilant}}} : mettre « non » pour annuler le cadre défilant (facultatif).
- {{{hauteur}}} : hauteur du cadre défilant créé, en pixels (facultatif : 250px par défaut)
Exemples
modifierL'exemple ci-dessous est celui d'un modèle avec comme instructions pour le script de vérifier la catégorie Catégorie:Portail:Colombie/Articles liés, d'extraire les images de chaque page, puis de créer et d'apposer (ou mettre à jour) un tableau triable sur la page Projet:Colombie/Suivi/Images utilisées. Le tableau sera inséré entre les balises de commentaires.
{{Images utilisées |pageportail=Projet:Colombie/Suivi/Images utilisées |catégorie=Catégorie:Portail:Colombie/Articles liés |defilant=oui |hauteur=300 }} <!-- Ce tableau est créé automatiquement par un robot. Images Utilisées DEBUT --> <!-- Ce tableau est créé automatiquement par un robot. Images Utilisées FIN --> {{Images utilisées fin}}
Il est tout à fait possible de créer ces tableaux sans forcément ajouter le modèle (et le cadre défilant qui va avec) dans la page à modifier, mais il reste nécessaire d'ajouter le modèle correctement paramétré sur une page quelconque pour avoir accès au lien de mise à jour. En d'autres termes, le modèle et le tableau créé sont parfaitement dissociables. Par contre, les commentaires sont importants car ce sont eux que le script recherche pour détecter le début et la fin du tableau lors de sa mise à jour. S'il ne les trouve pas, le script ajoutera le tableau et le modèle (pour la mise à jour) au début de la page.
Mise à jour
modifierLa mise à jour se fait à l'aide d'un code javascript dont le fonctionnement s'apparente à celui d'un bot. Il est à copier dans sa page monobook.js (ou autre suivant l'habillage choisi) .
L'utilisation du script permet l'affichage d'un lien au-dessus du tableau qui lance le processus de mise à jour.
Remarques
modifier- À tout moment, un gros bouton rouge permet de recharger la page et ainsi d'arrêter le processus de mise à jour.
- Lors de l'analyse de la catégorie, s'il y a plusieurs pages à analyser, ou si une page est longue et contient beaucoup d'images à vérifier, il peut arriver que le navigateur détecte un script qui ne répond plus, il faut alors lui préciser de le laisser continuer.
- Script testé avec Firefox uniquement.
- Script indifférent à l'habillage utilisé
Voir aussi
modifier- {{Articles récents}}
- {{Articles manquants}}
- {{Maintenance de catégorie}}
- {{Vérification évaluation}}
- {{Page au hasard}}
/*
Code JavaScript
modifier- Durée : environ 10 minutes pour 600 pages []
var UsedImages_ModeleDefautDebut = '{{Images utilisées\n'
+ '|pageportail=$1\n'
+ '|catégorie=$2\n'
+ '|defilant=oui\n'
+ '|hauteur=800\n'
+ '}}\n'
var UsedImages_ModeleDefautFin = '{{Images utilisées fin}}\n';
var UsedImages_ResumeModif = 'Mise à jour du modèle {{Images utilisées}}';
var UsedImages_DebutModele = '<!-- Ce tableau est créé automatiquement par un robot. Images Utilisées DEBUT -->\n';
var UsedImages_FinModele = '<!-- Ce tableau est créé automatiquement par un robot. Images Utilisées FIN -->\n'
var UsedImages_Minimum = 1;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* ************************************************************************************************************************************
Lancement
*/
if( (mw.config.get('wgAction')!="edit")&&(mw.config.get('wgAction')!="submit") ){
addOnloadHook(UsedImages_makeUpdateLinks);
}
/* ************************************************************************************************************************************
1- recherche des modèles {{Maintenance de catégorie}} de la page courante
2- ajout des liens de mise à jour
*/
var UsedImages_StartButton = '<img height="50" width="50" src="http://up.wiki.x.io/wikipedia/commons/thumb/4/4a/Crystal_Clear_action_exit.svg/50px-Crystal_Clear_action_exit.svg.png" alt="Lancer la mise à jour">';
var UsedImages_WorkingButton = '<img height="50" width="50" src="http://up.wiki.x.io/wikipedia/commons/d/de/Ajax-loader.gif" alt="Mise à jour en cours">';
function UsedImages_makeUpdateLinks(){
var count=-1;
var Cadres = document.getElementsByTagName('div');
for(s=0;s<Cadres.length;s++){
if( $(Cadres[s]).hasClass('categoryUsedImages') ){
count++
Cadres[s].id = 'categoryUsedImages_'+count;
var ParamCategorie = Cadres[s].firstChild.innerHTML;
var ParamPage = Cadres[s].firstChild.title;
var NewButton = '<a id="categoryUsedImagesLink_'+count+'" href="javascript:UsedImages_GetParams('+count+');" title="Cliquer pour mettre à jour l\'analyse de la catégorie ' + ParamCategorie + ' sur la page '+ParamPage+'" >'+UsedImages_StartButton+'</a>' ;
Cadres[s].innerHTML += NewButton ;
}
}
}
function UsedImages_GetParams(index){
var Modele = document.getElementById('categoryUsedImages_'+index);
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, UsedImages_Minimum);
if(Minimum){
if(Minimum!=''){
Minimum = parseInt(Minimum);
if(Minimum!="NaN") UsedImages_Minimum = Minimum;
}
}
var Pop = 'Catégorie à vérifier :\n'
+ '* '+ParamCategorie+'\n\n'
+ 'Page à mettre à jour :\n'
+ '* '+ParamPage+'\n\n'
+ 'Minimum :\n'
+ '* '+UsedImages_Minimum+'\n\n'
+ 'Continuer ?';
var SurEtCertain = confirm(Pop);
if(SurEtCertain){
Modele.innerHTML += '<br /><span id="WorkingFunction" ></span><br /><span id="WorkingPage" ></span>';
UsedImages_CheckCategory(ParamPage, ParamCategorie);
var Lien = document.getElementById('categoryUsedImagesLink_'+index)
if(Lien){
Lien.innerHTML = UsedImages_WorkingButton ;
Lien.title = "Arrêter la mise à jour" ;
Lien.href = "javascript:window.location.reload();";
Lien.blur();
}
}
}
// ///////////////////////////////////////////////////// REQUÊTE PAGES DE LA CATÉGORIE /////////////////////////
function UsedImages_CheckCategory(ParamPage, ParamCategorie, PageList, ParamContinue){
if(!PageList) PageList = new Array();
if(!ParamContinue) ParamContinue='';
if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('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 = new XMLHttpRequest()
var AdresseRequete = mw.config.get('wgServer') + '/w/api.php?action=query&list=categorymembers&cmlimit='+APILimit+'&cmtitle=' + ParamCategorie.replace(/&/g,"%26") + '&cmcontinue=' + ParamContinue;
//alert(AdresseRequete);
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)||(ContenuInformation.indexOf('ns="1"')!=-1)){
var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
TitrePage = UsedImages_Clean(TitrePage);
PageList.push(TitrePage);
}
if(ContenuInformation.indexOf('cmcontinue=')!=-1){
AutreRequeteNecessaire = true;
var AutreRequeteContinue = ContenuInformation.split('cmcontinue="')[1].split('"')[0];
AutreRequeteContinue = UsedImages_Clean(AutreRequeteContinue);
}
}
if(AutreRequeteNecessaire==true){
UsedImages_CheckCategory(ParamPage, ParamCategorie, PageList, AutreRequeteContinue);
}else{
UsedImages_CheckPage(0, ParamPage, ParamCategorie, PageList);
}
}
NouvelleRequete.send(null);
}
function UsedImages_CheckPage(position, ParamPage, ParamCategorie, PageList, ImageList, imContinue){
if(!ImageList) ImageList = new Array();
if(!imContinue) imContinue='';
var Page = PageList[position];
if(!Page){
UsedImages_SortImages(ParamPage, ParamCategorie, ImageList);
return;
}
if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
var APILimit=4999;
}else{
var APILimit=499;
}
document.getElementById('WorkingFunction').innerHTML = "Listage des images";
document.getElementById('WorkingPage').innerHTML = Page;
var AdresseRequete = mw.config.get('wgServer') + '/w/api.php?action=query&prop=images&titles='+Page.replace(/&/g, "%26")+'&imlimit='+APILimit+imContinue;
var NouvelleRequete = new XMLHttpRequest()
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="6"')!=-1){
var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
TitrePage = UsedImages_Clean(TitrePage);
ImageList.push(TitrePage);
}
if(ContenuInformation.indexOf('imcontinue=')!=-1){
AutreRequeteNecessaire = true;
var AutreRequeteContinue = '&imcontinue=' + ContenuInformation.split('imcontinue="')[1].split('"')[0];
AutreRequeteContinue = UsedImages_Clean(AutreRequeteContinue);
}
}
if(AutreRequeteNecessaire==true){
UsedImages_CheckPage(position, ParamPage, ParamCategorie, PageList, ImageList, AutreRequeteContinue);
}else{
UsedImages_CheckPage((position+1), ParamPage, ParamCategorie, PageList, ImageList);
}
}
NouvelleRequete.send(null);
}
function UsedImages_SortImages(ParamPage, ParamCategorie, ImageList){
document.getElementById('WorkingFunction').innerHTML = "Tri des images";
document.getElementById('WorkingPage').innerHTML = '';
ImageList = ImageList.sort();
var SortedImageList = new Array();
var SortedImageListCount = new Array();
var index = 0;
var NbLiens = 1;
for(var a=0;a<ImageList.length;a++){
if(ImageList[a]==ImageList[(a+1)]){
NbLiens++
}else{
SortedImageList[index] = ImageList[a];
SortedImageListCount[index] = NbLiens;
index++
NbLiens = 1;
}
}
var StandardLine = '$2$5$1|[[Special:Whatlinkshere/$1|$3 occurrence$4]]\n';
var TableLines = new Array();
for(var b=0;b<SortedImageList.length;b++){
if(SortedImageListCount[b]>(UsedImages_Minimum-1)){
var pluriel = '';
if(SortedImageListCount[b]>1) pluriel = 's';
var Occurrences = SortedImageListCount[b];
var ZeroOccurrences = "";
if(Occurrences<10) ZeroOccurrences +="0";
if(Occurrences<100) ZeroOccurrences +="0";
if(Occurrences<1000) ZeroOccurrences +="0";
var NewLine = StandardLine
NewLine = NewLine.split('$1').join(SortedImageList[b]);
NewLine = NewLine.split('$2').join(ZeroOccurrences+Occurrences);
NewLine = NewLine.split('$3').join(Occurrences);
NewLine = NewLine.split('$4').join(pluriel);
TableLines.push(NewLine);
}
}
TableLines = TableLines.sort();
for(var c=0;c<TableLines.length;c++){
TableLines[c] = TableLines[c].split('$5')[1];
}
UsedImages_Edit(ParamPage, ParamCategorie, TableLines);
}
function UsedImages_Edit(ParamPage, ParamCategorie, TableLines){
document.getElementById('WorkingFunction').innerHTML = "Édition";
document.getElementById('WorkingPage').innerHTML = ParamPage;
var ajaxRequest = new XMLHttpRequest();
var url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + ParamPage.replace(/&/g, "%26") + '&action=edit';
ajaxRequest.open("GET", url, 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 Titre = '<center>\'\'Catégorie : \'\'\'[[:'+ParamCategorie+'|'+ParamCategorie.split(mw.config.get('wgFormattedNamespaces')[14]+':').join('')+']]\'\'\' - Tableau [[Modèle:Images utilisées/Documentation|mis à jour]] le ' + ZeroJour + Jour + '/' + ZeroMois + Mois + '/' + Annee + ' à ' + ZeroHeures + Heures + ':' + ZeroMinutes + Minutes + '\'\'</center>\n';
var Modele = Titre + '<gallery>\n';
for(var a=(TableLines.length-1);a>-1;a--){
Modele += TableLines[a];
}
Modele += '</gallery>\n';
var TableauComplet = UsedImages_DebutModele+Modele+UsedImages_FinModele;
UsedImages_ModeleDefautDebut = UsedImages_ModeleDefautDebut.split('$1').join(ParamPage);
UsedImages_ModeleDefautDebut= UsedImages_ModeleDefautDebut.split('$2').join(ParamCategorie);
var ContenuPage = document.getElementById("wpTextbox1").value;
var AncienResumeModif = document.editform.wpSummary.value;
if( (ContenuPage.indexOf(UsedImages_DebutModele)!=-1)&&(ContenuPage.indexOf(UsedImages_FinModele)!=-1) ){
// ----------------- Déja le modèle : remplacement tableau
var debutTexte = ContenuPage.substring(0, ContenuPage.indexOf(UsedImages_DebutModele));
var AncienModele = ContenuPage.substring(0, ContenuPage.indexOf(UsedImages_FinModele)) + UsedImages_FinModele;
AncienModele = AncienModele.replace(debutTexte, "");
var finTexte = ContenuPage.split(debutTexte).join('').split(AncienModele).join('');
var TexteFinal = debutTexte + TableauComplet + finTexte;
}else{
// ----------------- Pas de modèle : ajout modèle + tableau
var TexteFinal = UsedImages_ModeleDefautDebut + TableauComplet + UsedImages_ModeleDefautFin + ContenuPage;
}
document.getElementById ("wpTextbox1").value = TexteFinal ;
document.editform.wpSummary.value = AncienResumeModif + UsedImages_ResumeModif ;
document.editform.submit();
}
ajaxRequest.send(null);
}
// ///////////////////////////////////////////////////// NETTOYAGE REQUÊTES API /////////////////////////
function UsedImages_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;
}
//
La documentation de ce modèle est générée par le modèle {{Documentation}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer) et la page de test (créer).
Voir les statistiques d'utilisation du modèle sur l'outil wstat.