Aller au contenu

Utilisateur:Alphos/abuseFilterHelper2.js

Une page de Wikipédia, l'encyclopédie libre.
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) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/*
abuseFilterHelper2.js
Author : [[fr:w:User:Alphos]]
*/

function toggleAbuseFilterPatternDisplay(a) {
  var abf2PatternContentId = "abf-filterinfo-" + a + "-patterncontent";
  var abf2PatternContent = document.getElementById(abf2PatternContentId);
  if (abf2PatternContent) {
    if (abf2PatternContent.style.display == "none") { abf2PatternContent.style.display = "inline"; }
    else { abf2PatternContent.style.display = "none"; }
  }
  return true;
}

function addAbuseFilterTrigger() {
  if (mw.config.get('wgNamespaceNumber') < 1) { return false; }

  var abf2links = document.getElementById("content").getElementsByTagName("a");
  var abf2length = abf2links.length;
  var abf2LinkRegex = /(https?:)?\/\/fr.wikipedia.org\/wiki\/Sp(é|%C3%A9|e)cial:(Filtre_antiabus|AbuseFilter)\/\d+$/
  for (i=0 ; i < abf2length ; i++) {
    if (abf2LinkRegex.test(abf2links[i])) {
      var abf2FilterId = abf2links[i].getAttribute("href").match(/\d+$/);
      if (window.addEventListener) { abf2links[i].addEventListener("mouseover",getAbuseFilterInfo,false); }
      else if (window.attachEvent) { abf2links[i].attachEvent("onmouseover",getAbuseFilterInfo); }
      abf2links[i].id = "abf-filterlink-" + i;
    }
  }
  return true;
}

