« 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) */
   // 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 */
   // 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 */
   // 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 */
       // 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 */
       // 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 */
       // 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
/* et sauve les identifiants créés dans la sous-page Accueil/préparation citation */
/* 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 */
   // 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) */
   // 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}} */
   // 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}} */
   // copie texte zone edit avant premier {{extrait}}
   var buf = content[0];
   var buf = content[0];
   /* liste des idents créés */
   // liste des idents créés
   /* pour tout les modèles trouvé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 de fermeture) - extraction contenu */
       // 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) */
       // 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 un nombre aléatoire entre 1000000 et 9999999 */
         // 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 */
         // 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 */
         // ajoute dans liste idents créés
       } else {
       } else {
         /* recrée modèle orig */
         // recrée modèle orig
         var tmp = '{{Extrait|'+submodl+'}}';
         var tmp = '{{Extrait|'+submodl+'}}';
       }
       }
       /* ajoute contenu modèle + texte restant après fin modèle */
       // 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 */
   // 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 lot de citations pour les jours suivants */
/* Prépare lots de citations et images pour les jours suivants
/* Recherche des pages de citations et sélection pseudo aléatoire */
/* Création page de lancement manuel */
/* lancement manuel */


function prepare_citation_du_jour() {
function prepare_citation_du_jour() {
/* seulement pour page Accueil/Préparation et utilisateur ayant droit écriture dans sous-page Accueil */
// 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;


   /* ajout div déroulement procédure */
   // 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');
   /* ajout bouton continuer */
  progressop.style.textAlign = 'center';
   progressop.innerHTML = '<button type="button" style="display: block; margin: 20px auto;" value="" onclick="prepare_citation_du_jour_cont1()" />Continuer</button>';
   // 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 bouton continuer */
/* suite lancée par action boutons */
 
function prepare_citation_du_jour_cont1() {
  var progressop = document.getElementById('progress_op');
 
  /* init objet requete serveur */
  var xhr_object = createxhrobject();
  if (xhr_object == null) {
      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];
 
  /* 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', '/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;
  }
  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 l'ordre croissant à partir du plus haut actuellement dans la 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+'=<div id="cdj_lnk">➤ Citation extraite de la page [['+tabpagecit[np]['title']+']]</div>';
              buf += '\n'+tabpagecit[np]['list'][rx]['cit'];
              break stop;
            }
        }
      }
  }
  /* ajoute fin switch */
  buf += '\n|#default=\n}}';
  /* remplace html entities (dues à texte origine edit vers view) */
  buf = buf.replace(/&lt;/g, '<');
  buf = buf.replace(/&gt;/g, '>');
  buf = buf.replace(/&amp;/g, '&');
  buf = buf.replace(/&quot;/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="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=BoyWiki:Accueil/Citation_du_jour&action=submit', false);
/* Chargement de la page code avant exec */
  //xhr_object.setRequestHeader("Host", "fr.boywiki.org");
function prepare_cdj_idj_load(q) {
   xhr_object.setRequestHeader("Charset", "utf-8");
   importScript('Utilisateur:Pinocchio/citations_images_du_jour.js');
  xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
   setTimeout(function() {prepare_cdj_idj_load_wait(q);},500);
   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.';
}
}


 
/* Attente fin chargement avant exec */
/* retourne un tableau des citations par id pour la page href */
function prepare_cdj_idj_load_wait(q) {
 
   if (typeof(getabcitationperpage) == 'function') {
function getabcitationperpage(xhr_object,href) {
       switch(q){
   /* init requete serveur - lecture page href */
         case c: prepare_cdj_exec(); break;
  href = href.replace(/\/wiki\//, '/w/index.php?title=')+'&action=edit';
         case i: prepare_idj_exec(); break;
  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 nbchrmax = 740;
      var citrc = '';
      var trc = submodl.split(/\{\{[Rr]éf [Ll]ivre\|/);
      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{{Réf Livre|'+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;
   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);
}