Accueil > > > MICRO-CALENDAR
MICRO-CALENDAR
Information sur la source
Description
affiche un calendrier sous une zone de saisie version 4.2 de mon calendrier ****listes des paramètres du calendrier : mois : tableau contenant la liste des libellées des mois type : new Array() valeur par défaut : new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre") jour : tableau contenant la liste des libellées des jours (version courte) type : new Array() valeur par défaut : new Array("Di","Lu","Ma","Me","Je","Ve","Sa") jLib : tableau contenant la liste des libellées des jours (version longue) type : new Array() valeur par défaut : new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi") titre : titre du calendrier affiché en entête, si valeur = "" alors n'affiche pas le titre type : String valeur par défaut : "micro-calendar" aujourdhui : libellé affiché en bas correspondant au raccourci de la date du jour, type : String valeur par défaut : "aujourd'hui" debutSemaine : index correspondant au 1er jour de la semaine, 0=dim,1=lun,2=mar,3=mer,4=jeu,5=ven,6=sam type : int valeur par défaut : 1 jPause : tableau avec les index des jours correspondant aux jours des week-end, la clef et l'index du jour la valeur = true type: Map valeur par défaut : {6:true,0:true} correspond à (samedi & dimanche) jFeriee: tableau avec la liste des jours fériées, la clef correspond à "jj-mm" (jour-mois) et la valeur le libellé du jour férié type : Map valeur par défaut : {"1-1":"jour an", "1-5":"fête du travail", "8-5":"armistice", "14-7":"fête nationale", "15-8":"ascencion", "1-11":"armistice", "11-11":"toussain", "25-12":"noel"} moisMoins : libellé affiché pour la navigation du mois précédent type : String valeur par défaut : "-" moisPlus : libellé affiché pour la navigation du mois suivant type : String valeur par défaut : "+" anneeMoins : libellé affiché pour la navigation de l'année précédent type : String valeur par défaut : "<" anneePlus : libellé affiché pour la navigation de l'année suivant type : String valeur par défaut : ">" format: format de la date de sortie les caractère %j,%m,%a,... seront remplacer par leurs valeurs en fonction des correspondance %j : retourne le jour avec zero devant si <10 %k : retourne le jour %d : retourne le libellé du jour : Lundi, Mardi, Mercredi,Jeudi,Vendredi, Samedi, Dimanche %m : retourne le mois avec zero devant si <10 %n : retourne le mois %p : retourne le libellé du mois : Janvier, Fervrier, Mars, Avril, Mai, Juin, Juillet, Aout, Septembre, Octobre, Novembre, Decembre %a : retourne l'année sur 4 positions %y : retourne l'année sur 2 positions type : String valeur par défaut : "%j/%m/%a" correspondant à jour/mois/année date : utiliser en interne, remplacer par la date sélectionnée (utiliser avec les calendriers liés) type : Date valeur par défaut : null ddeb : identifiant du calendrier de la date de début (correspond à l'id de l'input) type : String valeur par défaut : "" dfin : identifiant du calendrier de la date de fin(correspond à l'id de l'input) type : String valeur par défaut : "" dateMin : date minimum du calendrier, ex: si dateMin = new Date(2009,0,1) alors on ne pourra pas sélectionner de date avant le 1er Janvier 2009 type : Date valeur par défaut : null dateMax : date maximum du calendrier, ex: si dateMax = new Date(2009,11,31) alors on ne pourra pas sélectionner de date apres le 31 décembre 2009 type : Date valeur par défaut : null ****listes des styles : en fonction des jours, les styles sont emboités de la façon suivant : <div class='divCal'> <table> <tr> <td colspan='8' class='zoneTitre' > [titre] </td> </tr> <tr> <td colspan='8'> <table> <tr> <td class='zoneNav'> [<] </td> <td class='zoneNav'> [-] </td> <td class='zoneMois'> [mois] </td> <td class='zoneNav'> [+] </td> <td class='zoneNav'> [>] </td> </tr> </table> </td> </tr> ... <tr> <td class='nSemaine'> [Sem] </td> ... <td> <a class='tdx' href='#' onclick='...'> <div class='enWeekEnd' > <-- présent si jour = week-end <div class='enFeriee' title='...'> <-- présent si jour = fériée <div class='enMois' > <-- présent si mois = mois en cours <div class='aujourdhui'> <-- présent si jour = aujourd'hui [Jour] <-- jour du mois </div> </div> </div> </div> </a> </td> ... </tr> <tr> <td colspan='6'><a class='tdxNow' href='#' onclick='...'>[aujourdhui]</a></td> <td colspan='2' class='zoneAnnee'>[annee]</td> </tr> </table> </di v>
Source
- /****************
- * script MICRO-CAL (V4.2) par Amroune Selim (amrounix@gmail.com)
- *toutes copies, diffusions,modifications ou améliorations sont autorisées
- ****************/
-
- var pDefaut = { /*variable globale*/
- "mois" : new Array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Décembre"),
- "jour" : new Array("Di","Lu","Ma","Me","Je","Ve","Sa"),
- "jLib" : new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"),
- "titre" : "micro-calendar",
- "aujourdhui" : "aujourd'hui",
- "debutSemaine" : 1, /*debut de la semaine 0=dim,1=lun,...*/
- "jPause" : {6:true,0:true},/*jour de pause de la semaine (samedi & dimanche)*/
- "jFeriee": {"1-1":"jour an","1-5":"fête du travail","8-5":"armistice","14-7":"fête nationale","15-8":"ascencion","1-11":"armistice","11-11":"toussain","25-12":"noel"} ,
- "moisMoins" : "-", "moisPlus" : "+", /*naviagation par mois*/
- "anneeMoins" : "<", "anneePlus" : ">", /*naviagation par annee*/
- "format" : "%j/%m/%a", /*format de sortie : %j = jour, %m = mois, %a =année*/
- "date" : null, "ddeb" : "", "dfin" : "",
- "dateMin" : null, "dateMax" : null
- }
-
- var tempo = new Array(); /*gestion de la fermeture des calendriers quand on perd le focus*/
- var nomove={"TR":0,"CENTER":0,"B":0,"P":0,"U":0,"I":0,"DIV":0,"A":0,"FONT":0,"LI":0,"PRE":0,"SPAN":0,"SUB":0,"SUP":0,"FORM":0};
- //var nomove={"TD":0,"TABLE":0};
-
- function _(x) /*simplification des appels*/
- {return document.getElementById(x);}
-
- function nbJ(dateX) /*Retourne le nombre de jour depuis le 1er janvier (pr le num de semaine)*/
- {
- var j_mois=[0,31,59,90,120,151,181,212,243,273,304,334];
- mm=dateX.getMonth();aa=dateX.getFullYear();nb=j_mois[mm]+dateX.getDate()-1 ;
- if ((aa%4==0 && aa %100!=0 || aa%400==0) && mm>1) nb++; /*test bissextile*/
- return nb;
- }
-
- function dateMin(dateA,dateB)
- {
- return (dateB==null||(dateA!=null&&(dateA.getFullYear()<dateB.getFullYear()
- ||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()<dateB.getMonth())
- ||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()==dateB.getMonth()&&dateA.getDate()<dateB.getDate())
- ))) ? dateA:dateB
- }
-
- function dateMax(dateA,dateB)
- {
- return (dateB==null||(dateA!=null&&(dateA.getFullYear()>dateB.getFullYear()
- ||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()>dateB.getMonth())
- ||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()==dateB.getMonth()&&dateA.getDate()>dateB.getDate())
- ))) ? dateA:dateB
- }
-
- function dateBefore(dateA,dateB) /*compare 2 date et retourne true si dateA<=dateB*/
- {
- return dateA!=null&&dateB!=null&&(dateA.getFullYear()<dateB.getFullYear()||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()<dateB.getMonth())||
- (dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()==dateB.getMonth()&&dateA.getDate()<dateB.getDate()));
- }
-
- function htmNavChk(dateA,dateB,src,srcId,mm,yy,txt) /*methode pour afficher les infos de navigation*/
- {
- return (dateBefore(dateA,dateB)) ?
- "<td onclick=\"\"> </td>"
- : ("<td class='zoneNav' onclick=\"return gCal('"+src+"','"+srcId+"',"+mm+","+yy+")\">"+txt+"</td>");
- }
-
- function gCal(src,srcId,mm,yy) /*génère le calendrier*/
- {
- if (tempo!=null&&tempo[srcId]!=null)
- {
- clearTimeout(tempo[srcId]);
- _(src).focus();
- }
-
- if (mm<0) {mm+=12;yy--;} /*changment de mois/année*/
- else if (mm>11) {mm-=12;yy++;}
-
- dnow=new Date(); /*date du jour*/
- param=_(srcId).parametre; /*parametre par defaut*/
- ddeb = null; dfin = null;
-
- if (param["ddeb"]!="" && _(param["ddeb"]+"_cal")!=null && _(param["ddeb"]+"_cal").parametre.date != null)
- ddeb = _(param["ddeb"]+"_cal").parametre.date;
- if (param["dfin"]!="" && _(param["dfin"]+"_cal")!=null && _(param["dfin"]+"_cal").parametre.date != null)
- dfin = _(param["dfin"]+"_cal").parametre.date;
-
- htm="<table cellpadding=0 cellspacing=0 >";
- /*titre*/
- if (param["titre"]!= null )
- {htm+="<tr><td colspan='8' class='zoneTitre' >"+param["titre"]+"</td></tr>";}
- /*zone de navigation*/
- htm+="<tr><td colspan='8'><table width='100%' cellpadding=0 cellspacing=0 ><tr>";
- htm+=htmNavChk(new Date(yy-1,mm,1),dateMax(ddeb,param["dateMin"]),src,srcId,mm,yy-1,param["anneeMoins"]);
- htm+=htmNavChk(new Date(yy,mm,0),dateMax(ddeb,param["dateMin"]),src,srcId,mm-1,yy,param["moisMoins"]);
- htm+="<td class='zoneMois'>"+param["mois"][mm]+"</td>";
- htm+=htmNavChk(dateMin(dfin,param["dateMax"]),new Date(yy,mm+1,1),src,srcId,mm+1,yy,param["moisPlus"]);
- htm+=htmNavChk(dateMin(dfin,param["dateMax"]),new Date(yy+1,mm,1),src,srcId,mm,yy+1,param["anneePlus"]);
- htm+="</tr></table></td></tr>";
- /*jours de la semaine*/
- htm+="<tr><td></td>";
- pJs = param["debutSemaine"];
- pJm = new Date(yy,mm,1).getDay(); /*jour du 1ere du mois*/
- pjT = 1-pJm+pJs;
- pjT-=(pjT>1)?7:0;
- dateX = new Date(yy,mm,pjT);
- for (j=0;j<7;j++) /*affiche les jours de la semaine*/
- {htm+="<td>"+param["jour"][(j+pJs)%7]+"</td>";}
- htm+="</tr>";
- avantFinMois=true;idx=0;
- idxSem=parseInt(nbJ(new Date(yy,mm,1))/7+1,10); /*index de la semaine*/
-
- while(avantFinMois) /*boucle jusqu'a la fin du mois */
- {
- htm+=(idx%7==0)?"<tr><td class='nSemaine' >"+idxSem+"</td>":""; /*affiche le numero de semaine*/
- if (dateBefore(dateX,dateMax(ddeb,param["dateMin"]))||dateBefore(dateMin(dfin,param["dateMax"]),dateX))
- htm+="<td style='text-decoration:line-through;'><a class='tdx' href='#'>"+subDiv(param,idx,dateX,mm,aa,0)+"</b></td>";
- else
- htm+="<td><a class='tdx' href='#' onclick=\"javascript:choix("+dateX.getFullYear()+","+dateX.getMonth()+","+dateX.getDate()+",'"+srcId+"','"+src+"')\" >"+subDiv(param,idx,dateX,mm,aa,0)+"</a></td>";
- idx++;
- if (idx%7==0)
- {htm+="</tr>"; idxSem++;}
- dateX= new Date(dateX.getFullYear(),dateX.getMonth(),dateX.getDate()+1);
- if (idx>7&&idx%7==0&&dateX.getMonth()!=mm)
- {avantFinMois=false;}
- }
- htm+="<tr><td colspan='6'> ";
- if (!dateBefore(dnow,dateMax(ddeb,param["dateMin"]))&&!dateBefore(dateMin(dfin,param["dateMax"]),dnow))
- htm+="<a class='tdxNow' href='#' onclick=\"javascript:choix("+dnow.getFullYear()+","+dnow.getMonth()+","+dnow.getDate()+",'"+srcId+"','"+src+"')\" >"+param["aujourdhui"]+"</a>";
- else htm+=" "
- /*annee*/
- htm+="</td><td colspan='2' class='zoneAnnee'>"+yy+"</td></tr></table>";
- //alert(htm);
- _(srcId).innerHTML=htm;
- return false;
- }
-
- function addZero(val) /*ajoute un zero devant*/
- { return ((val<10)?"0":"")+val;}
-
- function choix(aa,mm,jj,srcId,src)
- {
- var datePos=new Date(aa,mm,jj);
- var jour = datePos.getDay();
- param=_(srcId).parametre;
- param.date = datePos;
- var dateAffiche = param["format"].replace("%j",addZero(datePos.getDate())).replace("%k",datePos.getDate()).replace("%d",param["jLib"][jour]);
- dateAffiche = dateAffiche.replace("%m",addZero(datePos.getMonth()+1)).replace("%n",datePos.getMonth()+1).replace("%p",param["mois"][datePos.getMonth()]);
- dateAffiche = dateAffiche.replace("%a",datePos.getFullYear()).replace("%y",datePos.getYear());
- _(src).value = dateAffiche;
- }
-
- function subDiv(param,idx,dateX,mm,aa,code)
- {
- pJs = param["debutSemaine"];
- dnow=new Date();
- switch(code)
- {
- case 0 : return (param["jPause"][(idx+pJs)%7]==true) ? "<div class='enWeekEnd' >"+subDiv(param,idx,dateX,mm,aa,1)+"</div>" : subDiv(param,idx,dateX,mm,aa,1) ; break;
- case 1 : return (param["jFeriee"][dateX.getDate()+"-"+(dateX.getMonth()+1)]!=null) ? ("<div class=\"enFeriee\" title=\""+param["jFeriee"][dateX.getDate()+"-"+(dateX.getMonth()+1)]+"\" >"+subDiv(param,idx,dateX,mm,aa,2)+"</div>") : subDiv(param,idx,dateX,mm,aa,2) ; break;
- case 2 : return (dateX.getMonth()==mm) ? "<div class='enMois' >"+subDiv(param,idx,dateX,mm,aa,3)+"</div>" : subDiv(param,idx,dateX,mm,aa,3) ; break;
- case 3 : return (dateX.getMonth()==dnow.getMonth()&&dateX.getFullYear()==dnow.getFullYear()&&dateX.getDate()==dnow.getDate()) ? "<div class='aujourdhui' >"+subDiv(param,idx,dateX,mm,aa,4)+"</div>" : subDiv(param,idx,dateX,mm,aa,4) ; break;
- case 4 : return dateX.getDate(); break;
- }
- }
-
- function getMinx(tab,mini)
- {
- var rc=mini,code="";
- for (k in tab)
- {
- if (tab[k]>mini && rc<tab[k]) {rc=tab[k]; code = k; }
- }
- return code;
- }
-
- function decodeDate(val,format,defaut)
- {
- var dnow = defaut,jj= dnow.getDate(),mm = dnow.getMonth(), aa= dnow.getFullYear();
- var parx = {"%j":"([0123][0-9])","%k":"([0123]?[0-9])","%d":"("+(param["jLib"].join("|"))+")","%m":"([01][0-9])","%n":"([01]?[0-9])",
- "%p":"("+(param["mois"].join("|"))+")","%a":"([12][0-9]{3})","%y":"([0-9]{2})"};
- var ff= format,df = format;
- for (e in parx)
- {
- ff = ff.replace(e,parx[e]);
- df = df.replace(e,"("+e+")");
- }
- tablo = (new RegExp(ff)).exec(val);
- clef = (new RegExp(df)).exec(format);
- if (tablo!=null&&clef!=null)
- {
- for (i = 0; i< tablo.length;i++)
- {
- switch(clef[i])
- {
- case "%j": case "%k" : jj=parseInt(tablo[i],10); break;
- case "%m": case "%n" : mm=parseInt(tablo[i],10)-1; break;
- case "%p" : mm=0; while(mm<param["mois"].length&¶m["mois"][mm]!=tablo[i]){mm++;}; break;
- case "%a": aa = parseInt(tablo[i],10); break;
- }
- }
- }
- return new Date(aa,mm,jj);
- }
-
- function visuCal(src,paramX)
- {
- if (src.id=="") /*si il n'y pas d'ID on en créé un*/
- {
- cpt=0;
- while(_("microcal"+cpt) != null)
- {cpt++;}
- src.id="microcal"+cpt;
- }
- pos_= posxy(src,0,src.offsetHeight );
- srcId = src.id+"_cal"; /*id du div du calendrier*/
- dnow= new Date();
- if (_(srcId)==null) /*si il existe pas on le créé*/
- {
- param={}
- for (e in pDefaut) {
- trouve=false;
- if (paramX!=null)
- for (i in paramX) { if (e==i) {param[e]=paramX[e];trouve=true;} }
- if (!trouve) param[e]=pDefaut[e];
- }
- dnow = decodeDate(src.value,param.format,new Date());
- div = document.createElement('div');
- div.setAttribute('id',srcId);
- div.style.position = 'absolute';
- div.style.top = pos_.y + 'px';
- div.style.left = pos_.x + 'px'; /*this.deltaG = 0; */
- div.className = 'divCal';
- div.parametre = param;
- document.body.appendChild(div);
- gCal(src.id,srcId,dnow.getMonth(),dnow.getFullYear(),param);
- } else
- { div = _(src.id+"_cal");
- div.style.display='inline';/*affiche le calendrier*/
- div.style.top = pos_.y + 'px';
- div.style.left = pos_.x + 'px'; /*this.deltaG = 0; */
- }
-
- }
-
- function masqueCal(src)
- {tempo[src.id+"_cal"]=window.setTimeout("_('"+src.id+"_cal').style.display='none'",500);}
-
- /*retourne la position en {x,y} d'un element */
- function posxy(rst,x,y)
- {
- if ( rst.style!=null && rst.style.position == 'absolute' ) { return {"x":x + rst.offsetLeft,"y":y + rst.offsetTop} }
- else if (rst.parentNode == null ) { return {"x":x,"y":y} }
- else { return (nomove[rst.tagName]==0) ? posxy(rst.parentNode,x,y) : posxy(rst.parentNode,x+rst.offsetLeft,y+rst.offsetTop) ; }
- }
/****************
* script MICRO-CAL (V4.2) par Amroune Selim (amrounix@gmail.com)
*toutes copies, diffusions,modifications ou améliorations sont autorisées
****************/
var pDefaut = { /*variable globale*/
"mois" : new Array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Décembre"),
"jour" : new Array("Di","Lu","Ma","Me","Je","Ve","Sa"),
"jLib" : new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"),
"titre" : "micro-calendar",
"aujourdhui" : "aujourd'hui",
"debutSemaine" : 1, /*debut de la semaine 0=dim,1=lun,...*/
"jPause" : {6:true,0:true},/*jour de pause de la semaine (samedi & dimanche)*/
"jFeriee": {"1-1":"jour an","1-5":"fête du travail","8-5":"armistice","14-7":"fête nationale","15-8":"ascencion","1-11":"armistice","11-11":"toussain","25-12":"noel"} ,
"moisMoins" : "-", "moisPlus" : "+", /*naviagation par mois*/
"anneeMoins" : "<", "anneePlus" : ">", /*naviagation par annee*/
"format" : "%j/%m/%a", /*format de sortie : %j = jour, %m = mois, %a =année*/
"date" : null, "ddeb" : "", "dfin" : "",
"dateMin" : null, "dateMax" : null
}
var tempo = new Array(); /*gestion de la fermeture des calendriers quand on perd le focus*/
var nomove={"TR":0,"CENTER":0,"B":0,"P":0,"U":0,"I":0,"DIV":0,"A":0,"FONT":0,"LI":0,"PRE":0,"SPAN":0,"SUB":0,"SUP":0,"FORM":0};
//var nomove={"TD":0,"TABLE":0};
function _(x) /*simplification des appels*/
{return document.getElementById(x);}
function nbJ(dateX) /*Retourne le nombre de jour depuis le 1er janvier (pr le num de semaine)*/
{
var j_mois=[0,31,59,90,120,151,181,212,243,273,304,334];
mm=dateX.getMonth();aa=dateX.getFullYear();nb=j_mois[mm]+dateX.getDate()-1 ;
if ((aa%4==0 && aa %100!=0 || aa%400==0) && mm>1) nb++; /*test bissextile*/
return nb;
}
function dateMin(dateA,dateB)
{
return (dateB==null||(dateA!=null&&(dateA.getFullYear()<dateB.getFullYear()
||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()<dateB.getMonth())
||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()==dateB.getMonth()&&dateA.getDate()<dateB.getDate())
))) ? dateA:dateB
}
function dateMax(dateA,dateB)
{
return (dateB==null||(dateA!=null&&(dateA.getFullYear()>dateB.getFullYear()
||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()>dateB.getMonth())
||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()==dateB.getMonth()&&dateA.getDate()>dateB.getDate())
))) ? dateA:dateB
}
function dateBefore(dateA,dateB) /*compare 2 date et retourne true si dateA<=dateB*/
{
return dateA!=null&&dateB!=null&&(dateA.getFullYear()<dateB.getFullYear()||(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()<dateB.getMonth())||
(dateA.getFullYear()==dateB.getFullYear()&&dateA.getMonth()==dateB.getMonth()&&dateA.getDate()<dateB.getDate()));
}
function htmNavChk(dateA,dateB,src,srcId,mm,yy,txt) /*methode pour afficher les infos de navigation*/
{
return (dateBefore(dateA,dateB)) ?
"<td onclick=\"\"> </td>"
: ("<td class='zoneNav' onclick=\"return gCal('"+src+"','"+srcId+"',"+mm+","+yy+")\">"+txt+"</td>");
}
function gCal(src,srcId,mm,yy) /*génère le calendrier*/
{
if (tempo!=null&&tempo[srcId]!=null)
{
clearTimeout(tempo[srcId]);
_(src).focus();
}
if (mm<0) {mm+=12;yy--;} /*changment de mois/année*/
else if (mm>11) {mm-=12;yy++;}
dnow=new Date(); /*date du jour*/
param=_(srcId).parametre; /*parametre par defaut*/
ddeb = null; dfin = null;
if (param["ddeb"]!="" && _(param["ddeb"]+"_cal")!=null && _(param["ddeb"]+"_cal").parametre.date != null)
ddeb = _(param["ddeb"]+"_cal").parametre.date;
if (param["dfin"]!="" && _(param["dfin"]+"_cal")!=null && _(param["dfin"]+"_cal").parametre.date != null)
dfin = _(param["dfin"]+"_cal").parametre.date;
htm="<table cellpadding=0 cellspacing=0 >";
/*titre*/
if (param["titre"]!= null )
{htm+="<tr><td colspan='8' class='zoneTitre' >"+param["titre"]+"</td></tr>";}
/*zone de navigation*/
htm+="<tr><td colspan='8'><table width='100%' cellpadding=0 cellspacing=0 ><tr>";
htm+=htmNavChk(new Date(yy-1,mm,1),dateMax(ddeb,param["dateMin"]),src,srcId,mm,yy-1,param["anneeMoins"]);
htm+=htmNavChk(new Date(yy,mm,0),dateMax(ddeb,param["dateMin"]),src,srcId,mm-1,yy,param["moisMoins"]);
htm+="<td class='zoneMois'>"+param["mois"][mm]+"</td>";
htm+=htmNavChk(dateMin(dfin,param["dateMax"]),new Date(yy,mm+1,1),src,srcId,mm+1,yy,param["moisPlus"]);
htm+=htmNavChk(dateMin(dfin,param["dateMax"]),new Date(yy+1,mm,1),src,srcId,mm,yy+1,param["anneePlus"]);
htm+="</tr></table></td></tr>";
/*jours de la semaine*/
htm+="<tr><td></td>";
pJs = param["debutSemaine"];
pJm = new Date(yy,mm,1).getDay(); /*jour du 1ere du mois*/
pjT = 1-pJm+pJs;
pjT-=(pjT>1)?7:0;
dateX = new Date(yy,mm,pjT);
for (j=0;j<7;j++) /*affiche les jours de la semaine*/
{htm+="<td>"+param["jour"][(j+pJs)%7]+"</td>";}
htm+="</tr>";
avantFinMois=true;idx=0;
idxSem=parseInt(nbJ(new Date(yy,mm,1))/7+1,10); /*index de la semaine*/
while(avantFinMois) /*boucle jusqu'a la fin du mois */
{
htm+=(idx%7==0)?"<tr><td class='nSemaine' >"+idxSem+"</td>":""; /*affiche le numero de semaine*/
if (dateBefore(dateX,dateMax(ddeb,param["dateMin"]))||dateBefore(dateMin(dfin,param["dateMax"]),dateX))
htm+="<td style='text-decoration:line-through;'><a class='tdx' href='#'>"+subDiv(param,idx,dateX,mm,aa,0)+"</b></td>";
else
htm+="<td><a class='tdx' href='#' onclick=\"javascript:choix("+dateX.getFullYear()+","+dateX.getMonth()+","+dateX.getDate()+",'"+srcId+"','"+src+"')\" >"+subDiv(param,idx,dateX,mm,aa,0)+"</a></td>";
idx++;
if (idx%7==0)
{htm+="</tr>"; idxSem++;}
dateX= new Date(dateX.getFullYear(),dateX.getMonth(),dateX.getDate()+1);
if (idx>7&&idx%7==0&&dateX.getMonth()!=mm)
{avantFinMois=false;}
}
htm+="<tr><td colspan='6'> ";
if (!dateBefore(dnow,dateMax(ddeb,param["dateMin"]))&&!dateBefore(dateMin(dfin,param["dateMax"]),dnow))
htm+="<a class='tdxNow' href='#' onclick=\"javascript:choix("+dnow.getFullYear()+","+dnow.getMonth()+","+dnow.getDate()+",'"+srcId+"','"+src+"')\" >"+param["aujourdhui"]+"</a>";
else htm+=" "
/*annee*/
htm+="</td><td colspan='2' class='zoneAnnee'>"+yy+"</td></tr></table>";
//alert(htm);
_(srcId).innerHTML=htm;
return false;
}
function addZero(val) /*ajoute un zero devant*/
{ return ((val<10)?"0":"")+val;}
function choix(aa,mm,jj,srcId,src)
{
var datePos=new Date(aa,mm,jj);
var jour = datePos.getDay();
param=_(srcId).parametre;
param.date = datePos;
var dateAffiche = param["format"].replace("%j",addZero(datePos.getDate())).replace("%k",datePos.getDate()).replace("%d",param["jLib"][jour]);
dateAffiche = dateAffiche.replace("%m",addZero(datePos.getMonth()+1)).replace("%n",datePos.getMonth()+1).replace("%p",param["mois"][datePos.getMonth()]);
dateAffiche = dateAffiche.replace("%a",datePos.getFullYear()).replace("%y",datePos.getYear());
_(src).value = dateAffiche;
}
function subDiv(param,idx,dateX,mm,aa,code)
{
pJs = param["debutSemaine"];
dnow=new Date();
switch(code)
{
case 0 : return (param["jPause"][(idx+pJs)%7]==true) ? "<div class='enWeekEnd' >"+subDiv(param,idx,dateX,mm,aa,1)+"</div>" : subDiv(param,idx,dateX,mm,aa,1) ; break;
case 1 : return (param["jFeriee"][dateX.getDate()+"-"+(dateX.getMonth()+1)]!=null) ? ("<div class=\"enFeriee\" title=\""+param["jFeriee"][dateX.getDate()+"-"+(dateX.getMonth()+1)]+"\" >"+subDiv(param,idx,dateX,mm,aa,2)+"</div>") : subDiv(param,idx,dateX,mm,aa,2) ; break;
case 2 : return (dateX.getMonth()==mm) ? "<div class='enMois' >"+subDiv(param,idx,dateX,mm,aa,3)+"</div>" : subDiv(param,idx,dateX,mm,aa,3) ; break;
case 3 : return (dateX.getMonth()==dnow.getMonth()&&dateX.getFullYear()==dnow.getFullYear()&&dateX.getDate()==dnow.getDate()) ? "<div class='aujourdhui' >"+subDiv(param,idx,dateX,mm,aa,4)+"</div>" : subDiv(param,idx,dateX,mm,aa,4) ; break;
case 4 : return dateX.getDate(); break;
}
}
function getMinx(tab,mini)
{
var rc=mini,code="";
for (k in tab)
{
if (tab[k]>mini && rc<tab[k]) {rc=tab[k]; code = k; }
}
return code;
}
function decodeDate(val,format,defaut)
{
var dnow = defaut,jj= dnow.getDate(),mm = dnow.getMonth(), aa= dnow.getFullYear();
var parx = {"%j":"([0123][0-9])","%k":"([0123]?[0-9])","%d":"("+(param["jLib"].join("|"))+")","%m":"([01][0-9])","%n":"([01]?[0-9])",
"%p":"("+(param["mois"].join("|"))+")","%a":"([12][0-9]{3})","%y":"([0-9]{2})"};
var ff= format,df = format;
for (e in parx)
{
ff = ff.replace(e,parx[e]);
df = df.replace(e,"("+e+")");
}
tablo = (new RegExp(ff)).exec(val);
clef = (new RegExp(df)).exec(format);
if (tablo!=null&&clef!=null)
{
for (i = 0; i< tablo.length;i++)
{
switch(clef[i])
{
case "%j": case "%k" : jj=parseInt(tablo[i],10); break;
case "%m": case "%n" : mm=parseInt(tablo[i],10)-1; break;
case "%p" : mm=0; while(mm<param["mois"].length&¶m["mois"][mm]!=tablo[i]){mm++;}; break;
case "%a": aa = parseInt(tablo[i],10); break;
}
}
}
return new Date(aa,mm,jj);
}
function visuCal(src,paramX)
{
if (src.id=="") /*si il n'y pas d'ID on en créé un*/
{
cpt=0;
while(_("microcal"+cpt) != null)
{cpt++;}
src.id="microcal"+cpt;
}
pos_= posxy(src,0,src.offsetHeight );
srcId = src.id+"_cal"; /*id du div du calendrier*/
dnow= new Date();
if (_(srcId)==null) /*si il existe pas on le créé*/
{
param={}
for (e in pDefaut) {
trouve=false;
if (paramX!=null)
for (i in paramX) { if (e==i) {param[e]=paramX[e];trouve=true;} }
if (!trouve) param[e]=pDefaut[e];
}
dnow = decodeDate(src.value,param.format,new Date());
div = document.createElement('div');
div.setAttribute('id',srcId);
div.style.position = 'absolute';
div.style.top = pos_.y + 'px';
div.style.left = pos_.x + 'px'; /*this.deltaG = 0; */
div.className = 'divCal';
div.parametre = param;
document.body.appendChild(div);
gCal(src.id,srcId,dnow.getMonth(),dnow.getFullYear(),param);
} else
{ div = _(src.id+"_cal");
div.style.display='inline';/*affiche le calendrier*/
div.style.top = pos_.y + 'px';
div.style.left = pos_.x + 'px'; /*this.deltaG = 0; */
}
}
function masqueCal(src)
{tempo[src.id+"_cal"]=window.setTimeout("_('"+src.id+"_cal').style.display='none'",500);}
/*retourne la position en {x,y} d'un element */
function posxy(rst,x,y)
{
if ( rst.style!=null && rst.style.position == 'absolute' ) { return {"x":x + rst.offsetLeft,"y":y + rst.offsetTop} }
else if (rst.parentNode == null ) { return {"x":x,"y":y} }
else { return (nomove[rst.tagName]==0) ? posxy(rst.parentNode,x,y) : posxy(rst.parentNode,x+rst.offsetLeft,y+rst.offsetTop) ; }
}
Conclusion
séparation des fichiers + ajout d'exemples
Historique
- 08 juillet 2008 09:13:51 :
- liste des modifications
8/7/2008 :
-passage en DOM
-simplication de l'appel de la méthode
- 08 juillet 2008 09:17:01 :
- -passage en DOM
-simplification de l'appel de la méthode
- 08 juillet 2008 11:35:22 :
- -ajout de la recherche <input type="date" ...>
- 08 juillet 2008 14:15:42 :
- -correction pour tourner sous IE
- 29 octobre 2008 13:49:30 :
- entièrement remodelé et plus simple que les versions précédentes
- 13 mai 2009 12:59:47 :
- séparation des fichiers + ajout d'exemples
- 13 mai 2009 16:20:05 :
- correction d'une petite erreur de frappe
- 13 mai 2009 16:22:19 :
- ...
- 03 juin 2009 22:01:46 :
- -rectification du positionnement
-prise en charge de l'arabe (utf-8)
- 03 juin 2009 22:13:07 :
- -correction d'une erreur
- 07 juin 2009 20:06:11 :
- version 4.2 : correction d'un bug sous IE, prise en charge d'une date par défaut
- 07 juin 2009 20:06:17 :
- version 4.2 : correction d'un bug sous IE, prise en charge d'une date par défaut
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Une question pour mon calendrier [ par syltouille ]
Bonjour et bonne annee tout le monde.Mon premier souci de cette annee est:J'ai realise un calendrier en PHP avec des images pour chaque jour.- Je voud
agenda calendrier [ par viperleparrain ]
bon voial mon probleme sur mon site je veux integrer un calendrier de match pour indiquer kan on joue a kel heure un calendrier simple et foncti
Calendrier- agenda modifiable [ par xaver ]
Bonjourje suis à la recherche d'un script pour obtenir un agenda-calendrier de même design que l'agenda perpétuel mais avec l'opt
Click sur une date du calendrier [ par fionalabelle ]
Bonjour à tous, <P class
recherche calendrier [ par makinator7266 ]
Bonjour à tous et toutes, je suis à la recherche d'un calendrier qui me permette d'afficher une fenêtre pop-up indiquant l'évenement correspondant à l
Fermeture de popup et envoi d'informations [ par Rankin ]
Salut à tous. Je bosse actuellement sur la réalisation d'un site, qui contient une partie administration pour gérer des bases de donn&
Gérer un agenda en Javascript en récupérant des dates SQL [ par Sp6men000 ]
Bonjour,Je suis actuellement en phase de développement d'un site internet. Il utilise une base de donnée SQL qui posséde une table de la forme: table
Recupérer la date depui un calendrier [ par lebasketeur ]
bonjour tout le monde,Au cours de mon premier projet en php/mysql, j'ai rencontré quelque problème, si vous pouvez bien m'aider...Dans un formulaire d
gestion calendrier [ par ikramta ]
salut tout le monde.j'ai teléchargé un script qui permet d'afficher un calendrier et c'est vraiment ce que je veut ,mais une petite chause qui me blo
je cherche un insérer un calendrier/agenda dans mon site [ par claudine83 ]
Bonjourje crée un site avec web to date et chercher un calendrier à inséreren htmlmerci
|
Derniers Blogs
MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg [MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|