source: sandbox/2.3-MailArchiver/calendar/js/dhtmlx/sources/ext/ext_new_week.js @ 6779

Revision 6779, 8.5 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado Expresso(branch 2.3) integrado ao MailArchiver?.

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                                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
163scheduler._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
199scheduler._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};
Note: See TracBrowser for help on using the repository browser.