1 | scheduler.form_blocks={
|
---|
2 | textarea:{
|
---|
3 | render:function(sns){
|
---|
4 | var height=(sns.height||"130")+"px";
|
---|
5 | return "<div class='dhx_cal_ltext' style='height:"+height+";'><textarea></textarea></div>";
|
---|
6 | },
|
---|
7 | set_value:function(node,value,ev){
|
---|
8 | node.firstChild.value=value||"";
|
---|
9 | },
|
---|
10 | get_value:function(node,ev){
|
---|
11 | return node.firstChild.value;
|
---|
12 | },
|
---|
13 | focus:function(node){
|
---|
14 | var a=node.firstChild; a.select(); a.focus();
|
---|
15 | }
|
---|
16 | },
|
---|
17 | select:{
|
---|
18 | render:function(sns){
|
---|
19 | var height=(sns.height||"23")+"px";
|
---|
20 | var html="<div class='dhx_cal_ltext' style='height:"+height+";'><select style='width:552px;'>";
|
---|
21 | for (var i=0; i < sns.options.length; i++)
|
---|
22 | html+="<option value='"+sns.options[i].key+"'>"+sns.options[i].label+"</option>";
|
---|
23 | html+="</select></div>";
|
---|
24 | return html;
|
---|
25 | },
|
---|
26 | set_value:function(node,value,ev){
|
---|
27 | if (typeof value == "undefined")
|
---|
28 | value = (node.firstChild.options[0]||{}).value;
|
---|
29 | node.firstChild.value=value||"";
|
---|
30 | },
|
---|
31 | get_value:function(node,ev){
|
---|
32 | return node.firstChild.value;
|
---|
33 | },
|
---|
34 | focus:function(node){
|
---|
35 | var a=node.firstChild; if (a.select) a.select(); a.focus();
|
---|
36 | }
|
---|
37 | },
|
---|
38 | time:{
|
---|
39 | render:function(){
|
---|
40 | //hours
|
---|
41 | var cfg = scheduler.config;
|
---|
42 | var dt = this.date.date_part(new Date());
|
---|
43 | var last = 24*60, first = 0;
|
---|
44 | if(scheduler.config.limit_time_select){
|
---|
45 | last = 60*cfg.last_hour+1;
|
---|
46 | first = 60*cfg.first_hour;
|
---|
47 | dt.setHours(cfg.first_hour);
|
---|
48 | }
|
---|
49 |
|
---|
50 | var html="<select>";
|
---|
51 | for (var i=first; i<last; i+=this.config.time_step*1){
|
---|
52 | var time=this.templates.time_picker(dt);
|
---|
53 | html+="<option value='"+i+"'>"+time+"</option>";
|
---|
54 | dt=this.date.add(dt,this.config.time_step,"minute");
|
---|
55 | }
|
---|
56 |
|
---|
57 | //days
|
---|
58 | html+="</select> <select>";
|
---|
59 | for (var i=1; i < 32; i++)
|
---|
60 | html+="<option value='"+i+"'>"+i+"</option>";
|
---|
61 |
|
---|
62 | //month
|
---|
63 | html+="</select> <select>";
|
---|
64 | for (var i=0; i < 12; i++)
|
---|
65 | html+="<option value='"+i+"'>"+this.locale.date.month_full[i]+"</option>";
|
---|
66 |
|
---|
67 | //year
|
---|
68 | html+="</select> <select>";
|
---|
69 | dt = dt.getFullYear()-5; //maybe take from config?
|
---|
70 | for (var i=0; i < 10; i++)
|
---|
71 | html+="<option value='"+(dt+i)+"'>"+(dt+i)+"</option>";
|
---|
72 | html+="</select> ";
|
---|
73 |
|
---|
74 | return "<div style='height:30px; padding-top:0px; font-size:inherit;' class='dhx_cal_lsection dhx_section_time'>"+html+"<span style='font-weight:normal; font-size:10pt;'> – </span>"+html+"</div>";
|
---|
75 |
|
---|
76 | },
|
---|
77 | set_value:function(node,value,ev){
|
---|
78 |
|
---|
79 | var s=node.getElementsByTagName("select");
|
---|
80 |
|
---|
81 | if(scheduler.config.full_day) {
|
---|
82 | if (!node._full_day){
|
---|
83 | node.previousSibling.innerHTML+="<div class='dhx_fullday_checkbox'><label><input type='checkbox' name='full_day' value='true'> "+scheduler.locale.labels.full_day+" </label></input></div>";
|
---|
84 | node._full_day=true;
|
---|
85 | }
|
---|
86 | var input=node.previousSibling.getElementsByTagName("input")[0];
|
---|
87 | var isFulldayEvent = (scheduler.date.time_part(ev.start_date)==0 && scheduler.date.time_part(ev.end_date)==0 && ev.end_date.valueOf()-ev.start_date.valueOf() < 2*24*60*60*1000);
|
---|
88 | input.checked = isFulldayEvent;
|
---|
89 |
|
---|
90 | for(var k in s)
|
---|
91 | s[k].disabled=input.checked;
|
---|
92 |
|
---|
93 | input.onclick = function(){
|
---|
94 | if(input.checked) {
|
---|
95 | var start_date = new Date(ev.start_date);
|
---|
96 | var end_date = new Date(ev.end_date);
|
---|
97 |
|
---|
98 | scheduler.date.date_part(start_date);
|
---|
99 | end_date = scheduler.date.add(start_date, 1, "day")
|
---|
100 | }
|
---|
101 | for(var i in s)
|
---|
102 | s[i].disabled=input.checked;
|
---|
103 |
|
---|
104 | _fill_lightbox_select(s,0,start_date||ev.start_date);
|
---|
105 | _fill_lightbox_select(s,4,end_date||ev.end_date);
|
---|
106 | }
|
---|
107 | }
|
---|
108 |
|
---|
109 | if(scheduler.config.auto_end_date && scheduler.config.event_duration) {
|
---|
110 | function _update_lightbox_select() {
|
---|
111 | ev.start_date=new Date(s[3].value,s[2].value,s[1].value,0,s[0].value);
|
---|
112 | ev.end_date.setTime(ev.start_date.getTime() + (scheduler.config.event_duration * 60 * 1000));
|
---|
113 | _fill_lightbox_select(s,4,ev.end_date);
|
---|
114 | }
|
---|
115 | for(var i=0; i<4; i++) {
|
---|
116 | s[i].onchange = _update_lightbox_select;
|
---|
117 | }
|
---|
118 | }
|
---|
119 |
|
---|
120 | function _fill_lightbox_select(s,i,d){
|
---|
121 | s[i+0].value=Math.round((d.getHours()*60+d.getMinutes())/scheduler.config.time_step)*scheduler.config.time_step;
|
---|
122 | s[i+1].value=d.getDate();
|
---|
123 | s[i+2].value=d.getMonth();
|
---|
124 | s[i+3].value=d.getFullYear();
|
---|
125 | }
|
---|
126 |
|
---|
127 | _fill_lightbox_select(s,0,ev.start_date);
|
---|
128 | _fill_lightbox_select(s,4,ev.end_date);
|
---|
129 | },
|
---|
130 | get_value:function(node,ev){
|
---|
131 | s=node.getElementsByTagName("select");
|
---|
132 | ev.start_date=new Date(s[3].value,s[2].value,s[1].value,0,s[0].value);
|
---|
133 | ev.end_date=new Date(s[7].value,s[6].value,s[5].value,0,s[4].value);
|
---|
134 | if (ev.end_date<=ev.start_date)
|
---|
135 | ev.end_date=scheduler.date.add(ev.start_date,scheduler.config.time_step,"minute");
|
---|
136 | },
|
---|
137 | focus:function(node){
|
---|
138 | node.getElementsByTagName("select")[0].focus();
|
---|
139 | }
|
---|
140 | }
|
---|
141 | }
|
---|
142 | scheduler.showCover=function(box){
|
---|
143 | this.show_cover();
|
---|
144 | if (box){
|
---|
145 | box.style.display="block";
|
---|
146 | var pos = getOffset(this._obj);
|
---|
147 | box.style.top=Math.round(pos.top+(this._obj.offsetHeight-box.offsetHeight)/2)+"px";
|
---|
148 | box.style.left=Math.round(pos.left+(this._obj.offsetWidth-box.offsetWidth)/2)+"px";
|
---|
149 | }
|
---|
150 | }
|
---|
151 | scheduler.showLightbox=function(id){
|
---|
152 | if (!id) return;
|
---|
153 | if (!this.callEvent("onBeforeLightbox",[id])) return;
|
---|
154 | var box = this._get_lightbox();
|
---|
155 | this.showCover(box);
|
---|
156 | this._fill_lightbox(id,box);
|
---|
157 | this.callEvent("onLightbox",[id]);
|
---|
158 | }
|
---|
159 | scheduler._fill_lightbox=function(id,box){
|
---|
160 | var ev=this.getEvent(id);
|
---|
161 | var s=box.getElementsByTagName("span");
|
---|
162 | if (scheduler.templates.lightbox_header){
|
---|
163 | s[1].innerHTML="";
|
---|
164 | s[2].innerHTML=scheduler.templates.lightbox_header(ev.start_date,ev.end_date,ev);
|
---|
165 | } else {
|
---|
166 | s[1].innerHTML=this.templates.event_header(ev.start_date,ev.end_date,ev);
|
---|
167 | s[2].innerHTML=(this.templates.event_bar_text(ev.start_date,ev.end_date,ev)||"").substr(0,70); //IE6 fix
|
---|
168 | }
|
---|
169 |
|
---|
170 |
|
---|
171 | var sns = this.config.lightbox.sections;
|
---|
172 | for (var i=0; i < sns.length; i++) {
|
---|
173 | var node=document.getElementById(sns[i].id).nextSibling;
|
---|
174 | var block=this.form_blocks[sns[i].type];
|
---|
175 | block.set_value.call(this,node,ev[sns[i].map_to],ev, sns[i])
|
---|
176 | if (sns[i].focus)
|
---|
177 | block.focus.call(this,node);
|
---|
178 | };
|
---|
179 |
|
---|
180 | scheduler._lightbox_id=id;
|
---|
181 | }
|
---|
182 | scheduler._lightbox_out=function(ev){
|
---|
183 | var sns = this.config.lightbox.sections;
|
---|
184 | for (var i=0; i < sns.length; i++) {
|
---|
185 | var node=document.getElementById(sns[i].id).nextSibling;
|
---|
186 | var block=this.form_blocks[sns[i].type];
|
---|
187 | var res=block.get_value.call(this,node,ev, sns[i]);
|
---|
188 | if (sns[i].map_to!="auto")
|
---|
189 | ev[sns[i].map_to]=res;
|
---|
190 | }
|
---|
191 | return ev;
|
---|
192 | }
|
---|
193 | scheduler._empty_lightbox=function(){
|
---|
194 | var id=scheduler._lightbox_id;
|
---|
195 | var ev=this.getEvent(id);
|
---|
196 | var box=this._get_lightbox();
|
---|
197 |
|
---|
198 | this._lightbox_out(ev);
|
---|
199 |
|
---|
200 | ev._timed=this.is_one_day_event(ev);
|
---|
201 | this.setEvent(ev.id,ev);
|
---|
202 | this._edit_stop_event(ev,true)
|
---|
203 | this.render_view_data();
|
---|
204 | }
|
---|
205 | scheduler.hide_lightbox=function(id){
|
---|
206 | this.hideCover(this._get_lightbox());
|
---|
207 | this._lightbox_id=null;
|
---|
208 | this.callEvent("onAfterLightbox",[]);
|
---|
209 | }
|
---|
210 | scheduler.hideCover=function(box){
|
---|
211 | if (box) box.style.display="none";
|
---|
212 | this.hide_cover();
|
---|
213 | }
|
---|
214 | scheduler.hide_cover=function(){
|
---|
215 | if (this._cover)
|
---|
216 | this._cover.parentNode.removeChild(this._cover);
|
---|
217 | this._cover=null;
|
---|
218 | }
|
---|
219 | scheduler.show_cover=function(){
|
---|
220 | this._cover=document.createElement("DIV");
|
---|
221 | this._cover.className="dhx_cal_cover";
|
---|
222 | document.body.appendChild(this._cover);
|
---|
223 | }
|
---|
224 | scheduler.save_lightbox=function(){
|
---|
225 | if (this.checkEvent("onEventSave") && !this.callEvent("onEventSave",[this._lightbox_id,this._lightbox_out({ id: this._lightbox_id}), this._new_event]))
|
---|
226 | return;
|
---|
227 | this._empty_lightbox()
|
---|
228 | this.hide_lightbox();
|
---|
229 | };
|
---|
230 | scheduler.startLightbox = function(id, box){
|
---|
231 | this._lightbox_id=id;
|
---|
232 | this.showCover(box);
|
---|
233 | }
|
---|
234 | scheduler.endLightbox = function(mode, box){
|
---|
235 | this._edit_stop_event(scheduler.getEvent(this._lightbox_id),mode);
|
---|
236 | if (mode)
|
---|
237 | scheduler.render_view_data();
|
---|
238 | this.hideCover(box);
|
---|
239 | };
|
---|
240 | scheduler.resetLightbox = function(){
|
---|
241 | scheduler._lightbox = null;
|
---|
242 | };
|
---|
243 | scheduler.cancel_lightbox=function(){
|
---|
244 | this.callEvent("onEventCancel",[this._lightbox_id, this._new_event]);
|
---|
245 | this.endLightbox(false);
|
---|
246 | this.hide_lightbox();
|
---|
247 | };
|
---|
248 | scheduler._init_lightbox_events=function(){
|
---|
249 | this._get_lightbox().onclick=function(e){
|
---|
250 | var src=e?e.target:event.srcElement;
|
---|
251 | if (!src.className) src=src.previousSibling;
|
---|
252 | if (src && src.className)
|
---|
253 | switch(src.className){
|
---|
254 | case "dhx_save_btn":
|
---|
255 | scheduler.save_lightbox();
|
---|
256 | break;
|
---|
257 | case "dhx_delete_btn":
|
---|
258 | var c=scheduler.locale.labels.confirm_deleting;
|
---|
259 | if (!c||confirm(c)) {
|
---|
260 | scheduler.deleteEvent(scheduler._lightbox_id);
|
---|
261 | scheduler._new_event = null; //clear flag, if it was unsaved event
|
---|
262 | scheduler.hide_lightbox();
|
---|
263 | }
|
---|
264 | break;
|
---|
265 | case "dhx_cancel_btn":
|
---|
266 | scheduler.cancel_lightbox();
|
---|
267 | break;
|
---|
268 |
|
---|
269 | default:
|
---|
270 | if (src.className.indexOf("dhx_custom_button_")!=-1){
|
---|
271 | var index = src.parentNode.getAttribute("index");
|
---|
272 | var block=scheduler.form_blocks[scheduler.config.lightbox.sections[index].type];
|
---|
273 | var sec = src.parentNode.parentNode;
|
---|
274 | block.button_click(index,src,sec,sec.nextSibling);
|
---|
275 | }
|
---|
276 | }
|
---|
277 | };
|
---|
278 | this._get_lightbox().onkeypress=function(e){
|
---|
279 | switch((e||event).keyCode){
|
---|
280 | case scheduler.keys.edit_save:
|
---|
281 | if ((e||event).shiftKey) return;
|
---|
282 | scheduler.save_lightbox();
|
---|
283 | break;
|
---|
284 | case scheduler.keys.edit_cancel:
|
---|
285 | scheduler.cancel_lightbox();
|
---|
286 | break;
|
---|
287 | }
|
---|
288 | }
|
---|
289 | }
|
---|
290 | scheduler.setLightboxSize=function(){
|
---|
291 | var d = this._lightbox;
|
---|
292 | if (!d) return;
|
---|
293 |
|
---|
294 | var con = d.childNodes[1];
|
---|
295 | con.style.height="0px";
|
---|
296 | con.style.height=con.scrollHeight+"px";
|
---|
297 | d.style.height=con.scrollHeight+50+"px";
|
---|
298 | con.style.height=con.scrollHeight+"px"; //it is incredible , how ugly IE can be
|
---|
299 | }
|
---|
300 |
|
---|
301 | scheduler._get_lightbox=function(){
|
---|
302 | if (!this._lightbox){
|
---|
303 | var d=document.createElement("DIV");
|
---|
304 | d.className="dhx_cal_light";
|
---|
305 | if (/msie|MSIE 6/.test(navigator.userAgent))
|
---|
306 | d.className+=" dhx_ie6";
|
---|
307 | d.style.visibility="hidden";
|
---|
308 | d.innerHTML=this._lightbox_template;
|
---|
309 | document.body.insertBefore(d,document.body.firstChild);
|
---|
310 | this._lightbox=d;
|
---|
311 |
|
---|
312 | var sns=this.config.lightbox.sections;
|
---|
313 | var html="";
|
---|
314 | for (var i=0; i < sns.length; i++) {
|
---|
315 | var block=this.form_blocks[sns[i].type];
|
---|
316 | if (!block) continue; //ignore incorrect blocks
|
---|
317 | sns[i].id="area_"+this.uid();
|
---|
318 | var button = "";
|
---|
319 | if (sns[i].button) button = "<div style='float:right;' class='dhx_custom_button' index='"+i+"'><div class='dhx_custom_button_"+sns[i].name+"'></div><div>"+this.locale.labels["button_"+sns[i].button]+"</div></div>";
|
---|
320 | html+="<div id='"+sns[i].id+"' class='dhx_cal_lsection'>"+button+this.locale.labels["section_"+sns[i].name]+"</div>"+block.render.call(this,sns[i]);
|
---|
321 | };
|
---|
322 |
|
---|
323 |
|
---|
324 | //localization
|
---|
325 | var ds=d.getElementsByTagName("div");
|
---|
326 | ds[4].innerHTML=scheduler.locale.labels.icon_save;
|
---|
327 | ds[7].innerHTML=scheduler.locale.labels.icon_cancel;
|
---|
328 | ds[10].innerHTML=scheduler.locale.labels.icon_delete;
|
---|
329 | //sections
|
---|
330 | ds[1].innerHTML=html;
|
---|
331 | //sizes
|
---|
332 | this.setLightboxSize();
|
---|
333 |
|
---|
334 | this._init_lightbox_events(this);
|
---|
335 | d.style.display="none";
|
---|
336 | d.style.visibility="visible";
|
---|
337 | }
|
---|
338 | return this._lightbox;
|
---|
339 | }
|
---|
340 | scheduler._lightbox_template="<div class='dhx_cal_ltitle'><span class='dhx_mark'> </span><span class='dhx_time'></span><span class='dhx_title'></span></div><div class='dhx_cal_larea'></div><div class='dhx_btn_set'><div class='dhx_save_btn'></div><div> </div></div><div class='dhx_btn_set'><div class='dhx_cancel_btn'></div><div> </div></div><div class='dhx_btn_set' style='float:right;'><div class='dhx_delete_btn'></div><div> </div></div>"; |
---|