Utilisateur:Pinocchio/citation du jour.js
De BoyWiki
Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
- Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
- Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
- Opera : appuyez sur Ctrl + F5.
/* La première lecture du jour de la page Accueil provoque le rafraichissement de la citation
/* par maj d'une sous-page incluse (purge cache) */
function refresh_citation_du_jour() {
/* seulement pour page Accueil et utilisateur ayant droit écriture dans sous-page Accueil */
//if (document.body.className.match(/page-Accueil/) == null) return;
if (wgPageName != 'Accueil') return;
if (wgUserGroups == null || wgUserGroups.join(" ").match(/scribe|sysop|fsc|bureaucrat/) == null) return;
if (wgAction != 'view') return;
/* init syntaxe requete serveur */
if (window.XMLHttpRequest) { // Firefox
xhr_object = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE
xhr_object = new ActiveXObject("Msxml2.XMLHTTP");
}
else return;
/* init requete serveur - get sous-page Accueil/refresh */
xhr_object.open('GET', '/w/index.php?title=BoyWiki:Accueil/Citation_du_jour_Refresh&action=edit', true);
/* action sur fin requete async */
xhr_object.onreadystatechange = function() {
if (xhr_object.readyState == 4 && xhr_object.status == 200) {
/* récup éléments du formulaire */
var pagedit = xhr_object.responseText.replace(/\n/g, '');
var startime = pagedit.match(/wpSection.*name="wpStarttime/i);
startime = startime[0].replace(/.*value="([0-9]+)" name="wpStarttime/i, '$1');
var editime = pagedit.match(/wpStarttime.*name="wpEdittime/i);
editime = editime[0].replace(/.*value="([0-9]+)" name="wpEdittime/i, '$1');
var editoken = pagedit.match(/.{80}name="wpEditToken/i);
editoken = editoken[0].replace(/.*value="([0-f+]+)" name="wpEditToken/i, '$1');
var autosummary = pagedit.match(/wpAutoSummary.{1,30}value="[^"]+"/i);
autosummary = autosummary[0].replace(/.*value="([0-f]+)"/i, '$1');
var summary = 'Routine refresh citation du jour';
var newtxt = '<!-- Cette page est utilisée pour le rafraichissement de la citation du jour.\nNe pas effacer.\n '+new Date+' -->';
/* init date du jour au format wpEdittime à partir de wpStarttime */
var now = new Date(startime.substr(0,4),startime.substr(4,2) - 1,startime.substr(6,2));
var today = formatdateyyyymmdd(now);
today = today+'000000';
/* test date dernière édition de la sous-page */
if (editime < today) {
/* init requete serveur - maj sous-page Accueil/refresh */
var boundary = '--------------23242526272829';
var data = '--'+boundary+'\r\nContent-Disposition: form-data; name="wpAntispam"\r\n\r\n\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSection"\r\n\r\n\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpScrolltop"\r\n\r\n0\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpStarttime"\r\n\r\n'+startime+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEdittime"\r\n\r\n'+editime+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEditToken"\r\n\r\n'+editoken+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSummary"\r\n\r\n'+summary+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpAutoSummary"\r\n\r\n'+autosummary+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSave"\r\n\r\nPublier\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpTextbox1"\r\n\r\n'+newtxt+'\r\n';
data += '--'+boundary+'--\r\n';
xhr_object.open('POST', '/w/index.php?title=BoyWiki:Accueil/Citation_du_jour_Refresh&action=submit', true);
//xhr_object.setRequestHeader("Host", "fr.boywiki.org");
xhr_object.setRequestHeader("Charset", "utf-8");
xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
xhr_object.setRequestHeader("Content-Length", String(data.length));
/* action sur fin requete async */
xhr_object.onreadystatechange = function() {
if (xhr_object.readyState == 4 && xhr_object.status == 200) {
/* reload page Accueil */
if(confirm('Cette page a été mise à jour : la recharger ?')) window.location.reload(true);
}
}
xhr_object.send(data);
}
}
}
xhr_object.send('');
}
addOnloadHook(refresh_citation_du_jour);
/* Retourne la date formatée yyyymmdd */
function formatdateyyyymmdd(obj) {
var yer = obj.getFullYear();
var mon = (obj.getMonth() + 1);
var day = obj.getDate();
if (mon < 10) mon = '0'+mon;
if (day < 10) day = '0'+day;
return yer+mon+day;
}
/* Insère appel à fonction() sur action submit avant envoi de la page */
function initeventpostform() {
if (wgAction == 'edit') {
if (document.forms['editform'] == undefined || document.forms['editform'].elements['wpTextbox1'] == undefined) return;
document.forms['editform'].onsubmit = ident_citation_du_jour;
}
}
addOnloadHook(initeventpostform);
/* Affecte un identifiant à chaque citation utilisant le modèle Extrait
/* une seule fois au moment de sa création
/* pour sélection aléatoire citation du jour
/* et sauve les identifiants créés dans la sous-page Accueil/préparation citation */
function ident_citation_du_jour() {
/* contenu zone édition */
if (document.forms['editform'].elements['wpTextbox1'] == undefined) return true;
/* seulement les pages articles de l'espace principal (ns0) */
if (wgNamespaceNumber != 0) return true;
var content = document.forms['editform'].elements['wpTextbox1'].value;
/* recherche chaines modèles {{Extrait}} */
var content = content.split(/\{\{[Ee]xtrait\|/g);
if (content == null) return;
/* copie texte zone edit avant premier {{extrait}} */
var buf = content[0];
/* liste des idents créés */
//var rdmlst = '';
/* pour tout les modèles trouvés */
for (var m = 1; m < content.length ; m++) {
/* recherche fin modèle (parenthèses de fermeture) - extraction contenu */
var open = 1;
var close = 0;
for (var i = 0; i < content[m].length ; i++) {
if (content[m][i] == '{' && content[m][i+1] == '{') {open++; i++;}
if (content[m][i] == '}' && content[m][i+1] == '}') {close++; i++;}
if (open == close) break;
}
var submodl = content[m].substr(0,i-1);
/* controle args (si id déjà affecté ou cdj=non) */
if (! submodl.match(/^id=[0-9]{6,9}\||^ ?cdj=non ?\|/)) {
/* génére un nombre aléatoire entre 1000000 et 9999999 */
var rdm = Math.floor(8999999 * Math.random()) + 1000000;
/* recrée syntaxe modèle avec id */
var tmp = '{{Extrait|id='+rdm+'|'+submodl+'}}';
/* ajoute dans liste idents créés */
//rdmlst += rdm+',';
} else {
/* recrée modèle orig */
var tmp = '{{Extrait|'+submodl+'}}';
}
/* ajoute contenu modèle + texte restant après fin modèle */
buf += tmp;
buf += content[m].substr(i+1);
}
/* insertion modifs dans zone edit */
document.forms['editform'].elements['wpTextbox1'].value = buf;
}
/* Prépare lot de citations pour les jours suivants */
/* Recherche des pages de citations et sélection pseudo aléatoire */
function prepare_citation_du_jour() {
/* seulement pour page Accueil/Préparation et utilisateur ayant droit écriture dans sous-page Accueil */
if (wgPageName != 'BoyWiki:Accueil/Citation_du_jour_Prepare') return;
if (wgUserGroups == null || wgUserGroups.join(" ").match(/scribe|sysop|fsc|bureaucrat/) == null) return;
if (wgAction != 'view') return;
/* ajout div déroulement procédure */
var progressop = document.createElement('div');
progressop.setAttribute('id', 'progress_op');
/* ajout bouton continuer */
progressop.innerHTML = '<button type="button" style="display: block; margin: 20px auto;" value="" onclick="prepare_citation_du_jour_cont1()" />Continuer</button>';
document.getElementById('bodyContent').appendChild(progressop);
}
addOnloadHook(prepare_citation_du_jour);
/* suite lancée par bouton continuer */
function prepare_citation_du_jour_cont1() {
var progressop = document.getElementById('progress_op');
/* init syntaxe requete serveur */
if (window.XMLHttpRequest) { // Firefox
xhr_object = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE
xhr_object = new ActiveXObject("Msxml2.XMLHTTP");
}
else {
progressop.innerHTML = 'Erreur 1 - Abandon';
return;
}
progressop.innerHTML = 'Recherche état actuel...';
/* init requete serveur - lecture sous-page citations */
xhr_object.open('GET', '/w/index.php?title=BoyWiki:Accueil/Citation_du_jour&action=edit', false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 2 - Abandon';
return;
}
/* recup contenu utile */
var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
/* init date du jour - date min - date max */
var now = new Date();
var today = formatdateyyyymmdd(now);
now.setDate(now.getDate() - 2);
var minday = formatdateyyyymmdd(now);
now.setDate(now.getDate() + 30);
var maxday = formatdateyyyymmdd(now);
/* découpe contenu par cas du switch */
var tabsw = pagedit[1].split(/\n ?\| ?/);
/* conserve début page jusqu'à switch */
var buf = tabsw[0]+'\n';
/* parcourt les dates compte jours restant, élimine cas obsolètes, copie dans buf cas conservés */
var nbj = 0;
var jtop = '00000000';
var rtop = '0000000';
for (var i = 1; i < tabsw.length ; i++) {
var cas = tabsw[i].match(/^([0-9]{8})=/);
if (cas == null) break;
if (cas[1] >= minday) {
if (cas[1] > jtop) jtop = cas[1];
if (cas[1] > today) nbj++;
buf += '| '+tabsw[i]+'\n';
var rdm = tabsw[i].match(/^[0-9]{8}=\{\{[Ee]xtrait\|id=([0-9]{6,9})\|/);
if (rdm[1] > rtop) rtop = rdm[1];
}
}
if (nbj >= 30) {progressop.innerHTML += 'Le nombre maximum (30) de jours couverts est atteint'; return;}
else if (nbj > 1) progressop.innerHTML += 'Il y a actuellement '+nbj+' jours couverts<br />';
else progressop.innerHTML += 'Il y a actuellement '+nbj+' jour couvert<br />';
/* date de jtop */
var djtop = new Date(jtop.substr(0,4)+','+jtop.substr(4,2)+','+jtop.substr(6,2));
/* recherche liste pages citations */
progressop.innerHTML += 'Recherche pages de citations...<br />';
xhr_object.open('GET', '/w/index.php?title=Special%3APages+li%C3%A9es&limit=500&target=Mod%C3%A8le%3AExtrait&namespace=0', false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 3 - Abandon';
return;
}
/* recup contenu utile */
var pagesrch = xhr_object.responseText.split(/Voir \([0-9]+ précédentes\)/g);
tabul = pagesrch[1].split(/<ul><li>|<\/ul>/gi);
tabli = tabul[1].split(/<li>/gi);
var n = 0;
var tabpagecit = new Array();
/* sauve liste des pages */
for (var i = 0; i < tabli.length ; i++) {
if (tabli[i].match(/title="Accueil"/i)) continue;
tabpagecit[n] = new Array();
tabpagecit[n]['href'] = tabli[i].match(/href="([^"]*)"/i)[1];
tabpagecit[n]['title'] = tabli[i].match(/title="([^"]*)"/i)[1];
n++;
}
progressop.innerHTML += 'Pages trouvées : '+n+'<br />Recherche liste des citations...<br />';
/* crée sous-tableaux citations */
var nbc = 0;
for (var i = 0; i < n ; i++) {
progressop.innerHTML += '...'+tabpagecit[i]["title"]+'...<br />';
tabpagecit[i]['list'] = getabcitationperpage(xhr_object, tabpagecit[i]['href']);
nbc += tabpagecit[i]['list'].length;
alert(nbc);
}
progressop.innerHTML += 'Citations trouvées : '+nbc+'<br />';
progressop.innerHTML += 'Tri par ordre d’identifiants...<br />';
/* récup et tri des id */
var tabid = new Array();
var ra = 0;
for (var i = 0; i < n ; i++) {
var ri = 0;
while (tabpagecit[i]['list'][ri] != undefined) {
tabid[ra] = new Array();
tabid[ra]['id'] = tabpagecit[i]['list'][ri++]['id'];
tabid[ra++]['np'] = i;
}
}
tabid.sort();
/* controle doublons */
for (var db = 1; db < tabid.length ; db++) {
if (tabid[db]['id'] == tabid[db-1]['id']) progressop.innerHTML += '<font color="red">Trouvé identifiant en double : tabid[db]["id"]</font><br />';
}
alert(tabid.length);
progressop.innerHTML += 'Tirage de '+(30 - nbj)+' citations...<br />';
/* cherche rtop (les ids sont tirés dans l'ordre croissant à partir du plus haut actuel dans la liste des citations) */
for (var ta = 0; ta < tabid.length ; ta++) {
if (tabid[ta]['id'] >= rtop) break;
}
/* si fin de la table des ids reprend au début */
if (ta >= tabid.length) ta = 0;
/* tirage de 30 - nbj id > rtop */
var tirage = new Array();
for (var tb = 0; tb < (30 - nbj) ; tb++) {
tirage[tb] = new Array();
tirage[tb]['id'] = tabid[ta]['id'];
tirage[tb]['np'] = tabid[ta++]['np'];
if (ta >= tabid.length) ta = 0;
}
alert(tirage.join(" "));
/* récup citations tirées et ajoute dans buf page citations */
for (var tb = 0; tb < tirage.length ; tb++) {
/* jour suivant */
djtop.setDate(djtop.getDate() + 1);
var nextday = formatdateyyyymmdd(djtop);
/* cherche texte pour chaque citation choisie */
alert(tabpagecit[tirage[tb]['np']]['list'].length);
for (var rx = 0; rx < tabpagecit[tirage[tb]['np']]['list'].length; rx++) {
if (tabpagecit[tirage[tb]['np']]['list'][rx]['id'] == tirage[tb]['id']) {
buf += '| '+nextday+'='+tabpagecit[tirage[tb]['np']]['list'][rx]['cit']+'\n';
}
}
}
/* ajoute fin switch et texte fin */
buf += '|#default=\n}}\n{{BoyWiki:Accueil/Citation du jour Refresh}}';
/* récup éléments du formulaire */
pagedit = pagedit[0]+pagedit[2];
pagedit = pagedit.replace(/\n/g, '');
var startime = pagedit.match(/wpSection.*name="wpStarttime/i);
startime = startime[0].replace(/.*value="([0-9]+)" name="wpStarttime/i, '$1');
var editime = pagedit.match(/wpStarttime.*name="wpEdittime/i);
editime = editime[0].replace(/.*value="([0-9]+)" name="wpEdittime/i, '$1');
var editoken = pagedit.match(/.{80}name="wpEditToken/i);
editoken = editoken[0].replace(/.*value="([0-f+]+)" name="wpEditToken/i, '$1');
var autosummary = pagedit.match(/wpAutoSummary.{1,30}value="[^"]+"/i);
autosummary = autosummary[0].replace(/.*value="([0-f]+)"/i, '$1');
var summary = 'Routine prepare citation du jour';
/* init requete serveur - maj sous-page Accueil/Citation */
var boundary = '--------------23242526272829';
var data = '';
//data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpAntispam"\r\n\r\n\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSection"\r\n\r\n\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpScrolltop"\r\n\r\n0\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpStarttime"\r\n\r\n'+startime+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEdittime"\r\n\r\n'+editime+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEditToken"\r\n\r\n'+editoken+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSummary"\r\n\r\n'+summary+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpAutoSummary"\r\n\r\n'+autosummary+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSave"\r\n\r\nPublier\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpTextbox1"\r\n\r\n'+buf+'\r\n';
data += '--'+boundary+'--\r\n';
xhr_object.open('POST', '/w/index.php?title=Utilisateur:Pinocchio/Test2&action=submit', false);
//xhr_object.setRequestHeader("Host", "fr.boywiki.org");
xhr_object.setRequestHeader("Charset", "utf-8");
xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
xhr_object.setRequestHeader("Content-Length", String(data.length));
xhr_object.send(data);
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 6 - Abandon';
}
else progressop.innerHTML += 'Fin procédure.';
}
/* retourne un tableau des citations par id pour la page href */
function getabcitationperpage(xhr_object,href) {
/* init requete serveur - lecture page href */
href = href.replace(/\/wiki\//, '/w/index.php?title=')+'&action=edit';
xhr_object.open('GET', href, false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML = 'Erreur 4 - Abandon';
return;
}
var tabcit = new Array();
/* recup contenu utile */
var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
/* recherche chaines modèles {{Extrait}} */
var content = pagedit[1].split(/\{\{[Ee]xtrait\|/g);
if (content == null) return;
/* pour chaque modèle trouvé */
var nc = 0;
for (var m = 1; m < content.length ; m++) {
/* recherche fin modèle (parenthèses de fermeture) - extraction contenu */
var open = 1;
var close = 0;
for (var i = 0; i < content[m].length ; i++) {
if (content[m][i] == '{' && content[m][i+1] == '{') {open++; i++;}
if (content[m][i] == '}' && content[m][i+1] == '}') {close++; i++;}
if (open == close) break;
}
var submodl = content[m].substr(0,i-1);
/* controle args (si id absent ou cdj=non) */
var id = submodl.match(/^id=([0-9]{6,9})\|/);
if (id == null) continue;
if (submodl.match(/^ ?cdj=non ?\|/)) continue;
/* tronque citation si trop longue */
var trc = submodl.split(/\{\{[Rr]éf [Ll]ivre/);
var citrc = '';
if (trc[1].length > 560) {
citrc = trc[1].substr(0,550);
citrc = citrc.substr(0, citrc.lastIndexOf(' '));
citrc = citrc+' (...)\n{{Réf Livre|'+trc[2];
}
/* copie contenu modèle */
tabcit[nc] = new Array();
tabcit[nc]['id'] = id[1];
if (citrc.length > 0) tabcit[nc]['cit'] = '{{Extrait|'+citrc+'}}';
else tabcit[nc]['cit'] = '{{Extrait|'+submodl+'}}';
nc++;
}
return tabcit;
}