[ Index ]

PHP Cross Reference of IEUF

title

Body

[close]

/JS/ -> calendrier.js (source)

   1  
   2  function Calendrier(d_act, fct_date, id_pos, an_min, an_max, inst) {
   3    //Privées (locales)
   4    var t_noms_mois= new Array(
   5        'janvier', 'février', 'mars',
   6        'avril', 'mai', 'juin',
   7        'juillet', 'août', 'septembre',
   8        'octobre', 'novembre', 'décembre');
   9    var liste_mois= document.createElement("select");
  10        liste_mois.setAttribute("style", "width: 80px");
  11    var liste_ans= document.createElement("select");
  12        liste_ans.setAttribute("style", "width:50px");
  13    var d_aff= new Date(d_act.getFullYear(), d_act.getMonth(), d_act.getDate()); //Le tableau contient cette date
  14    var tableau= document.createElement("table");
  15    var tbody= document.createElement("tbody"); //Nécessaire pour IE
  16    var thead = document.createElement("thead");
  17        thead.style.height = "0px";
  18    var tfoot = document.createElement("tfoot");
  19        tfoot.style.height = "0px";
  20        tableau.appendChild(tbody);
  21    var t_lignes= new Array(6);
  22  
  23  /////Fonctions publiques
  24  
  25  /**** Fonctions de commande *****/
  26    this.Ferme= function() {
  27      d_aff= new Date(d_act.getFullYear(), d_act.getMonth(), d_act.getDate());
  28      tableau.style.visibility= 'hidden';
  29    }
  30  
  31    this.Valide= function(j) {
  32      var d= d_aff;
  33      var t;
  34      d.setDate(j);
  35      t= d.getTime();
  36      tableau.style.visibility= 'hidden';
  37      eval(fct_date+"('"+t+"')");
  38    }
  39  
  40    this.SelMois= function() {
  41      d_aff.setMonth(liste_mois.selectedIndex);
  42      this.AfficheCalendrier();
  43    }
  44  
  45    this.MoisPrecedent= function() {
  46      var mois, annee, d= d_aff;
  47      mois= d.getMonth()
  48      annee= d.getFullYear();
  49      mois--;
  50      if (mois < 0) {
  51        mois= 11;
  52        annee--;
  53      }
  54      if (annee < an_min) {alert("Année invalide");return;}
  55      d.setYear(annee);
  56      d.setMonth(mois);
  57      d_aff= d;
  58      this.AfficheCalendrier();
  59    }
  60  
  61    this.MoisSuivant= function() {
  62      var mois, annee, d= d_aff;
  63      mois= d.getMonth()
  64      annee= d.getFullYear();
  65      mois++;
  66      if (mois > 11) {
  67        mois= 0;
  68        annee++;
  69      }
  70      if (annee > an_max) {alert("Année invalide");return;}
  71      d.setYear(annee);
  72      d.setMonth(mois);
  73      d_aff= d;
  74      this.AfficheCalendrier();
  75    }
  76  
  77    this.SelAn= function() {
  78      id= liste_ans.selectedIndex;
  79      d_aff.setYear(liste_ans.options[id].value);
  80      this.AfficheCalendrier();
  81    }
  82  
  83    this.AnPrecedent= function() {
  84      var annee, d= d_aff;
  85      annee= d.getFullYear() - 1;
  86      if (annee < an_min) {alert("Année invalide");return;}
  87      d.setYear(annee);
  88      d_aff= d;
  89      this.AfficheCalendrier();
  90    }
  91  
  92    this.AnSuivant= function() {
  93      var annee, d= d_aff;
  94      annee= d.getFullYear() + 1;
  95      if (annee > an_max) {alert("Année invalide");return;}
  96      d.setYear(annee);
  97      d_aff= d;
  98      this.AfficheCalendrier();
  99    }
 100  
 101    this.AfficheCalendrier= function() {
 102      //Calcul des nombres de jours
 103      var j_act, m_act, a_act, j_cur, m_cur, a_cur, m_aff, a_aff;
 104      var fl_act, fl_cur;
 105      var n_sem, njv, njm;
 106  
 107      //Date initiale
 108      j_act= d_act.getDate();
 109      m_act= d_act.getMonth()
 110      a_act= d_act.getFullYear();
 111      if (a_act < an_min || a_act > an_max) {alert("Année invalide");return;}
 112      //Date courante
 113      d_cur= new Date();
 114      j_cur= d_cur.getDate();
 115      m_cur= d_cur.getMonth()
 116      a_cur= d_cur.getFullYear();
 117      //Date affichée
 118      m_aff= d_aff.getMonth()
 119      a_aff= d_aff.getFullYear();
 120      //Pour affichage de jours particuliers'
 121      fl_act= (a_act == a_aff) && (m_act == m_aff);
 122      fl_cur= (a_cur == a_aff) && (m_cur == m_aff);
 123  
 124      //Calcul de la position des jours dans le mois
 125      d_aff.setDate(1); //1° jour du mois affiché
 126      njv= (d_aff.getDay()-1 + 7)%7; //Décalage 1°cellule tableau calendrier
 127      //Nombre de jours de ce mois pour années de 1901 à 2099
 128      if (m_aff == 1) njm= (a_aff % 4 == 0) ? 29 : 28;
 129      else if (m_aff==3 || m_aff==5 || m_aff==8 || m_aff==10) njm= 30;
 130      else njm= 31;
 131  
 132      //Calcul du numéro de semaine en début de mois affiché
 133      var t= Math.floor(d_aff.getTime()/86400000); //Jours depuis 1/1/1970 0:0:0
 134      var d= new Date(a_aff, 0, 4); //4 janvier année affichée : semaine 1;
 135      n_sem= Math.floor((d_aff.getTime()-d)/86400000)-1; //Nbre de de jours depuis ce 4 janvier
 136      n_sem= Math.floor((n_sem+3)/7)+1; //N° de semaines en début de mois
 137  
 138      //Affichage
 139      tableau.style.visibility= 'visible';
 140  
 141      //Ligne de titre
 142      liste_mois.options[m_aff].selected= true;
 143      for (var a=0; a < liste_ans.length; a++) {
 144        if (liste_ans.options[a].value == a_aff)
 145          liste_ans.options[a].selected= true;
 146      }
 147  
 148      //Contenu
 149      var l, c, cel;
 150      var j= 1-njv;
 151      for (l= 0; l < t_lignes.length; l++) {
 152        cel= t_lignes[l].firstChild;
 153        cel.firstChild.data= n_sem != 0 ? n_sem : " "; //N° semaine
 154        n_sem++;
 155        cel= cel.nextSibling;
 156        for (c= 0; c < 7; c++) { // Jours
 157          if (j > 0 && j <= njm) { //Jours du mois
 158            if (fl_cur && fl_act && j == j_cur && j == j_act)
 159              cel.setAttribute("style", "border: 2px solid red; color: #ff0000;");
 160            else if (fl_act && j == j_act) cel.setAttribute("style", "border: 2px solid red;"); //Aujourd'hui'
 161            else if (fl_cur && j == j_cur) cel.setAttribute("style", "color: #ff0000;"); //Initialement sélectionné
 162            else cel.setAttribute("style", " ");
 163            cel.setAttribute("onclick", inst+".Valide("+j+")");
 164            cel.setAttribute("title", "Cliquer sur un jour pour valider");
 165            cel.setAttribute("class", "lien");
 166            cel.firstChild.data= j;
 167          }
 168          else  { // Cellules sans jours
 169            cel.setAttribute("onclick", "");
 170            cel.setAttribute("title", "");
 171            cel.setAttribute("class", "");
 172            cel.firstChild.data= " ";
 173          }
 174          //Fin 'if' jours du mois'
 175          cel= cel.nextSibling;
 176          j++;
 177        } //Fin 'for' cellules
 178      }//Fin 'for' lignes
 179  
 180    }
 181  
 182  //// Fonction privée (locale)
 183  /**** Intitialisation calendrier (instanciation)*****/
 184    function InitialiseCalendrier() {
 185      /*** Pour IE, selon les attibuts, il faut utiliser différentes formes ??? ***/
 186      var classe_tableau = document.createAttribute("class");
 187        classe_tableau.nodeValue = "style_calendrier";
 188        tableau.setAttributeNode(classe_tableau);
 189      tableau.border= "0";
 190      tableau.setAttribute("cellpadding",  "0");
 191      tableau.setAttribute("cellspacing", "0");
 192      tableau.setAttribute("width", "100%");
 193      tableau.style.visibility= 'hidden';
 194  
 195      var t_nj= new Array('sem.', 'lu', 'ma', 'me', 'je', 've', 'sa', 'di');
 196      var lien, ligne, cellule, contenu, option_mois, option_an, texte;
 197      var l, j, m, a;
 198  
 199      /*** Construction du tableau, mais les cellules de numéros de semaine et de jours restent vides ***/
 200  
 201      //Ligne titre
 202      ligne= document.createElement("tr");
 203      ligne.setAttribute("class", "titre");
 204        //Mois
 205      cellule= document.createElement("td");
 206      cellule.setAttribute("colspan", "4");
 207      lien= document.createElement("span");
 208      lien.setAttribute("onclick", inst+".MoisPrecedent()");
 209      lien.setAttribute("title", "Mois précédent");
 210      lien.setAttribute("class", "lien");
 211      contenu= document.createTextNode("<  ");
 212      lien.appendChild(contenu);
 213      cellule.appendChild(lien);
 214      for (m in t_noms_mois) {
 215        option_mois= document.createElement("option");
 216        texte= document.createTextNode(t_noms_mois[m]);
 217        option_mois.appendChild(texte);
 218        liste_mois.appendChild(option_mois);
 219      }
 220      liste_mois.setAttribute("onchange", inst+".SelMois()");
 221      liste_mois.setAttribute("title", "Mois");
 222      cellule.appendChild(liste_mois);
 223      lien= document.createElement("span");
 224      lien.setAttribute("onclick", inst+".MoisSuivant()");
 225      lien.setAttribute("title", "Mois suivant");
 226      lien.setAttribute("class", "lien");
 227      contenu= document.createTextNode("  >");
 228      lien.appendChild(contenu);
 229      cellule.appendChild(lien);
 230      ligne.appendChild(cellule);
 231        //Année
 232      cellule= document.createElement("td");
 233      cellule.setAttribute("colspan", "3");
 234      lien= document.createElement("span");
 235      lien.setAttribute("onclick", inst+".AnPrecedent()");
 236      lien.setAttribute("title", "Année précédente");
 237      lien.setAttribute("class", "lien");
 238      contenu= document.createTextNode("<  ");
 239      lien.appendChild(contenu);
 240      cellule.appendChild(lien);
 241      for (a= an_min; a <= an_max; a++) {
 242        option_an= document.createElement("option");
 243        option_an.setAttribute("value", a);
 244        texte= document.createTextNode(a);
 245        option_an.appendChild(texte);
 246        liste_ans.appendChild(option_an);
 247      }
 248      liste_ans.setAttribute("onchange", inst+".SelAn()");
 249      liste_ans.setAttribute("title", "Année");
 250      cellule.appendChild(liste_ans);
 251      lien= document.createElement("span");
 252      lien.setAttribute("onclick", inst+".AnSuivant()");
 253      lien.setAttribute("title", "Année suivante");
 254      lien.setAttribute("class", "lien");
 255      contenu= document.createTextNode("  >");
 256      lien.appendChild(contenu);
 257      cellule.appendChild(lien);
 258      ligne.appendChild(cellule);
 259        //Fermeture
 260      cellule= document.createElement("td");
 261      cellule.setAttribute("style", "color: #ff8888; font-weight: bold;");
 262      cellule.setAttribute("class", "lien");
 263      cellule.setAttribute("onclick", inst+".Ferme()");
 264      cellule.setAttribute("title", "Annulation");
 265      contenu= document.createTextNode("X");
 266      cellule.appendChild(contenu);
 267      ligne.appendChild(cellule);
 268  
 269      tbody.appendChild(ligne);
 270  
 271      //Ligne nom des jours de semaine
 272      ligne= document.createElement("tr");
 273      ligne.setAttribute("class","njours");
 274      for (j= 0; j < t_nj.length; j++) {
 275        cellule= document.createElement("td");
 276        contenu= document.createTextNode(t_nj[j]);
 277        cellule.appendChild(contenu);
 278        ligne.appendChild(cellule);
 279      }
 280      tbody.appendChild(ligne);
 281  
 282      //Lignes n° des jours
 283      for (l= 0; l < t_lignes.length ; l++) {
 284        //Cellule semaine
 285        t_lignes[l]= ligne= document.createElement("tr");
 286        cellule= document.createElement("td");
 287        cellule.setAttribute("class","njours");
 288        contenu= document.createTextNode("ss");
 289        cellule.appendChild(contenu);
 290        ligne.appendChild(cellule);
 291        //Cellules jours
 292        for (j= 0; j < t_nj.length-1; j++) {
 293          cellule= document.createElement("td");
 294          contenu= document.createTextNode("--");
 295          cellule.appendChild(contenu);
 296          ligne.appendChild(cellule);
 297        }
 298        tbody.appendChild(ligne);
 299      }
 300      document.getElementById(id_pos).appendChild(tableau);
 301  
 302    }
 303  
 304    InitialiseCalendrier(); //Instantiation
 305  
 306  }
 307  


Generated: Fri Jan 31 19:59:00 2014 Cross-referenced by PHPXref 0.7.1