« Utilisateur:Pinocchio/yearnav.js » : différence entre les versions

De BoyWiki
Aucun résumé des modifications
Aucun résumé des modifications
 
(33 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
/* Yearnav */
/* Yearnav - utilisé par le modèle Navigtemps */
/* Navigation à travers les années - destiné aux pages années
/* Navigation à travers les années - destiné aux pages années
/* moyen d'accès aux autres années, siècles ou millénaires */
/* moyen d'accès aux pages des autres années, siècles ou millénaires */




/* tableau global des pages années - généré par xx */
var yearnavlist = new Array();
yearnavlist['1922'] = 'zzz';
yearnavlist['2000'] = 'zzz';


var yearnavdatestab = new Array();


var yearnavparam = new Array();
var yearnavparam = new Array();
Ligne 14 : Ligne 11 :


function yearnav() {
function yearnav() {
  /* si pas de modèle présent sur la page */
   if (document.getElementById('yearnav') == undefined) return;
   if (document.getElementById('yearnav') == undefined) return;
  /* import page yearnav_dates - tableau des pages années créées
  /* tableau yearnavdatestab[] généré par yearnav_collect() au moment de la publication */
  /* maj fonctionne pour une page année incluant catégorie siècle seulement */
  // init objet requete serveur
  var xhr_object = createxhrobject();
  if (xhr_object == null) return;
  /* lecture page tableau dates */
  xhr_object.open('GET', '/fr/index.php?title=Utilisateur:Pinocchio/yearnav_dates', false);
  xhr_object.send('');
  if (xhr_object.readyState == 4 && xhr_object.status == 200) {
      /* récup contenu utile et init tab */
      var txt = xhr_object.responseText.split(/<pre|<\/pre>/gi);
      txt = txt[1].replace(/^[^>]*>/,'');
      var tab = txt.split(/yearnav_tableau_dates ?= ?\[/);
      tab = tab[1].replace(/\[|\]|\n/g,'');
      yearnavdatestab = tab.split(/,/);
  }
  /* init barre dates event boutons shift */
   yearnavparam['cdr'] = document.getElementById('yearnav');
   yearnavparam['cdr'] = document.getElementById('yearnav');
   yearnavparam['win'] = document.getElementById('yearwin');
   yearnavparam['win'] = document.getElementById('yearwin');
Ligne 21 : Ligne 41 :
   yearnavparam['mil'] = document.getElementById('yearbtnmc');
   yearnavparam['mil'] = document.getElementById('yearbtnmc');


  /* init event boutons shift */
   var btntab = 'yearbtnal yearbtnar yearbtnsl yearbtnsr yearbtnml yearbtnmr'.split(/ /);
   var btntab = 'yearbtnal yearbtnar yearbtnsl yearbtnsr yearbtnml yearbtnmr'.split(/ /);
   for (var i = 0; i < btntab.length ; i++) {
   for (var i = 0; i < btntab.length ; i++) {
Ligne 28 : Ligne 47 :
       document.getElementById(btntab[i]).onmouseout = yearnav_shift_stop;
       document.getElementById(btntab[i]).onmouseout = yearnav_shift_stop;
   }
   }
  document.getElementById('yearbtnac').onclick = yearnav_init;
   /* récup année initiale */
   /* récup année initiale */
   yearnavparam['ymid'] = 0;
   yearnavparam['yini'] = 0;
   if (yearnavparam['bar'].firstChild.data) yearnavparam['ymid'] = parseInt(yearnavparam['bar'].firstChild.data.replace(/\n/g,''));
   if (yearnavparam['bar'].firstChild.data) yearnavparam['yini'] = parseInt(yearnavparam['bar'].firstChild.data.replace(/\n/g,''));
 
  if (yearnavparam['yini'] > 9990 || yearnavparam['yini'] < -9990) yearnavparam['yini'] = 0;
 
   /* init barre dates initiales */
   /* init barre dates initiales */
   if (yearnavparam['ymid'] == 0) {
   if (yearnavparam['yini'] == 0) {
       var now = new Date();
       var now = new Date();
       yearnavparam['ymid'] = parseInt(now.getFullYear());
       yearnavparam['yini'] = parseInt(now.getFullYear());
   }
   }
   /* si lien inexistant */
  document.getElementById('yearbtnac').title = 'Retour à '+yearnavparam['yini'];
   var lnk = '';
  yearnav_init();
   if (yearnavlist[yearnavparam['ymid']] == undefined) lnk = 'nolnk';
}
   var str = '<a class="'+lnk+'" href="/wiki/'+yearnavparam['ymid']+'">'+yearnavparam['ymid']+'</a>';
 
addOnloadHook(yearnav);
 
 
 
/* date initiale */
function yearnav_init() {
  yearnavparam['ymid'] = yearnavparam['yini'];
   /* si lien vers page inexistant */
   var lnk = 'nolnk';
   if(yearnav_datexist(yearnavparam['yini'])) lnk = '';
   var str = '<a class="'+lnk+'" href="/fr/'+yearnavparam['ymid']+'">'+yearnavparam['ymid']+'</a>';
   var n = 1, m = -1;
   var n = 1, m = -1;
  /* création dates */
   for (var i = 1; i < 4 ; i++) {
   for (var i = 1; i < 4 ; i++) {
       if (yearnavparam['ymid']+m == 0) m--;
       if (yearnavparam['ymid']+m == 0) m--;
       lnk = '';
       lnk = 'nolnk';
       if (yearnavlist[yearnavparam['ymid']+m] == undefined) lnk = 'nolnk';
       if(yearnav_datexist(yearnavparam['ymid']+m)) lnk = '';
       str = '<a class="'+lnk+'" href="/wiki/'+(yearnavparam['ymid']+m)+'">'+(yearnavparam['ymid']+m--)+'</a> '+str;
       str = '<a class="'+lnk+'" href="/fr/'+(yearnavparam['ymid']+m)+'">'+(yearnavparam['ymid']+m--)+'</a> '+str;
       if (yearnavparam['ymid']+n == 0) n++;
       if (yearnavparam['ymid']+n == 0) n++;
       lnk = '';
       lnk = 'nolnk';
       if (yearnavlist[yearnavparam['ymid']+n] == undefined) lnk = 'nolnk';
       if(yearnav_datexist(yearnavparam['ymid']+n)) lnk = '';
       str = str+' <a class="'+lnk+'" href="/wiki/'+(yearnavparam['ymid']+n)+'">'+(yearnavparam['ymid']+n++)+'</a>';
       str = str+' <a class="'+lnk+'" href="/fr/'+(yearnavparam['ymid']+n)+'">'+(yearnavparam['ymid']+n++)+'</a>';
   }
   }
   yearnavparam['bar'].innerHTML = str;
   yearnavparam['bar'].innerHTML = str;
   yearnavparam['ylow'] = (yearnavparam['ymid'])+m+1;
   yearnavparam['ylow'] = (yearnavparam['ymid'])+m+1;
   yearnavparam['yhig'] = (yearnavparam['ymid'])+n-1;
   yearnavparam['yhig'] = (yearnavparam['ymid'])+n-1;
 
  /* ajuste espacement contenu à largeur fenêtre */
  yearnavparam['bar'].style.wordSpacing = 0;
  var lgbar = yearnavparam['bar'].offsetWidth;
  var initwin = yearnavparam['win'].offsetWidth;
  yearnavparam['bar'].style.wordSpacing = ((initwin - lgbar)/6)+'px';
    
    
   /* init siècle et millénaire */
   /* init siècle et millénaire */
   if (yearnavparam['ymid'] > 0) {
   if (yearnavparam['ymid'] > 999) {
       var x = Math.ceil(yearnavparam['ymid'] / 100);
       var x = Math.ceil(yearnavparam['ymid'] / 100);
       yearnavparam['cen'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_siècle';
       yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle';
       yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
       yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
       x = Math.ceil(yearnavparam['ymid'] / 1000);
       var x = Math.ceil(yearnavparam['ymid'] / 1000);
       yearnavparam['mil'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_millénaire';
       yearnavparam['mil'].firstChild.href = '/fr/'+arabtoroman(x)+'e_millénaire';
       yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire';
       yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire';
  } else if (yearnavparam['ymid'] > 99) {
      var x = Math.ceil(yearnavparam['ymid'] / 100);
      yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle';
      yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
      yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire';
      yearnavparam['mil'].firstChild.title = 'Ier millénaire';
  } else if (yearnavparam['ymid'] > 0) {
      yearnavparam['cen'].firstChild.href = '/fr/Ier_siècle';
      yearnavparam['cen'].firstChild.title = 'Ier siècle';
      yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire';
      yearnavparam['mil'].firstChild.title = 'Ier millénaire';
  } else if (yearnavparam['ymid'] > -100) {
      yearnavparam['cen'].firstChild.href = '/fr/Ier_siècle_AEC';
      yearnavparam['cen'].firstChild.title = 'Ier siècle AEC';
      yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire AEC';
      yearnavparam['mil'].firstChild.title = 'Ier millénaire AEC';
  } else if (yearnavparam['ymid'] > -1000) {
      var x = Math.floor(yearnavparam['ymid'] / 100);
      yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle_AEC';
      yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle AEC';
      yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire AEC';
      yearnavparam['mil'].firstChild.title = 'Ier millénaire AEC';
   } else {
   } else {
       var x = Math.floor(yearnavparam['ymid'] / 100);
       var x = Math.floor(yearnavparam['ymid'] / 100);
       yearnavparam['cen'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_siècle_av._J.-C.';
       yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle_AEC';
       yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle av. J.-C.';
       yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle AEC';
       var x = Math.floor(yearnavparam['ymid'] / 1000);
       var x = Math.floor(yearnavparam['ymid'] / 1000);
       yearnavparam['mil'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_millénaire_av._J.-C.';
       yearnavparam['mil'].firstChild.href = '/fr/'+arabtoroman(x)+'e_millénaire_AEC';
       yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire av. J.-C.';
       yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire AEC';
   }
   }
 
  /* ajuste espacement contenu à largeur fenêtre */
  yearnavparam['bar'].style.wordSpacing = 0;
  var lgbar = yearnavparam['bar'].offsetWidth;
  var initwin = yearnavparam['win'].offsetWidth;
  yearnavparam['bar'].style.wordSpacing = ((initwin - lgbar)/6)+'px';
}
}
addOnloadHook(yearnav);




Ligne 127 : Ligne 180 :


       /* recrée barre avec nouvelles dates */
       /* recrée barre avec nouvelles dates */
       var lnk = '';
       var lnk = 'nolnk';
       if (yearnavlist[newy] == undefined) lnk = 'nolnk';
       if(yearnav_datexist(newy)) lnk = '';
       var str = '<a class="'+lnk+'" href="/wiki/'+newy+'">'+newy+'</a>';
       var str = '<a class="'+lnk+'" href="/fr/'+newy+'">'+newy+'</a>';
       var n = 1, m = -1;
       var n = 1, m = -1;
       for (var i = 1; i < 4 ; i++) {
       for (var i = 1; i < 4 ; i++) {
         if (newy + m == 0) m--;
         if (newy + m == 0) m--;
         lnk = '';
         lnk = 'nolnk';
         if (yearnavlist[newy+m] == undefined) lnk = 'nolnk';
         if(yearnav_datexist(newy+m)) lnk = '';
         str = '<a class="'+lnk+'" href="/wiki/'+(newy + m)+'">'+(newy + m--)+'</a> '+str;
         str = '<a class="'+lnk+'" href="/fr/'+(newy + m)+'">'+(newy + m--)+'</a> '+str;
         if (newy + n == 0) n++;
         if (newy + n == 0) n++;
         lnk = '';
         lnk = 'nolnk';
         if (yearnavlist[newy+n] == undefined) lnk = 'nolnk';
         if(yearnav_datexist(newy+n)) lnk = '';
         str = str+' <a class="'+lnk+'" href="/wiki/'+(newy + n)+'">'+(newy + n++)+'</a>';
         str = str+' <a class="'+lnk+'" href="/fr/'+(newy + n)+'">'+(newy + n++)+'</a>';
       }
       }
       yearnavparam['bar'].innerHTML = str;
       yearnavparam['bar'].innerHTML = str;
Ligne 153 : Ligne 206 :


       /* init siècle et millénaire */
       /* init siècle et millénaire */
       if (yearnavparam['ymid'] > 0) {
       if (yearnavparam['ymid'] > 999) {
         var x = Math.ceil(yearnavparam['ymid'] / 100);
         var x = Math.ceil(yearnavparam['ymid'] / 100);
         yearnavparam['cen'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_siècle';
         yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle';
         yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
         yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
         x = Math.ceil(yearnavparam['ymid'] / 1000);
         var x = Math.ceil(yearnavparam['ymid'] / 1000);
         yearnavparam['mil'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_millénaire';
         yearnavparam['mil'].firstChild.href = '/fr/'+arabtoroman(x)+'e_millénaire';
         yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire';
         yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire';
      } else if (yearnavparam['ymid'] > 99) {
        var x = Math.ceil(yearnavparam['ymid'] / 100);
        yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle';
        yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
        yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire';
        yearnavparam['mil'].firstChild.title = 'Ier millénaire';
      } else if (yearnavparam['ymid'] > 0) {
        yearnavparam['cen'].firstChild.href = '/fr/Ier_siècle';
        yearnavparam['cen'].firstChild.title = 'Ier siècle';
        yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire';
        yearnavparam['mil'].firstChild.title = 'Ier millénaire';
      } else if (yearnavparam['ymid'] > -100) {
        yearnavparam['cen'].firstChild.href = '/fr/Ier_siècle_AEC';
        yearnavparam['cen'].firstChild.title = 'Ier siècle AEC';
        yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire AEC';
        yearnavparam['mil'].firstChild.title = 'Ier millénaire AEC';
      } else if (yearnavparam['ymid'] > -1000) {
        var x = Math.floor(yearnavparam['ymid'] / 100);
        yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle_AEC';
        yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle AEC';
        yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire AEC';
        yearnavparam['mil'].firstChild.title = 'Ier millénaire AEC';
       } else {
       } else {
         var x = Math.floor(yearnavparam['ymid'] / 100);
         var x = Math.floor(yearnavparam['ymid'] / 100);
         yearnavparam['cen'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_siècle_av._J.-C.';
         yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle_AEC';
         yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle av. J.-C.';
         yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle AEC';
         var x = Math.floor(yearnavparam['ymid'] / 1000);
         var x = Math.floor(yearnavparam['ymid'] / 1000);
         yearnavparam['mil'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_millénaire_av._J.-C.';
         yearnavparam['mil'].firstChild.href = '/fr/'+arabtoroman(x)+'e_millénaire_AEC';
         yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire av. J.-C.';
         yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire AEC';
       }
       }


Ligne 190 : Ligne 265 :
   var u = Math.abs(num) % 10;
   var u = Math.abs(num) % 10;
   return(tens[t]+unit[u]);
   return(tens[t]+unit[u]);
}
function romantoarab(num) {
  var val = {I:1,V:5,X:10,L:50,C:100};
  var a = 0;
  num = num.replace(/[^CLXVI]+/,'');
  var i = num.length;
  while (i--) {
      if (val[num[i]] < val[num[i+1]]) a -= val[num[i]];
      else a += val[num[i]];
  }
  return a;
}
/* teste année présente dans tableau des pages */
function yearnav_datexist(yr) {
  for (y in yearnavdatestab) {if (yearnavdatestab[y] == yr) return true;}
  return false;
}
/* Collecte les dates des pages années créées lors de la publication */
function yearnav_collect() {
  if (wgNamespaceNumber != 0) return true;
  if (wgPageName == null || wgPageName.match(/^-?[0-9]{1,4}$/) == null) return true;
  if (wgUserName == null) return true;
  if (wgAction != 'edit' && wgAction != 'submit') return true;
  /* test si appel à une catégorie siècle */
  if (document.forms['editform'] == undefined || document.forms['editform'].elements['wpTextbox1'] == undefined) return true;
  var content = document.forms['editform'].elements['wpTextbox1'].value;
  if (content.match(/\[\[[Cc]atégorie: ?-?[IVX]+[er]+ [Ss]iècle.[^\]]*\]\]/) == null) return true;
 
  /* lecture page tableau dates - init syntaxe requete serveur */
  var xhr_object = createxhrobject();
  if (xhr_object == null) return;
 
  /* init requete serveur - get sous-page tableau */
  xhr_object.open('GET', '/fr/index.php?title=Utilisateur:Pinocchio/yearnav_dates&action=edit', false);
  xhr_object.send('');
  if (xhr_object.readyState == 4 && xhr_object.status == 200) {
      /* recup contenu zone édition */
      var txt = xhr_object.responseText.split(/&lt\;pre|&lt\;\/pre&gt\;/gi);
      var newtab = txt[1].split(/yearnav_tableau_dates ?= ?\[|\]\n?/g);
      /* test date déjà collectée */
      yearnavdatestab = newtab[1].split(/,/);
      if(yearnav_datexist(wgPageName)) return true;
      /* remplace nouveau tableau au format txt et texte avant */
      yearnavdatestab[yearnavdatestab.length] = wgPageName;
      yearnavdatestab.sort;
      var newtxt = '<pre '+newtab[0]+'yearnav_tableau_dates = ['+yearnavdatestab.join(',')+']\n</pre>';
      /* remplace html entities (dues à texte origine edit vers view) */
      newtxt = newtxt.replace(/&lt;/g, '<');
      newtxt = newtxt.replace(/&gt;/g, '>');
      newtxt = newtxt.replace(/&amp;/g, '&');
      newtxt = newtxt.replace(/&quot;/g, '"');
      /* 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 maj tableau dates ('+wgPageName+')';
      /* init requete serveur - maj sous-page tableau */
      var boundary = '--------------23242526272829';
      var 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', '/fr/index.php?title=Utilisateur:Pinocchio/yearnav_dates&action=submit', false);
      //xhr_object.setRequestHeader("Host", "www.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));
      xhr_object.send(data);
      //if (xhr_object.readyState == 4 && xhr_object.status == 200) { 
      //}
  }
}
}

Dernière version du 1 avril 2014 à 15:24

/* Yearnav - utilisé par le modèle Navigtemps */
/* Navigation à travers les années - destiné aux pages années
/* moyen d'accès aux pages des autres années, siècles ou millénaires */



var yearnavdatestab = new Array();

var yearnavparam = new Array();


function yearnav() {
   /* si pas de modèle présent sur la page */
   if (document.getElementById('yearnav') == undefined) return;

   /* import page yearnav_dates - tableau des pages années créées
   /* tableau yearnavdatestab[] généré par yearnav_collect() au moment de la publication */
   /* maj fonctionne pour une page année incluant catégorie siècle seulement */

   // init objet requete serveur
   var xhr_object = createxhrobject();
   if (xhr_object == null) return;

   /* lecture page tableau dates */
   xhr_object.open('GET', '/fr/index.php?title=Utilisateur:Pinocchio/yearnav_dates', false);
   xhr_object.send('');
   if (xhr_object.readyState == 4 && xhr_object.status == 200) {
      /* récup contenu utile et init tab */
      var txt = xhr_object.responseText.split(/<pre|<\/pre>/gi);
      txt = txt[1].replace(/^[^>]*>/,'');
      var tab = txt.split(/yearnav_tableau_dates ?= ?\[/);
      tab = tab[1].replace(/\[|\]|\n/g,'');
      yearnavdatestab = tab.split(/,/);
   }

   /* init barre dates event boutons shift */
   yearnavparam['cdr'] = document.getElementById('yearnav');
   yearnavparam['win'] = document.getElementById('yearwin');
   yearnavparam['bar'] = document.getElementById('yearbar');
   yearnavparam['cen'] = document.getElementById('yearbtnsc');
   yearnavparam['mil'] = document.getElementById('yearbtnmc');

   var btntab = 'yearbtnal yearbtnar yearbtnsl yearbtnsr yearbtnml yearbtnmr'.split(/ /);
   for (var i = 0; i < btntab.length ; i++) {
      document.getElementById(btntab[i]).onmousedown = yearnav_shift_start;
      document.getElementById(btntab[i]).onmouseup = yearnav_shift_stop;
      document.getElementById(btntab[i]).onmouseout = yearnav_shift_stop;
   }
   document.getElementById('yearbtnac').onclick = yearnav_init;

   /* récup année initiale */
   yearnavparam['yini'] = 0;
   if (yearnavparam['bar'].firstChild.data) yearnavparam['yini'] = parseInt(yearnavparam['bar'].firstChild.data.replace(/\n/g,''));
   if (yearnavparam['yini'] > 9990 || yearnavparam['yini'] < -9990) yearnavparam['yini'] = 0;
   
   /* init barre dates initiales */
   if (yearnavparam['yini'] == 0) {
      var now = new Date();
      yearnavparam['yini'] = parseInt(now.getFullYear());
   }
   document.getElementById('yearbtnac').title = 'Retour à '+yearnavparam['yini'];
   yearnav_init();
}

addOnloadHook(yearnav);



/* date initiale */
function yearnav_init() {
   yearnavparam['ymid'] = yearnavparam['yini'];
   /* si lien vers page inexistant */
   var lnk = 'nolnk';
   if(yearnav_datexist(yearnavparam['yini'])) lnk = '';
   var str = '<a class="'+lnk+'" href="/fr/'+yearnavparam['ymid']+'">'+yearnavparam['ymid']+'</a>';
   var n = 1, m = -1;
   /* création dates */
   for (var i = 1; i < 4 ; i++) {
      if (yearnavparam['ymid']+m == 0) m--;
      lnk = 'nolnk';
      if(yearnav_datexist(yearnavparam['ymid']+m)) lnk = '';
      str = '<a class="'+lnk+'" href="/fr/'+(yearnavparam['ymid']+m)+'">'+(yearnavparam['ymid']+m--)+'</a> '+str;
      if (yearnavparam['ymid']+n == 0) n++;
      lnk = 'nolnk';
      if(yearnav_datexist(yearnavparam['ymid']+n)) lnk = '';
      str = str+' <a class="'+lnk+'" href="/fr/'+(yearnavparam['ymid']+n)+'">'+(yearnavparam['ymid']+n++)+'</a>';
   }
   yearnavparam['bar'].innerHTML = str;
   yearnavparam['ylow'] = (yearnavparam['ymid'])+m+1;
   yearnavparam['yhig'] = (yearnavparam['ymid'])+n-1;
   
   /* ajuste espacement contenu à largeur fenêtre */
   yearnavparam['bar'].style.wordSpacing = 0;
   var lgbar = yearnavparam['bar'].offsetWidth;
   var initwin = yearnavparam['win'].offsetWidth;
   yearnavparam['bar'].style.wordSpacing = ((initwin - lgbar)/6)+'px';
   
   /* init siècle et millénaire */
   if (yearnavparam['ymid'] > 999) {
      var x = Math.ceil(yearnavparam['ymid'] / 100);
      yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle';
      yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
      var x = Math.ceil(yearnavparam['ymid'] / 1000);
      yearnavparam['mil'].firstChild.href = '/fr/'+arabtoroman(x)+'e_millénaire';
      yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire';
   } else if (yearnavparam['ymid'] > 99) {
      var x = Math.ceil(yearnavparam['ymid'] / 100);
      yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle';
      yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
      yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire';
      yearnavparam['mil'].firstChild.title = 'Ier millénaire';
   } else if (yearnavparam['ymid'] > 0) {
      yearnavparam['cen'].firstChild.href = '/fr/Ier_siècle';
      yearnavparam['cen'].firstChild.title = 'Ier siècle';
      yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire';
      yearnavparam['mil'].firstChild.title = 'Ier millénaire';
   } else if (yearnavparam['ymid'] > -100) {
      yearnavparam['cen'].firstChild.href = '/fr/Ier_siècle_AEC';
      yearnavparam['cen'].firstChild.title = 'Ier siècle AEC';
      yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire AEC';
      yearnavparam['mil'].firstChild.title = 'Ier millénaire AEC';
   } else if (yearnavparam['ymid'] > -1000) {
      var x = Math.floor(yearnavparam['ymid'] / 100);
      yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle_AEC';
      yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle AEC';
      yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire AEC';
      yearnavparam['mil'].firstChild.title = 'Ier millénaire AEC';
   } else {
      var x = Math.floor(yearnavparam['ymid'] / 100);
      yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle_AEC';
      yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle AEC';
      var x = Math.floor(yearnavparam['ymid'] / 1000);
      yearnavparam['mil'].firstChild.href = '/fr/'+arabtoroman(x)+'e_millénaire_AEC';
      yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire AEC';
   }
}


/* lancée par flèches de navigation années/siècles/millénaires */
function yearnav_shift_start() {
   var idevent = this.id;
   yearnav_shift(idevent);
   yearnavparam['cnt'] = 0;
   yearnavparam['int'] = setInterval(function() { yearnav_shift(idevent); }, 300);
}


/* boucle de défilement des années */
function yearnav_shift(idevent) {
   var lgbar = yearnavparam['bar'].offsetWidth;
   var newy = yearnavparam['ymid'];
   switch (idevent) {
      case "yearbtnal":
         if (yearnavparam['ylow'] > -9999) newy = newy - 1;
         if (newy == 0) newy = -1;
         break;
      case "yearbtnar":
         if (yearnavparam['yhig'] < 9999) newy = newy + 1;
         if (newy == 0) newy = 1;
         break;
      case "yearbtnsl":
         if (yearnavparam['ylow'] > -9900) newy = newy - 100;
         if (newy == 0) newy = -1;
         break;
      case "yearbtnsr":
         if (yearnavparam['yhig'] < 9900) newy = newy + 100;
         if (newy == 0) newy = 1;
         break;
      case "yearbtnml":
         if (yearnavparam['ylow'] > -9000) newy = newy - 1000;
         if (newy == 0) newy = -1;
         yearnavparam['cnt'] = 0;
         break;
      case "yearbtnmr":
         if (yearnavparam['yhig'] < 9000) newy = newy + 1000;
         if (newy == 0) newy = 1;
         yearnavparam['cnt'] = 0;
         break;
      }

      /* recrée barre avec nouvelles dates */
      var lnk = 'nolnk';
      if(yearnav_datexist(newy)) lnk = '';
      var str = '<a class="'+lnk+'" href="/fr/'+newy+'">'+newy+'</a>';
      var n = 1, m = -1;
      for (var i = 1; i < 4 ; i++) {
         if (newy + m == 0) m--;
         lnk = 'nolnk';
         if(yearnav_datexist(newy+m)) lnk = '';
         str = '<a class="'+lnk+'" href="/fr/'+(newy + m)+'">'+(newy + m--)+'</a> '+str;
         if (newy + n == 0) n++;
         lnk = 'nolnk';
         if(yearnav_datexist(newy+n)) lnk = '';
         str = str+' <a class="'+lnk+'" href="/fr/'+(newy + n)+'">'+(newy + n++)+'</a>';
      }
      yearnavparam['bar'].innerHTML = str;
      yearnavparam['ymid'] = newy;
      yearnavparam['ylow'] = (newy + m + 1);
      yearnavparam['yhig'] = (newy + n - 1);

      /* réajuste espacement (si largeur nombres diff) */
      yearnavparam['bar'].style.wordSpacing = 0;
      var lgbar = yearnavparam['bar'].offsetWidth;
      var initwin = yearnavparam['win'].offsetWidth;
      yearnavparam['bar'].style.wordSpacing = ((initwin - lgbar) / 6)+'px';

      /* init siècle et millénaire */
      if (yearnavparam['ymid'] > 999) {
         var x = Math.ceil(yearnavparam['ymid'] / 100);
         yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle';
         yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
         var x = Math.ceil(yearnavparam['ymid'] / 1000);
         yearnavparam['mil'].firstChild.href = '/fr/'+arabtoroman(x)+'e_millénaire';
         yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire';
      } else if (yearnavparam['ymid'] > 99) {
         var x = Math.ceil(yearnavparam['ymid'] / 100);
         yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle';
         yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
         yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire';
         yearnavparam['mil'].firstChild.title = 'Ier millénaire';
      } else if (yearnavparam['ymid'] > 0) {
         yearnavparam['cen'].firstChild.href = '/fr/Ier_siècle';
         yearnavparam['cen'].firstChild.title = 'Ier siècle';
         yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire';
         yearnavparam['mil'].firstChild.title = 'Ier millénaire';
      } else if (yearnavparam['ymid'] > -100) {
         yearnavparam['cen'].firstChild.href = '/fr/Ier_siècle_AEC';
         yearnavparam['cen'].firstChild.title = 'Ier siècle AEC';
         yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire AEC';
         yearnavparam['mil'].firstChild.title = 'Ier millénaire AEC';
      } else if (yearnavparam['ymid'] > -1000) {
         var x = Math.floor(yearnavparam['ymid'] / 100);
         yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle_AEC';
         yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle AEC';
         yearnavparam['mil'].firstChild.href = '/fr/Ier_millénaire AEC';
         yearnavparam['mil'].firstChild.title = 'Ier millénaire AEC';
      } else {
         var x = Math.floor(yearnavparam['ymid'] / 100);
         yearnavparam['cen'].firstChild.href = '/fr/'+arabtoroman(x)+'e_siècle_AEC';
         yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle AEC';
         var x = Math.floor(yearnavparam['ymid'] / 1000);
         yearnavparam['mil'].firstChild.href = '/fr/'+arabtoroman(x)+'e_millénaire_AEC';
         yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire AEC';
      }

      /* vitesse shift */
      if (yearnavparam['cnt']++ == 6) {
         clearInterval(yearnavparam['int']);
         yearnavparam['int'] = setInterval(function() { yearnav_shift(idevent); }, 100);
      }
}


/* arrêt défilement */
function yearnav_shift_stop() {
   clearInterval(yearnavparam['int']);
}


/* convertisseur nombre en romain de 1 à 99 */
function arabtoroman(num) {
   var unit = new Array('','I','II','III','IV','V','VI','VII','VIII','IX');
   var tens = new Array('','X','XX','XXX','XL','L','LX','LXX','LXXX','XC');
   var t = Math.floor(Math.abs(num) / 10);
   var u = Math.abs(num) % 10;
   return(tens[t]+unit[u]);
}

function romantoarab(num) {
   var val = {I:1,V:5,X:10,L:50,C:100};
   var a = 0;
   num = num.replace(/[^CLXVI]+/,'');
   var i = num.length;
   while (i--) {
      if (val[num[i]] < val[num[i+1]]) a -= val[num[i]];
      else a += val[num[i]];
   }
   return a;
}


/* teste année présente dans tableau des pages */
function yearnav_datexist(yr) {
   for (y in yearnavdatestab) {if (yearnavdatestab[y] == yr) return true;}
   return false;
}



/* Collecte les dates des pages années créées lors de la publication */

function yearnav_collect() {
   if (wgNamespaceNumber != 0) return true;
   if (wgPageName == null || wgPageName.match(/^-?[0-9]{1,4}$/) == null) return true;
   if (wgUserName == null) return true;
   if (wgAction != 'edit' && wgAction != 'submit') return true;

   /* test si appel à une catégorie siècle */
   if (document.forms['editform'] == undefined || document.forms['editform'].elements['wpTextbox1'] == undefined) return true;
   var content = document.forms['editform'].elements['wpTextbox1'].value;
   if (content.match(/\[\[[Cc]atégorie: ?-?[IVX]+[er]+ [Ss]iècle.[^\]]*\]\]/) == null) return true;
   
   /* lecture page tableau dates - init syntaxe requete serveur */
   var xhr_object = createxhrobject();
   if (xhr_object == null) return;

   
   /* init requete serveur - get sous-page tableau */
   xhr_object.open('GET', '/fr/index.php?title=Utilisateur:Pinocchio/yearnav_dates&action=edit', false);
   xhr_object.send('');
   if (xhr_object.readyState == 4 && xhr_object.status == 200) {
      /* recup contenu zone édition */
      var txt = xhr_object.responseText.split(/&lt\;pre|&lt\;\/pre&gt\;/gi);
      var newtab = txt[1].split(/yearnav_tableau_dates ?= ?\[|\]\n?/g);
      /* test date déjà collectée */
      yearnavdatestab = newtab[1].split(/,/);
      if(yearnav_datexist(wgPageName)) return true;

      /* remplace nouveau tableau au format txt et texte avant */
      yearnavdatestab[yearnavdatestab.length] = wgPageName;
      yearnavdatestab.sort;
      var newtxt = '<pre '+newtab[0]+'yearnav_tableau_dates = ['+yearnavdatestab.join(',')+']\n</pre>';
      /* remplace html entities (dues à texte origine edit vers view) */
      newtxt = newtxt.replace(/&lt;/g, '<');
      newtxt = newtxt.replace(/&gt;/g, '>');
      newtxt = newtxt.replace(/&amp;/g, '&');
      newtxt = newtxt.replace(/&quot;/g, '"');

      /* 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 maj tableau dates ('+wgPageName+')';

      /* init requete serveur - maj sous-page tableau */
      var boundary = '--------------23242526272829';
      var 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', '/fr/index.php?title=Utilisateur:Pinocchio/yearnav_dates&action=submit', false);
      //xhr_object.setRequestHeader("Host", "www.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));
      xhr_object.send(data);

      //if (xhr_object.readyState == 4 && xhr_object.status == 200) {  
      //}
   }
}