Utilisateur:Habertix/xpatrol.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) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/*
***************************************************************************
** xpatrol - Permet d'effectuer rapidement certaines actions en patrouille
**   - marquer une révision comme relue sans changer de page
**   - blanchir une page
**   - ajouter un bandeau à une page
**   - masquer les pages blanchies ou n'afficher que celles-ci dans la liste des nouvelles pages
**   - masquer les pages supprimées dans le journal des filtrages
**   - visualiser l'historique et le journal des articles dans le journal des filtrages
**   - demander une purge d'historique et avertir l'auteur de la révision purgée
** Compatibilité : frwiki uniquement
** Support : Discussion_utilisateur:Arkanosis
** Licence : MIT/X11
**
** Installation : ajouter
**  importScript('User:Arkanosis/xpatrol.js');
** dans le common.js
*/

if (typeof (xpatrolEnableClear) == 'undefined')
  var xpatrolEnableClear = false;
if (typeof (xpatrolEnableBanner) == 'undefined')
  var xpatrolEnableBanner = false;
if (typeof (xpatrolEnablePurge) == 'undefined')
  var xpatrolEnablePurge = false;
if (typeof (xpatrolPurgeWarnEditor) == 'undefined')
  var xpatrolPurgeWarnEditor = false;
if (typeof (xpatrolWatchMain) == 'undefined')
  var xpatrolWatchMain = false;
if (typeof (xpatrolWatchOthers) == 'undefined')
  var xpatrolWatchOthers = false;
if (typeof (xpatrolSignatureRegistered) == 'undefined')
  var xpatrolSignatureRegistered = '~~' + '~~';
if (typeof (xpatrolSignatureAnonymous) == 'undefined')
  var xpatrolSignatureAnonymous = '~~' + '~~';
if (typeof (xpatrolCopyvioWarningTemplate) == 'undefined')
  var xpatrolCopyvioWarningTemplate = 'Copieur';

var xpatrolEmptyNewPagesNextState = 0;
var xpatrolNonEmptyNewPagesNextState = 0;
var xpatrolAbusedPagesNextState = 0;
var xpatrolToggleTexts = [ 'afficher', 'masquer' ];
var xpatrolStates = [ 'none', 'list-item' ];

var xpatrolNonExistingPage = new RegExp('sur <a href="/w/index\\.php\\?title=[^"]+redlink=1"');
var xpatrolRevision = new RegExp('(title=(.+?)&amp;diff=[0-9]+&amp;oldid=([0-9]+)"[^>]+?>)?actu(</a>)? \\|.+?(title=(.+?)&amp;diff=([0-9]+)&amp;oldid=([0-9]+)"[^>]+?>)?diff.+?>([0-9]{1,2} [a-zéû]+ [0-9]{4} .+?)<.*?href="/wiki/Sp%C3%A9cial:Contributions/([^"]+)".*?</span>‎ (<abbr class="minoredit")?.*?\\(([+-]?[0-9]+)(.+?octets)?\\).+?(<span class="comment">\\((<span class="autocomment">(<a .+?</a>)?(.+?)(:\\s*)?</span>)?\\s*(.*?)\\)</span>)? (\\(|</div>|$)');
var xpatrolDPH = 'Wikipédia:Demande de purge d\'historique';

function month(id)
{
  return  ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'][id];
}

function xpatrolToggleEmptyNewPages()
{
  var lis = document.getElementById('bodyContent').getElementsByTagName('li');
  for (var liId = 0; liId < lis.length; ++liId)
    if (lis[liId].innerHTML.indexOf('[0 octet]') != -1)
    {
      lis[liId].style.display = xpatrolStates[xpatrolEmptyNewPagesNextState];
    }
  document.getElementById('xpatrol-ToggleEmptyNewPages').innerHTML = xpatrolToggleTexts[xpatrolEmptyNewPagesNextState];
  xpatrolEmptyNewPagesNextState = !xpatrolEmptyNewPagesNextState + 0;
}

