source: branches/2.2.0.1/calendar/js/dhtmlx/sources/ext/ext_new_week.js @ 4098

Revision 4098, 7.6 KB checked in by brunocosta, 13 years ago (diff)

Ticket #1745 - Ajustes na interface das novas visões semanal e mensal da agenda.

Line 
1scheduler._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
97scheduler._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                                if (sd.valueOf()==cd.valueOf())
123                                        cls='dhx_now';
124                                html+=" class='"+cls+" "+this.templates.month_date_class(sd,cd)+"' ";
125                                html+="><div class='dhx_month_head'>"+this.templates.week_scale_date(sd)+"</div><div class='dhx_month_body' "+tdcss[j]+"></div></td>"
126                                sd=this.date.add(sd,1,"day");
127                                if(i==3)
128                                    break;
129                        }
130                html+="</tr>";
131                h[i] = cellheight;
132                cellheight+=this._colsS.height;
133        }
134        html+="</table>";
135        this._max_date=sd;
136
137        b.innerHTML=html;
138        return sd;
139}
140
141scheduler._mouse_coords=function(ev){
142        var pos;
143        var b=document.body;
144        var d = document.documentElement;
145        if(ev.pageX || ev.pageY)
146            pos={x:ev.pageX, y:ev.pageY};
147        else pos={
148            x:ev.clientX + (b.scrollLeft||d.scrollLeft||0) - b.clientLeft,
149            y:ev.clientY + (b.scrollTop||d.scrollTop||0) - b.clientTop
150        }
151
152        //apply layout
153        pos.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);
154        pos.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els["dhx_cal_data"][0].scrollTop;
155        pos.ev = ev;
156
157        var handler = this["mouse_"+this._mode];
158        if (handler)
159                return handler.call(this,pos);
160
161        //transform to date
162        if (!this._table_view){
163                pos.x=Math.max(0,Math.ceil(pos.x/this._cols[0])-1);
164                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);
165        } else {
166                var dy=0;
167                for (dy=1; dy < this._colsS.heights.length; dy++)
168                        if (this._colsS.heights[dy]>pos.y) break;
169                this._mode == 'week'?n=2:n=7;
170                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;
171                pos.x=0;
172        }
173
174        return pos;
175}
176
177scheduler._pre_render_events=function(evs,hold){
178        var hb = this.xy.bar_height;
179        var h_old = this._colsS.heights;
180        var h=this._colsS.heights=[0,0,0,0,0,0,0];
181
182        if (!this._table_view) evs=this._pre_render_events_line(evs,hold); //ignore long events for now
183        else evs=this._pre_render_events_table(evs,hold);
184
185        if (this._table_view){
186                if (hold)
187                        this._colsS.heights = h_old;
188                else {
189                        var evl = this._els["dhx_cal_data"][0].firstChild;
190                        if (evl.rows){
191                                for (var i=0; i<evl.rows.length; i++){
192                                        h[i]++;
193                                        if ((h[i])*hb > this._colsS.height-22){ // 22 - height of cell's header
194                                                //we have overflow, update heights
195                                                var cells = evl.rows[i].cells;
196                                                for (var j=0; j < cells.length; j++) {
197                                                        cells[j].childNodes[1].style.height = h[i]*hb+"px";
198                                                }
199                                                h[i]=(h[i-1]||0)+cells[0].offsetHeight;
200                                        }
201                                        h[i]=(h[i-1]||0)+evl.rows[i].cells[0].offsetHeight;
202                                }
203                                h.unshift(0);
204                                if (evl.parentNode.offsetHeight<evl.parentNode.scrollHeight && !evl._h_fix){
205                                        //we have v-scroll, decrease last day cell
206                                        for (var i=0; i<evl.rows.length; i++){
207                                            if(this._mode=='month'){
208                                                var cell = evl.rows[i].cells[6].childNodes[0];
209                                                var w = cell.offsetWidth-scheduler.xy.scroll_width+"px";
210                                                cell.style.width = w;
211                                                cell.nextSibling.style.width = w;
212                                            }
213                                        }
214                                        evl._h_fix=true;
215                                }
216                        } else{
217
218                                if (!evs.length && this._els["dhx_multi_day"][0].style.visibility == "visible")
219                                        h[0]=-1;
220                                if (evs.length || h[0]==-1){
221                                        //shift days to have space for multiday events
222                                        var childs = evl.parentNode.childNodes;
223                                        var dh = (h[0]+1)*hb+"px";
224                                        for (var i=0; i<childs.length; i++)
225                                                if (this._colsS[i])
226                                                        childs[i].style.top=dh;
227                                        var last = this._els["dhx_multi_day"][0];
228                                        last.style.top = "0px";
229                                        last.style.height=dh;
230                                        last.style.visibility=(h[0]==-1?"hidden":"visible");
231                                        last=this._els["dhx_multi_day"][1];
232                                        last.style.height=dh;
233                                        last.style.visibility=(h[0]==-1?"hidden":"visible");
234                                        last.className=h[0]?"dhx_multi_day_icon":"dhx_multi_day_icon_small";
235
236                                        this._dy_shift=(h[0]+1)*hb;
237                                        h[0] = 0;
238                                }
239
240                        }
241                }
242        }
243
244        return evs;
245};
Note: See TracBrowser for help on using the repository browser.