Utilisateur:Dr Brains/verifAncres.js

Une page de Wikipédia, l'encyclopédie libre.
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) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
mw.loader.using('mediawiki.util', function () {

/*

Vérifie les liés ancrés de la page courante pour déterminer ceux qui sont brisés.

{{Catégorisation JS|VerifAncres}}
*/


$(function(){
  mw.util.addPortletLink('p-tb', 'javascript:verifAncres_init();', 'Vérif. ancres', 't-ancres', "Vérifier les liens ancrés de cette page");
});
 
var verifAncres_goodLinks = [];
var verifAncres_goodLinksAncres = [];
var verifAncres_goodLinksURL = [];
var verifAncres_compteurAncre = 0;

function verifAncres_init(){
     var Content = document.getElementById('bodyContent'); // monobook, chick, myskin, simple, vector
     if(!Content) Content = document.getElementById('mw_contentholder'); //modern
     if(!Content) Content = document.getElementById('article'); // cologneblue, nostalgia, standard
     if(!Content) return;
     var allLinks = Content.getElementsByTagName('a');
     for (i=0; i<allLinks.length; i++){
          if (
              !(!allLinks[i].href 
           || $(allLinks[i].parentNode).hasClass('editsection') 
           || $(allLinks[i].parentNode).hasClass('cachelinks') 
           || $(allLinks[i]).hasClass('external') 
           || allLinks[i].href.indexOf('javascript:') == 0 
           || allLinks[i].className == 'new' 
           || allLinks[i].className == 'image' 
           || allLinks[i].parentNode.parentNode.id == 'mw-normal-catlinks' 
           || allLinks[i].parentNode.id == 'mw-normal-catlinks' 
           || allLinks[i].parentNode.className == 'subpages' 
           || allLinks[i].parentNode.id == 'contentSub' 
           || allLinks[i].href.indexOf("#")<1 
           || allLinks[i].href.indexOf("cite_ref")!=-1
           || allLinks[i].href.indexOf("cite_note")!=-1
           || allLinks[i].href == mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join("")+encodeURI(mw.config.get('wgPageName')) 
           || allLinks[i].href == mw.config.get('wgArticlePath').split('$1').join("")+encodeURI(mw.config.get('wgPageName')) 
           || allLinks[i].href == mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURI(mw.config.get('wgPageName')) 
           || allLinks[i].href == mw.config.get('wgScript') + "?title=" + encodeURI(mw.config.get('wgPageName')) 
           || allLinks[i].href == mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join("")+mw.config.get('wgPageName')
           || allLinks[i].href == mw.config.get('wgArticlePath').split('$1').join("")+mw.config.get('wgPageName')
           || allLinks[i].href == mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + mw.config.get('wgPageName')
           || allLinks[i].href == mw.config.get('wgScript') + "?title=" + mw.config.get('wgPageName')
           )) {
               if(allLinks[i].href.indexOf("#")!=-1){
                    var Ancre = decodeURIComponent(allLinks[i].href).replace(/.*#/g, "");
                    if(!document.getElementById(Ancre) && Ancre != ""){
                         if(verifAncres_goodLinks.indexOf(allLinks[i])==-1){
                              verifAncres_goodLinksAncres.push(Ancre);
                              verifAncres_goodLinks.push(allLinks[i]);
                              verifAncres_goodLinksURL.push(allLinks[i].href);
                         }
                    }
               }
          }
     }
     if(!verifAncres_goodLinks[0]){ alert('Cette page ne contient aucun lien ancré'); return; }
     if (!confirm(verifAncres_goodLinks.length + " liens vont être analysés :\n\n" + verifAncres_goodLinksURL.join('\n')) )  return;
     verifAncres();
}

var verifAncres_badLinksURL = [];

function verifAncres(position) {
     if(!position) position=0;
     var tempLink = verifAncres_goodLinks[position];
     var tempAncre = verifAncres_goodLinksAncres[position];
     if(!tempLink){
          verifAncres_Msg();
          return;
     }
     var tempTitle = tempLink.title; 
     var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(tempTitle) + "&action=render";
     var CompleteFunction = function(Aj) {
               verifAncres_goodLinks[position].style.backgroundColor = '#FFCCCC';
               verifAncres_goodLinks[position].style.border = '1px solid red';
               var Temp = document.createElement('div');
               Temp.style.display = "none";
               document.body.appendChild(Temp);
               Temp.innerHTML = Aj.responseText;
               var Good = false;
               var sections = Temp.getElementsByTagName('span');      
               for (j=0; j<sections.length; j++){
                    var ThisAncre = sections[j].id;
                    if(ThisAncre == tempAncre){
                         Good = true;
                    }
               }
               if(Good){
                    verifAncres_goodLinks[position].style.backgroundColor = '#C8FFC8';
                    verifAncres_goodLinks[position].style.border = '1px solid green';
               }else{
                    verifAncres_badLinksURL.push(verifAncres_goodLinks[position].href);
                    verifAncres_compteurAncre++;
               }
               Temp.parentNode.removeChild(Temp);
               verifAncres((position+1));
     }
     $.ajax({url : URL, complete: CompleteFunction});
}
 
function verifAncres_Msg(){
     // Message de fin.
     var msg = "";
     if (verifAncres_compteurAncre == 0){
          msg = "Aucun lien ancré brisé n’a été trouvé.";
     }else if (verifAncres_compteurAncre == 1){
          msg = "Un lien ancré brisé a été trouvé.";
     }else{
          msg = verifAncres_compteurAncre + " liens ancrés brisés ont été trouvés.";
     }
     if(verifAncres_badLinksURL[0]) msg += "\n\n" + verifAncres_badLinksURL.join('\n')

     alert(msg);
}

});