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 | }; |
---|