Utilisateur:Automatik/PaStec real.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) ;
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()'/>"+
" " +
" " +
" " +
" " +
" " +
"<input type=button value='CONSERVER' style='background:green;"+inputsstyles+"' onclick='keep_pas()'/>" +
" " +
" " +
" " +
" " +
" " +
"<input type='button' value='Renommer' style='background:"+color2+";"+inputsstyles+"' onclick='renommer()'/>" +
" " +
" " +
" " +
" " +
" " +
"<input type='button' value='Fusionner' style='background:"+color3+";"+inputsstyles+"' onclick='fusionner()'/>" +
" " +
" " +
" " +
" " +
" " +
"<input type='button' value='Redirection' style='background:"+color4+";"+inputsstyles+"' onclick='redirection()'/>" +
" " +
" " +
" " +
" " +
" " +
"<input type='button' value='SI' style='background:red;" + inputsstyles + "' onclick='SI()'/>" +
" " +
" " +
" " +
" " +
" " +
"<input type='button' value='Message' style='background:orange;"+inputsstyles+"' onclick='message()'/>" +
" " +
" " +
" " +
" " +
" " +
"<input type='button' value='Documentation' style='background:#80D0FF;"+inputsstyles+"' onclick='documentation()'/>" +
" " +
" " +
"<br>" +
"<br>" +
'<hr />' +
"<input type='button' value='Proposer à la suppression' style='background:orange;"+inputsstyles+"' onclick='kir()'/>" +
" " +
" " +
" " +
" " +
" " +
"<input type='button' value='Test' style='background:orange;"+inputsstyles+"' onclick='tempo()'/>" + // Désactivation permanant : test
" " +
" " +
" " +
" " +
" " +
"<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> */
});