Utilisateur:Pinocchio/yearnav.js

De BoyWiki

Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur Ctrl + F5.
/* Yearnav */
/* Navigation à travers les années - destiné aux pages années
/* moyen d'accès aux 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 yearnavparam = new Array();


function yearnav() {
   if (document.getElementById('yearnav') == undefined) return;
   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');

   /* init event boutons shift */
   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;
   }
   /* récup année initiale */
   yearnavparam['ymid'] = 0;
   if (yearnavparam['bar'].firstChild.data) yearnavparam['ymid'] = parseInt(yearnavparam['bar'].firstChild.data.replace(/\n/g,''));

   /* init barre dates initiales */
   if (yearnavparam['ymid'] == 0) {
      var now = new Date();
      yearnavparam['ymid'] = parseInt(now.getFullYear());
   }
   /* si lien inexistant */
   var lnk = '';
   if (yearnavlist[yearnavparam['ymid']] == undefined) lnk = 'nolnk';
   var str = '<a class="'+lnk+'" href="/wiki/'+yearnavparam['ymid']+'">'+yearnavparam['ymid']+'</a>';
   var n = 1, m = -1;
   for (var i = 1; i < 4 ; i++) {
      if (yearnavparam['ymid']+m == 0) m--;
      lnk = '';
      if (yearnavlist[yearnavparam['ymid']+m] == undefined) lnk = 'nolnk';
      str = '<a class="'+lnk+'" href="/wiki/'+(yearnavparam['ymid']+m)+'">'+(yearnavparam['ymid']+m--)+'</a> '+str;
      if (yearnavparam['ymid']+n == 0) n++;
      lnk = '';
      if (yearnavlist[yearnavparam['ymid']+n] == undefined) lnk = 'nolnk';
      str = str+' <a class="'+lnk+'" href="/wiki/'+(yearnavparam['ymid']+n)+'">'+(yearnavparam['ymid']+n++)+'</a>';
   }
   yearnavparam['bar'].innerHTML = str;
   yearnavparam['ylow'] = (yearnavparam['ymid'])+m+1;
   yearnavparam['yhig'] = (yearnavparam['ymid'])+n-1;
   
   /* init siècle et millénaire */
   if (yearnavparam['ymid'] > 0) {
      var x = Math.ceil(yearnavparam['ymid'] / 100);
      yearnavparam['cen'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_siècle';
      yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle';
      x = Math.ceil(yearnavparam['ymid'] / 1000);
      yearnavparam['mil'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_millénaire';
      yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire';
   } else {
      var x = Math.floor(yearnavparam['ymid'] / 100);
      yearnavparam['cen'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_siècle_av._J.-C.';
      yearnavparam['cen'].firstChild.title = arabtoroman(x)+'e siècle av. J.-C.';
      var x = Math.floor(yearnavparam['ymid'] / 1000);
      yearnavparam['mil'].firstChild.href = '/wiki/'+arabtoroman(x)+'e_millénaire_av._J.-C.';
      yearnavparam['mil'].firstChild.title = arabtoroman(x)+'e millénaire av. J.-C.';
   }
   
   /* 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)+'pt';
}

addOnloadHook(yearnav);



/* 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 = '';
      if (yearnavlist[newy] == undefined) lnk = 'nolnk';
      var str = '<a class="'+lnk+'" href="/wiki/'+newy+'">'+newy+'</a>';
      var n = 1, m = -1;
      for (var i = 1; i < 4 ; i++) {
         if (newy + m == 0) m--;
         lnk = '';
         if (yearnavlist[newy+m] == undefined) lnk = 'nolnk';
         str = '<a class="'+lnk+'" href="/wiki/'+(newy + m)+'">'+(newy + m--)+'</a> '+str;
         if (newy + n == 0) n++;
         lnk = '';
         if (yearnavlist[newy+n] == undefined) lnk = 'nolnk';
         str = str+' <a class="'+lnk+'" href="/wiki/'+(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)+'pt';

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

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