summaryrefslogtreecommitdiff
path: root/framework/Web/Javascripts/js/datepicker.js
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Web/Javascripts/js/datepicker.js')
-rw-r--r--framework/Web/Javascripts/js/datepicker.js323
1 files changed, 175 insertions, 148 deletions
diff --git a/framework/Web/Javascripts/js/datepicker.js b/framework/Web/Javascripts/js/datepicker.js
index 4ab5cd68..b9d7b610 100644
--- a/framework/Web/Javascripts/js/datepicker.js
+++ b/framework/Web/Javascripts/js/datepicker.js
@@ -1,46 +1,46 @@
Prado.WebUI.TDatePicker=Class.create();
-Prado.WebUI.TDatePicker.prototype={MonthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],ShortWeekDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Format:"yyyy-MM-dd",FirstDayOfWeek:1,ClassName:"TDatePicker",FromYear:2000,UpToYear:2015,initialize:function(_1,_2){
-this.attr=_2||[];
-this.control=$(_1);
+Prado.WebUI.TDatePicker.prototype={MonthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],ShortWeekDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Format:"yyyy-MM-dd",FirstDayOfWeek:1,ClassName:"TDatePicker",FromYear:2000,UpToYear:2015,initialize:function(_1){
+this.options=_1||[];
+this.control=$(_1.ID);
this.dateSlot=new Array(42);
this.weekSlot=new Array(6);
this.minimalDaysInFirstWeek=4;
this.selectedDate=this.newDate();
-if(this.attr.Trigger){
-this.trigger=$(this.attr.Trigger);
-var _3=this.attr.TriggerEvent||"click";
+if(this.options.Trigger){
+this.trigger=$(this.options.Trigger);
+var _2=this.options.TriggerEvent||"click";
}else{
this.trigger=this.control;
-var _3=this.attr.TriggerEvent||"focus";
+var _2=this.options.TriggerEvent||"focus";
}
-Event.observe(this.trigger,_3,this.show.bindEvent(this));
-Object.extend(this,_2);
+Object.extend(this,_1);
+Event.observe(this.trigger,_2,this.show.bindEvent(this));
this.create();
},create:function(){
+var _3;
var _4;
var _5;
-var _6;
var tr;
var td;
this._calDiv=document.createElement("div");
this._calDiv.className=this.ClassName;
this._calDiv.style.display="none";
this._calDiv.style.position="absolute";
-_4=document.createElement("div");
-_4.className="calendarHeader";
-this._calDiv.appendChild(_4);
-_5=document.createElement("table");
-_5.style.cellSpacing=0;
+_3=document.createElement("div");
+_3.className="calendarHeader";
+this._calDiv.appendChild(_3);
+_4=document.createElement("table");
+_4.style.cellSpacing=0;
+_3.appendChild(_4);
+_5=document.createElement("tbody");
_4.appendChild(_5);
-_6=document.createElement("tbody");
-_5.appendChild(_6);
tr=document.createElement("tr");
-_6.appendChild(tr);
+_5.appendChild(tr);
td=document.createElement("td");
-var _9=document.createElement("button");
-_9.className="prevMonthButton";
-_9.appendChild(document.createTextNode("<<"));
-td.appendChild(_9);
+var _8=document.createElement("button");
+_8.className="prevMonthButton";
+_8.appendChild(document.createTextNode("<<"));
+td.appendChild(_8);
tr.appendChild(td);
td=document.createElement("td");
tr.appendChild(td);
@@ -72,58 +72,58 @@ this._yearSelect.appendChild(opt);
td.appendChild(this._yearSelect);
td=document.createElement("td");
td.className="nextMonthButton";
-var _12=document.createElement("button");
-_12.appendChild(document.createTextNode(">>"));
-td.appendChild(_12);
+var _11=document.createElement("button");
+_11.appendChild(document.createTextNode(">>"));
+td.appendChild(_11);
tr.appendChild(td);
-_4=document.createElement("div");
-_4.className="calendarBody";
-this._calDiv.appendChild(_4);
-var _13=_4;
-var _14;
-_5=document.createElement("table");
-_5.className="grid";
-_4.appendChild(_5);
-var _15=document.createElement("thead");
-_5.appendChild(_15);
+_3=document.createElement("div");
+_3.className="calendarBody";
+this._calDiv.appendChild(_3);
+var _12=_3;
+var _13;
+_4=document.createElement("table");
+_4.className="grid";
+_3.appendChild(_4);
+var _14=document.createElement("thead");
+_4.appendChild(_14);
tr=document.createElement("tr");
-_15.appendChild(tr);
+_14.appendChild(tr);
for(i=0;i<7;++i){
td=document.createElement("th");
-_14=document.createTextNode(this.ShortWeekDayNames[(i+this.FirstDayOfWeek)%7]);
-td.appendChild(_14);
+_13=document.createTextNode(this.ShortWeekDayNames[(i+this.FirstDayOfWeek)%7]);
+td.appendChild(_13);
td.className="weekDayHead";
tr.appendChild(td);
}
-_6=document.createElement("tbody");
-_5.appendChild(_6);
+_5=document.createElement("tbody");
+_4.appendChild(_5);
for(week=0;week<6;++week){
tr=document.createElement("tr");
-_6.appendChild(tr);
+_5.appendChild(tr);
for(day=0;day<7;++day){
td=document.createElement("td");
td.className="calendarDate";
-_14=document.createTextNode(String.fromCharCode(160));
-td.appendChild(_14);
+_13=document.createTextNode(String.fromCharCode(160));
+td.appendChild(_13);
tr.appendChild(td);
var tmp=new Object();
tmp.tag="DATE";
tmp.value=-1;
-tmp.data=_14;
+tmp.data=_13;
this.dateSlot[(week*7)+day]=tmp;
Event.observe(td,"mouseover",this.hover.bindEvent(this));
Event.observe(td,"mouseout",this.hover.bindEvent(this));
}
}
-_4=document.createElement("div");
-_4.className="calendarFooter";
-this._calDiv.appendChild(_4);
-var _17=document.createElement("button");
-_17.className="todayButton";
-var _18=this.newDate();
-var _19=_18.SimpleFormat(this.Format);
-_17.appendChild(document.createTextNode(_19));
-_4.appendChild(_17);
+_3=document.createElement("div");
+_3.className="calendarFooter";
+this._calDiv.appendChild(_3);
+var _16=document.createElement("button");
+_16.className="todayButton";
+var _17=this.newDate();
+var _18=_17.SimpleFormat(this.Format);
+_16.appendChild(document.createTextNode(_18));
+_3.appendChild(_16);
if(Prado.Browser().ie){
this.iePopUp=document.createElement("iframe");
this.iePopUp.src="";
@@ -136,24 +136,24 @@ document.body.appendChild(this._calDiv);
this.update();
this.updateHeader();
this.ieHack(true);
-_9.hideFocus=true;
-_12.hideFocus=true;
-_17.hideFocus=true;
-Event.observe(_9,"click",this.prevMonth.bindEvent(this));
-Event.observe(_12,"click",this.nextMonth.bindEvent(this));
-Event.observe(_17,"click",this.selectToday.bindEvent(this));
+_8.hideFocus=true;
+_11.hideFocus=true;
+_16.hideFocus=true;
+Event.observe(_8,"click",this.prevMonth.bindEvent(this));
+Event.observe(_11,"click",this.nextMonth.bindEvent(this));
+Event.observe(_16,"click",this.selectToday.bindEvent(this));
Event.observe(this._monthSelect,"change",this.monthSelect.bindEvent(this));
Event.observe(this._yearSelect,"change",this.yearSelect.bindEvent(this));
Event.observe(this._calDiv,"mousewheel",this.mouseWheelChange.bindEvent(this));
-Event.observe(_13,"click",this.selectDate.bindEvent(this));
-},ieHack:function(_20){
+Event.observe(_12,"click",this.selectDate.bindEvent(this));
+},ieHack:function(_19){
if(this.iePopUp){
this.iePopUp.style.display="block";
this.iePopUp.style.top=(this._calDiv.offsetTop-1)+"px";
this.iePopUp.style.left=(this._calDiv.offsetLeft-1)+"px";
this.iePopUp.style.width=Math.abs(this._calDiv.offsetWidth-2)+"px";
this.iePopUp.style.height=(this._calDiv.offsetHeight+1)+"px";
-if(_20){
+if(_19){
this.iePopUp.style.display="none";
}
}
@@ -174,48 +174,48 @@ if(kc==Event.KEY_ESC){
Event.stop(ev);
this.hide();
}
-var _23=function(_24,_25){
-_24=(_24+12)%12;
-var _26=[31,28,31,30,31,30,31,31,30,31,30,31];
-var res=_26[_24];
-if(_24==1){
-res+=_25%4==0&&!(_25%400==0)?1:0;
+var _22=function(_23,_24){
+_23=(_23+12)%12;
+var _25=[31,28,31,30,31,30,31,31,30,31,30,31];
+var res=_25[_23];
+if(_23==1){
+res+=_24%4==0&&!(_24%400==0)?1:0;
}
return res;
};
if(kc<37||kc>40){
return true;
}
-var _28=this.selectedDate;
-var d=_28.valueOf();
+var _27=this.selectedDate;
+var d=_27.valueOf();
if(kc==Event.KEY_LEFT){
if(ev.ctrlKey||ev.shiftKey){
-_28.setDate(Math.min(_28.getDate(),_23(_28.getMonth()-1,_28.getFullYear())));
-d=_28.setMonth(_28.getMonth()-1);
+_27.setDate(Math.min(_27.getDate(),_22(_27.getMonth()-1,_27.getFullYear())));
+d=_27.setMonth(_27.getMonth()-1);
}else{
d-=86400000;
}
}else{
if(kc==Event.KEY_RIGHT){
if(ev.ctrlKey||ev.shiftKey){
-_28.setDate(Math.min(_28.getDate(),_23(_28.getMonth()+1,_28.getFullYear())));
-d=_28.setMonth(_28.getMonth()+1);
+_27.setDate(Math.min(_27.getDate(),_22(_27.getMonth()+1,_27.getFullYear())));
+d=_27.setMonth(_27.getMonth()+1);
}else{
d+=86400000;
}
}else{
if(kc==Event.KEY_UP){
if(ev.ctrlKey||ev.shiftKey){
-_28.setDate(Math.min(_28.getDate(),_23(_28.getMonth(),_28.getFullYear()-1)));
-d=_28.setFullYear(_28.getFullYear()-1);
+_27.setDate(Math.min(_27.getDate(),_22(_27.getMonth(),_27.getFullYear()-1)));
+d=_27.setFullYear(_27.getFullYear()-1);
}else{
d-=604800000;
}
}else{
if(kc==Event.KEY_DOWN){
if(ev.ctrlKey||ev.shiftKey){
-_28.setDate(Math.min(_28.getDate(),_23(_28.getMonth(),_28.getFullYear()+1)));
-d=_28.setFullYear(_28.getFullYear()+1);
+_27.setDate(Math.min(_27.getDate(),_22(_27.getMonth(),_27.getFullYear()+1)));
+d=_27.setFullYear(_27.getFullYear()+1);
}else{
d+=7*24*61*60*1000;
}
@@ -266,22 +266,35 @@ var m=d.getMonth()+n;
this.setMonth(m);
return false;
},onchange:function(){
+if(this.options.InputMode=="TextBox"){
this.control.value=this.formatDate();
+}else{
+var day=$(this.options.ID+"_day");
+var _34=$(this.options.ID+"_month");
+var _35=$(this.options.ID+"_year").options;
+var _36=this.selectedDate;
+day.selectedIndex=_36.getDate()-1;
+_34.selectedIndex=_36.getMonth();
+var _37=_36.getFullYear();
+for(var i=0;i<_35.length;i++){
+_35[i].selected=_35[i].value.toInteger()==_37;
+}
+}
},formatDate:function(){
return this.selectedDate?this.selectedDate.SimpleFormat(this.Format):"";
-},newDate:function(_34){
-if(!_34){
-_34=new Date();
+},newDate:function(_38){
+if(!_38){
+_38=new Date();
}
-if(isString(_34)||isNumber(_34)){
-_34=new Date(_34);
+if(isString(_38)||isNumber(_38)){
+_38=new Date(_38);
}
-return new Date(_34.getFullYear(),_34.getMonth(),_34.getDate(),0,0,0);
-},setSelectedDate:function(_35){
-if(_35==null){
+return new Date(_38.getFullYear(),_38.getMonth(),_38.getDate(),0,0,0);
+},setSelectedDate:function(_39){
+if(_39==null){
return;
}
-this.selectedDate=this.newDate(_35);
+this.selectedDate=this.newDate(_39);
this.updateHeader();
this.update();
if(isFunction(this.onchange)){
@@ -291,13 +304,13 @@ this.onchange();
return this._calDiv;
},getSelectedDate:function(){
return isNull(this.selectedDate)?null:this.newDate(this.selectedDate);
-},setYear:function(_36){
+},setYear:function(_40){
var d=this.newDate(this.selectedDate);
-d.setFullYear(_36);
+d.setFullYear(_40);
this.setSelectedDate(d);
-},setMonth:function(_37){
+},setMonth:function(_41){
var d=this.newDate(this.selectedDate);
-d.setMonth(_37);
+d.setMonth(_41);
this.setSelectedDate(d);
},nextMonth:function(){
this.setMonth(this.selectedDate.getMonth()+1);
@@ -306,7 +319,11 @@ this.setMonth(this.selectedDate.getMonth()-1);
},show:function(){
if(!this.showing){
var pos=Position.cumulativeOffset(this.control);
+if(this.options.InputMode=="TextBox"){
pos[1]+=this.control.offsetHeight;
+}else{
+pos[1]+=$(this.options.ID+"_day").offsetHeight-1;
+}
this._calDiv.style.display="block";
this._calDiv.style.top=(pos[1]-1)+"px";
this._calDiv.style.left=pos[0]+"px";
@@ -314,30 +331,40 @@ this.ieHack(false);
this.documentClickEvent=this.hideOnClick.bindEvent(this);
this.documentKeyDownEvent=this.keyPressed.bindEvent(this);
Event.observe(document.body,"click",this.documentClickEvent);
-var _39=Date.SimpleParse(Form.Element.getValue(this.control),this.Format);
-if(!isNull(_39)){
-this.selectedDate=_39;
-this.setSelectedDate(_39);
+var _43=this.getDateFromInput();
+if(!isNull(_43)){
+this.selectedDate=_43;
+this.setSelectedDate(_43);
}
Event.observe(document,"keydown",this.documentKeyDownEvent);
this.showing=true;
}
+},getDateFromInput:function(){
+if(this.options.InputMode=="TextBox"){
+return Date.SimpleParse($F(this.control),this.Format);
+}else{
+var day=$F(this.options.ID+"_day");
+var _44=$F(this.options.ID+"_month");
+var _45=$F(this.options.ID+"_year");
+var _46=new Date(_45,_44,day,0,0,0);
+return _46;
+}
},hideOnClick:function(ev){
if(!this.showing){
return;
}
var el=Event.element(ev);
-var _40=false;
+var _47=false;
do{
-_40=_40||el.className==this.ClassName;
-_40=_40||el==this.trigger;
-_40=_40||el==this.control;
-if(_40){
+_47=_47||el.className==this.ClassName;
+_47=_47||el==this.trigger;
+_47=_47||el==this.control;
+if(_47){
break;
}
el=el.parentNode;
}while(el);
-if(!_40){
+if(!_47){
this.hide();
}
},hide:function(){
@@ -351,61 +378,61 @@ Event.stopObserving(document.body,"click",this.documentClickEvent);
Event.stopObserving(document,"keydown",this.documentKeyDownEvent);
}
},update:function(){
-var _41=this.selectedDate;
-var _42=(this.newDate()).toISODate();
-var _43=_41.toISODate();
-var d1=new Date(_41.getFullYear(),_41.getMonth(),1);
-var d2=new Date(_41.getFullYear(),_41.getMonth()+1,1);
-var _46=Math.round((d2-d1)/(24*60*60*1000));
-var _47=(d1.getDay()-this.FirstDayOfWeek)%7;
-if(_47<0){
-_47+=7;
-}
-var _48=0;
-while(_48<_47){
-this.dateSlot[_48].value=-1;
-this.dateSlot[_48].data.data=String.fromCharCode(160);
-this.dateSlot[_48].data.parentNode.className="empty";
-_48++;
-}
-for(i=1;i<=_46;i++,_48++){
-var _49=this.dateSlot[_48];
-var _50=_49.data.parentNode;
-_49.value=i;
-_49.data.data=i;
-_50.className="date";
-if(d1.toISODate()==_42){
-_50.className+=" today";
-}
-if(d1.toISODate()==_43){
-_50.className+=" selected";
+var _48=this.selectedDate;
+var _49=(this.newDate()).toISODate();
+var _50=_48.toISODate();
+var d1=new Date(_48.getFullYear(),_48.getMonth(),1);
+var d2=new Date(_48.getFullYear(),_48.getMonth()+1,1);
+var _53=Math.round((d2-d1)/(24*60*60*1000));
+var _54=(d1.getDay()-this.FirstDayOfWeek)%7;
+if(_54<0){
+_54+=7;
+}
+var _55=0;
+while(_55<_54){
+this.dateSlot[_55].value=-1;
+this.dateSlot[_55].data.data=String.fromCharCode(160);
+this.dateSlot[_55].data.parentNode.className="empty";
+_55++;
+}
+for(i=1;i<=_53;i++,_55++){
+var _56=this.dateSlot[_55];
+var _57=_56.data.parentNode;
+_56.value=i;
+_56.data.data=i;
+_57.className="date";
+if(d1.toISODate()==_49){
+_57.className+=" today";
+}
+if(d1.toISODate()==_50){
+_57.className+=" selected";
}
d1=new Date(d1.getFullYear(),d1.getMonth(),d1.getDate()+1);
}
-var _51=_48;
-while(_48<42){
-this.dateSlot[_48].value=-1;
-this.dateSlot[_48].data.data=String.fromCharCode(160);
-this.dateSlot[_48].data.parentNode.className="empty";
-++_48;
+var _58=_55;
+while(_55<42){
+this.dateSlot[_55].value=-1;
+this.dateSlot[_55].data.data=String.fromCharCode(160);
+this.dateSlot[_55].data.parentNode.className="empty";
+++_55;
}
},hover:function(ev){
Element.condClassName(Event.element(ev),"hover",ev.type=="mouseover");
},updateHeader:function(){
-var _52=this._monthSelect.options;
+var _59=this._monthSelect.options;
var m=this.selectedDate.getMonth();
-for(var i=0;i<_52.length;++i){
-_52[i].selected=false;
-if(_52[i].value==m){
-_52[i].selected=true;
-}
-}
-_52=this._yearSelect.options;
-var _53=this.selectedDate.getFullYear();
-for(var i=0;i<_52.length;++i){
-_52[i].selected=false;
-if(_52[i].value==_53){
-_52[i].selected=true;
+for(var i=0;i<_59.length;++i){
+_59[i].selected=false;
+if(_59[i].value==m){
+_59[i].selected=true;
+}
+}
+_59=this._yearSelect.options;
+var _60=this.selectedDate.getFullYear();
+for(var i=0;i<_59.length;++i){
+_59[i].selected=false;
+if(_59[i].value==_60){
+_59[i].selected=true;
}
}
}};