Utilisateur:Dr Brains/verifHomon.js
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 = "⇐ ";
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 = " ⇒";
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>
});