« Utilisateur:Pinocchio/automate.js » : différence entre les versions
De BoyWiki
Aucun résumé des modifications |
(query continue compatibility v1.26) |
||
(5 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 6 : | Ligne 6 : | ||
var contxt = '<form method="post" action="#" name="frm1">'; | var contxt = '<form method="post" action="#" name="frm1">'; | ||
contxt += '<fieldset><legend>Liste des pages à traiter</legend>'; | contxt += '<fieldset><legend>Liste des pages à traiter</legend>'; | ||
contxt += '<label for="lang">Wiki</label><select name="lang"><option value="fr">Français</option><option value="en">English</option><option value="de">Deutsch</option><option value="media">Media</option></select>'; | contxt += '<label for="lang">Wiki</label><select name="lang" onchange="botlangchange()"><option value="fr">Français</option><option value="en">English</option><option value="de">Deutsch</option><option value="media">Media</option></select>'; | ||
contxt += '<label for="nmsp">Espace</label><select name="nmsp"><option value=0>Principal</option><option value=2>Utilisateur | contxt += '<label for="nmsp">Espace</label><select name="nmsp"><option value=0>Principal</option><option value=2>Utilisateur</option><option value=4>BoyWiki</option><option value=10>Modèle</option><option value=12>Aide</option><option value=14>Catégorie</option><option value=104>Référence</option></select>'; | ||
contxt += '<label for="prfx">Préfixe</label><input name="prfx" type="text" />'; | contxt += '<label for="prfx">Préfixe</label><input name="prfx" type="text" />'; | ||
contxt += '<label for="filtr">Filtre</label><input name="filtr" type="text" />'; | contxt += '<label for="filtr">Filtre</label><input name="filtr" type="text" />'; | ||
Ligne 55 : | Ligne 55 : | ||
var xhr = createxhrobject(); | var xhr = createxhrobject(); | ||
while (suite!=null) { | while (suite!=null) { | ||
xhr.open('GET', '/'+lang+'/api.php?action=query&list=allpages&apfilterredir=nonredirects&apnamespace='+ns+'&apprefix='+prfx+'&aplimit=500&format=xml&apfrom='+suite, false); | xhr.open('GET', '/'+lang+'/api.php?action=query&list=allpages&apfilterredir=nonredirects&apnamespace='+ns+'&apprefix='+prfx+'&aplimit=500&format=xml&rawcontinue&apfrom='+suite, false); | ||
xhr.send(''); | xhr.send(''); | ||
Ligne 90 : | Ligne 90 : | ||
document.forms['frm1'].elements['curn'].value = 0; | document.forms['frm1'].elements['curn'].value = 0; | ||
document.forms['frm1'].elements['start'].disabled = false; | document.forms['frm1'].elements['start'].disabled = false; | ||
} else { | |||
document.forms['frm1'].elements['list'].value = 'Fin requête.'; | |||
document.getElementById('msg1').innerHTML = ""; | |||
} | } | ||
} | } | ||
Ligne 123 : | Ligne 126 : | ||
var xhr = createxhrobject(); | var xhr = createxhrobject(); | ||
var n = document.forms['frm1'].elements['curn'].value; | var n = parseInt(document.forms['frm1'].elements['curn'].value); | ||
for (var n=n; n < botselpgtab.length; n++) { | for (var n=n; n < botselpgtab.length; n++) { | ||
alert(n+' '+botselpgtab[n]); | |||
if (botselpgtab[n].length ==0) continue; | if (botselpgtab[n].length ==0) continue; | ||
Ligne 210 : | Ligne 214 : | ||
} | } | ||
document.forms['frm1'].elements['curn'].value = n+1; | document.forms['frm1'].elements['curn'].value = (n+1); | ||
if ((n+1) == botselpgtab.length) botfieldsdisable(false); | if ((n+1) == botselpgtab.length) botfieldsdisable(false); | ||
if (document.forms['frm1'].elements['step'].checked) return; | if (document.forms['frm1'].elements['step'].checked) return; | ||
} | |||
} | |||
function botlangchange() { | |||
switch(document.forms['frm1'].elements['lang'].value) { | |||
case 'fr': | |||
document.forms['frm1'].elements['nmsp'].options[0].value = "0"; | |||
document.forms['frm1'].elements['nmsp'].options[0].text = "Principal"; | |||
document.forms['frm1'].elements['nmsp'].options[1].value = "2"; | |||
document.forms['frm1'].elements['nmsp'].options[1].text = "Utilisateur"; | |||
document.forms['frm1'].elements['nmsp'].options[2].value = "4"; | |||
document.forms['frm1'].elements['nmsp'].options[2].text = "BoyWiki"; | |||
document.forms['frm1'].elements['nmsp'].options[3].value = "10"; | |||
document.forms['frm1'].elements['nmsp'].options[3].text = "Modèle"; | |||
document.forms['frm1'].elements['nmsp'].options[4].value = "12"; | |||
document.forms['frm1'].elements['nmsp'].options[4].text = "Aide"; | |||
document.forms['frm1'].elements['nmsp'].options[5].value = "14"; | |||
document.forms['frm1'].elements['nmsp'].options[5].text = "Catégorie"; | |||
document.forms['frm1'].elements['nmsp'].options[6].value = "104"; | |||
document.forms['frm1'].elements['nmsp'].options[6].text = "Référence"; | |||
break; | |||
case 'en': | |||
case 'media': | |||
document.forms['frm1'].elements['nmsp'].options[0].value = "0"; | |||
document.forms['frm1'].elements['nmsp'].options[0].text = "Main"; | |||
document.forms['frm1'].elements['nmsp'].options[1].value = "2"; | |||
document.forms['frm1'].elements['nmsp'].options[1].text = "User"; | |||
document.forms['frm1'].elements['nmsp'].options[2].value = "3"; | |||
document.forms['frm1'].elements['nmsp'].options[2].text = "Draft"; | |||
document.forms['frm1'].elements['nmsp'].options[3].value = "4"; | |||
document.forms['frm1'].elements['nmsp'].options[3].text = "BoyWiki"; | |||
document.forms['frm1'].elements['nmsp'].options[4].value = "10"; | |||
document.forms['frm1'].elements['nmsp'].options[4].text = "Template"; | |||
document.forms['frm1'].elements['nmsp'].options[5].value = "12"; | |||
document.forms['frm1'].elements['nmsp'].options[5].text = "Help"; | |||
document.forms['frm1'].elements['nmsp'].options[6].value = "14"; | |||
document.forms['frm1'].elements['nmsp'].options[6].text = "Category"; | |||
break; | |||
case 'de': | |||
document.forms['frm1'].elements['nmsp'].options[0].value = "0"; | |||
document.forms['frm1'].elements['nmsp'].options[0].text = "Seiten"; | |||
document.forms['frm1'].elements['nmsp'].options[1].value = "2"; | |||
document.forms['frm1'].elements['nmsp'].options[1].text = "Benutzer"; | |||
document.forms['frm1'].elements['nmsp'].options[2].value = "4"; | |||
document.forms['frm1'].elements['nmsp'].options[2].text = "BoyWiki"; | |||
document.forms['frm1'].elements['nmsp'].options[3].value = "10"; | |||
document.forms['frm1'].elements['nmsp'].options[3].text = "Vorlage"; | |||
document.forms['frm1'].elements['nmsp'].options[4].value = "12"; | |||
document.forms['frm1'].elements['nmsp'].options[4].text = "Hilfe"; | |||
document.forms['frm1'].elements['nmsp'].options[5].value = "14"; | |||
document.forms['frm1'].elements['nmsp'].options[5].text = "Kategorie"; | |||
document.forms['frm1'].elements['nmsp'].options[6].value = ""; | |||
document.forms['frm1'].elements['nmsp'].options[6].text = ""; | |||
} | } | ||
} | } |
Dernière version du 15 décembre 2015 à 18:47
/* Robot - Édition groupée de pages - Destiné aux remplacements/modifications simples et répétitifs */
/* Creation formulaire */
function botcreateform() {
var botfrm = document.getElementById('automate');
var contxt = '<form method="post" action="#" name="frm1">';
contxt += '<fieldset><legend>Liste des pages à traiter</legend>';
contxt += '<label for="lang">Wiki</label><select name="lang" onchange="botlangchange()"><option value="fr">Français</option><option value="en">English</option><option value="de">Deutsch</option><option value="media">Media</option></select>';
contxt += '<label for="nmsp">Espace</label><select name="nmsp"><option value=0>Principal</option><option value=2>Utilisateur</option><option value=4>BoyWiki</option><option value=10>Modèle</option><option value=12>Aide</option><option value=14>Catégorie</option><option value=104>Référence</option></select>';
contxt += '<label for="prfx">Préfixe</label><input name="prfx" type="text" />';
contxt += '<label for="filtr">Filtre</label><input name="filtr" type="text" />';
contxt += '<br><input type="button" name="valid1" value="Lister" onclick="botfindpageslist()" />';
contxt += '<br><textarea name="list"></textarea>';
contxt += '<p id="msg1"></p>';
contxt += '</fieldset>';
contxt += '<br><fieldset><legend>Traitement à effectuer</legend>';
contxt += '<label for="srch1">Chercher</label><input name="srch1" type="text" />';
contxt += '<label for="repl1">Remplacer par</label><input name="repl1" type="text" />';
contxt += '<br><br><label for="srch2">Chercher</label><input name="srch2" type="text" />';
contxt += '<label for="repl2">Remplacer par</label><input name="repl2" type="text" />';
contxt += '<br><br><label for="smry">Résumé</label><input name="smry" type="text" />';
contxt += '<br><br><fieldset><legend>Modes</legend>';
contxt += '<input type="checkbox" name="glob">Remplacement global';
contxt += '<input type="checkbox" name="nocs">Ignore la casse';
contxt += '<input type="checkbox" name="muli">Multi-ligne';
contxt += '<input type="checkbox" name="simu">Simulation';
contxt += '<input type="checkbox" name="step">Pas à pas';
contxt += '<input type="hidden" name="curn" value="0" />';
contxt += '</fieldset>';
contxt += '<br><input type="button" name="start" value="Démarrer" onclick="botexecpagedit()" />';
contxt += '<br><br><fieldset><legend>Journal des traitements</legend>';
contxt += '<div id="logs"></div></fieldset>';
contxt += '</fieldset></form>';
botfrm.innerHTML = contxt;
document.forms['frm1'].elements['start'].disabled = true;
}
/* Liste pages a editer - lance par bouton Lister */
function botfindpageslist() {
var botselpgtab = new Array();
document.forms['frm1'].elements['list'].value = 'Requête en cours...';
var lang = document.forms['frm1'].elements['lang'].value;
var nmsp = document.forms['frm1'].elements['nmsp'];
var ns = nmsp.value;
var selid = nmsp.selectedIndex;
var nsname = nmsp.options[selid].text;
var prfx = document.forms['frm1'].elements['prfx'].value;
var filtr = document.forms['frm1'].elements['filtr'].value;
var regstr = new RegExp(filtr,'');
var suite = ' ';
var xhr = createxhrobject();
while (suite!=null) {
xhr.open('GET', '/'+lang+'/api.php?action=query&list=allpages&apfilterredir=nonredirects&apnamespace='+ns+'&apprefix='+prfx+'&aplimit=500&format=xml&rawcontinue&apfrom='+suite, false);
xhr.send('');
if (xhr.readyState != 4 || xhr.status != 200) {
alert('Erreur requête liste pages - Abandon');
return;
}
var pglst = xhr.responseXML.documentElement;
if (pglst.getElementsByTagName('query-continue').length) {
suite = pglst.getElementsByTagName('allpages')[0].getAttribute('apcontinue');
var pgobj = pglst.getElementsByTagName('allpages')[1].childNodes;
} else {
suite = null;
var pgobj = pglst.getElementsByTagName('allpages')[0].childNodes;
}
for (var i = 0; i < pgobj.length ; i++) {
var pg = pgobj[i].getAttribute('title');
if (filtr.length ==0) {
botselpgtab[botselpgtab.length] = pg;
continue;
}
if (pg.match(regstr)) {
botselpgtab[botselpgtab.length] = pg;
}
}
}
if (botselpgtab.length >0) {
botselpgtab.sort (alphacompare);
document.forms['frm1'].elements['list'].value = botselpgtab.join('\n');
document.getElementById('msg1').innerHTML = "Il y a "+botselpgtab.length+" pages dans la liste";
document.forms['frm1'].elements['curn'].value = 0;
document.forms['frm1'].elements['start'].disabled = false;
} else {
document.forms['frm1'].elements['list'].value = 'Fin requête.';
document.getElementById('msg1').innerHTML = "";
}
}
/* Boucle édition des pages - lancé par bouton Démarrer */
function botexecpagedit() {
var flg1="",flg2="",flg3="";
var logs = document.getElementById('logs');
var lang = document.forms['frm1'].elements['lang'].value;
if (document.forms['frm1'].elements['list'].value.length ==0) return;
var botselpgtab = document.forms['frm1'].elements['list'].value.split("\n");
if (document.forms['frm1'].elements['srch1'].value.length ==0) return;
if (document.forms['frm1'].elements['glob'].checked) flg1 = "g";
if (document.forms['frm1'].elements['nocs'].checked) flg2 = "i";
if (document.forms['frm1'].elements['muli'].checked) flg3 = "m";
var regsrch1 = new RegExp(document.forms['frm1'].elements['srch1'].value, flg1+flg2+flg3);
var repl1 = document.forms['frm1'].elements['repl1'].value;
if (document.forms['frm1'].elements['srch2'].value.length) {
var regsrch2 = new RegExp(document.forms['frm1'].elements['srch2'].value, flg1+flg2+flg3);
} else var regsrch2 = "";
var repl2 = document.forms['frm1'].elements['repl2'].value;
botfieldsdisable(true);
//jeton edit
var edittoken = mw.user.tokens.get('editToken');
if (edittoken ==null || edittoken.length <5) {
alert('Erreur edittoken - Abandon');
return;
}
var xhr = createxhrobject();
var n = parseInt(document.forms['frm1'].elements['curn'].value);
for (var n=n; n < botselpgtab.length; n++) {
alert(n+' '+botselpgtab[n]);
if (botselpgtab[n].length ==0) continue;
logs.innerHTML += '<br>'+botselpgtab[n];
xhr.open('GET', '/'+lang+'/api.php?action=query&prop=info|revisions&intoken=edit&rvprop=timestamp|content&titles='+encodeURIComponent(botselpgtab[n])+'&format=xml',false);
xhr.send('');
if (xhr.readyState != 4 || xhr.status != 200) {
alert('Erreur requête info page '+botselpgtab[n]+' - Abandon');
logs.innerHTML += ' — erreur info page';
return;
}
var pg = xhr.responseXML.documentElement;
var basetimestamp = pg.getElementsByTagName('revisions')[0].childNodes[0].getAttribute('timestamp');
var starttimestamp = pg.getElementsByTagName('pages')[0].childNodes[0].getAttribute('starttimestamp');
var content = pg.getElementsByTagName('revisions')[0].childNodes[0].textContent;
if (basetimestamp ==null || starttimestamp ==null || content ==null) {
alert('Erreur réponse info page '+botselpgtab[n]+' - Abandon');
logs.innerHTML += ' — erreur info page';
return;
}
var smry = document.forms['frm1'].elements['smry'].value;
var contentorg = content;
var nbrpl1 = 0, nbrpl2 = 0;
if (content.match(regsrch1)) nbrpl1 = content.match(regsrch1).length;
content = content.replace(regsrch1, repl1);
if (regsrch2) {
if (content.match(regsrch2)) nbrpl2 = content.match(regsrch2).length;
content = content.replace(regsrch2, repl2);
} else nbrpl2 = 0;
logs.innerHTML += ' — '+nbrpl1+'+'+nbrpl2+' remplacement(s)';
if (document.forms['frm1'].elements['simu'].checked ==false && (nbrpl1 + nbrpl2) >0 && content != contentorg) {
var boundary = '--------------23242526272829';
data = '--'+boundary+'\nContent-Disposition: form-data; name="action"\n\nedit\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="title"\n\n'+botselpgtab[n]+'\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="bot"\n\n\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="nocreate"\n\n\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="basetimestamp"\n\n'+basetimestamp+'\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="starttimestamp"\n\n'+starttimestamp+'\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="contentformat"\n\ntext/x-wiki\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="contentmodel"\n\nwikitext\n';
data += '--'+boundary+'\n';
data += 'Content-Disposition: form-data; name="text"\n';
data += 'Content-Type: text/plain; charset=UTF-8\n';
data += 'Content-Transfer-Encoding: 8bit\n\n';
data += content+'\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="summary"\n\n'+smry+'\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="token"\n\n'+edittoken+'\n';
data += '--'+boundary+'\nContent-Disposition: form-data; name="format"\n\nxml\n';
data += '--'+boundary+'--\n';
xhr.open('POST', '/'+lang+'/api.php',false);
xhr.setRequestHeader("Charset", "utf-8");
xhr.setRequestHeader("Content-type", "multipart/form-data; boundary=--------------23242526272829");
xhr.setRequestHeader("Content-length", String(data.length));
xhr.setRequestHeader("Connection", "close");
xhr.send(data);
if (xhr.readyState != 4 || xhr.status != 200) {
alert('Erreur écriture page '+botselpgtab[n]+' - Abandon');
logs.innerHTML += ' — erreur écriture';
return;
}
var result = xhr.responseXML.documentElement;
if (result.getElementsByTagName('edit')[0]) {
if (result.getElementsByTagName('edit')[0].getAttribute('result').match(/[sS]uccess/)) logs.innerHTML += ' — OK';
else logs.innerHTML += ' — ERREUR';
} else {
if (result.getElementsByTagName('error')[0]) {
if (result.getElementsByTagName('error')[0].getAttribute('code')) logs.innerHTML += ' — ERREUR: '+result.getElementsByTagName('error')[0].getAttribute('code');
}
}
logs.innerHTML += ' — '+(content.length - contentorg.length)+' car. diff.';
} else {
if (document.forms['frm1'].elements['simu'].checked) logs.innerHTML += ' — mode simulation';
if (content == contentorg) logs.innerHTML += ' — aucun changement';
}
document.forms['frm1'].elements['curn'].value = (n+1);
if ((n+1) == botselpgtab.length) botfieldsdisable(false);
if (document.forms['frm1'].elements['step'].checked) return;
}
}
function botlangchange() {
switch(document.forms['frm1'].elements['lang'].value) {
case 'fr':
document.forms['frm1'].elements['nmsp'].options[0].value = "0";
document.forms['frm1'].elements['nmsp'].options[0].text = "Principal";
document.forms['frm1'].elements['nmsp'].options[1].value = "2";
document.forms['frm1'].elements['nmsp'].options[1].text = "Utilisateur";
document.forms['frm1'].elements['nmsp'].options[2].value = "4";
document.forms['frm1'].elements['nmsp'].options[2].text = "BoyWiki";
document.forms['frm1'].elements['nmsp'].options[3].value = "10";
document.forms['frm1'].elements['nmsp'].options[3].text = "Modèle";
document.forms['frm1'].elements['nmsp'].options[4].value = "12";
document.forms['frm1'].elements['nmsp'].options[4].text = "Aide";
document.forms['frm1'].elements['nmsp'].options[5].value = "14";
document.forms['frm1'].elements['nmsp'].options[5].text = "Catégorie";
document.forms['frm1'].elements['nmsp'].options[6].value = "104";
document.forms['frm1'].elements['nmsp'].options[6].text = "Référence";
break;
case 'en':
case 'media':
document.forms['frm1'].elements['nmsp'].options[0].value = "0";
document.forms['frm1'].elements['nmsp'].options[0].text = "Main";
document.forms['frm1'].elements['nmsp'].options[1].value = "2";
document.forms['frm1'].elements['nmsp'].options[1].text = "User";
document.forms['frm1'].elements['nmsp'].options[2].value = "3";
document.forms['frm1'].elements['nmsp'].options[2].text = "Draft";
document.forms['frm1'].elements['nmsp'].options[3].value = "4";
document.forms['frm1'].elements['nmsp'].options[3].text = "BoyWiki";
document.forms['frm1'].elements['nmsp'].options[4].value = "10";
document.forms['frm1'].elements['nmsp'].options[4].text = "Template";
document.forms['frm1'].elements['nmsp'].options[5].value = "12";
document.forms['frm1'].elements['nmsp'].options[5].text = "Help";
document.forms['frm1'].elements['nmsp'].options[6].value = "14";
document.forms['frm1'].elements['nmsp'].options[6].text = "Category";
break;
case 'de':
document.forms['frm1'].elements['nmsp'].options[0].value = "0";
document.forms['frm1'].elements['nmsp'].options[0].text = "Seiten";
document.forms['frm1'].elements['nmsp'].options[1].value = "2";
document.forms['frm1'].elements['nmsp'].options[1].text = "Benutzer";
document.forms['frm1'].elements['nmsp'].options[2].value = "4";
document.forms['frm1'].elements['nmsp'].options[2].text = "BoyWiki";
document.forms['frm1'].elements['nmsp'].options[3].value = "10";
document.forms['frm1'].elements['nmsp'].options[3].text = "Vorlage";
document.forms['frm1'].elements['nmsp'].options[4].value = "12";
document.forms['frm1'].elements['nmsp'].options[4].text = "Hilfe";
document.forms['frm1'].elements['nmsp'].options[5].value = "14";
document.forms['frm1'].elements['nmsp'].options[5].text = "Kategorie";
document.forms['frm1'].elements['nmsp'].options[6].value = "";
document.forms['frm1'].elements['nmsp'].options[6].text = "";
}
}
function botfieldsdisable(state) {
document.forms['frm1'].elements['prfx'].readOnly = state;
document.forms['frm1'].elements['filtr'].readOnly = state;
document.forms['frm1'].elements['nmsp'].disabled = state;
document.forms['frm1'].elements['lang'].disabled = state;
document.forms['frm1'].elements['valid1'].disabled = state;
document.forms['frm1'].elements['srch1'].readOnly = state;
document.forms['frm1'].elements['repl1'].readOnly = state;
document.forms['frm1'].elements['srch2'].readOnly = state;
document.forms['frm1'].elements['repl2'].readOnly = state;
document.forms['frm1'].elements['glob'].disabled = state;
document.forms['frm1'].elements['nocs'].disabled = state;
document.forms['frm1'].elements['muli'].disabled = state;
document.forms['frm1'].elements['simu'].disabled = state;
document.forms['frm1'].elements['list'].readOnly = state;
//document.forms['frm1'].elements['start'].disabled = state;
}