MediaWiki:Script/Redactor.js
Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac)
- Google Chrome : appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac)
- Internet Explorer : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5
- Opera : allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d’exploration → Images et fichiers en cache.
/* Ce script sera chargé sur toutes les pages uniquement pour les rédacteurs */
/* Renvoie la différence entre 2 tableaux */
function diffArray(ar1, ar2) {
return ar1.filter(function(el) {
return ar2.indexOf(el) === -1;
});
};
/* Ajoute un nouveau lien dans les outils de page */
function addLinkToCompare() {
var linksHere = document.querySelector("li#t-whatlinkshere");
if (linksHere !== null) {
var newListElement = document.createElement("li");
var newLink = document.createElement("a");
var newSpan = document.createElement("span");
newSpan.textContent = "Comparer les liens";
newLink.href = "/index.php?title=Spécial:Pages_liées/"+encodeURIComponent(mw.config.get("wgPageName"))+"&compare=1";
newLink.appendChild(newSpan);
newListElement.appendChild(newLink);
linksHere.parentElement.appendChild(newListElement);
}
}
/* Vide la page des pages liées */
function resetPage(page) {
if (page !== null) {
page.childNodes.forEach(function(el) {
el.remove();
});
page.textContent = "";
}
}
/* Ajoute les listes des liens sur la page */
function addContent(pageName, listArray) {
var pageContent = document.querySelector("div#mw-content-text");
var arrayOfContent = [document.createElement("p"), listArray[0], document.createElement("p"), listArray[1]];
resetPage(pageContent);
arrayOfContent[0].textContent = "Les pages suivantes présent un lien vers "+pageName+" mais "+pageName+" ne présente pas de liens vers elles.";
arrayOfContent[2].textContent = "Un lien vers les pages suivantes est présent sur "+pageName+" mais aucun lien vers "+pageName+" n'est présent sur ces pages.";
arrayOfContent.forEach(function(content) {
pageContent.appendChild(content);
});
}
/* Écris les listes finales sur la page */
function writeLinksOnPage(pageName, rawLinksList, rawBacklinksList) {
var listArray = [document.createElement("ul"), document.createElement("ul")];
var diffList = [diffArray(rawBacklinksList, rawLinksList), diffArray(rawLinksList, rawBacklinksList)];
addContent(pageName.replace("_", " "), listArray);
for (var i = 0; i <= 1; i++) {
diffList[i].forEach(function(el){
var newElement = document.createElement("li");
var newLink = document.createElement("a");
var newSpan = document.createElement("span");
newLink.href = "/index.php/" + encodeURIComponent(el);
newLink.textContent = el
newElement.appendChild(newLink)
listArray[i].appendChild(newElement);
});
}
}
/* Récupère toutes les pages liées de la page puis exécute la fonction writeLinksOnPage */
function getBacklinks(pageName, api, rawLinksList) {
var params = {action: 'query', format: 'json', list: 'backlinks', bllimit: "max", bltitle: pageName}
api.get(params).done(function(data){
var rawBacklinksList = [];
var backlinks = data.query.backlinks;
backlinks.forEach(function(el) {
rawBacklinksList.push(el["title"]);
});
writeLinksOnPage(pageName, rawLinksList, rawBacklinksList);
});
}
/* Récupère tous les liens de la page puis exécute la fonction getBacklinks */
function getLinks(pageName, api) {
var params = {action: 'query', format: 'json', titles: pageName, pllimit: "max", prop: 'links'}
api.get(params).done(function(data){
var rawLinksList = [];
var pages = data.query.pages
for (var p in data.query.pages) {
pages[p].links.forEach(function(link) {
rawLinksList.push(link.title);
});
}
getBacklinks(pageName, api, rawLinksList);
});
}
/* Fonction principal */
(function(){
addLinkToCompare();
if (window.location.href.indexOf("compare=1") !== -1) {
var urlList = mw.config.get("wgPageName").split("/");
if (urlList[0] === 'Spécial:Pages_liées') {
getLinks(urlList[1], new mw.Api());
}
}
})();