[4001] | 1 | scheduler.config.year_x = 4;
|
---|
| 2 | scheduler.config.year_y = 3;
|
---|
| 3 | scheduler.config.year_mode_name = "year";
|
---|
| 4 | scheduler.xy.year_top = 0;
|
---|
| 5 |
|
---|
| 6 | scheduler.templates.year_date = function(date){
|
---|
| 7 | return scheduler.date.date_to_str(scheduler.locale.labels.year_tab+" %Y")(date);
|
---|
| 8 | };
|
---|
| 9 | scheduler.templates.year_month = scheduler.date.date_to_str("%F");
|
---|
| 10 | scheduler.templates.year_scale_date = scheduler.date.date_to_str("%D");
|
---|
| 11 | scheduler.templates.year_tooltip = function(s,e,ev){
|
---|
| 12 | return ev.text
|
---|
| 13 | };
|
---|
| 14 |
|
---|
| 15 |
|
---|
| 16 |
|
---|
| 17 | (function(){
|
---|
| 18 |
|
---|
| 19 | var is_year_mode = function(){
|
---|
| 20 | return scheduler._mode == scheduler.config.year_mode_name;
|
---|
| 21 | }
|
---|
| 22 |
|
---|
| 23 | scheduler.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 |
|
---|
| 35 | var chid = scheduler.changeEventId;
|
---|
| 36 | scheduler.changeEventId = function(){
|
---|
| 37 | chid.apply(this,arguments);
|
---|
| 38 | if (is_year_mode())
|
---|
| 39 | this.year_view(true);
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 |
|
---|
| 43 | var old = scheduler.render_data;
|
---|
| 44 | var to_attr = scheduler.date.date_to_str("%Y/%m/%d");
|
---|
| 45 | var from_attr = scheduler.date.str_to_date("%Y/%m/%d");
|
---|
| 46 | scheduler.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 |
|
---|
| 52 | var clear = scheduler.clear_view;
|
---|
| 53 | scheduler.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 |
|
---|
| 63 | scheduler.hideToolTip=function(){
|
---|
| 64 | if (this._tooltip){
|
---|
| 65 | this._tooltip.style.display = "none";
|
---|
| 66 | this._tooltip.date = new Date(9999,1,1);
|
---|
| 67 | }
|
---|
| 68 |
|
---|
| 69 | }
|
---|
| 70 | scheduler.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'> </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 |
|
---|
| 109 | scheduler._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 |
|
---|
| 123 | scheduler.attachEvent("onSchedulerResize",function(){
|
---|
| 124 | if (is_year_mode()){
|
---|
| 125 | this.year_view(true);
|
---|
| 126 | return false;
|
---|
| 127 | }
|
---|
| 128 | return true;
|
---|
| 129 | });
|
---|
| 130 | scheduler._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 |
|
---|
| 142 | var marked = [];
|
---|
| 143 | scheduler._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 | }
|
---|
| 149 | scheduler._unmark_year_date=function(d){
|
---|
| 150 | this._get_year_cell(d).className = "dhx_month_head";
|
---|
| 151 | }
|
---|
| 152 | scheduler._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 | }
|
---|
| 165 | scheduler.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 | }
|
---|
| 189 | scheduler._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 | })();
|
---|