MediaWiki:Script/Redactor.js : Différence entre versions
(Page créée avec « var globalBol = false; function filterLinks(ar1, ar2) { ar1.childNodes.forEach(function(el1){ ar2.childNodes.forEach(function(el2){ if (el1.children[0].textCo... ») |
|||
Ligne 1 : | Ligne 1 : | ||
− | + | /* Ce script sera chargé sur toutes les pages uniquement pour les rédacteurs */ | |
− | function | + | /* Renvoie la différence entre 2 tableaux */ |
− | ar1. | + | function diffArray(ar1, ar2) { |
− | ar2. | + | return ar1.filter(function(el) { |
− | + | return ar2.indexOf(el) === -1; | |
− | + | }); | |
− | |||
− | |||
− | }) | ||
}; | }; | ||
− | function | + | /* Ajoute un nouveau lien dans les outils de page */ |
− | + | function addLinkToCompare() { | |
+ | |||
var linksHere = document.querySelector("li#t-whatlinkshere"); | var linksHere = document.querySelector("li#t-whatlinkshere"); | ||
if (linksHere !== null) { | if (linksHere !== null) { | ||
− | var | + | var newListElement = document.createElement("li"); |
− | + | var newLink = document.createElement("a"); | |
− | + | var newSpan = document.createElement("span"); | |
− | var | + | |
− | var | + | 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( | + | linksHere.parentElement.appendChild(newListElement); |
} | } | ||
} | } | ||
− | function | + | /* Vide la page des pages liées */ |
− | if ( | + | function resetPage(page) { |
− | + | if (page !== null) { | |
− | + | page.childNodes.forEach(function(el) { | |
− | + | el.remove(); | |
− | + | }); | |
− | + | page.textContent = ""; | |
− | |||
} | } | ||
} | } | ||
− | function | + | /* 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"); | ||
− | function | + | 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); | |
− | |||
− | |||
}); | }); | ||
} | } | ||
− | function | + | /* Récupère tous les liens de la page puis exécute la fonction getBacklinks */ |
− | + | function getLinks(pageName, api) { | |
− | var params = { | + | |
− | + | var params = {action: 'query', format: 'json', titles: pageName, pllimit: "max", prop: 'links'} | |
− | + | ||
− | + | api.get(params).done(function(data){ | |
− | + | ||
− | + | var rawLinksList = []; | |
− | |||
− | |||
− | api.get(params). | ||
− | var | ||
var pages = data.query.pages | var pages = data.query.pages | ||
− | for (var p in pages) { | + | |
− | pages[p].links.forEach(function( | + | for (var p in data.query.pages) { |
− | + | pages[p].links.forEach(function(link) { | |
− | + | rawLinksList.push(link.title); | |
}); | }); | ||
} | } | ||
− | + | ||
+ | getBacklinks(pageName, api, rawLinksList); | ||
}); | }); | ||
} | } | ||
− | + | /* Fonction principal */ | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
(function(){ | (function(){ | ||
− | + | addLinkToCompare(); | |
if (window.location.href.indexOf("compare=1") !== -1) { | 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()); | |
− | |||
− | |||
} | } | ||
} | } | ||
})(); | })(); |
Version actuelle datée du 24 juin 2022 à 16:21
/* 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());
}
}
})();