« Utilisateur:Pinocchio/citation du jour.js » : différence entre les versions

De BoyWiki
(m)
(m)
Ligne 146 : Ligne 146 :
   if (typeof(getabcitationperpage) == 'function') {
   if (typeof(getabcitationperpage) == 'function') {
       switch(q){
       switch(q){
         case c: prepare_cdj_exec(); break;
         case 'c': prepare_cdj_exec(); break;
         case i: prepare_idj_exec(); break;
         case 'i': prepare_idj_exec(); break;
       }
       }
   }
   }
   else var x = setTimeout(function() {prepare_cdj_idj_load_wait(q);},500);
   else var x = setTimeout(function() {prepare_cdj_idj_load_wait(q);},500);
}
}

Version du 2 décembre 2010 à 17:18

/* 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);
}