« Utilisateur:Pinocchio/citations images du jour.js » : différence entre les versions
De BoyWiki
(m) |
(query continue compatibility v1.26) |
||
(18 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 5 : | Ligne 5 : | ||
/* maj sous-page Accueil/image du jour */ | /* maj sous-page Accueil/image du jour */ | ||
function prepare_idj_exec() { | function prepare_idj_exec() { | ||
var progressop = document.getElementById('progress_op'); | var progressop = document.getElementById('progress_op');https://www.boywiki.org/fr/Sp%C3%A9cial:AdminLinks | ||
// | |||
progressop.innerHTML += '<br />Lecture état actuel...'; | |||
progressop.innerHTML += | |||
var xhr_object = createxhrobject(); | var xhr_object = createxhrobject(); | ||
if (xhr_object == null) { | if (xhr_object == null) { | ||
Ligne 53 : | Ligne 16 : | ||
// init requete serveur - lecture sous-page Accueil/image | // init requete serveur - lecture sous-page Accueil/image | ||
xhr_object.open('GET', '/ | xhr_object.open('GET', '/fr/index.php?title=BoyWiki:Accueil/Image_du_jour&action=edit', false); | ||
xhr_object.send(''); | xhr_object.send(''); | ||
if (xhr_object.readyState != 4 || xhr_object.status != 200) { | if (xhr_object.readyState != 4 || xhr_object.status != 200) { | ||
Ligne 79 : | Ligne 42 : | ||
var nbj = 0; | var nbj = 0; | ||
var jtop = '00000000'; | var jtop = '00000000'; | ||
var rtop = ' | var rtop = '0000000'; | ||
for (var i = 1; i < tabsw.length ; i++) { | for (var i = 1; i < tabsw.length ; i++) { | ||
var cas = tabsw[i].match(/^([0-9]{8})=/); | var cas = tabsw[i].match(/^([0-9]{8})=/); | ||
Ligne 90 : | Ligne 53 : | ||
if (jtop == '00000000') jtop = today; | if (jtop == '00000000') jtop = today; | ||
// recup id top | // recup id top | ||
var rdm = tabsw[i-1].match(/--([0- | var rdm = tabsw[i-1].match(/--([0-9]{6,9})--/); | ||
if (rdm) rtop = rdm[1]; | if (rdm) rtop = rdm[1]; | ||
Ligne 99 : | Ligne 62 : | ||
// date de jtop | // date de jtop | ||
var djtop = new Date(jtop.substr(0,4)+','+jtop.substr(4,2)+','+jtop.substr(6,2)); | var djtop = new Date(jtop.substr(0,4)+','+jtop.substr(4,2)+','+jtop.substr(6,2)); | ||
// recherche liste images dispos (=souspages comment) | |||
progressop.innerHTML += 'Recherche images disponibles...<br />'; | |||
var suite = '4|0'; | |||
var tabimgs = new Array(); | |||
var tabid = new Array(); | |||
var ni = 0; | |||
while (suite!=null) { | |||
// transfert content pages comment images espace 4 sans redirect format json (par 500 max) | |||
xhr_object.open('GET', '/fr/api.php?action=query&generator=embeddedin&geilimit=500&geinamespace=4&geifilterredir=nonredirects&prop=revisions&rvprop=content&geititle=Mod%E8le:Image_texte&format=json&rawcontinue&geicontinue='+suite, false); | |||
xhr_object.send(''); | |||
if (xhr_object.readyState != 4 || xhr_object.status != 200) { | |||
progressop.innerHTML += 'Erreur 3 - Abandon'; | |||
return; | |||
} | |||
var pagescmt = JSON.parse(xhr_object.responseText); | |||
// si suite indic reprise (500 max par req) | |||
if (pagescmt['query-continue']) suite = pagescmt['query-continue'].embeddedin.geicontinue; | |||
else suite = null; | |||
// sauve titre et id (Attention pageid < 6000 à augmenter) | |||
for (var i=2; i < 6000 ; i++) { | |||
if (pagescmt.query.pages[i]) { | |||
tabimgs[ni] = new Array(); | |||
var sspg = pagescmt.query.pages[i].title.split(/\//); | |||
if (!sspg[1]) continue; | |||
tabimgs[ni]['title'] = sspg[1]; | |||
var cont = pagescmt.query.pages[i].revisions[0]['*']; | |||
var id = cont.match(/\{\{[Ii]mage texte\|id=([0-9]{6,9})\|/); | |||
if (id == null) continue; | |||
if (cont.match(/^ ?idj=non ?\|/)) continue; | |||
tabimgs[ni]['id'] = id[1]; | |||
tabid[ni] = tabimgs[ni]['id']; | |||
ni++; | |||
} | |||
} | |||
} | |||
progressop.innerHTML += 'Tri | progressop.innerHTML += 'Images retenues : '+tabid.length+'<br />'; | ||
// tri par ordre | progressop.innerHTML += 'Tri par ordre id...<br />'; | ||
// tri par ordre id | |||
tabid.sort(); | tabid.sort(); | ||
// controle doublons | |||
for (var db = 1; db < tabid.length ; db++) { | |||
if (tabid[db] == tabid[db-1]) progressop.innerHTML += '<font color="red">Trouvé identifiant en double : '+tabid[db]+'</font><br />'; | |||
} | |||
progressop.innerHTML += 'Tirage de '+(30 - nbj)+' images...<br />'; | progressop.innerHTML += 'Tirage de '+(30 - nbj)+' images...<br />'; | ||
Ligne 126 : | Ligne 134 : | ||
// trouve titre et descr correspondant chaque id | // trouve titre et descr correspondant chaque id | ||
for (var ni= | for (var ni=0; ni<tabimgs.length; ni++) { | ||
if ( | if (tabimgs[ni]['id'] == tirage[tb]) { | ||
buf += '\n| '+nextday+'= | buf += '\n| '+nextday+'=[[Image:'+tabimgs[ni]['title']+'|900x700px|frameless]]'; | ||
buf += '{{BoyWiki:Commentaires des images/'+tabimgs[ni]['title']+'}}'; | |||
buf += ' | |||
break; | break; | ||
} | } | ||
} | } | ||
} | } | ||
// ajoute fin switch et id top | // ajoute fin switch et id top | ||
buf += '\n|#default=\n}}<!--'+tirage[tb-1]+'-->'; | buf += '\n|#default=\n}}<!--'+tirage[tb-1]+'-->'; | ||
Ligne 161 : | Ligne 151 : | ||
buf = buf.replace(/"/g, '"'); | buf = buf.replace(/"/g, '"'); | ||
progressop.innerHTML += 'Mise à jour sous-page | progressop.innerHTML += 'Mise à jour sous-page images du jour...<br />'; | ||
// récup éléments du formulaire | // récup éléments du formulaire | ||
Ligne 189 : | Ligne 179 : | ||
data += '--'+boundary+'--\r\n'; | data += '--'+boundary+'--\r\n'; | ||
xhr_object.open('POST', '/ | xhr_object.open('POST', '/fr/index.php?title=BoyWiki:Accueil/Image_du_jour&action=submit', false); | ||
xhr_object.setRequestHeader("Charset", "utf-8"); | xhr_object.setRequestHeader("Charset", "utf-8"); | ||
xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary); | xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary); | ||
Ligne 199 : | Ligne 189 : | ||
} | } | ||
else progressop.innerHTML += 'Fin procédure.'; | else progressop.innerHTML += 'Fin procédure.'; | ||
} | } | ||
Ligne 256 : | Ligne 208 : | ||
} | } | ||
progressop.innerHTML = 'Lecture état actuel...'; | progressop.innerHTML = '<br />Lecture état actuel...'; | ||
/ | // init requete serveur - lecture sous-page citations | ||
xhr_object.open('GET', '/ | xhr_object.open('GET', '/fr/index.php?title=BoyWiki:Accueil/Citation_du_jour&action=edit', false); | ||
xhr_object.send(''); | xhr_object.send(''); | ||
if (xhr_object.readyState != 4 || xhr_object.status != 200) { | if (xhr_object.readyState != 4 || xhr_object.status != 200) { | ||
Ligne 266 : | Ligne 218 : | ||
} | } | ||
/ | // recup contenu utile | ||
var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi); | var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi); | ||
/ | // init date du jour - date min - date max | ||
var now = new Date(); | var now = new Date(); | ||
var today = formatdateyyyymmdd(now); | var today = formatdateyyyymmdd(now); | ||
Ligne 277 : | Ligne 229 : | ||
var maxday = formatdateyyyymmdd(now); | var maxday = formatdateyyyymmdd(now); | ||
/ | // découpe contenu par cas du switch | ||
var tabsw = pagedit[1].split(/\n ?\| ?/); | var tabsw = pagedit[1].split(/\n ?\| ?/); | ||
/ | // conserve début page jusqu'à switch | ||
var buf = tabsw[0]; | var buf = tabsw[0]; | ||
/ | // parcourt les dates compte jours restant, élimine cas obsolètes, copie dans buf cas conservés | ||
var nbj = 0; | var nbj = 0; | ||
var jtop = '00000000'; | var jtop = '00000000'; | ||
Ligne 303 : | Ligne 255 : | ||
else progressop.innerHTML += 'Il y a actuellement '+nbj+' jour couvert<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)); | 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 />'; | progressop.innerHTML += 'Recherche pages de citations...<br />'; | ||
xhr_object.open('GET', '/ | xhr_object.open('GET', '/fr/api.php?action=query&list=embeddedin&eititle=Modèle:Extrait&einamespace=0&eilimit=500&rawcontinue&format=json', false); | ||
xhr_object.send(''); | xhr_object.send(''); | ||
if (xhr_object.readyState != 4 || xhr_object.status != 200) { | if (xhr_object.readyState != 4 || xhr_object.status != 200) { | ||
Ligne 314 : | Ligne 266 : | ||
return; | return; | ||
} | } | ||
/ | // recup contenu utile | ||
var pagesrch = xhr_object.responseText | var pagesrch = JSON.parse(xhr_object.responseText); | ||
var tabpagecit = new Array(); | |||
// sauve liste des pages (Attention pageid < 6000 à augmenter) | |||
var n = 0; | var n = 0; | ||
for (var i=2; i < 6000 ; i++) { | |||
if (pagesrch.query.embeddedin[i]) { | |||
for (var i = | tabpagecit[n] = new Array(); | ||
if ( | tabpagecit[n]['title'] = pagesrch.query.embeddedin[i].title; | ||
n++; | |||
} | |||
} | } | ||
progressop.innerHTML += 'Pages trouvées : '+n+'<br />Recherche liste des citations...<br />'; | progressop.innerHTML += 'Pages trouvées : '+n+'<br />Recherche liste des citations...<br />'; | ||
/ | // crée sous-tableaux citations | ||
var nbc = 0; | var nbc = 0; | ||
for (var i = 0; i < n ; i++) { | for (var i = 0; i < n ; i++) { | ||
progressop.innerHTML += '...'+tabpagecit[i]["title"]+'...<br />'; | progressop.innerHTML += '...'+tabpagecit[i]["title"]+'...<br />'; | ||
tabpagecit[i]['list'] = getabcitationperpage(xhr_object, tabpagecit[i][' | tabpagecit[i]['list'] = getabcitationperpage(xhr_object, '/fr/'+tabpagecit[i]['title']); | ||
nbc += tabpagecit[i]['list'].length; | nbc += tabpagecit[i]['list'].length; | ||
} | } | ||
Ligne 340 : | Ligne 290 : | ||
progressop.innerHTML += 'Tri par ordre d’identifiants...<br />'; | progressop.innerHTML += 'Tri par ordre d’identifiants...<br />'; | ||
/ | // récup et tri des id | ||
var tabid = new Array(); | var tabid = new Array(); | ||
var ri = 0; | var ri = 0; | ||
Ligne 350 : | Ligne 300 : | ||
tabid = tabid.sort(); | tabid = tabid.sort(); | ||
/ | // controle doublons | ||
for (var db = 1; db < tabid.length ; db++) { | for (var db = 1; db < tabid.length ; db++) { | ||
if (tabid[db] == tabid[db-1]) progressop.innerHTML += '<font color="red">Trouvé identifiant en double : '+tabid[db]+'</font><br />'; | if (tabid[db] == tabid[db-1]) progressop.innerHTML += '<font color="red">Trouvé identifiant en double : '+tabid[db]+'</font><br />'; | ||
Ligne 356 : | Ligne 306 : | ||
progressop.innerHTML += 'Tirage de '+(30 - nbj)+' citations...<br />'; | progressop.innerHTML += 'Tirage de '+(30 - nbj)+' citations...<br />'; | ||
/ | // cherche rtop (les ids sont tirés dans ordre croissant à partir du plus haut actuel dans liste des citations) | ||
for (var ta = 0; ta < tabid.length ; ta++) { | for (var ta = 0; ta < tabid.length ; ta++) { | ||
if (tabid[ta] > rtop) break; | if (tabid[ta] > rtop) break; | ||
} | } | ||
/ | // si fin de la table des ids reprend au début | ||
if (ta >= tabid.length) ta = 0; | if (ta >= tabid.length) ta = 0; | ||
/ | // tirage de 30 - nbj id > rtop | ||
var tirage = new Array(); | var tirage = new Array(); | ||
for (var tb = 0; tb < (30 - nbj) ; tb++) { | for (var tb = 0; tb < (30 - nbj) ; tb++) { | ||
Ligne 368 : | Ligne 318 : | ||
if (ta >= tabid.length) ta = 0; | if (ta >= tabid.length) ta = 0; | ||
} | } | ||
/ | // récup citations tirées et ajoute dans buf page citations | ||
for (var tb = 0; tb < tirage.length ; tb++) { | for (var tb = 0; tb < tirage.length ; tb++) { | ||
/ | // jour suivant | ||
djtop.setDate(djtop.getDate() + 1); | djtop.setDate(djtop.getDate() + 1); | ||
var nextday = formatdateyyyymmdd(djtop); | var nextday = formatdateyyyymmdd(djtop); | ||
/ | // cherche texte et page pour chaque id choisi | ||
stop: for (var np = 0; np < tabpagecit.length; np++) { | stop: for (var np = 0; np < tabpagecit.length; np++) { | ||
for (var rx = 0; rx < tabpagecit[np]['list'].length; rx++) { | for (var rx = 0; rx < tabpagecit[np]['list'].length; rx++) { | ||
if (tabpagecit[np]['list'][rx]['id'] == tirage[tb]) { | if (tabpagecit[np]['list'][rx]['id'] == tirage[tb]) { | ||
buf += '\n| '+nextday+'= | buf += '\n| '+nextday+'='+tabpagecit[np]['list'][rx]['cit']; | ||
buf += '\n'+tabpagecit[np][' | buf += '\n<p id="cdjlnk">→ Citation extraite de la page [['+tabpagecit[np]['title']+']]</p>'; | ||
break stop; | break stop; | ||
} | } | ||
Ligne 386 : | Ligne 336 : | ||
} | } | ||
/ | // ajoute fin switch | ||
buf += '\n|#default=\n}}'; | buf += '\n|#default=\n}}'; | ||
/ | // remplace html entities (dues à texte origine edit vers view) | ||
buf = buf.replace(/</g, '<'); | buf = buf.replace(/</g, '<'); | ||
buf = buf.replace(/>/g, '>'); | buf = buf.replace(/>/g, '>'); | ||
Ligne 396 : | Ligne 346 : | ||
progressop.innerHTML += 'Mise à jour page des citations...<br />'; | progressop.innerHTML += 'Mise à jour page des citations...<br />'; | ||
/ | // récup éléments du formulaire | ||
pagedit = pagedit[0]+pagedit[2]; | pagedit = pagedit[0]+pagedit[2]; | ||
pagedit = pagedit.replace(/\n/g, ''); | pagedit = pagedit.replace(/\n/g, ''); | ||
Ligne 409 : | Ligne 359 : | ||
var summary = 'Routine prepare citation du jour'; | var summary = 'Routine prepare citation du jour'; | ||
/ | // init requete serveur - maj sous-page Accueil/Citation | ||
var boundary = '--------------23242526272829'; | var boundary = '--------------23242526272829'; | ||
var data = ''; | var data = ''; | ||
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSection"\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="wpScrolltop"\r\n\r\n0\r\n'; | ||
Ligne 424 : | Ligne 373 : | ||
data += '--'+boundary+'--\r\n'; | data += '--'+boundary+'--\r\n'; | ||
xhr_object.open('POST', '/ | xhr_object.open('POST', '/fr/index.php?title=BoyWiki:Accueil/Citation_du_jour&action=submit', false); | ||
xhr_object.setRequestHeader("Charset", "utf-8"); | xhr_object.setRequestHeader("Charset", "utf-8"); | ||
xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary); | xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary); | ||
Ligne 441 : | Ligne 389 : | ||
function getabcitationperpage(xhr_object,href) { | function getabcitationperpage(xhr_object,href) { | ||
/ | // init requete serveur - lecture page href | ||
href = href.replace(/\/ | href = href.replace(/\/fr\//, '/fr/index.php?title=')+'&action=edit'; | ||
xhr_object.open('GET', href, false); | xhr_object.open('GET', href, false); | ||
xhr_object.send(''); | xhr_object.send(''); | ||
Ligne 451 : | Ligne 399 : | ||
var tabcit = new Array(); | var tabcit = new Array(); | ||
/ | // recup contenu utile | ||
var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi); | var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi); | ||
/ | // recherche chaines modèles {{Extrait}} | ||
var content = pagedit[1].split(/\{\{[Ee]xtrait\|/g); | var content = pagedit[1].split(/\{\{[Ee]xtrait\|/g); | ||
if (content == null) return; | if (content == null) return; | ||
/ | // pour chaque modèle trouvé | ||
var nc = 0; | var nc = 0; | ||
for (var m = 1; m < content.length ; m++) { | for (var m = 1; m < content.length ; m++) { | ||
/ | // recherche fin modèle (parenthèses de fermeture) - extract contenu | ||
var open = 1; | var open = 1; | ||
var close = 0; | var close = 0; | ||
Ligne 469 : | Ligne 417 : | ||
} | } | ||
var submodl = content[m].substr(0,i-1); | 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})\|/); | var id = submodl.match(/^id=([0-9]{6,9})\|/); | ||
if (id == null) continue; | if (id == null) continue; | ||
if (submodl.match(/^ ?cdj=non ?\|/)) continue; | if (submodl.match(/^ ?cdj=non ?\|/)) continue; | ||
/ | // retire les <ref> eventuels | ||
var nbchrmax = | var supref = submodl.split(/<ref>|<\/ref>/g); | ||
switch (supref.length) { | |||
case 3: | |||
submodl = supref[0]+supref[2]; break; | |||
case 5: | |||
submodl = supref[0]+supref[2]+supref[4]; break; | |||
case 7: | |||
submodl = supref[0]+supref[2]+supref[4]+supref[6]; break; | |||
} | |||
// tronque citation si trop longue | |||
var nbchrmax = 1000; | |||
var citrc = ''; | var citrc = ''; | ||
var | var rgx = /\{\{réf livre\||\{\{réf article\|/i; | ||
//var rgx = new RegExp('\{\{réf livre\||\{\{réf article\|','i'); | |||
var trc = submodl.split(rgx); | |||
if (trc[0].length > nbchrmax) { | if (trc[0].length > nbchrmax) { | ||
citrc = trc[0].substr(0,(nbchrmax-10)); | citrc = trc[0].substr(0,(nbchrmax-10)); | ||
citrc = citrc.substr(0, citrc.lastIndexOf(' ')); | citrc = citrc.substr(0, citrc.lastIndexOf(' ')); | ||
if (trc[1] != undefined) citrc = citrc+' (...)\n | if (trc[1] != undefined) citrc = citrc+' (...)\n'+RegExp.lastMatch+trc[1]; | ||
else citrc = citrc+' (...)'; | else citrc = citrc+' (...)'; | ||
} | } | ||
/ | // copie contenu modèle | ||
tabcit[nc] = new Array(); | tabcit[nc] = new Array(); | ||
tabcit[nc]['id'] = id[1]; | tabcit[nc]['id'] = id[1]; |
Dernière version du 16 décembre 2015 à 15:01
/************* Images du jour ****************/
/* Lancé par bouton page Utilisateur:Pinocchio/citation_du_jour.js */
/* Recherche images disponibles, sélection pseudo aléatoire,
/* maj sous-page Accueil/image du jour */
function prepare_idj_exec() {
var progressop = document.getElementById('progress_op');https://www.boywiki.org/fr/Sp%C3%A9cial:AdminLinks
progressop.innerHTML += '<br />Lecture état actuel...';
var xhr_object = createxhrobject();
if (xhr_object == null) {
progressop.innerHTML = 'Erreur 1 - Abandon';
return;
}
// init requete serveur - lecture sous-page Accueil/image
xhr_object.open('GET', '/fr/index.php?title=BoyWiki:Accueil/Image_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];
// parcourt 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) {
if (cas[1] > jtop) jtop = cas[1];
if (cas[1] >= minday) buf += '\n| '+tabsw[i];
if (cas[1] > today) nbj++;
}
}
if (jtop == '00000000') jtop = today;
// recup id top
var rdm = tabsw[i-1].match(/--([0-9]{6,9})--/);
if (rdm) 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 images dispos (=souspages comment)
progressop.innerHTML += 'Recherche images disponibles...<br />';
var suite = '4|0';
var tabimgs = new Array();
var tabid = new Array();
var ni = 0;
while (suite!=null) {
// transfert content pages comment images espace 4 sans redirect format json (par 500 max)
xhr_object.open('GET', '/fr/api.php?action=query&generator=embeddedin&geilimit=500&geinamespace=4&geifilterredir=nonredirects&prop=revisions&rvprop=content&geititle=Mod%E8le:Image_texte&format=json&rawcontinue&geicontinue='+suite, false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 3 - Abandon';
return;
}
var pagescmt = JSON.parse(xhr_object.responseText);
// si suite indic reprise (500 max par req)
if (pagescmt['query-continue']) suite = pagescmt['query-continue'].embeddedin.geicontinue;
else suite = null;
// sauve titre et id (Attention pageid < 6000 à augmenter)
for (var i=2; i < 6000 ; i++) {
if (pagescmt.query.pages[i]) {
tabimgs[ni] = new Array();
var sspg = pagescmt.query.pages[i].title.split(/\//);
if (!sspg[1]) continue;
tabimgs[ni]['title'] = sspg[1];
var cont = pagescmt.query.pages[i].revisions[0]['*'];
var id = cont.match(/\{\{[Ii]mage texte\|id=([0-9]{6,9})\|/);
if (id == null) continue;
if (cont.match(/^ ?idj=non ?\|/)) continue;
tabimgs[ni]['id'] = id[1];
tabid[ni] = tabimgs[ni]['id'];
ni++;
}
}
}
progressop.innerHTML += 'Images retenues : '+tabid.length+'<br />';
progressop.innerHTML += 'Tri par ordre id...<br />';
// tri par ordre id
tabid.sort();
// controle doublons
for (var db = 1; db < tabid.length ; db++) {
if (tabid[db] == tabid[db-1]) progressop.innerHTML += '<font color="red">Trouvé identifiant en double : '+tabid[db]+'</font><br />';
}
progressop.innerHTML += 'Tirage de '+(30 - nbj)+' images...<br />';
// cherche rtop (ids tirés dans ordre croissant à partir du plus haut actuel)
for (var ta = 0; ta < tabid.length ; ta++) {
if (tabid[ta] > rtop) break;
}
// si fin table des ids reprend au début (>30 imgs dispo)
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] = tabid[ta++];
if (ta >= tabid.length) ta = 0;
}
// récup images tirées et ajoute dans buf page
for (var tb=0; tb < tirage.length ; tb++) {
// jour suivant
djtop.setDate(djtop.getDate() + 1);
var nextday = formatdateyyyymmdd(djtop);
// trouve titre et descr correspondant chaque id
for (var ni=0; ni<tabimgs.length; ni++) {
if (tabimgs[ni]['id'] == tirage[tb]) {
buf += '\n| '+nextday+'=[[Image:'+tabimgs[ni]['title']+'|900x700px|frameless]]';
buf += '{{BoyWiki:Commentaires des images/'+tabimgs[ni]['title']+'}}';
break;
}
}
}
// ajoute fin switch et id top
buf += '\n|#default=\n}}<!--'+tirage[tb-1]+'-->';
// remplace html entities (pb dû à texte orig format edit vers view) */
buf = buf.replace(/</g, '<');
buf = buf.replace(/>/g, '>');
buf = buf.replace(/&/g, '&');
buf = buf.replace(/"/g, '"');
progressop.innerHTML += 'Mise à jour sous-page images du jour...<br />';
// 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 image du jour';
// init requete serveur - maj sous-page Accueil/Image
var boundary = '--------------23242526272829';
var data = '';
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="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', '/fr/index.php?title=BoyWiki:Accueil/Image_du_jour&action=submit', false);
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.';
}
/************ Citations du jour ***************/
/* Lancé par bouton page Utilisateur:Pinocchio/citation_du_jour.js */
/* Recherche des pages de citations, extract citations,
/* sélection pseudo aléatoire, maj sous-page Accueil/Citation du jour */
function prepare_cdj_exec() {
var progressop = document.getElementById('progress_op');
var xhr_object = createxhrobject();
if (xhr_object == null) {
progressop.innerHTML = 'Erreur 1 - Abandon';
return;
}
progressop.innerHTML = '<br />Lecture état actuel...';
// init requete serveur - lecture sous-page citations
xhr_object.open('GET', '/fr/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];
// 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] > jtop) {
jtop = cas[1];
var rdm = tabsw[i].match(/\{\{[Ee]xtrait\|id=([0-9]{6,9})\|/);
rtop = rdm[1];
}
if (cas[1] >= minday) buf += '\n| '+tabsw[i];
if (cas[1] > today) nbj++;
}
if (jtop == '00000000') jtop = today;
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', '/fr/api.php?action=query&list=embeddedin&eititle=Modèle:Extrait&einamespace=0&eilimit=500&rawcontinue&format=json', false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 3 - Abandon';
return;
}
// recup contenu utile
var pagesrch = JSON.parse(xhr_object.responseText);
var tabpagecit = new Array();
// sauve liste des pages (Attention pageid < 6000 à augmenter)
var n = 0;
for (var i=2; i < 6000 ; i++) {
if (pagesrch.query.embeddedin[i]) {
tabpagecit[n] = new Array();
tabpagecit[n]['title'] = pagesrch.query.embeddedin[i].title;
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, '/fr/'+tabpagecit[i]['title']);
nbc += tabpagecit[i]['list'].length;
}
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 ri = 0;
var rc = 0;
for (var i = 0; i < n ; i++) {
while (tabpagecit[i]['list'][rc] != undefined) tabid[ri++] = tabpagecit[i]['list'][rc++]['id'];
rc = 0;
}
tabid = tabid.sort();
// controle doublons
for (var db = 1; db < tabid.length ; db++) {
if (tabid[db] == tabid[db-1]) progressop.innerHTML += '<font color="red">Trouvé identifiant en double : '+tabid[db]+'</font><br />';
}
progressop.innerHTML += 'Tirage de '+(30 - nbj)+' citations...<br />';
// cherche rtop (les ids sont tirés dans ordre croissant à partir du plus haut actuel dans liste des citations)
for (var ta = 0; ta < tabid.length ; ta++) {
if (tabid[ta] > 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] = tabid[ta++];
if (ta >= tabid.length) ta = 0;
}
// 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 et page pour chaque id choisi
stop: for (var np = 0; np < tabpagecit.length; np++) {
for (var rx = 0; rx < tabpagecit[np]['list'].length; rx++) {
if (tabpagecit[np]['list'][rx]['id'] == tirage[tb]) {
buf += '\n| '+nextday+'='+tabpagecit[np]['list'][rx]['cit'];
buf += '\n<p id="cdjlnk">→ Citation extraite de la page [['+tabpagecit[np]['title']+']]</p>';
break stop;
}
}
}
}
// ajoute fin switch
buf += '\n|#default=\n}}';
// remplace html entities (dues à texte origine edit vers view)
buf = buf.replace(/</g, '<');
buf = buf.replace(/>/g, '>');
buf = buf.replace(/&/g, '&');
buf = buf.replace(/"/g, '"');
progressop.innerHTML += 'Mise à jour page des citations...<br />';
// 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="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', '/fr/index.php?title=BoyWiki:Accueil/Citation_du_jour&action=submit', false);
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 extraites par id pour chaque page href */
function getabcitationperpage(xhr_object,href) {
// init requete serveur - lecture page href
href = href.replace(/\/fr\//, '/fr/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) - extract 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;
// retire les <ref> eventuels
var supref = submodl.split(/<ref>|<\/ref>/g);
switch (supref.length) {
case 3:
submodl = supref[0]+supref[2]; break;
case 5:
submodl = supref[0]+supref[2]+supref[4]; break;
case 7:
submodl = supref[0]+supref[2]+supref[4]+supref[6]; break;
}
// tronque citation si trop longue
var nbchrmax = 1000;
var citrc = '';
var rgx = /\{\{réf livre\||\{\{réf article\|/i;
//var rgx = new RegExp('\{\{réf livre\||\{\{réf article\|','i');
var trc = submodl.split(rgx);
if (trc[0].length > nbchrmax) {
citrc = trc[0].substr(0,(nbchrmax-10));
citrc = citrc.substr(0, citrc.lastIndexOf(' '));
if (trc[1] != undefined) citrc = citrc+' (...)\n'+RegExp.lastMatch+trc[1];
else citrc = citrc+' (...)';
}
// 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;
}