source: branches/2.2.0.1/calendar/js/dhtmlx/sample/codebase/dhtmlxscheduler_year_view.js @ 4001

Revision 4001, 8.1 KB checked in by rafaelraymundo, 13 years ago (diff)

Ticket #1615 - Componente novo para agenda......................................

Line 
1scheduler.config.year_x = 4;
2scheduler.config.year_y = 3;
3scheduler.config.year_mode_name = "year";
4
5scheduler.templates.year_date =  scheduler.date.date_to_str(scheduler.locale.labels.year_tab+" %Y");
6scheduler.templates.year_month =  scheduler.date.date_to_str("%F");
7scheduler.templates.year_scale_date = scheduler.date.date_to_str("%D");
8scheduler.templates.year_tooltip = function(s,e,ev){
9   return ev.text
10};
11
12
13   
14(function(){
15   
16var is_year_mode = function(){
17   return scheduler._mode == scheduler.config.year_mode_name;
18}
19
20scheduler.dblclick_dhx_month_head=function(e){
21   if (is_year_mode()){
22      var t = (e.target||e.srcElement);
23      if (t.parentNode.className.indexOf("dhx_before")!=-1 || t.parentNode.className.indexOf("dhx_after")!=-1) return false;
24      var start = this.templates.xml_date(t.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("date"));
25      start.setDate(parseInt(t.innerHTML,10));
26      var end = this.date.add(start,1,"day")
27      if (!this.config.readonly && this.config.dblclick_create)
28         this.addEventNow(start.valueOf(), end.valueOf(), e);
29   }
30}   
31
32var chid = scheduler.changeEventId;
33scheduler.changeEventId = function(){
34   chid.apply(this,arguments);
35   if (is_year_mode())
36      this.year_view(true);
37}
38
39
40var old = scheduler.render_data;
41var to_attr = scheduler.date.date_to_str("%Y/%m/%d");
42var from_attr = scheduler.date.str_to_date("%Y/%m/%d");
43scheduler.render_data=function(evs){
44   if (!is_year_mode()) return old.apply(this,arguments);
45   for (var i=0; i<evs.length; i++)
46      this._year_render_event(evs[i]);
47}
48
49var clear = scheduler.clear_view;
50scheduler.clear_view = function(){
51   if (!is_year_mode()) return clear.apply(this,arguments);
52   for (var i=0; i < marked.length; i++) {
53      marked[i].className = "dhx_month_head";
54      marked[i].setAttribute("date","")
55   };
56   marked = [];
57}
58
59
60scheduler.hideToolTip=function(){
61   if (this._tooltip){
62      this._tooltip.style.display = "none";
63      this._tooltip.date = new Date(9999,1,1);
64   }
65   
66}
67scheduler.showToolTip=function(date,pos,e,src){
68   if (this._tooltip){
69     if (this._tooltip.date.valueOf() == date.valueOf()) return;
70     this._tooltip.innerHTML="";
71   } else {
72     var t = this._tooltip = document.createElement("DIV");
73     t.className = "dhx_tooltip";
74     document.body.appendChild(t);
75     t.onclick = scheduler._click.dhx_cal_data;
76     
77   }
78   var evs = this.getEvents(date,this.date.add(date,1,"day"));
79   var html = "";
80   
81   for (var i=0; i<evs.length; i++){
82        html+="<div class='dhx_tooltip_line' event_id='"+evs[i].id+"'>"
83        html+="<div class='dhx_tooltip_date'>"+(evs[i]._timed?this.templates.event_date(evs[i].start_date):"")+"</div>";
84        html+="<div class='dhx_event_icon icon_details'>&nbsp;</div>";
85     html+=this.templates.year_tooltip(evs[i].start_date, evs[i].end_date,evs[i])+"</div>";
86   }
87   
88   this._tooltip.style.display="";   
89   this._tooltip.style.top = "0px";
90   
91         
92   if (document.body.offsetWidth-pos.left-this._tooltip.offsetWidth < 0)
93      this._tooltip.style.left = pos.left-this._tooltip.offsetWidth+"px";
94   else
95      this._tooltip.style.left = pos.left+src.offsetWidth+"px";
96     
97   this._tooltip.date = date;
98   this._tooltip.innerHTML = html;
99   
100   if (document.body.offsetHeight-pos.top-this._tooltip.offsetHeight < 0)
101      this._tooltip.style.top= pos.top-this._tooltip.offsetHeight+src.offsetHeight+"px";
102   else
103      this._tooltip.style.top= pos.top+"px";
104}
105
106scheduler._init_year_tooltip=function(){
107   dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", function(e){
108      if (!is_year_mode()) return;
109     
110      var e = e || event;
111      var src = e.target||e.srcElement;
112      if ((src.className||"").indexOf("dhx_year_event")!=-1)
113         scheduler.showToolTip(from_attr(src.getAttribute("date")),getOffset(src),e,src);
114      else
115         scheduler.hideToolTip();
116   })
117   this._init_year_tooltip=function(){};
118}
119
120scheduler.attachEvent("onSchedulerResize",function(){
121   if (is_year_mode()){
122      this.year_view(true);
123      return false;
124   }
125   return true;
126});
127scheduler._get_year_cell=function(d){
128   //there can be more than 1 year in view
129   //year can start not from January
130   var m = d.getMonth()+12*(d.getFullYear()-this._min_date.getFullYear())-this.week_starts._month;
131   var t = this._els["dhx_cal_data"][0].childNodes[m];
132   var d  = this.week_starts[m]+d.getDate()-1;
133   
134   
135   return t.childNodes[2].firstChild.rows[Math.floor(d/7)].cells[d%7].firstChild;
136}
137
138
139var marked = [];
140scheduler._mark_year_date=function(d){
141   var c = this._get_year_cell(d);
142   c.className = "dhx_month_head dhx_year_event";
143   c.setAttribute("date",to_attr(d))
144   marked.push(c);
145}
146scheduler._unmark_year_date=function(d){
147   this._get_year_cell(d).className = "dhx_month_head";
148}
149scheduler._year_render_event=function(ev){
150   var d = ev.start_date;
151   if (d.valueOf()<this._min_date.valueOf())
152      d = this._min_date;
153   while (d<ev.end_date){
154     this._mark_year_date(d);
155      d = this.date.add(d,1,"day");
156      if (d.valueOf()>=this._max_date.valueOf())
157         return;
158   }
159}
160scheduler.year_view=function(mode){
161   scheduler.xy.nav_height = mode?1:22;
162   scheduler._els["dhx_cal_header"][0].style.display=mode?"none":"";
163   scheduler.set_sizes();
164   scheduler._table_view = mode;
165   if (this._load_mode && this._load()) return;
166   
167   if (mode){
168      scheduler._init_year_tooltip();
169      scheduler._reset_year_scale();   
170      scheduler.render_view_data();
171   } else {
172      scheduler.hideToolTip();
173   }
174}
175scheduler._reset_year_scale = function(){
176   this._cols=[]; this._colsS={};
177   var week_starts = []; //start day of first week in each month
178   var b=this._els["dhx_cal_data"][0];
179   
180   var c = this.config;
181   b.innerHTML="";
182   
183   var dx = Math.floor(parseInt(b.style.width)/c.year_x);
184   var dy = Math.floor(parseInt(b.style.height)/c.year_y);
185   if (dy<190) {
186      dy = 190;
187      dx = Math.floor((parseInt(b.style.width)-scheduler.xy.scroll_width)/c.year_x);
188   }
189   
190   var summ = dx-11;
191   var left = 0;
192   var week_template = document.createElement("div");
193   var dummy_date = this.date.week_start(new Date());
194   for (var i=0; i<7; i++){
195      this._cols[i]=Math.floor(summ/(7-i));
196      this._render_x_header(i,left,dummy_date,week_template);
197      dummy_date = this.date.add(dummy_date,1,"day");
198      summ-=this._cols[i];
199      left+=this._cols[i];
200   }
201   week_template.lastChild.className+=" dhx_scale_bar_last";
202   
203   var sd = this.date[this._mode+"_start"](this.date.copy(this._date));
204   var ssd=sd;
205   
206   for (var i=0; i<c.year_y; i++)
207      for (var j=0; j<c.year_x; j++){
208         var d = document.createElement("DIV");
209         d.style.cssText="position:absolute;";
210         d.setAttribute("date",this.templates.xml_format(sd));
211         d.innerHTML="<div class='dhx_year_month'></div><div class='dhx_year_week'>"+week_template.innerHTML+"</div><div class='dhx_year_body'></div>";
212         d.childNodes[0].innerHTML=this.templates.year_month(sd);
213         
214         var dd = this.date.week_start(sd);
215         this._reset_month_scale(d.childNodes[2],sd,dd);
216         
217         var r=d.childNodes[2].firstChild.rows;
218       for (var k=r.length; k<6; k++) {
219            r[0].parentNode.appendChild(r[0].cloneNode(true));
220            for (var ri=0; ri < r[k].childNodes.length; ri++) {
221               r[k].childNodes[ri].className = "dhx_after";
222            };
223         }
224           
225         
226         b.appendChild(d);
227         
228         var dt = Math.round((dy-190)/2);
229         d.style.marginTop=dt+"px";
230         this.set_xy(d,dx-10,dy-dt-10,dx*j+5,dy*i+5);
231         
232         week_starts[i*c.year_x+j] = (sd.getDay()-(this.config.start_on_monday?1:0)+7)%7;
233         sd = this.date.add(sd,1,"month");
234         
235      }
236   this._els["dhx_cal_date"][0].innerHTML=this.templates[this._mode+"_date"](ssd,sd,this._mode);     
237   this.week_starts = week_starts;
238   week_starts._month = ssd.getMonth();
239   this._min_date = ssd;
240   this._max_date = sd;
241}
242
243})()
Note: See TracBrowser for help on using the repository browser.