MediaWiki:Gadget-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./*
* Vérifie les liés ancrés de la page courante pour déterminer ceux qui sont brisés.
*
* {{Catégorisation JS|VerifAncres}}
*/
/* jshint laxbreak: true, scripturl: true */
/* globals mw, $ */
mw.loader.using('mediawiki.util', function () {
'use strict';
$(function ($) {
var node = mw.util.addPortletLink('p-tb', '#', 'Vérif. ancres', 't-ancres', "Vérifier les liens ancrés de cette page");
$(node).click(function (e) {
e.preventDefault();
init();
});
});
var goodLinks = [];
var goodLinksAncres = [];
var goodLinksURL = [];
var badLinksURL = [];
function init() {
var Content = $('#mw-content-text').find('.mw-parser-output')[0];
if (!Content) return;
var allLinks = Content.getElementsByTagName('a');
for (var i = 0, l = allLinks.length; i < l; i++) {
var currentLink = allLinks[i];
if (
currentLink.hash == ''
|| currentLink.parentNode.closest('#toc')
|| currentLink.parentNode.classList.contains('mw-editsection')
|| currentLink.parentNode.classList.contains('cachelinks')
|| currentLink.classList.contains('external')
|| currentLink.href.indexOf('javascript:') == 0
|| currentLink.classList.contains('new')
|| currentLink.classList.contains('mw-file-description')
|| currentLink.parentNode.parentNode.id == 'mw-normal-catlinks'
|| currentLink.parentNode.id == 'mw-normal-catlinks'
|| currentLink.parentNode.classList.contains('subpages')
|| currentLink.parentNode.id == 'contentSub'
|| (currentLink.getAttribute("href") || '').indexOf("#") == 0
|| currentLink.hash.indexOf("#cite_ref-") == 0
|| currentLink.hash.indexOf("#cite_note-") == 0
|| currentLink.hostname != mw.config.get('wgServerName')
|| decodeURIComponent(currentLink.pathname) == mw.config.get('wgArticlePath').replace('$1', mw.config.get('wgPageName'))
|| (currentLink.pathname == mw.config.get('wgScript') && new URL(currentLink.href).searchParams.get('title') == mw.config.get('wgPageName'))
) {
continue;
}
var Ancre = decodeURIComponent(currentLink.hash.replace(/^#/, ""));
if (Ancre != "") {
goodLinksAncres.push(Ancre);
goodLinks.push(currentLink);
goodLinksURL.push(currentLink.href);
}
}
if (goodLinks.length == 0) {
alert('Cette page ne contient aucun lien ancré'); return;
} else if (goodLinks.length == 1) {
if (!confirm(goodLinks.length + " lien va être analysé :\n\n" + goodLinksURL)) return;
} else {
if (!confirm(goodLinks.length + " liens vont être analysés :\n\n" + goodLinksURL.join('\n'))) return;
}
verifAncres();
}
function verifAncres(position) {
if (!position) position = 0;
var tempLink = goodLinks[position];
var tempAncre = goodLinksAncres[position];
if (!tempLink) {
endMessage();
return;
}
var tempTitle = tempLink.title;
var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(tempTitle) + "&action=render";
var CompleteFunction = function (Aj) {
var htmlDoc = new DOMParser().parseFromString(Aj.responseText, 'text/html');
var Good = false;
var sections = htmlDoc.getElementsByClassName('mw-headline');
for (var i = 0, l = sections.length; i < l; i++) {
var ThisAncre = sections[i].id;
if (ThisAncre == tempAncre) {
Good = true;
break;
}
}
if (Good) {
goodLinks[position].style.backgroundColor = '#C8FFC8';
goodLinks[position].style.border = '1px solid green';
} else {
goodLinks[position].style.backgroundColor = '#FFCCCC';
goodLinks[position].style.border = '1px solid red';
badLinksURL.push(goodLinks[position].href);
}
verifAncres(position + 1);
};
$.ajax({url: URL, complete: CompleteFunction});
}
function endMessage() {
var msg;
if (badLinksURL.length == 0) {
msg = "Aucun lien ancré brisé n’a été trouvé.";
} else if (badLinksURL.length == 1) {
msg = "Un lien ancré brisé a été trouvé.";
} else {
msg = badLinksURL.length + " liens ancrés brisés ont été trouvés.";
}
if (badLinksURL.length > 0) msg += "\n\n" + badLinksURL.join('\n');
alert(msg);
}
});