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 :
var globalBol = false;
+
/* Ce script sera chargé sur toutes les pages uniquement pour les rédacteurs */
  
function filterLinks(ar1, ar2) {
+
/* Renvoie la différence entre 2 tableaux */
   ar1.childNodes.forEach(function(el1){
+
function diffArray(ar1, ar2) {
     ar2.childNodes.forEach(function(el2){
+
   return ar1.filter(function(el) {
      if (el1.children[0].textContent === el2.children[0].textContent) {
+
     return ar2.indexOf(el) === -1;
        el1.classList.add("tabber-noactive");
+
   });
      }
 
    })
 
   })
 
 
};
 
};
  
function addCompareLinks() {
+
/* 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 pageName = encodeURIComponent(mw.config.get("wgPageName"));
+
     var newListElement = document.createElement("li");
    var hrefCompare = "/index.php?title=Spécial:Pages_liées/"+pageName+"&compare=1";
+
     var newLink = document.createElement("a");
    var compareLinks = document.createElement("li");
+
     var newSpan = document.createElement("span");
     var linkCompareLinks = document.createElement("a");
+
      
     var spanCompareLinks = document.createElement("span");
+
    newSpan.textContent = "Comparer les liens";
     spanCompareLinks.textContent = "Comparer les liens";
+
     newLink.href = "/index.php?title=Spécial:Pages_liées/"+encodeURIComponent(mw.config.get("wgPageName"))+"&compare=1";
     linkCompareLinks.href = hrefCompare;
+
     newLink.appendChild(newSpan);
     linkCompareLinks.appendChild(spanCompareLinks);
+
     newListElement.appendChild(newLink);
     compareLinks.appendChild(linkCompareLinks);
+
   
     linksHere.parentElement.appendChild(compareLinks);
+
     linksHere.parentElement.appendChild(newListElement);
 
   }
 
   }
 
}
 
}
  
function compareLinks(page) {
+
/* Vide la page des pages liées */
   if (globalBol) {
+
function resetPage(page) {
     var listBl = document.querySelector("ul#backlinks");
+
   if (page !== null) {
    var listL = document.querySelector("ul#links");
+
     page.childNodes.forEach(function(el) {
     filterLinks(listBl, listL);
+
      el.remove();
     filterLinks(listL, listBl);
+
     });
  } else {
+
     page.textContent = "";
    globalBol = !globalBol;
 
 
   }
 
   }
 
}
 
}
  
function addLinksToPage(linkName, list) {
+
/* 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]];
 
    
 
    
   var listEl = document.createElement("li");
+
   resetPage(pageContent);
  var link = document.createElement("a");
 
 
        
 
        
   link.href = "/index.php/" + encodeURIComponent(linkName);
+
   arrayOfContent[0].textContent = "Les pages suivantes présent un lien vers "+pageName+" mais "+pageName+" ne présente pas de liens vers elles.";
   link.textContent = linkName;
+
   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.";
   listEl.appendChild(link);
+
    
   list.appendChild(listEl);
+
  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 writeBacklinks(api, name, list, page) {
+
      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}
 
    
 
    
   var params = {
+
   api.get(params).done(function(data){
action: 'query',
 
format: 'json',
 
list: 'backlinks',
 
    bllimit: "max",
 
bltitle: name
 
}
 
  
  api.get(params).then(function(data){
+
    var rawBacklinksList = [];
 +
    var backlinks = data.query.backlinks;
  
     var bl = data.query.backlinks;
+
     backlinks.forEach(function(el) {
 
+
       rawBacklinksList.push(el["title"]);
    for (var b in bl) {
+
    });
       var linkName = bl[b].title;
+
      
      addLinksToPage(linkName, list);
+
     writeLinksOnPage(pageName, rawLinksList, rawBacklinksList);
     }
 
     compareLinks(page);
 
 
   });
 
   });
 
}
 
}
  
function writeLinks(api, name, list, page) {
+
/* Récupère tous les liens de la page puis exécute la fonction getBacklinks */
+
function getLinks(pageName, api) {
   var params = {
+
 
action: 'query',
+
   var params = {action: 'query', format: 'json', titles: pageName, pllimit: "max", prop: 'links'}
format: 'json',
+
 
titles: name,
+
   api.get(params).done(function(data){
    pllimit: "max",
+
   
prop: 'links'
+
     var rawLinksList = [];
}
 
 
   api.get(params).then(function(data){
 
     var linksList = [];
 
 
     var pages = data.query.pages
 
     var pages = data.query.pages
     for (var p in pages) {
+
   
       pages[p].links.forEach(function(l) {
+
     for (var p in data.query.pages) {
         var linkName = l.title;
+
       pages[p].links.forEach(function(link) {
        addLinksToPage(linkName, list);
+
         rawLinksList.push(link.title);
 
       });
 
       });
 
     }
 
     }
     compareLinks(page)
+
      
 +
    getBacklinks(pageName, api, rawLinksList);
 
   });
 
   });
 
}
 
}
  
function resetPage(page) {
+
/* Fonction principal */
 
 
  if (page !== null) {
 
   
 
    page.childNodes.forEach(function(el){
 
      el.remove();
 
    });
 
       
 
    page.textContent = "";
 
  }
 
}
 
 
 
 
(function(){
 
(function(){
 
    
 
    
   addCompareLinks();
+
   addLinkToCompare();
 
    
 
    
 
   if (window.location.href.indexOf("compare=1") !== -1) {
 
   if (window.location.href.indexOf("compare=1") !== -1) {
    var name = mw.config.get("wgPageName").split("/");
 
 
      
 
      
     if (name[0] === 'Spécial:Pages_liées') {     
+
     var urlList = mw.config.get("wgPageName").split("/");
      var pageContent = document.querySelector("div#mw-content-text");
+
   
      var api = new mw.Api();
+
    if (urlList[0] === 'Spécial:Pages_liées') {
      var listBl = document.createElement("ul");
 
      var listL = document.createElement("ul");
 
      var para1 = document.createElement("p");
 
      var para2 = document.createElement("p");
 
      var realName = name[1];
 
     
 
      listBl.id = "backlinks";
 
      listL.id = "links";
 
     
 
      resetPage(pageContent);
 
      writeBacklinks(api, realName, listBl, pageContent);
 
      writeLinks(api, realName, listL, pageContent);
 
     
 
      para1.textContent = "Les pages suivantes présent un lien vers "+realName+" mais "+realName+" ne présente pas de liens vers elles."
 
      pageContent.appendChild(para1);
 
      pageContent.appendChild(listBl);
 
 
        
 
        
       para2.textContent = "Un lien vers les pages suivantes est présent sur "+realName+" mais aucun lien vers "+realName+" n'est présent sur ces pages."
+
       getLinks(urlList[1], new mw.Api());
      pageContent.appendChild(para2);
 
      pageContent.appendChild(listL);
 
 
     }
 
     }
 
   }
 
   }
 
})();
 
})();

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