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./* <nowiki>
modèle {{m|Articles récents}}
Paramètres :
{{Articles récents|Portail=|pageportail=|catégorie=|
TableauTriable
}}
* {{{Portail}}} : Nom du portail sans l'espace de noms, les espaces remplacés par des "underscore"
* {[[pageportail}}} : Titre de la page à mettre à jour
* {{{catégorie}}} : catégorie à checker ( catégorie:Portail:TRUC/Articles/liés )
<div class="categoryRecentChanges" >
<span style="display:none;" class="{{{Portail|}} " title="{{{pageportail|}}}" >{{{catégorie|}}}</span><br/>
<div class="ArticlesRecents" >
{{{articlesRecents|}}}
</div>
<div style="display:none;">
{{{listeComplete|}}}
</div>
</div>
</nowiki>
*/
var PagesInCategoryCount = 0;
var Adresse = wgServer + wgScript + "?title=";
var AnalysisProcessCount = 0;
var AnalysisDivCount = 0;
if( (wgAction!="edit")&&(wgAction!="submit") ){
addOnloadHook(initCategoryRecentChanges);
}
function initCategoryRecentChanges(){
var Cadres = document.getElementsByTagName('div');
for(s=0;s<Cadres.length;s++){
if( hasClass(Cadres[s], 'categoryRecentChanges') ){
AnalysisDivCount++
Cadres[s].id = 'categoryRecentChanges_'+AnalysisDivCount;
var NewButton = '<a href="javascript:doRecentChangesAnalisys(\'categoryRecentChanges_'
+AnalysisDivCount+ '\');" title="Cliquer pour mettre à jour la liste" >Mettre à jour</a>' ;
Cadres[s].innerHTML += NewButton ;
}
}
}
// cherche dans le modèle {{m|Articles récents}}
function getOldCategoryRecentChanges(element, numero){
var Listes = element.getElementsByTagName('ul')[numero];
if(Listes)return Listes.getElementsByTagName('a');
else return false;
}
// Fonction ajax : fait une requête au serveur et met la réponse dans un élément donné
function getAjaxPageContent(href, element){
if((!href)||(!element)) return;
var ajaxRequest = sajax_init_object();
if (!ajaxRequest){
alert('Méthode ajax non supportée : sajax_init_object()');
return;
}else{
url = decodeURIComponent(href).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'");
ajaxRequest.open("GET", url, true);
ajaxRequest.send(null);
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
var ajaxResponse;
ajaxResponse = ajaxRequest.responseText;
element.innerHTML = ajaxResponse;
}
}
}
}
// * Recherche d'un élement dont on connait l'Id (non unique, donc sans utiliser getElementById() ) *
function getElementWithId( elementParentNode , elementTagName , elementId ){
var TheElement = false;
var Elements = elementParentNode.getElementsByTagName(elementTagName);
var elementcount = 0;
while(elementcount<Elements.length){
var Id = Elements[elementcount].id;
if(Id){
if(Id.indexOf(elementId)!=-1){
TheElement = Elements[elementcount];
}
}
elementcount++
}
return TheElement;
}
function doRecentChangesAnalisys(id){
if(!id) return;
var Cadre = document.getElementById(id);
var Bouton = Cadre.firstChild;
var Categorie = Bouton.innerHTML;
var PagePortail = Bouton.title;
var Portail = "Portail:" + Bouton.className.replace(/_/g," ");
var Suretcertain = confirm('Catégorie : ' + Categorie
+ '\nPage à mettre à jour : ' + PagePortail
+ '\nPortail de référence : ' + Portail );
if(!Suretcertain) return;
var TableauDeBord = document.createElement('table');
TableauDeBord.id = 'Tableau_de_bord';
TableauDeBord.innerHTML = '<tr>'
+ '<td id="Page_cible" valign="top" style="height:600px;width:500px;" >'
+ '</td>'
+ '<td valign="top" style="height:600px;width:250px;">'
+ '<ul id="Liste_Articles">'
+ '</ul>'
+ '</td>'
+ '</tr>';
document.body.appendChild(TableauDeBord);
TableauDeBord.style.position = 'absolute';
TableauDeBord.style.zIndex = '150';
TableauDeBord.style.top = '50px';
TableauDeBord.style.left = '150px';
TableauDeBord.style.opacity = '0.9';
var PageCible = document.getElementById("Page_cible");
var ListeArticles = document.getElementById("Liste_Articles");
if( (!PageCible)||(!ListeArticles) ){
alert('pas OK');
}else{
//alert('OK');
doCategoryRecentChangesAnalisys(Adresse + encodeURIComponent(Categorie) + '&action=render',PageCible,ListeArticles, PagePortail, Portail, Categorie);
}
}
// Fonction d'analyse de la catégorie : requête ajax, recopie des liens dans une colonne du tableau de bord, renouvellement si il y a d'autres pages puis lancement de la fonction analyse d'historique
function doCategoryRecentChangesAnalisys(Cible,PageCible,ListeArticles, PagePortail, Portail, Categorie){
var AutrePage=false;
var AutrePageAdresse ='';
PageCible.innerHTML = '';
var ajaxRequest = sajax_init_object();
if (!ajaxRequest){
alert('Méthode ajax non supportée : sajax_init_object()');
return;
}else{
var url = decodeURIComponent(Cible).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'") ;
//alert(url);
ajaxRequest.open("GET", url, true);
ajaxRequest.send(null);
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
var ajaxResponse;
ajaxResponse = ajaxRequest.responseText;
PageCible.innerHTML = ajaxResponse;
// Analyse du contenu
//alert('OK');
var ContenuCategorie = getElementWithId(PageCible, 'div', 'mw-pages');
if(!ContenuCategorie) alert('Pas trouvé \"mw-pages\"');
var LiensCategorie = ContenuCategorie.getElementsByTagName('li');
if(!LiensCategorie) alert('pas de li');
for(a=0;a<LiensCategorie.length;a++){
PageCibleCategory = LiensCategorie[a].innerHTML;
ListeArticles.innerHTML += '<li>' + PageCibleCategory + '</li>';
PagesInCategoryCount++
//alert(PageCibleCategory);
}
// Recherche si c'est la dernière page ou si il y en a d'autres
var TousLiens = PageCible.getElementsByTagName('a');
var length = TousLiens.length;
var dernierLien = TousLiens[(length-1)].href;
//alert(dernierLien);
if(dernierLien.indexOf("&from=")!=-1){
AutrePage = true;
AutrePageAdresse = dernierLien + '&action=render';
}
if(AutrePage==true){
doCategoryRecentChangesAnalisys(AutrePageAdresse,PageCible,ListeArticles, PagePortail, Portail, Categorie)
}else{
//alert('Analyse de l\'historique de chaque page');
initHistoryRecentChangesAnalisys( 0, PageCible,ListeArticles, PagePortail, Portail, Categorie)
}
}
}
}
}
function initHistoryRecentChangesAnalisys(Position,PageCible,ListeArticles, PagePortail, Portail, Categorie){
var Lien = ListeArticles.getElementsByTagName('a')[Position];
if(!Lien) {
//alert('Analyse de la présence du bandeau dans chaque version');
initDiffRecentChangesAnalisys(0,0,PageCible,ListeArticles, PagePortail, Portail, Categorie);
}
LiParent = Lien.parentNode;
TitrePage = Lien.innerHTML.replace(/&/, "&");
//alert(TitrePage);
trouveVersion = false;
AutrePage=false;
AutrePageAdresse ='';
PageCible.innerHTML = '';
var ajaxRequest = sajax_init_object();
if (!ajaxRequest){
alert('Méthode ajax non supportée : sajax_init_object()');
return;
}else{
var url = Adresse + decodeURIComponent(TitrePage).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'").replace(/&/g, "%26") + '&action=history&limit=5000'; // voyons large...
//alert(url);
ajaxRequest.open("GET", url, true);
ajaxRequest.send(null);
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
var ajaxResponse;
ajaxResponse = ajaxRequest.responseText;
PageCible.innerHTML = ajaxResponse;
//alert('Analyse du contenu de l\'historique : ' + TitrePage);
var ContenuHistorique = getElementWithId(PageCible, 'ul', 'pagehistory');
if(!ContenuHistorique) alert('Pas trouvé \"pagehistory\"');
var LiensHistorique = ContenuHistorique.getElementsByTagName('li');
for(li=0;li<LiensHistorique.length;li++){
FirstLink = LiensHistorique[li].getElementsByTagName('a')[0];
SecondLink = LiensHistorique[li].getElementsByTagName('a')[1];
if(FirstLink.innerHTML=="actu") Version = 2;
if(FirstLink.innerHTML=="diff") Version = 1;
if( (FirstLink.innerHTML=="actu")&&(SecondLink.innerHTML!="diff") ) Version = 1;
if( (FirstLink.innerHTML!="actu")&&(FirstLink.innerHTML!="diff") ) Version = 0;
VersionLink = LiensHistorique[li].getElementsByTagName('a')[Version];
VersionLinkHref = decodeURIComponent(VersionLink.href);
VersionLinkTitle = VersionLink.title;
VersionOldid = VersionLinkHref.replace(/&oldid/, "OLDID");
VersionLinkHTML = VersionLink.innerHTML;
//alert(VersionLinkHref + ' - ' + VersionLinkHTML);
LiParent.innerHTML = LiParent.innerHTML + '<br/><span title="'+VersionOldid+'">' + VersionLinkHTML + '</span>';
}
//initDiffRecentChangesAnalisys(0,0,PageCible,ListeArticles, PagePortail, Portail, Categorie);
initHistoryRecentChangesAnalisys((Position+1),PageCible,ListeArticles, PagePortail, Portail, Categorie);
}
}
}
}
function initDiffRecentChangesAnalisys(PositionLi,PositionSpan,PageCible,ListeArticles, PagePortail, Portail, Categorie){
var Page = ListeArticles.getElementsByTagName('li')[PositionLi];
if(!Page) {
//alert('Mise en page des résultats');
initCheckAnalisys(PageCible,ListeArticles, PagePortail, Portail, Categorie);
}
var Version = Page.getElementsByTagName('span')[PositionSpan];
if(!Version) initDiffRecentChangesAnalisys((PositionLi+1),0,PageCible,ListeArticles, PagePortail, Portail, Categorie);
var Oldid = Version.title;
PageCible.innerHTML = '';
var ajaxRequest = sajax_init_object();
if (!ajaxRequest){
alert('Méthode ajax non supportée : sajax_init_object()');
return;
}else{
url = decodeURIComponent(Oldid).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'").replace(/&/g, "%26").replace(/OLDID/g,"&oldid") + '&action=render';
//alert(url);
ajaxRequest.open("GET", url, true);
ajaxRequest.send(null);
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
var ajaxResponse;
ajaxResponse = ajaxRequest.responseText;
PageCible.innerHTML = ajaxResponse;
OKBandeau = 'red';
var Bandeaux = PageCible.getElementsByTagName('span');
for(b=0;b<Bandeaux.length;b++){
if( hasClass(Bandeaux[b], "bandeau-portail-texte") ){
if(Bandeaux[b].getElementsByTagName('a')[0].title.indexOf(Portail)!=-1){
OKBandeau = 'green';
}
}
}
Version.style.color = OKBandeau;
Version.className = OKBandeau;
initDiffRecentChangesAnalisys(PositionLi,(PositionSpan+1),PageCible,ListeArticles, PagePortail, Portail, Categorie);
}
}
}
}
var checkedPageTitle = new Array();
var checkedPageDate = new Array();
var checkedPageCrea = new Array();
function initCheckAnalisys(PageCible,ListeArticles, PagePortail, Portail, Categorie){
var checkedPage = 0;
PageCible.innerHTML='';
var Label = document.createElement('ul');
PageCible.appendChild(Label);
var Pages = ListeArticles.getElementsByTagName('li');
for(a=0;a<Pages.length;a++){
var Page = Pages[a].firstChild.innerHTML;
var PageHref = Pages[a].firstChild.href;
var Versions = Pages[a].lastChild;
var Creation = Versions.innerHTML
checkedPageCrea[checkedPage] = Creation;
while(Versions.className.indexOf("green")==-1){
Versions = Versions.previousSibling;
}
Date = Versions.innerHTML;
checkedPageTitle[checkedPage] = Page;
checkedPageDate[checkedPage] = Date;
Label.innerHTML += '<li ><a href="'+PageHref+'" >'+Page+'</a> - <span>'+Date+'</span></li>';
Pages[a].style.display = 'none';
checkedPage++
}
initEditTableau(PageCible,ListeArticles, PagePortail, Portail, Categorie);
}
function initEditTableau(PageCible,ListeArticles, PagePortail, Portail, Categorie){
ListeArticles.innerHTML = '';
var ajaxRequest = sajax_init_object();
if (!ajaxRequest){
alert('Méthode ajax non supportée : sajax_init_object()');
return;
}else{
url = Adresse + decodeURIComponent(PagePortail).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'").replace(/&/g, "%26") + '&action=edit';
//alert(url);
ajaxRequest.open("GET", url, true);
ajaxRequest.send(null);
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
var ajaxResponse;
ajaxResponse = ajaxRequest.responseText;
ListeArticles.innerHTML = ajaxResponse;
Portail = Portail.replace(/Portail:/, "").replace(/ /g, "_");
var DebutModele = '<!-- Ce modèle est apposé automatiquement par un robot. DEBUT -->\n'
+ '{{Articles récents|Portail='+Portail+'|pageportail='+PagePortail+'|catégorie='+Categorie+'|\n';
var TableauTriable = '{| class="wikitable sortable"\n'
+ '!Page\n'
+ '!Date de création\n'
+ '!Date d\'apposition du bandeau\n'
for(a=0;a<checkedPageDate.length;a++){
TableauTriable += '|-\n';
TableauTriable += '|[[' + checkedPageTitle[a] + ']]\n'
TableauTriable += '|' + checkedPageCrea[a] + '\n'
TableauTriable += '|' + checkedPageDate[a] + '\n'
}
TableauTriable +='|}\n';
var FinModele = '}}<!-- Ce modèle est apposé automatiquement par un robot. FIN -->\n';
var Modele = DebutModele+TableauTriable+FinModele;
var ContenuPage = document.getElementById("wpTextbox1").value;
if(ContenuPage.indexOf("{{Articles récents")!=-1){ // ------------------------------------------------ Déja le modèle : remplacement
var debutTexte = ContenuPage.substring(0, ContenuPage.indexOf("FIN -->\n"));
var finTexte = ContenuPage.split(debutTexte).join('');
var avantModele = debutTexte.substring(0, ContenuPage.indexOf("DEBUT -->\n"));
avantModele = avantModele.split("<!-- Ce modèle est apposé automatiquement par un robot. DEBUT -->\n").join('');
var TexteFinal = avantModele + Modele + finTexte;
}else{ // ------------------------------------------------Déja le modèle : ajout
var TexteFinal = Modele + ContenuPage;
}
document.getElementById ("wpTextbox1").value = TexteFinal ;
document.editform.wpSummary.value = document.editform.wpSummary.value + 'Mise à jour modèle {{Articles récents}}' ;
var SurEtCertain = confirm('Sauvegarder la modification ?');
if(SurEtCertain) document.editform.submit();
}
}
}
}