Utilisateur:Indif/xpatrol.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) ;
Firefox (sur GNU/Linux) / 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=(.+?)&diff=[0-9]+&oldid=([0-9]+)"[^>]+?>)?actu(</a>)? \\|.+?(title=(.+?)&diff=([0-9]+)&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>|$)');
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 xpatrolEdit(article, text, section, 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');
alert (article + '\n' + text + '\n' + section + '\n' + reason + '\n' + button);
if (text)
{
var previousText = response.getElementById('wpTextbox1').value;
text = text.replace('$$text$$', previousText);
}
var inputs = response.getElementById('editform').getElementsByTagName('input');
for (var 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(section + '[[Discussion_utilisateur:Arkanosis/xpatrol.js|xpatrol]] : ' + 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)
{
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;
}
}
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];
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=([^"]+)&action=edit&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(/ /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\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;
var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
xpatrolEdit('Wikipédia:Demande de purge d\'historique', '$$text$$\n' + text, '/* {{a-court|' + pageName + '}} */', 'demande de purge d\'historique sur « [[' + pageName + ']] »', 0);
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' + ':' + xpatrolCopyvioWarningTemplate + '|' + pageName + '|2=' + url + '}}' + xpatrolSignatureAnonymous;
xpatrolEdit('Discussion utilisateur:' + editor, '$$text$$\n' + warningMessage, '/* ' + pageName + '*/', '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 | <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('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('Src', 'À sourcer', 'À sourcer' + date, '[[WP:REF|À sourcer]]');
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]]');
}
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);