[4001] | 1 | scheduler._props = {};
|
---|
| 2 | scheduler.createUnitsView=function(name,property,list,size,step){
|
---|
| 3 | if (typeof name == "object"){
|
---|
| 4 | list = name.list;
|
---|
| 5 | property = name.property;
|
---|
| 6 | size = name.size||0;
|
---|
| 7 | step = name.step||1;
|
---|
| 8 | name = name.name;
|
---|
| 9 | }
|
---|
| 10 | scheduler.date[name+"_start"]= scheduler.date.day_start;
|
---|
| 11 | scheduler.templates[name+"_date"] = function(date){
|
---|
| 12 | return scheduler.templates.day_date(date);
|
---|
| 13 | }
|
---|
| 14 | scheduler.templates[name+"_scale_date"] = function(date){
|
---|
| 15 | if (!list.length) return "";
|
---|
| 16 | var index = (scheduler._props[name].position||0)+Math.floor((scheduler._correct_shift(date.valueOf(),1)-scheduler._min_date.valueOf())/(60*60*24*1000));
|
---|
| 17 | if (list[index].css)
|
---|
| 18 | return "<span class='"+list[index].css+"'>"+list[index].label+"</span>";
|
---|
| 19 | else
|
---|
| 20 | return list[index].label;
|
---|
| 21 | }
|
---|
| 22 | scheduler.date["add_"+name]=function(date,inc){ return scheduler.date.add(date,inc,"day"); }
|
---|
| 23 | scheduler.date["get_"+name+"_end"]=function(date){ return scheduler.date.add(date,size||list.length,"day"); }
|
---|
| 24 |
|
---|
| 25 | scheduler._props[name]={map_to:property, options:list, size:size, step:step, position:0 };
|
---|
| 26 |
|
---|
| 27 | scheduler.attachEvent("onOptionsLoad",function(){
|
---|
| 28 | var order = scheduler._props[name].order = {};
|
---|
| 29 | for(var i=0; i<list.length;i++)
|
---|
| 30 | order[list[i].key]=i;
|
---|
| 31 | if (scheduler._date)
|
---|
| 32 | scheduler.setCurrentView(scheduler._date, scheduler._mode);
|
---|
| 33 | });
|
---|
| 34 | scheduler.callEvent("onOptionsLoad",[]);
|
---|
| 35 | };
|
---|
| 36 | scheduler.scrollUnit=function(step){
|
---|
| 37 | var pr = scheduler._props[this._mode];
|
---|
| 38 | if (pr){
|
---|
| 39 | pr.position=Math.min(Math.max(0,pr.position+step),pr.options.length-pr.size);
|
---|
| 40 | this.update_view();
|
---|
| 41 | }
|
---|
| 42 | };
|
---|
| 43 |
|
---|
| 44 | (function(){
|
---|
| 45 | var fix_und=function(pr,ev){
|
---|
| 46 | if (pr && typeof pr.order[ev[pr.map_to]] == "undefined"){
|
---|
| 47 | var s = scheduler;
|
---|
| 48 | var dx = 24*60*60*1000;
|
---|
| 49 | var ind = Math.floor((ev.end_date - s._min_date)/dx);
|
---|
| 50 | //ev.end_date = new Date(s.date.time_part(ev.end_date)*1000+s._min_date.valueOf());
|
---|
| 51 | //ev.start_date = new Date(s.date.time_part(ev.start_date)*1000+s._min_date.valueOf());
|
---|
| 52 | ev[pr.map_to] = pr.options[Math.min(ind+pr.position,pr.options.length-1)].key;
|
---|
| 53 | return true;
|
---|
| 54 | }
|
---|
| 55 | }
|
---|
| 56 | var t = scheduler._reset_scale;
|
---|
| 57 |
|
---|
| 58 | var oldive = scheduler.is_visible_events;
|
---|
| 59 | scheduler.is_visible_events = function(e){
|
---|
| 60 | var res = oldive.apply(this,arguments);
|
---|
| 61 | if (res){
|
---|
| 62 | var pr = scheduler._props[this._mode];
|
---|
| 63 | if (pr && pr.size){
|
---|
| 64 | var val = pr.order[e[pr.map_to]];
|
---|
| 65 | if (val < pr.position || val >= pr.size+pr.position )
|
---|
| 66 | return false;
|
---|
| 67 | }
|
---|
| 68 | }
|
---|
| 69 | return res;
|
---|
| 70 | }
|
---|
| 71 |
|
---|
| 72 | scheduler._reset_scale = function(){
|
---|
| 73 | var pr = scheduler._props[this._mode];
|
---|
| 74 | var ret = t.apply(this,arguments);
|
---|
| 75 | if (pr){
|
---|
| 76 | this._max_date=this.date.add(this._min_date,1,"day");
|
---|
| 77 |
|
---|
| 78 | var d = this._els["dhx_cal_data"][0].childNodes;
|
---|
| 79 | for (var i=0; i < d.length; i++)
|
---|
| 80 | d[i].className = d[i].className.replace("_now",""); //clear now class
|
---|
| 81 |
|
---|
| 82 | if (pr.size && pr.size < pr.options.length){
|
---|
| 83 |
|
---|
| 84 | var h = this._els["dhx_cal_header"][0];
|
---|
| 85 | var arrow = document.createElement("DIV");
|
---|
| 86 | if (pr.position){
|
---|
| 87 | arrow.className = "dhx_cal_prev_button";
|
---|
| 88 | arrow.style.cssText="left:1px;top:2px;position:absolute;"
|
---|
| 89 | arrow.innerHTML = " "
|
---|
| 90 | h.firstChild.appendChild(arrow);
|
---|
| 91 | arrow.onclick=function(){
|
---|
| 92 | scheduler.scrollUnit(pr.step*-1);
|
---|
| 93 | }
|
---|
| 94 | }
|
---|
| 95 | if (pr.position+pr.size<pr.options.length){
|
---|
| 96 | arrow = document.createElement("DIV");
|
---|
| 97 | arrow.className = "dhx_cal_next_button";
|
---|
| 98 | arrow.style.cssText="left:auto; right:0px;top:2px;position:absolute;"
|
---|
| 99 | arrow.innerHTML = " "
|
---|
| 100 | h.lastChild.appendChild(arrow);
|
---|
| 101 | arrow.onclick=function(){
|
---|
| 102 | scheduler.scrollUnit(pr.step);
|
---|
| 103 | }
|
---|
| 104 | }
|
---|
| 105 | }
|
---|
| 106 | }
|
---|
| 107 | return ret;
|
---|
| 108 |
|
---|
| 109 | }
|
---|
| 110 | var r = scheduler._get_event_sday;
|
---|
| 111 | scheduler._get_event_sday=function(ev){
|
---|
| 112 | var pr = scheduler._props[this._mode];
|
---|
| 113 | if (pr){
|
---|
| 114 | fix_und(pr,ev);
|
---|
| 115 | return pr.order[ev[pr.map_to]]-pr.position;
|
---|
| 116 | }
|
---|
| 117 | return r.call(this,ev);
|
---|
| 118 | }
|
---|
| 119 | var l = scheduler.locate_holder_day;
|
---|
| 120 | scheduler.locate_holder_day=function(a,b,ev){
|
---|
| 121 | var pr = scheduler._props[this._mode];
|
---|
| 122 | if (pr){
|
---|
| 123 | fix_und(pr,ev);
|
---|
| 124 | return pr.order[ev[pr.map_to]]*1+(b?1:0)-pr.position;
|
---|
| 125 | }
|
---|
| 126 | return l.apply(this,arguments);
|
---|
| 127 | }
|
---|
| 128 | var p = scheduler._mouse_coords;
|
---|
| 129 | scheduler._mouse_coords=function(){
|
---|
| 130 | var pr = scheduler._props[this._mode];
|
---|
| 131 | var pos=p.apply(this,arguments);
|
---|
| 132 | if (pr){
|
---|
| 133 | var ev = this._drag_event;
|
---|
| 134 | if (this._drag_id){
|
---|
| 135 | ev = this.getEvent(this._drag_id);
|
---|
| 136 | this._drag_event._dhx_changed = true;
|
---|
| 137 | }
|
---|
| 138 | var unit_ind = Math.min(pos.x+pr.position,pr.options.length-1);
|
---|
| 139 | ev[pr.map_to]=pr.options[unit_ind].key;
|
---|
| 140 | pos.x = unit_ind/10000000;
|
---|
| 141 | }
|
---|
| 142 | return pos;
|
---|
| 143 | }
|
---|
| 144 | var o = scheduler._time_order;
|
---|
| 145 | scheduler._time_order = function(evs){
|
---|
| 146 | var pr = scheduler._props[this._mode];
|
---|
| 147 | if (pr){
|
---|
| 148 | evs.sort(function(a,b){
|
---|
| 149 | return pr.order[a[pr.map_to]]>pr.order[b[pr.map_to]]?1:-1;
|
---|
| 150 | });
|
---|
| 151 | } else
|
---|
| 152 | o.apply(this,arguments);
|
---|
| 153 | }
|
---|
| 154 |
|
---|
| 155 | scheduler.attachEvent("onEventAdded",function(id,ev){
|
---|
| 156 | if (this._loading) return true;
|
---|
| 157 | for (var a in scheduler._props){
|
---|
| 158 | var pr = scheduler._props[a];
|
---|
| 159 | if (typeof ev[pr.map_to] == "undefined")
|
---|
| 160 | ev[pr.map_to] = pr.options[0].key;
|
---|
| 161 | }
|
---|
| 162 | return true;
|
---|
| 163 | })
|
---|
| 164 | scheduler.attachEvent("onEventCreated",function(id,n_ev){
|
---|
| 165 | var pr = scheduler._props[this._mode];
|
---|
| 166 | if (pr){
|
---|
| 167 | var ev = this.getEvent(id);
|
---|
| 168 | this._mouse_coords(n_ev);
|
---|
| 169 | fix_und(pr,ev);
|
---|
| 170 | this.event_updated(ev);
|
---|
| 171 | }
|
---|
| 172 | return true;
|
---|
| 173 | })
|
---|
| 174 |
|
---|
| 175 | })(); |
---|