function xpatrolToggleNonEmptyNewPages()
{
  var lis = document.getElementById('bodyContent').getElementsByTagName('li');
  for (var liId = 0; liId < lis.length; ++liId)
    if (lis[liId].innerHTML.indexOf('[0 octet]') == -1)
    {
      lis[liId].style.display = xpatrolStates[xpatrolNonEmptyNewPagesNextState];
    }
  document.getElementById('xpatrol-ToggleNonEmptyNewPages').innerHTML = xpatrolToggleTexts[xpatrolNonEmptyNewPagesNextState];
  xpatrolNonEmptyNewPagesNextState = !xpatrolNonEmptyNewPagesNextState + 0;
}

function xpatrolToggleAbusedPages()
{
  var lis = document.getElementsByTagName('li');
  for (var liId = 0; liId < lis.length; ++liId)
    if (xpatrolNonExistingPage.exec(lis[liId].innerHTML))
    {
      lis[liId].style.display = xpatrolStates[xpatrolAbusedPagesNextState];
    }
  document.getElementById('xpatrol-ToggleAbusedPages').innerHTML = xpatrolToggleTexts[xpatrolAbusedPagesNextState];
  xpatrolAbusedPagesNextState = !xpatrolAbusedPagesNextState + 0;

  document.getElementById('xpatrolHideDeleted').setAttribute('value', xpatrolAbusedPagesNextState);
}

function xpatrolCheck(url, tag)
{
  var request = new XMLHttpRequest();
  request.open('GET', mw.config.get('wgServer') + url + '%2B%5C', false);
  request.send('');

  var elts = document.getElementsByTagName(tag);
  for (var eltId = 0; eltId < elts.length; ++eltId)
    if (elts[eltId].className == 'patrollink')
    {
      elts[eltId].childNodes[1].innerHTML = '<img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png" /> Révision marquée comme relue';
      return;
    }
}

function xpatrolReload(callback)
{
  $.ajax(mw.util.getUrl(mw.config.get('wgPageName')) + '?action=render').done(function(html) {
    $('#mw-content-text').html(html);
    if (callback) callback();
  }).error(function() {
    $('#mw-content-text').text("Impossible de recharger la page");
    if (callback) callback();
  });
}

function xpatrolEdit(article, mode, text, section, reason, button, callback)
{
  function afterReload() {
    if (button)
    {
      var link = document.getElementById(button);
      link.innerHTML = '<img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png" /> ' + link.innerHTML;
    }
    if (callback) callback();
  }
  function afterEdit(data) {
    if (article == mw.config.get('wgPageName')) {
      if (!text)
        $('#mw-content-text').remove();
      else
      {
        xpatrolReload(afterReload);
        return;
      }
    }
    afterReload();
  }
  function onFailure() {
    alert("Impossible d'enregistrer la page " + article);
  }

  var data = {format: 'json', title: article, token: mw.user.tokens.get('csrfToken'),
      summary: section + '[[Discussion_utilisateur:Arkanosis/xpatrol.js|xpatrol]] : ' + reason};
  data[mode] = text;
  if (xpatrolWatchOthers || xpatrolWatchMain && !mw.config.get('wgNamespaceNumber'))
    data.watchlist = 'watch';
  if (!data.token || data.token.length <= 2)
    alert("Vous n'êtes plus connecté");
  else
    $.post(mw.util.wikiScript('api') + '?action=edit', data, afterEdit).error(onFailure);
}

function xpatrolClear(article, reason, button)
{
  if (!confirm('Blanchir l\'article ' + article + ' pour ' + reason + ' ?'))
    return;

  xpatrolEdit(article, 'text', '', '', reason, button);
}

function xpatrolAddBanner(article, banner, reason, button)
{
  if (!confirm('Ajouter le bandeau ' + banner + ' à l\'article ' + article + ' pour ' + reason + ' ?'))
    return;

  xpatrolEdit(article, 'prependtext', '{{' + banner + '}}\n\n', '', reason, button);
}

function xpatrolAddCheckLinks(tag)
{
  var elts = document.getElementsByTagName(tag);
  for (var eltId = 0; eltId < elts.length; ++eltId)
    if (elts[eltId].className == 'patrollink')
    {
      var link = elts[eltId].childNodes[1];
      var url = link.getAttribute('href');
      link.setAttribute('href', 'javascript:xpatrolCheck("' + url.substring(0, url.length - 6) + '", "' + tag + '");');
      break;
    }
}

