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

De BoyWiki
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 4 : Ligne 4 :
function refresh_citation_du_jour() {
function refresh_citation_du_jour() {
   /* seulement pour page Accueil et utilisateur ayant droit écriture dans sous-page Accueil */
   /* seulement pour page Accueil et utilisateur ayant droit écriture dans sous-page Accueil */
   if (document.body.className.match(/page-Accueil/) == null) return;
   //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 (wgUserGroups == null || wgUserGroups.join(" ").match(/scribe|sysop|fsc|bureaucrat/) == null) return;
   if (wgAction != 'view') return;
   if (wgAction != 'view') return;
Ligne 96 : Ligne 97 :
function initeventpostform() {
function initeventpostform() {
   if (wgAction == 'edit') {
   if (wgAction == 'edit') {
       if (document.forms['editform'].elements['wpTextbox1']) {
       if (document.forms['editform'].elements['wpTextbox1']== undefined) return;
        document.forms['editform'].onsubmit = ident_citation_du_jour;
      document.forms['editform'].onsubmit = ident_citation_du_jour;
      }
   }
   }
}
}
Ligne 214 : Ligne 214 :
       /* parcourt les dates et compte les jours futurs */
       /* parcourt les dates et compte les jours futurs */
       var nbj = 0;
       var nbj = 0;
  var max = 0;
      var jmax = '00000000';
       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}=/);
         if (cas > today+'=') nbj++;
         if (cas > today+'=') nbj++;
if (cas > max) max = cas;
        if (cas > jmax+'=') jmax = cas.replace(/=/,'');
       }
       }
  if (nbj >= 30) {progressop.innerHTML = 'Le nombre maximum (30) de jours couverts est atteint'; return;}
      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 if (nbj > 1) progressop.innerHTML = 'Il y a actuellement '+nbj+' jours couverts<br />';
       else progressop.innerHTML = 'Il y a actuellement '+nbj+' jour couvert<br />';
       else progressop.innerHTML = 'Il y a actuellement '+nbj+' jour couvert<br />';
       progressop.innerHTML += '<button type="button" style="display: block; margin: 20px auto;" value="" onclick="prepare_citation_du_jour_cont2('+progressop+','+xhr_object+','+nbj+','+max+')" />Continuer</button>';
       progressop.innerHTML += '<button type="button" style="display: block; margin: 20px auto;" value="" onclick="prepare_citation_du_jour_cont2('+progressop+','+xhr_object+','+nbj+','+jmax+')" />Continuer</button>';
   }
   }
}
}
Ligne 229 : Ligne 229 :


/* suite 2 lancé par bouton continuer : recherche liste pages citations */
/* suite 2 lancé par bouton continuer : recherche liste pages citations */
function prepare_citation_du_jour_cont2(progressop,xhr_object,nbj,max) {
function prepare_citation_du_jour_cont2(xhr_object,nbj,jmax) {
  var progressop = document.getElementById('progress_op');
 
   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.open('GET', '/w/index.php?title=Special%3APages+li%C3%A9es&limit=500&target=Mod%C3%A8le%3AExtrait&namespace=0', false);
   xhr_object.send('');
   xhr_object.send('');
Ligne 237 : Ligne 239 :
       tabul = pagedit[1].split(/<ul><li>|<\/ul>/gi);
       tabul = pagedit[1].split(/<ul><li>|<\/ul>/gi);
       tabli = tabul[1].split(/<li>/gi);
       tabli = tabul[1].split(/<li>/gi);
  for (var i = 0; i < tabli.length ; i++) {
      for (var i = 0; i < tabli.length ; i++) {
        var href = tabli[i].match(/href="([^"]*)"/i);
        var href = tabli[i].match(/href="([^"]*)"/i);
        var title = tabli[i].match(/title="([^"]*)"/i);
        var title = tabli[i].match(/title="([^"]*)"/i);
alert(href+'  '+title);
alert(href+'  '+title);
        
        

Version du 19 mars 2009 à 13:04

/* 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. -->';

         /* 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'].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;
}



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 1 lancé par bouton continuer : lecture sous-page citations */
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 - get 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) {
      /* recup contenu utile */
      var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
alert(pagedit[1]);

      /* init date du jour - date min - date max */
      var now = new Date();
      var today = formatdateyyyymmdd(now);

      /* découpe contenu par cas du switch */
      tabsw = pagedit[1].split(/\n ?\| ?/);
      /* parcourt les dates et compte les jours futurs */
      var nbj = 0;
      var jmax = '00000000';
      for (var i = 1; i < tabsw.length ; i++) {
         var cas = tabsw[i].match(/^[0-9]{8}=/);
         if (cas > today+'=') nbj++;
         if (cas > jmax+'=') jmax = cas.replace(/=/,'');
      }
      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 />';
      progressop.innerHTML += '<button type="button" style="display: block; margin: 20px auto;" value="" onclick="prepare_citation_du_jour_cont2('+progressop+','+xhr_object+','+nbj+','+jmax+')" />Continuer</button>';
   }
}


/* suite 2 lancé par bouton continuer : recherche liste pages citations */
function prepare_citation_du_jour_cont2(xhr_object,nbj,jmax) {
   var progressop = document.getElementById('progress_op');

   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) {
      /* recup contenu utile */
      var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
      tabul = pagedit[1].split(/<ul><li>|<\/ul>/gi);
      tabli = tabul[1].split(/<li>/gi);
      for (var i = 0; i < tabli.length ; i++) {
         var href = tabli[i].match(/href="([^"]*)"/i);
         var title = tabli[i].match(/title="([^"]*)"/i);
alert(href+'  '+title);
      
      }
   }
}