Utilisateur:Skippy le Grand Gourou/accueil nouveaux.js

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.
/* Version modifiée pour l'accueil des nouveaux, mais pas nettoyée !!! */

/*
***************************************************************************
** 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 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('Utilisateur:Arkanosis/xpatrol.js');
** dans le monobook.js
*/

Node.prototype.insertAfter = function(noeudAInserer, noeudDeReference) {
	if(noeudDeReference.nextSibling) {
		return this.insertBefore(noeudAInserer, noeudDeReference.nextSibling);
	} else {
		return this.appendChild(noeudAInserer);
	}
}

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 = '~~' + '~~';

var xpatrolEmptyNewPagesNextState = 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('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="minor")?.*?\\(([+-]?[0-9]+)\\).+?(<span class="comment">\\((<span class="autocomment">(<a .+?</a>)?(.+?)(:\\s*)?</span>)?\\s*(.*?)\\)</span>)? \\(');

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.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 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="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png" /> Révision marquée comme relue';
      return;
    }
}

function xpatrolEdit(article, text, reason, button)
{
  var request = new XMLHttpRequest();
  request.open('GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + encodeURIComponent(article) + '&action=edit', false);
  request.send('');

  var parser = new DOMParser();
  var response = parser.parseFromString(request.responseText, 'application/xhtml+xml');

  if (text)
  {
    var previousText = response.getElementById('wpTextbox1').value;
    text = text.replace('$$text$$', previousText);
  }

  var inputs = response.getElementById('editform').getElementsByTagName('input');
  for (inputId = 0; inputId < inputs.length; ++inputId)
    switch (inputs[inputId].name)
    {
      case 'wpStarttime':
        var wpStarttime = inputs[inputId].value;
        break;
      case 'wpEdittime':
        var wpEdittime = inputs[inputId].value;
        break;
      case 'wpEditToken':
        var wpEditToken = inputs[inputId].value;
        break;
      default:
        break;
    }

  var parameters = 'wpSave=1'
    + '&wpTextbox1=' + encodeURIComponent(text)
    + '&wpStarttime=' + encodeURIComponent(wpStarttime)
    + '&wpEdittime=' + encodeURIComponent(wpEdittime)
    + '&wpEditToken=' + encodeURIComponent(wpEditToken)
    + '&wpSummary=' + encodeURIComponent(reason);

  if (xpatrolWatchOthers || xpatrolWatchMain && !mw.config.get('wgNamespaceNumber') || response.getElementById('wpWatchthis').checked)
    parameters += '&wpWatchthis=on';

  request.open('POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + encodeURIComponent(article) + '&action=submit', true);

  request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  request.setRequestHeader('Content-length', parameters.length);
  request.setRequestHeader('Connection', 'close');

  request.send(parameters);

  // TODO reload the page content instead (another AJAX request)
  if (!text)
    document.getElementById('content').removeChild(document.getElementById('bodyContent'));

  if (button)
  {
    link = document.getElementById(button);
    link.innerHTML = '<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png" /> ' + link.innerHTML;
  }
}

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

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

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

  xpatrolEdit(article, '{{' + banner + '}}\n\n$$text$$', 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];
      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="http://([^\\.]+)\\.wikipedia.org/wiki/([^"]+)"[^>]*?>(.+?)</a>', 'g'), '[[$1:$2|$3]]')
      .replace(new RegExp('(\\{\\{.+?\\}\\})', 'g'), '<nowiki>$1</nowiki>')
    ;
  }

  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|'
      + decodeURIComponent(values[2]).replace(/ /g, '_') + '|' // title                                                                                                                                                                                 
      + values[4] + '|' // before                                                                                                                                                                                
      + values[3] + '|' // after                                                                                                                                                                                 
      + values[5] + '|'; // date

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

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

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

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

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

    result += '}}';

    return result;
  }

  var firstRevisionToPurgeText = convertRevision(lis[firstRevisionToPurge].innerHTML);
  var text = '== {{a-court|' + mw.config.get('wgPageName').replace(/_/g, ' ') + '}} ==\n\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{{boîte déroulante/début|titre=' + revisionsToPurge.length + ' révision' + (revisionsToPurge.length > 1 ? 's' : '') + ' à purger}}';
  for (var revisionId = 0; revisionId < revisionsToPurge.length; ++revisionId)
    text += '\n* ' + convertRevision(revisionsToPurge[revisionId]);
  text += '\n{{boîte déroulante/fin}}' + xpatrolSignatureRegistered;

  var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
  xpatrolEdit('Wikipédia:Demande de purge d\'historique', '$$text$$\n' + text, 'demande de purge d\'historique sur « [[' + pageName + ']] »', 0);

  var warning = document.getElementById('xpatrolPurgeWarning');
  warning.setAttribute('style', 'color: green;');
  warning.innerHTML = 'Purge <a href="/wiki/Wikipédia:Demande de purge d\'historique" 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' + ':Copieur|' + pageName + '|' + url + '}}' + xpatrolSignatureAnonymous;

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

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="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');
    }
}

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 + '", "' + label + '");');
  link.setAttribute('id', 'xpatrol-' + label);
  link.setAttribute('title', hint);
  link.appendChild(document.createTextNode(' ' + label + ' '));

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