function xpatrolAskForPurge()
{
  var url = document.getElementById('xpatrolPurgeUrl').value;
  var warning = document.getElementById('xpatrolPurgeWarning');
  if (!url)
  {
    warning.setAttribute('style', 'color: red;');
    warning.innerHTML = 'Préciser l\'adresse de la source copiée';
    return;
  }
  warning.innerHTML = '';

  var history = document.getElementById('pagehistory');
  var lis = document.getElementsByTagName('li');
  var firstRevisionToPurge = 0;
  var lastRevisionToPurge = 0;
  for (var liId = 0; liId < lis.length; ++liId)
  {
    var inputs = lis[liId].getElementsByTagName('input');
    if (inputs.length > 1 && inputs[1].checked)
    {
      lastRevisionToPurge = liId;
      break;
    }
  }
  var revisionsToPurge = [];
  for (var liId = lastRevisionToPurge + 1; liId < lis.length; ++liId)
  {
    revisionsToPurge.push(lis[liId].innerHTML);
    if (lis[liId].getElementsByTagName('input')[0].checked)
    {
      firstRevisionToPurge = liId;
      break;
    }
  }

  function htmlToWiki(html)
  {
    return html
      .replace(new RegExp('<a href="/wiki/([^"]+)"[^>]*?>(.+?)</a>', 'g'), '[[$1|$2]]')
      .replace(new RegExp('<a href="/w/index\\.php\\?title=([^"]+)&amp;action=edit&amp;redlink=1"[^>]*?>(.+?)</a>', 'g'), '[[$1|$2]]')
      .replace(new RegExp('<a href="(/w/index\\.php\\?title=[^"]+)"[^>]*?>(.+?)</a>', 'g'), '[' + mw.config.get('wgServer') + '$1 $2]')
      .replace(new RegExp('<a href="(https?:)?//([^\\.]+)\\.wikipedia.org/wiki/([^"]+)"[^>]*?>(.+?)</a>', 'g'), '[[$2:$3|$4]]')
      .replace(new RegExp('(\\{\\{.+?\\}\\})', 'g'), '<nowiki>$1</nowiki>')
      .replace('[[Cat', '[[:Cat')
    ;
  }

  function convertRevision(revision)
  {
    var values = xpatrolRevision.exec(revision.replace(/&nbsp;/g, ''));

    if (!values)
      alert('Bravo vous avez trouvé un bug dans xpatrol !\nMerci de bien vouloir copier le texte suivant sur [[Discussion utilisateur:Arkanosis]]\n\n' + revision);

    var result = '{{Révision|';

    if (typeof (values[5]) != 'undefined')
      result += decodeURIComponent(values[6]).replace(/ /g, '_') + '|' // title
             + values[8] + '|' // before
             + values[7] + '|' // after
             + values[9] + '|'; // date
    else
      result += decodeURIComponent(values[2]).replace(/ /g, '_') + '|' // title
             + 0 + '|' // before
             + values[3] + '|' // after
             + values[9] + '|'; // date

    if (typeof (values[11]) != 'undefined')
      result += 'm';

    result += '|' + values[12]; // size

    if (/^[0-9.]+$/.exec(values[10]))
      result += '|ip=' + values[10];
    else
      result += '|u=' + decodeURIComponent(values[10]);

    if (typeof (values[17]) != 'undefined')
      result += '|auto=' + htmlToWiki(values[17]);

    if (typeof (values[19]) != 'undefined')
      result += '|commentaire=' + htmlToWiki(values[19]);

    result += '}}';

    return result;
  }

  var firstRevisionToPurgeText = convertRevision(lis[firstRevisionToPurge].innerHTML);
  var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
  var text = '== {{a-court|' + pageName + '}} ==\n\n'
           + '{{RA début|traitée=|date=<!--~~' + '~' + '~~-->}}'
           + '\nCopie de site web sans autorisation explicite. Page copiée :\n* ' + url
           + '\n\nPremier ajout de la copie :\n* ' + firstRevisionToPurgeText
           + '\n\nRetrait de la copie :\n* ' + convertRevision(lis[lastRevisionToPurge].innerHTML)
           + '\n\n' + revisionsToPurge.length + ' révision' + (revisionsToPurge.length > 1 ? 's' : '') + ' à purger.'
           + '\n\n' + xpatrolSignatureRegistered
           + '\n\n{{RA fin}}';

  var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
  xpatrolEdit(xpatrolDPH, 'appendtext', '\n' + text, '/* {{a-court|' + pageName + '}} */', 'demande de purge d\'historique sur « [[' + pageName + ']] »', 0, function() {
    warning.setAttribute('style', 'color: green;');
    warning.innerHTML = 'Purge <a href="' + mw.util.getUrl(xpatrolDPH) + '" title="Demande de purge d\'historique">demandée</a> avec succès';

    if (document.getElementById('xpatrolWarnEditor').checked)
    {
      var editor = /\|(u=|ip=)(.+?)[\|\}]/.exec(firstRevisionToPurgeText)[2];

      var warningMessage = '== [[' + pageName + ']] ==\n\n{{subst' + ':' + xpatrolCopyvioWarningTemplate + '|' + pageName + '|2=' + url + '}}' + xpatrolSignatureAnonymous;

      xpatrolEdit('Discussion utilisateur:' + editor, 'appendtext', '\n' + warningMessage, '/* ' + pageName + '*/', 'violation de droits d\'auteur sur « [[' + pageName + ']] »', 0, function() {
        warning.innerHTML += ', contributeur « ' + editor + ' » <a href="/wiki/Discussion utilisateur:' + editor + '" title="Page de discussion du contributeur">averti</a>';
      });
    }
  });
}

