Utilisateur:Dr Brains/verifAncres.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 () {
/*
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);
}
});