Utilisateur:TiChou/t-Revert.js

Un article de Wikipédia, l'encyclopédie libre.

Note : Après avoir publié la page, vous devrez forcer son rechargement pour voir les changements : Mozilla / Konqueror / Firefox : Shift-Ctrl-R, Internet Explorer / Opera : Ctrl-F5, Safari : Cmd-R.

/*
 * t-Revert
 *
 * Outil de révocation et d'avertissement sur les pages de diff
 *
 * Auteur : [[:fr:User:TiChou]]
 * Date création : 24 mars 2007
 * Date révision : 23 août 2007
 * Compatibilité : Firefox 2.x, Opera 9.x
 */
 
if (wgAction == 'view' && /^\?.*\bdiff=\b/.test(location.search)) {
 
  if (typeof(wpfunctions) == "undefined")
    document.write('<script type="text/javascript" src="http://fr.wikipedia.org/w/index.php?title=Utilisateur:TiChou/wpfunctions.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
 
  function doRevert() {
    var chkRevert = document.getElementById('rv-undo');
    var chkAvert = document.getElementById('rv-avert');
 
    if (!chkRevert.checked && !chkAvert.checked) return;
 
    var raison = document.getElementById('rv-raison');
    var message = document.getElementById('rv-message');
    var bouton = document.getElementById('rv-go');
    var contentSub = document.getElementById('contentSub');
 
    chkRevert.disabled = true;
    chkAvert.disabled = true;
    raison.disabled = true;
    message.disabled = true;
    bouton.disabled = true;
 
    var bodyContent = document.getElementById('bodyContent');
 
    var otitle = bodyContent.getElementsByClassName('diff-otitle')[0];
    var ntitle = bodyContent.getElementsByClassName('diff-ntitle')[0];
 
    var undo = ntitle.getElementsByTagName('a')[2].href;
    var regex = new RegExp(/\bundoafter=(\d+)&undo=(\d+)/);
    var match = regex.exec(undo);
    if (!match) return;
    var revid1 = match[1];
    var revid2 = match[2];
    if (revid2 == 0) revid2 = wgCurRevisionId;
 
    var user1 = otitle.getElementsByTagName('br')[0].nextSibling.text;
    var user2 = ntitle.getElementsByTagName('br')[0].nextSibling.text;
    user1 = decodeEntities(user1);
    user2 = decodeEntities(user2);
 
    var div,span,text;
    div = document.createElement('div');
    div.id = 'rv-statut1';
    div.style.display = 'none';
    text = document.createTextNode('Annulation des modifications : ');
    div.appendChild(text);
    span = document.createElement('span');
    div.appendChild(span);
    contentSub.appendChild(div);
 
    div = document.createElement('div');
    div.id = 'rv-statut2';
    div.style.display = 'none';
    text = document.createTextNode('Avertissement de l\'utilisateur ' + user2 + ' : ');
    div.appendChild(text);
    span = document.createElement('span');
    div.appendChild(span);
    contentSub.appendChild(div);
 
    var statut;
    if (chkRevert.checked) {
      statut = document.getElementById('rv-statut1').childNodes[1];
 
      wpEditPage(wgPageName, { undoafter: revid1, undo: revid2 }, startRevert, endRevert, { user1: user1, user2: user2, statut: statut });
    } else {
      statut = document.getElementById('rv-statut2').childNodes[1];
 
      wpEditPage('User Talk:' + user2, {}, startAvert, endAvert, { user2: user2, statut: statut });
    }
 
      statut.parentNode.style.display = 'block';
      statut.style.color = 'orange';
      text = document.createTextNode('en cours');
      statut.appendChild(text);
  }
 
  function startRevert(wpTextbox1, wpSummary, doc, data) {
    data.statut.style.textDecoration = 'blink';
 
    if (!doc.getElementById('wikiDiff')) return { error: stopRevert, data: data };
 
    wpSummary = 'Révocation des modifications de [[Special:Contributions/' + data.user2 + '|' + data.user2 + ']] ;'
            + ' retour à la version de [[';
    if (/^\d+\.\d+\.\d+\.\d+$/.test(data.user1))
      wpSummary += 'Special:Contributions/';
    else
      wpSummary += 'User:';
    wpSummary += data.user1 + '|' + data.user1 + ']]';
    var raison = document.getElementById('rv-raison').value;
    if (raison) wpSummary += ' ; ' + raison;
 
    return { wpTextbox1: wpTextbox1, wpSummary: wpSummary, data: data };
  }
 
  function stopRevert(data) {
    data.statut.style.color = 'red';
    data.statut.style.textDecoration = 'none';
    data.statut.firstChild.textContent = 'impossible de défaire ; conflit avec les modifications intermédiaires';
  }
 
  function endRevert(doc, data) {
    data.statut.style.color = 'green';
    data.statut.style.textDecoration = 'none';
    data.statut.firstChild.textContent = 'faite !';
 
    if (document.getElementById('rv-avert').checked) {
      data.statut = document.getElementById('rv-statut2').childNodes[1];
      data.statut.parentNode.style.display = 'block';
      data.statut.style.color = 'orange';
      text = document.createTextNode('en cours');
      data.statut.appendChild(text);
 
      wpEditPage('User Talk:' + data.user2, {}, startAvert, endAvert, data);
    } else {
      window.location.replace(wgServer + wgScriptPath + '/index.php?title=' + wpURLEncode(wgPageName) + '&diff=cur&oldid=' + wgCurRevisionId);
    }
  }
 
  function startAvert(wpTextbox1, wpSummary, doc, data) {
    data.statut.style.textDecoration = 'blink';
 
    var message = document.getElementById('rv-message').value;
    wpSummary = 'Avertissement ! ' + lstAvert[message].string + ' !';
 
    wpTextbox1 = '{{subst:' + lstAvert[message].template + (lstAvert[message].hasPage ? '|' + wgPageName.replace(/_/g, ' ') : '') + '}}\u007E\u007E\u007E\u007E\n' + wpTextbox1;
 
    return { wpTextbox1: wpTextbox1, wpSummary: wpSummary, data: data };
  }
 
  function endAvert(doc, data) {
    data.statut.style.color = 'green';
    data.statut.style.textDecoration = 'none';
    data.statut.firstChild.textContent = 'fait !';
 
    if (document.getElementById('rv-undo').checked)
      window.location.replace(wgServer + wgScriptPath + '/index.php?title=' + wpURLEncode(wgPageName) + '&diff=cur&oldid=' + wgCurRevisionId);
  }
 
  function tRevert() {
    var Content = document.getElementById('content');
    if (Content.getElementsByClassName('firstrevisionheader').length) return;
 
    var contentSub = document.getElementById('contentSub');
    //contentSub.removeChild(contentSub.firstChild);
 
    var text,input,label,select,option,button,br,div;
 
    br = document.createElement('br');
    contentSub.appendChild(br);
 
    contentSub.style.fontSize = '100%';
 
    input = document.createElement('input');
    input.id = 'rv-undo';
    input.name = 'rv-undo';
    input.type = 'checkbox';
    input.checked = true;
    input.style.verticalAlign = 'middle';
    contentSub.appendChild(input);
 
    label = document.createElement('label');
    label.setAttribute('for', 'rv-undo');
    text = document.createTextNode('défaire');
    label.appendChild(text);
    contentSub.appendChild(label);
 
    text = document.createTextNode('\u00a0•\u00a0');
    contentSub.appendChild(text);
 
    label = document.createElement('label');
    label.setAttribute('for', 'rv-raison');
    text = document.createTextNode('raison : ');
    label.appendChild(text);
    contentSub.appendChild(label);
 
    input = document.createElement('input');
    input.id = 'rv-raison';
    input.name = 'rv-raison';
    input.style.verticalAlign = 'middle';
    contentSub.appendChild(input);
 
    text = document.createTextNode('\u00a0\u00a0••\u00a0\u00a0');
    contentSub.appendChild(text);
 
    input = document.createElement('input');
    input.id = 'rv-avert';
    input.name = 'rv-avert';
    input.type = 'checkbox';
    input.checked = false;
    input.style.verticalAlign = 'middle';
    contentSub.appendChild(input);
 
    label = document.createElement('label');
    label.setAttribute('for', 'rv-avert');
    text = document.createTextNode('avertir');
    label.appendChild(text);
    contentSub.appendChild(label);
 
    text = document.createTextNode('\u00a0•\u00a0');
    contentSub.appendChild(text);
 
    label = document.createElement('label');
    label.setAttribute('for', 'rv-message');
    text = document.createTextNode('message : ');
    label.appendChild(text);
    contentSub.appendChild(label);
 
    select = document.createElement('select');
    select.id = 'rv-message';
    select.name = 'rv-message';
    select.style.verticalAlign = 'middle';
 
    for (var i = 0, len = lstAvert.length; i < len; i++) {
      option = document.createElement('option');
      option.value = i;
      option.text = lstAvert[i].string;
      select.appendChild(option);
    }
 
    contentSub.appendChild(select);
 
    text = document.createTextNode('\u00a0\u00a0••\u00a0\u00a0');
    contentSub.appendChild(text);
 
    button = document.createElement('button');
    button.id = 'rv-go';
    button.onclick = doRevert;
    text = document.createTextNode('Go');
    button.appendChild(text);
    contentSub.appendChild(button);
  }
 
  if (typeof(lstAvert) == "undefined") {
    var lstAvert = [
      { template: "Test 0"              , string: "Test 0"    , hasPage: false },
      { template: "Test 1"              , string: "Test 1"    , hasPage: false },
      { template: "Test 2"              , string: "Test 2"    , hasPage: false },
      { template: "Test 3"              , string: "Test 3"    , hasPage: false },
      { template: "Vandalisme"          , string: "Vandal"    , hasPage: true  },
      { template: "Spammeur"            , string: "Spam"      , hasPage: true  },
      { template: "Motivation_modif"    , string: "Résumé"    , hasPage: true  },
      { template: "Signature"           , string: "Signature" , hasPage: false },
      { template: "Bienvenue_copyright" , string: "Copyright" , hasPage: false }
    ];
  }
 
  addOnloadHook(tRevert);
}