Utilisateur:Dr Brains/verifHomon.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 () {

// {{Catégorisation JS|VerifHomon}} 
//<syntaxhighlight lang=javascript>//<pre>//<nowiki>

  // Variables
var verifierHomonymies_goodLinks = new Array();
var verifierHomonymies_homonLinks = new Array();
var verifierHomonymies_compteurHomon = 0;
var verifierHomonymies_currentHomon = -1;
var verifierHomonymies_alreadyRunned = false;

var verifierHomonymies_linkText = new Array("Afficher homonymies", "Masquer homonymies");
var verifierHomonymies_linkTitle = new Array("Afficher les liens de cette page menant vers des pages d'homonymie", "Masquer les liens de cette page menant vers des pages d'homonymie");

  // Ajout du lien 
$(function(){
    mw.util.addPortletLink('p-tb', 
                   'javascript:verifierHomonymies_init();', 
                   verifierHomonymies_linkText[0], 
                   't-homon', 
                   verifierHomonymies_linkTitle[0]
    );
});

function verifierHomonymies_init(){
     if(!verifierHomonymies_alreadyRunned) verifierHomonymies_initLinkList();
     else verifierHomonymies_Toggle();
     
}

  // Listage des liens de la page
function verifierHomonymies_initLinkList(){
     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 goodLinks = new Array();
     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('noprint') || $(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].href == mw.config.get('wgServer')+'/wiki/'+encodeURI(mw.config.get('wgPageName')) || allLinks[i].href.indexOf(mw.config.get('wgServer')+'/wiki/'+encodeURI(mw.config.get('wgPageName'))+'#') == 0 || allLinks[i].parentNode.className == 'subpages' || allLinks[i].parentNode.id == 'contentSub' )) {
               goodLinks.push(allLinks[i]);
          }
     }
     if (!confirm(goodLinks.length + " liens vont être analysés."))  return;
     verifierHomonymies_goodLinks = goodLinks;
     verifierHomonymies_getLinksAttribute();
}
 
  // Listage des liens vers page d'homonymie 
function verifierHomonymies_getLinksAttribute(HomonLinks, ListContinue){
     if(!HomonLinks){
         HomonLinks = new Object();
         SpecialMessage += "------------\nHomonymies :\n";
     }
     var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&generator=links'
           + '&titles=' + encodeURIComponent(mw.config.get('wgPageName'))
           + '&prop=pageprops&ppprop=disambiguation&gpllimit=499'
           + ( ListContinue ? ListContinue : "")
     var Aj = sajax_init_object();    
     Aj.open('GET', URL, true);
     Aj.onreadystatechange = function() {
          if (Aj.readyState != 4 || Aj.status != 200) return;
          var AllLinks = Aj.responseXML.getElementsByTagName('page');
          for(var a=0,l=AllLinks.length;a<l;a++){
               var Title = AllLinks[a].getAttribute("title");
               HomonLinks[Title] = false;
               var Props = AllLinks[a].getElementsByTagName('pageprops');
               for(var b=0,m=Props.length;b<m;b++){
                   var isHomon = ( Props[b].getAttribute("disambiguation")=="" ? true : false ) ;
                   if(isHomon){
                       HomonLinks[Title] = isHomon;
                       SpecialMessage += "|" +Title+ "|";
                   }
               }
          }
          var QueryContinue = Aj.responseXML.documentElement.getElementsByTagName('query-continue')[0];
          if(QueryContinue){
               var NewListContinue = "&gplcontinue=" + encodeURIComponent(QueryContinue.firstChild.getAttribute("gplcontinue"));
               verifierHomonymies_getLinksAttribute(HomonLinks, NewListContinue);
          }else{
               SpecialMessage += "\n\n";
               verifierHomonymies(HomonLinks);
          }
     }
     Aj.send(null);
}

var SpecialMessage = "\n\n";

  // Vérification d'un lien
