source: branches/2.2.0.1/calendar/js/dhtmlx/sources/ext/ext_year_view.js @ 4001

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