function xpatrolAskForPurgeHabertix()
{
  var url = document.getElementById('xpatrolPurgeUrl').value;
  var warning = document.getElementById('xpatrolPurgeWarning');
  if (!url)
  {
    warning.setAttribute('style', 'color: red;');
    warning.innerHTML = 'Préciser l\'adresse de la source copiée';
    return;
  }
  warning.innerHTML = '';

  var history = document.getElementById('pagehistory');
  var lis = document.getElementsByTagName('li');
  var firstRevisionToPurge = 0;
  var lastRevisionToPurge = 0;
  for (var liId = 0; liId < lis.length; ++liId)
  {
    var inputs = lis[liId].getElementsByTagName('input');
    if (inputs.length > 1 && inputs[1].checked)
    {
      lastRevisionToPurge = liId;
      break;
    }
  }
  var revisionsToPurge = [];
  for (var liId = lastRevisionToPurge + 1; liId < lis.length; ++liId)
  {
    revisionsToPurge.push(lis[liId].innerHTML);
    if (lis[liId].getElementsByTagName('input')[0].checked)
    {
      firstRevisionToPurge = liId;
      break;
    }
  }

  function htmlToWiki(html)
  {
    return html
      .replace(new RegExp('<a href="/wiki/([^"]+)"[^>]*?>(.+?)</a>', 'g'), '[[$1|$2]]')
      .replace(new RegExp('<a href="/w/index\\.php\\?title=([^"]+)&amp;action=edit&amp;redlink=1"[^>]*?>(.+?)</a>', 'g'), '[[$1|$2]]')
      .replace(new RegExp('<a href="(/w/index\\.php\\?title=[^"]+)"[^>]*?>(.+?)</a>', 'g'), '[' + mw.config.get('wgServer') + '$1 $2]')
      .replace(new RegExp('<a href="(https?:)?//([^\\.]+)\\.wikipedia.org/wiki/([^"]+)"[^>]*?>(.+?)</a>', 'g'), '[[$2:$3|$4]]')
      .replace(new RegExp('(\\{\\{.+?\\}\\})', 'g'), '<nowiki>$1</nowiki>')
      .replace('[[Cat', '[[:Cat')
    ;
  }

  function convertRevision(revision)
  {
    var values = xpatrolRevision.exec(revision.replace(/&nbsp;/g, ''));

    var habertix = revision.replace(/&nbsp;/g, '')

    if (!habertix)
      alert('Echec dans revision.replace');


    if (!values)
    {
      alert('Bravo vous avez trouvé un bug dans xpatrol !\nMerci de bien vouloir copier le texte suivant sur [[Discussion utilisateur:Arkanosis]]\n\n' + revision.replace(/&nbsp;/g, ''));
      if (!confirm("Est-ce la création de la page ?"))
         return;
      return 'Création de la page';
    }

    else
      alert('Là c\'est bon\n\n' + revision.replace(/&nbsp;/g, ''));

    var result = '{{Révision|';

    if (typeof (values[5]) != 'undefined')
      result += decodeURIComponent(values[6]).replace(/ /g, '_') + '|' // title
             + values[8] + '|' // before
             + values[7] + '|' // after
             + values[9] + '|'; // date
    else
      result += decodeURIComponent(values[2]).replace(/ /g, '_') + '|' // title
             + 0 + '|' // before
             + values[3] + '|' // after
             + values[9] + '|'; // date

    if (typeof (values[11]) != 'undefined')
      result += 'm';

    result += '|' + values[12]; // size

    if (/^[0-9.]+$/.exec(values[10]))
      result += '|ip=' + values[10];
    else
      result += '|u=' + decodeURIComponent(values[10]);

    if (typeof (values[17]) != 'undefined')
      result += '|auto=' + htmlToWiki(values[17]);

    if (typeof (values[19]) != 'undefined')
      result += '|commentaire=' + htmlToWiki(values[19]);

    result += '}}';

    return result;
  }

  var firstRevisionToPurgeText = convertRevision(lis[firstRevisionToPurge].innerHTML);
  var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
  var text = '== {{a-court|' + pageName + '}} ==\n\n'
           + '{{RA début|traitée=|date=<!--~~' + '~' + '~~-->}}'
           + '\nCopie de site web sans autorisation explicite. Page copiée :\n* ' + url
           + '\n\nPremier ajout de la copie :\n* ' + firstRevisionToPurgeText
           + '\n\nRetrait de la copie :\n* ' + convertRevision(lis[lastRevisionToPurge].innerHTML)
           + '\n\n' + revisionsToPurge.length + ' révision' + (revisionsToPurge.length > 1 ? 's' : '') + ' à purger.'
           + '\n\n' + xpatrolSignatureRegistered
           + '\n\n{{RA fin}}';

  var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
  xpatrolEdit('Utilisateur:Habertix/DPHlocale', 'appendtext', '\n' + text, '/* {{a-court|' + pageName + '}} */', 'demande de purge d\'historique sur « [[' + pageName + ']] »', 0, function() {
    warning.setAttribute('style', 'color: green;');
    warning.innerHTML = 'Purge <a href="' + mw.util.getUrl('Utilisateur:Habertix/DPHlocale') + '" title="Demande de purge d\'historique">demandée</a> avec succès';

    if (document.getElementById('xpatrolWarnEditor').checked)
    {
      var editor = /\|(u=|ip=)(.+?)[\|\}]/.exec(firstRevisionToPurgeText)[2];

      var warningMessage = '== [[' + pageName + ']] ==\n\n{{subst' + ':' + xpatrolCopyvioWarningTemplate + '|' + pageName + '|2=' + url + '}}' + xpatrolSignatureAnonymous;

      xpatrolEdit('Discussion utilisateur:' + editor, 'appendtext', '\n' + warningMessage, '/* ' + pageName + '*/', 'violation de droits d\'auteur sur « [[' + pageName + ']] »', 0, function() {
        warning.innerHTML += ', contributeur « ' + editor + ' » <a href="/wiki/Discussion utilisateur:' + editor + '" title="Page de discussion du contributeur">averti</a>';
      });
    }
  });
}

