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.
mw.loader.using('mediawiki.util', function () {

/*

  #Author Argos42 (base), Orlodrim, Dr Brains, Automatik (function exists and editpage) and Gratus
  Some code from LiveRC was used in this version

 Installation :  importScript('Utilisateur:Gratus/PaStec real.js');
 Documentation : Utilisateur:Gratus/PaStec (https://fr.wikipedia.org/wiki/Utilisateur:Gratus/PaStec)

  <source lang="javascript"> */

  ////////// PARTIE PERSONNALISABLE ///////////////////

if(typeof(pas_couleur)=="undefined") var pas_couleur = 'red';
if(typeof(pas_couleur_renommer)=="undefined") var pas_couleur_renommer = 'grey';
if(typeof(pas_couleur_fusion)=="undefined") var pas_couleur_fusion = 'purple';
if(typeof(pas_couleur_redirection)=="undefined") var pas_couleur_redirection = '#DDFFDD';
if(typeof(pas_liens)=="undefined") var pas_liens =true;
if(typeof(pas_auteur_contributeurs)=="undefined") var pas_auteur_contributeurs =true;

////////// FIN DE LA PARTIE PERSONNALISABLE /////////

///// Textes /////

var errormsg = "<h3>$1</h3><div id=status><span style='color:red'>Traitement en cours, veuillez patienter.</span><br>Si ce message persiste, une erreur a du survenir.</div><br /><div id=rblFrame></div>";

//désactivation
var desact=false;
//annonces (faux-nez par exemple)
var annonce="";

$(document).ready(function () {
	if (mw.config.get('wgNamespaceNumber') >= 0) {	// Permet de ne pas avoir l'onglet sur les pages spéciales ni les médias
		mw.util.addPortletLink('p-cactions', 'javascript:void(deletepage())', 'Demander SI');
	}
});

function deletepage() {
	var motif=prompt("Entrez votre motif de suppression") ;
	var page=mw.config.get( 'wgPageName' );
	alert("Cette fonctionnalitée n'est pas encore disponible.");
	editPage(page, "<", "{{Suppression Immédiate|"+motif+"}}", '[[User:Gratus/PaStec|PaStec]] : Suppression immédiate (ajout bandeau)' );
	editPage("Wikipédia:Demande de suppression immédiate", ">", "\n== [["+page+"]] == \n* '''Demandé''' par ~~~ le ~~~~~\n* '''Motif''' "+motif+":",'[[User:Gratus/PaStec|PaStec]] : Suppression immédiate (requête)' );
	alert ("Cette fonctionnalitée n'est pas encore disponible (2).");
}

function editPage(page, pattern, replace, comment) {
	var chaine  = "#REDIRECT";
	var chaine2 = "{{Nobots}}";
	var chaine3 = "{{nobots}}";
	var chaine4 = "{{bots|deny=PàStec";
	new mw.Api().get({
		action:'query',
		format:'json',
		titles:page,
		prop:'revisions',
		rvprop:'content'
	}).then(function(data) {
		for (var pageid in data.query.pages) break;
		contenu = data.query.pages[pageid].revisions[0]['*'];
		contient = contenu.indexOf(chaine) !== -1;
		contient_bis = contenu.indexOf(chaine2) !== -1;
		contient_bis_2 = contenu.indexOf(chaine3) !== -1;
		contient_bis_3 = contenu.indexOf(chaine4) !== -1;
		if (contient) {
			alert("La page suivante est une redirection : " + page);
		} else if (contient_bis) {
				alert("La page suivante n'accepte pas les modifications par les robots : " + page);
		} else if (contient_bis_2) {
				alert("La page suivante n'accepte pas les modifications par les robots : " + page);
		} else if (contient_bis_3) {
				alert("La page suivante n'accepte pas les modifications effectuées par PàStec : " + page);
		} else {
				editPagego(page, pattern, replace, comment);
		}
	});
}

function editPagego(page, pattern, replace, comment) {
	var request = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=query' +
		'&prop=revisions|info&intoken=edit&rvprop=timestamp|content&titles=' + encodeURIComponent(page);
	PaStec_ajax.http({retry:3, url: request, onSuccess: doEditPage, onFailure: failure_alert,
		page: page, comment: comment, pattern: pattern, replace: replace});
}

function doEditPage(xmlreq, data) {
	//data.page     //page to edit
	//data.comment  //modification comment
	//data.pattern  //search pattern
	//   for pattern
	//      "*" replaces the page content with data.replace
	//      "<" adds data.replace to the beginning of the page
	//      ">" adds data.replace to the end of the page
	//data.replace  //replacing string
	try {
		var page = xmlreq.responseXML.getElementsByTagName('page')[0];
		var token = page.getAttribute('edittoken');
		var lrev = page.getElementsByTagName('rev');
		var oldtext = "", basetimestamp = "";
		if (lrev.length > 0) {
			oldtext = lrev[0].textContent;
			basetimestamp = '&basetimestamp=' + encodeURIComponent(lrev[0].getAttribute('timestamp'));
		}

		var newtext;
		if      (data.pattern == "*")  newtext = data.replace;
		else if (data.pattern == ">")  newtext = oldtext + data.replace;
		else if (data.pattern == "<")  newtext = data.replace + oldtext;
		else {
			newtext = oldtext.replace(data.pattern, data.replace);
			if (oldtext == newtext) {
				alert('replace failed in : ' + data.page);
				return; // replace failed
			}
		}

		//document.getElementById('talkpageheader').innerHTML+="<br>"+token+"<br>";

		var requestEditData = 'title=' + encodeURIComponent(data.page) +
		                      '&text=' + encodeURIComponent(newtext) +
		                      '&token=' + encodeURIComponent(token) +
		                      '&summary=' + encodeURIComponent(data.comment) +
		                      '&starttimestamp=' + encodeURIComponent(page.getAttribute('starttimestamp')) +
		                      '&watchlist=nochange' + basetimestamp;
		var headers = [];
		headers['Content-Type'] = 'application/x-www-form-urlencoded';
		PaStec_ajax.http({retry: 3, url: mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=edit&nocreate=1',
			method: "POST", headers: headers, data: requestEditData,
			onFailure: failure_alert, onSuccess:confirm_executed});
	} catch (error) {
		alert(error + " : " + data.page );
	}
}

function failure_alert(xmlreq, data) {
	alert('failure on url: ' + data.page);
}

function confirm_executed(xmlreq, data) {
	//check that the API did not returned errors :
	var error = xmlreq.responseXML.getElementsByTagName('error')[0];
	if( error ){
		if( data.retry ){
			data.retry--;
			PaStec_ajax.http(data);
			document.title = "§"+document.title;
		} else {
			alert("Erreur API : " + error.getAttribute('info'));
		}
	} else if (!--actions_left) {
		document.getElementById('status').innerHTML = "<h3>Traitement de la PàS terminé</h3>" ;
		document.title = "DONE" + document.title;
	} else {
		document.title = "*" + document.title;
	}
}

importScript("Utilisateur:Orlodrim/PaStec-pagesliees.js");
if (pas_liens) importScript("Utilisateur:Gratus/paspas.js");

function getPageName(){
	return ((mw.config.get( 'wgNamespaceNumber' )-1)===0 ? "" : mw.config.get( 'wgFormattedNamespaces' )[(mw.config.get( 'wgNamespaceNumber' )-1)] + ":" ) +
		mw.config.get( 'wgTitle' ).replace(/\/Suppression$/, "");
}

function getDiscussionPageName(){
  return mw.config.get( 'wgPageName' ).replace(/\/Suppression$/, "");
}

//Fonctions de manipulation de pages

var PaStec_ajax = {
	http: function(bundle) {
		// mandatory: bundle.url
		// optional:  bundle.async
		// optional:  bundle.method
		// optional:  bundle.headers
		// optional:  bundle.data
		// optional:  bundle.onSuccess (xmlhttprequest, bundle)
		// optional:  bundle.onFailure (xmlhttprequest, bundle)
		// optional:  bundle.otherStuff OK too, passed to onSuccess and onFailure
		// optional:  bundle.retry //Argos42
		var xmlhttp;
		try {
			xmlhttp = new XMLHttpRequest();
		} catch(e) {
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					xmlhttp = false;
				}
			}
		}

		if (xmlhttp) {
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4) {
					PaStec_ajax.httpComplete(xmlhttp,bundle);
				}
			};
			xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async === false ? false : true);
			if (bundle.headers) {
				for (var field in bundle.headers) {
					try {
						xmlhttp.setRequestHeader(field,bundle.headers[field]);
					} catch(err) {
						//Argos42 : pour rendre LiveRC fonctionnel sur chrome
					}
				}
			}
			xmlhttp.send(bundle.data ? bundle.data : null);
		}
		return xmlhttp;
	},
    httpComplete: function(xmlhttp, bundle) {
		if (xmlhttp.status == 200 || xmlhttp.status == 302) {
			if (bundle.onSuccess)
				bundle.onSuccess(xmlhttp, bundle);
		} else if (bundle.onFailure) {
			if (bundle.retry) { // je sais jamais comment marche JS
				bundle.retry--;
				PaStec_ajax.http(bundle);
				document.title = "§"+document.title;
			} else {
				bundle.onFailure(xmlhttp, bundle);
			}
		} else {
		// A activer en debug mode ?
		//  alert(xmlhttp.status+xmlhttp.responseText);
		}
	}
};

