[6779] | 1 | scheduler._reset_scale=function(){
|
---|
| 2 | //current mode doesn't support scales
|
---|
| 3 | //we mustn't call reset_scale for such modes, so it just to be sure
|
---|
| 4 | if (!this.templates[this._mode+"_date"]) return;
|
---|
| 5 | if(this._mode == 'week')
|
---|
| 6 | this._table_view = true;
|
---|
| 7 |
|
---|
| 8 | var h=this._els["dhx_cal_header"][0];
|
---|
| 9 | var b=this._els["dhx_cal_data"][0];
|
---|
| 10 | var c = this.config;
|
---|
| 11 |
|
---|
| 12 | h.innerHTML="";
|
---|
| 13 | b.scrollTop=0; //fix flickering in FF
|
---|
| 14 | b.innerHTML="";
|
---|
| 15 |
|
---|
| 16 |
|
---|
| 17 | var str=((c.readonly||(!c.drag_resize))?" dhx_resize_denied":"")+((c.readonly||(!c.drag_move))?" dhx_move_denied":"");
|
---|
| 18 | if (str) b.className = "dhx_cal_data"+str;
|
---|
| 19 |
|
---|
| 20 |
|
---|
| 21 | this._cols=[]; //store for data section
|
---|
| 22 | this._colsS={height:0};
|
---|
| 23 | this._dy_shift=0;
|
---|
| 24 |
|
---|
| 25 | this.set_sizes();
|
---|
| 26 | var summ=parseInt(h.style.width); //border delta
|
---|
| 27 | var left=0;
|
---|
| 28 |
|
---|
| 29 | var d,dd,sd,today;
|
---|
| 30 | dd=this.date[this._mode+"_start"](new Date(this._date.valueOf()));
|
---|
| 31 | d=sd=this._table_view?scheduler.date.week_start(dd):dd;
|
---|
| 32 | today=this.date.date_part(new Date());
|
---|
| 33 |
|
---|
| 34 | //reset date in header
|
---|
| 35 | var ed=scheduler.date.add(dd,1,this._mode);
|
---|
| 36 |
|
---|
| 37 | if(this._mode == 'week')
|
---|
| 38 | var count = 2;
|
---|
| 39 | else
|
---|
| 40 | var count = 7;
|
---|
| 41 |
|
---|
| 42 | if (!this._table_view){
|
---|
| 43 | var count_n = this.date["get_"+this._mode+"_end"];
|
---|
| 44 | if (count_n) ed = count_n(dd);
|
---|
| 45 | count = Math.round((ed.valueOf()-dd.valueOf())/(1000*60*60*24));
|
---|
| 46 | }
|
---|
| 47 |
|
---|
| 48 | this._min_date=d;
|
---|
| 49 | this._els["dhx_cal_date"][0].innerHTML=this.templates[this._mode+"_date"](dd,ed,this._mode);
|
---|
| 50 |
|
---|
| 51 |
|
---|
| 52 | for (var i=0; i<count; i++){
|
---|
| 53 | this._cols[i]=Math.floor(summ/(count-i));
|
---|
| 54 |
|
---|
| 55 | this._render_x_header(i,left,d,h);
|
---|
| 56 | if (!this._table_view){
|
---|
| 57 | var scales=document.createElement("DIV");
|
---|
| 58 | var cls = "dhx_scale_holder"
|
---|
| 59 | if (d.valueOf()==today.valueOf()) cls = "dhx_scale_holder_now";
|
---|
| 60 | scales.className=cls+" "+this.templates.week_date_class(d,today);
|
---|
| 61 | this.set_xy(scales,this._cols[i]-1,c.hour_size_px*(c.last_hour-c.first_hour),left+this.xy.scale_width+1,0);//-1 for border
|
---|
| 62 | b.appendChild(scales);
|
---|
| 63 | }
|
---|
| 64 |
|
---|
| 65 | d=this.date.add(d,1,"day")
|
---|
| 66 | summ-=this._cols[i];
|
---|
| 67 | left+=this._cols[i];
|
---|
| 68 | this._colsS[i]=((this._cols[i-1]||0)+(this._colsS[i-1]||(this._table_view?0:this.xy.scale_width+2))-1);
|
---|
| 69 | }
|
---|
| 70 | this._max_date=d;
|
---|
| 71 | this._colsS[count]=this._cols[count-1]+this._colsS[count-1];
|
---|
| 72 |
|
---|
| 73 | if (this._table_view)
|
---|
| 74 | if(this._mode == 'week')
|
---|
| 75 | this._reset_week_scale(b,dd,sd);
|
---|
| 76 | else
|
---|
| 77 | this._reset_month_scale(b,dd,sd);
|
---|
| 78 | else{
|
---|
| 79 | this._reset_hours_scale(b,dd,sd);
|
---|
| 80 | if (c.multi_day){
|
---|
| 81 | var c1 = document.createElement("DIV");
|
---|
| 82 | c1.className="dhx_multi_day";
|
---|
| 83 | c1.style.visibility="hidden";
|
---|
| 84 | this.set_xy(c1,parseInt(h.style.width),0,this.xy.scale_width,0);
|
---|
| 85 | b.appendChild(c1);
|
---|
| 86 | var c2 = c1.cloneNode(true);
|
---|
| 87 | c2.className="dhx_multi_day_icon";
|
---|
| 88 | c2.style.visibility="hidden";
|
---|
| 89 | this.set_xy(c2,this.xy.scale_width-1,0,0,0);
|
---|
| 90 | b.appendChild(c2);
|
---|
| 91 |
|
---|
| 92 | this._els["dhx_multi_day"]=[c1,c2];
|
---|
| 93 | }
|
---|
| 94 | }
|
---|
| 95 | }
|
---|
| 96 |
|
---|
| 97 | scheduler._reset_week_scale=function(b,dd,sd){
|
---|
| 98 | var ed=scheduler.date.add(sd,1,"week");
|
---|
| 99 | var cd=new Date();
|
---|
| 100 | this.date.date_part(cd);
|
---|
| 101 | this.date.date_part(sd);
|
---|
| 102 |
|
---|
| 103 | var rows=Math.ceil((ed.valueOf()-sd.valueOf())/(60*60*24*1000*2));
|
---|
| 104 | var tdcss=[];
|
---|
| 105 | var height=(Math.floor(b.clientHeight/rows)-22);
|
---|
| 106 |
|
---|
| 107 | this._colsS.height=height+22;
|
---|
| 108 | var h = this._colsS.heights = [];
|
---|
| 109 | for (var i=0; i<=7; i++)
|
---|
| 110 | tdcss[i]=" style='height:"+height+"px; width:"+((this._cols[i]||0)-1)+"px;' "
|
---|
| 111 |
|
---|
| 112 |
|
---|
| 113 |
|
---|
| 114 | var cellheight = 0;
|
---|
| 115 | this._min_date=sd;
|
---|
| 116 | var html="<table cellpadding='0' cellspacing='0'>";
|
---|
| 117 | for (var i=0; i<rows; i++){
|
---|
| 118 | html+="<tr>";
|
---|
| 119 | for (var j=0; j<2; j++){
|
---|
| 120 | html+="<td";
|
---|
| 121 | var cls = "";
|
---|
| 122 | var clstitle = "";
|
---|
| 123 | if (sd.valueOf()==cd.valueOf())
|
---|
| 124 | cls='dhx_now';
|
---|
| 125 | var aaaa = sd.getFullYear();
|
---|
| 126 | var mm = sd.getMonth()+1;
|
---|
| 127 | var dd = sd.getDate();
|
---|
| 128 | aaaa = aaaa.toString();
|
---|
| 129 | mm = mm.toString();
|
---|
| 130 | dd = dd.toString();
|
---|
| 131 | if(mm.length < 2) mm = '0' + mm;
|
---|
| 132 | if(dd.length < 2) dd = '0' + dd;
|
---|
| 133 | var aaaammdd = aaaa + mm + dd;
|
---|
| 134 | if (holidayTab[aaaammdd])
|
---|
| 135 | {
|
---|
| 136 | cls = 'dhx_holiday';
|
---|
| 137 | clstitle = holidayTab[aaaammdd];
|
---|
| 138 | }
|
---|
| 139 |
|
---|
| 140 | if (sd.valueOf()==cd.valueOf() && holidayTab[aaaammdd])
|
---|
| 141 | {
|
---|
| 142 | cls = 'dhx_now_holiday';
|
---|
| 143 | clstitle = holidayTab[aaaammdd];
|
---|
| 144 | }
|
---|
| 145 |
|
---|
| 146 | html+=" class='"+cls+" "+this.templates.month_date_class(sd,cd)+"' ";
|
---|
| 147 | html+="><div class='dhx_month_head' title='" + clstitle + "'> "+this.templates.week_scale_date(sd)+"</div><div class='dhx_month_body' "+tdcss[j]+"></div></td>"
|
---|
| 148 | sd=this.date.add(sd,1,"day");
|
---|
| 149 | if(i==3)
|
---|
| 150 | break;
|
---|
| 151 | }
|
---|
| 152 | html+="</tr>";
|
---|
| 153 | h[i] = cellheight;
|
---|
| 154 | cellheight+=this._colsS.height;
|
---|
| 155 | }
|
---|
| 156 | html+="</table>";
|
---|
| 157 | this._max_date=sd;
|
---|
| 158 |
|
---|
| 159 | b.innerHTML=html;
|
---|
| 160 | return sd;
|
---|
| 161 | }
|
---|
| 162 |
|
---|
| 163 | scheduler._mouse_coords=function(ev){
|
---|
| 164 | var pos;
|
---|
| 165 | var b=document.body;
|
---|
| 166 | var d = document.documentElement;
|
---|
| 167 | if(ev.pageX || ev.pageY)
|
---|
| 168 | pos={x:ev.pageX, y:ev.pageY};
|
---|
| 169 | else pos={
|
---|
| 170 | x:ev.clientX + (b.scrollLeft||d.scrollLeft||0) - b.clientLeft,
|
---|
| 171 | y:ev.clientY + (b.scrollTop||d.scrollTop||0) - b.clientTop
|
---|
| 172 | }
|
---|
| 173 |
|
---|
| 174 | //apply layout
|
---|
| 175 | pos.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);
|
---|
| 176 | pos.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els["dhx_cal_data"][0].scrollTop;
|
---|
| 177 | pos.ev = ev;
|
---|
| 178 |
|
---|
| 179 | var handler = this["mouse_"+this._mode];
|
---|
| 180 | if (handler)
|
---|
| 181 | return handler.call(this,pos);
|
---|
| 182 |
|
---|
| 183 | //transform to date
|
---|
| 184 | if (!this._table_view){
|
---|
| 185 | pos.x=Math.max(0,Math.ceil(pos.x/this._cols[0])-1);
|
---|
| 186 | pos.y=Math.max(0,Math.ceil(pos.y*60/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step);
|
---|
| 187 | } else {
|
---|
| 188 | var dy=0;
|
---|
| 189 | for (dy=1; dy < this._colsS.heights.length; dy++)
|
---|
| 190 | if (this._colsS.heights[dy]>pos.y) break;
|
---|
| 191 | this._mode == 'week'?n=2:n=7;
|
---|
| 192 | pos.y=(Math.max(0,Math.ceil(pos.x/this._cols[0])-1)+Math.max(0,dy-1)*n)*24*60/this.config.time_step;
|
---|
| 193 | pos.x=0;
|
---|
| 194 | }
|
---|
| 195 |
|
---|
| 196 | return pos;
|
---|
| 197 | }
|
---|
| 198 |
|
---|
| 199 | scheduler._pre_render_events=function(evs,hold){
|
---|
| 200 | var hb = this.xy.bar_height;
|
---|
| 201 | var h_old = this._colsS.heights;
|
---|
| 202 | var h=this._colsS.heights=[0,0,0,0,0,0,0];
|
---|
| 203 |
|
---|
| 204 | if (!this._table_view) evs=this._pre_render_events_line(evs,hold); //ignore long events for now
|
---|
| 205 | else evs=this._pre_render_events_table(evs,hold);
|
---|
| 206 |
|
---|
| 207 | if (this._table_view){
|
---|
| 208 | if (hold)
|
---|
| 209 | this._colsS.heights = h_old;
|
---|
| 210 | else {
|
---|
| 211 | var evl = this._els["dhx_cal_data"][0].firstChild;
|
---|
| 212 | if (evl.rows){
|
---|
| 213 | for (var i=0; i<evl.rows.length; i++){
|
---|
| 214 | h[i]++;
|
---|
| 215 | if ((h[i])*hb > this._colsS.height-22){ // 22 - height of cell's header
|
---|
| 216 | //we have overflow, update heights
|
---|
| 217 | var cells = evl.rows[i].cells;
|
---|
| 218 | for (var j=0; j < cells.length; j++) {
|
---|
| 219 | cells[j].childNodes[1].style.height = h[i]*hb+"px";
|
---|
| 220 | }
|
---|
| 221 | h[i]=(h[i-1]||0)+cells[0].offsetHeight;
|
---|
| 222 | }
|
---|
| 223 | h[i]=(h[i-1]||0)+evl.rows[i].cells[0].offsetHeight;
|
---|
| 224 | }
|
---|
| 225 | h.unshift(0);
|
---|
| 226 | if (evl.parentNode.offsetHeight<evl.parentNode.scrollHeight && !evl._h_fix){
|
---|
| 227 | //we have v-scroll, decrease last day cell
|
---|
| 228 | for (var i=0; i<evl.rows.length; i++){
|
---|
| 229 | if(this._mode=='month'){
|
---|
| 230 | var cell = evl.rows[i].cells[6].childNodes[0];
|
---|
| 231 | var w = cell.offsetWidth-scheduler.xy.scroll_width+"px";
|
---|
| 232 | cell.style.width = w;
|
---|
| 233 | cell.nextSibling.style.width = w;
|
---|
| 234 | }
|
---|
| 235 | }
|
---|
| 236 | evl._h_fix=true;
|
---|
| 237 | }
|
---|
| 238 | } else{
|
---|
| 239 |
|
---|
| 240 | if (!evs.length && this._els["dhx_multi_day"][0].style.visibility == "visible")
|
---|
| 241 | h[0]=-1;
|
---|
| 242 | if (evs.length || h[0]==-1){
|
---|
| 243 | //shift days to have space for multiday events
|
---|
| 244 | var childs = evl.parentNode.childNodes;
|
---|
| 245 | var dh = (h[0]+1)*hb+"px";
|
---|
| 246 | for (var i=0; i<childs.length; i++)
|
---|
| 247 | if (this._colsS[i])
|
---|
| 248 | childs[i].style.top=dh;
|
---|
| 249 | var last = this._els["dhx_multi_day"][0];
|
---|
| 250 | last.style.top = "0px";
|
---|
| 251 | last.style.height=dh;
|
---|
| 252 | last.style.visibility=(h[0]==-1?"hidden":"visible");
|
---|
| 253 | last=this._els["dhx_multi_day"][1];
|
---|
| 254 | last.style.height=dh;
|
---|
| 255 | last.style.visibility=(h[0]==-1?"hidden":"visible");
|
---|
| 256 | last.className=h[0]?"dhx_multi_day_icon":"dhx_multi_day_icon_small";
|
---|
| 257 |
|
---|
| 258 | this._dy_shift=(h[0]+1)*hb;
|
---|
| 259 | h[0] = 0;
|
---|
| 260 | }
|
---|
| 261 |
|
---|
| 262 | }
|
---|
| 263 | }
|
---|
| 264 | }
|
---|
| 265 |
|
---|
| 266 | return evs;
|
---|
| 267 | }; |
---|