Aller au contenu

« Utilisateur:Arkanosis/xpatrol.js » : différence entre les versions

Une page de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Désactivation du code de demande de purge, plus fonctionnel depuis l'introduction des balises et problématique avec Flow — problème signalé par User:Prométhée
correctif rapide pour les historiques classiques (à rendre plus robuste) ; désactivation au lieu d'erreur JS pour le funeste Flow (si quelqu'un veut implémenter le support, be my guest)
Ligne 291 : Ligne 291 :
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 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' );
var form = document.getElementById( 'mw-history-compare' );
form.childNodes[5].innerHTML += purge;
form.childNodes[7].innerHTML += purge;
}
}


Ligne 398 : Ligne 398 :
This code is broken by both the introduction of tags in the classical histories and the Flow histories.
This code is broken by both the introduction of tags in the classical histories and the Flow histories.
Both cases have to be fixed before re-enabling.
Both cases have to be fixed before re-enabling.
} else if ( location.href.indexOf( '&action=history' ) != -1 ) {
} else if ( location.href.indexOf( '&action=history' ) != -1 && mw.config.get( 'wgPageContentModel' ) == 'wikitext' ) {
if ( xpatrolEnablePurge ) {
if ( xpatrolEnablePurge ) {
xpatrolAddHistoryLinks();
xpatrolAddHistoryLinks();

Version du 29 juin 2016 à 03:45

/*
 * 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
 * (C) 2009-2016 Arkanosis <jroquet@arkanosis.net>
 * (C) 2013 Orlodrim <orlodrim@wiki256.net>
 * Released under the MIT/X11 license
 */

/*global alert, jQuery, mediaWiki, window */
/*jslint vars: true, plusplus: true */

// <nowiki>

//( function ( mw, $ ) {
//	'use strict';

	var xpatrolEnableClear = typeof window.xpatrolEnableClear !== 'undefined' ? window.xpatrolEnableClear : false;
	var xpatrolEnableBanner = typeof window.xpatrolEnableBanner !== 'undefined' ? window.xpatrolEnableBanner : false;
	var xpatrolEnablePurge = typeof window.xpatrolEnablePurge !== 'undefined' ? window.xpatrolEnablePurge : false;
	var xpatrolPurgeWarnEditor =  typeof window.xpatrolPurgeWarnEditor !== 'undefined' ? window.xpatrolPurgeWarnEditor : false;
	var xpatrolWatchMain = typeof window.xpatrolWatchMain !== 'undefined' ? window.xpatrolWatchMain : false;
	var xpatrolWatchOthers = typeof window.xpatrolWatchOthers !== 'undefined' ? window.xpatrolWatchOthers : false;
	var xpatrolSignatureRegistered = typeof window.xpatrolSignatureRegistered !== 'undefined' ? window.xpatrolSignatureRegistered : '~~~~';
	var xpatrolSignatureAnonymous = typeof window.xpatrolSignatureAnonymous !== 'undefined' ? window.xpatrolSignatureAnonymous : '~~~~';
	var xpatrolCopyvioWarningTemplate = typeof window.xpatrolCopyvioWarningTemplate !== 'undefined' ? window.xpatrolCopyvioWarningTemplate : 'Bienvenue Copyvio 1';

	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.wikiGetlink( mw.config.get( 'wgPageName' ) ) + '?action=render' ).success( 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( 'editToken' ),
			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&nocreate=1', data, afterEdit ).error( onFailure );
		}
	}

	function xpatrolClear( article, reason, button ) {
		if ( confirm( 'Blanchir l\'article ' + article + ' pour ' + reason + ' ?' ) ) {
			xpatrolEdit( article, 'text', '', '', reason, button );
		}
	}

	function xpatrolAddBanner( article, banner, reason, button ) {
		if ( confirm( 'Ajouter le bandeau ' + banner + ' à l\'article ' + article + ' pour ' + reason + ' ?' ) ) {
			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}}';

		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.wikiGetlink( 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 = '{{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 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[7].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( 'Redir', 'Redirection cassée, inutile ou non pertinente', 'Redirection cassée, inutile ou non pertinente' );
		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', '?' + date, '[[WP:RI|Incompréhensible dans l\’état actuel]]' );
		xpatrolAddBannerLink( 'Pub', 'Ton trop promotionnel ou publicitaire', 'pub' + date, '[[WP:POV|Ton trop promotionnel ou publicitaire]]' );
		xpatrolAddBannerLink( 'Admi', 'Admissibilité à vérifier', 'admissibilité' + date, '[[WP:CAA|Admissibilité à vérifier]]' );
		xpatrolAddBannerLink( 'Admi+', 'Admissibilité à vérifier (avec motif)', 'admissibilité' + date + '|motif=" + prompt("Pourquoi n\'êtes-vous pas convaincu de l\'admissibilité de cet article ?", "") + "', '[[WP:CAA|Admissibilité à vérifier]]' );
		xpatrolAddBannerLink( 'Orth', 'Orthographe et grammaire à vérifier', 'Orthographe' + date, 'Orthographe et grammaire à vérifier' );
		xpatrolAddBannerLink( 'Redac', 'Style non encyclopédique', 'Rédaction' + date, '[[WP:STYLE|Style non encyclopédique]]' );
		xpatrolAddBannerLink( 'Wikif', 'À wikifier', 'À wikifier' + date, '[[Aide:Wikification|À wikifier]]' );
		xpatrolAddBannerLink( 'MàJ', 'À mettre à jour', 'À mettre à jour' + date, 'À mettre à jour' );
		xpatrolAddBannerLink( 'Int', 'À internationaliser', 'À internationaliser' + date, 'À internationaliser' );
		xpatrolAddBannerLink( 'Src', 'À sourcer', 'À sourcer' + date, '[[WP:REF|À sourcer]]' );
		xpatrolAddBannerLink( 'Src2', 'Manque de sources secondaires', 'Sources secondaires' + date, '[[WP:SPS|Manque de sources secondaires]]' );
		xpatrolAddBannerLink( 'Src3', 'Sources à lier', 'Sources à lier' + date, '[[Modèle:Sources_à_lier/Explication|Sources à lier]]' );
		xpatrolAddBannerLink( 'TI', 'Travail inédit', 'Travail inédit' + date, '[[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 ?", "") + "' + date, 'Soupçon de violation de [[Wikipédia:Droit d\'auteur|droit d\'auteur]]' );
		xpatrolAddBannerLink( 'PàS', 'Proposition de suppression', 'Suppression' + date, '[[WP:PàS|Proposition de suppression]]' );
		xpatrolAddBannerLink( 'R3R', 'Guerre d\'édition', 'R3R' + date, '[[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' );
		/*
		This code is broken by both the introduction of tags in the classical histories and the Flow histories.
		Both cases have to be fixed before re-enabling.
		} else if ( location.href.indexOf( '&action=history' ) != -1 && mw.config.get( 'wgPageContentModel' ) == 'wikitext' ) {
			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 );

//} ( mediaWiki, jQuery ) );

// </nowiki>