/* fin de xpatrolAskForPurgeHabertix */

function xpatrolAddHistoryLinks()
{
  var purge = '<input type="submit" value="Demander une purge des versions sélectionnées" class="historysubmit" accesskey="p" title="Demander une purge des versions sélectionnées" onClick="javascript:xpatrolAskForPurge(); return false;" />'
+ '<input type="submit" value="Demander locale Habertix" class="historysubmit" accesskey="p" title="Demande Habertix" onClick="javascript:xpatrolAskForPurgeHabertix(); return false;" />'
+ '<input type="checkbox" accesskey="a" id="xpatrolWarnEditor" ' + (xpatrolPurgeWarnEditor ? 'checked="checked"' : '') + '/> <label for="xpatrolWarnEditor">Avertir le contributeur de la demande de purge d\'historique</label> — <label for="xpatrolPurgeUrl">Source copiée</label> : <input type="text" id="xpatrolPurgeUrl" /><strong id="xpatrolPurgeWarning"></strong>';
  var form = document.getElementById('mw-history-compare');
  form.childNodes[5].innerHTML += purge;
}

function xpatrolAddNewPagesLinks()
{
  var tds = document.getElementsByTagName('td');
  for (var tdId = 0; tdId < tds.length; ++tdId)
    if (tds[tdId].className == 'mw-input')
    {
      tds[tdId].innerHTML = tds[tdId].innerHTML.replace('</a> les redirections', '</a> les redirections | <a id="xpatrol-ToggleEmptyNewPages" href="javascript:xpatrolToggleEmptyNewPages();" title="Spécial:Nouvelles pages">masquer</a> les pages blanchies | <a id="xpatrol-ToggleNonEmptyNewPages" href="javascript:xpatrolToggleNonEmptyNewPages();" title="Spécial:Nouvelles pages">masquer</a> les pages non blanchies');
    }
}

