MediaWiki:Script/Redactor.js

Révision datée du 24 juin 2022 à 16:21 par Dexter (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

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());
    }
  }
})();