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

/* global alert, $, mw, window */
/* jshint laxbreak: true */

// <nowiki>

mw.loader.using( [ 'mediawiki.util', 'user' ], function () {
	'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="https://fr.m.vvikipidea.org/w/index\\.php\\?title=[^"]+redlink=1"' );
	var xpatrolDPH = 'Wikipédia:Demande de purge d\'historique';

	function xpatrolToggleEmptyNewPages() {
		$( '#mw-content-text' ).find( 'li' ).each( function ( _, li ) {
			if ( li.innerHTML.includes( '[0 octet]' ) ) {
				li.style.display = xpatrolStates[ xpatrolEmptyNewPagesNextState ];
			}
		} );
		document.getElementById( 'xpatrol-ToggleEmptyNewPages' ).innerHTML = xpatrolToggleTexts[ xpatrolEmptyNewPagesNextState ];
		xpatrolEmptyNewPagesNextState = !xpatrolEmptyNewPagesNextState + 0;
	}

	function xpatrolToggleNonEmptyNewPages() {
		$( '#mw-content-text' ).find( 'li' ).each( function ( _, li ) {
			if ( !li.innerHTML.includes( '[0 octet]' ) ) {
				li.style.display = xpatrolStates[ xpatrolNonEmptyNewPagesNextState ];
			}
		} );
		document.getElementById( 'xpatrol-ToggleNonEmptyNewPages' ).innerHTML = xpatrolToggleTexts[ xpatrolNonEmptyNewPagesNextState ];
		xpatrolNonEmptyNewPagesNextState = !xpatrolNonEmptyNewPagesNextState + 0;
	}

	function xpatrolToggleAbusedPages() {
		$( '#mw-content-text' ).find( 'li' ).each( function ( _, li ) {
			if ( xpatrolNonExistingPage.exec( li.innerHTML ) ) {
				li.style.display = xpatrolStates[ xpatrolAbusedPagesNextState ];
			}
		} );
		document.getElementById( 'xpatrol-ToggleAbusedPages' ).innerHTML = xpatrolToggleTexts[ xpatrolAbusedPagesNextState ];
		xpatrolAbusedPagesNextState = !xpatrolAbusedPagesNextState + 0;
	}

	function xpatrolReload( callback ) {
		$.get( mw.util.getUrl( null, { action: 'render' } ) ).done( function ( html ) {
			$( '#mw-content-text' ).html( html );
			if ( callback ) {
				callback();
			}
		} ).fail( 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 ).fail( 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 xpatrolAskForPurge() {
		var url = document.getElementById( 'xpatrolPurgeUrl' ).value;
		var warning = document.getElementById( 'xpatrolPurgeWarning' );
		if ( !url ) {
			warning.style.color = 'red';
			warning.innerHTML = 'Préciser l\'adresse de la source copiée';
			return;
		}
		warning.innerHTML = '';

		var $lis = $( '#pagehistory' ).find( 'li' );

		var firstRevisionToPurge = 0;
		var lastRevisionToPurge = 0;
		var revisionsToPurge = 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;
			}
		}
		for ( var liId = lastRevisionToPurge + 1; liId < $lis.length; ++liId ) {
			++revisionsToPurge;
			if ( $lis[ liId ].getElementsByTagName( 'input' )[ 0 ].checked ) {
				firstRevisionToPurge = liId;
				break;
			}
		}

		function convertRevision( elmRevision ) {

			function erreur( type ) {
				var dump = Object.keys( rev ).map( function ( key ) {
					return key + ' : ' + rev[ key ];
				} ).join( '\n' );

				alert( 'Bravo vous avez trouvé un bug dans xpatrol !\n'
					+ 'Merci de bien vouloir poster les informations suivantes sur [[Discussion utilisateur:Arkanosis]] :\n\n'
					+ window.location + '\n\n'
					+ type + '\n\n'
					+ '<' + 'nowiki>' + $revision.html() + '<' + '/nowiki>\n\n'
					+ '<' + 'nowiki>\n' + dump + '\n<' + '/nowiki>' );

				throw 'convertRevisionException';
			}

			var $revision = $( elmRevision );
			var rev = {};

			rev.page = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );

			var $histlinks = $revision.find( '.mw-history-histlinks' ).find( 'a' );
			if ( $histlinks.length === 2 ) {
				// lien "diff"
				var match = $histlinks[ 1 ].href.match( /&oldid=(\d+)$/ );
				if ( !match ) {
					erreur( 'histlinks-oldid' );
				}
				rev.parentid = match[ 1 ];
			} else if ( $histlinks.length === 1 ) {
				// première version
				rev.parentid = 0;
			} else {
				erreur( 'histlinks' );
			}

			rev.revid = $revision.data( 'mwRevid' );
			if ( !rev.revid ) {
				erreur( 'revid' );
			}

			var $date = $revision.find( '.mw-changeslist-date' );
			if ( $date.length !== 1 ) {
				erreur( 'date' );
			}
			rev.date = $date.text();

			rev.isMinor = ( $revision.find( '.minoredit' ).length > 0 );

			var $diffsize = $revision.find( '.mw-diff-bytes:not(.history-size)' );
			if ( $diffsize.length !== 1 ) {
				erreur( 'diffsize' );
			}
			rev.diffsize = $diffsize.text().replace( /\s/g, '' );

			var $userlink = $revision.find( '.mw-userlink' );
			if ( $userlink.length !== 1 ) {
				erreur( 'userlink' );
			}
			rev.isIP = $userlink.hasClass( 'mw-anonuserlink' );
			rev.username = $userlink.text();

			var $autocomment = $revision.find( '.autocomment' );
			if ( $autocomment.length ) {
				rev.autocomment = $autocomment.text()
					.replace( /^→/, '' )
					.replace( /\s: $/, '' )
					.replace( /[[\]{}|='<>]+|_{2,}/g, '<' + 'nowiki>$&<' + '/nowiki>' );
			} else {
				rev.autocomment = '';
			}

			var $comment = $revision.find( '.comment' );
			if ( $comment.length ) {
				var $clone = $comment.clone();
				$clone.find( '.autocomment' ).remove();
				rev.comment = $clone.text()
					.trim()
					.replace( /[[\]{}|='<>]+|_{2,}/g, '<' + 'nowiki>$&<' + '/nowiki>' );
			} else {
				rev.comment = '';
			}

			return '{{Révision'
				+ '|' + rev.page
				+ '|' + rev.parentid
				+ '|' + rev.revid
				+ '|' + rev.date
				+ '|' + ( rev.isMinor ? 'm' : '' )
				+ '|' + rev.diffsize
				+ '|' + ( rev.isIP ? 'ip' : 'u' ) + '=' + rev.username
				+ ( rev.autocomment ? '|auto=' + rev.autocomment : '' )
				+ ( rev.comment ? '|commentaire=' + rev.comment : '' )
				+ '}}';
		}

		try {
			var firstRevisionToPurgeText = convertRevision( $lis[ firstRevisionToPurge ] );
			var lastRevisionToPurgeText = convertRevision( $lis[ lastRevisionToPurge ] );
		} catch ( e ) {
			return;
		}
		var pageName = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
		var text = '== {{a-court|' + pageName + '}} ==\n\n'
						 + '{{DPH 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* ' + lastRevisionToPurgeText
						 + '\n\n' + revisionsToPurge + ' révision' + ( revisionsToPurge > 1 ? 's' : '' ) + ' à purger.'
						 + '\n\n' + xpatrolSignatureRegistered
						 + '\n\n{{DPH fin}}';

		xpatrolEdit( xpatrolDPH, 'appendtext', '\n' + text, '/* {{a-court|' + pageName + '}} */', 'demande de purge d\'historique sur « [[' + pageName + ']] »', 0, function () {
			warning.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 = '{{subst' + ':' + xpatrolCopyvioWarningTemplate + '|' + pageName + '|2=' + url + '}}' + xpatrolSignatureAnonymous;

				xpatrolEdit( 'Discussion utilisateur:' + editor, 'appendtext', '\n' + warningMessage, '/* Contravention aux droits d\'auteur sur « ' + pageName + ' » */', 'violation de droits d\'auteur sur « [[' + pageName + ']] »', 0, function () {
					warning.innerHTML += ', contributeur « ' + editor + ' » <a href="https://fr.m.vvikipidea.org/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" id="xpatrol-AskForPurge" class="historysubmit" accesskey="p" title="Demander une purge des versions sélectionnées">'
			+ ' '
			+ '<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>';

		$( '#mw-history-compare > div' ).first().append( purge );

		var ask = document.getElementById( 'xpatrol-AskForPurge' );
		if ( ask ) {
			ask.onclick = function ( e ) {
				e.preventDefault();
				xpatrolAskForPurge();
			};
		}
	}

	function xpatrolAddNewPagesLinks() {
		$( '.mw-htmlform' ).each( function ( _, htmlForm ) {
			$( htmlForm ).find( 'a[href*="hideredirs="]' ).parent().append( $.parseHTML( ' | <a id="xpatrol-ToggleEmptyNewPages" href="javascript:" title="Spécial:Nouvelles pages">masquer</a> les pages blanchies | <a id="xpatrol-ToggleNonEmptyNewPages" href="javascript:" title="Spécial:Nouvelles pages">masquer</a> les pages non blanchies' ) );
		} );
		var toggleEmpty = document.getElementById( 'xpatrol-ToggleEmptyNewPages' );
		if ( toggleEmpty ) {
			toggleEmpty.onclick = function ( e ) {
				e.preventDefault();
				xpatrolToggleEmptyNewPages();
			};
		}
		var toggleNonEmpty = document.getElementById( 'xpatrol-ToggleNonEmptyNewPages' );
		if ( toggleNonEmpty ) {
			toggleNonEmpty.onclick = function ( e ) {
				e.preventDefault();
				xpatrolToggleNonEmptyNewPages();
			};
		}
	}

	function xpatrolAddElementUnderTitle( elm ) {
		if ( mw.config.get( 'skin' ) === 'vector-2022' ) {
			var pageToolbarOuter = document.getElementsByClassName( 'vector-page-toolbar' )[ 0 ];
			if ( !pageToolbarOuter ) return;
			pageToolbarOuter.appendChild( elm );
		} else {
			var bodyContent = document.getElementById( 'bodyContent' );
			if ( !bodyContent ) return;
			bodyContent.parentNode.insertBefore( elm, bodyContent );
		}
	}

	function xpatrolAddClearLink( label, hint, message, messageQuestion ) {
		var link = document.createElement( 'a' );
		link.href = 'javascript:';
		link.onclick = function ( e ) {
			e.preventDefault();
			if ( messageQuestion ) {
				var input = prompt( messageQuestion );
				if ( input === null ) {
					return;
				}
				message = message.replace( '__PROMPT__', function () { return input; } );
			}
			xpatrolClear( mw.config.get( 'wgPageName' ), message, 'xpatrol-' + label );
		};
		link.id = 'xpatrol-' + label;
		link.title = hint;
		link.appendChild( document.createTextNode( ' ' + label + ' ' ) );

		xpatrolAddElementUnderTitle( link );
	}

	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, bannerQuestion ) {
		var link = document.createElement( 'a' );
		link.href = 'javascript:';
		link.onclick = function ( e ) {
			e.preventDefault();
			if ( bannerQuestion ) {
				var input = prompt( bannerQuestion );
				if ( input === null ) {
					return;
				}
				banner = banner.replace( '__PROMPT__', function () { return input; } );
			}
			xpatrolAddBanner( mw.config.get( 'wgPageName' ), banner, message, 'xpatrol-' + label );
		};
		link.id = 'xpatrol-' + label;
		link.title = hint;
		link.appendChild( document.createTextNode( ' ' + label + ' ' ) );

		xpatrolAddElementUnderTitle( link );
	}

	function xpatrolAddBannerLinks() {
		var date = '|date=' + new Date().toLocaleString( 'fr-FR', { month: 'long', year: 'numeric' } );

		if ( xpatrolEnableClear ) {
			var separator = document.createElement( 'span' );
			separator.textContent = ' — ';
			xpatrolAddElementUnderTitle( separator );
		}

		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( 'Rém', 'Contributions rémunérées', 'Avantage non déclaré' + date, '[[WP:CI|Contributions rémunérées]]' );
		xpatrolAddBannerLink( 'Admi', 'Admissibilité à vérifier', 'Admissibilité à vérifier' + date, '[[WP:CAA|Admissibilité à vérifier]]' );
		xpatrolAddBannerLink( 'Admi+', 'Admissibilité à vérifier (avec motif)', 'Admissibilité à vérifier' + date + '|motif=__PROMPT__', '[[WP:CAA|Admissibilité à vérifier]]', 'Pourquoi n\'êtes-vous pas convaincu de l\'admissibilité de cet article ?' );
		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|1=__PROMPT__' + date, 'Soupçon de violation de [[Wikipédia:Droit d\'auteur|droit d\'auteur]]', 'Quelle est la source copiée illégalement ?' );
		xpatrolAddBannerLink( 'Sursis', 'Article en sursis', 'Article en sursis|TimeStamp={{subst' + ':CURRENTTIMESTAMP}}', '[[Modèle:Article en sursis/Documentation|Article en sursis]]' );
		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( isDetailsPage ) {
		var link = new RegExp( '(sur <a href="https://fr.m.vvikipidea.org/w/index\\.php\\?title=([^&]+)&amp;redirect=no" title="[^"]+">[^<]+</a>)(\\.\nActions entreprises)' );

		$( '#mw-content-text' ).find( isDetailsPage ? 'p' : 'li' ).each( function ( _, li ) {
			var match = link.exec( li.innerHTML );
			if ( match ) {
				li.innerHTML = li.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 lastLink = document.getElementsByClassName( 'mw-lastlink' )[ 0 ];
		if ( lastLink && lastLink.nextSibling ) {
			$( lastLink.nextSibling ).before( ') (<a id="xpatrol-ToggleAbusedPages" href="javascript:" title="Journal des filtrages">masquer</a> les pages supprimées' );
		}

		var toggle = document.getElementById( 'xpatrol-ToggleAbusedPages' );
		if ( toggle ) {
			toggle.onclick = function ( e ) {
				e.preventDefault();
				xpatrolToggleAbusedPages();
			};
		}
	}

	function xpatrol() {
		// Flow histories are not supported currently.
		if ( mw.util.getParamValue( 'action' ) === 'history' && 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( false );
		} else if ( /^Spécial:Journal_du_filtre_antiabus\/\d+$/.test( mw.config.get( 'wgPageName' ) ) ) {
			xpatrolAddAbuseFilterLinks( true );
		} else {
			if ( document.getElementById( 'ca-edit' ) ) {
				if ( xpatrolEnableClear && mw.config.get( 'wgUserGroups' ).includes( 'autoconfirmed' ) ) {
					xpatrolAddClearLinks();
				}
				if ( xpatrolEnableBanner ) {
					xpatrolAddBannerLinks();
				}
			}
		}
	}

	$( xpatrol );

} );

// </nowiki>