function xpatrolAddClearLink(label, hint, message)
{
  var body = document.getElementById('bodyContent');

  var link = document.createElement('a');
  link.setAttribute('href', 'javascript:xpatrolClear("' + mw.config.get('wgPageName') + '", "' + message + '", "xpatrol-' + label + '");');
  link.setAttribute('id', 'xpatrol-' + label);
  link.setAttribute('title', hint);
  link.appendChild(document.createTextNode(' ' + label + ' '));

  document.getElementById('content').insertBefore(link, body);
}

function xpatrolAddClearLinks()
{
  xpatrolAddClearLink('BàS', 'Bac à sable', '[[Wikipédia:Bac à sable|Bac à sable]]');
  xpatrolAddClearLink('PeF', 'Pas en français', 'Article intégralement rédigé dans une langue autre que le français');
  xpatrolAddClearLink('HC', 'Hors critères d\'admissibilité des articles', '[[WP:CAA|Critères d\'admissibilité non atteints]]');
  xpatrolAddClearLink('NEEE', 'Non encyclopédique en l\'état', 'Non encyclopédique en l\'état');
  xpatrolAddClearLink('Promo', 'Contenu à caractère promotionnel', 'Contenu à caractère promotionnel');
  xpatrolAddClearLink('Spam', 'Spam et / ou liens externes non appropriés', 'Spam');
  xpatrolAddClearLink('Diffm', 'Diffamation', 'Diffamation');
  xpatrolAddClearLink('Copie', 'Copie d\'un article existant de Wikipédia', 'Copie de l\'article [[" + prompt("Quel est l\'article de Wikipédia copié ?", "") + "]]');
  xpatrolAddClearLink('Cpvio', 'Violation de droit d\'auteur', 'Violation de [[Wikipédia:Droit d\'auteur|droit d\'auteur]] (" + prompt("Quelle est la source copiée illégalement ?", "") + ")');
}

function xpatrolAddBannerLink(label, hint, banner, message)
{
  var body = document.getElementById('bodyContent');

  var link = document.createElement('a');
  link.setAttribute('href', 'javascript:xpatrolAddBanner("' + mw.config.get('wgPageName') + '", "' + banner + '", "' + message + '", "xpatrol-' + label + '");');
  link.setAttribute('id', 'xpatrol-' + label);
  link.setAttribute('title', hint);
  link.appendChild(document.createTextNode(' ' + label + ' '));

  document.getElementById('content').insertBefore(link, body);
}