function xpatrolAddClearLinks()
{
/* Fonction inutilisée !
  xpatrolAddClearLink('Test0', 'Test 0', '[[Wikipédia:Bac à sable|Bac à sable]]');
  xpatrolAddClearLink('Test1', 'Test 1', '[[WP:CAA|Critères d\'admissibilité non atteints]]');
  xpatrolAddClearLink('Test2', 'Test 2', 'Non encyclopédique en l\'état');
  xpatrolAddClearLink('Test3', 'Test 3', 'Contenu à caractère promotionnel');
  xpatrolAddClearLink('Cracra', 'Vandalisme cracra', 'Spam');
  xpatrolAddClearLink('Bjr', 'Bonjour IP', 'Diffamation');
  xpatrolAddClearLink('Maladresse', 'Maladresse', 'Copie de l\'article [[" + prompt("Quel est l\'article de Wikipédia copié ?", "") + "]]');
*/
}

function xpatrolAddBannerLinkBefore(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 + '", "' + label + '");');
  link.setAttribute('id', 'xpatrol-' + label);
  link.setAttribute('title', hint);
  link.appendChild(document.createTextNode(' ' + label + ' '));

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

function xpatrolAddBannerLinkAfter(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 + '", "' + label + '");');
  link.setAttribute('id', 'xpatrol-' + label);
  link.setAttribute('title', hint);
  link.appendChild(document.createTextNode(' ' + label + ' '));

//  document.getElementById('content').insertAfter(link, body);
  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'));

  xpatrolAddBannerLinkAfter('Test0', 'Test 0', 'subst:Test 0', 'Test 0');
  xpatrolAddBannerLinkAfter('Test1', 'Test 1', 'subst:Test 1', 'Test 1');
  xpatrolAddBannerLinkAfter('Test2', 'Test 2', 'subst:Test 2', 'Test 2');
  xpatrolAddBannerLinkAfter('Test3', 'Test 3', 'subst:Test 3', 'Test 3');
  xpatrolAddBannerLinkAfter('Cracra', 'Vandalisme cracra', 'subst:vandalisme cracra', 'Vandalisme cracra');
  xpatrolAddBannerLinkAfter('Bjr', 'Bonjour IP', 'subst:Bonjour IP', 'Bonjour IP');
  xpatrolAddBannerLinkAfter('Bravo', 'Bravo IP', 'subst:Bravo IP', 'Bravo IP');
  xpatrolAddBannerLinkAfter('Maladresse', 'Maladresse', 'subst:Maladresse|" + prompt("Article", "") + "|" + prompt("Justification", "") + "|" + "ip=" + prompt("IP ?", "") + "', 'Maladresse');
  xpatrolAddBannerLinkBefore('?', 'Incompréhensible dans l’état actuel', '?', '[[WP:RI|Incompréhensible dans l\’état actuel]]');
  xpatrolAddBannerLinkBefore('Pub', 'Ton trop promotionnel ou publicitaire', 'pub', '[[WP:POV|Ton trop promotionnel ou publicitaire]]');
  xpatrolAddBannerLinkBefore('Admi', 'Admissibilité à vérifier', 'admissibilité' + date, '[[WP:CAA|Admissibilité à vérifier]]');
  xpatrolAddBannerLinkBefore('Orth', 'Orthographe et grammaire à vérifier', 'Orthographe', 'Orthographe et grammaire à vérifier');
  xpatrolAddBannerLinkBefore('Redac', 'Style non encyclopédique', 'Rédaction', '[[WP:STYLE|Style non encyclopédique]]');
  xpatrolAddBannerLinkBefore('Wikif', 'À wikifier', 'À wikifier' + date, '[[Aide:Wikification|À wikifier]]');
  xpatrolAddBannerLinkBefore('Src', 'À sourcer', 'À sourcer' + date, '[[WP:REF|À sourcer]]');
  xpatrolAddBannerLinkBefore('TI', 'Travail inédit', 'Travail inédit', '[[WP:TI|Travail inédit]]');
  xpatrolAddBannerLinkBefore('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]]');
  xpatrolAddBannerLinkBefore('PàS', 'Proposition de suppression', 'Suppression', '[[WP:PàS|Proposition de suppression]]');
}

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

addOnloadHook(xpatrol);