function getAbuseFilterInfo() {
  if (window.XMLHttpRequest) {
    xhttp=new XMLHttpRequest();
  }
  else {
    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

  var abf2FilterLinkId = this.id.match(/\d+$/);//id html

  var abf2FilterInfoCheck = document.getElementById("abf-filterinfo-" + abf2FilterLinkId);
  if (abf2FilterInfoCheck) { 
    if (document.getElementById("abf-filterinfo-" + abf2FilterLinkId).style.display == "none") {
      document.getElementById("abf-filterinfo-" + abf2FilterLinkId).style.display = "inline";
      document.getElementById("abf-filterlink-" + abf2FilterLinkId).removeEventListener("mouseover",getAbuseFilterInfo,false);
    }
    else {
      document.getElementById("abf-filterinfo-" + abf2FilterLinkId).style.display = "none";
      document.getElementById("abf-filterlink-" + abf2FilterLinkId).addEventListener("mouseover",getAbuseFilterInfo,false);
    }
    return true;
  }

  var abf2FilterHref = this.getAttribute("href");
  var abf2FilterId = abf2FilterHref.match(/\d+$/);

  xhttp.open("GET","//fr.wikipedia.org/w/api.php?action=query&list=abusefilters&abflimit=1&abfprop=id|description|pattern|hits&format=xml&abfstartid=" + abf2FilterId,false);
  xhttp.send("null");
  var abf2APIXML = xhttp.responseXML;

  var abf2XMLFilterId = abf2APIXML.getElementsByTagName('api')[0].getElementsByTagName('query')[0].getElementsByTagName('abusefilters')[0].getElementsByTagName('filter')[0].getAttribute('id');
  if (abf2XMLFilterId == abf2FilterId) {
    //obtention des infos à partir de l'API, si le filtre correspond bien
    var abf2XMLDescr = abf2APIXML.getElementsByTagName('api')[0].getElementsByTagName('query')[0].getElementsByTagName('abusefilters')[0].getElementsByTagName('filter')[0].getAttribute('description');
    var abf2XMLPattern = abf2APIXML.getElementsByTagName('api')[0].getElementsByTagName('query')[0].getElementsByTagName('abusefilters')[0].getElementsByTagName('filter')[0].getAttribute('pattern');
    var abf2XMLHits = abf2APIXML.getElementsByTagName('api')[0].getElementsByTagName('query')[0].getElementsByTagName('abusefilters')[0].getElementsByTagName('filter')[0].getAttribute('hits');

    var abf2FilterInfo = document.createElement('span');
    abf2FilterInfo.id = "abf-filterinfo-" + abf2FilterLinkId;
    abf2FilterInfo.style.fontSize = ".85em";

    var abf2BullInitial = document.createElement('span');
    abf2BullInitial.innerHTML = " &bull; ";
    abf2FilterInfo.appendChild(abf2BullInitial);

    var abf2FilterInfoHide = document.createElement('span');
    abf2FilterInfoHide.id = "abf-filterinfo-hide-" + abf2FilterLinkId;
    abf2FilterInfoHide.innerHTML = "masquer";
    abf2FilterInfoHide.title = "cliquer pour masquer les informations de ce filtre";
    abf2FilterInfoHide.addEventListener("click",getAbuseFilterInfo,false);
    abf2FilterInfo.appendChild(abf2FilterInfoHide);

    var abf2FilterInfoDescr = document.createElement('span');
    abf2FilterInfoDescr.id = "abf-filterinfo-" + abf2FilterLinkId + "-descr";
    abf2FilterInfoDescr.style.fontStyle = "italic";
    abf2FilterInfoDescr.title = abf2XMLDescr;
    abf2FilterInfoDescr.innerHTML = " &bull; descr";
    abf2FilterInfo.appendChild(abf2FilterInfoDescr);

    var abf2FilterInfoPattern = document.createElement('span');
    abf2FilterInfoPattern.id = "abf-filterinfo-" + abf2FilterLinkId + "-pattern";
    abf2FilterInfoPattern.innerHTML = " &bull; <span onclick=\"toggleAbuseFilterPatternDisplay(" + abf2FilterLinkId + ");\">règle</span>";
    abf2FilterInfo.appendChild(abf2FilterInfoPattern);

    var abf2FilterInfoPatternContent = document.createElement('span');
    abf2FilterInfoPatternContent.id = "abf-filterinfo-" + abf2FilterLinkId + "-patterncontent";
    abf2FilterInfoPatternContent.style.display = "none";
    abf2FilterInfoPatternContent.style.fontSize = ".85em";
    abf2FilterInfoPatternContent.style.color = "#888888";
    abf2FilterInfoPatternContent.innerHTML = "&nbsp;: " + abf2XMLPattern;
    abf2FilterInfoPattern.appendChild(abf2FilterInfoPatternContent);

    var abf2FilterInfoHits = document.createElement('span');
    abf2FilterInfoHits.id = "abf-filterinfo-" + abf2FilterLinkId + "-hits";
    abf2FilterInfoHits.innerHTML = " &bull; <a href=\"//fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Journal_du_filtre_antiabus&wpSearchFilter=" + abf2FilterId + "\">" + abf2XMLHits + "&nbsp;hits</a>";
    abf2FilterInfo.appendChild(abf2FilterInfoHits);

    var abf2FilterInfoLinks = document.createElement('span');
    abf2FilterInfoLinks.id = "abf-filterinfo-" + abf2FilterLinkId + "-links";
    abf2FilterInfoLinks.innerHTML = " &bull; <a href=\"//fr.wikipedia.org/wiki/Sp%C3%A9cial:Filtre_antiabus/history/" + abf2FilterId + "\" title=\"history\">h</a> &bull; " +
    "<a href=\"//fr.wikipedia.org/wiki/Sp%C3%A9cial:Filtre_antiabus/test/" + abf2FilterId + "\" title=\"test\">t</a>";
    abf2FilterInfo.appendChild(abf2FilterInfoLinks);

    document.getElementById("abf-filterlink-" + abf2FilterLinkId).parentNode.insertBefore(abf2FilterInfo,document.getElementById("abf-filterlink-" + abf2FilterLinkId).nextSibling);

    this.removeEventListener("mouseover",getAbuseFilterInfo,false);
  }
  return true;
}
$(addAbuseFilterTrigger);