function xpatrolAddBannerLinks()
{
  var today = new Date();
  var date = '|date=' + month(today.getMonth()) + ' ' + (1900 + today.getYear());

  if (xpatrolEnableClear)
    document.getElementById('content').insertBefore(document.createTextNode(' — '), document.getElementById('bodyContent'));

  xpatrolAddBannerLink('?', 'Incompréhensible dans l’état actuel', '?', '[[WP:RI|Incompréhensible dans l\’état actuel]]');
  xpatrolAddBannerLink('Pub', 'Ton trop promotionnel ou publicitaire', 'pub', '[[WP:POV|Ton trop promotionnel ou publicitaire]]');
  xpatrolAddBannerLink('Admi', 'Admissibilité à vérifier', 'admissibilité' + date, '[[WP:CAA|Admissibilité à vérifier]]');
  xpatrolAddBannerLink('Orth', 'Orthographe et grammaire à vérifier', 'Orthographe', 'Orthographe et grammaire à vérifier');
  xpatrolAddBannerLink('Redac', 'Style non encyclopédique', 'Rédaction', '[[WP:STYLE|Style non encyclopédique]]');
  xpatrolAddBannerLink('Wikif', 'À wikifier', 'À wikifier' + date, '[[Aide:Wikification|À wikifier]]');
  xpatrolAddBannerLink('MàJ', 'À mettre à jour', 'Mettre à jour', 'À mettre à jour');
  xpatrolAddBannerLink('Src', 'À sourcer', 'À sourcer' + date, '[[WP:REF|À sourcer]]');
  xpatrolAddBannerLink('Src2', 'Manque de sources secondaires', 'Sources secondaires' + date, '[[WP:SPS|Manque de sources secondaires]]');
  xpatrolAddBannerLink('TI', 'Travail inédit', 'Travail inédit', '[[WP:TI|Travail inédit]]');
  xpatrolAddBannerLink('CpVer', 'Soupçon de violation de droit d\'auteur', 'Copie à vérifier|" + prompt("Quelle est la source copiée illégalement ?", "") + "', 'Soupçon de violation de [[Wikipédia:Droit d\'auteur|droit d\'auteur]]');
  xpatrolAddBannerLink('PàS', 'Proposition de suppression', 'Suppression', '[[WP:PàS|Proposition de suppression]]');
  xpatrolAddBannerLink('R3R', 'Guerre d\'édition', 'R3R', '[[WP:R3R|Règle des trois révocations]]');
}

function xpatrolAddAbuseFilterLinks()
{
  var link = new RegExp('(sur <a href="/wiki/([^"]+)" title="[^"]+">[^<]+</a>)(\.\nActions prises)');

  if (location.href.indexOf('&details=') != -1)
    var lis = document.getElementsByTagName('p');
  else
    var lis = document.getElementsByTagName('li');

  for (var liId = 0; liId < lis.length; ++liId)
  {
    var match = link.exec(lis[liId].innerHTML);
    if (match)
      lis[liId].innerHTML = lis[liId].innerHTML.replace(match[0], match[1] + ' (<a href="' + mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + match[2] + '&action=history" title="historique">h</a> · <a href="' + mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=Spécial:Log&page=' + match[2] + '" title="journaux">j</a>)' + match[3]);
  }

  var fieldSet = document.getElementsByTagName('fieldset')[0];
  fieldSet.innerHTML = fieldSet.innerHTML.replace('</td></tr></tbody>', '</td></tr><tr><td></td><td class="mw-input"><a id="xpatrol-ToggleAbusedPages" href="javascript:xpatrolToggleAbusedPages();" title="Journal des filtrages">masquer</a> les pages supprimées</td></tr></tbody>');

  document.getElementsByTagName('form')[0].innerHTML = document.getElementsByTagName('form')[0].innerHTML.replace('<input value="Rechercher" type="submit">', '<input value="Rechercher" type="submit"><input type="hidden" value="0" name="xpatrolHideDeleted" id="xpatrolHideDeleted">');

  if (location.href.indexOf('xpatrolHideDeleted=1') != -1)
    xpatrolToggleAbusedPages();
}

function xpatrol()
{
  if (location.href.indexOf('&diff') != -1)
    xpatrolAddCheckLinks('span');
  else if (location.href.indexOf('&action=history') != -1)
  {
    if (xpatrolEnablePurge)
      xpatrolAddHistoryLinks();
  }
  else if (mw.config.get('wgPageName') == 'Spécial:Nouvelles_pages')
    xpatrolAddNewPagesLinks();
  else if (mw.config.get('wgPageName') == 'Spécial:Journal_du_filtre_antiabus')
    xpatrolAddAbuseFilterLinks();
  else
  {
    if (location.href.indexOf('&rcid') != -1)
      xpatrolAddCheckLinks('div');
    if (document.getElementById('ca-edit'))
    {
      if (xpatrolEnableClear && mw.config.get('wgUserGroups').indexOf('autoconfirmed') != -1)
        xpatrolAddClearLinks();
      if (xpatrolEnableBanner)
        xpatrolAddBannerLinks();
    }
  }
}

$(xpatrol);