function PaStec_UserIsIP(user) {
	var regexpIP4 = /^\d{1,3}\.\d{1,3}.\d{1,3}.\d{1,3}$/;
	var regexpIP6 = /\w{1,4}\:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}/;
	if (regexpIP4.exec(user))      return "V4";
	else if (regexpIP6.exec(user)) return "V6";
	else return false;
}

function PaStec_createUserLink(user) {
	var prefix = mw.config.get( 'wgFormattedNamespaces' )[2] + ":";
	if (PaStec_UserIsIP(user)) prefix = "Special:Contributions/";
	var link = '<a href="' + mw.config.get( 'wgServer' ) + mw.config.get( 'wgArticlePath' ).split("$1").join(prefix + encodeURIComponent(user)) +
		'" ' + '>' + user + '</a>';
	return link;
}

if ( (mw.config.get( 'wgNamespaceNumber' )%2 !== 0) && (mw.config.get( 'wgTitle' ).match(/\/Suppression$/) !== null) ) { //PàS

	var PaStec_Authors = {};
	var PaStec_Creator = null;

	function getArticleAuthors(rvcontinue, callback) {
		if (!rvcontinue) rvcontinue = "";
		var page = getPageName();
		var APIlimit = ( (mw.config.get( 'wgUserGroups' ).indexOf("sysop") != -1 || mw.config.get( 'wgUserGroups' ).indexOf("bot")!=-1) ? 4999 : 499);
		var request = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=query' +
			'&prop=revisions&rvprop=user' +
			'&rvlimit=' + APIlimit +
			rvcontinue +
			'&titles=' + encodeURIComponent(page);
		PaStec_ajax.http({retry:3,url: request, onSuccess: getArticleAuthorsRunningClosure(callback), onFailure: failure_alert});
	}

	function getArticleAuthorsRunningClosure(callback) {
		return function getArticleAuthorsRunning(Req, data) {
			var ObjectXML = Req.responseXML;
			var Revs = ObjectXML.getElementsByTagName("rev");
			var user;
			for (var a=0, l=Revs.length; a<l; a++) {
				var rev = Revs[a];
				user = rev.getAttribute("user");
				if (!user) continue; // nom d'utilisateur masqué
				else PaStec_Creator = user;
				if (typeof PaStec_Authors[user] === "undefined") {
					PaStec_Authors[user] = 1;
				} else {
					PaStec_Authors[user] = PaStec_Authors[user] + 1;
				}
			}
			var QueryContinue = ObjectXML.getElementsByTagName("query-continue")[0];
			if (QueryContinue) {
				var rvcontinue = "&rvcontinue=" + encodeURIComponent( QueryContinue.firstChild.getAttribute("rvcontinue") );
				getArticleAuthors(rvcontinue, callback);
			} else {
				callback();
			}
	  };
	}

	//compteur global:
	var actions_left = 0;
	var affiche_pages_liees = false;

	getArticleAuthors("", function() {

		//mise en place des boutons
		$( function() {
			/* ============================ TEST =============== */
			var annonce_non_urgent = '<div style="border:1px dashed black;padding:0.5em;margin:0.5em;">' +
				'' +
				'<hr />' +
				'<ul>' +
				'<li><b>Créateur :</b>' +
				'<ul>' +
				'<li>'+PaStec_createUserLink(PaStec_Creator)+'</li>' +
				'</ul>' +
				'</li>' +
				'<li><b>Auteurs :</b>' +
				'<ul style="-moz-column-count:4;-webkit-column-count:4;column-count:4;">';
			for (var user in PaStec_Authors) {
				var nbedits = PaStec_Authors[user];
				if (!nbedits) continue;
				annonce_non_urgent += '<li>' + PaStec_createUserLink(user) + ' : ' + nbedits+' édition'+(nbedits==1 ? '' : 's' ) + '</li>';
			}
			annonce_non_urgent += '</ul>' +
				'</li>' +
				'</ul>' +
				'<hr />' +
				'</div>';
			if (pas_auteur_contributeurs) $(annonce_non_urgent).insertAfter($('#firstHeading'));
			/* ============================ TEST =============== */
			var color1 = pas_couleur;
			var color2 = pas_couleur_renommer;
			var color3 = pas_couleur_fusion;
			var color4 = pas_couleur_redirection;
			if (!document.getElementById('talkpageheader')) {
				$('<div class="mw-talkpageheader"><div id="talkpageheader"></div></div>').prependTo('#mw-content-text');
			}
			if (desact) {
				document.getElementById('talkpageheader').innerHTML += "<h3>PaStec</h3>Script désactivé pour cause de bug.";
			} else {
				var inputsstyles = "padding:0;cursor:pointer;";
				document.getElementById('talkpageheader').innerHTML += "" +
					"<fieldset style='padding:0 0.2em;margin:0 0.4em;'>" +
					"<legend>Formulaire <b>PaStec</b></legend>" +
					"<span style='color : "+color1+"'>" + annonce + "</span>" +
					"<table style='width:100%;background:none;margin-top:-1em;'>" +
						"<tr>" +
							"<td valign='bottom' width='50%'>" +
								"Raison :" +
								"<textarea rows='3' id='raison_cloture' ></textarea>" +
							"</td>" +
							"<td valign='bottom'>" +
								"Autre page (pour fusion)<br>" +
								"Message (suggestions, signaler un bug, avis)" +
								"<textarea rows='3' id='page2' ></textarea>" +
							"</td>" +
						"</tr>" +
						"<tr>" +
							"<td colspan='2' style='text-align:center;'>" +
								"<input type='button' value='SUPPRIMER' style='background:red;"+inputsstyles+"' onclick='delete_pas()'/>"+
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type=button value='CONSERVER' style='background:green;"+inputsstyles+"' onclick='keep_pas()'/>" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type='button' value='Renommer' style='background:"+color2+";"+inputsstyles+"' onclick='renommer()'/>" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type='button' value='Fusionner' style='background:"+color3+";"+inputsstyles+"' onclick='fusionner()'/>" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type='button' value='Redirection' style='background:"+color4+";"+inputsstyles+"' onclick='redirection()'/>" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type='button' value='SI' style='background:red;" + inputsstyles + "' onclick='SI()'/>" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type='button' value='Message' style='background:orange;"+inputsstyles+"' onclick='message()'/>" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type='button' value='Documentation' style='background:#80D0FF;"+inputsstyles+"' onclick='documentation()'/>" +
								"&nbsp;" +
								"&nbsp;" +
								"<br>" +
								"<br>" +
								'<hr />' +
								"<input type='button' value='Proposer&nbsp;à&nbsp;la&nbsp;suppression' style='background:orange;"+inputsstyles+"' onclick='kir()'/>" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type='button' value='Test' style='background:orange;"+inputsstyles+"' onclick='tempo()'/>" + // Désactivation permanant : test
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"&nbsp;" +
								"<input type='button' value='Avertir' style='background:orange;"+inputsstyles+"' onclick='avertir()'/>" +
							"</td>" +
						"</tr>" +
					"</table>" +
				"</fieldset>";
			}
		});
	});
	//Fonction servant à faire des tests.
	function tempo() {
		var motif = prompt("Entrez votre motif de suppression") ;
		var page = mw.config.get( 'wgPageName' );
		alert("Cette fonctionnalitée n'est pas encore disponible.");
		editPage(page,"<","{{Suppression Immédiate|"+motif+"}}",'[[User:Gratus/PaStec|PaStec]] : Suppression immédiate (ajout bandeau)' );
		editPage("Wikipédia:Demande de suppression immédiate", ">", "\n== [["+page+"]] == \n* '''Demandé''' par ~~~ le ~~~~~\n* '''Motif''' "+motif+":", '[[User:Gratus/PaStec|PaStec]] : Suppression immédiate (requête)' );
		alert("Cette fonctionnalitée n'est pas encore disponible (2).");
	}

	function renommer(type){
		if (document.getElementById('raison_cloture').value.length === 0) {
			if (!confirm('Clôturer la PàS en conservation avec le motif « Consensus pour un renommage » ?')) return;
			document.getElementById('raison_cloture').value = "Consensus pour un renommage";
		}
		do_if_no_edit_conflict(function() {
		actions_left = 3;
		bandeau_pas("Article renommé");
		commenter_pas("renommage");
		editPage(getPageName(), /{{[Ss]u(p|pp)ression[^{}]*}}|{{[Àà] supprimer[^{}]*}}|{{[Ee]n [Pp]àS[^{}]*}}|{{[Pp]roposé à la suppression[^{}]*}}/, "",'[[User:Gratus/PaStec|PaStec]] : '+getPageName()+' clôture PàS (retrait bandeau suppression)) ([['+mw.config.get( 'wgPageName ' )+'|Voir]]' );
		document.getElementById('talkpageheader').innerHTML = errormsg.split("$1").join("Renommer");
		if (!confirm('Cliquez sur OK pour être redirigé vers « Spécial:Renommer une page », sinon cliquez sur Annuler pour rester sur cette page.')) return;
			document.location.href="//fr.wikipedia.org/wiki/Sp%C3%A9cial:Renommer_une_page/"+getPageName()+"";
		});
	}

	function fusionner(type){
		if (document.getElementById('raison_cloture').value.length === 0) {
			if (!confirm('Clôturer la PàS en conservation avec le motif « Consensus. » en plus de « Clôture en fusion avec [[page cible]]. » ?')) return;
			document.getElementById('raison_cloture').value = "Consensus.";
		}
		if (document.getElementById('page2').value.length === 0)
			document.getElementById('talkpageheader').innerHTML="<span style='color : red'>Opération annulée : vous n'avez pas renseigné la case de droite (article cible de la fusion).</span>";
		do_if_no_edit_conflict(function() {
			actions_left = 2;
			var raison = document.getElementById('raison_cloture').value;
			var page2 = document.getElementById('page2').value;
			var bandeau = "{{Article fusionné|Clôture en fusion avec [["+page2+"]]. "+raison+"|2=~~~~}}";
			editPage(mw.config.get( 'wgPageName' ), "=== Discussions ===", bandeau+"\n\n=== Discussions ===", '[[User:Gratus/PaStec|PaStec]] : ajout bandeau clôture) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
			commenter_pas("fusion");
			if (!confirm('Avez-vous déjà fusionné l\'article avec l\'article cible ? Cliquez sur OK si c\'est le cas. Pour faire une demande de fusion, cliquez sur Annuler ')) {
			fusionner_requête();
			} else {
				document.getElementById('talkpageheader').innerHTML = errormsg.split("$1").join("Fusion");
			}
		});
	}

	function fusionner_requête(type) {
		actions_left = 5;
		var page2 = document.getElementById('page2').value;
		editPage("Wikipédia:Fusion technique", ">", "\n== [[:"+getPageName()+"]] et [["+page2+"]] == \nDemande de fusion suite à décision {{PàS}} [["+mw.config.get( 'wgPageName' )+"|('''Voir la décision''')]]. Ceci n'est pas une demande de vote pour ou contre la fusion (la décision a déjà été prise lors de la {{PàS}}) mais uniquement une demande pour qu'un tiers effectue la fusion. --~~~~ ", '[[User:Gratus/PaStec|PaStec]] : '+getPageName()+' - Proposition de fusion) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
		editPage(getPageName(), /{{[Ss]u(p|pp)ression[^{}]*}}|{{[Àà] supprimer[^{}]*}}|{{[Ee]n [Pp]àS[^{}]*}}|{{[Pp]roposé à la suppression[^{}]*}}/, "{{Fusion technique|"+getPageName()+"|"+page2+"}}",'[[User:Gratus/PaStec|PaStec]] : '+getPageName()+' fusion (remplacement bandeau suppression par le bandeau À fusionner) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
		editPage(page2, "<", "{{Fusion technique|"+getPageName()+"|"+page2+"}}\n", '[[User:Gratus/PaStec|PaStec]] : '+page2+' fusion (ajout du bandeau À fusionner) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
		document.getElementById('talkpageheader').innerHTML = errormsg.split("$1").join("Fusion + requête sur WP:PAF");
	}

	function redirection (type){
		if (document.getElementById('page2').value.length === 0)
			document.getElementById('talkpageheader').innerHTML = "<span style='color : red'>Opération annulée : vous n'avez pas indiqué d'article cible dans la case de droite.</span>";
		if (document.getElementById('raison_cloture').value.length === 0) {
			if (!confirm('Clôturer la PàS en conservation avec le motif « Consensus pour une redirection » ?')) return;
			document.getElementById('raison_cloture').value ="Consensus pour une redirection";
		}
		do_if_no_edit_conflict(function() {
			actions_left = 3;
			var article_cible = document.getElementById('page2').value;
			bandeau_pas("Article transformé en redirection");
			commenter_pas("transformation en redirection");
			if (!confirm('Si vous avez déjà redirigé l\'article, cliquez sur OK. Sinon cliquez sur Annuler pour rediriger automatiquement l\'article.')) { // CREER UNE REDIRECTION VERS LA PAGE CIBLE
				editPage(getPageName(),'*','#REDIRECTION [['+article_cible+']]','[[User:Gratus/PaStec|PaStec]] : Tranformation en redirection - Décision PàS ([['+mw.config.get( 'wgPageName' )+'|Voir]]');
			}
			document.getElementById('talkpageheader').innerHTML = errormsg.split("$1").join("Redirection");
		});
	}

	function SI (type) {
		do_if_no_edit_conflict(function() {
			page = getPageName();
			exists(page);
		});
	}

	function exists(pagename) {
		actions_left = 2;
		var raison = document.getElementById('raison_cloture').value;
		var bandeau = "{{Article supprimé en SI}}";
		new mw.Api().get({
			action: 'query',
			format: 'json',
			titles: pagename
		}).then(function(data) {
			// Ce code n'est exécuté qu'une fois la requête terminée
			var existe = !data.query.pages[-1];
			if (existe) {
				alert('Erreur : la page existe');
			} else {
					editPage(mw.config.get( 'wgPageName' ),"=== Discussions ===",bandeau+"\n\n=== Discussions ===",'[[User:Gratus/PaStec|PaStec]] : ajout bandeau clôture) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
					commenter_pas("suppression immédiate");
					document.getElementById('talkpageheader').innerHTML= errormsg.split("$1").join("SI");
			}
		});
	}

	function message (type){
		if (document.getElementById('page2').value.length === 0)
			document.getElementById('talkpageheader').innerHTML = "<span style='color : red'>Opération annulée : vous n'avez écrit aucun message dans la case de droite.</span>";
		do_if_no_edit_conflict(function() {
			actions_left = 1;
			var message = document.getElementById('page2').value;
			editPage("Utilisateur:Gratus/PaStec/Message", ">", "\n== Message de ~~~ == \nMessage écrit le ~~~~~<br>"+message+"",'[[User:Gratus/PaStec|PaStec]] : message' );
			document.getElementById('talkpageheader').innerHTML= errormsg.split("$1").join("Message");
		});
	}

	function kir (type) {
		do_if_no_edit_conflict(function() {
			actions_left=2;
			var page = getPageName();
			var d = new Date();
			var day = d.getDate();
			var year = d.getFullYear();
			var month = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];
			var mois = month[d.getMonth()];
			var definition = prompt('Sujet de la page proposé à la suppression (~ 2-3 mots maxi). Merci de remplir obligatoirement cette case.','');
			var auteur = PaStec_Creator;
			editPage("Wikipédia:Pages à supprimer","{{En-tête section PàS|"+day+"|"+mois+"|"+year+"}}","{{En-tête section PàS|"+day+"|"+mois+"|"+year+"}}\n*{{L|"+page+"}} ("+definition+")", '[[User:Gratus/PaStec|PaStec]] : Proposition à la suppression');
			editPage2(page, /{{[Aa]dmissibilit(e|é)[^{}]*}}|{{[Vv]érifiabilité[^{}]*}}/g, "", '[[User:Gratus/PaStec|PaStec]] : Ajout bandeau {{Suppression}} / retrait bandeau(x) ');
			message_user(auteur);
			document.getElementById('talkpageheader').innerHTML = errormsg.split("$1").join("Proposition à la suppression");
		});
	}

	function avertir(type) {
		actions_left = 2;
		var user = document.getElementById('raison_cloture').value;
		var user2 = document.getElementById('page2').value;
		var page = getPageName();
		// var who=prompt('Voulez-vous avertir un utilisateur ou un Projet ?','utilisateur - Projet');
		if (!confirm('OK pour avertir un projet, Annuler pour avertir un utilisateur')) {
			if (document.getElementById('raison_cloture').value.length > 0) message_user(user);
			if (document.getElementById('page2').value.length > 0) message_user(user2);
			document.getElementById('talkpageheader').innerHTML = errormsg.split("$1").join("Avertissement contributeur");
		} else { // if confirm ------------------------------------------------------------------------------------------------------------------
			if (user.search(/[Ss]uisse|[Mm]usique|[Ss]port|[Ee]scrime|[Jj]eu [Vv]idéo|[Bb]leach|[Dd]ragon [Bb]all/) != -1) {
				if (user.search(/[Ss]uisse/) != -1) black_list("Projet:Suisse/Carnotzet");
				if (user.search(/[Mm]usique/) != -1) black_list("Discussion Projet:Musique/Pages à supprimer");
				if (user.search(/[Ss]port/) != -1) editPage("Projet:Sport/Pages à supprimer",">","\n* {{a|"+page+"|méta=-1}} -- ~~~~~\n",'[[User:Gratus/PaStec|PaStec]] : avertissement suppression' );
				if (user.search(/[Ee]scrime/) != -1) black_list("Discussion Portail:Escrime");
				if (user.search(/[Jj]eu [Vv]idéo/) != -1) black_list("Discussion Projet:Jeu vidéo/Pages à supprimer");
				if (user.search(/[Bb]leach/) != -1) black_list("Discussion Projet:Animation et bande dessinée asiatiques/Bleach");
				if (user.search(/[Dd]ragon [Bb]all/) != -1) black_list("Discussion Projet:Animation et bande dessinée asiatiques/Dragon Ball");
			} else {
			if (document.getElementById('raison_cloture').value.length > 0) message_projet(user);
			} // FIN USER
			if (user2.search(/[Ss]uisse|[Mm]usique|[Ss]port|[Ee]scrime|[Jj]eu vidéo|[Bb]leach|[Dd]ragon [Bb]all/) != -1) {
				if (user2.search(/[Ss]uisse/) != -1) black_list("Projet:Suisse/Carnotzet");
				if (user2.search(/[Mm]usique/) != -1) black_list("Discussion Projet:Musique/Pages à supprimer");
				if (user2.search(/[Ss]port/) != -1) editPage("Projet:Sport/Pages à supprimer",">","\n* {{a|"+page+"|méta=-1}} -- ~~~~~\n",'[[User:Gratus/PaStec|PaStec]] : avertissement suppression' );
				if (user2.search(/[Ee]scrime/) != -1) black_list("Discussion Portail:Escrime");
				if (user2.search(/[Jj]eu [Vv]idéo/) != -1) black_list("Discussion Projet:Jeu vidéo/Pages à supprimer");
				if (user2.search(/[Bb]leach/) != -1) black_list("Discussion Projet:Animation et bande dessinée asiatiques/Bleach");
				if (user2.search(/[Dd]ragon [Bb]all/) != -1) black_list("Discussion Projet:Animation et bande dessinée asiatiques/Dragon Ball");
			} else {
				if (document.getElementById('page2').value.length > 0) message_projet(user2);
			} // FIN USER 2
			document.getElementById('talkpageheader').innerHTML= errormsg.split("$1").join("Avertissement projet");
		} // Grand else
	} // Fin fonction

	function black_list(target) {
		var page = getPageName();
		editPage(target, ">", "\n{{subst:Avertissement suppression page|"+page+"}}\n", '[[User:Gratus/PaStec|PaStec]] : avertissement suppression' );
	}
	function documentation() {
		window.open( '//fr.wikipedia.org/wiki/Utilisateur:Gratus/PaStec' );
	}

	function message_user(user){
		var page = getPageName();
		editPage("Discussion utilisateur:"+user, ">", "\n{{subst:Avertissement suppression page|"+page+"}}\n", '[[User:Gratus/PaStec|PaStec]] : avertissement suppression' );
	}
	function message_projet(user) {
		var page = getPageName();
		editPage("Discussion Projet:"+user, ">", "\n{{subst:Avertissement suppression page|"+page+"}}\n", '[[User:Gratus/PaStec|PaStec]] : avertissement suppression' );
	}

	// escape regexp :
	function regescape(text) {
		return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
	}

	// EDIT PAGE 2 -------------------------------------------------------------------------------------------------------------------------------------------------------------
	function doEditPage2(xmlreq, data) {
		//data.page     //page to edit
		//data.comment  //modification comment
		//data.pattern  //search pattern
		//   for pattern
		//      "*" replaces the page content with data.replace
		//      "<" adds data.replace to the beginning of the page
		//      ">" adds data.replace to the end of the page
		//data.replace  //replacing string
		try {
			var page = xmlreq.responseXML.getElementsByTagName('page')[0];
			var pagefortemplate = getPageName();
			var token = page.getAttribute('edittoken');
			var lrev = page.getElementsByTagName('rev');
			var oldtext = "", basetimestamp = "";
			var template;
			if (pagefortemplate.search(/Modèle:/) != -1) {
				template = "<noinclude>{{suppression|note=ok}}</noinclude>\n";
			} else {
				template = "{{Suppression}}";
			}
			if (lrev.length > 0) {
				oldtext = lrev[0].textContent;
				basetimestamp = '&basetimestamp=' + encodeURIComponent(lrev[0].getAttribute('timestamp'));
			}

			var newtext;
			if (data.pattern == "*")       newtext = data.replace;
			else if (data.pattern == ">")  newtext = oldtext + data.replace;
			else if (data.pattern == "<")  newtext = data.replace + oldtext;
			else {
				newtext = template + oldtext.replace(data.pattern, data.replace);
				if (oldtext == newtext) {
					alert('replace failed in : ' +data.page);
					return; //replace failed
				}
			}

			//document.getElementById('talkpageheader').innerHTML+="<br>"+token+"<br>";

			var requestEditData = 'title=' + encodeURIComponent(data.page) +
				'&text=' + encodeURIComponent(newtext) +
				'&token=' + encodeURIComponent(token) +
				'&summary=' + encodeURIComponent(data.comment) +
				'&starttimestamp=' + encodeURIComponent(page.getAttribute('starttimestamp')) +
				'&watchlist=nochange' + basetimestamp;
			var headers = [];
			headers['Content-Type'] = 'application/x-www-form-urlencoded';
			PaStec_ajax.http({retry:3, url: mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=edit',
				method: "POST", headers: headers, data: requestEditData,
				onFailure: failure_alert, onSuccess:confirm_executed});
		} catch(error) {
			alert(error+" : "+data.page );
		}
	}

	function editPage2(page, pattern, replace, comment) {
		var request = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=query' +
			'&prop=revisions|info&intoken=edit&rvprop=timestamp|content&titles=' + encodeURIComponent(page);
		PaStec_ajax.http({retry:3,url: request, onSuccess: doEditPage2, onFailure: failure_alert,
			page : page, comment: comment, pattern: pattern, replace: replace});
	}
	//FIN EDIT PAGE 2 ----------------------------------------------------------------------------------------------------------------------------------------------------------

	// Suppression

	function deletePage(title, reason) {
		var request = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=query' +
			'&prop=info&intoken=edit&titles=' + encodeURIComponent(title);
		PaStec_ajax.http({retry:3,url: request, onSuccess: deletePageStep2, onFailure: failure_alert,
			title: title, reason: reason});
	}

	function deletePageStep2(xmlreq, data) {
		var page = xmlreq.responseXML.getElementsByTagName('page')[0];
		var token = page.getAttribute('edittoken');
		var request = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=delete';
		var requestData = 'title=' + encodeURIComponent(data.title) +
			'&token=' + encodeURIComponent(token) +
			'&reason=' + encodeURIComponent(data.reason);
		var headers = [];
		headers['Content-Type'] = 'application/x-www-form-urlencoded';
		PaStec_ajax.http({retry:3,url: request, onSuccess:confirm_executed, onFailure: failure_alert,
			method: "POST", headers: headers, data: requestData});
	}

	function do_if_no_edit_conflict(callback) {
		var query = {format: 'json', action: 'query', prop: 'revisions', titles: mw.config.get( 'wgPageName' ), rvprop: 'ids|user|comment'};
		$.getJSON(mw.util.wikiScript('api'), query, function(obj) {
			last_rev = obj.query.pages[mw.config.get( 'wgArticleId' )]['revisions'][0];
			if (last_rev['revid'] == mw.config.get( 'wgRevisionId' ) || confirm(
			   'La page a été modifiée depuis son chargement. La dernière édition a été faite par ' + last_rev['user'] +
			   ' avec le commentaire « ' + last_rev['comment'] + " ». Voulez-vous vraiment effectuer la clôture ?")
			) {
				callback();
			}
	  });
	}

	//fonctions PaStec

	function bandeau_pas(type){
		var raison=document.getElementById('raison_cloture').value;
		var bandeau="{{"+type+"|"+raison+"|2=~~~~}}";
		editPage(mw.config.get( 'wgPageName' ),"=== Discussions ===",bandeau+"\n\n=== Discussions ===",'[[User:Gratus/PaStec|PaStec]] : '+getPageName()+' '+type+' (ajout bandeau clôture)) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
	}

	function demander_SI(){
		editPage("Wikipédia:Demande_de_suppression_immédiate",">", "\n== [[:"+getPageName()+"]] == \nSuppression en raison de la PàS [["+mw.config.get( 'wgPageName' )+"]] ~~~~ ",'[[User:Gratus/PaStec|PaStec]] : '+getPageName()+' suppression (demande de SI)) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
	}

	function commenter_pas( type){
		//new RegExp("(.*"+"ÉCU Festival Européen du Film Indépendant"+"(.*))\n((.*)((\n.*?)*)Requ.tes trait.es}}(.*\n))"), "$3$1 :
		editPage("Wikipédia:Pages à supprimer",new RegExp("(.*"+regescape(getPageName())+"(.*))\n((.*)((\n.*?)*)Requ.tes trait.es}}(.*\n))"), "$3$1 : "+type+"  ~~~~\n" ,'[[User:Gratus/PaStec|PaStec]] : '+getPageName()+" "+type+" (archivage)) ([["+mw.config.get( 'wgPageName' )+"|Voir]]" );
	}

	function page_conservee(){
		editPage2(getDiscussionPageName(),"<", "{{page conservée}}\n",'[[User:Gratus/PaStec|PaStec]] : '+getPageName()+' conservation (ajout bandeau "page conservée")) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
	}

	function conserver() {
		editPage(getPageName(),/{{[Ss]u(p|pp)ression[^{}]*}}|{{[Àà] supprimer[^{}]*}}|{{[Ee]n [Pp]àS[^{}]*}}|{{[Pp]roposé à la suppression[^{}]*}}/, "",'[[User:Gratus/PaStec|PaStec]] : '+getPageName()+' conservation (retrait bandeau suppression)) ([['+mw.config.get( 'wgPageName' )+'|Voir]]' );
	}

	////////////////////
	//fonctions principales
	function delete_pas() {
		if (document.getElementById('raison_cloture').value.length === 0) {
			if (!confirm('Clôturer la PàS en suppression avec le motif « {{HC}} » ?')) return;
			document.getElementById('raison_cloture').value ="{{HC}}";
		}
		do_if_no_edit_conflict(function() {
			actions_left = 3;
			affiche_pages_liees = true;
			//   * Sur la sous-page de la PàS : placer le modèle {{Article supprimé}} ;
			bandeau_pas("Article supprimé");
			//   * Sur cette page : déplacer le lien dans la boîte déroulante des propositions traitées. Cette section est indiquée en utilisant le modèle {{PàS traitées}} ;
			commenter_pas("suppression");
			//   * Supprimer la page. (faire une demande de SI si pas admin)
			//if sysop : supprimer
			if (mw.config.get( 'wgUserGroups' ).indexOf("sysop") != -1){
				actions_left++;
				var reason = "[[" + mw.config.get( 'wgPageName' ) + "|Décision PàS]]";
				deletePage(getPageName(), reason);
				//PdD
				deletePage(getDiscussionPageName(), reason);
			} else {
				//else :
				demander_SI();
			}

			document.getElementById('talkpageheader').innerHTML = "<h3>Page Supprimée</h3><div id=status><span style='color:red'>Traitement en cours, veuillez patienter.</span><br>Si ce message persiste, une erreur a du survenir.</div><br /><div id=rblFrame></div>";

			//   * « Déwikifiez » les termes qui renvoient vers l'article supprimé (liens bleus qui deviennent rouges) à l'aide des pages liées.
			rblCreateList();
		});
	}

	function keep_pas() {
		if (document.getElementById('raison_cloture').value.length === 0) {
			if (!confirm( 'Clôturer la PàS en conservation avec le motif « admissible » ?' )) return;
			document.getElementById('raison_cloture').value = "admissible";
		}
		do_if_no_edit_conflict(function() {
			actions_left=4;
			//   * Sur l'article : ôter de l'article le bandeau {{Suppression}} //et admissibilité
			conserver();
			//   * Sur la page de discussion de l'article : insérer le modèle {{Page conservée}}. Lorsque le nom de la sous-page de PàS ne correspond pas exactement au titre de l'article, utiliser le modèle {{page conservée|vote=nom de la sous-page de PàS}}. Hormis ces cas particuliers, l'accès à la sous-page de PàS se fera par le lien « voir le débat de suppression » apparaissant automatiquement en haut de l'onglet historique ;
			page_conservee();
			//   * Sur la sous-page de la PàS : placer le modèle {{Article conservé}} ;
			bandeau_pas("Article conservé");
			//   * Sur cette page : déplacer le lien dans la boîte déroulante des propositions traitées. Cette section est indiquée en utilisant le modèle {{PàS traitées}}.
			commenter_pas("conservation");
			document.getElementById('talkpageheader').innerHTML="<h3>Page Conservée</h3><div id=status><span style='color:red'>Traitement en cours, veuillez patienter.</span><br>Si ce message persiste, une erreur a du survenir.</div><br /><div id=rblFrame></div>";
		});
	}
} // FIN PAS

/* </source> */

});