function verifierHomonymies(HomonLinks, position) {
     if(!position) position=0;
     var tempLink = verifierHomonymies_goodLinks[position];
     if(!tempLink){
          verifierHomonymies_Msg();
          return;
     }
     tempLink.style.backgroundColor = '#C8FFC8';
     var tempTitle = tempLink.title;     
     if(position == 0 ) SpecialMessage += "------------\nTests :\n";
     if(HomonLinks[tempTitle]){
          verifierHomonymies_goodLinks[position].style.backgroundColor = '#FFCCCC';
          verifierHomonymies_goodLinks[position].style.border = '1px solid red';
          verifierHomonymies_goodLinks[position].id = 'homonymie'+verifierHomonymies_compteurHomon;
          verifierHomonymies_homonLinks.push(verifierHomonymies_goodLinks[position]);
          verifierHomonymies_compteurHomon++;
    }
    SpecialMessage += position + " : " +tempTitle+ "\n";
    verifierHomonymies(HomonLinks, (position+1));
}

  // Message de fin.
function verifierHomonymies_Msg(){
     var msg = "";
     if (verifierHomonymies_compteurHomon == 0)
          msg = "Aucun lien vers une page d’homonymie n’a été trouvé.";
     else if (verifierHomonymies_compteurHomon == 1)
          msg = "Un lien vers une page d’homonymie a été trouvé.";
     else
          msg = verifierHomonymies_compteurHomon + " liens vers des pages d’homonymie ont été trouvés.";
     alert(msg /* + SpecialMessage */);
     if(verifierHomonymies_compteurHomon == 0) return;
     verifierHomonymies_createPrecSuivLink();
     verifierHomonymies_focusThisLink(1);
}

function verifierHomonymies_createPrecSuivLink(){
     if(verifierHomonymies_compteurHomon==1) return;
     for(var a=0,l=verifierHomonymies_homonLinks.length;a<l;a++){
          var HomonLink = verifierHomonymies_homonLinks[a];
          if(!HomonLink) continue;
          var PrevSup = document.createElement("sup");
          var PrevLink = document.createElement('a');
          PrevLink.href = "javascript:verifierHomonymies_focusThisLink(-1);";
          PrevLink.innerHTML = "⇐&nbsp;";
          PrevLink.title = "Homonymie précédente";
          PrevSup.appendChild(PrevLink);
          HomonLink.parentNode.insertBefore(PrevSup,HomonLink);
          var NextSup = document.createElement("sup");
          var NextLink = document.createElement('a');
          NextLink.href = "javascript:verifierHomonymies_focusThisLink(1);";
          NextLink.innerHTML = "&nbsp;⇒";
          NextLink.title = "Homonymie suivante"; 
          NextSup.appendChild(NextLink);
          HomonLink.parentNode.insertBefore(NextSup,HomonLink.nextSibling);
     }     
}

function verifierHomonymies_focusThisLink(id){
     var NextId = verifierHomonymies_currentHomon+id;
     var Link = document.getElementById('homonymie'+NextId);
     if(Link){
          Link.focus();
          verifierHomonymies_currentHomon = NextId;
     }else{
          if(NextId==0) return; 
          if(NextId<0) verifierHomonymies_currentHomon = (verifierHomonymies_compteurHomon-1);
          if(NextId>(verifierHomonymies_compteurHomon-1)) verifierHomonymies_currentHomon = 0;
          verifierHomonymies_focusThisLink(0);
     }
}

function verifierHomonymies_Toggle(){
     var HomonLi = document.getElementById('t-homon');
     if(!HomonLi) return;
     var HomonLink = HomonLi.getElementsByTagName('a')[0];
     if(!HomonLink) return;
     var Title = HomonLink.title;
     if(Title==verifierHomonymies_linkTitle[1]){
          HomonLink.title = verifierHomonymies_linkTitle[0];
          HomonLink.innerHTML = verifierHomonymies_linkText[0];
          for(var a=0,l=verifierHomonymies_goodLinks.length;a<l;a++){
               tempLink = verifierHomonymies_goodLinks[a];
               tempLink.style.backgroundColor = '';
               tempLink.style.border = '';
          }
     }else{
          HomonLink.title = verifierHomonymies_linkTitle[1];
          HomonLink.innerHTML = verifierHomonymies_linkText[1];
          for(var a=0,l=verifierHomonymies_goodLinks.length;a<l;a++){
               tempLink = verifierHomonymies_goodLinks[a];
               tempLink.style.backgroundColor = '#C8FFC8';
               if(verifierHomonymies_homonLinks[tempLink]){
                   tempLink.style.backgroundColor = '#FFCCCC';
                   tempLink.style.border = '1px solid red';
               }
          }
     }


}


//</nowiki></pre></syntaxhighlight>

});