« Utilisateur:Pinocchio/citation du jour.js » : différence entre les versions
De BoyWiki
(m) |
(modif code prépare citations) |
||
Ligne 3 : | Ligne 3 : | ||
function refresh_citation_du_jour() { | function refresh_citation_du_jour() { | ||
/ | // seulement pour page Accueil (tout utilisateur a visiblement le droit de puger le cache) | ||
if (wgPageName != 'Accueil') return; | if (wgPageName != 'Accueil') return; | ||
if (wgAction != 'view') return; | if (wgAction != 'view') return; | ||
/ | // récup date dernière mise en cache de la page | ||
var datecache = null; | var datecache = null; | ||
var nodes = document.getElementById('bodyContent').childNodes; | var nodes = document.getElementById('bodyContent').childNodes; | ||
Ligne 18 : | Ligne 18 : | ||
if (datecache == null) return; | if (datecache == null) return; | ||
/ | // date actuelle locale | ||
var now = new Date(); | var now = new Date(); | ||
var datenow = formatdateyyyymmdd(now); | var datenow = formatdateyyyymmdd(now); | ||
Ligne 24 : | Ligne 24 : | ||
if (datecache[1] < datenow) { | if (datecache[1] < datenow) { | ||
/ | // init objet requete serveur | ||
var xhr_object = createxhrobject(); | var xhr_object = createxhrobject(); | ||
if (xhr_object == null) return; | if (xhr_object == null) return; | ||
/ | // init requete serveur - purge cache pour page Accueil | ||
xhr_object.open('POST', '/wiki/Accueil', true); | xhr_object.open('POST', '/wiki/Accueil', true); | ||
xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); | xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); | ||
xhr_object.setRequestHeader("Charset", "utf-8"); | xhr_object.setRequestHeader("Charset", "utf-8"); | ||
/ | // action sur fin requete async | ||
//xhr_object.onreadystatechange = function() { | //xhr_object.onreadystatechange = function() { | ||
// if (xhr_object.readyState == 4) alert(xhr_object.status); | // if (xhr_object.readyState == 4) alert(xhr_object.status); | ||
Ligne 46 : | Ligne 46 : | ||
/* Retourne la date formatée yyyymmdd */ | /* Retourne la date formatée yyyymmdd */ | ||
function formatdateyyyymmdd(obj) { | function formatdateyyyymmdd(obj) { | ||
var yer = obj.getFullYear(); | var yer = obj.getFullYear(); | ||
Ligne 59 : | Ligne 60 : | ||
/* Affecte un identifiant à chaque citation utilisant le modèle Extrait | /* Affecte un identifiant à chaque citation utilisant le modèle Extrait | ||
/* une seule fois au moment de sa création utilisé pour sélection aléatoire citation du jour | /* une seule fois au moment de sa création | ||
/* utilisé pour sélection aléatoire citation du jour | |||
/* lancé par submit */ | /* lancé par submit */ | ||
function ident_citation_du_jour() { | function ident_citation_du_jour() { | ||
/ | // contenu zone édition | ||
if (document.forms['editform'].elements['wpTextbox1'] == undefined) return true; | if (document.forms['editform'].elements['wpTextbox1'] == undefined) return true; | ||
/ | // seulement les pages articles de l'espace principal (ns0) | ||
if (wgNamespaceNumber != 0) return true; | if (wgNamespaceNumber != 0) return true; | ||
var content = document.forms['editform'].elements['wpTextbox1'].value; | var content = document.forms['editform'].elements['wpTextbox1'].value; | ||
/ | // recherche chaines modèles {{Extrait}} | ||
var content = content.split(/\{\{[Ee]xtrait\|/g); | var content = content.split(/\{\{[Ee]xtrait\|/g); | ||
if (content == null) return; | if (content == null) return; | ||
/ | // copie texte zone edit avant premier {{extrait}} | ||
var buf = content[0]; | var buf = content[0]; | ||
/ | // liste des idents créés | ||
/ | // pour tout les modèles trouvés | ||
for (var m = 1; m < content.length ; m++) { | for (var m = 1; m < content.length ; m++) { | ||
/ | // recherche fin modèle (parenthèses fermeture) - extraction contenu | ||
var open = 1; | var open = 1; | ||
var close = 0; | var close = 0; | ||
Ligne 89 : | Ligne 90 : | ||
var submodl = content[m].substr(0,i-1); | 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 ?\|/)) { | if (! submodl.match(/^id=[0-9]{6,9}\||^ ?cdj=non ?\|/)) { | ||
/ | // génére nombre aléatoire entre 1000000 et 9999999 | ||
var rdm = Math.floor(8999999 * Math.random()) + 1000000; | var rdm = Math.floor(8999999 * Math.random()) + 1000000; | ||
/ | // recrée syntaxe modèle avec id | ||
var tmp = '{{Extrait|id='+rdm+'|'+submodl+'}}'; | var tmp = '{{Extrait|id='+rdm+'|'+submodl+'}}'; | ||
/ | // ajoute dans liste idents créés | ||
} else { | } else { | ||
/ | // recrée modèle orig | ||
var tmp = '{{Extrait|'+submodl+'}}'; | var tmp = '{{Extrait|'+submodl+'}}'; | ||
} | } | ||
/ | // ajoute contenu modèle + texte restant après fin modèle | ||
buf += tmp; | buf += tmp; | ||
buf += content[m].substr(i+1); | buf += content[m].substr(i+1); | ||
} | } | ||
/ | // insertion modifs dans zone edit | ||
document.forms['editform'].elements['wpTextbox1'].value = buf; | document.forms['editform'].elements['wpTextbox1'].value = buf; | ||
} | } | ||
Ligne 111 : | Ligne 112 : | ||
/* Prépare | /* Prépare lots de citations et images pour les jours suivants | ||
/* | /* Création page de lancement manuel */ | ||
function prepare_citation_du_jour() { | function prepare_citation_du_jour() { | ||
/ | // seulement pour page Accueil/Prépare et utilisateur ayant droit écriture dans sous-page Accueil | ||
if (wgPageName != 'BoyWiki:Accueil/Citation_du_jour_Prepare') return; | if (wgPageName != 'BoyWiki:Accueil/Citation_du_jour_Prepare') return; | ||
if (wgUserGroups == null || wgUserGroups.join(" ").match(/scribe|sysop|fsc|bureaucrat/) == null) return; | if (wgUserGroups == null || wgUserGroups.join(" ").match(/scribe|sysop|fsc|bureaucrat/) == null) return; | ||
if (wgAction != 'view') return; | if (wgAction != 'view') return; | ||
/ | // créat div déroulement procédure | ||
var progressop = document.createElement('div'); | var progressop = document.createElement('div'); | ||
progressop.setAttribute('id', 'progress_op'); | progressop.setAttribute('id', 'progress_op'); | ||
/ | progressop.style.textAlign = 'center'; | ||
progressop.innerHTML = '<button type="button" style=" | // ajout boutons lancement | ||
progressop.innerHTML = '<button type="button" style="margin:20px;" value="" onclick="prepare_cdj_idj_load(\'c\')" />Citations</button>'; | |||
progressop.innerHTML = '<button type="button" style="margin:20px;" value="" onclick="prepare_cdj_idj_load(\'i\')" />Images</button>'; | |||
document.getElementById('bodyContent').appendChild(progressop); | document.getElementById('bodyContent').appendChild(progressop); | ||
} | } | ||
Ligne 132 : | Ligne 134 : | ||
/* suite lancée par | /* suite lancée par action boutons */ | ||
/* Chargement de la page code avant exec */ | |||
function prepare_cdj_idj_load(q) { | |||
importScript('Utilisateur:Pinocchio/citations_images_du_jour.js'); | |||
setTimeout(function() {prepare_cdj_idj_load_wait(q);},500); | |||
} | } | ||
/* Attente fin chargement avant exec */ | |||
/* | function prepare_cdj_idj_load_wait(q) { | ||
if (typeof(getabcitationperpage) == 'function') { | |||
function | switch(q){ | ||
case c: prepare_cdj_exec(); break; | |||
case i: prepare_idj_exec(); break; | |||
} | } | ||
} | } | ||
else var x = setTimeout(function() {prepare_cdj_idj_load_wait(q);},500); | |||
} | } |
Version du 2 décembre 2010 à 15:50
/* La première lecture du jour de la page Accueil de la veille
/* provoque son rafraichissement par purge du cache */
function refresh_citation_du_jour() {
// seulement pour page Accueil (tout utilisateur a visiblement le droit de puger le cache)
if (wgPageName != 'Accueil') return;
if (wgAction != 'view') return;
// récup date dernière mise en cache de la page
var datecache = null;
var nodes = document.getElementById('bodyContent').childNodes;
for (var i=0; i < nodes.length ; i++) {
if (nodes[i].nodeName == '#comment' && nodes[i].data.match(/timestamp [0-9]{14}/)) {
datecache = nodes[i].data.match(/timestamp ([0-9]{8})/);
break;
}
}
if (datecache == null) return;
// date actuelle locale
var now = new Date();
var datenow = formatdateyyyymmdd(now);
if (datecache[1] < datenow) {
// init objet requete serveur
var xhr_object = createxhrobject();
if (xhr_object == null) return;
// init requete serveur - purge cache pour page Accueil
xhr_object.open('POST', '/wiki/Accueil', true);
xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr_object.setRequestHeader("Charset", "utf-8");
// action sur fin requete async
//xhr_object.onreadystatechange = function() {
// if (xhr_object.readyState == 4) alert(xhr_object.status);
//}
xhr_object.send('action=purge');
}
}
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.toString()+mon.toString()+day.toString();
}
/* Affecte un identifiant à chaque citation utilisant le modèle Extrait
/* une seule fois au moment de sa création
/* utilisé pour sélection aléatoire citation du jour
/* lancé par submit */
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
// pour tout les modèles trouvés
for (var m = 1; m < content.length ; m++) {
// recherche fin modèle (parenthèses 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 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
} 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 lots de citations et images pour les jours suivants
/* Création page de lancement manuel */
function prepare_citation_du_jour() {
// seulement pour page Accueil/Prépare 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;
// créat div déroulement procédure
var progressop = document.createElement('div');
progressop.setAttribute('id', 'progress_op');
progressop.style.textAlign = 'center';
// ajout boutons lancement
progressop.innerHTML = '<button type="button" style="margin:20px;" value="" onclick="prepare_cdj_idj_load(\'c\')" />Citations</button>';
progressop.innerHTML = '<button type="button" style="margin:20px;" value="" onclick="prepare_cdj_idj_load(\'i\')" />Images</button>';
document.getElementById('bodyContent').appendChild(progressop);
}
addOnloadHook(prepare_citation_du_jour);
/* suite lancée par action boutons */
/* Chargement de la page code avant exec */
function prepare_cdj_idj_load(q) {
importScript('Utilisateur:Pinocchio/citations_images_du_jour.js');
setTimeout(function() {prepare_cdj_idj_load_wait(q);},500);
}
/* Attente fin chargement avant exec */
function prepare_cdj_idj_load_wait(q) {
if (typeof(getabcitationperpage) == 'function') {
switch(q){
case c: prepare_cdj_exec(); break;
case i: prepare_idj_exec(); break;
}
}
else var x = setTimeout(function() {prepare_cdj_idj_load_wait(q);},500);
}