diff options
author | AlexKlimenkov <shurick.klimenkov@gmail.com> | 2014-06-10 20:50:30 +0300 |
---|---|---|
committer | AlexKlimenkov <shurick.klimenkov@gmail.com> | 2014-06-10 20:50:30 +0300 |
commit | b5a0589955460a44c5428c4cb5429fcfce265d23 (patch) | |
tree | 87db58400a3e036de646fb630cbb358beeac3bc1 /codebase/sources/ext | |
parent | e2aaaef8540fabd0b5200a4959c269d6f1ae352e (diff) | |
download | scheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.zip scheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.tar.gz scheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.tar.bz2 |
[update] version 4.1.0
Diffstat (limited to 'codebase/sources/ext')
70 files changed, 9017 insertions, 0 deletions
diff --git a/codebase/sources/ext/dhtmlxscheduler_active_links.js b/codebase/sources/ext/dhtmlxscheduler_active_links.js new file mode 100644 index 0000000..f8a55b9 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_active_links.js @@ -0,0 +1,43 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.active_link_view = "day"; +scheduler._active_link_click = function(e){ + var start = e.target || event.srcElement; + var to = start.getAttribute("jump_to"); + var s_d = scheduler.date.str_to_date(scheduler.config.api_date); + if (to) { + scheduler.setCurrentView(s_d(to), scheduler.config.active_link_view); + if (e && e.preventDefault) + e.preventDefault(); + return false; + } +}; +scheduler.attachEvent("onTemplatesReady", function() { + var do_wrapper = function(key, fullname){ + fullname = fullname || (key+"_scale_date"); + + if(!scheduler.templates['_active_links_old_'+ fullname]){ + scheduler.templates['_active_links_old_'+ fullname] = scheduler.templates[fullname]; + } + var week_x = scheduler.templates['_active_links_old_'+ fullname]; + var d_s = scheduler.date.date_to_str(scheduler.config.api_date); + scheduler.templates[fullname] = function(date) { + return "<a jump_to='" + d_s(date) + "' href='#'>" + week_x(date) + "</a>"; + }; + }; + + do_wrapper("week"); + do_wrapper("", "month_day"); + if (this.matrix){ + for (var key in this.matrix) + do_wrapper(key); + } + + this._detachDomEvent(this._obj, "click", scheduler._active_link_click); + dhtmlxEvent(this._obj, "click", scheduler._active_link_click); +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_active_links.js.map b/codebase/sources/ext/dhtmlxscheduler_active_links.js.map new file mode 100644 index 0000000..d1bc8a7 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_active_links.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_active_links.js.map","sources":["dhtmlxscheduler_active_links.js"],"names":["scheduler","config","active_link_view","_active_link_click","e","start","target","event","srcElement","to","getAttribute","s_d","date","str_to_date","api_date","setCurrentView","preventDefault","attachEvent","do_wrapper","key","fullname","templates","week_x","d_s","date_to_str","this","matrix","_detachDomEvent","_obj","dhtmlxEvent"],"mappings":"AAAAA,UAAUC,OAAOC,iBAAmB,MACpCF,UAAUG,mBAAqB,SAASC,GACvC,GAAIC,GAAQD,EAAEE,QAAUC,MAAMC,WAC1BC,EAAKJ,EAAMK,aAAa,WACxBC,EAAMX,UAAUY,KAAKC,YAAYb,UAAUC,OAAOa,SACtD,OAAIL,IACHT,UAAUe,eAAeJ,EAAIF,GAAKT,UAAUC,OAAOC,kBAC/CE,GAAKA,EAAEY,gBACVZ,EAAEY,kBACI,GAJR,QAODhB,UAAUiB,YAAY,mBAAoB,WACzC,GAAIC,GAAa,SAASC,EAAKC,GAC9BA,EAAWA,GAAaD,EAAI,cAExBnB,UAAUqB,UAAU,qBAAsBD,KAC7CpB,UAAUqB,UAAU,qBAAsBD,GAAYpB,UAAUqB,UAAUD,GAE3E;GAAIE,GAAStB,UAAUqB,UAAU,qBAAsBD,GACnDG,EAAMvB,UAAUY,KAAKY,YAAYxB,UAAUC,OAAOa,SACtDd,WAAUqB,UAAUD,GAAY,SAASR,GACxC,MAAO,eAAiBW,EAAIX,GAAQ,cAAgBU,EAAOV,GAAQ,QAMrE,IAFAM,EAAW,QACXA,EAAW,GAAI,aACXO,KAAKC,OACR,IAAK,GAAIP,KAAOM,MAAKC,OACpBR,EAAWC,EAGbM,MAAKE,gBAAgBF,KAAKG,KAAM,QAAS5B,UAAUG,oBACnD0B,YAAYJ,KAAKG,KAAM,QAAS5B,UAAUG"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_agenda_view.js b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js new file mode 100644 index 0000000..18d791b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js @@ -0,0 +1,123 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.date.add_agenda = function(date){ + return scheduler.date.add(date, 1, "year"); +}; + +scheduler.templates.agenda_time = function(start,end,ev){ + if (ev._timed) + return this.day_date(ev.start_date, ev.end_date, ev)+" "+this.event_date(start); + else + return scheduler.templates.day_date(start)+" – "+scheduler.templates.day_date(end); +}; +scheduler.templates.agenda_text = function(start,end,event){ + return event.text; +}; +scheduler.templates.agenda_date = function(){ return ""; }; + +scheduler.date.agenda_start=function(){ return scheduler.date.date_part(scheduler._currentDate()); }; + +scheduler.attachEvent("onTemplatesReady",function() { + var old_dblclick_dhx_cal_data = scheduler.dblclick_dhx_cal_data; + scheduler.dblclick_dhx_cal_data = function() { + if (this._mode == "agenda") { + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow(); + } else { + if (old_dblclick_dhx_cal_data) + return old_dblclick_dhx_cal_data.apply(this, arguments); + } + }; + scheduler.attachEvent("onSchedulerResize",function(){ + if (this._mode == "agenda"){ + this.agenda_view(true); + return false; + } + return true; + }); + + + var old = scheduler.render_data; + scheduler.render_data=function(evs){ + if (this._mode == "agenda") + fill_agenda_tab(); + else + return old.apply(this,arguments); + }; + + var old_render_view_data = scheduler.render_view_data; + scheduler.render_view_data = function(){ + if(this._mode == "agenda") { + scheduler._agendaScrollTop = scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop; + scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = 0; + } + return old_render_view_data.apply(this,arguments); + }; + + + function set_full_view(mode){ + if (mode){ + var l = scheduler.locale.labels; + scheduler._els["dhx_cal_header"][0].innerHTML="<div class='dhx_agenda_line'><div>"+l.date+"</div><span style='padding-left:25px'>"+l.description+"</span></div>"; + scheduler._table_view=true; + scheduler.set_sizes(); + } + } + + function fill_agenda_tab(){ + //get current date + var date = scheduler._date; + //select events for which data need to be printed + + var events = scheduler.get_visible_events(); + events.sort(function(a,b){ return a.start_date>b.start_date?1:-1;}); + + //generate html for the view + var html="<div class='dhx_agenda_area'>"; + for (var i=0; i<events.length; i++){ + var ev = events[i]; + var bg_color = (ev.color?("background:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); + var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + html+="<div class='dhx_agenda_line"+(ev_class?' '+ev_class:'')+"' event_id='"+ev.id+"' style='"+color+""+bg_color+""+(ev._text_style||"")+"'><div class='dhx_agenda_event_time'>"+scheduler.templates.agenda_time(ev.start_date, ev.end_date,ev)+"</div>"; + html+="<div class='dhx_event_icon icon_details'> </div>"; + html+="<span>"+scheduler.templates.agenda_text(ev.start_date, ev.end_date, ev)+"</span></div>"; + } + html+="<div class='dhx_v_border'></div></div>"; + + //render html + scheduler._els["dhx_cal_data"][0].innerHTML = html; + scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = scheduler._agendaScrollTop||0; + + // setting up dhx_v_border size + var agenda_area = scheduler._els["dhx_cal_data"][0].childNodes[0]; + var v_border = agenda_area.childNodes[agenda_area.childNodes.length-1]; + v_border.style.height = (agenda_area.offsetHeight < scheduler._els["dhx_cal_data"][0].offsetHeight) ? "100%" : (agenda_area.offsetHeight+"px"); + + var t=scheduler._els["dhx_cal_data"][0].firstChild.childNodes; + scheduler._els["dhx_cal_date"][0].innerHTML=scheduler.templates.agenda_date(scheduler._min_date, scheduler._max_date, scheduler._mode); + + scheduler._rendered=[]; + for (var i=0; i < t.length-1; i++) + scheduler._rendered[i]=t[i]; + + } + + scheduler.agenda_view=function(mode){ + scheduler._min_date = scheduler.config.agenda_start||scheduler.date.agenda_start(scheduler._date); + scheduler._max_date = scheduler.config.agenda_end||scheduler.date.add_agenda(scheduler._min_date, 1); + scheduler._table_view = true; + set_full_view(mode); + if (mode){ + //agenda tab activated + fill_agenda_tab(); + } else { + //agenda tab de-activated + } + }; +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map new file mode 100644 index 0000000..c7e5d0b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_agenda_view.js.map","sources":["dhtmlxscheduler_agenda_view.js"],"names":["scheduler","date","add_agenda","add","templates","agenda_time","start","end","ev","_timed","this","day_date","start_date","end_date","event_date","agenda_text","event","text","agenda_date","agenda_start","date_part","_currentDate","attachEvent","set_full_view","mode","l","locale","labels","_els","innerHTML","description","_table_view","set_sizes","fill_agenda_tab","events","_date","get_visible_events","sort","a","b","html","i","length","bg_color","color","textColor","ev_class","event_class","id","_text_style","childNodes","scrollTop","_agendaScrollTop","agenda_area","v_border","style","height","offsetHeight","t","firstChild","_min_date","_max_date","_mode","_rendered","old_dblclick_dhx_cal_data","dblclick_dhx_cal_data","config","readonly","dblclick_create","addEventNow","apply","arguments","agenda_view","old","render_data","old_render_view_data","render_view_data","agenda_end"],"mappings":"AAAAA,UAAUC,KAAKC,WAAa,SAASD,GACpC,MAAOD,WAAUC,KAAKE,IAAIF,EAAM,EAAG,SAGpCD,UAAUI,UAAUC,YAAc,SAASC,EAAMC,EAAIC,GACpD,MAAIA,GAAGC,OACCC,KAAKC,SAASH,EAAGI,WAAYJ,EAAGK,SAAUL,GAAI,IAAIE,KAAKI,WAAWR,GAElEN,UAAUI,UAAUO,SAASL,GAAO,YAAYN,UAAUI,UAAUO,SAASJ,IAEtFP,UAAUI,UAAUW,YAAc,SAAST,EAAMC,EAAIS,GACpD,MAAOA,GAAMC,MAEdjB,UAAUI,UAAUc,YAAc,WAAY,MAAO,IAErDlB,UAAUC,KAAKkB,aAAa,WAAY,MAAOnB,WAAUC,KAAKmB,UAAUpB,UAAUqB,iBAElFrB,UAAUsB,YAAY,mBAAmB,WAsCxC,QAASC,GAAcC,GACtB,GAAIA,EAAK,CACR,GAAIC,GAAIzB,UAAU0B,OAAOC,MACzB3B;UAAU4B,KAAqB,eAAE,GAAGC,UAAU,qCAAqCJ,EAAExB,KAAK,yCAAyCwB,EAAEK,YAAY,gBACjJ9B,UAAU+B,aAAY,EACtB/B,UAAUgC,aAIZ,QAASC,KAER,GAGIC,IAHOlC,UAAUmC,MAGRnC,UAAUoC,qBACvBF,GAAOG,KAAK,SAASC,EAAEC,GAAI,MAAOD,GAAE1B,WAAW2B,EAAE3B,WAAW,EAAE,IAI9D,KAAK,GADD4B,GAAK,gCACAC,EAAE,EAAGA,EAAEP,EAAOQ,OAAQD,IAAI,CAClC,GAAIjC,GAAK0B,EAAOO,GACZE,EAAYnC,EAAGoC,MAAO,cAAcpC,EAAGoC,MAAM,IAAK,GAClDA,EAASpC,EAAGqC,UAAW,SAASrC,EAAGqC,UAAU,IAAK,GAClDC,EAAW9C,UAAUI,UAAU2C,YAAYvC,EAAGI,WAAYJ,EAAGK,SAAUL,EAC3EgC;GAAM,+BAA+BM,EAAS,IAAIA,EAAS,IAAI,eAAetC,EAAGwC,GAAG,YAAYJ,EAASD,GAAanC,EAAGyC,aAAa,IAAI,wCAAwCjD,UAAUI,UAAUC,YAAYG,EAAGI,WAAYJ,EAAGK,SAASL,GAAI,SACjPgC,GAAM,uDACNA,GAAM,SAASxC,UAAUI,UAAUW,YAAYP,EAAGI,WAAYJ,EAAGK,SAAUL,GAAI,gBAEhFgC,GAAM,yCAGNxC,UAAU4B,KAAmB,aAAE,GAAGC,UAAYW,EAC9CxC,UAAU4B,KAAmB,aAAE,GAAGsB,WAAW,GAAGC,UAAYnD,UAAUoD,kBAAkB,CAGxF;GAAIC,GAAcrD,UAAU4B,KAAmB,aAAE,GAAGsB,WAAW,GAC3DI,EAAWD,EAAYH,WAAWG,EAAYH,WAAWR,OAAO,EACpEY,GAASC,MAAMC,OAAUH,EAAYI,aAAezD,UAAU4B,KAAmB,aAAE,GAAG6B,aAAgB,OAAUJ,EAAYI,aAAa,IAEzI,IAAIC,GAAE1D,UAAU4B,KAAmB,aAAE,GAAG+B,WAAWT,UACnDlD,WAAU4B,KAAmB,aAAE,GAAGC,UAAU7B,UAAUI,UAAUc,YAAYlB,UAAU4D,UAAW5D,UAAU6D,UAAW7D,UAAU8D,OAEhI9D,UAAU+D,YACV,KAAK,GAAItB,GAAE,EAAGA,EAAIiB,EAAEhB,OAAO,EAAGD,IAC7BzC,UAAU+D,UAAUtB,GAAGiB,EAAEjB,GAjF3B,GAAIuB,GAA4BhE,UAAUiE,qBAC1CjE,WAAUiE,sBAAwB,WACjC,GAAkB,UAAdvD,KAAKoD,OACHpD,KAAKwD,OAAOC,UAAYzD,KAAKwD,OAAOE,iBACxC1D,KAAK2D;IAEN,IAAIL,EACH,MAAOA,GAA0BM,MAAM5D,KAAM6D,YAGhDvE,UAAUsB,YAAY,oBAAoB,WAC1C,MAAkB,UAAdZ,KAAKoD,OACRpD,KAAK8D,aAAY,IACV,IAEA,GAIR,IAAIC,GAAMzE,UAAU0E,WACpB1E,WAAU0E,YAAY,WACrB,MAAkB,UAAdhE,KAAKoD,MAGDW,EAAIH,MAAM5D,KAAK6D,eAFtBtC,KAKF,IAAI0C,GAAuB3E,UAAU4E,gBACrC5E,WAAU4E,iBAAmB,WAK5B,MAJiB,UAAdlE,KAAKoD,QACP9D,UAAUoD,iBAAmBpD,UAAU4B,KAAmB,aAAE,GAAGsB,WAAW,GAAGC,UAC7EnD,UAAU4B,KAAmB,aAAE,GAAGsB,WAAW,GAAGC,UAAY,GAEtDwB,EAAqBL,MAAM5D,KAAK6D;EAoDxCvE,UAAUwE,YAAY,SAAShD,GAC9BxB,UAAU4D,UAAY5D,UAAUkE,OAAO/C,cAAcnB,UAAUC,KAAKkB,aAAanB,UAAUmC,OAC3FnC,UAAU6D,UAAY7D,UAAUkE,OAAOW,YAAY7E,UAAUC,KAAKC,WAAWF,UAAU4D,UAAW,GAClG5D,UAAU+B,aAAc,EACxBR,EAAcC,GACVA,GAEHS"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_all_timed.js b/codebase/sources/ext/dhtmlxscheduler_all_timed.js new file mode 100644 index 0000000..2bb81fe --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_all_timed.js @@ -0,0 +1,148 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + + scheduler.config.all_timed = "short"; + + var is_event_short = function (ev) { + return !((ev.end_date - ev.start_date)/(1000*60*60) >= 24); + }; + + // copy of usual events and recurring instances; + // regular copy causes problems with recurrings which have series event as a prototype + scheduler._safe_copy = function(event){ + var proto = null, + copy = null; + if(event.event_pid){ + proto = scheduler.getEvent(event.event_pid); + } + + if (proto && proto.isPrototypeOf(event)) { + copy = scheduler._copy_event(event); + delete copy.event_length; + delete copy.event_pid; + delete copy.rec_pattern; + delete copy.rec_type; + } else { + copy = scheduler._lame_clone(event); + } + return copy; + }; + + var old_prerender_events_line = scheduler._pre_render_events_line; + scheduler._pre_render_events_line = function(evs, hold){ + if (!this.config.all_timed) + return old_prerender_events_line.call(this, evs, hold); + + for (var i=0; i < evs.length; i++) { + var ev=evs[i]; + + if (ev._timed) + continue; + + if (this.config.all_timed == "short") { + if (!is_event_short(ev)) { + evs.splice(i--,1); + continue; + } + } + + var ce = this._safe_copy(ev); // current event (event for one specific day) is copy of original with modified dates + + ce.start_date = new Date(ce.start_date); // as lame copy doesn't copy date objects + + if (!isOvernightEvent(ev)) { + ce.end_date = new Date(ev.end_date); + } + else { + ce.end_date = getNextDay(ce.start_date); + if (this.config.last_hour != 24) { // if specific last_hour was set (e.g. 20) + ce.end_date = setDateTime(ce.start_date, this.config.last_hour); + } + } + + var event_changed = false; + if (ce.start_date < this._max_date && ce.end_date > this._min_date && ce.start_date < ce.end_date) { + evs[i] = ce; // adding another event in collection + event_changed = true; + } + // if (ce.start_date > ce.end_date) { + // evs.splice(i--,1); + // } + + var re = this._safe_copy(ev); // remaining event, copy of original with modified start_date (making range more narrow) + re.end_date = new Date(re.end_date); + if (re.start_date < this._min_date) + re.start_date = setDateTime(this._min_date, this.config.first_hour);// as we are starting only with whole hours + else + re.start_date = setDateTime(getNextDay(ev.start_date), this.config.first_hour); + + if (re.start_date < this._max_date && re.start_date < re.end_date) { + if (event_changed) + evs.splice(i+1,0,re);//insert part + else { + evs[i--] = re; + continue; + } + } + + } + // in case of all_timed pre_render is not applied to the original event + // so we need to force redraw in case of dnd + var redraw = (this._drag_mode == 'move')?false:hold; + return old_prerender_events_line.call(this, evs, redraw); + + + function isOvernightEvent(ev){ + var next_day = getNextDay(ev.start_date); + return (+ev.end_date > +next_day); + } + function getNextDay(date){ + var next_day = scheduler.date.add(date, 1, "day"); + next_day = scheduler.date.date_part(next_day); + return next_day; + } + function setDateTime(date, hours){ + var val = scheduler.date.date_part(new Date(date)); + val.setHours(hours); + return val; + } + }; + var old_get_visible_events = scheduler.get_visible_events; + scheduler.get_visible_events = function(only_timed){ + if (!(this.config.all_timed && this.config.multi_day)) + return old_get_visible_events.call(this, only_timed); + return old_get_visible_events.call(this, false); // only timed = false + }; + scheduler.attachEvent("onBeforeViewChange", function (old_mode, old_date, mode, date) { + scheduler._allow_dnd = (mode == "day" || mode == "week"); + return true; + }); + + scheduler._is_main_area_event = function(ev){ + return !!(ev._timed || this.config.all_timed === true || (this.config.all_timed == "short" && is_event_short(ev)) ); + }; + + var oldUpdate = scheduler.updateEvent; + scheduler.updateEvent = function(id){ + // full redraw(update_render=true) messes events order while dnd. + // individual redraw(update_render=false) of multiday event, which happens on select/unselect, expands event to full width of the cell and can be fixes only with full redraw. + // so for now full redraw is always enabled for not-dnd updates + var fullRedrawNeeded = (scheduler.config.all_timed && !(scheduler.isOneDayEvent(scheduler._events[id]) || scheduler.getState().drag_id)); + var initial; + if(fullRedrawNeeded){ + initial = scheduler.config.update_render; + scheduler.config.update_render = true; + } + oldUpdate.apply(scheduler, arguments); + + if(fullRedrawNeeded){ + scheduler.config.update_render = initial; + } + }; +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map b/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map new file mode 100644 index 0000000..e5589ea --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_all_timed.js.map","sources":["dhtmlxscheduler_all_timed.js"],"names":["scheduler","config","all_timed","is_event_short","ev","end_date","start_date","_safe_copy","event","proto","copy","event_pid","getEvent","isPrototypeOf","_copy_event","event_length","rec_pattern","rec_type","_lame_clone","old_prerender_events_line","_pre_render_events_line","evs","hold","isOvernightEvent","next_day","getNextDay","date","add","date_part","setDateTime","hours","val","Date","setHours","this","call","i","length","_timed","ce","last_hour","event_changed","_max_date","_min_date","re","first_hour","splice","redraw","_drag_mode","old_get_visible_events","get_visible_events","only_timed","multi_day","attachEvent","old_mode","old_date","mode","_allow_dnd","_is_main_area_event","oldUpdate","updateEvent","id","initial","fullRedrawNeeded","isOneDayEvent","_events","getState","drag_id","update_render","apply","arguments"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_collision.js b/codebase/sources/ext/dhtmlxscheduler_collision.js new file mode 100644 index 0000000..ce79a4a --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_collision.js @@ -0,0 +1,131 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + +var temp_section; +var before; + +scheduler.config.collision_limit = 1; + +function _setTempSection(event_id) { // for custom views (matrix, timeline, units) + var checked_mode = scheduler._get_section_view(); + if(checked_mode && event_id){ + temp_section = scheduler.getEvent(event_id)[scheduler._get_section_property()]; + } +} + +scheduler.attachEvent("onBeforeDrag",function(id){ + _setTempSection(id); + return true; +}); +scheduler.attachEvent("onBeforeLightbox",function(id){ + var ev = scheduler.getEvent(id); + before = [ev.start_date, ev.end_date]; + _setTempSection(id); + return true; +}); +scheduler.attachEvent("onEventChanged",function(id){ + if (!id || !scheduler.getEvent(id)) return true; + var ev = scheduler.getEvent(id); + if (!scheduler.checkCollision(ev)){ + if (!before) return false; + ev.start_date = before[0]; + ev.end_date = before[1]; + ev._timed=this.isOneDayEvent(ev); + } + return true; +}); +scheduler.attachEvent("onBeforeEventChanged",function(ev,e,is_new){ + return scheduler.checkCollision(ev); +}); +scheduler.attachEvent("onEventAdded",function(id,ev) { + var result = scheduler.checkCollision(ev); + if (!result) + scheduler.deleteEvent(id); +}); +scheduler.attachEvent("onEventSave",function(id, edited_ev, is_new){ + edited_ev = scheduler._lame_clone(edited_ev); + edited_ev.id = id; + + //lightbox may not have 'time' section + if(!(edited_ev.start_date && edited_ev.end_date)){ + var ev = scheduler.getEvent(id); + edited_ev.start_date = new Date(ev.start_date); + edited_ev.end_date = new Date(ev.end_date); + } + + if(edited_ev.rec_type){ + scheduler._roll_back_dates(edited_ev); + } + return scheduler.checkCollision(edited_ev); // in case user creates event on one date but then edited it another +}); + +scheduler._check_sections_collision = function(first, second){ + var map_to = scheduler._get_section_property(); + if (first[map_to] == second[map_to] && first.id != second.id) + return true; + return false; +}; + +scheduler.checkCollision = function(ev) { + var evs = []; + var collision_limit = scheduler.config.collision_limit; + + if (ev.rec_type) { + var evs_dates = scheduler.getRecDates(ev); + for(var k=0; k<evs_dates.length; k++) { + var tevs = scheduler.getEvents(evs_dates[k].start_date, evs_dates[k].end_date); + for(var j=0; j<tevs.length; j++) { + if ((tevs[j].event_pid || tevs[j].id) != ev.id ) + evs.push(tevs[j]); + } + } + } else { + evs = scheduler.getEvents(ev.start_date, ev.end_date); + for (var i=0; i<evs.length; i++) { + if (evs[i].id == ev.id) { + evs.splice(i,1); + break; + } + } + } + + + var checked_mode = scheduler._get_section_view(); + var map_to = scheduler._get_section_property(); + + var single = true; + if (checked_mode) { // custom view + var count = 0; + + for (var i = 0; i < evs.length; i++){ + if (evs[i].id != ev.id && this._check_sections_collision(evs[i], ev)) + count++; + } + + if (count >= collision_limit) { + + single = false; + } + } + else { + if ( evs.length >= collision_limit ) + single = false; + } + if (!single) { + var res = !scheduler.callEvent("onEventCollision",[ev,evs]); + if (!res) { + ev[map_to] = temp_section||ev[map_to]; // from _setTempSection for custom views + } + return res; + } + return single; + +}; + +})(); diff --git a/codebase/sources/ext/dhtmlxscheduler_collision.js.map b/codebase/sources/ext/dhtmlxscheduler_collision.js.map new file mode 100644 index 0000000..033f96c --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_collision.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_collision.js.map","sources":["dhtmlxscheduler_collision.js"],"names":["_setTempSection","event_id","checked_mode","scheduler","_get_section_view","temp_section","getEvent","_get_section_property","before","config","collision_limit","attachEvent","id","ev","start_date","end_date","checkCollision","_timed","this","isOneDayEvent","result","deleteEvent","edited_ev","_lame_clone","Date","rec_type","_roll_back_dates","_check_sections_collision","first","second","map_to","evs","evs_dates","getRecDates","k","length","tevs","getEvents","j","event_pid","push","i","splice","single","count","res","callEvent"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js new file mode 100644 index 0000000..78bbcf3 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js @@ -0,0 +1,164 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function() { + + scheduler.config.container_autoresize = true; + scheduler.config.month_day_min_height = 90; + + var old_pre_render_event = scheduler._pre_render_events; + + scheduler._pre_render_events = function(evs, hold) { + if (!scheduler.config.container_autoresize) { + return old_pre_render_event.apply(this, arguments); + } + + var hb = this.xy.bar_height; + var h_old = this._colsS.heights; + var h = this._colsS.heights = [0, 0, 0, 0, 0, 0, 0]; + var data = this._els["dhx_cal_data"][0]; + + if (!this._table_view) + evs = this._pre_render_events_line(evs, hold); //ignore long events for now + else + evs = this._pre_render_events_table(evs, hold); + + if (this._table_view) { + if (hold){ + this._colsS.heights = h_old; + } else { + var evl = data.firstChild; + if (evl.rows) { + for (var i = 0; i < evl.rows.length; i++) { + h[i]++; + if ((h[i]) * hb > this._colsS.height - this.xy.month_head_height) { // 22 - height of cell's header + //we have overflow, update heights + var cells = evl.rows[i].cells; + + var cHeight = this._colsS.height - this.xy.month_head_height; + if(this.config.max_month_events*1 !== this.config.max_month_events || h[i] <= this.config.max_month_events){ + cHeight = h[i] * hb; + }else if( (this.config.max_month_events + 1) * hb > this._colsS.height - this.xy.month_head_height){ + cHeight = (this.config.max_month_events + 1) * hb; + } + + for (var j = 0; j < cells.length; j++) { + cells[j].childNodes[1].style.height = cHeight + "px"; + } + h[i] = (h[i - 1] || 0) + cells[0].offsetHeight; + } + h[i] = (h[i - 1] || 0) + evl.rows[i].cells[0].offsetHeight; + } + h.unshift(0); + if (evl.parentNode.offsetHeight < evl.parentNode.scrollHeight && !evl._h_fix) { + //we have v-scroll, decrease last day cell + + // NO CHECK SHOULD BE MADE ON VERTICAL SCROLL + } + } else { + if (!evs.length && this._els["dhx_multi_day"][0].style.visibility == "visible") + h[0] = -1; + if (evs.length || h[0] == -1) { + //shift days to have space for multiday events + var childs = evl.parentNode.childNodes; + var dh = ((h[0] + 1) * hb + 1) + "px"; // +1 so multiday events would have 2px from top and 2px from bottom by default + data.style.top = (this._els["dhx_cal_navline"][0].offsetHeight + this._els["dhx_cal_header"][0].offsetHeight + parseInt(dh, 10)) + 'px'; + data.style.height = (this._obj.offsetHeight - parseInt(data.style.top, 10) - (this.xy.margin_top || 0)) + 'px'; + var last = this._els["dhx_multi_day"][0]; + last.style.height = dh; + last.style.visibility = (h[0] == -1 ? "hidden" : "visible"); + last = this._els["dhx_multi_day"][1]; + last.style.height = dh; + last.style.visibility = (h[0] == -1 ? "hidden" : "visible"); + last.className = h[0] ? "dhx_multi_day_icon" : "dhx_multi_day_icon_small"; + this._dy_shift = (h[0] + 1) * hb; + h[0] = 0; + } + } + } + } + + return evs; + }; + + var checked_divs = ["dhx_cal_navline", "dhx_cal_header", "dhx_multi_day", "dhx_cal_data"]; + var updateContainterHeight = function(is_repaint) { + var total_height = 0; + for (var i = 0; i < checked_divs.length; i++) { + + var className = checked_divs[i]; + var checked_div = (scheduler._els[className]) ? scheduler._els[className][0] : null; + var height = 0; + switch (className) { + case "dhx_cal_navline": + case "dhx_cal_header": + height = parseInt(checked_div.style.height, 10); + break; + case "dhx_multi_day": + height = (checked_div) ? checked_div.offsetHeight : 0; + if (height == 1) + height = 0; + break; + case "dhx_cal_data": + height = Math.max(checked_div.offsetHeight - 1, checked_div.scrollHeight); + var mode = scheduler.getState().mode; + if (mode == "month") { + if (scheduler.config.month_day_min_height && !is_repaint) { + var rows_length = checked_div.getElementsByTagName("tr").length; + height = rows_length * scheduler.config.month_day_min_height; + } + if (is_repaint) { + checked_div.style.height = height + "px"; + } + } + if (scheduler.matrix && scheduler.matrix[mode]) { + if (is_repaint) { + height += 2; + checked_div.style.height = height + "px"; + } else { + height = 2; + var cfg = scheduler.matrix[mode]; + var rows = cfg.y_unit; + for(var r=0; r < rows.length; r++){ + height += !rows[r].children ? cfg.dy : (cfg.folder_dy||cfg.dy); + } + } + } + if (mode == "day" || mode == "week") { + height += 2; + } + break; + } + total_height += height; + } + scheduler._obj.style.height = (total_height) + "px"; + + if (!is_repaint) + scheduler.updateView(); + }; + + var conditionalUpdateContainerHeight = function() { + var mode = scheduler.getState().mode; + + updateContainterHeight(); + if ( (scheduler.matrix && scheduler.matrix[mode]) || mode == "month" ) { + window.setTimeout(function() { + updateContainterHeight(true); + }, 1); + } + }; + + scheduler.attachEvent("onViewChange", conditionalUpdateContainerHeight); + scheduler.attachEvent("onXLE", conditionalUpdateContainerHeight); + scheduler.attachEvent("onEventChanged", conditionalUpdateContainerHeight); + scheduler.attachEvent("onEventCreated", conditionalUpdateContainerHeight); + scheduler.attachEvent("onEventAdded", conditionalUpdateContainerHeight); + scheduler.attachEvent("onEventDeleted", conditionalUpdateContainerHeight); + scheduler.attachEvent("onAfterSchedulerResize", conditionalUpdateContainerHeight); + scheduler.attachEvent("onClearAll", conditionalUpdateContainerHeight); + +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map new file mode 100644 index 0000000..207513a --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_container_autoresize.js.map","sources":["dhtmlxscheduler_container_autoresize.js"],"names":["scheduler","config","container_autoresize","month_day_min_height","old_pre_render_event","_pre_render_events","evs","hold","apply","this","arguments","hb","xy","bar_height","h_old","_colsS","heights","h","data","_els","_table_view","_pre_render_events_table","_pre_render_events_line","evl","firstChild","rows","i","length","height","month_head_height","cells","cHeight","max_month_events","j","childNodes","style","offsetHeight","unshift","parentNode","scrollHeight","_h_fix","visibility","dh","top","parseInt","_obj","margin_top","last","className","_dy_shift","checked_divs","updateContainterHeight","is_repaint","total_height","checked_div","Math","max","mode","getState","rows_length","getElementsByTagName","matrix","cfg","y_unit","r","children","folder_dy","dy","updateView","conditionalUpdateContainerHeight","window","setTimeout","attachEvent"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_cookie.js b/codebase/sources/ext/dhtmlxscheduler_cookie.js new file mode 100644 index 0000000..4420e2b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_cookie.js @@ -0,0 +1,73 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + function setCookie(name,cookie_param,value) { + var str = name + "=" + value + (cookie_param?("; "+cookie_param):""); + document.cookie = str; + } + function getCookie(name) { + var search = name + "="; + if (document.cookie.length > 0) { + var offset = document.cookie.indexOf(search); + if (offset != -1) { + offset += search.length; + var end = document.cookie.indexOf(";", offset); + if (end == -1) + end = document.cookie.length; + return document.cookie.substring(offset, end); + } + } + return ""; + } + var first = true; + scheduler.attachEvent("onBeforeViewChange",function(om,od,m,d){ + if (first){ + first = false; + + + + var data=getCookie("scheduler_settings"); + if (data){ + + if(!scheduler._min_date){ + //otherwise scheduler will have incorrect date until timeout + //it can cause js error with 'onMouseMove' handler of key_nav.js + scheduler._min_date = d; + } + + data = unescape(data).split("@"); + data[0] = this.templates.xml_date(data[0]); + var view = this.isViewExists(data[1]) ? data[1] : m, + date = !isNaN(+data[0]) ? data[0] : d; + + window.setTimeout(function(){ + scheduler.setCurrentView(date,view); + },1); + return false; + } + } + var text = escape(this.templates.xml_format(d||od)+"@"+(m||om)); + setCookie("scheduler_settings","expires=Sun, 31 Jan 9999 22:00:00 GMT",text); + return true; + }); + + + // As we are blocking first render above there could be a problem in case of dynamic loading ('from' won't be defined) + var old_load = scheduler._load; + scheduler._load = function() { + var args = arguments; + if (!scheduler._date && scheduler._load_mode) { + var that = this; + window.setTimeout(function() { + old_load.apply(that, args); + },1); + } else { + old_load.apply(this, args); + } + }; +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_cookie.js.map b/codebase/sources/ext/dhtmlxscheduler_cookie.js.map new file mode 100644 index 0000000..5490213 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_cookie.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_cookie.js.map","sources":["dhtmlxscheduler_cookie.js"],"names":["setCookie","name","cookie_param","value","str","document","cookie","getCookie","search","length","offset","indexOf","end","substring","first","scheduler","attachEvent","om","od","m","d","data","_min_date","unescape","split","this","templates","xml_date","view","isViewExists","date","isNaN","window","setTimeout","setCurrentView","text","escape","xml_format","old_load","_load","args","arguments","_date","_load_mode","that","apply"],"mappings":"CAAA,WACC,QAASA,GAAUC,EAAKC,EAAaC,GACpC,GAAIC,GAAMH,EAAO,IAAME,GAAUD,EAAc,KAAKA,EAAc,GAClEG,UAASC,OAASF,EAEnB,QAASG,GAAUN,GAClB,GAAIO,GAASP,EAAO,GACpB,IAAII,SAASC,OAAOG,OAAS,EAAG,CAC/B,GAAIC,GAASL,SAASC,OAAOK,QAAQH,EACrC,IAAc,IAAVE,EAAc,CACjBA,GAAUF,EAAOC,MACjB,IAAIG,GAAMP,SAASC,OAAOK,QAAQ,IAAKD,EAGvC,OAFW,IAAPE,IACHA,EAAMP,SAASC,OAAOG,QAChBJ,SAASC,OAAOO,UAAUH,EAAQE,IAG3C,MAAO,GAER,GAAIE,IAAQ,CACZC,WAAUC,YAAY,qBAAqB,SAASC,EAAGC,EAAGC,EAAEC,GAC3D,GAAIN,EAAM,CACTA,GAAQ,CAIR,IAAIO,GAAKd,EAAU,qBACnB,IAAIc,EAAK,CAEJN,UAAUO,YAGbP,UAAUO,UAAYF,GAGvBC,EAAOE,SAASF,GAAMG,MAAM,KAC5BH,EAAK,GAAKI,KAAKC,UAAUC,SAASN,EAAK,GACvC;GAAIO,GAAOH,KAAKI,aAAaR,EAAK,IAAMA,EAAK,GAAKF,EACjDW,EAAQC,OAAOV,EAAK,IAAgBD,EAAVC,EAAK,EAKhC,OAHAW,QAAOC,WAAW,WACjBlB,UAAUmB,eAAeJ,EAAKF,IAC7B,IACK,GAGT,GAAIO,GAAOC,OAAOX,KAAKC,UAAUW,WAAWjB,GAAGF,GAAI,KAAKC,GAAGF,GAE3D,OADAjB,GAAU,qBAAqB,wCAAwCmC,IAChE,GAKR,IAAIG,GAAWvB,UAAUwB,KACzBxB,WAAUwB,MAAQ,WACjB,GAAIC,GAAOC,SACX,KAAK1B,UAAU2B,OAAS3B,UAAU4B,WAAY,CAC7C,GAAIC,GAAOnB,IACXO,QAAOC,WAAW,WACjBK,EAASO,MAAMD,EAAMJ,IACpB,OAEFF,GAASO,MAAMpB,KAAMe"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_editors.js b/codebase/sources/ext/dhtmlxscheduler_editors.js new file mode 100644 index 0000000..f088140 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_editors.js @@ -0,0 +1,161 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.form_blocks['combo']={ + render:function(sns) { + if (!sns.cached_options) + sns.cached_options = {}; + var res = ''; + res += "<div class='"+sns.type+"' style='height:"+(sns.height||20)+"px;' ></div>"; + return res; + }, + set_value:function(node,value,ev,config){ + (function(){ + resetCombo(); + var id = scheduler.attachEvent("onAfterLightbox",function(){ + // otherwise destructor will never be called after form reset(e.g. in readonly event mode) + resetCombo(); + scheduler.detachEvent(id); + }); + function resetCombo(){ + if(node._combo && node._combo.DOMParent) { + node._combo.destructor(); + } + } + })(); + window.dhx_globalImgPath = config.image_path||'/'; + node._combo = new dhtmlXCombo(node, config.name, node.offsetWidth-8); + if (config.onchange) + node._combo.attachEvent("onChange", config.onchange); + + if (config.options_height) + node._combo.setOptionHeight(config.options_height); + var combo = node._combo; + combo.enableFilteringMode(config.filtering, config.script_path||null, !!config.cache); + + if (!config.script_path) { // script-side filtration is used + var all_options = []; + for (var i = 0; i < config.options.length; i++) { + var option = config.options[i]; + var single_option = [ + option.key, + option.label, + option.css + ]; + all_options.push(single_option); + } + combo.addOption(all_options); + if (ev[config.map_to]) { + var index = combo.getIndexByValue(ev[config.map_to]); + combo.selectOption(index); + } + } else { // server-side filtration is used + var selected_id = ev[config.map_to]; + if (selected_id) { + if (config.cached_options[selected_id]) { + combo.addOption(selected_id, config.cached_options[selected_id]); + combo.disable(1); + combo.selectOption(0); + combo.disable(0); + } else { + dhtmlxAjax.get(config.script_path+"?id="+selected_id+"&uid="+scheduler.uid(), function(result){ + var option = result.doXPath("//option")[0]; + var label = option.childNodes[0].nodeValue; + config.cached_options[selected_id] = label; + combo.addOption(selected_id, label); + combo.disable(1); + combo.selectOption(0); + combo.disable(0); + }); + } + } else { + combo.setComboValue(""); + } + } + }, + get_value:function(node,ev,config) { + var selected_id = node._combo.getSelectedValue(); // value = key + if (config.script_path) { + config.cached_options[selected_id] = node._combo.getSelectedText(); + } + return selected_id; + }, + focus:function(node){ + } +}; + +scheduler.form_blocks['radio']={ + render:function(sns) { + var res = ''; + res += "<div class='dhx_cal_ltext dhx_cal_radio' style='height:"+sns.height+"px;' >"; + for (var i=0; i<sns.options.length; i++) { + var id = scheduler.uid(); + res += "<input id='"+id+"' type='radio' name='"+sns.name+"' value='"+sns.options[i].key+"'><label for='"+id+"'>"+" "+sns.options[i].label+"</label>"; + if(sns.vertical) + res += "<br/>"; + } + res += "</div>"; + + return res; + }, + set_value:function(node,value,ev,config){ + var radiobuttons = node.getElementsByTagName('input'); + for (var i = 0; i < radiobuttons.length; i++) { + radiobuttons[i].checked = false; + var checked_value = ev[config.map_to]||value; + if (radiobuttons[i].value == checked_value) { + radiobuttons[i].checked = true; + } + } + }, + get_value:function(node,ev,config){ + var radiobuttons = node.getElementsByTagName('input'); + for(var i=0; i<radiobuttons.length; i++) { + if(radiobuttons[i].checked) { + return radiobuttons[i].value; + } + } + }, + focus:function(node){ + } +}; + +scheduler.form_blocks['checkbox']={ + render:function(sns) { + if (scheduler.config.wide_form) + return '<div class="dhx_cal_wide_checkbox" '+(sns.height?("style='height:"+sns.height+"px;'"):"")+'></div>'; + else + return ''; + }, + set_value:function(node,value,ev,config){ + node=document.getElementById(config.id); + var id = scheduler.uid(); + var isChecked = (typeof config.checked_value != "undefined") ? value == config.checked_value : !!value; + node.className += " dhx_cal_checkbox"; + var check_html = "<input id='"+id+"' type='checkbox' value='true' name='"+config.name+"'"+((isChecked)?"checked='true'":'')+"'>"; + var label_html = "<label for='"+id+"'>"+(scheduler.locale.labels["section_"+config.name]||config.name)+"</label>"; + if (scheduler.config.wide_form){ + node.innerHTML = label_html; + node.nextSibling.innerHTML=check_html; + } else + node.innerHTML=check_html+label_html; + + if (config.handler) { + var checkbox = node.getElementsByTagName('input')[0]; + checkbox.onclick = config.handler; + } + }, + get_value:function(node,ev,config){ + node=document.getElementById(config.id); + var checkbox = node.getElementsByTagName('input')[0]; // moved to the header + if (!checkbox) + checkbox = node.nextSibling.getElementsByTagName('input')[0]; + return (checkbox.checked)?(config.checked_value||true):(config.unchecked_value||false); + }, + focus:function(node){ + } +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_editors.js.map b/codebase/sources/ext/dhtmlxscheduler_editors.js.map new file mode 100644 index 0000000..1980416 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_editors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_editors.js.map","sources":["dhtmlxscheduler_editors.js"],"names":["scheduler","form_blocks","render","sns","cached_options","res","type","height","set_value","node","value","ev","config","resetCombo","_combo","DOMParent","destructor","id","attachEvent","detachEvent","window","dhx_globalImgPath","image_path","dhtmlXCombo","name","offsetWidth","onchange","options_height","setOptionHeight","combo","enableFilteringMode","filtering","script_path","cache","selected_id","map_to","addOption","disable","selectOption","dhtmlxAjax","get","uid","result","option","doXPath","label","childNodes","nodeValue","setComboValue","all_options","i","options","length","single_option","key","css","push","index","getIndexByValue","get_value","getSelectedValue","getSelectedText","focus","vertical","radiobuttons","getElementsByTagName","checked","checked_value","wide_form","document","getElementById","isChecked","className","check_html","label_html","locale","labels","innerHTML","nextSibling","handler","checkbox","onclick","unchecked_value"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_expand.js b/codebase/sources/ext/dhtmlxscheduler_expand.js new file mode 100644 index 0000000..2a5a4b8 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_expand.js @@ -0,0 +1,76 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.expand = function() { + var t = scheduler._obj; + do { + t._position = t.style.position || ""; + t.style.position = "static"; + } while ((t = t.parentNode) && t.style); + t = scheduler._obj; + t.style.position = "absolute"; + t._width = t.style.width; + t._height = t.style.height; + t.style.width = t.style.height = "100%"; + t.style.top = t.style.left = "0px"; + + var top = document.body; + top.scrollTop = 0; + + top = top.parentNode; + if (top) + top.scrollTop = 0; + document.body._overflow = document.body.style.overflow || ""; + document.body.style.overflow = "hidden"; + scheduler._maximize(); +}; +scheduler.collapse = function() { + var t = scheduler._obj; + do { + t.style.position = t._position; + } while ((t = t.parentNode) && t.style); + t = scheduler._obj; + t.style.width = t._width; + t.style.height = t._height; + document.body.style.overflow = document.body._overflow; + scheduler._maximize(); +}; +scheduler.attachEvent("onTemplatesReady", function() { + var t = document.createElement("DIV"); + t.className = "dhx_expand_icon"; + scheduler.toggleIcon = t; + scheduler._obj.appendChild(t); + t.onclick = function() { + if (!scheduler.expanded) + scheduler.expand(); else + scheduler.collapse(); + }; +}); +scheduler._maximize = function() { + this.expanded = !this.expanded; + this.toggleIcon.style.backgroundPosition = "0 " + (this.expanded ? "0" : "18") + "px"; + + var directions = ['left', 'top']; + for (var i = 0; i < directions.length; i++) { + var margin = scheduler.xy['margin_' + directions[i]]; + var prev_margin = scheduler['_prev_margin_' + directions[i]]; + if (scheduler.xy['margin_' + directions[i]]) { + scheduler['_prev_margin_' + directions[i]] = scheduler.xy['margin_' + directions[i]]; + scheduler.xy['margin_' + directions[i]] = 0; + } else { + if (prev_margin) { + scheduler.xy['margin_' + directions[i]] = scheduler['_prev_margin_' + directions[i]]; + delete scheduler['_prev_margin_' + directions[i]]; + } + } + } + + if (scheduler.callEvent("onSchedulerResize", [])) { + scheduler.update_view(); + scheduler.callEvent("onAfterSchedulerResize"); + } +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_expand.js.map b/codebase/sources/ext/dhtmlxscheduler_expand.js.map new file mode 100644 index 0000000..7c67fd4 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_expand.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_expand.js.map","sources":["dhtmlxscheduler_expand.js"],"names":["scheduler","expand","t","_obj","_position","style","position","parentNode","_width","width","_height","height","top","left","document","body","scrollTop","_overflow","overflow","_maximize","collapse","attachEvent","createElement","className","toggleIcon","appendChild","onclick","expanded","this","backgroundPosition","directions","i","length","prev_margin","xy","callEvent","update_view"],"mappings":"AAAAA,UAAUC,OAAS,WAClB,GAAIC,GAAIF,UAAUG,IAClB,GACCD,GAAEE,UAAYF,EAAEG,MAAMC,UAAY,GAClCJ,EAAEG,MAAMC,SAAW,gBACVJ,EAAIA,EAAEK,aAAeL,EAAEG,MACjCH,GAAIF,UAAUG,KACdD,EAAEG,MAAMC,SAAW,WACnBJ,EAAEM,OAASN,EAAEG,MAAMI,MACnBP,EAAEQ,QAAUR,EAAEG,MAAMM,OACpBT,EAAEG,MAAMI,MAAQP,EAAEG,MAAMM,OAAS,OACjCT,EAAEG,MAAMO,IAAMV,EAAEG,MAAMQ,KAAO,KAE7B,IAAID,GAAME,SAASC,IACnBH,GAAII,UAAY,EAEhBJ,EAAMA,EAAIL,WACNK,IACHA,EAAII,UAAY,GACjBF,SAASC,KAAKE,UAAYH,SAASC,KAAKV,MAAMa,UAAY,GAC1DJ,SAASC,KAAKV,MAAMa,SAAW,SAC/BlB,UAAUmB,aAEXnB,UAAUoB,SAAW,WACpB,GAAIlB,GAAIF,UAAUG,IAClB;EACCD,GAAEG,MAAMC,SAAWJ,EAAEE,iBACZF,EAAIA,EAAEK,aAAeL,EAAEG,MACjCH,GAAIF,UAAUG,KACdD,EAAEG,MAAMI,MAAQP,EAAEM,OAClBN,EAAEG,MAAMM,OAAST,EAAEQ,QACnBI,SAASC,KAAKV,MAAMa,SAAWJ,SAASC,KAAKE,UAC7CjB,UAAUmB,aAEXnB,UAAUqB,YAAY,mBAAoB,WACzC,GAAInB,GAAIY,SAASQ,cAAc,MAC/BpB,GAAEqB,UAAY,kBACdvB,UAAUwB,WAAatB,EACvBF,UAAUG,KAAKsB,YAAYvB,GAC3BA,EAAEwB,QAAU,WACN1B,UAAU2B,SAEd3B,UAAUoB,WADVpB,UAAUC,YAIbD,UAAUmB,UAAY,WACrBS,KAAKD,UAAYC,KAAKD,SACtBC,KAAKJ,WAAWnB,MAAMwB,mBAAqB,MAAQD,KAAKD,SAAW,IAAM,MAAQ,IAGjF;IAAK,GADDG,IAAc,OAAQ,OACjBC,EAAI,EAAGA,EAAID,EAAWE,OAAQD,IAAK,CAC3C,GACIE,IADSjC,UAAUkC,GAAG,UAAYJ,EAAWC,IAC/B/B,UAAU,gBAAkB8B,EAAWC,IACrD/B,WAAUkC,GAAG,UAAYJ,EAAWC,KACvC/B,UAAU,gBAAkB8B,EAAWC,IAAM/B,UAAUkC,GAAG,UAAYJ,EAAWC,IACjF/B,UAAUkC,GAAG,UAAYJ,EAAWC,IAAM,GAEtCE,IACHjC,UAAUkC,GAAG,UAAYJ,EAAWC,IAAM/B,UAAU,gBAAkB8B,EAAWC,UAC1E/B,WAAU,gBAAkB8B,EAAWC,KAK7C/B,UAAUmC,UAAU,0BACvBnC,UAAUoC,cACVpC,UAAUmC,UAAU"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_grid_view.js b/codebase/sources/ext/dhtmlxscheduler_grid_view.js new file mode 100644 index 0000000..d1e7c47 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_grid_view.js @@ -0,0 +1,483 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + scheduler._grid = { + sort_rules:{ + "int":function(a,b, getVal){ return getVal(a)*1 < getVal(b)*1?1:-1; }, + "str":function(a,b, getVal){ return getVal(a) < getVal(b)?1:-1; }, + "date":function(a,b, getVal){ return new Date(getVal(a))< new Date(getVal(b))?1:-1; } + }, + _getObjName:function(name){ + return "grid_"+name; + }, + _getViewName:function(objName){ + return objName.replace(/^grid_/,''); + } + }; +} +)(); +/* +obj={ + name:'grid_name' + fields:[ + { id:"id", label:"Id", width:80, sort:"int/date/str", template:function(start_date, end_date, ev){ return ""}, align:"right/left/center" }, + { id:"text", label:"Text", width:'*', css:"class_name", sort:function(a,b){ return 1 or -1}, valign:'top/bottom/middle' } + ... + ], + from:new Date(0), + to:Date:new Date(9999,1,1), + rowHeight:int, + paging:true/false, + select:true/false +} +*/ + + +scheduler.createGridView=function(obj){ + + var name = obj.name || 'grid'; + var objName = scheduler._grid._getObjName(name); + + scheduler.config[name + '_start'] = obj.from || (new Date(0)); + scheduler.config[name + '_end'] = obj.to || (new Date(9999,1,1)); + + scheduler[objName] = obj; + scheduler[objName].defPadding = 8; + scheduler[objName].columns = scheduler[objName].fields; + scheduler[objName].unit = obj.unit || "month"; + scheduler[objName].step = obj.step || 1; + delete scheduler[objName].fields; + function isValidSize(size){ + return !(size !== undefined && (size*1 != size || size < 0)); + } + + var cols = scheduler[objName].columns; + for(var i=0; i < cols.length; i++){ + if(isValidSize(cols[i].width)) + cols[i].initialWidth = cols[i].width; + if(!isValidSize(cols[i].paddingLeft)) + delete cols[i].paddingLeft; + if(!isValidSize(cols[i].paddingRight)) + delete cols[i].paddingRight; + } + + scheduler[objName].select = obj.select === undefined ? true : obj.select; + if(scheduler.locale.labels[name +'_tab'] === undefined) + scheduler.locale.labels[name +'_tab'] = scheduler[objName].label || scheduler.locale.labels.grid_tab; + + scheduler[objName]._selected_divs = []; + + scheduler.date[name+'_start']=function(d){ + if(scheduler.date[obj.unit+'_start']) + return scheduler.date[obj.unit+'_start'](d); + else + return (d); + }; + scheduler.date['add_' + name] = function(date, inc){ + return scheduler.date.add(date, inc*scheduler[objName].step, scheduler[objName].unit); + }; + + scheduler.templates[name+"_date"] = function(start, end){ + return scheduler.templates.day_date(start)+" - "+scheduler.templates.day_date(end); + }; + scheduler.templates[name + '_full_date'] = function(start,end,ev){ + if (scheduler.isOneDayEvent(ev)) + return this[name + '_single_date'](start); + else + return scheduler.templates.day_date(start)+" – "+scheduler.templates.day_date(end); + }; + scheduler.templates[name + '_single_date'] = function(date){ + return scheduler.templates.day_date(date)+" "+this.event_date(date); + }; + scheduler.templates[name + '_field'] = function(field_name, event){ + return event[field_name]; + }; + + scheduler.attachEvent("onTemplatesReady",function(){ + + scheduler.attachEvent("onDblClick",function(event_id, native_event_object){ + if(this._mode == name){ + scheduler._click.buttons['details'](event_id); + return false; + } + return true; + }); + + scheduler.attachEvent("onClick",function(event_id, native_event_object){ + if(this._mode == name && scheduler[objName].select ){ + scheduler._grid.unselectEvent('', name); + scheduler._grid.selectEvent(event_id, name, native_event_object); + return false; + } + return true; + }); + + scheduler.attachEvent("onSchedulerResize", function() { + if (this._mode == name) { + this[name + '_view'](true); + // timeout used to run code after all onSchedulerResize handlers are finished + window.setTimeout(function(){ + // we need to call event manually because handler return false, and blocks default logic + scheduler.callEvent("onAfterSchedulerResize", []); + },1); + return false; + } + return true; + }); + + + var old = scheduler.render_data; + scheduler.render_data=function(evs){ + if (this._mode == name) + scheduler._grid._fill_grid_tab(objName); + else + return old.apply(this,arguments); + }; + + var old_render_view_data = scheduler.render_view_data; + scheduler.render_view_data=function(){ + if(this._mode == name) { + scheduler._grid._gridScrollTop = scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop; + scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = 0; + scheduler._els["dhx_cal_data"][0].style.overflowY = 'auto'; + } + else { + scheduler._els["dhx_cal_data"][0].style.overflowY = 'auto'; + } + return old_render_view_data.apply(this,arguments); + }; +}); + + + scheduler[name+'_view']=function(mode){ + if (mode){ + var min = null, + max = null; + var view = scheduler[objName]; + if(view.paging){ + min = scheduler.date[name+'_start'](new Date(scheduler._date)); + max = scheduler.date['add_'+name](min, 1); + }else{ + min = scheduler.config[name + '_start']; + max = scheduler.config[name + '_end']; + } + + scheduler._min_date = min; + scheduler._max_date = max; + + scheduler._grid.set_full_view(objName); + + var header = ""; + if(+min > +new Date(0) && +max < +(new Date(9999,1,1))) + header = scheduler.templates[name+"_date"](min, max); + + scheduler._els["dhx_cal_date"][0].innerHTML = header; + + //grid tab activated + scheduler._gridView = objName; + } else { + scheduler._grid._sort_marker = null; + delete scheduler._gridView; + scheduler._rendered=[]; + scheduler[objName]._selected_divs = []; + //grid tab de-activated + } + }; + + +}; + + +scheduler.dblclick_dhx_grid_area=function(){ + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow(); +}; + +if(scheduler._click.dhx_cal_header){ + scheduler._old_header_click = scheduler._click.dhx_cal_header; +} +scheduler._click.dhx_cal_header=function(e){ + if(scheduler._gridView){ + var event = e||window.event; + var params = scheduler._grid.get_sort_params(event, scheduler._gridView); + + scheduler._grid.draw_sort_marker(event.originalTarget || event.srcElement, params.dir); + + scheduler.clear_view(); + scheduler._grid._fill_grid_tab(scheduler._gridView, params); + } + else if(scheduler._old_header_click) + return scheduler._old_header_click.apply(this,arguments); +}; + +scheduler._grid.selectEvent = function(id, view_name, native_event_object){ + if(scheduler.callEvent("onBeforeRowSelect",[id,native_event_object])){ + var objName = scheduler._grid._getObjName(view_name); + + scheduler.for_rendered(id, function(event_div){ + event_div.className += " dhx_grid_event_selected"; + scheduler[objName]._selected_divs.push(event_div); + }); + scheduler._select_id = id; + } +}; + +scheduler._grid._unselectDiv= function(div){ + div.className = div.className.replace(/ dhx_grid_event_selected/,''); +}; +scheduler._grid.unselectEvent = function(id, view_name){ + var objName = scheduler._grid._getObjName(view_name); + if(!objName || !scheduler[objName]._selected_divs) + return; + + if(!id){ + for(var i=0; i<scheduler[objName]._selected_divs.length; i++) + scheduler._grid._unselectDiv(scheduler[objName]._selected_divs[i]); + + scheduler[objName]._selected_divs = []; + + }else{ + for(var i=0; i<scheduler[objName]._selected_divs.length; i++) + if(scheduler[objName]._selected_divs[i].getAttribute('event_id') == id){ + scheduler._grid._unselectDiv(scheduler[objName]._selected_divs[i]); + scheduler[objName]._selected_divs.slice(i,1); + break; + } + + } +}; + +scheduler._grid.get_sort_params = function(event, objName){ + var targ = event.originalTarget || event.srcElement; + var direction = "desc"; + if(targ.className == 'dhx_grid_view_sort') + targ = targ.parentNode; + if(!targ.className || targ.className.indexOf("dhx_grid_sort_asc") == -1) + direction = 'asc'; + + var index = 0; + for(var i =0; i < targ.parentNode.childNodes.length; i++){ + if(targ.parentNode.childNodes[i] == targ){ + index = i; + break; + } + } + + var value = null; + if(scheduler[objName].columns[index].template){ + var template = scheduler[objName].columns[index].template; + value = function(ev){ + return template(ev.start_date, ev.end_date, ev); + }; + }else{ + var field = scheduler[objName].columns[index].id; + if(field == "date") + field = "start_date"; + value = function(ev){ return ev[field]; }; + } + + var rule = scheduler[objName].columns[index].sort; + + if(typeof rule != 'function'){ + rule = scheduler._grid.sort_rules[rule] || scheduler._grid.sort_rules['str']; + } + + return {dir:direction, value:value, rule:rule}; +}; + +scheduler._grid.draw_sort_marker = function(node, direction){ + if(node.className == 'dhx_grid_view_sort') + node = node.parentNode; + + if(scheduler._grid._sort_marker){ + scheduler._grid._sort_marker.className = scheduler._grid._sort_marker.className.replace(/( )?dhx_grid_sort_(asc|desc)/, ''); + scheduler._grid._sort_marker.removeChild(scheduler._grid._sort_marker.lastChild); + } + + node.className += " dhx_grid_sort_"+direction; + scheduler._grid._sort_marker = node; + var html = "<div class='dhx_grid_view_sort' style='left:"+(+node.style.width.replace('px','') -15+node.offsetLeft)+"px'> </div>"; + node.innerHTML += html; + +}; + +scheduler._grid.sort_grid=function(sort){ + + var sort = sort || {dir:'desc', value:function(ev){return ev.start_date;}, rule:scheduler._grid.sort_rules['date']}; + + var events = scheduler.get_visible_events(); + + if(sort.dir == 'desc') + events.sort(function(a,b){return sort.rule(a,b,sort.value);}); + else + events.sort(function(a,b){return -sort.rule(a,b, sort.value);}); + return events; +}; + + + +scheduler._grid.set_full_view = function(mode){ + if (mode){ + var l = scheduler.locale.labels; + var html =scheduler._grid._print_grid_header(mode); + + scheduler._els["dhx_cal_header"][0].innerHTML= html; + scheduler._table_view=true; + scheduler.set_sizes(); + } +}; +scheduler._grid._calcPadding = function(column, parent){ + var padding = (column.paddingLeft !== undefined ? 1*column.paddingLeft : scheduler[parent].defPadding) + + (column.paddingRight !== undefined ? 1*column.paddingRight : scheduler[parent].defPadding); + return padding; +}; + +scheduler._grid._getStyles = function(column, items){ + var cell_style = [], style = ""; + for(var i=0; items[i]; i++ ){ + style = items[i] + ":"; + switch (items[i]){ + case "text-align": + if(column.align) + cell_style.push(style+column.align); + break; + case "vertical-align": + if(column.valign) + cell_style.push(style+column.valign); + break; + case "padding-left": + if(column.paddingLeft !== undefined) + cell_style.push(style+(column.paddingLeft||'0') + "px"); + break; + case "padding-right": + if(column.paddingRight !== undefined) + cell_style.push(style+(column.paddingRight||'0') + "px"); + break; + } + } + return cell_style; +}; + +scheduler._grid._fill_grid_tab = function(objName, sort){ + //get current date + var date = scheduler._date; + //select events for which data need to be printed + var events = scheduler._grid.sort_grid(sort); + + //generate html for the view + var columns = scheduler[objName].columns; + + var html = "<div>"; + var left = -2;//column borders at the same pos as header borders... + for(var i=0; i < columns.length; i++){ + var padding = scheduler._grid._calcPadding(columns[i], objName); + left +=columns[i].width + padding ;// + if(i < columns.length - 1) + html += "<div class='dhx_grid_v_border' style='left:"+(left)+"px'></div>"; + } + html += "</div>"; + html +="<div class='dhx_grid_area'><table>"; + + for (var i=0; i<events.length; i++){ + html += scheduler._grid._print_event_row(events[i], objName); + } + + html +="</table></div>"; + //render html + scheduler._els["dhx_cal_data"][0].innerHTML = html; + scheduler._els["dhx_cal_data"][0].scrollTop = scheduler._grid._gridScrollTop||0; + + var t=scheduler._els["dhx_cal_data"][0].getElementsByTagName("tr"); + + scheduler._rendered=[]; + for (var i=0; i < t.length; i++){ + scheduler._rendered[i]=t[i]; + } + +}; +scheduler._grid._print_event_row = function(ev, objName){ + + var styles = []; + if(ev.color) + styles.push("background:"+ev.color); + if(ev.textColor) + styles.push("color:"+ev.textColor); + if(ev._text_style) + styles.push(ev._text_style); + if(scheduler[objName]['rowHeight']) + styles.push('height:'+scheduler[objName]['rowHeight'] + 'px'); + + var style = ""; + if(styles.length){ + style = "style='"+styles.join(";")+"'"; + } + + var columns = scheduler[objName].columns; + var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + + var html ="<tr class='dhx_grid_event"+(ev_class? ' '+ev_class:'')+"' event_id='"+ev.id+"' " + style + ">"; + + var name = scheduler._grid._getViewName(objName); + var availStyles = ["text-align", "vertical-align", "padding-left","padding-right"]; + for(var i =0; i < columns.length; i++){ + var value; + if(columns[i].template){ + value = columns[i].template(ev.start_date, ev.end_date, ev); + }else if(columns[i].id == 'date') { + value = scheduler.templates[name + '_full_date'](ev.start_date, ev.end_date, ev); + }else if(columns[i].id == 'start_date' || columns[i].id == 'end_date' ){ + value = scheduler.templates[name + '_single_date'](ev[columns[i].id]); + }else{ + value = scheduler.templates[name + '_field'](columns[i].id, ev); + } + + var cell_style = scheduler._grid._getStyles(columns[i], availStyles); + + var className = columns[i].css ? (" class=\""+columns[i].css+"\"") : ""; + + html+= "<td style='width:"+ (columns[i].width )+"px;"+cell_style.join(";")+"' "+className+">"+value+"</td>"; + + } + html+="<td class='dhx_grid_dummy'></td></tr>"; + + return html; +}; + +scheduler._grid._print_grid_header = function(objName){ + var head = "<div class='dhx_grid_line'>"; + + var columns = scheduler[objName].columns; + var widths = []; + + var unsized_columns = columns.length; + var avail_width = scheduler._obj.clientWidth - 2*columns.length -20;//-20 for possible scrollbar, -length for borders + for(var ind=0; ind < columns.length; ind++){ + + var val = columns[ind].initialWidth*1; + if(!isNaN(val) && columns[ind].initialWidth !== '' && columns[ind].initialWidth !== null && typeof columns[ind].initialWidth != 'boolean'){ + + unsized_columns--; + avail_width -= val; + widths[ind] = val; + }else { + widths[ind] = null; + } + } + + var unsized_width = Math.floor(avail_width / unsized_columns); + var availStyles = ["text-align", "padding-left","padding-right"]; + for(var i=0; i < columns.length; i++){ + var column_width = !widths[i] ? unsized_width : widths[i]; + columns[i].width = column_width - scheduler._grid._calcPadding(columns[i], objName); + var cell_style = scheduler._grid._getStyles(columns[i], availStyles); + head += "<div style='width:"+(columns[i].width -1)+"px;"+cell_style.join(";")+"'>" + (columns[i].label === undefined ? columns[i].id : columns[i].label) + "</div>"; + } + head +="</div>"; + + return head; +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map b/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map new file mode 100644 index 0000000..f0f702b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_grid_view.js.map","sources":["dhtmlxscheduler_grid_view.js"],"names":["scheduler","_grid","sort_rules","int","a","b","getVal","str","date","Date","_getObjName","name","_getViewName","objName","replace","createGridView","obj","isValidSize","size","undefined","config","from","to","defPadding","columns","fields","unit","step","cols","i","length","width","initialWidth","paddingLeft","paddingRight","select","locale","labels","label","grid_tab","_selected_divs","d","inc","add","templates","start","end","day_date","ev","isOneDayEvent","this","event_date","field_name","event","attachEvent","event_id","_mode","_click","buttons","native_event_object","unselectEvent","selectEvent","window","setTimeout","callEvent","old","render_data","apply","arguments","_fill_grid_tab","old_render_view_data","render_view_data","_gridScrollTop","_els","childNodes","scrollTop","style","overflowY","mode","min","max","view","paging","_date","_min_date","_max_date","set_full_view","header","innerHTML","_gridView","_sort_marker","_rendered","dblclick_dhx_grid_area","readonly","dblclick_create","addEventNow","dhx_cal_header","_old_header_click","e","params","get_sort_params","draw_sort_marker","originalTarget","srcElement","dir","clear_view","id","view_name","for_rendered","event_div","className","push","_select_id","_unselectDiv","div","getAttribute","slice","targ","direction","parentNode","indexOf","index","value","template","start_date","end_date","field","rule","sort","node","removeChild","lastChild","html","offsetLeft","sort_grid","events","get_visible_events","_print_grid_header","_table_view","set_sizes","_calcPadding","column","parent","padding","_getStyles","items","cell_style","align","valign","left","_print_event_row","t","getElementsByTagName","styles","color","textColor","_text_style","join","ev_class","event_class","availStyles","css","head","widths","unsized_columns","avail_width","_obj","clientWidth","ind","val","isNaN","unsized_width","Math","floor","column_width"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_html_templates.js b/codebase/sources/ext/dhtmlxscheduler_html_templates.js new file mode 100644 index 0000000..713c6d4 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_html_templates.js @@ -0,0 +1,22 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady",function(){ + var els = document.body.getElementsByTagName("DIV"); + for (var i=0; i < els.length; i++) { + var cs = els[i].className||""; + cs = cs.split(":"); + if (cs.length == 2 && cs[0] == "template"){ + var code = "return \""+(els[i].innerHTML||"").replace(/\"/g,"\\\"").replace(/[\n\r]+/g,"")+"\";"; + code = unescape(code).replace(/\{event\.([a-z]+)\}/g,function(all,mask){ + return '"+ev.'+mask+'+"'; + }); + scheduler.templates[cs[1]]=Function("start","end","ev",code); + els[i].style.display='none'; + } + } +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map b/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map new file mode 100644 index 0000000..e10ce27 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_html_templates.js.map","sources":["dhtmlxscheduler_html_templates.js"],"names":["scheduler","attachEvent","els","document","body","getElementsByTagName","i","length","cs","className","split","code","innerHTML","replace","unescape","all","mask","templates","Function","style","display"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WAExC,IAAK,GADDC,GAAMC,SAASC,KAAKC,qBAAqB,OACpCC,EAAE,EAAGA,EAAIJ,EAAIK,OAAQD,IAAK,CAClC,GAAIE,GAAKN,EAAII,GAAGG,WAAW,EAE3B,IADAD,EAAKA,EAAGE,MAAM,KACG,GAAbF,EAAGD,QAAwB,YAATC,EAAG,GAAiB,CACzC,GAAIG,GAAO,YAAaT,EAAII,GAAGM,WAAW,IAAIC,QAAQ,MAAM,OAAQA,QAAQ,WAAW,IAAI,IAC3FF,GAAOG,SAASH,GAAME,QAAQ,uBAAuB,SAASE,EAAIC,GACjE,MAAO,QAAQA,EAAK,OAErBhB,UAAUiB,UAAUT,EAAG,IAAIU,SAAS,QAAQ,MAAM,KAAKP,GACvDT,EAAII,GAAGa,MAAMC,QAAQ"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_key_nav.js b/codebase/sources/ext/dhtmlxscheduler_key_nav.js new file mode 100644 index 0000000..33fb417 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_key_nav.js @@ -0,0 +1,115 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +//Initial idea and implementation by Steve MC +scheduler._temp_key_scope = function (){ + +scheduler.config.key_nav = true; + +var date; // used for copy and paste operations +var section; // used for copy and paste operations +var isCopy = null; + + +scheduler.attachEvent("onMouseMove", function(id,e){ + date = scheduler.getActionData(e).date; + section = scheduler.getActionData(e).section; +}); + +function clear_event_after(ev){ + delete ev.rec_type; delete ev.rec_pattern; + delete ev.event_pid; delete ev.event_length; +} +scheduler._make_pasted_event = function(ev){ + var event_duration = ev.end_date-ev.start_date; + + var copy = scheduler._lame_copy({}, ev); + clear_event_after(copy); + copy.start_date = new Date(date); + copy.end_date = new Date(copy.start_date.valueOf() + event_duration); + + if(section){ + var state = scheduler.getState().mode, + property = null; + + if(scheduler.matrix[state]){ + property = scheduler.matrix[state].y_property; + }else if(scheduler._props[state]){ + property = scheduler._props[state].property; + } + copy[property] = section; + } + return copy; +}; +scheduler._do_paste = function(is_copy, modified_ev, original_ev){ + scheduler.addEvent(modified_ev); + scheduler.callEvent("onEventPasted", [is_copy, modified_ev, original_ev]); +}; + +scheduler._is_key_nav_active = function(){ + if(this._is_initialized() && !this._is_lightbox_open() && this.config.key_nav){ + return true; + } + return false; +}; + +dhtmlxEvent(document,(_isOpera?"keypress":"keydown"),function(e){ + if(!scheduler._is_key_nav_active()) return true; + + e=e||event; + + if (e.keyCode == 37 || e.keyCode == 39) { // Left, Right arrows + e.cancelBubble = true; + + var next = scheduler.date.add(scheduler._date,(e.keyCode == 37 ? -1 : 1 ),scheduler._mode); + scheduler.setCurrentView(next); + return true; + } + + var select_id = scheduler._select_id; + if (e.ctrlKey && e.keyCode == 67) { // CTRL+C + if (select_id) { + scheduler._buffer_id = select_id; + isCopy = true; + scheduler.callEvent("onEventCopied", [scheduler.getEvent(select_id)]); + } + return true; + } + if (e.ctrlKey && e.keyCode == 88) { // CTRL+X + if (select_id) { + isCopy = false; + scheduler._buffer_id = select_id; + var ev = scheduler.getEvent(select_id); + scheduler.updateEvent(ev.id); + scheduler.callEvent("onEventCut", [ev]); + } + } + + if (e.ctrlKey && e.keyCode == 86) { // CTRL+V + var ev = scheduler.getEvent(scheduler._buffer_id); + if (ev) { + var new_ev = scheduler._make_pasted_event(ev); + if (isCopy) { + new_ev.id = scheduler.uid(); + scheduler._do_paste(isCopy, new_ev, ev); + } + else { // cut operation + var res = scheduler.callEvent("onBeforeEventChanged",[new_ev, e, false, ev]); + if (res) { + scheduler._do_paste(isCopy, new_ev, ev); + isCopy = true; // switch to copy after first paste operation + } + } + + } + return true; + } + +}); + +}; +scheduler._temp_key_scope(); diff --git a/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map b/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map new file mode 100644 index 0000000..4aa116c --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_key_nav.js.map","sources":["dhtmlxscheduler_key_nav.js"],"names":["scheduler","_temp_key_scope","clear_event_after","ev","rec_type","rec_pattern","event_pid","event_length","config","key_nav","date","section","isCopy","attachEvent","id","e","getActionData","_make_pasted_event","event_duration","end_date","start_date","copy","_lame_copy","Date","valueOf","state","getState","mode","property","matrix","y_property","_props","_do_paste","is_copy","modified_ev","original_ev","addEvent","callEvent","_is_key_nav_active","this","_is_initialized","_is_lightbox_open","dhtmlxEvent","document","_isOpera","event","keyCode","cancelBubble","next","add","_date","_mode","setCurrentView","select_id","_select_id","ctrlKey","_buffer_id","getEvent","updateEvent","new_ev","uid","res"],"mappings":"AACAA,UAAUC,gBAAkB,WAc5B,QAASC,GAAkBC,SACnBA,GAAGC,eAAiBD,GAAGE,kBACvBF,GAAGG,gBAAkBH,GAAGI,aAdhCP,UAAUQ,OAAOC,SAAU,CAE3B,IAAIC,GACAC,EACAC,EAAS,IAGbZ,WAAUa,YAAY,cAAe,SAASC,EAAGC,GAChDL,EAAOV,UAAUgB,cAAcD,GAAGL,KAClCC,EAAUX,UAAUgB,cAAcD,GAAGJ,UAOtCX,UAAUiB,mBAAqB,SAASd,GACvC,GAAIe,GAAiBf,EAAGgB,SAAShB,EAAGiB,WAEhCC,EAAOrB,UAAUsB,cAAenB,EAKpC,IAJAD,EAAkBmB,GAClBA,EAAKD,WAAa,GAAIG,MAAKb,GAC3BW,EAAKF,SAAW,GAAII,MAAKF,EAAKD,WAAWI,UAAYN,GAElDP,EAAQ,CACV,GAAIc,GAAQzB,UAAU0B,WAAWC,KAChCC,EAAW,IAET5B;UAAU6B,OAAOJ,GACnBG,EAAW5B,UAAU6B,OAAOJ,GAAOK,WAC3B9B,UAAU+B,OAAON,KACzBG,EAAW5B,UAAU+B,OAAON,GAAOG,UAEpCP,EAAKO,GAAYjB,EAElB,MAAOU,IAERrB,UAAUgC,UAAY,SAASC,EAASC,EAAaC,GACpDnC,UAAUoC,SAASF,GACnBlC,UAAUqC,UAAU,iBAAkBJ,EAASC,EAAaC,KAG7DnC,UAAUsC,mBAAqB,WAC9B,MAAGC,MAAKC,oBAAsBD,KAAKE,qBAAuBF,KAAK/B,OAAOC,SAC9D,GAED,GAGRiC,YAAYC,SAAUC,SAAS,WAAW,UAAW,SAAS7B,GAC7D,IAAIf,UAAUsC,qBAAsB,OAAO,CAI3C,IAFAvB,EAAEA,GAAG8B,MAEY,IAAb9B,EAAE+B,SAA8B,IAAb/B,EAAE+B,QAAe,CACvC/B,EAAEgC,cAAe,CAEjB;GAAIC,GAAOhD,UAAUU,KAAKuC,IAAIjD,UAAUkD,MAAoB,IAAbnC,EAAE+B,QAAgB,GAAK,EAAI9C,UAAUmD,MAEpF,OADAnD,WAAUoD,eAAeJ,IAClB,EAGR,GAAIK,GAAYrD,UAAUsD,UAC1B,IAAIvC,EAAEwC,SAAwB,IAAbxC,EAAE+B,QAMlB,MALIO,KACHrD,UAAUwD,WAAaH,EACvBzC,GAAS,EACTZ,UAAUqC,UAAU,iBAAkBrC,UAAUyD,SAASJ,OAEnD,CAER,IAAItC,EAAEwC,SAAwB,IAAbxC,EAAE+B,SACdO,EAAW,CACdzC,GAAS,EACTZ,UAAUwD,WAAaH,CACvB,IAAIlD,GAAKH,UAAUyD,SAASJ,EAC5BrD,WAAU0D,YAAYvD,EAAGW,IACzBd,UAAUqC,UAAU,cAAelC,IAIrC,GAAIY,EAAEwC,SAAwB,IAAbxC,EAAE+B,QAAe,CACjC,GAAI3C,GAAKH,UAAUyD,SAASzD,UAAUwD,WACtC;GAAIrD,EAAI,CACP,GAAIwD,GAAS3D,UAAUiB,mBAAmBd,EAC1C,IAAIS,EACH+C,EAAO7C,GAAKd,UAAU4D,MACtB5D,UAAUgC,UAAUpB,EAAQ+C,EAAQxD,OAEhC,CACJ,GAAI0D,GAAM7D,UAAUqC,UAAU,wBAAwBsB,EAAQ5C,GAAG,EAAOZ,GACpE0D,KACH7D,UAAUgC,UAAUpB,EAAQ+C,EAAQxD,GACpCS,GAAS,IAKZ,OAAO,MAMTZ,UAAUC"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_layer.js b/codebase/sources/ext/dhtmlxscheduler_layer.js new file mode 100644 index 0000000..dcaa362 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_layer.js @@ -0,0 +1,407 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady",function(){ + + this.layers.sort(function(a, b){ + return a.zIndex - b.zIndex; + }); + + scheduler._dp_init=function(dp){ + dp._methods=["_set_event_text_style","","changeEventId","deleteEvent"]; + + this.attachEvent("onEventAdded",function(id){ + if (!this._loading && this.validId(id) && this.getEvent(id) && this.getEvent(id).layer == dp.layer) + dp.setUpdated(id,true,"inserted"); + }); + this.attachEvent("onBeforeEventDelete",function(id){ + if(this.getEvent(id) && this.getEvent(id).layer == dp.layer) { + if (!this.validId(id)) return; + var z=dp.getState(id); + + if (z=="inserted" || this._new_event) { dp.setUpdated(id,false); return true; } + if (z=="deleted") return false; + if (z=="true_deleted") return true; + + dp.setUpdated(id,true,"deleted"); + return false; + } + else return true; + }); + this.attachEvent("onEventChanged",function(id){ + if (!this._loading && this.validId(id) && this.getEvent(id) && this.getEvent(id).layer == dp.layer) + dp.setUpdated(id,true,"updated"); + }); + + dp._getRowData=function(id,pref){ + var ev=this.obj.getEvent(id); + var data = {}; + + for (var a in ev){ + if (a.indexOf("_")===0) continue; + if (ev[a] && ev[a].getUTCFullYear) //not very good, but will work + data[a] = this.obj.templates.xml_format(ev[a]); + else + data[a] = ev[a]; + } + return data; + }; + dp._clearUpdateFlag=function(){}; + + dp.attachEvent("insertCallback", scheduler._update_callback); + dp.attachEvent("updateCallback", scheduler._update_callback); + dp.attachEvent("deleteCallback", function(upd, id) { + this.obj.setUserData(id, this.action_param, "true_deleted"); + this.obj.deleteEvent(id); + }); + }; + + (function() { + var _cloneObj = function(obj){ + if(obj === null || typeof(obj) != 'object') + return obj; + var temp = new obj.constructor(); + for(var key in obj) + temp[key] = _cloneObj(obj[key]); + return temp; + }; + + scheduler._dataprocessors = []; + scheduler._layers_zindex = {}; + for(var i=0; i<scheduler.layers.length; i++) { + scheduler.config['lightbox_'+scheduler.layers[i].name] = { }; + scheduler.config['lightbox_'+scheduler.layers[i].name].sections = _cloneObj(scheduler.config.lightbox.sections); + scheduler._layers_zindex[scheduler.layers[i].name] = scheduler.config.inital_layer_zindex||5 + i*3; + if(scheduler.layers[i].url) { + var dp = new dataProcessor(scheduler.layers[i].url); + dp.layer = scheduler.layers[i].name; + scheduler._dataprocessors.push(dp); + scheduler._dataprocessors[i].init(scheduler); + } + if(scheduler.layers[i].isDefault) + scheduler.defaultLayer = scheduler.layers[i].name; + } + })(); + + + scheduler.showLayer = function(tlayer) { + this.toggleLayer(tlayer, true); + }; + + scheduler.hideLayer = function(tlayer) { + this.toggleLayer(tlayer, false); + }; + + scheduler.toggleLayer = function(tlayer, visible) { // visible is optional + var layer = this.getLayer(tlayer); + + if(typeof visible != 'undefined') + layer.visible = !!visible; + else + layer.visible = !layer.visible; + + this.setCurrentView(this._date, this._mode); + }; + + scheduler.getLayer = function(tlayer) { // either string with layer name or event with layer property + var layer, + layer_name; + if(typeof tlayer == 'string') + layer_name = tlayer; + if(typeof tlayer == 'object') + layer_name = tlayer.layer; + for (var i=0; i<scheduler.layers.length; i++) { + if(scheduler.layers[i].name == layer_name) + layer = scheduler.layers[i]; + } + return layer; + }; + + scheduler.attachEvent("onBeforeLightbox", function (event_id){ + var ev = this.getEvent(event_id); + this.config.lightbox.sections = this.config['lightbox_'+ev.layer].sections; + scheduler.resetLightbox(); + return true; + }); + + scheduler.attachEvent("onClick", function (event_id, native_event_object){ + var ev = scheduler.getEvent(event_id); + return !scheduler.getLayer(ev.layer).noMenu; + }); + + scheduler.attachEvent('onEventCollision', function(ev, evs) { + var layer = this.getLayer(ev); + if(!layer.checkCollision) + return false; + var count = 0; + for(var i = 0; i<evs.length; i++) { + if(evs[i].layer == layer.name && evs[i].id != ev.id) + count++; + } + return (count >= scheduler.config.collision_limit); + }); + + scheduler.addEvent=function(start_date,end_date,text,id,extra_data){ + var ev=start_date; + if (arguments.length!=1){ + ev=extra_data||{}; + ev.start_date=start_date; + ev.end_date=end_date; + ev.text=text; + ev.id=id; + ev.layer = this.defaultLayer; + } + ev.id = ev.id||scheduler.uid(); + ev.text = ev.text||""; + + + if (typeof ev.start_date == "string") ev.start_date=this.templates.api_date(ev.start_date); + if (typeof ev.end_date == "string") ev.end_date=this.templates.api_date(ev.end_date); + ev._timed=this.isOneDayEvent(ev); + + var is_new=!this._events[ev.id]; + this._events[ev.id]=ev; + this.event_updated(ev); + if (!this._loading) + this.callEvent(is_new?"onEventAdded":"onEventChanged",[ev.id,ev]); + }; + + this._evs_layer = {}; + for (var i = 0; i < this.layers.length; i++) { // array in object for each layer + this._evs_layer[this.layers[i].name] = []; + } + + scheduler.addEventNow=function(start,end,e){ + var base = {}; + if (typeof start == "object"){ + base = start; + start = null; + } + + var d = (this.config.event_duration||this.config.time_step)*60000; + if (!start) start = Math.round((scheduler._currentDate()).valueOf()/d)*d; + var start_date = new Date(start); + if (!end){ + var start_hour = this.config.first_hour; + if (start_hour > start_date.getHours()){ + start_date.setHours(start_hour); + start = start_date.valueOf(); + } + end = start+d; + } + + + base.start_date = base.start_date||start_date; + base.end_date = base.end_date||new Date(end); + base.text = base.text||this.locale.labels.new_event; + base.id = this._drag_id = this.uid(); + base.layer = this.defaultLayer; + this._drag_mode="new-size"; + + this._loading=true; + this.addEvent(base); + this.callEvent("onEventCreated",[this._drag_id,e]); + this._loading=false; + + this._drag_event={}; //dummy , to trigger correct event updating logic + this._on_mouse_up(e); + }; + + scheduler._t_render_view_data = function(events) { // helper + if (this.config.multi_day && !this._table_view) { + var tvs = []; + var tvd = []; + for (var k = 0; k < events.length; k++) { + if (events[k]._timed) + tvs.push(events[k]); + else + tvd.push(events[k]); + } + this._table_view = true; + this.render_data(tvd); + this._table_view = false; + this.render_data(tvs); + } + else + this.render_data(events); + }; + + scheduler.render_view_data = function(){ + if (this._not_render) { + this._render_wait = true; + return; + } + this._render_wait = false; + + this.clear_view(); + + this._evs_layer = {}; + for (var i = 0; i < this.layers.length; i++) { // array in object for each layer + this._evs_layer[this.layers[i].name] = []; + } + + var evs = this.get_visible_events(); + for (var i = 0; i < evs.length; i++) { // filling layer arrays with events + if(this._evs_layer[evs[i].layer]) + this._evs_layer[evs[i].layer].push(evs[i]); + } + + if(this._mode == 'month') { // old logic is used + var tevs = []; + for (var i = 0; i < this.layers.length; i++) { + if (this.layers[i].visible) + tevs = tevs.concat(this._evs_layer[this.layers[i].name]); + } + this._t_render_view_data(tevs); + } + else { // week, day; should use new logic + for (var i = 0; i < this.layers.length; i++) { + if (this.layers[i].visible) { + var evs_layer = this._evs_layer[this.layers[i].name]; + this._t_render_view_data(evs_layer); + } + } + } + }; + + scheduler._render_v_bar=function(ev,x,y,w,h,style,contentA,contentB,bottom){ + var id = ev.id; + if(contentA.indexOf('<div class=') == -1) + contentA = (scheduler.templates['event_header_'+ev.layer])?scheduler.templates['event_header_'+ev.layer](ev.start_date,ev.end_date,ev):contentA; + if(contentB.indexOf('<div class=') == -1) + contentB = (scheduler.templates['event_text_'+ev.layer])?scheduler.templates['event_text_'+ev.layer](ev.start_date,ev.end_date,ev):contentB; + + var d=document.createElement("DIV"); + + + var cs = "dhx_cal_event"; + var cse = (scheduler.templates['event_class_'+ev.layer])?scheduler.templates['event_class_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_class(ev.start_date,ev.end_date,ev); + if (cse) cs=cs+" "+cse; + + var html='<div event_id="'+id+'" class="'+cs+'" style="position:absolute; top:'+y+'px; left:'+x+'px; width:'+(w-4)+'px; height:'+h+'px;'+(style||"")+'">'; + html+='<div class="dhx_header" style=" width:'+(w-6)+'px;" > </div>'; + html+='<div class="dhx_title">'+contentA+'</div>'; + html+='<div class="dhx_body" style=" width:'+(w-(this._quirks?4:14))+'px; height:'+(h-(this._quirks?20:30))+'px;">'+contentB+'</div>'; + html+='<div class="dhx_footer" style=" width:'+(w-8)+'px;'+(bottom?' margin-top:-1px;':'')+'" ></div></div>'; + + d.innerHTML=html; + d.style.zIndex = 100; + return d.firstChild; + }; + + scheduler.render_event_bar=function(ev){ + var parent=this._els["dhx_cal_data"][0]; + + var x=this._colsS[ev._sday]; + var x2=this._colsS[ev._eday]; + if (x2==x) x2=this._colsS[ev._eday+1]; + var hb = this.xy.bar_height; + + var y=this._colsS.heights[ev._sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)+ev._sorder*hb; + + var d=document.createElement("DIV"); + var cs = ev._timed?"dhx_cal_event_clear":"dhx_cal_event_line"; + var cse = (scheduler.templates['event_class_'+ev.layer])?scheduler.templates['event_class_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_class(ev.start_date,ev.end_date,ev); + if (cse) cs=cs+" "+cse; + + var html='<div event_id="'+ev.id+'" class="'+cs+'" style="position:absolute; top:'+y+'px; left:'+x+'px; width:'+(x2-x-15)+'px;'+(ev._text_style||"")+'">'; + + if (ev._timed) + html+=(scheduler.templates['event_bar_date_'+ev.layer])?scheduler.templates['event_bar_date_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_bar_date(ev.start_date,ev.end_date,ev); + html+=( (scheduler.templates['event_bar_text_'+ev.layer])?scheduler.templates['event_bar_text_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev) + '</div>)'); + html+='</div>'; + + d.innerHTML=html; + + this._rendered.push(d.firstChild); + parent.appendChild(d.firstChild); + }; + + scheduler.render_event=function(ev){ + var menu = scheduler.xy.menu_width; + if(scheduler.getLayer(ev.layer).noMenu) + menu = 0; + + if (ev._sday<0) return; //can occur in case of recurring event during time shift + var parent=scheduler.locate_holder(ev._sday); + if (!parent) return; //attempt to render non-visible event + var sm = ev.start_date.getHours()*60+ev.start_date.getMinutes(); + var em = (ev.end_date.getHours()*60+ev.end_date.getMinutes())||(scheduler.config.last_hour*60); + + var top = (Math.round((sm*60*1000-this.config.first_hour*60*60*1000)*this.config.hour_size_px/(60*60*1000)))%(this.config.hour_size_px*24)+1; //42px/hour + var height = Math.max(scheduler.xy.min_event_height,(em-sm)*this.config.hour_size_px/60)+1; //42px/hour + //var height = Math.max(25,Math.round((ev.end_date.valueOf()-ev.start_date.valueOf())*(this.config.hour_size_px+(this._quirks?1:0))/(60*60*1000))); //42px/hour + var width=Math.floor((parent.clientWidth-menu)/ev._count); + var left=ev._sorder*width+1; + if (!ev._inner) width=width*(ev._count-ev._sorder); + + + + var d=this._render_v_bar(ev.id,menu+left,top,width,height,ev._text_style,scheduler.templates.event_header(ev.start_date,ev.end_date,ev),scheduler.templates.event_text(ev.start_date,ev.end_date,ev)); + + this._rendered.push(d); + parent.appendChild(d); + + left=left+parseInt(parent.style.left,10)+menu; + + top+=this._dy_shift; //corrupt top, to include possible multi-day shift + d.style.zIndex = this._layers_zindex[ev.layer]; + + if (this._edit_id==ev.id){ + d.style.zIndex = parseInt(d.style.zIndex)+1; //fix overlapping issue + var new_zIndex = d.style.zIndex; + width=Math.max(width-4,scheduler.xy.editor_width); + var d=document.createElement("DIV"); + d.setAttribute("event_id",ev.id); + this.set_xy(d,width,height-20,left,top+14); + d.className="dhx_cal_editor"; + d.style.zIndex = new_zIndex; + var d2=document.createElement("DIV"); + this.set_xy(d2,width-6,height-26); + d2.style.cssText+=";margin:2px 2px 2px 2px;overflow:hidden;"; + + + d2.style.zIndex = new_zIndex; + d.appendChild(d2); + this._els["dhx_cal_data"][0].appendChild(d); + this._rendered.push(d); + + d2.innerHTML="<textarea class='dhx_cal_editor'>"+ev.text+"</textarea>"; + if (this._quirks7) d2.firstChild.style.height=height-12+"px"; //IEFIX + this._editor=d2.firstChild; + this._editor.onkeypress=function(e){ + if ((e||event).shiftKey) return true; + var code=(e||event).keyCode; + if (code==scheduler.keys.edit_save) scheduler.editStop(true); + if (code==scheduler.keys.edit_cancel) scheduler.editStop(false); + }; + this._editor.onselectstart=function(e){ (e||event).cancelBubble=true; return true; }; + d2.firstChild.focus(); + //IE and opera can add x-scroll during focusing + this._els["dhx_cal_data"][0].scrollLeft=0; + d2.firstChild.select(); + } + if (this._select_id==ev.id){ + d.style.zIndex = parseInt(d.style.zIndex)+1; //fix overlapping issue + var icons=this.config["icons_"+((this._edit_id==ev.id)?"edit":"select")]; + var icons_str=""; + for (var i=0; i<icons.length; i++) + icons_str+="<div class='dhx_menu_icon "+icons[i]+"' title='"+this.locale.labels[icons[i]]+"'></div>"; + var obj = this._render_v_bar(ev.id,left-menu+1,top,menu,icons.length*20+26,"","<div class='dhx_menu_head'></div>",icons_str,true); + obj.style.left=left-menu+1; + obj.style.zIndex = d.style.zIndex; + this._els["dhx_cal_data"][0].appendChild(obj); + this._rendered.push(obj); + } + + }; + + scheduler.filter_agenda = function(id, event) { + var layer = scheduler.getLayer(event.layer); + return (layer && layer.visible); + }; +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_layer.js.map b/codebase/sources/ext/dhtmlxscheduler_layer.js.map new file mode 100644 index 0000000..0483f36 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_layer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_layer.js.map","sources":["dhtmlxscheduler_layer.js"],"names":["scheduler","attachEvent","this","layers","sort","a","b","zIndex","_dp_init","dp","_methods","id","_loading","validId","getEvent","layer","setUpdated","z","getState","_new_event","_getRowData","ev","obj","data","indexOf","getUTCFullYear","templates","xml_format","_clearUpdateFlag","_update_callback","upd","setUserData","action_param","deleteEvent","_cloneObj","temp","constructor","key","_dataprocessors","_layers_zindex","i","length","config","name","sections","lightbox","inital_layer_zindex","url","dataProcessor","push","init","isDefault","defaultLayer","showLayer","tlayer","toggleLayer","hideLayer","visible","getLayer","setCurrentView","_date","_mode","layer_name","event_id","resetLightbox","noMenu","evs","checkCollision","count","collision_limit","addEvent","start_date","end_date","text","extra_data","arguments","uid","api_date","_timed","isOneDayEvent","is_new","_events","event_updated","callEvent","_evs_layer","addEventNow","start","end","e","base","d","event_duration","time_step","Math","round","_currentDate","valueOf","Date","start_hour","first_hour","getHours","setHours","locale","labels","new_event","_drag_id","_drag_mode","_drag_event","_on_mouse_up","_t_render_view_data","events","multi_day","_table_view","tvs","tvd","k","render_data","render_view_data","_not_render","_render_wait","clear_view","get_visible_events","tevs","concat","evs_layer","_render_v_bar","x","y","w","h","style","contentA","contentB","bottom","document","createElement","cs","cse","event_class","html","_quirks","innerHTML","firstChild","render_event_bar","parent","_els","_colsS","_sday","x2","_eday","hb","xy","bar_height","heights","_sweek","height","month_scale_height","_sorder","_text_style","event_bar_date","event_bar_text","_rendered","appendChild","render_event","menu","menu_width","locate_holder","sm","getMinutes","em","last_hour","top","hour_size_px","max","min_event_height","width","floor","clientWidth","_count","left","_inner","event_header","event_text","parseInt","_dy_shift","_edit_id","new_zIndex","editor_width","setAttribute","set_xy","className","d2","cssText","_quirks7","_editor","onkeypress","event","shiftKey","code","keyCode","keys","edit_save","editStop","edit_cancel","onselectstart","cancelBubble","focus","scrollLeft","select","_select_id","icons","icons_str","filter_agenda"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_limit.js b/codebase/sources/ext/dhtmlxscheduler_limit.js new file mode 100644 index 0000000..e56abc5 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_limit.js @@ -0,0 +1,965 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.limit_start = null; +scheduler.config.limit_end = null; +scheduler.config.limit_view = false; +scheduler.config.check_limits = true; +scheduler.config.mark_now = true; +scheduler.config.display_marked_timespans = true; + +scheduler._temp_limit_scope = function(){ + var before = null; + var dhx_time_block = "dhx_time_block"; + var default_timespan_type = "default"; + var fix_options = function(options, days, zones) { + if (days instanceof Date && zones instanceof Date) { + options.start_date = days; + options.end_date = zones; + } else { + options.days = days; + options.zones = zones; + } + return options; + }; + var get_resulting_options = function(days, zones, sections) { + var options = (typeof days == "object") ? days : { days: days }; + options.type = dhx_time_block; + options.css = ""; + if (zones) { + if (sections) + options.sections = sections; + options = fix_options(options, days, zones); + } + return options; + }; + scheduler.blockTime = function(days, zones, sections){ + var options = get_resulting_options(days, zones, sections); + return scheduler.addMarkedTimespan(options); + }; + scheduler.unblockTime = function(days, zones, sections) { + zones = zones || "fullday"; + var options = get_resulting_options(days, zones, sections); + return scheduler.deleteMarkedTimespan(options); + }; + scheduler.attachEvent("onBeforeViewChange",function(om,od,nm,nd){ + if (scheduler.config.limit_view){ + nd = nd||od; nm = nm||om; + if (nd.valueOf()>scheduler.config.limit_end.valueOf() || this.date.add(nd,1,nm)<=scheduler.config.limit_start.valueOf()){ + setTimeout(function(){ + scheduler.setCurrentView((od || scheduler.config.limit_start), nm); + },1); + return false; + } + } + return true; + }); + scheduler.checkInMarkedTimespan = function(ev, timespan_type, on_overlap){ + timespan_type = timespan_type || default_timespan_type; + + var res = true; + var temp_start_date = new Date(ev.start_date.valueOf()); + var temp_end_date = scheduler.date.add(temp_start_date, 1, "day"); + var timespans = scheduler._marked_timespans; + for (; temp_start_date < ev.end_date; temp_start_date = scheduler.date.date_part(temp_end_date), temp_end_date = scheduler.date.add(temp_start_date, 1, "day") ) { + var day_value = +scheduler.date.date_part( new Date(temp_start_date) ); // the first part of event not necessarily contains only date part + var day_index = temp_start_date.getDay(); + + var zones = getZones(ev, timespans, day_index, day_value, timespan_type); + if (zones){ + for (var i = 0; i < zones.length; i+=2) { + + // they may change for new event if it passes limit zone + var sm = scheduler._get_zone_minutes(temp_start_date); + var em = ( ev.end_date>temp_end_date || ev.end_date.getDate() != temp_start_date.getDate() ) ? 1440 : scheduler._get_zone_minutes(ev.end_date); + + var sz = zones[i]; + var ez = zones[i+1]; + if (sz<em && ez>sm) { + if(typeof on_overlap == "function"){ + //handler allows to cancel overlapping + //actually needed only to keep default behavior of limits + res = on_overlap(ev, sm, em, sz, ez);//event object, event start/end minutes in 'zones' format, zone start/end minutes + }else{ + res = false; + } + if(!res) + break; + } + } + } + } + return !res; + }; + var blocker = scheduler.checkLimitViolation = function(event){ + if(!event) + return true; + if (!scheduler.config.check_limits) + return true; + var s = scheduler; + var c = s.config; + var evs = []; + if (event.rec_type) { + var dates = scheduler.getRecDates(event); + for(var i=0; i < dates.length; i++){ + var ev = scheduler._copy_event(event); + scheduler._lame_copy(ev, dates[i]); + evs.push(ev); + } + + } else { + evs = [event]; + } + + var complete_res = true; + for (var p=0; p<evs.length; p++) { + var res = true; + var ev = evs[p]; + // Event could have old _timed property (e.g. we are creating event with DND on timeline view and crossed day) + ev._timed = scheduler.isOneDayEvent(ev); + + res = (c.limit_start && c.limit_end) ? (ev.start_date.valueOf() >= c.limit_start.valueOf() && ev.end_date.valueOf() <= c.limit_end.valueOf()) : true; + if (res){ + res = !scheduler.checkInMarkedTimespan(ev, dhx_time_block, function(ev, sm, em, sz, ez){ + //try crop event to allow placing + var allow = true; + if (sm<=ez && sm >=sz){ + if (ez == 24*60 || em<ez){ + allow = false; + } + if(ev._timed && s._drag_id && s._drag_mode == "new-size"){ + ev.start_date.setHours(0); + ev.start_date.setMinutes(ez); + } + else { + allow = false; + } + } + if ((em>=sz && em<ez) || (sm < sz && em > ez)){ + if(ev._timed && s._drag_id && s._drag_mode == "new-size"){ + ev.end_date.setHours(0); + ev.end_date.setMinutes(sz); + } + else { + allow = false; + } + } + return allow; + }); + } + if (!res) { + res = (s.checkEvent("onLimitViolation")) ? s.callEvent("onLimitViolation",[ev.id, ev]) : res; + } + complete_res = complete_res && res; + } + if(!complete_res){ + s._drag_id = null; + s._drag_mode = null; + } + return complete_res; + + + }; + scheduler._get_blocked_zones = function(timespans, property, day_index, day_value, timespan_type){ + var zones =[]; + if (timespans && timespans[property]) { + var timeline_zones = timespans[property]; + var blocked_timeline_zones = this._get_relevant_blocked_zones(day_index, day_value, timeline_zones, timespan_type); + for (var i=0; i<blocked_timeline_zones.length; i++) { + zones = this._add_timespan_zones(zones, blocked_timeline_zones[i].zones); + } + } + return zones; + }; + scheduler._get_relevant_blocked_zones = function(day_index, day_value, zones, timespan_type) { + var relevant_zones = (zones[day_value] && zones[day_value][timespan_type]) ? zones[day_value][timespan_type] : + (zones[day_index] && zones[day_index][timespan_type]) ? zones[day_index][timespan_type] : []; + return relevant_zones; + }; + function getZones(ev, timespans, day_index, day_value, timespan_type){ + var s = scheduler; + //containers for 'unit' and 'timeline' views, and related 'section_id' properties + var zones = []; + var containers = { + '_props':'map_to', + 'matrix':'y_property'}; + //check blocked sections in all units and timelines + for(var container in containers){ + var property = containers[container]; + if(s[container]){ + for(var view in s[container]){ + var view_config = s[container][view]; + var linker = view_config[property]; + if(!ev[linker]) continue; + zones = s._add_timespan_zones(zones, + scheduler._get_blocked_zones(timespans[view], ev[linker], day_index, day_value, timespan_type)); + } + } + } + // now need to add day blocks + zones = s._add_timespan_zones(zones, scheduler._get_blocked_zones(timespans, 'global', day_index, day_value, timespan_type)); + return zones; + } + + scheduler.attachEvent("onMouseDown", function(classname) { + return !(classname == dhx_time_block); + }); + scheduler.attachEvent("onBeforeDrag",function(id){ + if (!id) return true; + return blocker(scheduler.getEvent(id)); + }); + scheduler.attachEvent("onClick", function (event_id, native_event_object){ + return blocker(scheduler.getEvent(event_id)); + }); + scheduler.attachEvent("onBeforeLightbox",function(id){ + + var ev = scheduler.getEvent(id); + before = [ev.start_date, ev.end_date]; + return blocker(ev); + }); + scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + + //lightbox may not have 'time' section + if(!(data.start_date && data.end_date)){ + var ev = scheduler.getEvent(id); + data.start_date = new Date(ev.start_date); + data.end_date = new Date(ev.end_date); + } + + if(data.rec_type){ + //_roll_back_dates modifies start_date of recurring event, need to check limits after modification + // use a copy to keep original event unchanged + var data_copy = scheduler._lame_clone(data); + scheduler._roll_back_dates(data_copy); + return blocker(data_copy); + } + return blocker(data); + }); + scheduler.attachEvent("onEventAdded",function(id){ + if (!id) return true; + var ev = scheduler.getEvent(id); + if (!blocker(ev) && scheduler.config.limit_start && scheduler.config.limit_end) { + //if newly created event is outside of limited time - crop it, leaving only allowed time + if (ev.start_date < scheduler.config.limit_start) { + ev.start_date = new Date(scheduler.config.limit_start); + } + if (ev.start_date.valueOf() >= scheduler.config.limit_end.valueOf()) { + ev.start_date = this.date.add(scheduler.config.limit_end, -1, "day"); + } + if (ev.end_date < scheduler.config.limit_start) { + ev.end_date = new Date(scheduler.config.limit_start); + } + if (ev.end_date.valueOf() >= scheduler.config.limit_end.valueOf()) { + ev.end_date = this.date.add(scheduler.config.limit_end, -1, "day"); + } + if (ev.start_date.valueOf() >= ev.end_date.valueOf()) { + ev.end_date = this.date.add(ev.start_date, (this.config.event_duration||this.config.time_step), "minute"); + } + ev._timed=this.isOneDayEvent(ev); + } + return true; + }); + scheduler.attachEvent("onEventChanged",function(id){ + if (!id) return true; + var ev = scheduler.getEvent(id); + if (!blocker(ev)){ + if (!before) return false; + ev.start_date = before[0]; + ev.end_date = before[1]; + ev._timed=this.isOneDayEvent(ev); + } + return true; + }); + scheduler.attachEvent("onBeforeEventChanged",function(ev, native_object, is_new){ + return blocker(ev); + }); + scheduler.attachEvent("onBeforeEventCreated", function(ev) { // native event + var start_date = scheduler.getActionData(ev).date; + var event = { + _timed: true, + start_date: start_date, + end_date: scheduler.date.add(start_date, scheduler.config.time_step, "minute") + }; + return blocker(event); + }); + + scheduler.attachEvent("onViewChange", function(){ + scheduler._mark_now(); + }); + scheduler.attachEvent("onSchedulerResize", function(){ + window.setTimeout(function(){ scheduler._mark_now(); }, 1); + return true; + }); + scheduler.attachEvent("onTemplatesReady", function() { + scheduler._mark_now_timer = window.setInterval(function() { + if(!scheduler._is_initialized()) + return; + scheduler._mark_now(); + }, 60000); + }); + scheduler._mark_now = function(hide) { + // day, week, units views + var dhx_now_time = 'dhx_now_time'; + if (!this._els[dhx_now_time]) { + this._els[dhx_now_time] = []; + } + var now = scheduler._currentDate(); + var cfg = this.config; + scheduler._remove_mark_now(); // delete previous marks if they exist + if (!hide && cfg.mark_now && now < this._max_date && now > this._min_date && now.getHours() >= cfg.first_hour && now.getHours()<cfg.last_hour) { + var day_index = this.locate_holder_day(now); + this._els[dhx_now_time] = scheduler._append_mark_now(day_index, now); + } + }; + scheduler._append_mark_now = function(day_index, now) { + var dhx_now_time = 'dhx_now_time'; + var zone_start= scheduler._get_zone_minutes(now); + var options = { + zones: [zone_start, zone_start+1], + css: dhx_now_time, + type: dhx_now_time + }; + if (!this._table_view) { + if (this._props && this._props[this._mode]) { // units view + var day_divs = this._els["dhx_cal_data"][0].childNodes; + var r_divs = []; + + for (var i=0; i<day_divs.length-1; i++) { + var t_day = day_index+i; // as each unit is actually considered +1 day + options.days = t_day; + var t_div = scheduler._render_marked_timespan(options, null, t_day)[0]; + r_divs.push(t_div); + } + return r_divs; + } else { // day/week views + options.days = day_index; + return scheduler._render_marked_timespan(options, null, day_index); + } + } else { + if (this._mode == "month") { + options.days = +scheduler.date.date_part(now); + return scheduler._render_marked_timespan(options, null, null); + } + } + }; + scheduler._remove_mark_now = function() { + var dhx_now_time = 'dhx_now_time'; + var els = this._els[dhx_now_time]; + for (var i=0; i<els.length; i++) { + var div = els[i]; + var parent = div.parentNode; + if (parent) { + parent.removeChild(div); + } + } + this._els[dhx_now_time] = []; + }; + + /* + scheduler._marked_timespans = { + "global": { + "0": { + "default": [ + { // sunday + zones: [0, 100, 500, 600], + css: "yellow_box", + type: "default", + view: "global", + day: 0 + } + ] + } + "112121312": { + "my_special_type": [ + { + zones: [600, 900], + type: "block", + css: "some_class", + view: "global", + day: 112121312 + }, + {} + ] + } + }, + "units": { + "5_id": { + "3": { + "special_type": [ {}, {}, {} ], + "another_type": [ {} ] + } + }, + "6_id": { + "11212127": { + ... + } + } + } + } + */ + scheduler._marked_timespans = { global: {} }; + + scheduler._get_zone_minutes = function(date) { + return date.getHours()*60 + date.getMinutes(); + }; + scheduler._prepare_timespan_options = function(config) { // receives 1 option, returns array of options + var r_configs = []; // resulting configs + var temp_configs = []; + + if (config.days == "fullweek") + config.days = [0,1,2,3,4,5,6]; + + if (config.days instanceof Array) { + var t_days = config.days.slice(); + for (var i=0; i<t_days.length; i++) { + var cloned_config = scheduler._lame_clone(config); + cloned_config.days = t_days[i]; + r_configs.push.apply(r_configs, scheduler._prepare_timespan_options(cloned_config)); + } + return r_configs; + } + + if ( !config || !((config.start_date && config.end_date && config.end_date > config.start_date) || (config.days !== undefined && config.zones)) ) + return r_configs; // incorrect config was provided + + var min = 0; + var max = 24*60; + if (config.zones == "fullday") + config.zones = [min, max]; + if (config.zones && config.invert_zones) { + config.zones = scheduler.invertZones(config.zones); + } + + config.id = scheduler.uid(); + config.css = config.css||""; + config.type = config.type||default_timespan_type; + + var sections = config.sections; + if (sections) { + for (var view_key in sections) { + if (sections.hasOwnProperty(view_key)) { + var ids = sections[view_key]; + if (!(ids instanceof Array)) + ids = [ids]; + for (var i=0; i<ids.length; i++) { + var t_config = scheduler._lame_copy({}, config); + t_config.sections = {}; + t_config.sections[view_key] = ids[i]; + temp_configs.push(t_config); + } + } + } + } else { + temp_configs.push(config); + } + + for (var k=0; k<temp_configs.length; k++) { + var c_config = temp_configs[k]; // config to be checked + + var start_date = c_config.start_date; + var end_date = c_config.end_date; + + if (start_date && end_date) { + var t_sd = scheduler.date.date_part(new Date(start_date)); // e.g. 05 october + var t_ed= scheduler.date.add(t_sd, 1, "day"); // 06 october, will both be incremented in the loop + + while (t_sd < end_date) { + var t_config = scheduler._lame_copy({}, c_config); + delete t_config.start_date; + delete t_config.end_date; + t_config.days = t_sd.valueOf(); + var zone_start = (start_date > t_sd) ? scheduler._get_zone_minutes(start_date) : min; + var zone_end = ( end_date>t_ed || end_date.getDate() != t_sd.getDate() ) ? max : scheduler._get_zone_minutes(end_date); + t_config.zones = [zone_start, zone_end]; + r_configs.push(t_config); + + t_sd = t_ed; + t_ed = scheduler.date.add(t_ed, 1, "day"); + } + } else { + if (c_config.days instanceof Date) + c_config.days = (scheduler.date.date_part(c_config.days)).valueOf(); + c_config.zones = config.zones.slice(); + r_configs.push(c_config); + } + } + return r_configs; + }; + scheduler._get_dates_by_index = function(index, start, end) { + var dates = []; + start = scheduler.date.date_part(new Date(start||scheduler._min_date)); + end = new Date(end||scheduler._max_date); + var start_day = start.getDay(); + var delta = (index-start_day >= 0) ? (index-start_day) : (7-start.getDay()+index); + var t_date = scheduler.date.add(start, delta, "day"); + for (; t_date < end; t_date = scheduler.date.add(t_date, 1, "week")) { + dates.push(t_date); + } + return dates; + }; + scheduler._get_css_classes_by_config = function(config) { + var css_classes = []; + if (config.type == dhx_time_block) { + css_classes.push(dhx_time_block); + if (config.css) + css_classes.push(dhx_time_block+"_reset"); + } + css_classes.push("dhx_marked_timespan", config.css); + return css_classes.join(" "); + }; + scheduler._get_block_by_config = function(config) { + var block = document.createElement("DIV"); + if (config.html) { + if (typeof config.html == "string") + block.innerHTML = config.html; + else + block.appendChild(config.html); + } + return block; + }; + scheduler._render_marked_timespan = function(options, area, day) { + var blocks = []; // resulting block which will be rendered and returned + var c = scheduler.config; + var min_date = this._min_date; + var max_date = this._max_date; + var day_value = false; // if timespan for specific date should be displayed + + if (!c.display_marked_timespans) + return blocks; + + // in case of markTimespan + if (!day && day !== 0) { + if (options.days < 7) + day = options.days; + else { + var date_to_display = new Date(options.days); + day_value = +date_to_display; + + // in case of markTimespan date could be not in the viewing range, need to return + if ( !(+max_date > +date_to_display && +min_date <= +date_to_display) ) + return blocks; + + day = date_to_display.getDay(); + } + + // convert day default index (Sun - 0, Sat - 6) to index of hourscales (depends on week_start and config.start_on_monday) + var min_day = min_date.getDay(); + if (min_day > day) { + day = 7 - (min_day-day); + } else { + day = day - min_day; + } + } + var zones = options.zones; + var css_classes = scheduler._get_css_classes_by_config(options); + + if (scheduler._table_view && scheduler._mode == "month") { + var areas = []; + var days = []; + + + if (!area) { + days = (day_value) ? [day_value] : scheduler._get_dates_by_index(day); + for (var i=0; i < days.length; i++) { + areas.push( this._scales[days[i]] ); + } + } else { + areas.push(area); + days.push(day); + } + + for (var i=0; i < areas.length; i++) { + area = areas[i]; + day = days[i]; + + var sweek = Math.floor((this._correct_shift(day,1)-min_date.valueOf())/(60*60*1000*24*this._cols.length)), + sday = this.locate_holder_day(day, false) % this._cols.length; + + if(this._ignores[sday]) continue; + + var block_proto = scheduler._get_block_by_config(options), + height = Math.max(area.offsetHeight - 1, 0), // 1 for bottom border + width = Math.max(area.offsetWidth - 1, 0), // 1 for left border + left = this._colsS[sday], + top = this._colsS.heights[sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)-1; + + block_proto.className = css_classes; + block_proto.style.top = top + "px"; + block_proto.style.lineHeight = block_proto.style.height = height + "px"; + + for (var k=0; k < zones.length; k+=2) { + var start = zones[i]; + var end = zones[i+1]; + if (end <= start) + return []; + + var block = block_proto.cloneNode(true); + + block.style.left = (left + Math.round( (start)/(24*60) * width)) + "px"; + block.style.width = Math.round( (end-start)/(24*60) * width) + "px"; + + area.appendChild(block); + blocks.push(block); + } + } + } else { + var index = day; + + if(this._ignores[this.locate_holder_day(day, false)]) return blocks; + + if (this._props && this._props[this._mode] && options.sections && options.sections[this._mode]) { + var view = this._props[this._mode]; + index = view.order[options.sections[this._mode]]; + if (view.size && (index > view.position+view.size)) { + index = 0; + } + } + area = area ? area : scheduler.locate_holder(index); + + for (var i = 0; i < zones.length; i+=2){ + var start = Math.max(zones[i], c.first_hour*60); + var end = Math.min(zones[i+1], c.last_hour*60); + if (end <= start) { + if (i+2 < zones.length) + continue; + else + return []; + } + + var block = scheduler._get_block_by_config(options); + block.className = css_classes; + + // +1 for working with section which really takes up whole height (as % would be == 0) + var all_hours_height = this.config.hour_size_px*24 + 1; + var hour_ms = 60*60*1000; + block.style.top = (Math.round((start*60*1000-this.config.first_hour*hour_ms)*this.config.hour_size_px/hour_ms) % all_hours_height) + "px"; + block.style.lineHeight = block.style.height = Math.max((Math.round(((end-start)*60*1000)*this.config.hour_size_px/hour_ms)) % all_hours_height, 1)+"px"; + + area.appendChild(block); + blocks.push(block); + } + } + + return blocks; + }; + // just marks timespan, will be cleaned after refresh + scheduler.markTimespan = function(configuration) { + var configs = scheduler._prepare_timespan_options(configuration); + if (!configs.length) + return; + var divs = []; + for (var i=0; i<configs.length; i++) { + var config = configs[i]; + var blocks = scheduler._render_marked_timespan(config, null, null); + if(blocks.length) + divs.push.apply(divs, blocks); + } + return divs; + }; + scheduler.unmarkTimespan = function(divs) { + if (!divs) + return; + for (var i=0; i<divs.length; i++) { + var div = divs[i]; + // parent may no longer be present if we switched views, navigated + if (div.parentNode) { + div.parentNode.removeChild(div); + } + } + }; + + scheduler._marked_timespans_ids = {}; + // adds marked timespan to collections, persistent + scheduler.addMarkedTimespan = function(configuration) { + var configs = scheduler._prepare_timespan_options(configuration); + var global = "global"; + + if (!configs.length) + return; // options are incorrect, nothing to mark + + var id = configs[0].id; + var timespans = scheduler._marked_timespans; + var ids = scheduler._marked_timespans_ids; + if (!ids[id]) + ids[id] = []; + + for (var i=0; i<configs.length; i++) { + var config = configs[i]; + var day = config.days; + var zones = config.zones; + var css = config.css; + var sections = config.sections; + var type = config.type; // default or specified + config.id = id; + + if (sections) { + for (var view_key in sections) { + if (sections.hasOwnProperty(view_key)) { + if (!timespans[view_key]) + timespans[view_key] = {}; + var unit_id = sections[view_key]; + var timespans_view = timespans[view_key]; + if (!timespans_view[unit_id]) + timespans_view[unit_id] = {}; + if (!timespans_view[unit_id][day]) + timespans_view[unit_id][day] = {}; + if (!timespans_view[unit_id][day][type]){ + timespans_view[unit_id][day][type] = []; + if(!scheduler._marked_timespans_types) + scheduler._marked_timespans_types = {}; + if(!scheduler._marked_timespans_types[type]) + scheduler._marked_timespans_types[type] = true; + } + var day_configs = timespans_view[unit_id][day][type]; + config._array = day_configs; + day_configs.push(config); + ids[id].push(config); + } + } + } else { + if (!timespans[global][day]) + timespans[global][day] = {}; + if (!timespans[global][day][type]) + timespans[global][day][type] = []; + + if(!scheduler._marked_timespans_types) + scheduler._marked_timespans_types = {}; + if(!scheduler._marked_timespans_types[type]) + scheduler._marked_timespans_types[type] = true; + + + var day_configs = timespans[global][day][type]; + config._array = day_configs; + day_configs.push(config); + ids[id].push(config); + } + } + return id; + }; + // not used for now + scheduler._add_timespan_zones = function(current_zones, zones) { + var resulting_zones = current_zones.slice(); + zones = zones.slice(); + + if (!resulting_zones.length) + return zones; + + for (var i=0; i<resulting_zones.length; i+=2) { + var c_zone_start = resulting_zones[i]; + var c_zone_end = resulting_zones[i+1]; + var isLast = (i+2 == resulting_zones.length); + + for (var k=0; k<zones.length; k+=2) { + var zone_start = zones[k]; + var zone_end = zones[k+1]; + if ((zone_end > c_zone_end && zone_start <= c_zone_end) || (zone_start < c_zone_start && zone_end >= c_zone_start)) { + resulting_zones[i] = Math.min(c_zone_start, zone_start); + resulting_zones[i+1] = Math.max(c_zone_end, zone_end); + i -= 2; + } else { + if (!isLast) // do nothing, maybe next current zone will match or will be last + continue; + + var offset = (c_zone_start > zone_start)?0:2; + resulting_zones.splice(i+offset, 0, zone_start, zone_end); // last current zone, need to add another + } + zones.splice(k--,2); // zone was merged or added, need to exclude it + break; + } + } + return resulting_zones; + }; + scheduler._subtract_timespan_zones = function(current_zones, zones) { + var resulting_zones = current_zones.slice(); + for (var i=0; i<resulting_zones.length; i+=2 ) { + var c_zone_start = resulting_zones[i];// current_zone_start + var c_zone_end = resulting_zones[i+1]; + for (var k=0; k<zones.length; k+=2) { + var zone_start = zones[k]; + var zone_end = zones[k+1]; + if (zone_end > c_zone_start && zone_start < c_zone_end) { + var is_modified = false; + if (c_zone_start >= zone_start && c_zone_end <= zone_end) { + resulting_zones.splice(i, 2); + } + if (c_zone_start < zone_start) { + resulting_zones.splice(i, 2, c_zone_start, zone_start); + is_modified = true; + } + if (c_zone_end > zone_end) { + resulting_zones.splice( (is_modified)?(i+2):i, (is_modified)?0:2, zone_end, c_zone_end); + } + i -= 2; + break; + } else { + continue; + } + } + } + return resulting_zones; + }; + scheduler.invertZones = function(zones) { + return scheduler._subtract_timespan_zones([0, 1440], zones.slice()); + }; + scheduler._delete_marked_timespan_by_id = function(id) { + var configs = scheduler._marked_timespans_ids[id]; + if (configs) { + for (var i=0; i<configs.length; i++) { + var config = configs[i]; + var parent_array = config._array; + for (var k=0; k<parent_array.length; k++) { + if (parent_array[k] == config) { + parent_array.splice(k, 1); + break; + } + } + } + } + }; + scheduler._delete_marked_timespan_by_config = function(config) { + var timespans = scheduler._marked_timespans; + var sections = config.sections; + var day = config.days; + var type = config.type||default_timespan_type; + var day_timespans = []; // array of timespans to subtract our config + if (sections) { + for (var view_key in sections) { + if (sections.hasOwnProperty(view_key) && timespans[view_key]) { + var unit_id = sections[view_key]; + if (timespans[view_key][unit_id] && timespans[view_key][unit_id][day] && timespans[view_key][unit_id][day][type]) + day_timespans = timespans[view_key][unit_id][day][type]; + } + } + } else { + if (timespans.global[day] && timespans.global[day][type]) + day_timespans = timespans.global[day][type]; + } + for (var i=0; i<day_timespans.length; i++) { + var d_t = day_timespans[i]; + var zones = scheduler._subtract_timespan_zones(d_t.zones, config.zones); + if (zones.length) + d_t.zones = zones; + else { + day_timespans.splice(i,1); + i--; + // need to update ids collection + var related_zones = scheduler._marked_timespans_ids[d_t.id]; + for (var k=0; k<related_zones.length; k++) { + if (related_zones[k] == d_t) { + related_zones.splice(k, 1); + break; + } + } + } + } + }; + scheduler.deleteMarkedTimespan = function(configuration) { + // delete everything + if (!arguments.length) { + scheduler._marked_timespans = { global: {} }; + scheduler._marked_timespans_ids = {}; + scheduler._marked_timespans_types = {}; + } + + if (typeof configuration != "object") { // id was passed + scheduler._delete_marked_timespan_by_id(configuration); + } else { // normal configuration was passed + + if(!(configuration.start_date && configuration.end_date)){ + if(!configuration.days) + configuration.days = "fullweek"; + if(!configuration.zones) + configuration.zones = "fullday"; + } + + var types = []; + if(!configuration.type){ + //if type not specified - delete timespans of all types + for(var type in scheduler._marked_timespans_types){ + types.push(type); + } + }else{ + types.push(configuration.type); + } + + + var configs = scheduler._prepare_timespan_options(configuration); + + for (var i=0; i<configs.length; i++) { + + var config = configs[i]; + for( var t=0; t < types.length; t++){ + var typedConfig = scheduler._lame_clone(config); + typedConfig.type = types[t]; + scheduler._delete_marked_timespan_by_config(typedConfig); + } + } + + } + }; + scheduler._get_types_to_render = function(common, specific) { + var types_to_render = (common) ? scheduler._lame_copy({},common) : {}; + for (var type in specific||{} ) { + if (specific.hasOwnProperty(type)) { + types_to_render[type] = specific[type]; + } + } + return types_to_render; + }; + scheduler._get_configs_to_render = function(types) { + var configs = []; + for (var type in types) { + if (types.hasOwnProperty(type)) { + configs.push.apply(configs, types[type]); + } + } + return configs; + }; + scheduler.attachEvent("onScaleAdd", function(area, day) { + if (scheduler._table_view && scheduler._mode != "month") + return; + + var day_index = day.getDay(); + var day_value = day.valueOf(); + var mode = this._mode; + var timespans = scheduler._marked_timespans; + var r_configs = []; + + if (this._props && this._props[mode]) { // we are in the units view and need to draw it's sections as well + var view = this._props[mode]; // units view object + var units = view.options; + var index = scheduler._get_unit_index(view, day); + var unit = units[index]; // key, label + day = scheduler.date.date_part(new Date(this._date)); // for units view actually only 1 day is displayed yet the day variable will change, need to use this._date for all calls + day_index = day.getDay(); + day_value = day.valueOf(); + + if (timespans[mode] && timespans[mode][unit.key]) { + var unit_zones = timespans[mode][unit.key]; + var unit_types = scheduler._get_types_to_render(unit_zones[day_index], unit_zones[day_value]); + r_configs.push.apply(r_configs, scheduler._get_configs_to_render(unit_types)); + } + } + + var global_data = timespans["global"]; + var day_types = global_data[day_value]||global_data[day_index]; + r_configs.push.apply(r_configs, scheduler._get_configs_to_render(day_types)); + + for (var i=0; i<r_configs.length; i++) { + scheduler._render_marked_timespan(r_configs[i], area, day); + } + }); + + scheduler.dblclick_dhx_marked_timespan = function(e,src){ + if (!scheduler.config.dblclick_create){ + scheduler.callEvent("onScaleDblClick",[scheduler.getActionData(e).date,src,e]); + } + scheduler.addEventNow(scheduler.getActionData(e).date,null,e); + }; + +}; +scheduler._temp_limit_scope(); diff --git a/codebase/sources/ext/dhtmlxscheduler_limit.js.map b/codebase/sources/ext/dhtmlxscheduler_limit.js.map new file mode 100644 index 0000000..96d0ed7 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_limit.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_limit.js.map","sources":["dhtmlxscheduler_limit.js"],"names":["scheduler","config","limit_start","limit_end","limit_view","check_limits","mark_now","display_marked_timespans","_temp_limit_scope","getZones","ev","timespans","day_index","day_value","timespan_type","s","zones","containers","_props","matrix","container","property","view","view_config","linker","_add_timespan_zones","_get_blocked_zones","before","dhx_time_block","default_timespan_type","fix_options","options","days","Date","start_date","end_date","get_resulting_options","sections","type","css","blockTime","addMarkedTimespan","unblockTime","deleteMarkedTimespan","attachEvent","om","od","nm","nd","valueOf","this","date","add","setTimeout","setCurrentView","checkInMarkedTimespan","on_overlap","res","temp_start_date","temp_end_date","_marked_timespans","date_part","getDay","i","length","sm","_get_zone_minutes","em","getDate","sz","ez","blocker","checkLimitViolation","event","c","evs","rec_type","dates","getRecDates","_copy_event","_lame_copy","push","complete_res","p","_timed","isOneDayEvent","allow","_drag_id","_drag_mode","setHours","setMinutes","checkEvent","callEvent","id","timeline_zones","blocked_timeline_zones","_get_relevant_blocked_zones","relevant_zones","classname","getEvent","event_id","data","data_copy","_lame_clone","_roll_back_dates","event_duration","time_step","getActionData","_mark_now","window","_mark_now_timer","setInterval","_is_initialized","hide","dhx_now_time","_els","now","_currentDate","cfg","_remove_mark_now","_max_date","_min_date","getHours","first_hour","last_hour","locate_holder_day","_append_mark_now","zone_start","_table_view","_mode","day_divs","childNodes","r_divs","t_day","t_div","_render_marked_timespan","els","div","parent","parentNode","removeChild","global","getMinutes","_prepare_timespan_options","r_configs","temp_configs","Array","t_days","slice","cloned_config","apply","undefined","min","max","invert_zones","invertZones","uid","view_key","hasOwnProperty","ids","t_config","k","c_config","t_sd","t_ed","zone_end","_get_dates_by_index","index","start","end","start_day","delta","t_date","_get_css_classes_by_config","css_classes","join","_get_block_by_config","block","document","createElement","html","innerHTML","appendChild","area","day","blocks","min_date","max_date","date_to_display","min_day","areas","_scales","sweek","Math","floor","_correct_shift","_cols","sday","_ignores","block_proto","height","offsetHeight","width","offsetWidth","left","_colsS","top","heights","xy","month_scale_height","className","style","lineHeight","cloneNode","round","order","size","position","locate_holder","all_hours_height","hour_size_px","hour_ms","markTimespan","configuration","configs","divs","unmarkTimespan","_marked_timespans_ids","unit_id","timespans_view","_marked_timespans_types","day_configs","_array","current_zones","resulting_zones","c_zone_start","c_zone_end","isLast","offset","splice","_subtract_timespan_zones","is_modified","_delete_marked_timespan_by_id","parent_array","_delete_marked_timespan_by_config","day_timespans","d_t","related_zones","arguments","types","t","typedConfig","_get_types_to_render","common","specific","types_to_render","_get_configs_to_render","mode","units","_get_unit_index","unit","_date","key","unit_zones","unit_types","global_data","day_types","dblclick_dhx_marked_timespan","e","src","dblclick_create","addEventNow"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_map_view.js b/codebase/sources/ext/dhtmlxscheduler_map_view.js new file mode 100644 index 0000000..2ea6044 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_map_view.js @@ -0,0 +1,492 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.xy.map_date_width = 188; // date column width +scheduler.xy.map_description_width = 400; // description column width + +scheduler.config.map_resolve_event_location = true; // if events in database doesn't have lat and lng values there will be an attempt to resolve them on event loading, useful for migration +scheduler.config.map_resolve_user_location = true; // if user will be promted to share his location to display it on the map + +scheduler.config.map_initial_position = new google.maps.LatLng(48.724, 8.215); // inital position of the map +scheduler.config.map_error_position = new google.maps.LatLng(15, 15); // this position will be displayed in case if event doesn't have corresponding coordinates + +scheduler.config.map_infowindow_max_width = 300; + +scheduler.config.map_type = google.maps.MapTypeId.ROADMAP; + +scheduler.config.map_zoom_after_resolve = 15; + +scheduler.locale.labels.marker_geo_success = "It seems you are here."; +scheduler.locale.labels.marker_geo_fail = "Sorry, could not get your current position using geolocation."; + +scheduler.templates.marker_date = scheduler.date.date_to_str("%Y-%m-%d %H:%i"); // date for map's infowindow will be formated following way + +scheduler.templates.marker_text = function(start, end, ev) { + return "<div><b>" + ev.text + "</b><br/><br/>" + (ev.event_location || '') + "<br/><br/>" + scheduler.templates.marker_date(start) + " - " + scheduler.templates.marker_date(end) + "</div>"; +}; +scheduler.dblclick_dhx_map_area = function() { + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow({ + start_date: scheduler._date, + end_date: scheduler.date.add(scheduler._date, scheduler.config.time_step, "minute") + }); +}; +scheduler.templates.map_time = function(start, end, ev) { + if (ev._timed) + return this.day_date(ev.start_date, ev.end_date, ev) + " " + this.event_date(start); + else + return scheduler.templates.day_date(start) + " – " + scheduler.templates.day_date(end); +}; +scheduler.templates.map_text = function(start, end, ev) { + return ev.text; +}; + +scheduler.date.map_start = function(d) { + return d; +}; +scheduler.date.add_map = function(date, inc, mode) { + return (new Date(date.valueOf())); +}; + +scheduler.templates.map_date = function(dd, ed, mode) { + return ''; +}; + +scheduler._latLngUpdate = false; // flag for not displaying event second time in case of coordinates update + +scheduler.attachEvent("onSchedulerReady", function() { + scheduler._isMapPositionSet = false; // if user actual (geolocation) position was set on the map + + var gmap = document.createElement('div'); + gmap.className = 'dhx_map'; + gmap.id = 'dhx_gmap'; + gmap.style.dispay = "none"; + + var node = scheduler._obj; + + node.appendChild(gmap); + + scheduler._els.dhx_gmap = []; + scheduler._els.dhx_gmap.push(gmap); + + _setMapSize('dhx_gmap'); + + var mapOptions = { + zoom: scheduler.config.map_inital_zoom || 10, + center: scheduler.config.map_initial_position, + mapTypeId: scheduler.config.map_type || google.maps.MapTypeId.ROADMAP + }; + var map = new google.maps.Map(document.getElementById('dhx_gmap'), mapOptions); + map.disableDefaultUI = false; + map.disableDoubleClickZoom = !scheduler.config.readonly; + + google.maps.event.addListener(map, "dblclick", function(event) { + if (!scheduler.config.readonly && scheduler.config.dblclick_create) { + var point = event.latLng; + geocoder.geocode( + { 'latLng': point }, + function(results, status) { + if (status == google.maps.GeocoderStatus.OK) { + point = results[0].geometry.location; + scheduler.addEventNow({ + lat: point.lat(), + lng: point.lng(), + event_location: results[0].formatted_address, + start_date: scheduler._date, + end_date: scheduler.date.add(scheduler._date, scheduler.config.time_step, "minute") + }); + } + } + ); + } + }); + + var infoWindowOptions = { + content: '' + }; + + if (scheduler.config.map_infowindow_max_width) { + infoWindowOptions.maxWidth = scheduler.config.map_infowindow_max_width; + } + + scheduler.map = { + _points: [], + _markers: [], + _infowindow: new google.maps.InfoWindow(infoWindowOptions), + _infowindows_content: [], + _initialization_count: -1, + _obj: map + }; + + geocoder = new google.maps.Geocoder(); + + if (scheduler.config.map_resolve_user_location) { + if (navigator.geolocation) { + if (!scheduler._isMapPositionSet) { + navigator.geolocation.getCurrentPosition(function(position) { + var _userLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); + map.setCenter(_userLocation); + map.setZoom(scheduler.config.map_zoom_after_resolve || 10); + scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_success); + scheduler.map._infowindow.position = map.getCenter(); + scheduler.map._infowindow.open(map); + + scheduler._isMapPositionSet = true; + }, + function() { + scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_fail); + scheduler.map._infowindow.setPosition(map.getCenter()); + scheduler.map._infowindow.open(map); + scheduler._isMapPositionSet = true; + }); + } + } + } + google.maps.event.addListener(map, "resize", function(event) { + gmap.style.zIndex = '5'; + map.setZoom(map.getZoom()); + + }); + google.maps.event.addListener(map, "tilesloaded", function(event) { + gmap.style.zIndex = '5'; + }); + + gmap.style.display = 'none'; // property was changed after attaching map + + + scheduler.attachEvent("onSchedulerResize", function() { + if (this._mode == "map") { + this.map_view(true); + return false; + } + return true; + }); + + var old = scheduler.render_data; + scheduler.render_data = function(evs, hold) { + if (this._mode == "map") { + fill_map_tab(); + var events = scheduler.get_visible_events(); + for (var i = 0; i < events.length; i++) { + if (!scheduler.map._markers[events[i].id]) { + showAddress(events[i], false, false); + } + } + } else + return old.apply(this, arguments); + }; + + function set_full_view(mode) { + if (mode) { + var l = scheduler.locale.labels; + scheduler._els["dhx_cal_header"][0].innerHTML = "<div class='dhx_map_line' style='width: " + (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 2) + "px;' ><div class='headline_date' style='width: " + scheduler.xy.map_date_width + "px;'>" + l.date + "</div><div class='headline_description' style='width: " + scheduler.xy.map_description_width + "px;'>" + l.description + "</div></div>"; + scheduler._table_view = true; + scheduler.set_sizes(); + } + } + + function clear_map_tab() { + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + var markers = scheduler.map._markers; + for (var key in markers) { + if (markers.hasOwnProperty(key)) { + markers[key].setMap(null); + delete scheduler.map._markers[key]; + if (scheduler.map._infowindows_content[key]) + delete scheduler.map._infowindows_content[key]; + } + } + } + + function fill_map_tab() { + //select events for which data need to be printed + var events = scheduler.get_visible_events(); + events.sort(function(a, b) { + if(a.start_date.valueOf()==b.start_date.valueOf()) + return a.id>b.id?1:-1; + return a.start_date>b.start_date?1:-1; + }); + + //generate html for the view + var html = "<div class='dhx_map_area'>"; + for (var i = 0; i < events.length; i++) { + var ev = events[i]; + var event_class = (ev.id == scheduler._selected_event_id) ? 'dhx_map_line highlight' : 'dhx_map_line'; + var bg_color = (ev.color ? ("background:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + html += "<div class='" + event_class + "' event_id='" + ev.id + "' style='" + bg_color + "" + color + "" + (ev._text_style || "") + " width: " + (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 2) + "px;'><div style='width: " + scheduler.xy.map_date_width + "px;' >" + scheduler.templates.map_time(ev.start_date, ev.end_date, ev) + "</div>"; + html += "<div class='dhx_event_icon icon_details'> </div>"; + html += "<div class='line_description' style='width:" + (scheduler.xy.map_description_width - 25) + "px;'>" + scheduler.templates.map_text(ev.start_date, ev.end_date, ev) + "</div></div>"; // -25 = icon size 20 and padding 5 + } + html += "<div class='dhx_v_border' style='left: " + (scheduler.xy.map_date_width - 2) + "px;'></div><div class='dhx_v_border_description'></div></div>"; + + //render html + scheduler._els["dhx_cal_data"][0].scrollTop = 0; //fix flickering in FF + scheduler._els["dhx_cal_data"][0].innerHTML = html; + scheduler._els["dhx_cal_data"][0].style.width = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; + + var t = scheduler._els["dhx_cal_data"][0].firstChild.childNodes; + scheduler._els["dhx_cal_date"][0].innerHTML = scheduler.templates[scheduler._mode + "_date"](scheduler._min_date, scheduler._max_date, scheduler._mode); + + scheduler._rendered = []; + for (var i = 0; i < t.length - 2; i++) { + scheduler._rendered[i] = t[i]; + } + } + + function _setMapSize(elem_id) { //input - map's div id + var map = document.getElementById(elem_id); + var height = scheduler._y - scheduler.xy.nav_height; + if (height < 0) + height = 0; + var width = scheduler._x - scheduler.xy.map_date_width - scheduler.xy.map_description_width - 1; + if (width < 0) + width = 0; + map.style.height = height + 'px'; + map.style.width = width + 'px'; + map.style.marginLeft = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; + map.style.marginTop = (scheduler.xy.nav_height + 2) + 'px'; + } + + scheduler.map_view = function(mode) { + scheduler.map._initialization_count++; + var gmap = scheduler._els.dhx_gmap[0]; + var temp_center; + scheduler._els.dhx_cal_data[0].style.width = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; + + scheduler._min_date = scheduler.config.map_start || (scheduler._currentDate()); + scheduler._max_date = scheduler.config.map_end || scheduler.date.add(scheduler._currentDate(), 1, "year"); + + scheduler._table_view = true; + set_full_view(mode); + + if (mode) { //map tab activated + clear_map_tab(); + fill_map_tab(); + gmap.style.display = 'block'; + + // need to resize block everytime window is resized + _setMapSize('dhx_gmap'); + temp_center = scheduler.map._obj.getCenter(); + + var events = scheduler.get_visible_events(); + for (var i = 0; i < events.length; i++) { + if (!scheduler.map._markers[events[i].id]) { + showAddress(events[i]); + } + } + + } else { //map tab de-activated + gmap.style.display = 'none'; + } + google.maps.event.trigger(scheduler.map._obj, 'resize'); + + if (scheduler.map._initialization_count === 0 && temp_center) { // if tab is activated for the first time need to fix position + scheduler.map._obj.setCenter(temp_center); + } + + if (scheduler._selected_event_id) { + selectEvent(scheduler._selected_event_id); + } + }; + + var selectEvent = function(event_id) { + scheduler.map._obj.setCenter(scheduler.map._points[event_id]); + scheduler.callEvent("onClick", [event_id]); + }; + + var showAddress = function(event, setCenter, performClick) { // what if event have incorrect position from the start? + var point = scheduler.config.map_error_position; + if (event.lat && event.lng) { + point = new google.maps.LatLng(event.lat, event.lng); + } + var message = scheduler.templates.marker_text(event.start_date, event.end_date, event); + if (!scheduler._new_event) { + + scheduler.map._infowindows_content[event.id] = message; + + if (scheduler.map._markers[event.id]) + scheduler.map._markers[event.id].setMap(null); + + scheduler.map._markers[event.id] = new google.maps.Marker({ + position: point, + map: scheduler.map._obj + }); + + google.maps.event.addListener(scheduler.map._markers[event.id], 'click', function() { + scheduler.map._infowindow.setContent(scheduler.map._infowindows_content[event.id]); + scheduler.map._infowindow.open(scheduler.map._obj, scheduler.map._markers[event.id]); + scheduler._selected_event_id = event.id; + scheduler.render_data(); + }); + scheduler.map._points[event.id] = point; + + if (setCenter) scheduler.map._obj.setCenter(scheduler.map._points[event.id]); + if (performClick) scheduler.callEvent("onClick", [event.id]); + } + }; + + scheduler.attachEvent("onClick", function(event_id, native_event_object) { + if (this._mode == "map") { + scheduler._selected_event_id = event_id; + for (var i = 0; i < scheduler._rendered.length; i++) { + scheduler._rendered[i].className = 'dhx_map_line'; + if (scheduler._rendered[i].getAttribute("event_id") == event_id) { + scheduler._rendered[i].className += " highlight"; + } + } + if (scheduler.map._points[event_id] && scheduler.map._markers[event_id]) { + scheduler.map._obj.setCenter(scheduler.map._points[event_id]); // was panTo + google.maps.event.trigger(scheduler.map._markers[event_id], 'click'); + } + } + return true; + }); + + var _displayEventOnMap = function(event) { + if (event.event_location && geocoder) { + geocoder.geocode( + { + 'address': event.event_location, + 'language': scheduler.uid().toString() + }, + function(results, status) { + var point = {}; + if (status != google.maps.GeocoderStatus.OK) { + point = scheduler.callEvent("onLocationError", [event.id]); + if (!point || point === true) + point = scheduler.config.map_error_position; + } else { + point = results[0].geometry.location; + } + event.lat = point.lat(); + event.lng = point.lng(); + + scheduler._selected_event_id = event.id; + + scheduler._latLngUpdate = true; + scheduler.callEvent("onEventChanged", [event.id, event]); + showAddress(event, true, true); + } + ); + } else { + showAddress(event, true, true); + } + }; + + var _updateEventLocation = function(event) { // update lat and lng in database + if (event.event_location && geocoder) { + geocoder.geocode( + { + 'address': event.event_location, + 'language': scheduler.uid().toString() + }, + function(results, status) { + var point = {}; + if (status != google.maps.GeocoderStatus.OK) { + point = scheduler.callEvent("onLocationError", [event.id]); + if (!point || point === true) + point = scheduler.config.map_error_position; + } else { + point = results[0].geometry.location; + } + event.lat = point.lat(); + event.lng = point.lng(); + scheduler._latLngUpdate = true; + scheduler.callEvent("onEventChanged", [event.id, event]); + } + ); + } + }; + + var _delay = function(method, object, params, delay) { + setTimeout(function() { + var ret = method.apply(object, params); + method = object = params = null; + return ret; + }, delay || 1); + }; + + scheduler.attachEvent("onEventChanged", function(event_id, event_object) { + if (!this._latLngUpdate) { + var event = scheduler.getEvent(event_id); + if ((event.start_date < scheduler._min_date && event.end_date > scheduler._min_date) || (event.start_date < scheduler._max_date && event.end_date > scheduler._max_date) || (event.start_date.valueOf() >= scheduler._min_date && event.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + _displayEventOnMap(event); + } else { // event no longer should be displayed on the map view + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + } + } + else + this._latLngUpdate = false; + return true; + }); + + + scheduler.attachEvent("onEventIdChange", function(old_event_id, new_event_id) { + var event = scheduler.getEvent(new_event_id); + if ((event.start_date < scheduler._min_date && event.end_date > scheduler._min_date) || (event.start_date < scheduler._max_date && event.end_date > scheduler._max_date) || (event.start_date.valueOf() >= scheduler._min_date && event.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[old_event_id]) { + scheduler.map._markers[old_event_id].setMap(null); + delete scheduler.map._markers[old_event_id]; + } + if (scheduler.map._infowindows_content[old_event_id]) + delete scheduler.map._infowindows_content[old_event_id]; + _displayEventOnMap(event); + } + return true; + }); + + scheduler.attachEvent("onEventAdded", function(event_id, event_object) { + if (!scheduler._dataprocessor) { + if ((event_object.start_date < scheduler._min_date && event_object.end_date > scheduler._min_date) || (event_object.start_date < scheduler._max_date && event_object.end_date > scheduler._max_date) || (event_object.start_date.valueOf() >= scheduler._min_date && event_object.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + _displayEventOnMap(event_object); + } + } + return true; + }); + + /* Test/example + scheduler.attachEvent("onLocationError", function(event_id,event_object){ + return new google.maps.LatLng(8, 8); + }); + */ + + scheduler.attachEvent("onBeforeEventDelete", function(event_id, event_object) { + if (scheduler.map._markers[event_id]) { + scheduler.map._markers[event_id].setMap(null); // if new event is deleted tab != map then it doesn't have marker yet + } + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + return true; + }); + + scheduler._event_resolve_delay = 1500; + scheduler.attachEvent("onEventLoading", function(event) { + if (scheduler.config.map_resolve_event_location && event.event_location && !event.lat && !event.lng) { // don't delete !event.lat && !event.lng as location could change + scheduler._event_resolve_delay += 1500; + _delay(_updateEventLocation, this, [event], scheduler._event_resolve_delay); + } + return true; + }); + + scheduler.attachEvent("onEventCancel", function(event_id, is_new) { + if (is_new) { + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + scheduler.map._infowindow.close(); + } + return true; + }); +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_map_view.js.map b/codebase/sources/ext/dhtmlxscheduler_map_view.js.map new file mode 100644 index 0000000..e7bcadb --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_map_view.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_map_view.js.map","sources":["dhtmlxscheduler_map_view.js"],"names":["scheduler","xy","map_date_width","map_description_width","config","map_resolve_event_location","map_resolve_user_location","map_initial_position","google","maps","LatLng","map_error_position","map_infowindow_max_width","map_type","MapTypeId","ROADMAP","map_zoom_after_resolve","locale","labels","marker_geo_success","marker_geo_fail","templates","marker_date","date","date_to_str","marker_text","start","end","ev","text","event_location","dblclick_dhx_map_area","this","readonly","dblclick_create","addEventNow","start_date","_date","end_date","add","time_step","map_time","_timed","day_date","event_date","map_text","map_start","d","add_map","Date","valueOf","map_date","_latLngUpdate","attachEvent","set_full_view","mode","l","_els","innerHTML","description","_table_view","set_sizes","clear_map_tab","_selected_event_id","map","_infowindow","close","markers","_markers","key","hasOwnProperty","setMap","_infowindows_content","fill_map_tab","events","get_visible_events","sort","a","b","id","html","i","length","event_class","bg_color","color","textColor","_text_style","scrollTop","style","width","t","firstChild","childNodes","_mode","_min_date","_max_date","_rendered","_setMapSize","elem_id","document","getElementById","height","_y","nav_height","_x","marginLeft","marginTop","_isMapPositionSet","gmap","createElement","className","dispay","node","_obj","appendChild","dhx_gmap","push","mapOptions","zoom","map_inital_zoom","center","mapTypeId","Map","disableDefaultUI","disableDoubleClickZoom","event","addListener","point","latLng","geocoder","geocode","results","status","GeocoderStatus","OK","geometry","location","lat","lng","formatted_address","infoWindowOptions","content","maxWidth","_points","InfoWindow","_initialization_count","Geocoder","navigator","geolocation","getCurrentPosition","position","_userLocation","coords","latitude","longitude","setCenter","setZoom","setContent","getCenter","open","setPosition","zIndex","getZoom","display","map_view","old","render_data","apply","arguments","showAddress","temp_center","dhx_cal_data","_currentDate","map_end","trigger","selectEvent","event_id","callEvent","performClick","message","_new_event","Marker","getAttribute","_displayEventOnMap","address","language","uid","toString","_updateEventLocation","_delay","method","object","params","delay","setTimeout","ret","getEvent","old_event_id","new_event_id","event_object","_dataprocessor","_event_resolve_delay","is_new"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_minical.js b/codebase/sources/ext/dhtmlxscheduler_minical.js new file mode 100644 index 0000000..262c7cb --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_minical.js @@ -0,0 +1,472 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.templates.calendar_month = scheduler.date.date_to_str("%F %Y"); +scheduler.templates.calendar_scale_date = scheduler.date.date_to_str("%D"); +scheduler.templates.calendar_date = scheduler.date.date_to_str("%d"); +scheduler.config.minicalendar = { + mark_events: true +}; +scheduler._synced_minicalendars = []; +scheduler.renderCalendar = function(obj, _prev, is_refresh) { + var cal = null; + var date = obj.date || (scheduler._currentDate()); + if (typeof date == "string") + date = this.templates.api_date(date); + + if (!_prev) { + var cont = obj.container; + var pos = obj.position; + + if (typeof cont == "string") + cont = document.getElementById(cont); + + if (typeof pos == "string") + pos = document.getElementById(pos); + if (pos && (typeof pos.left == "undefined")) { + var tpos = getOffset(pos); + pos = { + top: tpos.top + pos.offsetHeight, + left: tpos.left + }; + } + if (!cont) + cont = scheduler._get_def_cont(pos); + + cal = this._render_calendar(cont, date, obj); + cal.onclick = function(e) { + e = e || event; + var src = e.target || e.srcElement; + + if (src.className.indexOf("dhx_month_head") != -1) { + var pname = src.parentNode.className; + if (pname.indexOf("dhx_after") == -1 && pname.indexOf("dhx_before") == -1) { + var newdate = scheduler.templates.xml_date(this.getAttribute("date")); + newdate.setDate(parseInt(src.innerHTML, 10)); + scheduler.unmarkCalendar(this); + scheduler.markCalendar(this, newdate, "dhx_calendar_click"); + this._last_date = newdate; + if (this.conf.handler) this.conf.handler.call(scheduler, newdate, this); + } + } + }; + } else { + cal = this._render_calendar(_prev.parentNode, date, obj, _prev); + scheduler.unmarkCalendar(cal); + } + + if (scheduler.config.minicalendar.mark_events) { + var start = scheduler.date.month_start(date); + var end = scheduler.date.add(start, 1, "month"); + var evs = this.getEvents(start, end); + var filter = this["filter_" + this._mode]; + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + if (filter && !filter(ev.id, ev)) + continue; + var d = ev.start_date; + if (d.valueOf() < start.valueOf()) + d = start; + d = scheduler.date.date_part(new Date(d.valueOf())); + while (d < ev.end_date) { + this.markCalendar(cal, d, "dhx_year_event"); + d = this.date.add(d, 1, "day"); + if (d.valueOf() >= end.valueOf()) + break; + } + } + } + + this._markCalendarCurrentDate(cal); + + cal.conf = obj; + if (obj.sync && !is_refresh) + this._synced_minicalendars.push(cal); + + return cal; +}; +scheduler._get_def_cont = function(pos) { + if (!this._def_count) { + this._def_count = document.createElement("DIV"); + this._def_count.className = "dhx_minical_popup"; + this._def_count.onclick = function(e) { (e || event).cancelBubble = true; }; + document.body.appendChild(this._def_count); + } + + this._def_count.style.left = pos.left + "px"; + this._def_count.style.top = pos.top + "px"; + this._def_count._created = new Date(); + + return this._def_count; +}; +scheduler._locateCalendar = function(cal, date) { + if (typeof date == "string") + date = scheduler.templates.api_date(date); + + if(+date > +cal._max_date || +date < +cal._min_date) + return null; + + var table = cal.childNodes[2].childNodes[0]; + + var weekNum = 0; + var dat = new Date(cal._min_date); + while(+this.date.add(dat, 1, "week") <= +date){ + dat = this.date.add(dat, 1, "week"); + weekNum++; + } + + var sm = scheduler.config.start_on_monday; + var day = (date.getDay() || (sm ? 7 : 0)) - (sm ? 1 : 0); + return table.rows[weekNum].cells[day].firstChild; +}; +scheduler.markCalendar = function(cal, date, css) { + var div = this._locateCalendar(cal, date); + if(!div) + return; + + div.className += " " + css; +}; +scheduler.unmarkCalendar = function(cal, date, css) { + date = date || cal._last_date; + css = css || "dhx_calendar_click"; + if (!date) return; + var el = this._locateCalendar(cal, date); + if(!el) + return; + el.className = (el.className || "").replace(RegExp(css, "g")); +}; +scheduler._week_template = function(width) { + var summ = (width || 250); + var left = 0; + + var week_template = document.createElement("div"); + var dummy_date = this.date.week_start(scheduler._currentDate()); + for (var i = 0; i < 7; i++) { + this._cols[i] = Math.floor(summ / (7 - i)); + this._render_x_header(i, left, dummy_date, week_template); + dummy_date = this.date.add(dummy_date, 1, "day"); + summ -= this._cols[i]; + left += this._cols[i]; + } + week_template.lastChild.className += " dhx_scale_bar_last"; + return week_template; +}; +scheduler.updateCalendar = function(obj, sd) { + obj.conf.date = sd; + this.renderCalendar(obj.conf, obj, true); +}; +scheduler._mini_cal_arrows = [" ", " "]; +scheduler._render_calendar = function(obj, sd, conf, previous) { + /*store*/ + var ts = scheduler.templates; + var temp = this._cols; + this._cols = []; + var temp2 = this._mode; + this._mode = "calendar"; + var temp3 = this._colsS; + this._colsS = {height: 0}; + var temp4 = new Date(this._min_date); + var temp5 = new Date(this._max_date); + var temp6 = new Date(scheduler._date); + var temp7 = ts.month_day; + var temp8 = this._ignores_detected; this._ignores_detected = 0; + ts.month_day = ts.calendar_date; + + sd = this.date.month_start(sd); + var week_template = this._week_template(obj.offsetWidth - 1 - this.config.minicalendar.padding ); + + var d; + if (previous) + d = previous; else { + d = document.createElement("DIV"); + d.className = "dhx_cal_container dhx_mini_calendar"; + } + d.setAttribute("date", this.templates.xml_format(sd)); + d.innerHTML = "<div class='dhx_year_month'></div><div class='dhx_year_week'>" + week_template.innerHTML + "</div><div class='dhx_year_body'></div>"; + + d.childNodes[0].innerHTML = this.templates.calendar_month(sd); + if (conf.navigation) { + var move_minicalendar_date = function(calendar, diff) { + var date = scheduler.date.add(calendar._date, diff, "month"); + scheduler.updateCalendar(calendar, date); + if (scheduler._date.getMonth() == calendar._date.getMonth() && scheduler._date.getFullYear() == calendar._date.getFullYear()) { + scheduler._markCalendarCurrentDate(calendar); + } + }; + + var css_classnames = ["dhx_cal_prev_button", "dhx_cal_next_button"]; + var css_texts = ["left:1px;top:2px;position:absolute;", "left:auto; right:1px;top:2px;position:absolute;"]; + var diffs = [-1, 1]; + var handler = function(diff) { + return function() { + if (conf.sync) { + var calendars = scheduler._synced_minicalendars; + for (var k = 0; k < calendars.length; k++) { + move_minicalendar_date(calendars[k], diff); + } + } else { + move_minicalendar_date(d, diff); + } + }; + }; + for (var j = 0; j < 2; j++) { + var arrow = document.createElement("DIV"); + //var diff = diffs[j]; + arrow.className = css_classnames[j]; + arrow.style.cssText = css_texts[j]; + arrow.innerHTML = this._mini_cal_arrows[j]; + d.firstChild.appendChild(arrow); + arrow.onclick = handler(diffs[j]); + } + } + d._date = new Date(sd); + + d.week_start = (sd.getDay() - (this.config.start_on_monday ? 1 : 0) + 7) % 7; + + var dd = d._min_date = this.date.week_start(sd); + d._max_date = this.date.add(d._min_date, 6, "week"); + + this._reset_month_scale(d.childNodes[2], sd, dd); + + var r = d.childNodes[2].firstChild.rows; + for (var k = r.length; k < 6; k++) { + var last_row = r[r.length - 1]; + r[0].parentNode.appendChild(last_row.cloneNode(true)); + var last_day_number = parseInt(last_row.childNodes[last_row.childNodes.length - 1].childNodes[0].innerHTML); + last_day_number = (last_day_number < 10) ? last_day_number : 0; // previous week could end on 28-31, so we should start with 0 + for (var ri = 0; ri < r[k].childNodes.length; ri++) { + r[k].childNodes[ri].className = "dhx_after"; + r[k].childNodes[ri].childNodes[0].innerHTML = scheduler.date.to_fixed(++last_day_number); + } + } + + if (!previous) + obj.appendChild(d); + + d.childNodes[1].style.height = (d.childNodes[1].childNodes[0].offsetHeight - 1) + "px"; // dhx_year_week should have height property so that day dates would get correct position. dhx_year_week height = height of it's child (with the day name) + + /*restore*/ + this._cols = temp; + this._mode = temp2; + this._colsS = temp3; + this._min_date = temp4; + this._max_date = temp5; + scheduler._date = temp6; + ts.month_day = temp7; + this._ignores_detected = temp8; + return d; +}; +scheduler.destroyCalendar = function(cal, force) { + if (!cal && this._def_count && this._def_count.firstChild) { + if (force || (new Date()).valueOf() - this._def_count._created.valueOf() > 500) + cal = this._def_count.firstChild; + } + if (!cal) return; + cal.onclick = null; + cal.innerHTML = ""; + if (cal.parentNode) + cal.parentNode.removeChild(cal); + if (this._def_count) + this._def_count.style.top = "-1000px"; +}; +scheduler.isCalendarVisible = function() { + if (this._def_count && parseInt(this._def_count.style.top, 10) > 0) + return this._def_count; + return false; +}; + +scheduler._attach_minical_events = function(){ + dhtmlxEvent(document.body, "click", function() { scheduler.destroyCalendar(); }); + scheduler._attach_minical_events = function(){}; +}; + +scheduler.attachEvent("onTemplatesReady", function() { + scheduler._attach_minical_events(); +}); + +scheduler.templates.calendar_time = scheduler.date.date_to_str("%d-%m-%Y"); + +scheduler.form_blocks.calendar_time = { + render: function() { + var html = "<input class='dhx_readonly' type='text' readonly='true'>"; + + var cfg = scheduler.config; + var dt = this.date.date_part(scheduler._currentDate()); + + var last = 24 * 60, first = 0; + if (cfg.limit_time_select) { + first = 60 * cfg.first_hour; + last = 60 * cfg.last_hour + 1; // to include "17:00" option if time select is limited + } + dt.setHours(first / 60); + + html += " <select>"; + for (var i = first; i < last; i += this.config.time_step * 1) { // `<` to exclude last "00:00" option + var time = this.templates.time_picker(dt); + html += "<option value='" + i + "'>" + time + "</option>"; + dt = this.date.add(dt, this.config.time_step, "minute"); + } + html += "</select>"; + + var full_day = scheduler.config.full_day; + + return "<div style='height:30px;padding-top:0; font-size:inherit;' class='dhx_section_time'>" + html + "<span style='font-weight:normal; font-size:10pt;'> – </span>" + html + "</div>"; + }, + set_value: function(node, value, ev) { + + var inputs = node.getElementsByTagName("input"); + var selects = node.getElementsByTagName("select"); + var start_date, + end_date; + + var _init_once = function(inp, date, number) { + inp.onclick = function() { + scheduler.destroyCalendar(null, true); + scheduler.renderCalendar({ + position: inp, + date: new Date(this._date), + navigation: true, + handler: function(new_date) { + inp.value = scheduler.templates.calendar_time(new_date); + inp._date = new Date(new_date); + scheduler.destroyCalendar(); + if (scheduler.config.event_duration && scheduler.config.auto_end_date && number === 0) { //first element = start date + _update_minical_select(); + } + } + }); + }; + }; + + if (scheduler.config.full_day) { + if (!node._full_day) { + var html = "<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> " + scheduler.locale.labels.full_day + " </label></input>"; + if (!scheduler.config.wide_form) + html = node.previousSibling.innerHTML + html; + node.previousSibling.innerHTML = html; + node._full_day = true; + } + var input = node.previousSibling.getElementsByTagName("input")[0]; + + var isFulldayEvent = (scheduler.date.time_part(ev.start_date) === 0 && scheduler.date.time_part(ev.end_date) === 0); + input.checked = isFulldayEvent; + + selects[0].disabled = input.checked; + selects[1].disabled = input.checked; + + input.onclick = function() { + if (input.checked === true) { + var obj = {}; + scheduler.form_blocks.calendar_time.get_value(node, obj); + + start_date = scheduler.date.date_part(obj.start_date); + end_date = scheduler.date.date_part(obj.end_date); + + if (+end_date == +start_date || (+end_date >= +start_date && (ev.end_date.getHours() !== 0 || ev.end_date.getMinutes() !== 0))) + end_date = scheduler.date.add(end_date, 1, "day"); + } + + var start = start_date || ev.start_date; + var end = end_date || ev.end_date; + _attach_action(inputs[0], start); + _attach_action(inputs[1], end); + selects[0].value = start.getHours() * 60 + start.getMinutes(); + selects[1].value = end.getHours() * 60 + end.getMinutes(); + + selects[0].disabled = input.checked; + selects[1].disabled = input.checked; + + }; + } + + if (scheduler.config.event_duration && scheduler.config.auto_end_date) { + + var _update_minical_select = function () { + start_date = scheduler.date.add(inputs[0]._date, selects[0].value, "minute"); + end_date = new Date(start_date.getTime() + (scheduler.config.event_duration * 60 * 1000)); + + inputs[1].value = scheduler.templates.calendar_time(end_date); + inputs[1]._date = scheduler.date.date_part(new Date(end_date)); + + selects[1].value = end_date.getHours() * 60 + end_date.getMinutes(); + }; + + selects[0].onchange = _update_minical_select; // only update on first select should trigger update so user could define other end date if he wishes too + } + + function _attach_action(inp, date, number) { + _init_once(inp, date, number); + inp.value = scheduler.templates.calendar_time(date); + inp._date = scheduler.date.date_part(new Date(date)); + } + + _attach_action(inputs[0], ev.start_date, 0); + _attach_action(inputs[1], ev.end_date, 1); + _init_once = function() {}; + + selects[0].value = ev.start_date.getHours() * 60 + ev.start_date.getMinutes(); + selects[1].value = ev.end_date.getHours() * 60 + ev.end_date.getMinutes(); + + }, + get_value: function(node, ev) { + var inputs = node.getElementsByTagName("input"); + var selects = node.getElementsByTagName("select"); + + ev.start_date = scheduler.date.add(inputs[0]._date, selects[0].value, "minute"); + ev.end_date = scheduler.date.add(inputs[1]._date, selects[1].value, "minute"); + + if (ev.end_date <= ev.start_date) + ev.end_date = scheduler.date.add(ev.start_date, scheduler.config.time_step, "minute"); + return { + start_date: new Date(ev.start_date), + end_date: new Date(ev.end_date) + }; + }, + focus: function(node) { + } +}; +scheduler.linkCalendar = function(calendar, datediff) { + var action = function() { + var date = scheduler._date; + var dateNew = new Date(date.valueOf()); + if (datediff) dateNew = datediff(dateNew); + dateNew.setDate(1); + scheduler.updateCalendar(calendar, dateNew); + return true; + }; + + scheduler.attachEvent("onViewChange", action); + scheduler.attachEvent("onXLE", action); + scheduler.attachEvent("onEventAdded", action); + scheduler.attachEvent("onEventChanged", action); + scheduler.attachEvent("onAfterEventDelete", action); + action(); +}; + +scheduler._markCalendarCurrentDate = function(calendar) { + var date = scheduler._date; + var mode = scheduler._mode; + var month_start = scheduler.date.month_start(new Date(calendar._date)); + var month_end = scheduler.date.add(month_start, 1, "month"); + + if (mode == 'day' || (this._props && !!this._props[mode])) { // if day or units view + if (month_start.valueOf() <= date.valueOf() && month_end > date) { + scheduler.markCalendar(calendar, date, "dhx_calendar_click"); + } + } else if (mode == 'week') { + var dateNew = scheduler.date.week_start(new Date(date.valueOf())); + for (var i = 0; i < 7; i++) { + if (month_start.valueOf() <= dateNew.valueOf() && month_end > dateNew) // >= would mean mark first day of the next month + scheduler.markCalendar(calendar, dateNew, "dhx_calendar_click"); + dateNew = scheduler.date.add(dateNew, 1, "day"); + } + } +}; + +scheduler.attachEvent("onEventCancel", function(){ + scheduler.destroyCalendar(null, true); +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_minical.js.map b/codebase/sources/ext/dhtmlxscheduler_minical.js.map new file mode 100644 index 0000000..f5838fb --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_minical.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_minical.js.map","sources":["dhtmlxscheduler_minical.js"],"names":["scheduler","templates","calendar_month","date","date_to_str","calendar_scale_date","calendar_date","config","minicalendar","mark_events","_synced_minicalendars","renderCalendar","obj","_prev","is_refresh","cal","_currentDate","this","api_date","_render_calendar","parentNode","unmarkCalendar","cont","container","pos","position","document","getElementById","left","tpos","getOffset","top","offsetHeight","_get_def_cont","onclick","e","event","src","target","srcElement","className","indexOf","pname","newdate","xml_date","getAttribute","setDate","parseInt","innerHTML","markCalendar","_last_date","conf","handler","call","start","month_start","end","add","evs","getEvents","filter","_mode","i","length","ev","id","d","start_date","valueOf","date_part","Date","end_date","_markCalendarCurrentDate","sync","push","_def_count","createElement","cancelBubble","body","appendChild","style","_created","_locateCalendar","_max_date","_min_date","table","childNodes","weekNum","dat","sm","start_on_monday","day","getDay","rows","cells","firstChild","css","div","el","replace","RegExp","_week_template","width","summ","week_template","dummy_date","week_start","_cols","Math","floor","_render_x_header","lastChild","updateCalendar","sd","_mini_cal_arrows","previous","ts","temp","temp2","temp3","_colsS","height","temp4","temp5","temp6","_date","temp7","month_day","temp8","_ignores_detected","offsetWidth","padding","setAttribute","xml_format","navigation","move_minicalendar_date","calendar","diff","getMonth","getFullYear","css_classnames","css_texts","diffs","calendars","k","j","arrow","cssText","dd","_reset_month_scale","r","last_row","cloneNode","last_day_number","ri","to_fixed","destroyCalendar","force","removeChild","isCalendarVisible","_attach_minical_events","dhtmlxEvent","attachEvent","calendar_time","form_blocks","render","html","cfg","dt","last","first","limit_time_select","first_hour","last_hour","setHours","time_step","time","time_picker","full_day","set_value","node","value","_attach_action","inp","number","_init_once","inputs","getElementsByTagName","selects","new_date","event_duration","auto_end_date","_update_minical_select","_full_day","locale","labels","wide_form","previousSibling","input","isFulldayEvent","time_part","checked","disabled","get_value","getHours","getMinutes","getTime","onchange","focus","linkCalendar","datediff","action","dateNew","mode","month_end","_props"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_monthheight.js b/codebase/sources/ext/dhtmlxscheduler_monthheight.js new file mode 100644 index 0000000..ccf6611 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_monthheight.js @@ -0,0 +1,34 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady",function(){ + scheduler.xy.scroll_width = 0; + + var old = scheduler.render_view_data; + scheduler.render_view_data=function(){ + var data = this._els["dhx_cal_data"][0]; + data.firstChild._h_fix = true; + + old.apply(scheduler,arguments); + + + + var height = parseInt(data.style.height); + data.style.height="1px"; + data.style.height=data.scrollHeight+"px"; + + this._obj.style.height = this._obj.clientHeight + data.scrollHeight - height + "px"; + }; + + var old_s=scheduler._reset_month_scale; + scheduler._reset_month_scale=function(a,b,c){ + var dummy = {clientHeight:100}; + old_s.apply(scheduler,[dummy,b,c]); + a.innerHTML = dummy.innerHTML; + }; + +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map b/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map new file mode 100644 index 0000000..47ff310 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_monthheight.js.map","sources":["dhtmlxscheduler_monthheight.js"],"names":["scheduler","attachEvent","xy","scroll_width","old","render_view_data","data","this","_els","firstChild","_h_fix","apply","arguments","height","parseInt","style","scrollHeight","_obj","clientHeight","old_s","_reset_month_scale","a","b","c","dummy","innerHTML"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WACxCD,UAAUE,GAAGC,aAAe,CAE5B,IAAIC,GAAMJ,UAAUK,gBACpBL,WAAUK,iBAAiB,WAC1B,GAAIC,GAAOC,KAAKC,KAAmB,aAAE,EACrCF,GAAKG,WAAWC,QAAS,EAEzBN,EAAIO,MAAMX,UAAUY,UAIpB,IAAIC,GAASC,SAASR,EAAKS,MAAMF,OACjCP,GAAKS,MAAMF,OAAO,MAClBP,EAAKS,MAAMF,OAAOP,EAAKU,aAAa,KAEpCT,KAAKU,KAAKF,MAAMF,OAASN,KAAKU,KAAKC,aAAeZ,EAAKU,aAAeH,EAAS,KAGhF,IAAIM,GAAMnB,UAAUoB,kBACpBpB,WAAUoB,mBAAmB,SAASC,EAAEC,EAAEC,GACzC,GAAIC,IAASN,aAAa,IAC1BC,GAAMR,MAAMX,WAAWwB,EAAMF,EAAEC,IAC/BF,EAAEI,UAAYD,EAAMC"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multisection.js b/codebase/sources/ext/dhtmlxscheduler_multisection.js new file mode 100644 index 0000000..90c59e0 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multisection.js @@ -0,0 +1,254 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.multisection = true; +scheduler.config.section_delemiter = ","; +scheduler.attachEvent("onSchedulerReady", function(){ + + + var old_unit = scheduler._update_unit_section; + scheduler._update_unit_section = function(action){ + return scheduler._update_sections(action, old_unit); + }; + var old_timeline = scheduler._update_timeline_section; + scheduler._update_timeline_section =function(action){ + return scheduler._update_sections(action, old_timeline); + }; + + + scheduler.isMultisectionEvent = function(ev){ + if(ev && this._get_multisection_view()){ + var units = this._get_event_sections(ev); + return (units.length > 1); + } + return false; + }; + + scheduler._get_event_sections = function(event){ + var mapping = this._get_section_property(); + var units = event[mapping] || ""; + return this._parse_event_sections(units); + }; + scheduler._parse_event_sections = function(value){ + if(value instanceof Array){ + return value; + }else{ + return value.toString().split(scheduler.config.section_delemiter); + } + }; + + scheduler._register_copies_array = function(evs){ + for(var i=0; i < evs.length; i++) + this._register_copy(evs[i]); + }; + scheduler._register_copy = function(copy){ + if(!this._multisection_copies[copy.id]){ + this._multisection_copies[copy.id] = {}; + } + var section = copy[this._get_section_property()]; + var evs = this._multisection_copies[copy.id]; + if(!evs[section]){ + evs[section] = copy; + } + }; + scheduler._get_copied_event = function(event_id, section){ + if(!this._multisection_copies[event_id]) + return null; + + if(this._multisection_copies[event_id][section]) + return this._multisection_copies[event_id][section]; + + var parts = this._multisection_copies[event_id]; + //multisection event has not been rendered in this section, need retrieve state of one of rendered events + if(scheduler._drag_event && scheduler._drag_event._orig_section && parts[scheduler._drag_event._orig_section]){ + return parts[scheduler._drag_event._orig_section]; + }else{ + var min_sorder = Infinity, + ev = null; + for(var i in parts){ + if(parts[i]._sorder < min_sorder){ + ev = parts[i]; + min_sorder = parts[i]._sorder; + } + } + return ev; + } + }; + scheduler._clear_copied_events = function(){ + this._multisection_copies = {}; + }; + scheduler._clear_copied_events(); + + scheduler._split_events = function(evs) { + var stack = []; + var pr = this._get_multisection_view(); + var mapping = this._get_section_property(); + if(pr) { + for (var i=0; i<evs.length; i++) { + var units = this._get_event_sections(evs[i]); + + if(units.length > 1) { + for (var j=0; j<units.length; j++) { + if(typeof pr.order[units[j]] === "undefined") + continue; + var ev = this._lame_copy({}, evs[i]); + ev[mapping] = units[j]; + stack.push(ev); + } + } else { + stack.push(evs[i]); + } + + } + }else{ + stack = evs; + } + return stack; + }; + + + scheduler._get_multisection_view = function(){ + if(!this.config.multisection){ + return false; + }else{ + return scheduler._get_section_view(); + } + }; + + var vis_evs = scheduler.get_visible_events; + scheduler.get_visible_events = function(only_timed) { + this._clear_copied_events(); + var evs = vis_evs.apply(this,arguments); + var pr = this._get_multisection_view(); + if (this._get_multisection_view()){ + evs = this._split_events(evs); + this._register_copies_array(evs); + } + + return evs; + }; + + scheduler._rendered_events = {}; + var old_view_data = scheduler.render_view_data; + scheduler.render_view_data = function(evs, hold) { + if (this._get_multisection_view() && evs) { + //render single event during dnd, restore flags that were calculated during full render + evs = this._split_events(evs); + this._restore_render_flags(evs); + } + + return old_view_data.apply(this,[evs, hold]); + }; + scheduler._restore_render_flags = function(section_evs){ + var map_to = this._get_section_property(); + for(var i=0; i < section_evs.length; i++){ + var ev = section_evs[i]; + var prev_state = scheduler._get_copied_event(ev.id, ev[map_to]); + if(prev_state){ + for(var p in prev_state){ + if(p.indexOf("_") === 0){ + ev[p] = prev_state[p]; + } + } + } + } + }; + scheduler._update_sections = function(action, def_handler){ + var view = action.view, + event = action.event, + pos = action.pos; + //view - timeline or units view object. both stores displayed sections in 'view.order' hash + // pos - mouse position, calculated in _mouse_coords method + // event - scheduler event + + if(!scheduler.isMultisectionEvent(event)){ + def_handler.apply(scheduler, [action]); + }else{ + if(!scheduler._drag_event._orig_section){ + scheduler._drag_event._orig_section = pos.section; + } + + if(scheduler._drag_event._orig_section != pos.section){ + var shift = (view.order[pos.section] - view.order[scheduler._drag_event._orig_section]); + if(shift){ + var sections = this._get_event_sections(event); + var new_sections = []; + var shifted = true; + for(var i=0; i<sections.length; i++){ + var new_section = scheduler._shift_sections(view, sections[i], shift); + if(new_section !== null){ + new_sections[i] = new_section; + }else{ + new_sections = sections; + shifted = false; + break; + + } + } + if(shifted) + scheduler._drag_event._orig_section = pos.section; + + event[scheduler._get_section_property()] = new_sections.join(","); + } + + } + } + }; + + scheduler._shift_sections = function(matrix, orig_section, shift){ + for(var i in matrix.order){ + if(matrix.order[i] - matrix.order[orig_section] == shift){ + return i; + } + } + return null; + }; + + + // limit extension + + var old_get_blocked_zones = scheduler._get_blocked_zones; + scheduler._get_blocked_zones = function(timespans, property, day_index, day_value, timespan_type){ + if(property && this.config.multisection){ + property = this._parse_event_sections(property); + var zones = []; + for(var i =0; i < property.length; i++){ + zones = zones.concat(old_get_blocked_zones.apply(this, [timespans, property[i], day_index, day_value, timespan_type])); + } + return zones; + }else{ + return old_get_blocked_zones.apply(this, arguments); + } + }; + + + // collision extension + var old_check_secions_collision = scheduler._check_sections_collision; + + scheduler._check_sections_collision = function(a, b){ + if(this.config.multisection && this._get_section_view()){ + a = this._split_events([a]); + b = this._split_events([b]); + + var collision = false; + for(var a_ind = 0, a_len = a.length; a_ind < a_len; a_ind++){ + if(collision){ + break; + } + for(var b_ind = 0, b_len = b.length; b_ind < b_len; b_ind++){ + if(old_check_secions_collision.apply(this, [a[a_ind], b[b_ind]])){ + collision = true; + break; + } + } + } + return collision; + }else{ + return old_check_secions_collision.apply(this, arguments); + } + }; +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multisection.js.map b/codebase/sources/ext/dhtmlxscheduler_multisection.js.map new file mode 100644 index 0000000..1645dcd --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multisection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_multisection.js.map","sources":["dhtmlxscheduler_multisection.js"],"names":["scheduler","config","multisection","section_delemiter","attachEvent","old_unit","_update_unit_section","action","_update_sections","old_timeline","_update_timeline_section","isMultisectionEvent","ev","this","_get_multisection_view","units","_get_event_sections","length","event","mapping","_get_section_property","_parse_event_sections","value","Array","toString","split","_register_copies_array","evs","i","_register_copy","copy","_multisection_copies","id","section","_get_copied_event","event_id","parts","_drag_event","_orig_section","min_sorder","Infinity","_sorder","_clear_copied_events","_split_events","stack","pr","j","order","_lame_copy","push","_get_section_view","vis_evs","get_visible_events","apply","arguments","_rendered_events","old_view_data","render_view_data","hold","_restore_render_flags","section_evs","map_to","prev_state","p","indexOf","def_handler","view","pos","shift","sections","new_sections","shifted","new_section","_shift_sections","join","matrix","orig_section","old_get_blocked_zones","_get_blocked_zones","timespans","property","day_index","day_value","timespan_type","zones","concat","old_check_secions_collision","_check_sections_collision","a","b","collision","a_ind","a_len","b_ind","b_len"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multiselect.js b/codebase/sources/ext/dhtmlxscheduler_multiselect.js new file mode 100644 index 0000000..c797198 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multiselect.js @@ -0,0 +1,69 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.form_blocks["multiselect"]={ + render:function(sns) { + var _result = "<div class='dhx_multi_select_"+sns.name+"' style='overflow: auto; height: "+sns.height+"px; position: relative;' >"; + for (var i=0; i<sns.options.length; i++) { + _result += "<label><input type='checkbox' value='"+sns.options[i].key+"'/>"+sns.options[i].label+"</label>"; + if(convertStringToBoolean(sns.vertical)) _result += '<br/>'; + } + _result += "</div>"; + return _result; + }, + set_value:function(node,value,ev,config){ + + var _children = node.getElementsByTagName('input'); + for(var i=0;i<_children.length;i++) { + _children[i].checked = false; //unchecking all inputs on the form + } + + function _mark_inputs(ids) { // ids = [ 0: undefined, 1: undefined, 2: true ... ] + var _children = node.getElementsByTagName('input'); + for(var i=0;i<_children.length; i++) { + _children[i].checked = !! ids[_children[i].value]; + } + } + + var _ids = []; + if (ev[config.map_to]) { + var results = (ev[config.map_to] + "").split(','); + for (var i = 0; i < results.length; i++) { + _ids[results[i]] = true; + } + _mark_inputs(_ids); + } else { + if (scheduler._new_event || !config.script_url) + return; + var divLoading = document.createElement('div'); + divLoading.className = 'dhx_loading'; + divLoading.style.cssText = "position: absolute; top: 40%; left: 40%;"; + node.appendChild(divLoading); + dhtmlxAjax.get(config.script_url + '?dhx_crosslink_' + config.map_to + '=' + ev.id + '&uid=' + scheduler.uid(), function(loader) { + var _result = loader.doXPath("//data/item"); + var _ids = []; + for (var i = 0; i < _result.length; i++) { + _ids[_result[i].getAttribute(config.map_to)] = true; + } + _mark_inputs(_ids); + node.removeChild(divLoading); + }); + } + }, + get_value:function(node,ev,config){ + var _result = []; + var _children = node.getElementsByTagName("input"); + for(var i=0;i<_children.length;i++) { + if(_children[i].checked) + _result.push(_children[i].value); + } + return _result.join(','); + }, + + focus:function(node){ + } +};
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map b/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map new file mode 100644 index 0000000..c9b43ed --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_multiselect.js.map","sources":["dhtmlxscheduler_multiselect.js"],"names":["scheduler","form_blocks","render","sns","_result","name","height","i","options","length","key","label","convertStringToBoolean","vertical","set_value","node","value","ev","config","_mark_inputs","ids","_children","getElementsByTagName","checked","_ids","map_to","results","split","_new_event","script_url","divLoading","document","createElement","className","style","cssText","appendChild","dhtmlxAjax","get","id","uid","loader","doXPath","getAttribute","removeChild","get_value","push","join","focus"],"mappings":"AAAAA,UAAUC,YAAyB,aAClCC,OAAO,SAASC,GAEf,IAAK,GADDC,GAAU,gCAAgCD,EAAIE,KAAK,oCAAoCF,EAAIG,OAAO,6BAC7FC,EAAE,EAAGA,EAAEJ,EAAIK,QAAQC,OAAQF,IACnCH,GAAW,wCAAwCD,EAAIK,QAAQD,GAAGG,IAAI,MAAMP,EAAIK,QAAQD,GAAGI,MAAM,WAC9FC,uBAAuBT,EAAIU,YAAWT,GAAW,QAGrD,OADAA,IAAW,UAGZU,UAAU,SAASC,EAAKC,EAAMC,EAAGC,GAOhC,QAASC,GAAaC,GAErB,IAAI,GADAC,GAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAQF,IAC/Bc,EAAUd,GAAGgB,UAAaH,EAAIC,EAAUd,GAAGS,OAP7C,IAAI,GADAK,GAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAOF,IAC9Bc,EAAUd,GAAGgB,SAAU,CAUxB;GAAIC,KACJ,IAAIP,EAAGC,EAAOO,QAAS,CAEtB,IAAK,GADDC,IAAWT,EAAGC,EAAOO,QAAU,IAAIE,MAAM,KACpCpB,EAAI,EAAGA,EAAImB,EAAQjB,OAAQF,IACnCiB,EAAKE,EAAQnB,KAAM,CAEpBY,GAAaK,OACP,CACN,GAAIxB,UAAU4B,aAAeV,EAAOW,WACnC,MACD,IAAIC,GAAaC,SAASC,cAAc,MACxCF,GAAWG,UAAY,cACvBH,EAAWI,MAAMC,QAAU,2CAC3BpB,EAAKqB,YAAYN,GACjBO,WAAWC,IAAIpB,EAAOW,WAAa,kBAAoBX,EAAOO,OAAS,IAAMR,EAAGsB,GAAK,QAAUvC,UAAUwC,MAAO,SAASC,GAGxH,IAAK,GAFDrC,GAAUqC,EAAOC,QAAQ,eACzBlB,KACKjB,EAAI,EAAGA,EAAIH,EAAQK,OAAQF,IACnCiB,EAAKpB,EAAQG,GAAGoC,aAAazB,EAAOO,UAAW,CAEhDN,GAAaK,GACbT,EAAK6B,YAAYd;KAIpBe,UAAU,SAAS9B,GAGlB,IAAI,GAFAX,MACAiB,EAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAOF,IAC3Bc,EAAUd,GAAGgB,SACfnB,EAAQ0C,KAAKzB,EAAUd,GAAGS,MAE5B,OAAOZ,GAAQ2C,KAAK,MAGrBC,MAAM"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multisource.js b/codebase/sources/ext/dhtmlxscheduler_multisource.js new file mode 100644 index 0000000..09194bc --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multisource.js @@ -0,0 +1,29 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + + function backup(obj){ + var t = function(){}; + t.prototype = obj; + return t; + } + + var old = scheduler._load; + scheduler._load=function(url,from){ + url=url||this._load_url; + if (typeof url == "object"){ + var t = backup(this._loaded); + for (var i=0; i < url.length; i++) { + this._loaded=new t(); + old.call(this,url[i],from); + } + } else + old.apply(this,arguments); + }; + +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multisource.js.map b/codebase/sources/ext/dhtmlxscheduler_multisource.js.map new file mode 100644 index 0000000..910606c --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multisource.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_multisource.js.map","sources":["dhtmlxscheduler_multisource.js"],"names":["backup","obj","t","prototype","old","scheduler","_load","url","from","this","_load_url","_loaded","i","length","call","apply","arguments"],"mappings":"CAAA,WAEC,QAASA,GAAOC,GACf,GAAIC,GAAI,YAER,OADAA,GAAEC,UAAYF,EACPC,EAGR,GAAIE,GAAMC,UAAUC,KACpBD,WAAUC,MAAM,SAASC,EAAIC,GAE5B,GADAD,EAAIA,GAAKE,KAAKC,UACI,gBAAPH,GAEV,IAAK,GADDL,GAAIF,EAAOS,KAAKE,SACXC,EAAE,EAAGA,EAAIL,EAAIM,OAAQD,IAC7BH,KAAKE,QAAQ,GAAIT,GACjBE,EAAIU,KAAKL,KAAKF,EAAIK,GAAGJ,OAGtBJ,GAAIW,MAAMN,KAAKO"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_mvc.js b/codebase/sources/ext/dhtmlxscheduler_mvc.js new file mode 100644 index 0000000..f3009cd --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_mvc.js @@ -0,0 +1,147 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + + var cfg = { + use_id : false + }; + + //remove private properties + function sanitize(ev){ + var obj = {}; + for (var key in ev) + if (key.indexOf("_") !== 0) + obj[key] = ev[key]; + + if (!cfg.use_id) + delete obj.id; + + return obj; + } + + var update_timer; + function update_view(){ + clearTimeout(update_timer); + update_timer = setTimeout(function(){ + scheduler.updateView(); + },1); + } + + function _start_ext_load(cal){ + cal._loading = true; + cal._not_render = true; + + cal.callEvent("onXLS", []); + } + function _finish_ext_load(cal){ + cal._not_render = false; + if (cal._render_wait) + cal.render_view_data(); + cal._loading = false; + + cal.callEvent("onXLE", []); + } + + + function _get_id(model){ + return cfg.use_id ? model.id : model.cid; + } + +scheduler.backbone = function(events, config){ + if (config) cfg = config; + + events.bind("change", function(model, info){ + var cid = _get_id(model); + var ev = scheduler._events[cid] = model.toJSON(); + ev.id = cid; + + scheduler._init_event(ev); + update_view(); + }); + events.bind("remove", function(model, changes){ + var cid = _get_id(model); + if (scheduler._events[cid]) + scheduler.deleteEvent(cid); + }); + + var queue = []; + function add_from_queue(){ + if (queue.length){ + scheduler.parse(queue, "json"); + queue = []; + } + } + + events.bind("add", function(model, changes){ + var cid = _get_id(model); + if (!scheduler._events[cid]){ + var ev = model.toJSON(); + ev.id = cid; + scheduler._init_event(ev); + + queue.push(ev); + if (queue.length == 1) + setTimeout(add_from_queue,1); + } + }); + + events.bind("request", function(obj){ + if (obj instanceof Backbone.Collection) + _start_ext_load(scheduler); + }); + events.bind("sync", function(obj){ + if (obj instanceof Backbone.Collection) + _finish_ext_load(scheduler); + }); + events.bind("error", function(obj){ + if (obj instanceof Backbone.Collection) + _finish_ext_load(scheduler); + }); + + + scheduler.attachEvent("onEventCreated", function(id){ + var ev = new events.model(scheduler.getEvent(id)); + scheduler._events[id] = ev.toJSON(); + scheduler._events[id].id = id; + + return true; + }); + + scheduler.attachEvent("onEventAdded", function(id){ + if (!events.get(id)){ + var data = sanitize(scheduler.getEvent(id)); + var model = new events.model(data); + + var cid = _get_id(model); + if (cid != id) + this.changeEventId(id, cid); + events.add(model); + events.trigger("scheduler:add", model); + } + return true; + }); + scheduler.attachEvent("onEventChanged", function(id){ + var ev = events.get(id); + var upd = sanitize(scheduler.getEvent(id)); + + ev.set(upd); + events.trigger("scheduler:change", ev); + + return true; + }); + scheduler.attachEvent("onEventDeleted", function(id){ + var model = events.get(id); + if (model){ + events.trigger("scheduler:remove", model); + events.remove(id); + } + return true; + }); +}; + +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_mvc.js.map b/codebase/sources/ext/dhtmlxscheduler_mvc.js.map new file mode 100644 index 0000000..668f82d --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_mvc.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_mvc.js.map","sources":["dhtmlxscheduler_mvc.js"],"names":["sanitize","ev","obj","key","indexOf","cfg","use_id","id","update_view","clearTimeout","update_timer","setTimeout","scheduler","updateView","_start_ext_load","cal","_loading","_not_render","callEvent","_finish_ext_load","_render_wait","render_view_data","_get_id","model","cid","backbone","events","config","add_from_queue","queue","length","parse","bind","_events","toJSON","_init_event","deleteEvent","push","Backbone","Collection","attachEvent","getEvent","get","data","this","changeEventId","add","trigger","upd","set","remove"],"mappings":"CAAA,WAOC,QAASA,GAASC,GACjB,GAAIC,KACJ,KAAK,GAAIC,KAAOF,GACU,IAArBE,EAAIC,QAAQ,OACfF,EAAIC,GAAOF,EAAGE,GAKhB,OAHKE,GAAIC,cACDJ,GAAIK,GAELL,EAIR,QAASM,KACRC,aAAaC,GACbA,EAAeC,WAAW,WACzBC,UAAUC,cACT,GAGH,QAASC,GAAgBC,GACxBA,EAAIC,UAAW,EACfD,EAAIE,aAAc,EAElBF,EAAIG,UAAU,YAEf,QAASC,GAAiBJ,GACzBA,EAAIE,aAAc,EACdF,EAAIK,cACPL,EAAIM,mBACLN,EAAIC,UAAW,EAEfD,EAAIG,UAAU,YAIf,QAASI,GAAQC,GAChB,MAAOlB,GAAIC,OAASiB,EAAMhB,GAAKgB,EAAMC,IA1CtC,GAiBId,GAjBAL,GACHC,QAAS,EA4CXM,WAAUa,SAAW,SAASC,EAAQC,GAkBrC,QAASC,KACJC,EAAMC,SACTlB,UAAUmB,MAAMF,EAAO,QACvBA;CApBEF,IAAQtB,EAAMsB,GAElBD,EAAOM,KAAK,SAAU,SAAST,GAC9B,GAAIC,GAAMF,EAAQC,GACdtB,EAAKW,UAAUqB,QAAQT,GAAOD,EAAMW,QACxCjC,GAAGM,GAAKiB,EAERZ,UAAUuB,YAAYlC,GACtBO,MAEDkB,EAAOM,KAAK,SAAU,SAAST,GAC9B,GAAIC,GAAMF,EAAQC,EACdX,WAAUqB,QAAQT,IACrBZ,UAAUwB,YAAYZ,IAGxB,IAAIK,KAQJH,GAAOM,KAAK,MAAO,SAAST,GAC3B,GAAIC,GAAMF,EAAQC,EAClB,KAAKX,UAAUqB,QAAQT,GAAK,CAC3B,GAAIvB,GAAMsB,EAAMW,QAChBjC,GAAGM,GAAKiB,EACRZ,UAAUuB,YAAYlC,GAEtB4B,EAAMQ,KAAKpC,GACS,GAAhB4B,EAAMC,QACTnB,WAAWiB,EAAe,MAI7BF,EAAOM,KAAK,UAAW,SAAS9B,GAC3BA,YAAeoC,UAASC,YAC3BzB,EAAgBF,aAElBc,EAAOM,KAAK,OAAQ,SAAS9B,GACxBA,YAAeoC,UAASC,YAC3BpB,EAAiBP;GAEnBc,EAAOM,KAAK,QAAS,SAAS9B,GACzBA,YAAeoC,UAASC,YAC3BpB,EAAiBP,aAInBA,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIN,GAAK,GAAIyB,GAAOH,MAAMX,UAAU6B,SAASlC,GAI7C,OAHAK,WAAUqB,QAAQ1B,GAAMN,EAAGiC,SAC3BtB,UAAUqB,QAAQ1B,GAAIA,GAAKA,GAEpB,IAGRK,UAAU4B,YAAY,eAAgB,SAASjC,GAC9C,IAAKmB,EAAOgB,IAAInC,GAAI,CACnB,GAAIoC,GAAO3C,EAASY,UAAU6B,SAASlC,IACnCgB,EAAQ,GAAIG,GAAOH,MAAMoB,GAEzBnB,EAAMF,EAAQC,EACdC,IAAOjB,GACVqC,KAAKC,cAActC,EAAIiB,GACxBE,EAAOoB,IAAIvB,GACXG,EAAOqB,QAAQ,gBAAiBxB,GAEjC,OAAO,IAERX,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIN,GAAKyB,EAAOgB,IAAInC,GAChByC,EAAMhD,EAASY,UAAU6B,SAASlC,GAKtC;MAHAN,GAAGgD,IAAID,GACPtB,EAAOqB,QAAQ,mBAAoB9C,IAE5B,IAERW,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIgB,GAAQG,EAAOgB,IAAInC,EAKvB,OAJIgB,KACHG,EAAOqB,QAAQ,mBAAoBxB,GACnCG,EAAOwB,OAAO3C,KAER"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_offline.js b/codebase/sources/ext/dhtmlxscheduler_offline.js new file mode 100644 index 0000000..8f18cce --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_offline.js @@ -0,0 +1,83 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.load=function(url,call){ + var type; + if (typeof call == "string"){ + this._process=call; + type = call; + call = arguments[2]; + } + + this._load_url=url; + this._after_call=call; + if (url.$proxy) { + url.load(this, typeof type == "string" ? type : null); + return; + } + + this._load(url,this._date); +}; + +scheduler._dp_init_backup = scheduler._dp_init; +scheduler._dp_init = function(dp) { + dp._sendData = function(a1,rowId){ + if (!a1) return; //nothing to send + if (!this.callEvent("onBeforeDataSending",rowId?[rowId,this.getState(rowId),a1]:[null, null, a1])) return false; + if (rowId) + this._in_progress[rowId]=(new Date()).valueOf(); + if (this.serverProcessor.$proxy) { + var mode = this._tMode!="POST" ? 'get' : 'post'; + var to_send = []; + for (var i in a1) + to_send.push({ id: i, data: a1[i], operation: this.getState(i)}); + this.serverProcessor._send(to_send, mode, this); + return; + } + + var a2=new dtmlXMLLoaderObject(this.afterUpdate,this,true); + var a3 = this.serverProcessor+(this._user?(getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&")):""); + if (this._tMode!="POST") + a2.loadXML(a3+((a3.indexOf("?")!=-1)?"&":"?")+this.serialize(a1,rowId)); + else + a2.loadXML(a3,true,this.serialize(a1,rowId)); + this._waitMode++; + }; + + dp._updatesToParams = function(items) { + var stack = {}; + for (var i = 0; i < items.length; i++) + stack[items[i].id] = items[i].data; + return this.serialize(stack); + }; + + dp._processResult = function(text, xml, loader) { + if (loader.status != 200) { + for (var i in this._in_progress) { + var state = this.getState(i); + this.afterUpdateCallback(i, i, state, null); + } + return; + } + xml = new dtmlXMLLoaderObject(function() {},this,true); + xml.loadXMLString(text); + xml.xmlDoc = loader; + + this.afterUpdate(this, null, null, null, xml); + }; + this._dp_init_backup(dp); +}; + +if (window.dataProcessor) + dataProcessor.prototype.init=function(obj){ + this.init_original(obj); + obj._dataprocessor=this; + + this.setTransactionMode("POST",true); + if (!this.serverProcessor.$proxy) + this.serverProcessor+=(this.serverProcessor.indexOf("?")!=-1?"&":"?")+"editing=true"; + };
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_offline.js.map b/codebase/sources/ext/dhtmlxscheduler_offline.js.map new file mode 100644 index 0000000..aa628e5 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_offline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_offline.js.map","sources":["dhtmlxscheduler_offline.js"],"names":["scheduler","load","url","call","type","this","_process","arguments","_load_url","_after_call","$proxy","_load","_date","_dp_init_backup","_dp_init","dp","_sendData","a1","rowId","callEvent","getState","_in_progress","Date","valueOf","serverProcessor","mode","_tMode","to_send","i","push","id","data","operation","_send","a2","dtmlXMLLoaderObject","afterUpdate","a3","_user","getUrlSymbol","obj","getUserData","join","loadXML","indexOf","serialize","_waitMode","_updatesToParams","items","stack","length","_processResult","text","xml","loader","status","loadXMLString","xmlDoc","state","afterUpdateCallback","window","dataProcessor","prototype","init","init_original","_dataprocessor","setTransactionMode"],"mappings":"AAAAA,UAAUC,KAAK,SAASC,EAAIC,GAC3B,GAAIC,EASJ,OARmB,gBAARD,KACVE,KAAKC,SAASH,EACdC,EAAOD,EACPA,EAAOI,UAAU,IAGlBF,KAAKG,UAAUN,EACfG,KAAKI,YAAYN,EACbD,EAAIQ,WACPR,GAAID,KAAKI,KAAqB,gBAARD,GAAmBA,EAAO,UAIjDC,MAAKM,MAAMT,EAAIG,KAAKO,QAGrBZ,UAAUa,gBAAkBb,UAAUc,SACtCd,UAAUc,SAAW,SAASC,GAC7BA,EAAGC,UAAY,SAASC,EAAGC,GACvB,GAAKD,EAAL,CACH,IAAKZ,KAAKc,UAAU,sBAAsBD,GAAOA,EAAMb,KAAKe,SAASF,GAAOD,IAAK,KAAM,KAAMA,IAAM,OAAO,CAG1G,IAFOC,IACNb,KAAKgB,aAAaH,IAAO,GAAKI,OAAQC,WACnClB,KAAKmB,gBAAgBd,OAAQ,CAChC,GAAIe,GAAoB,QAAbpB,KAAKqB,OAAiB,MAAQ,OACrCC,IACJ;IAAK,GAAIC,KAAKX,GACbU,EAAQE,MAAOC,GAAIF,EAAGG,KAAMd,EAAGW,GAAII,UAAW3B,KAAKe,SAASQ,IAE7D,YADAvB,MAAKmB,gBAAgBS,MAAMN,EAASF,EAAMpB,MAI3C,GAAI6B,GAAG,GAAIC,qBAAoB9B,KAAK+B,YAAY/B,MAAK,GACjDgC,EAAKhC,KAAKmB,iBAAiBnB,KAAKiC,MAAOC,aAAalC,KAAKmB,kBAAkB,YAAYnB,KAAKiC,MAAM,eAAejC,KAAKmC,IAAIC,YAAY,EAAE,YAAYC,KAAK,KAAM,GAClJ,SAAbrC,KAAKqB,OACFQ,EAAGS,QAAQN,GAAsB,IAAjBA,EAAGO,QAAQ,KAAU,IAAI,KAAKvC,KAAKwC,UAAU5B,EAAGC,IAEhEgB,EAAGS,QAAQN,GAAG,EAAKhC,KAAKwC,UAAU5B,EAAGC,IAC5Cb,KAAKyC,cAGN/B,EAAGgC,iBAAmB,SAASC,GAE9B,IAAK,GADDC,MACKrB,EAAI,EAAGA,EAAIoB,EAAME,OAAQtB,IACjCqB,EAAMD,EAAMpB,GAAGE,IAAMkB,EAAMpB,GAAGG,IAC/B;MAAO1B,MAAKwC,UAAUI,IAGvBlC,EAAGoC,eAAiB,SAASC,EAAMC,EAAKC,GACvC,GAAqB,KAAjBA,EAAOC,OAOXF,EAAM,GAAIlB,qBAAoB,aAAc9B,MAAK,GACjDgD,EAAIG,cAAcJ,GAClBC,EAAII,OAASH,EAEbjD,KAAK+B,YAAY/B,KAAM,KAAM,KAAM,KAAMgD,OAVxC,KAAK,GAAIzB,KAAKvB,MAAKgB,aAAc,CAChC,GAAIqC,GAAQrD,KAAKe,SAASQ,EAC1BvB,MAAKsD,oBAAoB/B,EAAGA,EAAG8B,EAAO,QAUzCrD,KAAKQ,gBAAgBE,IAGlB6C,OAAOC,gBACVA,cAAcC,UAAUC,KAAK,SAASvB,GACrCnC,KAAK2D,cAAcxB,GACnBA,EAAIyB,eAAe5D,KAEnBA,KAAK6D,mBAAmB,QAAO,GAC1B7D,KAAKmB,gBAAgBd,SACzBL,KAAKmB,kBAAqD,IAAnCnB,KAAKmB,gBAAgBoB,QAAQ,KAAS,IAAI,KAAK"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_outerdrag.js b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js new file mode 100644 index 0000000..9a2f640 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js @@ -0,0 +1,60 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +// lame old code doesn't provide raw event object +scheduler.attachEvent("onTemplatesReady", function() { + var dragger = (new dhtmlDragAndDropObject()); + var old = dragger.stopDrag; + var last_event; + dragger.stopDrag = function(e) { + last_event = e || event; + return old.apply(this, arguments); + }; + dragger.addDragLanding(scheduler._els["dhx_cal_data"][0], { + _drag: function(sourceHtmlObject, dhtmlObject, targetHtmlObject, targetHtml) { + + if (scheduler.checkEvent("onBeforeExternalDragIn") && !scheduler.callEvent("onBeforeExternalDragIn", [sourceHtmlObject, dhtmlObject, targetHtmlObject, targetHtml, last_event])) + return; + + var temp = scheduler.attachEvent("onEventCreated", function(id) { + if (!scheduler.callEvent("onExternalDragIn", [id, sourceHtmlObject, last_event])) { + this._drag_mode = this._drag_id = null; + this.deleteEvent(id); + } + }); + + var action_data = scheduler.getActionData(last_event); + var event_data = { + start_date: new Date(action_data.date) + }; + + // custom views, need to assign section id, fix dates + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + var view_options = scheduler.matrix[scheduler._mode]; + event_data[view_options.y_property] = action_data.section; + + var pos = scheduler._locate_cell_timeline(last_event); + event_data.start_date = view_options._trace_x[pos.x]; + event_data.end_date = scheduler.date.add(event_data.start_date, view_options.x_step, view_options.x_unit); + } + if (scheduler._props && scheduler._props[scheduler._mode]) { + event_data[scheduler._props[scheduler._mode].map_to] = action_data.section; + } + + scheduler.addEventNow(event_data); + + scheduler.detachEvent(temp); + + }, + _dragIn: function(htmlObject, shtmlObject) { + return htmlObject; + }, + _dragOut: function(htmlObject) { + return this; + } + }); +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map new file mode 100644 index 0000000..d928376 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_outerdrag.js.map","sources":["dhtmlxscheduler_outerdrag.js"],"names":["scheduler","attachEvent","last_event","dragger","dhtmlDragAndDropObject","old","stopDrag","e","event","apply","this","arguments","addDragLanding","_els","_drag","sourceHtmlObject","dhtmlObject","targetHtmlObject","targetHtml","checkEvent","callEvent","temp","id","_drag_mode","_drag_id","deleteEvent","action_data","getActionData","event_data","start_date","Date","date","matrix","_mode","view_options","y_property","section","pos","_locate_cell_timeline","_trace_x","x","end_date","add","x_step","x_unit","_props","map_to","addEventNow","detachEvent","_dragIn","htmlObject","_dragOut"],"mappings":"AACAA,UAAUC,YAAY,mBAAoB,WACzC,GAEIC,GAFAC,EAAU,GAAKC,wBACfC,EAAMF,EAAQG,QAElBH,GAAQG,SAAW,SAASC,GAE3B,MADAL,GAAaK,GAAKC,MACXH,EAAII,MAAMC,KAAMC,YAExBR,EAAQS,eAAeZ,UAAUa,KAAmB,aAAE,IACrDC,MAAO,SAASC,EAAkBC,EAAaC,EAAkBC,GAEhE,IAAIlB,UAAUmB,WAAW,2BAA8BnB,UAAUoB,UAAU,0BAA2BL,EAAkBC,EAAaC,EAAkBC,EAAYhB,IAAnK,CAGA,GAAImB,GAAOrB,UAAUC,YAAY,iBAAkB,SAASqB,GACtDtB,UAAUoB,UAAU,oBAAqBE,EAAIP,EAAkBb,MACnEQ,KAAKa,WAAab,KAAKc,SAAW,KAClCd,KAAKe,YAAYH;GAIfI,EAAc1B,UAAU2B,cAAczB,GACtC0B,GACHC,WAAY,GAAIC,MAAKJ,EAAYK,MAIlC,IAAI/B,UAAUgC,QAAUhC,UAAUgC,OAAOhC,UAAUiC,OAAQ,CAC1D,GAAIC,GAAelC,UAAUgC,OAAOhC,UAAUiC,MAC9CL,GAAWM,EAAaC,YAAcT,EAAYU,OAElD,IAAIC,GAAMrC,UAAUsC,sBAAsBpC,EAC1C0B,GAAWC,WAAaK,EAAaK,SAASF,EAAIG,GAClDZ,EAAWa,SAAWzC,UAAU+B,KAAKW,IAAId,EAAWC,WAAYK,EAAaS,OAAQT,EAAaU,QAE/F5C,UAAU6C,QAAU7C,UAAU6C,OAAO7C,UAAUiC,SAClDL,EAAW5B,UAAU6C,OAAO7C,UAAUiC,OAAOa,QAAUpB,EAAYU,SAGpEpC,UAAU+C,YAAYnB,GAEtB5B,UAAUgD,YAAY3B,KAGvB4B,QAAS,SAASC,GACjB,MAAOA;EAERC,SAAU,WACT,MAAOzC"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_pdf.js b/codebase/sources/ext/dhtmlxscheduler_pdf.js new file mode 100644 index 0000000..77c9a73 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_pdf.js @@ -0,0 +1,363 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function() { + var dx, dy, + html_regexp = new RegExp("<[^>]*>", "g"), + newline_regexp = new RegExp("<br[^>]*>", "g"); + + function clean_html(val) { + return val.replace(newline_regexp, "\n").replace(html_regexp, ""); + } + + function x_norm(x, offset) { + x = parseFloat(x); + offset = parseFloat(offset); + if (!isNaN(offset)) x -= offset; + + var w = colsWidth(x); + x = x - w.width + w.cols*dx; + return isNaN(x)?"auto":(100*x/(dx)); + } + + function x_norm_event(x, offset, is_left) { + x = parseFloat(x); + offset = parseFloat(offset); + if (!isNaN(offset) && is_left) x -= offset; + + var w = colsWidth(x); + x = x - w.width + w.cols*dx; + return isNaN(x)?"auto":(100*x/(dx-(!isNaN(offset)?offset:0))); + } + function colsWidth(width) { + var r = 0; + var header = scheduler._els.dhx_cal_header[0].childNodes; + var els = header[1] ? header[1].childNodes : header[0].childNodes; + for (var i = 0; i < els.length; i++) { + var el = els[i].style ? els[i] : els[i].parentNode; + var w = parseFloat(el.style.width); + if (width > w){ + width -= (w+1); + r+=(w+1); + } + else + break; + } + return { width: r, cols: i }; + } + + function y_norm(y) { + y = parseFloat(y); + if (isNaN(y)) return "auto"; + return 100 * y / dy; + } + + function get_style(node, style){ + return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||""; + } + + function de_day(node, n) { + var x = parseInt(node.style.left, 10); + + for (var dx = 0; dx < scheduler._cols.length; dx++) { + x -= scheduler._cols[dx]; + if (x < 0) return dx; + } + return n; + } + + function de_week(node, n) { + var y = parseInt(node.style.top, 10); + for (var dy = 0; dy < scheduler._colsS.heights.length; dy++) + if (scheduler._colsS.heights[dy] > y) return dy; + return n; + } + + function xml_start(tag) { + return tag ? "<"+tag+">" : ""; + } + function xml_end(tag) { + return tag ? "</"+tag+">" : ""; + } + + function xml_top(tag, profile, header, footer) { + var xml = "<"+tag+" profile='" + profile + "'"; + if (header) + xml += " header='" + header + "'"; + if (footer) + xml += " footer='" + footer + "'"; + xml += ">"; + return xml; + } + + function xml_body_header() { + var xml = ""; + // detects if current mode is timeline + var mode = scheduler._mode; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) + mode = (scheduler.matrix[scheduler._mode].render == "cell") ? "matrix" : "timeline"; + xml += "<scale mode='" + mode + "' today='" + scheduler._els.dhx_cal_date[0].innerHTML + "'>"; + + if (scheduler._mode == "week_agenda") { + var xh = scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV"); + for (var i = 0; i < xh.length; i++) + if (xh[i].className == "dhx_wa_scale_bar") + xml += "<column>" + clean_html(xh[i].innerHTML) + "</column>"; + } else if (scheduler._mode == "agenda" || scheduler._mode == "map") { + var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes; + + xml += "<column>" + clean_html(xh[0].innerHTML) + "</column><column>" + clean_html(xh[1].innerHTML) + "</column>"; + } else if (scheduler._mode == "year") { + var xh = scheduler._els.dhx_cal_data[0].childNodes; + for (var i = 0; i < xh.length; i++) { + xml += "<month label='" + clean_html(xh[i].childNodes[0].innerHTML) + "'>"; + xml += xml_month_scale(xh[i].childNodes[1].childNodes); + xml += xml_month(xh[i].childNodes[2]); + xml += "</month>"; + } + } else { + xml += "<x>"; + var xh = scheduler._els.dhx_cal_header[0].childNodes; + xml += xml_month_scale(xh); + xml += "</x>"; + + var yh = scheduler._els.dhx_cal_data[0]; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + xml += "<y>"; + for (var i = 0; i < yh.firstChild.rows.length; i++) { + var el = yh.firstChild.rows[i]; + xml += "<row><![CDATA[" + clean_html(el.cells[0].innerHTML) + "]]></row>"; + } + xml += "</y>"; + dy = yh.firstChild.rows[0].cells[0].offsetHeight; + } else if (yh.firstChild.tagName == "TABLE") { + xml += xml_month(yh); + } else { + yh = yh.childNodes[yh.childNodes.length - 1]; + while (yh.className.indexOf("dhx_scale_holder") == -1) + yh = yh.previousSibling; + yh = yh.childNodes; + + xml += "<y>"; + for (var i = 0; i < yh.length; i++) + xml += "\n<row><![CDATA[" + clean_html(yh[i].innerHTML) + "]]></row>"; + xml += "</y>"; + dy = yh[0].offsetHeight; + } + } + xml += "</scale>"; + return xml; + } + + function xml_month(yh) { + var xml = ""; + var r = yh.firstChild.rows; + for (var i = 0; i < r.length; i++) { + var days = []; + for (var j = 0; j < r[i].cells.length; j++) + days.push(r[i].cells[j].firstChild.innerHTML); + + xml += "\n<row height='" + yh.firstChild.rows[i].cells[0].offsetHeight + "'><![CDATA[" + clean_html(days.join("|")) + "]]></row>"; + dy = yh.firstChild.rows[0].cells[0].offsetHeight; + } + return xml; + } + + function xml_month_scale(xh) { + var xhs, + xml = ""; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + if (scheduler.matrix[scheduler._mode].second_scale) + xhs = xh[1].childNodes; + + xh = xh[0].childNodes; + } + + for (var i = 0; i < xh.length; i++) + xml += "\n<column><![CDATA[" + clean_html(xh[i].innerHTML) + "]]></column>"; + dx = xh[0].offsetWidth; + + if (xhs) { + var width = 0; + var top_width = xh[0].offsetWidth; + var top_col = 1; + for (var i = 0; i < xhs.length; i++) { + xml += "\n<column second_scale='" + top_col + "'><![CDATA[" + clean_html(xhs[i].innerHTML) + "]]></column>"; + width += xhs[i].offsetWidth; + if (width >= top_width) { + top_width += (xh[top_col] ? xh[top_col].offsetWidth : 0); + top_col++; + } + dx = xhs[0].offsetWidth; + } + } + return xml; + } + + function xml_body(colors) { + var xml = ""; + var evs = scheduler._rendered; + var matrix = scheduler.matrix && scheduler.matrix[scheduler._mode]; + + if (scheduler._mode == "agenda" || scheduler._mode == "map") { + + for (var i = 0; i < evs.length; i++) + xml += "<event><head><![CDATA[" + clean_html(evs[i].childNodes[0].innerHTML) + "]]></head><body><![CDATA[" + clean_html(evs[i].childNodes[2].innerHTML) + "]]></body></event>"; + + } else if (scheduler._mode == "week_agenda") { + + for (var i = 0; i < evs.length; i++) + xml += "<event day='" + evs[i].parentNode.getAttribute("day") + "'><body>" + clean_html(evs[i].innerHTML) + "</body></event>"; + + } else if (scheduler._mode == "year") { + + var evs = scheduler.get_visible_events(); + for (var i = 0; i < evs.length; i++) { + var d = evs[i].start_date; + if (d.valueOf() < scheduler._min_date.valueOf()) + d = scheduler._min_date; + + while (d < evs[i].end_date) { + var m = d.getMonth() + 12 * (d.getFullYear() - scheduler._min_date.getFullYear()) - scheduler.week_starts._month; + var day = scheduler.week_starts[m] + d.getDate() - 1; + var text_color = colors ? get_style(scheduler._get_year_cell(d), "color") : ""; + var bg_color = colors ? get_style(scheduler._get_year_cell(d), "backgroundColor") : ""; + + xml += "<event day='" + (day % 7) + "' week='" + Math.floor(day / 7) + "' month='" + m + "' backgroundColor='" + bg_color + "' color='" + text_color + "'></event>"; + d = scheduler.date.add(d, 1, "day"); + if (d.valueOf() >= scheduler._max_date.valueOf()) + break; + } + } + } else if (matrix && matrix.render == "cell") { + var evs = scheduler._els.dhx_cal_data[0].getElementsByTagName("TD"); + for (var i = 0; i < evs.length; i++) { + var text_color = colors ? get_style(evs[i], "color") : ""; + var bg_color = colors ? get_style(evs[i], "backgroundColor") : ""; + xml += "\n<event><body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].innerHTML) + "]]></body></event>"; + } + } else { + for (var i = 0; i < evs.length; i++) { + var zx, zdx; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + // logic for timeline view + zx = x_norm(evs[i].style.left); + zdx = x_norm(evs[i].offsetWidth)-1; + } else { + // we should use specific logic for day/week/units view + var left_norm = scheduler.config.use_select_menu_space ? 0 : 26; + zx = x_norm_event(evs[i].style.left, left_norm, true); + zdx = x_norm_event(evs[i].style.width, left_norm)-1; + } + if (isNaN(zdx * 1)) continue; + var zy = y_norm(evs[i].style.top); + var zdy = y_norm(evs[i].style.height); + + var e_type = evs[i].className.split(" ")[0].replace("dhx_cal_", ""); + if (e_type === 'dhx_tooltip_line') continue; + + var dets = scheduler.getEvent(evs[i].getAttribute("event_id")); + if (!dets) continue; + var day = dets._sday; + var week = dets._sweek; + var length = dets._length || 0; + + if (scheduler._mode == "month") { + zdy = parseInt(evs[i].offsetHeight, 10); + zy = parseInt(evs[i].style.top, 10) - scheduler.xy.month_head_height; + + day = de_day(evs[i], day); + week = de_week(evs[i], week); + } else if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + day = 0; + var el = evs[i].parentNode.parentNode.parentNode; + week = el.rowIndex; + var dy_copy = dy; + dy = evs[i].parentNode.offsetHeight; + zy = y_norm(evs[i].style.top); + zy -= zy * 0.2; + dy = dy_copy; + } else { + if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue; + var parent = scheduler._els["dhx_cal_data"][0].childNodes[0]; + var offset = parseFloat(parent.className.indexOf("dhx_scale_holder") != -1 ? parent.style.left : 0); + zx += x_norm(evs[i].parentNode.style.left, offset); + } + + xml += "\n<event week='" + week + "' day='" + day + "' type='" + e_type + "' x='" + zx + "' y='" + zy + "' width='" + zdx + "' height='" + zdy + "' len='" + length + "'>"; + + if (e_type == "event") { + xml += "<header><![CDATA[" + clean_html(evs[i].childNodes[1].innerHTML) + "]]></header>"; + var text_color = colors ? get_style(evs[i].childNodes[2], "color") : ""; + var bg_color = colors ? get_style(evs[i].childNodes[2], "backgroundColor") : ""; + xml += "<body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].childNodes[2].innerHTML) + "]]></body>"; + } else { + var text_color = colors ? get_style(evs[i], "color") : ""; + var bg_color = colors ? get_style(evs[i], "backgroundColor") : ""; + xml += "<body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].innerHTML) + "]]></body>"; + } + xml += "</event>"; + } + } + + return xml; + } + + function to_pdf(start, end, view, url, mode, header, footer) { + var colors = false; + if (mode == "fullcolor") { + colors = true; + mode = "color"; + } + + mode = mode || "color"; + + var uid = scheduler.uid(); + var d = document.createElement("div"); + d.style.display = "none"; + document.body.appendChild(d); + + d.innerHTML = '<form id="' + uid + '" method="post" target="_blank" action="' + url + '" accept-charset="utf-8" enctype="application/x-www-form-urlencoded"><input type="hidden" name="mycoolxmlbody"/> </form>'; + + + var xml = ""; + if (start) { + var original_date = scheduler._date; + var original_mode = scheduler._mode; + end = scheduler.date[view+"_start"](end); + end = scheduler.date["get_"+view+"_end"] ? scheduler.date["get_"+view+"_end"](end) : scheduler.date.add(end, 1, view); + + xml = xml_top("pages", mode, header, footer); + for (var temp_date = new Date(start); +temp_date < +end; temp_date = scheduler.date.add(temp_date, 1, view)) { + scheduler.setCurrentView(temp_date, view); + xml += xml_start("page") + xml_body_header().replace("\u2013", "-") + xml_body(colors) + xml_end("page"); + } + xml += xml_end("pages"); + + scheduler.setCurrentView(original_date, original_mode); + } else { + xml = xml_top("data", mode, header, footer) + xml_body_header().replace("\u2013", "-") + xml_body(colors) + xml_end("data"); + } + + + document.getElementById(uid).firstChild.value = encodeURIComponent(xml); + document.getElementById(uid).submit(); + d.parentNode.removeChild(d); + } + + scheduler.toPDF = function(url, mode, header, footer) { + return to_pdf.apply(this, [null, null, null, url, mode, header, footer]); + }; + scheduler.toPDFRange = function(start, end, view, url, mode, header, footer) { + if (typeof start == "string") { + start = scheduler.templates.api_date(start); + end = scheduler.templates.api_date(end); + } + + return to_pdf.apply(this, arguments); + }; +})(); diff --git a/codebase/sources/ext/dhtmlxscheduler_pdf.js.map b/codebase/sources/ext/dhtmlxscheduler_pdf.js.map new file mode 100644 index 0000000..0d4607e --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_pdf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_pdf.js.map","sources":["dhtmlxscheduler_pdf.js"],"names":["clean_html","val","replace","newline_regexp","html_regexp","x_norm","x","offset","parseFloat","isNaN","w","colsWidth","width","cols","dx","x_norm_event","is_left","r","header","scheduler","_els","dhx_cal_header","childNodes","els","i","length","el","style","parentNode","y_norm","y","dy","get_style","node","window","getComputedStyle","currentStyle","de_day","n","parseInt","left","_cols","de_week","top","_colsS","heights","xml_start","tag","xml_end","xml_top","profile","footer","xml","xml_body_header","mode","_mode","matrix","render","dhx_cal_date","innerHTML","xh","dhx_cal_data","getElementsByTagName","className","xml_month_scale","xml_month","yh","firstChild","rows","cells","offsetHeight","tagName","indexOf","previousSibling","days","j","push","join","xhs","second_scale","offsetWidth","top_width","top_col","xml_body","colors","evs","_rendered","getAttribute","get_visible_events","d","start_date","valueOf","_min_date","end_date","m","getMonth","getFullYear","week_starts","_month","day","getDate","text_color","_get_year_cell","bg_color","Math","floor","date","add","_max_date","zx","zdx","left_norm","config","use_select_menu_space","zy","zdy","height","e_type","split","dets","getEvent","_sday","week","_sweek","_length","xy","month_head_height","rowIndex","dy_copy","parent","to_pdf","start","end","view","url","uid","document","createElement","display","body","appendChild","original_date","_date","original_mode","temp_date","Date","setCurrentView","getElementById","value","encodeURIComponent","submit","removeChild","RegExp","toPDF","apply","this","toPDFRange","templates","api_date","arguments"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_quick_info.js b/codebase/sources/ext/dhtmlxscheduler_quick_info.js new file mode 100644 index 0000000..08fc7bb --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_quick_info.js @@ -0,0 +1,199 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.icons_select = ["icon_details", "icon_delete"]; +scheduler.config.details_on_create = true; +scheduler.xy.menu_width = 0; + +scheduler.attachEvent("onClick", function(id){ + scheduler.showQuickInfo(id); + return true; +}); + +(function(){ + var events = ["onEmptyClick", "onViewChange", "onLightbox", "onBeforeEventDelete", "onBeforeDrag"]; + var hiding_function = function(){ + scheduler._hideQuickInfo(); + return true; + }; + for (var i=0; i<events.length; i++) + scheduler.attachEvent(events[i], hiding_function); +})(); + +scheduler.templates.quick_info_title = function(start, end, ev){ return ev.text.substr(0,50); }; +scheduler.templates.quick_info_content = function(start, end, ev){ return ev.details || ev.text; }; +scheduler.templates.quick_info_date = function(start, end, ev){ + if (scheduler.isOneDayEvent(ev)) + return scheduler.templates.day_date(start, end, ev) + " " +scheduler.templates.event_header(start, end, ev); + else + return scheduler.templates.week_date(start, end, ev); +}; + +scheduler.showQuickInfo = function(id){ + if (id == this._quick_info_box_id) return; + this.hideQuickInfo(true); + + var pos = this._get_event_counter_part(id); + + if (pos){ + this._quick_info_box = this._init_quick_info(pos); + this._fill_quick_data(id); + this._show_quick_info(pos); + } +}; +scheduler._hideQuickInfo = function(){ + scheduler.hideQuickInfo(); +}; +scheduler.hideQuickInfo = function(forced){ + var qi = this._quick_info_box; + this._quick_info_box_id = 0; + + if (qi && qi.parentNode){ + if (scheduler.config.quick_info_detached) + return qi.parentNode.removeChild(qi); + + if (qi.style.right == "auto") + qi.style.left = "-350px"; + else + qi.style.right = "-350px"; + + if (forced) + qi.parentNode.removeChild(qi); + } +}; +dhtmlxEvent(window, "keydown", function(e){ + if (e.keyCode == 27) + scheduler.hideQuickInfo(); +}); + +scheduler._show_quick_info = function(pos){ + var qi = scheduler._quick_info_box; + + if (scheduler.config.quick_info_detached){ + scheduler._obj.appendChild(qi); + var width = qi.offsetWidth; + var height = qi.offsetHeight; + + qi.style.left = pos.left - pos.dx*(width - pos.width) + "px"; + qi.style.top = pos.top - (pos.dy?height:-pos.height) + "px"; + } else { + qi.style.top = this.xy.scale_height+this.xy.nav_height + 20 + "px"; + if (pos.dx == 1){ + qi.style.right = "auto"; + qi.style.left = "-300px"; + + setTimeout(function(){ + qi.style.left = "-10px"; + },1); + } else { + qi.style.left = "auto"; + qi.style.right = "-300px"; + + setTimeout(function(){ + qi.style.right = "-10px"; + },1); + } + qi.className = qi.className.replace("dhx_qi_left","").replace("dhx_qi_left","")+" dhx_qi_"+(pos==1?"left":"right"); + scheduler._obj.appendChild(qi); + } +}; +scheduler.attachEvent("onTemplatesReady", function(){ + scheduler.hideQuickInfo(); + if(this._quick_info_box){ + var box = this._quick_info_box; + if(box.parentNode){ + box.parentNode.removeChild(box); + } + this._quick_info_box = null; + } +}); +scheduler._quick_info_onscroll_handler = function(e){ + scheduler.hideQuickInfo(); +}; +scheduler._init_quick_info = function(){ + if (!this._quick_info_box){ + var sizes = scheduler.xy; + + var qi = this._quick_info_box = document.createElement("div"); + qi.className = "dhx_cal_quick_info"; + if (scheduler.$testmode) + qi.className += " dhx_no_animate"; + //title + var html = "<div class=\"dhx_cal_qi_title\" style=\"height:"+sizes.quick_info_title+"px\">" + + "<div class=\"dhx_cal_qi_tcontent\"></div><div class=\"dhx_cal_qi_tdate\"></div>" + + "</div>" + + "<div class=\"dhx_cal_qi_content\"></div>"; + + //buttons + html += "<div class=\"dhx_cal_qi_controls\" style=\"height:"+sizes.quick_info_buttons+"px\">"; + var buttons = scheduler.config.icons_select; + for (var i = 0; i < buttons.length; i++) + html += "<div class=\"dhx_qi_big_icon "+buttons[i]+"\" title=\""+scheduler.locale.labels[buttons[i]]+"\"><div class='dhx_menu_icon " + buttons[i] + "'></div><div>"+scheduler.locale.labels[buttons[i]]+"</div></div>"; + html += "</div>"; + + qi.innerHTML = html; + dhtmlxEvent(qi, "click", function(ev){ + ev = ev || event; + scheduler._qi_button_click(ev.target || ev.srcElement); + }); + if (scheduler.config.quick_info_detached){ + scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "scroll", scheduler._quick_info_onscroll_handler); + dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "scroll", scheduler._quick_info_onscroll_handler); + } + } + + return this._quick_info_box; +}; + +scheduler._qi_button_click = function(node){ + var box = scheduler._quick_info_box; + if (!node || node == box) return; + + var mask = node.className; + if (mask.indexOf("_icon")!=-1){ + var id = scheduler._quick_info_box_id; + scheduler._click.buttons[mask.split(" ")[1].replace("icon_","")](id); + } else + scheduler._qi_button_click(node.parentNode); +}; +scheduler._get_event_counter_part = function(id){ + var domEv = scheduler.getRenderedEvent(id); + var left = 0; + var top = 0; + + var node = domEv; + while (node && node != scheduler._obj){ + left += node.offsetLeft; + top += node.offsetTop-node.scrollTop; + node = node.offsetParent; + } + if(node){ + var dx = (left + domEv.offsetWidth/2) > (scheduler._x/2) ? 1 : 0; + var dy = (top + domEv.offsetHeight/2) > (scheduler._y/2) ? 1 : 0; + + return { left:left, top:top, dx:dx, dy:dy, + width:domEv.offsetWidth, height:domEv.offsetHeight }; + } + return 0; +}; + +scheduler._fill_quick_data = function(id){ + var ev = scheduler.getEvent(id); + var qi = scheduler._quick_info_box; + + scheduler._quick_info_box_id = id; + +//title content + var titleContent = qi.firstChild.firstChild; + titleContent.innerHTML = scheduler.templates.quick_info_title(ev.start_date, ev.end_date, ev); + var titleDate = titleContent.nextSibling; + titleDate.innerHTML = scheduler.templates.quick_info_date(ev.start_date, ev.end_date, ev); + +//main content + var main = qi.firstChild.nextSibling; + main.innerHTML = scheduler.templates.quick_info_content(ev.start_date, ev.end_date, ev); +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map b/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map new file mode 100644 index 0000000..65165d0 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_quick_info.js.map","sources":["dhtmlxscheduler_quick_info.js"],"names":["scheduler","config","icons_select","details_on_create","xy","menu_width","attachEvent","id","showQuickInfo","events","hiding_function","_hideQuickInfo","i","length","templates","quick_info_title","start","end","ev","text","substr","quick_info_content","details","quick_info_date","isOneDayEvent","day_date","event_header","week_date","this","_quick_info_box_id","hideQuickInfo","pos","_get_event_counter_part","_quick_info_box","_init_quick_info","_fill_quick_data","_show_quick_info","forced","qi","parentNode","quick_info_detached","removeChild","style","right","left","dhtmlxEvent","window","e","keyCode","_obj","appendChild","width","offsetWidth","height","offsetHeight","dx","top","dy","scale_height","nav_height","setTimeout","className","replace","box","_quick_info_onscroll_handler","sizes","document","createElement","$testmode","html","quick_info_buttons","buttons","locale","labels","innerHTML","event","_qi_button_click","target","srcElement","_detachDomEvent","_els","node","mask","indexOf","_click","split","domEv","getRenderedEvent","offsetLeft","offsetTop","scrollTop","offsetParent","_x","_y","getEvent","titleContent","firstChild","start_date","end_date","titleDate","nextSibling","main"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_readonly.js b/codebase/sources/ext/dhtmlxscheduler_readonly.js new file mode 100644 index 0000000..462d878 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_readonly.js @@ -0,0 +1,160 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady", function() { + var original_sns = scheduler.config.lightbox.sections.slice(); + var original_left_buttons = scheduler.config.buttons_left.slice(); + var original_right_buttons = scheduler.config.buttons_right.slice(); + + + scheduler.attachEvent("onBeforeLightbox", function(id) { + if (this.config.readonly_form || this.getEvent(id).readonly) { + this.config.readonly_active = true; + + for (var i = 0; i < this.config.lightbox.sections.length; i++) { + this.config.lightbox.sections[i].focus = false; + } + } + else { + this.config.readonly_active = false; + scheduler.config.lightbox.sections = original_sns.slice(); // restore original list of sections including recurring + scheduler.config.buttons_left = original_left_buttons.slice(); + scheduler.config.buttons_right = original_right_buttons.slice(); + } + + var sns = this.config.lightbox.sections; + if (this.config.readonly_active) { + for (var i = 0; i < sns.length; i++) { + if (sns[i].type == 'recurring') { + if (this.config.readonly_active) { + sns.splice(i, 1); + } + break; + } + } + + var forbidden_buttons = ["dhx_delete_btn", "dhx_save_btn"]; + var button_arrays = [scheduler.config.buttons_left, scheduler.config.buttons_right]; + for (var i = 0; i < forbidden_buttons.length; i++) { + var forbidden_button = forbidden_buttons[i]; + for (var k = 0; k < button_arrays.length; k++) { + var button_array = button_arrays[k]; + var index = -1; + for (var p = 0; p < button_array.length; p++) { + if (button_array[p] == forbidden_button) { + index = p; + break; + } + } + if (index != -1) { + button_array.splice(index, 1); + } + } + } + + + } + + this.resetLightbox(); + + return true; + }); + + function txt_replace(tag, d, n, text) { + var txts = d.getElementsByTagName(tag); + var txtt = n.getElementsByTagName(tag); + for (var i = txtt.length - 1; i >= 0; i--) { + var n = txtt[i]; + if (!text){ + n.disabled = true; + //radio and checkboxes loses state after .cloneNode in IE + if(d.checked) + n.checked = true; + }else { + var t = document.createElement("SPAN"); + t.className = "dhx_text_disabled"; + t.innerHTML = text(txts[i]); + n.parentNode.insertBefore(t, n); + n.parentNode.removeChild(n); + } + } + } + + var old = scheduler._fill_lightbox; + scheduler._fill_lightbox = function() { + + var lb = this.getLightbox(); + if (this.config.readonly_active) { + lb.style.visibility = 'hidden'; + // lightbox should have actual sizes before rendering controls + // currently only matters for dhtmlxCombo + lb.style.display = 'block'; + } + var res = old.apply(this, arguments); + if (this.config.readonly_active) { + //reset visibility and display + lb.style.visibility = ''; + lb.style.display = 'none'; + } + + if (this.config.readonly_active) { + + var d = this.getLightbox(); + var n = this._lightbox_r = d.cloneNode(true); + n.id = scheduler.uid(); + + txt_replace("textarea", d, n, function(a) { + return a.value; + }); + txt_replace("input", d, n, false); + txt_replace("select", d, n, function(a) { + if(!a.options.length) return ""; + return a.options[Math.max((a.selectedIndex || 0), 0)].text; + }); + + d.parentNode.insertBefore(n, d); + + olds.call(this, n); + if (scheduler._lightbox) + scheduler._lightbox.parentNode.removeChild(scheduler._lightbox); + this._lightbox = n; + + if (scheduler.config.drag_lightbox) + n.firstChild.onmousedown = scheduler._ready_to_dnd; + this.setLightboxSize(); + n.onclick = function(e) { + var src = e ? e.target : event.srcElement; + if (!src.className) src = src.previousSibling; + if (src && src.className) + switch (src.className) { + case "dhx_cancel_btn": + scheduler.callEvent("onEventCancel", [scheduler._lightbox_id]); + scheduler._edit_stop_event(scheduler.getEvent(scheduler._lightbox_id), false); + scheduler.hide_lightbox(); + break; + } + }; + } + return res; + }; + + var olds = scheduler.showCover; + scheduler.showCover = function() { + if (!this.config.readonly_active) + olds.apply(this, arguments); + }; + + var hold = scheduler.hide_lightbox; + scheduler.hide_lightbox = function() { + if (this._lightbox_r) { + this._lightbox_r.parentNode.removeChild(this._lightbox_r); + this._lightbox_r = this._lightbox = null; + } + + return hold.apply(this, arguments); + }; +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_readonly.js.map b/codebase/sources/ext/dhtmlxscheduler_readonly.js.map new file mode 100644 index 0000000..8ce874d --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_readonly.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_readonly.js.map","sources":["dhtmlxscheduler_readonly.js"],"names":["scheduler","attachEvent","txt_replace","tag","d","n","text","txts","getElementsByTagName","txtt","i","length","t","document","createElement","className","innerHTML","parentNode","insertBefore","removeChild","disabled","checked","original_sns","config","lightbox","sections","slice","original_left_buttons","buttons_left","original_right_buttons","buttons_right","id","this","readonly_form","getEvent","readonly","readonly_active","focus","sns","type","splice","forbidden_buttons","button_arrays","forbidden_button","k","button_array","index","p","resetLightbox","old","_fill_lightbox","lb","getLightbox","style","visibility","display","res","apply","arguments","_lightbox_r","cloneNode","uid","a","value","options","Math","max","selectedIndex","olds","call","_lightbox","drag_lightbox","firstChild","onmousedown","_ready_to_dnd","setLightboxSize","onclick","e","src","target","event","srcElement","previousSibling","callEvent","_lightbox_id","_edit_stop_event","hide_lightbox","showCover","hold"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_recurring.js b/codebase/sources/ext/dhtmlxscheduler_recurring.js new file mode 100644 index 0000000..ad4a7a0 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_recurring.js @@ -0,0 +1,818 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.occurrence_timestamp_in_utc = false; +scheduler.config.recurring_workdays = [1,2,3,4,5]; +scheduler.form_blocks["recurring"] = { + render:function(sns) { + return scheduler.__recurring_template; + }, + _ds: {}, + _init_set_value:function(node, value, ev) { + scheduler.form_blocks["recurring"]._ds = {start:ev.start_date, end:ev._end_date}; + + var str_date_format = scheduler.date.str_to_date(scheduler.config.repeat_date); + var str_date = function(str_date) { + var date = str_date_format(str_date); + if (scheduler.config.include_end_by) + date = scheduler.date.add(date, 1, 'day'); + return date; + }; + + var date_str = scheduler.date.date_to_str(scheduler.config.repeat_date); + + var top = node.getElementsByTagName("FORM")[0]; + var els = []; + + function register_els(inps) { + for (var i = 0; i < inps.length; i++) { + var inp = inps[i]; + if (inp.type == "checkbox" || inp.type == "radio") { + if (!els[inp.name]) + els[inp.name] = []; + els[inp.name].push(inp); + } else + els[inp.name] = inp; + } + } + + register_els(top.getElementsByTagName("INPUT")); + register_els(top.getElementsByTagName("SELECT")); + + if (!scheduler.config.repeat_date_of_end) { + var formatter = scheduler.date.date_to_str(scheduler.config.repeat_date); + scheduler.config.repeat_date_of_end = formatter(scheduler.date.add(scheduler._currentDate(), 30, "day")); + } + els["date_of_end"].value = scheduler.config.repeat_date_of_end; + + var $ = function(a) { + return document.getElementById(a); + }; + + function get_radio_value(name) { + var col = els[name]; + for (var i = 0; i < col.length; i++) + if (col[i].checked) return col[i].value; + } + + function change_current_view() { + $("dhx_repeat_day").style.display = "none"; + $("dhx_repeat_week").style.display = "none"; + $("dhx_repeat_month").style.display = "none"; + $("dhx_repeat_year").style.display = "none"; + $("dhx_repeat_" + this.value).style.display = "block"; + } + + function get_repeat_code(dates) { + var code = [get_radio_value("repeat")]; + get_rcode[code[0]](code, dates); + + while (code.length < 5) code.push(""); + var repeat = ""; + if (els["end"][0].checked) { + dates.end = new Date(9999, 1, 1); + repeat = "no"; + } + else if (els["end"][2].checked) { + dates.end = str_date(els["date_of_end"].value); + } + else { + scheduler.transpose_type(code.join("_")); + repeat = Math.max(1, els["occurences_count"].value); + var transp = ((code[0] == "week" && code[4] && code[4].toString().indexOf(scheduler.config.start_on_monday ? 1 : 0) == -1) ? 1 : 0); + dates.end = scheduler.date.add(new Date(dates.start), repeat + transp, code.join("_")); + } + + return code.join("_") + "#" + repeat; + } + + scheduler.form_blocks["recurring"]._get_repeat_code = get_repeat_code; + var get_rcode = { + month:function(code, dates) { + if (get_radio_value("month_type") == "d") { + code.push(Math.max(1, els["month_count"].value)); + dates.start.setDate(els["month_day"].value); + } else { + code.push(Math.max(1, els["month_count2"].value)); + code.push(els["month_day2"].value); + code.push(Math.max(1, els["month_week2"].value)); + if (!scheduler.config.repeat_precise){ + dates.start.setDate(1); + } + } + dates._start = true; + }, + week:function(code, dates) { + code.push(Math.max(1, els["week_count"].value)); + code.push(""); + code.push(""); + var t = []; + var col = els["week_day"]; + var day = dates.start.getDay(); + var start_exists = false; + + for (var i = 0; i < col.length; i++){ + if (col[i].checked) { + t.push(col[i].value); + start_exists = start_exists || col[i].value == day; + } + } + if (!t.length){ + t.push(day); + start_exists = true; + } + t.sort(); + + + if (!scheduler.config.repeat_precise){ + dates.start = scheduler.date.week_start(dates.start); + dates._start = true; + } else if (!start_exists){ + scheduler.transpose_day_week(dates.start, t, 1, 7); + dates._start = true; + } + + code.push(t.join(",")); + }, + day:function(code) { + if (get_radio_value("day_type") == "d") { + code.push(Math.max(1, els["day_count"].value)); + } + else { + code.push("week"); + code.push(1); + code.push(""); + code.push(""); + code.push(scheduler.config.recurring_workdays.join(",")); + code.splice(0, 1); + } + }, + year:function(code, dates) { + if (get_radio_value("year_type") == "d") { + code.push("1"); + dates.start.setMonth(0); + dates.start.setDate(els["year_day"].value); + dates.start.setMonth(els["year_month"].value); + + } else { + code.push("1"); + code.push(els["year_day2"].value); + code.push(els["year_week2"].value); + dates.start.setDate(1); + dates.start.setMonth(els["year_month2"].value); + } + dates._start = true; + } + }; + var set_rcode = { + week:function(code, dates) { + els["week_count"].value = code[1]; + var col = els["week_day"]; + var t = code[4].split(","); + var d = {}; + for (var i = 0; i < t.length; i++) d[t[i]] = true; + for (var i = 0; i < col.length; i++) + col[i].checked = (!!d[col[i].value]); + }, + month:function(code, dates) { + if (code[2] === "") { + els["month_type"][0].checked = true; + els["month_count"].value = code[1]; + els["month_day"].value = dates.start.getDate(); + } else { + els["month_type"][1].checked = true; + els["month_count2"].value = code[1]; + els["month_week2"].value = code[3]; + els["month_day2"].value = code[2]; + } + }, + day:function(code, dates) { + els["day_type"][0].checked = true; + els["day_count"].value = code[1]; + }, + year:function(code, dates) { + if (code[2] === "") { + els["year_type"][0].checked = true; + els["year_day"].value = dates.start.getDate(); + els["year_month"].value = dates.start.getMonth(); + } else { + els["year_type"][1].checked = true; + els["year_week2"].value = code[3]; + els["year_day2"].value = code[2]; + els["year_month2"].value = dates.start.getMonth(); + } + } + }; + + function set_repeat_code(code, dates) { + var data = code.split("#"); + code = data[0].split("_"); + set_rcode[code[0]](code, dates); + var e = els["repeat"][({day:0, week:1, month:2, year:3})[code[0]]]; + switch (data[1]) { + case "no": + els["end"][0].checked = true; + break; + case "": + els["end"][2].checked = true; + + var end_date = dates.end; + if (scheduler.config.include_end_by){ + end_date = scheduler.date.add(end_date, -1, 'day'); + } + + els["date_of_end"].value = date_str(end_date); + break; + default: + els["end"][1].checked = true; + els["occurences_count"].value = data[1]; + break; + } + + e.checked = true; + e.onclick(); + } + + scheduler.form_blocks["recurring"]._set_repeat_code = set_repeat_code; + + for (var i = 0; i < top.elements.length; i++) { + var el = top.elements[i]; + switch (el.name) { + case "repeat": + el.onclick = change_current_view; + break; + } + } + scheduler._lightbox._rec_init_done = true; + }, + set_value:function(node, value, ev) { + var rf = scheduler.form_blocks["recurring"]; + if (!scheduler._lightbox._rec_init_done) + rf._init_set_value(node, value, ev); + node.open = !ev.rec_type; + if (this._is_modified_occurence(ev)) + node.blocked = true; + else node.blocked = false; + + var ds = rf._ds; + ds.start = ev.start_date; + ds.end = ev._end_date; + + rf.button_click(0, node.previousSibling.firstChild.firstChild, node, node); + if (value) + rf._set_repeat_code(value, ds); + }, + get_value:function(node, ev) { + if (node.open) { + var ds = scheduler.form_blocks["recurring"]._ds; + var actual_dates = {}; + this.formSection('time').getValue(actual_dates); + ds.start = actual_dates.start_date; + ev.rec_type = scheduler.form_blocks["recurring"]._get_repeat_code(ds); + if (ds._start) { + ev.start_date = new Date(ds.start); + ev._start_date = new Date(ds.start); + ds._start = false; + } else + ev._start_date = null; + + ev._end_date = ds.end; + ev.rec_pattern = ev.rec_type.split("#")[0]; + } else { + ev.rec_type = ev.rec_pattern = ""; + ev._end_date = ev.end_date; + } + return ev.rec_type; + }, + focus:function(node) { + }, + button_click:function(index, el, section, cont) { + if (!cont.open && !cont.blocked) { + cont.style.height = "115px"; + el.style.backgroundPosition = "-5px 0px"; + el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring_open; + } else { + cont.style.height = "0px"; + el.style.backgroundPosition = "-5px 20px"; + el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring; + } + cont.open = !cont.open; + + scheduler.setLightboxSize(); + } +}; + + +//problem may occur if we will have two repeating events in the same moment of time +scheduler._rec_markers = {}; +scheduler._rec_markers_pull = {}; +scheduler._add_rec_marker = function(ev, time) { + ev._pid_time = time; + this._rec_markers[ev.id] = ev; + if (!this._rec_markers_pull[ev.event_pid]) this._rec_markers_pull[ev.event_pid] = {}; + this._rec_markers_pull[ev.event_pid][time] = ev; +}; +scheduler._get_rec_marker = function(time, id) { + var ch = this._rec_markers_pull[id]; + if (ch) return ch[time]; + return null; +}; +scheduler._get_rec_markers = function(id) { + return (this._rec_markers_pull[id] || []); +}; +scheduler._rec_temp = []; +(function() { + var old_add_event = scheduler.addEvent; + scheduler.addEvent = function(start_date, end_date, text, id, extra_data) { + var ev_id = old_add_event.apply(this, arguments); + + if (ev_id) { + var ev = scheduler.getEvent(ev_id); + if (this._is_modified_occurence(ev)) + scheduler._add_rec_marker(ev, ev.event_length * 1000); + if (ev.rec_type) + ev.rec_pattern = ev.rec_type.split("#")[0]; + } + return ev_id; + }; +})(); +scheduler.attachEvent("onEventIdChange", function(id, new_id) { + if (this._ignore_call) return; + this._ignore_call = true; + + if(scheduler._rec_markers[id]){ + //important for for correct work of scheduler.getEvents(from, to) and collision detection + scheduler._rec_markers[new_id] = scheduler._rec_markers[id]; + delete scheduler._rec_markers[id]; + } + + for (var i = 0; i < this._rec_temp.length; i++) { + var tev = this._rec_temp[i]; + if (tev.event_pid == id) { + tev.event_pid = new_id; + this.changeEventId(tev.id, new_id + "#" + tev.id.split("#")[1]); + } + } + + delete this._ignore_call; +}); +scheduler.attachEvent("onConfirmedBeforeEventDelete", function(id) { + var ev = this.getEvent(id); + if (this._is_virtual_event(id) || (this._is_modified_occurence(ev) && ev.rec_type && ev.rec_type != 'none')) { + id = id.split("#"); + var nid = this.uid(); + var tid = (id[1]) ? id[1] : (ev._pid_time / 1000); + + var nev = this._copy_event(ev); + nev.id = nid; + nev.event_pid = ev.event_pid || id[0]; + var timestamp = tid; + nev.event_length = timestamp; + nev.rec_type = nev.rec_pattern = "none"; + this.addEvent(nev); + + this._add_rec_marker(nev, timestamp * 1000); + } else { + if (ev.rec_type && this._lightbox_id) + this._roll_back_dates(ev); + var sub = this._get_rec_markers(id); + for (var i in sub) { + if (sub.hasOwnProperty(i)) { + id = sub[i].id; + if (this.getEvent(id)) + this.deleteEvent(id, true); + } + } + } + return true; +}); +scheduler.attachEvent("onEventDeleted", function(id, ev){ + if(!this._is_virtual_event(id) && this._is_modified_occurence(ev)){ + if(!scheduler._events[id]){ + ev.rec_type = ev.rec_pattern = "none"; + this.setEvent(id, ev); + } + } +}); +scheduler.attachEvent("onEventChanged", function(id) { + if (this._loading) return true; + + var ev = this.getEvent(id); + + if (this._is_virtual_event(id)) { + var id = id.split("#"); + var nid = this.uid(); + this._not_render = true; + + var nev = this._copy_event(ev); + nev.id = nid; + nev.event_pid = id[0]; + var timestamp = id[1]; + nev.event_length = timestamp; + nev.rec_type = nev.rec_pattern = ""; + + this._add_rec_marker(nev, timestamp * 1000); + this.addEvent(nev); + + this._not_render = false; + + } else { + if (ev.rec_type && this._lightbox_id) + this._roll_back_dates(ev); + var sub = this._get_rec_markers(id); + for (var i in sub) { + if (sub.hasOwnProperty(i)) { + delete this._rec_markers[sub[i].id]; + this.deleteEvent(sub[i].id, true); + } + } + delete this._rec_markers_pull[id]; + + // it's possible that after editing event is no longer exists, in such case we need to remove _select_id flag + var isEventFound = false; + for (var k = 0; k < this._rendered.length; k++) { + if (this._rendered[k].getAttribute('event_id') == id) + isEventFound = true; + } + if (!isEventFound) + this._select_id = null; + } + return true; +}); +scheduler.attachEvent("onEventAdded", function(id) { + if (!this._loading) { + var ev = this.getEvent(id); + if (ev.rec_type && !ev.event_length) + this._roll_back_dates(ev); + } + return true; +}); +scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + var ev = this.getEvent(id); + if (!ev.rec_type && data.rec_type && !this._is_virtual_event(id)) + this._select_id = null; + return true; +}); +scheduler.attachEvent("onEventCreated", function(id) { + var ev = this.getEvent(id); + if (!ev.rec_type) + ev.rec_type = ev.rec_pattern = ev.event_length = ev.event_pid = ""; + return true; +}); +scheduler.attachEvent("onEventCancel", function(id) { + var ev = this.getEvent(id); + if (ev.rec_type) { + this._roll_back_dates(ev); + // a bit expensive, but we need to be sure that event re-rendered, because view can be corrupted by resize , during edit process + this.render_view_data(); + } +}); +scheduler._roll_back_dates = function(ev) { + ev.event_length = (ev.end_date.valueOf() - ev.start_date.valueOf()) / 1000; + ev.end_date = ev._end_date; + if (ev._start_date) { + ev.start_date.setMonth(0); + ev.start_date.setDate(ev._start_date.getDate()); + ev.start_date.setMonth(ev._start_date.getMonth()); + ev.start_date.setFullYear(ev._start_date.getFullYear()); + + } +}; + +scheduler._is_virtual_event = function(id){ + return id.toString().indexOf("#") != -1; +}; +scheduler._is_modified_occurence = function(ev){ + return (ev.event_pid && ev.event_pid != "0"); +}; + +scheduler._validId = function(id) { + return !this._is_virtual_event(id); +}; + +scheduler.showLightbox_rec = scheduler.showLightbox; +scheduler.showLightbox = function(id) { + var locale = this.locale; + var c = scheduler.config.lightbox_recurring; + var ev = this.getEvent(id); + var pid = ev.event_pid; + var isVirtual = this._is_virtual_event(id); + if (isVirtual) + pid = id.split("#")[0]; + + // show series + var showSeries = function(id) { + var event = scheduler.getEvent(id); + event._end_date = event.end_date; + event.end_date = new Date(event.start_date.valueOf() + event.event_length * 1000); + return scheduler.showLightbox_rec(id); // editing series + }; + + if ( (pid || pid*1 === 0) && ev.rec_type) { + // direct API call on series id + return showSeries(id); + } + if ( !pid || pid === '0' || ( (!locale.labels.confirm_recurring || c == 'instance') || (c == 'series' && !isVirtual)) ) { + // editing instance or non recurring event + return this.showLightbox_rec(id); + } + if (c == 'ask') { + var that = this; + dhtmlx.modalbox({ + text: locale.labels.confirm_recurring, + title: locale.labels.title_confirm_recurring, + width: "500px", + position: "middle", + buttons:[locale.labels.button_edit_series, locale.labels.button_edit_occurrence, locale.labels.icon_cancel], + callback: function(index) { + switch(+index) { + case 0: + return showSeries(pid); + case 1: + return that.showLightbox_rec(id); + case 2: + return; + } + } + }); + } else { + showSeries(pid); + } +}; + + +scheduler.get_visible_events_rec = scheduler.get_visible_events; +scheduler.get_visible_events = function(only_timed) { + for (var i = 0; i < this._rec_temp.length; i++) + delete this._events[this._rec_temp[i].id]; + this._rec_temp = []; + + var stack = this.get_visible_events_rec(only_timed); + var out = []; + for (var i = 0; i < stack.length; i++) { + if (stack[i].rec_type) { + //deleted element of serie + if (stack[i].rec_pattern != "none") + this.repeat_date(stack[i], out); + } + else out.push(stack[i]); + } + return out; +}; + + +(function() { + var old = scheduler.isOneDayEvent; + scheduler.isOneDayEvent = function(ev) { + if (ev.rec_type) return true; + return old.call(this, ev); + }; + var old_update_event = scheduler.updateEvent; + scheduler.updateEvent = function(id) { + var ev = scheduler.getEvent(id); + if(ev && ev.rec_type){ + //rec_type can be changed without the lightbox, + // make sure rec_pattern updated as well + ev.rec_pattern = (ev.rec_type || "").split("#")[0]; + } + if (ev && ev.rec_type && !this._is_virtual_event(id)) { + scheduler.update_view(); + } else { + old_update_event.call(this, id); + } + }; +})(); + +scheduler.transponse_size = { + day:1, week:7, month:1, year:12 +}; +scheduler.date.day_week = function(sd, day, week) { + sd.setDate(1); + week = (week - 1) * 7; + var cday = sd.getDay(); + var nday = day * 1 + week - cday + 1; + sd.setDate(nday <= week ? (nday + 7) : nday); +}; +scheduler.transpose_day_week = function(sd, list, cor, size, cor2) { + var cday = (sd.getDay() || (scheduler.config.start_on_monday ? 7 : 0)) - cor; + for (var i = 0; i < list.length; i++) { + if (list[i] > cday) + return sd.setDate(sd.getDate() + list[i] * 1 - cday - (size ? cor : cor2)); + } + this.transpose_day_week(sd, list, cor + size, null, cor); +}; +scheduler.transpose_type = function(type) { + var f = "transpose_" + type; + if (!this.date[f]) { + var str = type.split("_"); + var day = 60 * 60 * 24 * 1000; + var gf = "add_" + type; + var step = this.transponse_size[str[0]] * str[1]; + + if (str[0] == "day" || str[0] == "week") { + var days = null; + if (str[4]) { + days = str[4].split(","); + if (scheduler.config.start_on_monday) { + for (var i = 0; i < days.length; i++) + days[i] = (days[i] * 1) || 7; + days.sort(); + } + } + + this.date[f] = function(nd, td) { + var delta = Math.floor((td.valueOf() - nd.valueOf()) / (day * step)); + if (delta > 0) + nd.setDate(nd.getDate() + delta * step); + if (days) + scheduler.transpose_day_week(nd, days, 1, step); + }; + this.date[gf] = function(sd, inc) { + var nd = new Date(sd.valueOf()); + if (days) { + for (var count = 0; count < inc; count++) + scheduler.transpose_day_week(nd, days, 0, step); + } else + nd.setDate(nd.getDate() + inc * step); + + return nd; + }; + } + else if (str[0] == "month" || str[0] == "year") { + this.date[f] = function(nd, td) { + var delta = Math.ceil(((td.getFullYear() * 12 + td.getMonth() * 1) - (nd.getFullYear() * 12 + nd.getMonth() * 1)) / (step)); + if (delta >= 0) + nd.setMonth(nd.getMonth() + delta * step); + if (str[3]) + scheduler.date.day_week(nd, str[2], str[3]); + }; + this.date[gf] = function(sd, inc) { + var nd = new Date(sd.valueOf()); + nd.setMonth(nd.getMonth() + inc * step); + if (str[3]) + scheduler.date.day_week(nd, str[2], str[3]); + return nd; + }; + } + } +}; +scheduler.repeat_date = function(ev, stack, non_render, from, to) { + + from = from || this._min_date; + to = to || this._max_date; + + var td = new Date(ev.start_date.valueOf()); + + if (!ev.rec_pattern && ev.rec_type) + ev.rec_pattern = ev.rec_type.split("#")[0]; + + this.transpose_type(ev.rec_pattern); + scheduler.date["transpose_" + ev.rec_pattern](td, from); + while (td < ev.start_date || scheduler._fix_daylight_saving_date(td,from,ev,td,new Date(td.valueOf() + ev.event_length * 1000)).valueOf() <= from.valueOf() || td.valueOf() + ev.event_length * 1000 <= from.valueOf()) + td = this.date.add(td, 1, ev.rec_pattern); + while (td < to && td < ev.end_date) { + var timestamp = (scheduler.config.occurrence_timestamp_in_utc) ? Date.UTC(td.getFullYear(), td.getMonth(), td.getDate(), td.getHours(), td.getMinutes(), td.getSeconds()) : td.valueOf(); + var ch = this._get_rec_marker(timestamp, ev.id); + if (!ch) { // unmodified element of series + var ted = new Date(td.valueOf() + ev.event_length * 1000); + var copy = this._copy_event(ev); + //copy._timed = ev._timed; + copy.text = ev.text; + copy.start_date = td; + copy.event_pid = ev.id; + copy.id = ev.id + "#" + Math.ceil(timestamp / 1000); + copy.end_date = ted; + + copy.end_date = scheduler._fix_daylight_saving_date(copy.start_date, copy.end_date, ev, td, copy.end_date); + + copy._timed = this.isOneDayEvent(copy); + + if (!copy._timed && !this._table_view && !this.config.multi_day) return; + stack.push(copy); + + if (!non_render) { + this._events[copy.id] = copy; + this._rec_temp.push(copy); + } + + } else + if (non_render) stack.push(ch); + + td = this.date.add(td, 1, ev.rec_pattern); + } +}; +scheduler._fix_daylight_saving_date = function(start_date, end_date, ev, counter, default_date) { + var shift = start_date.getTimezoneOffset() - end_date.getTimezoneOffset(); + if (shift) { + if (shift > 0) { + // e.g. 24h -> 23h + return new Date(counter.valueOf() + ev.event_length * 1000 - shift * 60 * 1000); + } + else { + // e.g. 24h -> 25h + return new Date(end_date.valueOf() - shift * 60 * 1000); + } + } + return new Date(default_date.valueOf()); +}; +scheduler.getRecDates = function(id, max) { + var ev = typeof id == "object" ? id : scheduler.getEvent(id); + var count = 0; + var result = []; + max = max || 100; + + var td = new Date(ev.start_date.valueOf()); + var from = new Date(td.valueOf()); + + if (!ev.rec_type) { + return [ + { start_date: ev.start_date, end_date: ev.end_date } + ]; + } + if (ev.rec_type == "none") { + return []; + } + this.transpose_type(ev.rec_pattern); + scheduler.date["transpose_" + ev.rec_pattern](td, from); + + while (td < ev.start_date || (td.valueOf() + ev.event_length * 1000) <= from.valueOf()) + td = this.date.add(td, 1, ev.rec_pattern); + while (td < ev.end_date) { + var ch = this._get_rec_marker(td.valueOf(), ev.id); + var res = true; + if (!ch) { // unmodified element of series + var sed = new Date(td); + var ted = new Date(td.valueOf() + ev.event_length * 1000); + + ted = scheduler._fix_daylight_saving_date(sed, ted, ev, td, ted); + + result.push({start_date:sed, end_date:ted}); + } else if(ch.rec_type == "none") { + res = false; + } else { + result.push({ start_date: ch.start_date, end_date: ch.end_date }); + } + + td = this.date.add(td, 1, ev.rec_pattern); + if (res) { + count++; + if (count == max) + break; + } + } + return result; +}; +scheduler.getEvents = function(from, to) { + var result = []; + for (var a in this._events) { + var ev = this._events[a]; + if (ev && ev.start_date < to && ev.end_date > from) { + if (ev.rec_pattern) { + if (ev.rec_pattern == "none") continue; + var sev = []; + this.repeat_date(ev, sev, true, from, to); + for (var i = 0; i < sev.length; i++) { + // if event is in rec_markers then it will be checked by himself, here need to skip it + if (!sev[i].rec_pattern && sev[i].start_date < to && sev[i].end_date > from && !this._rec_markers[sev[i].id]) { + result.push(sev[i]); + } + } + } else if (!this._is_virtual_event(ev.id)) { // if it's virtual event we can skip it + result.push(ev); + } + } + } + return result; +}; + +scheduler.config.repeat_date = "%m.%d.%Y"; +scheduler.config.lightbox.sections = [ + {name:"description", height:130, map_to:"text", type:"textarea" , focus:true}, + {name:"recurring", type:"recurring", map_to:"rec_type", button:"recurring"}, + {name:"time", height:72, type:"time", map_to:"auto"} +]; + + +//drop secondary attributes +scheduler._copy_dummy = function(ev) { + var start_date = new Date(this.start_date); + var end_date = new Date(this.end_date); + this.start_date = start_date; + this.end_date = end_date; + this.event_length = this.event_pid = this.rec_pattern = this.rec_type = null; +}; + +scheduler.config.include_end_by = false; +scheduler.config.lightbox_recurring = 'ask'; // series, instance + +scheduler.attachEvent("onClearAll", function(){ + scheduler._rec_markers = {}; //clear recurring events data + scheduler._rec_markers_pull = {}; + scheduler._rec_temp = []; +}); + +scheduler.__recurring_template='<div class="dhx_form_repeat"> <form> <div class="dhx_repeat_left"> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="day" />Daily</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="week"/>Weekly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="month" checked />Monthly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="year" />Yearly</label> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_center"> <div style="display:none;" id="dhx_repeat_day"> <label><input class="dhx_repeat_radio" type="radio" name="day_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="day_count" value="1" />day<br /> <label><input class="dhx_repeat_radio" type="radio" name="day_type" checked value="w"/>Every workday</label> </div> <div style="display:none;" id="dhx_repeat_week"> Repeat every<input class="dhx_repeat_text" type="text" name="week_count" value="1" />week next days:<br /> <table class="dhx_repeat_days"> <tr> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="1" />Monday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="4" />Thursday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="2" />Tuesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="5" />Friday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="3" />Wednesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="6" />Saturday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="0" />Sunday</label><br /><br /> </td> </tr> </table> </div> <div id="dhx_repeat_month"> <label><input class="dhx_repeat_radio" type="radio" name="month_type" value="d"/>Repeat</label><input class="dhx_repeat_text" type="text" name="month_day" value="1" />day every<input class="dhx_repeat_text" type="text" name="month_count" value="1" />month<br /> <label><input class="dhx_repeat_radio" type="radio" name="month_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="month_week2" value="1" /><select name="month_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="0">Sunday</select>every<input class="dhx_repeat_text" type="text" name="month_count2" value="1" />month<br /> </div> <div style="display:none;" id="dhx_repeat_year"> <label><input class="dhx_repeat_radio" type="radio" name="year_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="year_day" value="1" />day<select name="year_month"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select>month<br /> <label><input class="dhx_repeat_radio" type="radio" name="year_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="year_week2" value="1" /><select name="year_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="7">Sunday</select>of<select name="year_month2"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select><br /> </div> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_right"> <label><input class="dhx_repeat_radio" type="radio" name="end" checked/>No end date</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />After</label><input class="dhx_repeat_text" type="text" name="occurences_count" value="1" />occurrences<br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />End by</label><input class="dhx_repeat_date" type="text" name="date_of_end" value="'+scheduler.config.repeat_date_of_end+'" /><br /> </div> </form> </div> <div style="clear:both"> </div>'; diff --git a/codebase/sources/ext/dhtmlxscheduler_recurring.js.map b/codebase/sources/ext/dhtmlxscheduler_recurring.js.map new file mode 100644 index 0000000..d69ba82 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_recurring.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_recurring.js.map","sources":["dhtmlxscheduler_recurring.js"],"names":["scheduler","config","occurrence_timestamp_in_utc","recurring_workdays","form_blocks","render","__recurring_template","_ds","_init_set_value","node","value","ev","register_els","inps","i","length","inp","type","els","name","push","get_radio_value","col","checked","change_current_view","$","style","display","this","get_repeat_code","dates","code","get_rcode","repeat","end","Date","str_date","transpose_type","join","Math","max","transp","toString","indexOf","start_on_monday","date","add","start","set_repeat_code","data","split","set_rcode","e","day","week","month","year","end_date","include_end_by","date_str","onclick","start_date","_end_date","str_date_format","str_to_date","repeat_date","date_to_str","top","getElementsByTagName","repeat_date_of_end","formatter","_currentDate","a","document","getElementById","_get_repeat_code","setDate","repeat_precise","_start","t","getDay","start_exists","sort","transpose_day_week","week_start","splice","setMonth","d","getDate","getMonth","_set_repeat_code","elements","el","_lightbox","_rec_init_done","set_value","rf","open","rec_type","blocked","_is_modified_occurence","ds","button_click","previousSibling","firstChild","get_value","actual_dates","formSection","getValue","_start_date","rec_pattern","focus","index","section","cont","height","backgroundPosition","nextSibling","innerHTML","locale","labels","button_recurring","button_recurring_open","setLightboxSize","_rec_markers","_rec_markers_pull","_add_rec_marker","time","_pid_time","id","event_pid","_get_rec_marker","ch","_get_rec_markers","_rec_temp","old_add_event","addEvent","ev_id","apply","arguments","getEvent","event_length","attachEvent","new_id","_ignore_call","tev","changeEventId","_is_virtual_event","nid","uid","tid","nev","_copy_event","timestamp","_lightbox_id","_roll_back_dates","sub","hasOwnProperty","deleteEvent","_events","setEvent","_loading","_not_render","isEventFound","k","_rendered","getAttribute","_select_id","render_view_data","valueOf","setFullYear","getFullYear","_validId","showLightbox_rec","showLightbox","c","lightbox_recurring","pid","isVirtual","showSeries","event","confirm_recurring","that","dhtmlx","modalbox","text","title","title_confirm_recurring","width","position","buttons","button_edit_series","button_edit_occurrence","icon_cancel","callback","get_visible_events_rec","get_visible_events","only_timed","stack","out","old","isOneDayEvent","call","old_update_event","updateEvent","update_view","transponse_size","day_week","sd","cday","nday","list","cor","size","cor2","f","str","gf","step","days","nd","td","delta","floor","inc","count","ceil","non_render","from","to","_min_date","_max_date","_fix_daylight_saving_date","UTC","getHours","getMinutes","getSeconds","ted","copy","_timed","_table_view","multi_day","counter","default_date","shift","getTimezoneOffset","getRecDates","result","res","sed","getEvents","sev","lightbox","sections","map_to","button","_copy_dummy"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_serialize.js b/codebase/sources/ext/dhtmlxscheduler_serialize.js new file mode 100644 index 0000000..88b70ef --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_serialize.js @@ -0,0 +1,110 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler._get_serializable_data = function(){ + var res = {}; + for (var a in this._events){ + var ev = this._events[a]; + if (ev.id.toString().indexOf("#") == -1){ + res[ev.id] = ev; + } + } + return res; +}; + +//redefine this method, if you want to provide a custom set of attributes for serialization +scheduler.data_attributes=function(){ + var attrs = []; + var format = scheduler.templates.xml_format; + var all_events = this._get_serializable_data(); + for (var a in all_events){ + var ev = all_events[a]; + for (var name in ev) + if (name.substr(0,1) !="_") + attrs.push([name,((name == "start_date" || name == "end_date")?format:null)]); + break; + } + return attrs; +}; + +scheduler.toXML = function(header){ + var xml = []; + var attrs = this.data_attributes(); + + var all_events = this._get_serializable_data(); + for (var a in all_events){ + var ev = all_events[a]; + + xml.push("<event>"); + for (var i=0; i < attrs.length; i++) + xml.push("<"+attrs[i][0]+"><![CDATA["+(attrs[i][1]?attrs[i][1](ev[attrs[i][0]]):ev[attrs[i][0]])+"]]></"+attrs[i][0]+">"); + + xml.push("</event>"); + } + return (header||"")+"<data>"+xml.join("\n")+"</data>"; +}; + +scheduler._serialize_json_value = function(value){ + if(value === null || typeof value === "boolean"){ + value = "" + value; + }else{ + if(!value && value !== 0){ + value = ""; + } + value = '"' + value.toString(). + replace(/\n/g,""). + replace(/\\/g,"\\\\"). + replace(/\"/g, '\\"') + '"'; + } + return value; +}; + +scheduler.toJSON = function(){ + var json = [], value = ""; + var attrs = this.data_attributes(); + var all_events = this._get_serializable_data(); + for (var a in all_events){ + var ev = all_events[a]; + + var line =[]; + for (var i=0; i < attrs.length; i++){ + value = (attrs[i][1]) ? attrs[i][1](ev[attrs[i][0]]) : ev[attrs[i][0]]; + + line.push(' "'+attrs[i][0]+'": '+ this._serialize_json_value(value)); + } + json.push("{"+line.join(",")+"}"); + } + return "["+json.join(",\n")+"]"; +}; + + +scheduler.toICal = function(header){ + var start = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//dhtmlXScheduler//NONSGML v2.2//EN\nDESCRIPTION:"; + var end = "END:VCALENDAR"; + var format = scheduler.date.date_to_str("%Y%m%dT%H%i%s"); + var full_day_format = scheduler.date.date_to_str("%Y%m%d"); + + var ical = []; + var all_events = this._get_serializable_data(); + for (var a in all_events){ + var ev = all_events[a]; + + + ical.push("BEGIN:VEVENT"); + if (!ev._timed || (!ev.start_date.getHours() && !ev.start_date.getMinutes())) + ical.push("DTSTART:"+full_day_format(ev.start_date)); + else + ical.push("DTSTART:"+format(ev.start_date)); + if (!ev._timed || (!ev.end_date.getHours() && !ev.end_date.getMinutes())) + ical.push("DTEND:"+full_day_format(ev.end_date)); + else + ical.push("DTEND:"+format(ev.end_date)); + ical.push("SUMMARY:"+ev.text); + ical.push("END:VEVENT"); + } + return start+(header||"")+"\n"+ical.join("\n")+"\n"+end; +};
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_serialize.js.map b/codebase/sources/ext/dhtmlxscheduler_serialize.js.map new file mode 100644 index 0000000..6ad3a60 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_serialize.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_serialize.js.map","sources":["dhtmlxscheduler_serialize.js"],"names":["scheduler","_get_serializable_data","res","a","this","_events","ev","id","toString","indexOf","data_attributes","attrs","format","templates","xml_format","all_events","name","substr","push","toXML","header","xml","i","length","join","_serialize_json_value","value","replace","toJSON","json","line","toICal","start","end","date","date_to_str","full_day_format","ical","_timed","start_date","getHours","getMinutes","end_date","text"],"mappings":"AAAAA,UAAUC,uBAAyB,WAClC,GAAIC,KACJ,KAAK,GAAIC,KAAKC,MAAKC,QAAQ,CAC1B,GAAIC,GAAKF,KAAKC,QAAQF,EACe,KAAjCG,EAAGC,GAAGC,WAAWC,QAAQ,OAC5BP,EAAII,EAAGC,IAAMD,GAGf,MAAOJ,IAIRF,UAAUU,gBAAgB,WACzB,GAAIC,MACAC,EAASZ,UAAUa,UAAUC,WAC7BC,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EACpB,KAAK,GAAIa,KAAQV,GACO,KAAnBU,EAAKC,OAAO,EAAE,IACjBN,EAAMO,MAAMF,EAAe,cAARA,GAAgC,YAARA,EAAoBJ,EAAO,MACxE,OAED,MAAOD,IAGRX,UAAUmB,MAAQ,SAASC,GAC1B,GAAIC,MACAV,EAAQP,KAAKM,kBAEbK,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EAEpBkB;EAAIH,KAAK,UACT,KAAK,GAAII,GAAE,EAAGA,EAAIX,EAAMY,OAAQD,IAC/BD,EAAIH,KAAK,IAAIP,EAAMW,GAAG,GAAG,cAAcX,EAAMW,GAAG,GAAGX,EAAMW,GAAG,GAAGhB,EAAGK,EAAMW,GAAG,KAAKhB,EAAGK,EAAMW,GAAG,KAAK,QAAQX,EAAMW,GAAG,GAAG,IAEtHD,GAAIH,KAAK,YAEV,OAAQE,GAAQ,IAAI,SAASC,EAAIG,KAAK,MAAM,WAG7CxB,UAAUyB,sBAAwB,SAASC,GAY1C,MAXa,QAAVA,GAAmC,iBAAVA,GAC3BA,EAAQ,GAAKA,GAETA,GAAmB,IAAVA,IACZA,EAAQ,IAETA,EAAQ,IAAMA,EAAMlB,WACnBmB,QAAQ,MAAM,IACdA,QAAQ,MAAM,QACdA,QAAQ,MAAO,OAAS,KAEnBD,GAGR1B,UAAU4B,OAAS,WAClB,GAAIC,MAAWH,EAAQ,GACnBf,EAAQP,KAAKM,kBACbK,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CAIxB,IAAK,GAHDT,GAAKS,EAAWZ,GAEhB2B,KACKR,EAAE,EAAGA,EAAIX,EAAMY,OAAQD,IAC/BI,EAASf,EAAMW,GAAG,GAAMX,EAAMW,GAAG,GAAGhB,EAAGK,EAAMW,GAAG,KAAOhB,EAAGK,EAAMW,GAAG,IAEnEQ,EAAKZ,KAAK,KAAKP,EAAMW,GAAG,GAAG,MAAOlB,KAAKqB,sBAAsBC,GAE9DG;EAAKX,KAAK,IAAIY,EAAKN,KAAK,KAAK,KAE9B,MAAO,IAAIK,EAAKL,KAAK,OAAO,KAI7BxB,UAAU+B,OAAS,SAASX,GAC3B,GAAIY,GAAQ,0FACRC,EAAM,gBACNrB,EAASZ,UAAUkC,KAAKC,YAAY,iBACpCC,EAAkBpC,UAAUkC,KAAKC,YAAY,UAE7CE,KACAtB,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EAGpBkC,GAAKnB,KAAK,gBAITmB,EAAKnB,KAHDZ,EAAGgC,SAAYhC,EAAGiC,WAAWC,YAAelC,EAAGiC,WAAWE,cAGpD,WAAW7B,EAAON,EAAGiC,YAFrB,WAAWH,EAAgB9B,EAAGiC,aAMxCF,EAAKnB,KAHDZ,EAAGgC,SAAYhC,EAAGoC,SAASF,YAAelC,EAAGoC,SAASD,cAGhD,SAAS7B,EAAON,EAAGoC,UAFnB,SAASN,EAAgB9B,EAAGoC,WAGvCL,EAAKnB,KAAK,WAAWZ,EAAGqC,MACxBN,EAAKnB,KAAK;CAEX,MAAOc,IAAOZ,GAAQ,IAAI,KAAKiB,EAAKb,KAAK,MAAM,KAAKS"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_timeline.js b/codebase/sources/ext/dhtmlxscheduler_timeline.js new file mode 100644 index 0000000..2f60f9f --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_timeline.js @@ -0,0 +1,1277 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler._temp_matrix_scope = function(){ + + + +scheduler.matrix = {}; +scheduler._merge=function(a,b){ + for (var c in b) + if (typeof a[c] == "undefined") + a[c]=b[c]; +}; +scheduler.createTimelineView=function(obj){ + scheduler._skin_init(); + + scheduler._merge(obj,{ + section_autoheight: true, + name:"matrix", + x:"time", + y:"time", + x_step:1, + x_unit:"hour", + y_unit:"day", + y_step:1, + x_start:0, + x_size:24, + y_start:0, + y_size: 7, + render:"cell", + dx:200, + dy:50, + event_dy: scheduler.xy.bar_height-5, + event_min_dy: scheduler.xy.bar_height-5, + resize_events: true, + fit_events: true, + show_unassigned: false, + second_scale: false, + round_position: false, + _logic: function(render_name, y_unit, timeline) { + var res = {}; + if(scheduler.checkEvent("onBeforeSectionRender")) { + res = scheduler.callEvent("onBeforeSectionRender", [render_name, y_unit, timeline]); + } + return res; + } + }); + obj._original_x_start = obj.x_start; + + //first and last hours are applied only to day based timeline + if (obj.x_unit != "day") obj.first_hour = obj.last_hour = 0; + //correction for first and last hour + obj._start_correction = obj.first_hour?obj.first_hour*60*60*1000:0; + obj._end_correction = obj.last_hour?(24-obj.last_hour)*60*60*1000:0; + + if (scheduler.checkEvent("onTimelineCreated")) { + scheduler.callEvent("onTimelineCreated", [obj]); + } + + var old = scheduler.render_data; + scheduler.render_data = function(evs, mode) { + if (this._mode == obj.name) { + //repaint single event, precision is not necessary + if (mode && !obj.show_unassigned && obj.render != "cell") { + for (var i = 0; i < evs.length; i++) { + this.clear_event(evs[i]); + this.render_timeline_event.call(this.matrix[this._mode], evs[i], true); + } + } else { + scheduler._renderMatrix.call(obj, true, true); + } + } else + return old.apply(this, arguments); + }; + + scheduler.matrix[obj.name]=obj; + scheduler.templates[obj.name+"_cell_value"] = function(ar){ return ar?ar.length:""; }; + scheduler.templates[obj.name+"_cell_class"] = function(arr){ return ""; }; + scheduler.templates[obj.name+"_scalex_class"] = function(date){ return ""; }; + scheduler.templates[obj.name+"_second_scalex_class"] = function(date){ return ""; }; + + scheduler.templates[obj.name+"_scaley_class"] = function(section_id, section_label, section_options){ return ""; }; + scheduler.templates[obj.name+"_scale_label"] = function(section_id, section_label, section_options){ return section_label; }; + + scheduler.templates[obj.name+"_tooltip"] = function(a,b,e){ return e.text; }; + scheduler.templates[obj.name+"_date"] = function(datea, dateb){ + if ( (datea.getDay()==dateb.getDay() && dateb-datea < (24*60*60*1000)) || + +datea == +scheduler.date.date_part(new Date(dateb)) || + (+scheduler.date.add(datea, 1, "day") == +dateb && dateb.getHours() === 0 && dateb.getMinutes() === 0) ) + return scheduler.templates.day_date(datea); + if ( (datea.getDay() != dateb.getDay() && dateb-datea < (24*60*60*1000)) ) { + return scheduler.templates.day_date(datea)+" – "+scheduler.templates.day_date(dateb); + } + return scheduler.templates.week_date(datea, dateb); + }; + + scheduler.templates[obj.name+"_scale_date"] = scheduler.date.date_to_str(obj.x_date||scheduler.config.hour_date); + scheduler.templates[obj.name+"_second_scale_date"] = scheduler.date.date_to_str((obj.second_scale && obj.second_scale.x_date)?obj.second_scale.x_date:scheduler.config.hour_date); + + scheduler.date["add_" + obj.name] = function(date, step, c) { + var resulting_date = scheduler.date.add(date, (obj.x_length || obj.x_size) * step * obj.x_step, obj.x_unit); + if (obj.x_unit == "minute" || obj.x_unit == "hour") { + var size = (obj.x_length || obj.x_size); + var converted_step = (obj.x_unit == "hour") ? obj.x_step*60 : obj.x_step; + if((converted_step * size) % (24 * 60)){ + //if scroll hours within the day + if ( +scheduler.date.date_part(new Date(date)) == +scheduler.date.date_part(new Date(resulting_date )) ) { + obj.x_start += step*size; + } else { + // total steps starting from 0 + var total_steps = ( (24 * 60) / (size * converted_step) ) - 1; + var steps_offset = Math.round(total_steps * size); + + if (step > 0) { + obj.x_start = obj.x_start - steps_offset; + } else { + obj.x_start = steps_offset + obj.x_start; + } + } + } + } + return resulting_date; + }; + scheduler.date[obj.name+"_start"] = function(date) { + var func = scheduler.date[obj.x_unit+"_start"] || scheduler.date.day_start; + var start_date = func.call(scheduler.date, date); + start_date = scheduler.date.add(start_date, obj.x_step*obj.x_start, obj.x_unit); + return start_date; + }; + + + scheduler.callEvent("onOptionsLoad",[obj]); + + //init custom wrappers + scheduler[obj.name+"_view"]=function(){ + scheduler._renderMatrix.apply(obj, arguments); + }; + + //enable drag for non-cell modes + var temp_date = new Date(); + var step_diff = (scheduler.date.add(temp_date, obj.x_step, obj.x_unit).valueOf() - temp_date.valueOf()); // "minute" + step in ms + scheduler["mouse_"+obj.name]=function(pos){ //mouse_coord handler + //get event object + var ev = this._drag_event; + if (this._drag_id){ + ev = this.getEvent(this._drag_id); + this._drag_event._dhx_changed = true; + } + + pos.x-=obj.dx; + var summ = 0, xind = 0; + var ratio, + column_width; + for (xind; xind <= this._cols.length-1; xind++) { + + column_width = this._cols[xind]; + summ += column_width; + if (summ>pos.x){ //index of section + ratio = (pos.x-(summ-column_width))/column_width; + ratio = (ratio < 0) ? 0 : ratio; + break; + } + } + + if(obj.round_position){ + // in case of click, mouse position will be always rounded to start date of the cell + // when dragging - position can be rounded to the start date of the next column, in order to improve the usability + // edge = 1 - always return start date of current cell + // 0.5 - round to next cell if mouse in the right half of cell + var edge = 1; + if(scheduler.getState().drag_mode && scheduler.getState().drag_mode != "move"){ + edge = 0.5;//rounding for resize + } + if(ratio >= edge){ + xind++; + } + ratio = 0; + } + + //border cases + if (xind === 0 && this._ignores[0]) { + xind = 1; ratio = 0; + while (this._ignores[xind]) xind++; + } else if ( xind == this._cols.length && this._ignores[xind-1]) { + xind = this._cols.length-1; ratio = 0; + while (this._ignores[xind]) xind--; + xind++; + } + + + pos.x = 0; + pos.force_redraw = true; + pos.custom = true; + + var end_date; + // if our event is at the end of the view + if(xind >= obj._trace_x.length) { + end_date = scheduler.date.add(obj._trace_x[obj._trace_x.length-1], obj.x_step, obj.x_unit); + if (obj._end_correction) + end_date = new Date(end_date-obj._end_correction); + } else { + var timestamp_diff = ratio * column_width * obj._step + obj._start_correction; + end_date = new Date(+obj._trace_x[xind]+timestamp_diff); + } + + // as we can simply be calling _locate_cell_timeline + if (this._drag_mode == "move" && this._drag_id && this._drag_event) { + var ev = this.getEvent(this._drag_id); + var drag_event = this._drag_event; + + pos._ignores = (this._ignores_detected || obj._start_correction || obj._end_correction); + if (!drag_event._move_delta) { + drag_event._move_delta = (ev.start_date-end_date)/60000; + if (this.config.preserve_length && pos._ignores){ + drag_event._move_delta = this._get_real_event_length(ev.start_date,end_date, obj); + drag_event._event_length = this._get_real_event_length(ev.start_date,ev.end_date, obj); + } + } + + + + + //preserve visible size of event + if (this.config.preserve_length && pos._ignores){ + var ev_length = drag_event._event_length;//this._get_real_event_length(ev.start_date, ev.end_date, obj); + var current_back_shift = this._get_fictional_event_length(end_date, drag_event._move_delta, obj, true); + end_date = new Date(end_date - current_back_shift); + } else { + // converting basically to start_date + end_date = scheduler.date.add(end_date, drag_event._move_delta, "minute"); + } + } + + if (this._drag_mode == "resize" && ev){ + if(this._drag_from_start && +end_date> +ev.end_date){ + this._drag_from_start = false; + }else if(!this._drag_from_start && +end_date < +ev.start_date){ + this._drag_from_start = true; + } + pos.resize_from_start = this._drag_from_start; + } + + if (obj.round_position) { + switch(this._drag_mode) { + case "move": + if (!this.config.preserve_length){ + end_date = get_rounded_date.call(obj, end_date, false); + // to preserve original start and end dates + if(obj.x_unit == "day")//only make sense for whole-day cells + pos.custom = false; + } + break; + case "resize": + if(this._drag_event){ + // will save and use resize position only once + if (this._drag_event._resize_from_start === null || this._drag_event._resize_from_start === undefined) { + this._drag_event._resize_from_start = pos.resize_from_start; + } + pos.resize_from_start = this._drag_event._resize_from_start; + end_date = get_rounded_date.call(obj, end_date, !this._drag_event._resize_from_start); + } + break; + } + } + + this._resolve_timeline_section(obj, pos); + if(pos.section){ + // update draggable event with current section + this._update_timeline_section({pos:pos, event:this.getEvent(this._drag_id), view:obj}); + } + pos.y = Math.round((end_date-this._min_date)/(1000*60*this.config.time_step)); + pos.shift = this.config.time_step; //step_diff; + + + return pos; + }; +}; + +scheduler._get_timeline_event_height = function(ev, config){ + var section = ev[config.y_property]; // section id + var event_height = config.event_dy; + if (config.event_dy == "full") { + if (config.section_autoheight) { + event_height = config._section_height[section] - 6; + } else { + event_height = config.dy - 3; + } + } + + if (config.resize_events) { + event_height = Math.max(Math.floor(event_height / ev._count), config.event_min_dy); + } + return event_height; +}; +scheduler._get_timeline_event_y = function(order, event_height){ + var sorder = order; + var y = 2+sorder*event_height+(sorder?(sorder*2):0); // original top + number_of_events * event_dy + default event top/bottom borders + if (scheduler.config.cascade_event_display) { + y =2+sorder*scheduler.config.cascade_event_margin+(sorder?(sorder*2):0); + } + return y; +}; + +scheduler.render_timeline_event = function(ev, attach){ + var section = ev[this.y_property]; // section id + if (!section) + return ""; // as we may await html + + var sorder = ev._sorder; + + var x_start = _getX(ev, false, this); + var x_end = _getX(ev, true, this); + + var event_height = scheduler._get_timeline_event_height(ev, this); + + var hb = event_height - 2;// takes into account css sizes (border/padding) + if (!ev._inner && this.event_dy == "full") { + hb=(hb+2)*(ev._count-sorder)-2; + } + + var y = scheduler._get_timeline_event_y(ev._sorder, event_height); + + var section_height = event_height+y+2; + if(!this._events_height[section] || (this._events_height[section] < section_height)){ + this._events_height[section] = section_height; + } + + var cs = scheduler.templates.event_class(ev.start_date,ev.end_date,ev); + cs = "dhx_cal_event_line "+(cs||""); + + var bg_color = (ev.color?("background:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); + var text = scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev); + + var html='<div event_id="'+ev.id+'" class="'+cs+'" style="'+bg_color+''+color+'position:absolute; top:'+y+'px; height: '+hb+'px; left:'+x_start+'px; width:'+Math.max(0,x_end-x_start)+'px;'+(ev._text_style||"")+'">'; + if (scheduler.config.drag_resize && !scheduler.config.readonly) { + var dhx_event_resize = 'dhx_event_resize'; + html += ("<div class='"+dhx_event_resize+" "+dhx_event_resize+"_start' style='height: "+hb+"px;'></div><div class='"+dhx_event_resize+" "+dhx_event_resize+"_end' style='height: "+hb+"px;'></div>"); + } + html += (text+'</div>'); + + if (!attach) + return html; + else { + var d = document.createElement("DIV"); + d.innerHTML = html; + var ind = this.order[section]; + var parent = scheduler._els["dhx_cal_data"][0].firstChild.rows[ind].cells[1].firstChild; + + scheduler._rendered.push(d.firstChild); + parent.appendChild(d.firstChild); + } +}; +function trace_events(){ + //minimize event set + var evs = scheduler.get_visible_events(); + var matrix =[]; + for (var i=0; i < this.y_unit.length; i++) + matrix[i]=[]; + + //next code defines row for undefined key + //most possible it is an artifact of incorrect configuration + if (!matrix[y]) + matrix[y]=[]; + + for (var i=0; i < evs.length; i++) { + var y = this.order[evs[i][this.y_property]]; + var x = 0; + while (this._trace_x[x+1] && evs[i].start_date>=this._trace_x[x+1]) x++; + while (this._trace_x[x] && evs[i].end_date>this._trace_x[x]) { + if (!matrix[y][x]) matrix[y][x]=[]; + matrix[y][x].push(evs[i]); + x++; + } + } + return matrix; +} +// function used to get X (both start and end) coordinates for timeline bar view +function _getX(ev, isEndPoint, config) { + var x = 0; + var step = config._step; + var round_position = config.round_position; + + var column_offset = 0; + var date = (isEndPoint) ? ev.end_date : ev.start_date; + + if(date.valueOf()>scheduler._max_date.valueOf()) + date = scheduler._max_date; + var delta = date - scheduler._min_date_timeline; + + if (delta > 0){ + var index = scheduler._get_date_index(config, date); + if (scheduler._ignores[index]) + round_position=true; + + for (var i = 0; i < index; i++) { + x += scheduler._cols[i]; + } + + var column_date = scheduler.date.add(scheduler._min_date_timeline, scheduler.matrix[scheduler._mode].x_step*index, scheduler.matrix[scheduler._mode].x_unit); + if (!round_position) { + delta = date - column_date; + if (config.first_hour || config.last_hour){ + delta = delta - config._start_correction; + if (delta < 0) delta = 0; + column_offset = Math.round(delta/step); + if (column_offset > scheduler._cols[index]) + column_offset = scheduler._cols[index]; + } else { + column_offset = Math.round(delta/step); + } + } else { + if (+date > +column_date && isEndPoint) { + column_offset = scheduler._cols[index]; + } + } + } + if (isEndPoint) { + // special handling for "round" dates which match columns and usual ones + if (delta !== 0 && !round_position) { + x += column_offset-12; + } else { + x += column_offset-14; + } + } else { + x += column_offset+1; + } + return x; +} +function get_rounded_date(date, isEndDate) { + var index = scheduler._get_date_index(this, date); + var rounded_date = this._trace_x[index]; + if (isEndDate && (+date != +this._trace_x[index])) { + rounded_date = (this._trace_x[index+1]) ? this._trace_x[index+1] : scheduler.date.add(this._trace_x[index], this.x_step, this.x_unit); + } + return new Date(rounded_date); +} +function get_events_html(evs) { + var html = ""; + if (evs && this.render != "cell"){ + evs.sort(this.sort || function(a,b){ + if(a.start_date.valueOf()==b.start_date.valueOf()) + return a.id>b.id?1:-1; + return a.start_date>b.start_date?1:-1; + }); + var stack=[]; + var evs_length = evs.length; + // prepare events for render + for (var j=0; j<evs_length; j++){ + var ev = evs[j]; + ev._inner = false; + + var ev_start_date = (this.round_position) ? get_rounded_date.apply(this, [ev.start_date, false]) : ev.start_date; + var ev_end_date = (this.round_position) ? get_rounded_date.apply(this, [ev.end_date, true]) : ev.end_date; + + // cutting stack from the last -> first event side + while (stack.length) { + var stack_ev = stack[stack.length-1]; + if (stack_ev.end_date.valueOf() <= ev_start_date.valueOf()) { + stack.splice(stack.length-1,1); + } else { + break; + } + } + + // cutting stack from the first -> last event side + var sorderSet = false; + for(var p=0; p<stack.length; p++){ + var t_ev = stack[p]; + if(t_ev.end_date.valueOf() <= ev_start_date.valueOf()){ + sorderSet = true; + ev._sorder=t_ev._sorder; + stack.splice(p,1); + ev._inner=true; + break; + } + } + + + if (stack.length) + stack[stack.length-1]._inner=true; + + + if (!sorderSet) { + if (stack.length) { + if (stack.length <= stack[stack.length - 1]._sorder) { + if (!stack[stack.length - 1]._sorder) + ev._sorder = 0; + else + for (var h = 0; h < stack.length; h++) { + var _is_sorder = false; + for (var t = 0; t < stack.length; t++) { + if (stack[t]._sorder == h) { + _is_sorder = true; + break; + } + } + if (!_is_sorder) { + ev._sorder = h; + break; + } + } + ev._inner = true; + } + else { + var _max_sorder = stack[0]._sorder; + for (var w = 1; w < stack.length; w++) + if (stack[w]._sorder > _max_sorder) + _max_sorder = stack[w]._sorder; + ev._sorder = _max_sorder + 1; + ev._inner = false; + } + } + else + ev._sorder = 0; + } + + stack.push(ev); + + if (stack.length>(stack.max_count||0)) { + stack.max_count=stack.length; + ev._count=stack.length; + } + else { + ev._count=(ev._count)?ev._count:1; + } + } + // fix _count for every event + for (var m=0; m < evs.length; m++) { + evs[m]._count = stack.max_count; + } + // render events + for (var v=0; v<evs_length; v++) { + html+=scheduler.render_timeline_event.call(this, evs[v], false); + } + } + return html; +} + + +function y_scale(d) { + var html = "<table style='table-layout:fixed;' cellspacing='0' cellpadding='0'>"; + var evs=[]; + if(scheduler._load_mode) + scheduler._load(); + if (this.render == "cell") + evs = trace_events.call(this); + else { + var tevs = scheduler.get_visible_events(); + var order = this.order; + + for (var j = 0; j < tevs.length; j++) { + var tev = tevs[j]; + var tev_section = tev[this.y_property]; + var index = this.order[ tev_section ]; + + if (this.show_unassigned && !tev_section) { + for (var key in order) { + if (order.hasOwnProperty(key)) { + index = order[key]; + if (!evs[index]) evs[index] = []; + var clone = scheduler._lame_copy({}, tev); + clone[this.y_property] = key; + evs[index].push(clone); + } + } + } else { + // required as we could have index of not displayed section or "undefined" + if (!evs[index]) evs[index] = []; + evs[index].push(tev); + } + } + } + + var summ = 0; + for (var i=0; i < scheduler._cols.length; i++) + summ+=scheduler._cols[i]; + + var step = new Date(); + var realcount = scheduler._cols.length-scheduler._ignores_detected; + step = ((scheduler.date.add(step, this.x_step*realcount, this.x_unit)-step)-(this._start_correction + this._end_correction)*realcount)/summ; + this._step = step; + this._summ = summ; + + var heights = scheduler._colsS.heights=[]; + + this._events_height = {}; + this._section_height = {}; + for (var i=0; i<this.y_unit.length; i++){ + + var stats = this._logic(this.render, this.y_unit[i], this); // obj with custom style + + scheduler._merge(stats, { + height: this.dy + }); + + //autosize height, if we have a free space + if(this.section_autoheight) { + if (this.y_unit.length * stats.height < d.offsetHeight) { + stats.height = Math.max(stats.height, Math.floor((d.offsetHeight - 1) / this.y_unit.length)); + } + this._section_height[this.y_unit[i].key] = stats.height; + } + + scheduler._merge(stats, { + //section 1 + tr_className: "", + style_height: "height:"+stats.height+"px;", + style_width: "width:"+(this.dx-1)+"px;", + td_className: "dhx_matrix_scell"+((scheduler.templates[this.name+"_scaley_class"](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]))?" "+scheduler.templates[this.name+"_scaley_class"](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]):''), + td_content: scheduler.templates[this.name+'_scale_label'](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]), + //section 2 + summ_width: "width:"+summ+"px;", + //section 3 + table_className: '' + }); + + // generating events html in a temporary file, calculating their height + var events_html = get_events_html.call(this, evs[i]); + + if(this.fit_events){ + var rendered_height = this._events_height[this.y_unit[i].key]||0; + stats.height = (rendered_height>stats.height)?rendered_height:stats.height; + stats.style_height = "height:"+stats.height+"px;"; + this._section_height[this.y_unit[i].key] = stats.height; + } + + // section 1 + html+="<tr class='"+stats.tr_className+"' style='"+stats.style_height+"'><td class='"+stats.td_className+"' style='"+stats.style_width+" height:"+(stats.height-1)+"px;'>"+stats.td_content+"</td>"; + + if (this.render == "cell"){ + for (var j=0; j < scheduler._cols.length; j++) { + if (scheduler._ignores[j]) + html+="<td></td>"; + else + html+="<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](evs[i][j],this._trace_x[j],this.y_unit[i])+"' style='width:"+(scheduler._cols[j]-1)+"px'><div style='width:"+(scheduler._cols[j]-1)+"px'>"+scheduler.templates[this.name+"_cell_value"](evs[i][j],this._trace_x[j],this.y_unit[i])+"</div></td>"; + } + } else { + //section 2 + html+="<td><div style='"+stats.summ_width+" "+stats.style_height+" position:relative;' class='dhx_matrix_line'>"; + + // adding events + html += events_html; + + //section 3 + html+="<table class='"+stats.table_className+"' cellpadding='0' cellspacing='0' style='"+stats.summ_width+" "+stats.style_height+"' >"; + for (var j=0; j < scheduler._cols.length; j++){ + if (scheduler._ignores[j]) + html+="<td></td>"; + else + html+="<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](evs[i],this._trace_x[j],this.y_unit[i])+"' style='width:"+(scheduler._cols[j]-1)+"px'><div style='width:"+(scheduler._cols[j]-1)+"px'></div></td>"; + } + html+="</table>"; + html+="</div></td>"; + } + html+="</tr>"; + } + html += "</table>"; + this._matrix = evs; + //d.scrollTop = 0; //fix flickering in FF; disabled as it was impossible to create dnd event if scroll was used (window jumped to the top) + d.innerHTML = html; + + scheduler._rendered = []; + var divs = scheduler._obj.getElementsByTagName("DIV"); + for (var i=0; i < divs.length; i++) + if (divs[i].getAttribute("event_id")) + scheduler._rendered.push(divs[i]); + + this._scales = {}; + for (var i=0; i < d.firstChild.rows.length; i++) { + heights.push(d.firstChild.rows[i].offsetHeight); + var unit_key = this.y_unit[i].key; + var scale = this._scales[unit_key] = (scheduler._isRender('cell')) ? d.firstChild.rows[i] : d.firstChild.rows[i].childNodes[1].getElementsByTagName('div')[0]; + scheduler.callEvent("onScaleAdd", [scale, unit_key]); + } +} +function x_scale(h){ + var current_sh = scheduler.xy.scale_height; + var original_sh = this._header_resized||scheduler.xy.scale_height; + scheduler._cols=[]; //store for data section, each column width + scheduler._colsS={height:0}; // heights of the y sections + this._trace_x =[]; // list of dates per cells + var summ = scheduler._x - this.dx - scheduler.xy.scroll_width; //border delta, whole width + var left = [this.dx]; // left margins, initial left margin + var header = scheduler._els['dhx_cal_header'][0]; + header.style.width = (left[0]+summ)+'px'; + + scheduler._min_date_timeline = scheduler._min_date; + + var preserve = scheduler.config.preserve_scale_length; + var start = scheduler._min_date; + scheduler._process_ignores(start, this.x_size, this.x_unit, this.x_step, preserve); + + var size = this.x_size + (preserve ? scheduler._ignores_detected : 0); + if (size != this.x_size) + scheduler._max_date = scheduler.date.add(scheduler._min_date, size*this.x_step, this.x_unit); + + var realcount = size - scheduler._ignores_detected; + for (var k=0; k<size; k++){ + // dates calculation + this._trace_x[k]=new Date(start); + start = scheduler.date.add(start, this.x_step, this.x_unit); + + // position calculation + if (scheduler._ignores[k]){ + scheduler._cols[k]=0; + realcount++; + } else { + scheduler._cols[k]=Math.floor(summ/(realcount-k)); + } + + summ -= scheduler._cols[k]; + left[k+1] = left[k] + scheduler._cols[k]; + } + h.innerHTML = "<div></div>"; + + if(this.second_scale){ + // additional calculations + var mode = this.second_scale.x_unit; + var control_dates = [this._trace_x[0]]; // first control date + var second_cols = []; // each column width of the secondary row + var second_left = [this.dx, this.dx]; // left margins of the secondary row + var t_index = 0; // temp index + for (var l = 0; l < this._trace_x.length; l++) { + var date = this._trace_x[l]; + var res = is_new_interval(mode, date, control_dates[t_index]); + + if(res) { // new interval + ++t_index; // starting new interval + control_dates[t_index] = date; // updating control date as we moved to the new interval + second_left[t_index+1] = second_left[t_index]; + } + var t = t_index+1; + second_cols[t_index] = scheduler._cols[l] + (second_cols[t_index]||0); + second_left[t] += scheduler._cols[l]; + } + + h.innerHTML = "<div></div><div></div>"; + var top = h.firstChild; + top.style.height = (original_sh)+'px'; // actually bottom header takes 21px + var bottom = h.lastChild; + bottom.style.position = "relative"; + + for (var m = 0; m < control_dates.length; m++) { + var tdate = control_dates[m]; + var scs = scheduler.templates[this.name+"_second_scalex_class"](tdate); + var head=document.createElement("DIV"); head.className="dhx_scale_bar dhx_second_scale_bar"+((scs)?(" "+scs):""); + scheduler.set_xy(head,second_cols[m]-1,original_sh-3,second_left[m],0); //-1 for border, -3 = -2 padding -1 border bottom + head.innerHTML = scheduler.templates[this.name+"_second_scale_date"](tdate); + top.appendChild(head); + } + } + + scheduler.xy.scale_height = original_sh; // fix for _render_x_header which uses current scale_height value + h = h.lastChild; // h - original scale + for (var i=0; i<this._trace_x.length; i++){ + if (scheduler._ignores[i]) + continue; + + start = this._trace_x[i]; + scheduler._render_x_header(i, left[i], start, h); + var cs = scheduler.templates[this.name+"_scalex_class"](start); + if (cs) + h.lastChild.className += " "+cs; + } + scheduler.xy.scale_height = current_sh; // restoring current value + + var trace = this._trace_x; + h.onclick = function(e){ + var pos = locate_hcell(e); + if (pos) + scheduler.callEvent("onXScaleClick",[pos.x, trace[pos.x], e||event]); + }; + h.ondblclick = function(e){ + var pos = locate_hcell(e); + if (pos) + scheduler.callEvent("onXScaleDblClick",[pos.x, trace[pos.x], e||event]); + }; +} +function is_new_interval(mode, date, control_date){ // mode, date to check, control_date for which period should be checked + switch(mode) { + case "hour": + return ((date.getHours() != control_date.getHours()) || is_new_interval("day", date, control_date)); + case "day": + return !(date.getDate() == control_date.getDate() && date.getMonth() == control_date.getMonth() && date.getFullYear() == control_date.getFullYear()); + case "week": + return !(scheduler.date.getISOWeek(date) == scheduler.date.getISOWeek(control_date) && date.getFullYear() == control_date.getFullYear()); + case "month": + return !(date.getMonth() == control_date.getMonth() && date.getFullYear() == control_date.getFullYear()); + case "year": + return !(date.getFullYear() == control_date.getFullYear()); + default: + return false; // same interval + } +} +function set_full_view(mode){ + if (mode){ + scheduler.set_sizes(); + scheduler._init_matrix_tooltip(); + + //we need to have day-rounded scales for navigation + //in same time, during rendering scales may be shifted + var temp = scheduler._min_date; + x_scale.call(this,scheduler._els["dhx_cal_header"][0]); + y_scale.call(this,scheduler._els["dhx_cal_data"][0]); + scheduler._min_date = temp; + scheduler._els["dhx_cal_date"][0].innerHTML=scheduler.templates[this.name+"_date"](scheduler._min_date, scheduler._max_date); + if (scheduler._mark_now) { + scheduler._mark_now(); + } + } + + // hide tooltip if it is displayed + hideToolTip(); +} + + +function hideToolTip(){ + if (scheduler._tooltip){ + scheduler._tooltip.style.display = "none"; + scheduler._tooltip.date = ""; + } +} +function showToolTip(obj,pos,offset){ + if (obj.render != "cell") return; + var mark = pos.x+"_"+pos.y; + var evs = obj._matrix[pos.y][pos.x]; + + if (!evs) return hideToolTip(); + + evs.sort(function(a,b){ return a.start_date>b.start_date?1:-1; }); + + if (scheduler._tooltip){ + if (scheduler._tooltip.date == mark) return; + scheduler._tooltip.innerHTML=""; + } else { + var t = scheduler._tooltip = document.createElement("DIV"); + t.className = "dhx_year_tooltip"; + document.body.appendChild(t); + t.onclick = scheduler._click.dhx_cal_data; + } + + var html = ""; + + for (var i=0; i<evs.length; i++){ + var bg_color = (evs[i].color?("background-color:"+evs[i].color+";"):""); + var color = (evs[i].textColor?("color:"+evs[i].textColor+";"):""); + html+="<div class='dhx_tooltip_line' event_id='"+evs[i].id+"' style='"+bg_color+""+color+"'>"; + html+="<div class='dhx_tooltip_date'>"+(evs[i]._timed?scheduler.templates.event_date(evs[i].start_date):"")+"</div>"; + html+="<div class='dhx_event_icon icon_details'> </div>"; + html+=scheduler.templates[obj.name+"_tooltip"](evs[i].start_date, evs[i].end_date,evs[i])+"</div>"; + } + + scheduler._tooltip.style.display=""; + scheduler._tooltip.style.top = "0px"; + + if (document.body.offsetWidth-offset.left-scheduler._tooltip.offsetWidth < 0) + scheduler._tooltip.style.left = offset.left-scheduler._tooltip.offsetWidth+"px"; + else + scheduler._tooltip.style.left = offset.left+pos.src.offsetWidth+"px"; + + scheduler._tooltip.date = mark; + scheduler._tooltip.innerHTML = html; + + if (document.body.offsetHeight-offset.top-scheduler._tooltip.offsetHeight < 0) + scheduler._tooltip.style.top= offset.top-scheduler._tooltip.offsetHeight+pos.src.offsetHeight+"px"; + else + scheduler._tooltip.style.top= offset.top+"px"; +} + +scheduler._matrix_tooltip_handler = function(e){ + var obj = scheduler.matrix[scheduler._mode]; + if (!obj || obj.render != "cell") + return; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + var e = e || event; + var src = e.target||e.srcElement; + if (pos) + return showToolTip(obj,pos,getOffset(pos.src)); + } + hideToolTip(); +}; +scheduler._init_matrix_tooltip = function() { + scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._matrix_tooltip_handler); + dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._matrix_tooltip_handler); +}; + +scheduler._renderMatrix = function(mode, refresh) { + if (!refresh) + scheduler._els['dhx_cal_data'][0].scrollTop=0; + + scheduler._min_date = scheduler.date[this.name+"_start"](scheduler._date); + scheduler._max_date = scheduler.date.add(scheduler._min_date, this.x_size*this.x_step, this.x_unit); + scheduler._table_view = true; + if (this.second_scale) { + if (mode && !this._header_resized) { + this._header_resized = scheduler.xy.scale_height; + scheduler.xy.scale_height *= 2; + scheduler._els['dhx_cal_header'][0].className += " dhx_second_cal_header"; + } + if (!mode && this._header_resized) { + scheduler.xy.scale_height /= 2; + this._header_resized = false; + var header = scheduler._els['dhx_cal_header'][0]; + header.className = header.className.replace(/ dhx_second_cal_header/gi,""); + } + } + set_full_view.call(this,mode); +}; + +function html_index(el) { + var p = el.parentNode.childNodes; + for (var i=0; i < p.length; i++) + if (p[i] == el) return i; + return -1; +} +function locate_hcell(e){ + e = e||event; + var trg = e.target?e.target:e.srcElement; + while (trg && trg.tagName != "DIV") + trg=trg.parentNode; + if (trg && trg.tagName == "DIV"){ + var cs = trg.className.split(" ")[0]; + if (cs == "dhx_scale_bar") + return { x:html_index(trg), y:-1, src:trg, scale:true }; + } +} +scheduler._locate_cell_timeline = function(e){ + e = e||event; + var trg = e.target?e.target:e.srcElement; + + var res = {}; + var view = scheduler.matrix[scheduler._mode]; + var pos = scheduler.getActionData(e); + + for (var xind = 0; xind < view._trace_x.length-1; xind++) { + // | 8:00, 8:30 | 8:15 should be checked against 8:30 + // clicking at the most left part of the cell, say 8:30 should create event in that cell, not previous one + if (+pos.date < view._trace_x[xind+1]) + break; + } + + res.x = xind; + res.y = view.order[pos.section]; + var diff = scheduler._isRender('cell') ? 1 : 0; + res.src = view._scales[pos.section] ? view._scales[pos.section].getElementsByTagName('td')[xind+diff] : null; + + var isScale = false; + while (res.x === 0 && trg.className != "dhx_cal_data" && trg.parentNode) { + if (trg.className.split(" ")[0] == "dhx_matrix_scell") { + isScale = true; + break; + } else { + trg = trg.parentNode; + } + } + if (isScale) { // Y scale + res.x = -1; + res.src = trg; + res.scale = true; + } + + return res; +}; + +var old_click = scheduler._click.dhx_cal_data; +scheduler._click.dhx_marked_timespan = scheduler._click.dhx_cal_data = function(e){ + var ret = old_click.apply(this,arguments); + var obj = scheduler.matrix[scheduler._mode]; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + if (pos){ + if (pos.scale) + scheduler.callEvent("onYScaleClick",[pos.y, obj.y_unit[pos.y], e||event]); + else + scheduler.callEvent("onCellClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]); + } + } + return ret; +}; + +scheduler.dblclick_dhx_matrix_cell = function(e){ + var obj = scheduler.matrix[scheduler._mode]; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + if (pos){ + if (pos.scale) + scheduler.callEvent("onYScaleDblClick",[pos.y, obj.y_unit[pos.y], e||event]); + else + scheduler.callEvent("onCellDblClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]); + } + } +}; + +var old_dblclick_marked_timespan = scheduler.dblclick_dhx_marked_timespan || function(){}; +scheduler.dblclick_dhx_marked_timespan = function(e){ + var obj = scheduler.matrix[scheduler._mode]; + if (obj) + return scheduler.dblclick_dhx_matrix_cell(e); + else + return old_dblclick_marked_timespan.apply(this,arguments); +}; + +scheduler.dblclick_dhx_matrix_scell = function(e){ + return scheduler.dblclick_dhx_matrix_cell(e); +}; + +scheduler._isRender = function(mode){ + return (scheduler.matrix[scheduler._mode] && scheduler.matrix[scheduler._mode].render == mode); +}; + +scheduler.attachEvent("onCellDblClick", function (x, y, a, b, event){ + if (this.config.readonly|| (event.type == "dblclick" && !this.config.dblclick_create)) return; + + var obj = scheduler.matrix[scheduler._mode]; + var event_options = {}; + event_options.start_date = obj._trace_x[x]; + event_options.end_date = (obj._trace_x[x+1]) ? obj._trace_x[x+1] : scheduler.date.add(obj._trace_x[x], obj.x_step, obj.x_unit); + + if (obj._start_correction) + event_options.start_date = new Date(event_options.start_date*1 + obj._start_correction); + if (obj._end_correction) + event_options.end_date = new Date(event_options.end_date - obj._end_correction); + + event_options[obj.y_property] = obj.y_unit[y].key; + scheduler.addEventNow(event_options, null, event); +}); + +scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){ + return !scheduler._isRender("cell"); +}); +scheduler.attachEvent("onEventChanged", function(id, ev) { + ev._timed = this.isOneDayEvent(ev); +}); +var old_render_marked_timespan = scheduler._render_marked_timespan; +scheduler._render_marked_timespan = function(options, area, unit_id, min_date, max_date) { + if (!scheduler.config.display_marked_timespans) + return []; + + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + if (scheduler._isRender('cell')) + return; + + var view_opts = scheduler._lame_copy({}, scheduler.matrix[scheduler._mode]); + //timespans must always use actual position, not rounded + view_opts.round_position = false; + var blocks = []; + + var units = []; + var areas = []; + var section = options.sections ? (options.sections.units || options.sections.timeline) : null; + if (!unit_id) { // should draw for every unit... + var order = view_opts.order; + if (section) { // ...or for only section if mentioned in configuration of timespan + if (order.hasOwnProperty(section)) { + units.push(section); + areas.push(view_opts._scales[section]); + } + }else{ + for (var key in order) { + if (order.hasOwnProperty(key)) { + units.push(key); + areas.push(view_opts._scales[key]); + } + } + } + } else { + areas = [area]; + units = [unit_id]; + } + + var min_date = min_date ? new Date(min_date) : scheduler._min_date; + var max_date = max_date ? new Date(max_date) : scheduler._max_date; + var dates = []; + + if (options.days > 6) { + var specific_date = new Date(options.days); + if (scheduler.date.date_part(new Date(min_date)) <= +specific_date && +max_date >= +specific_date) + dates.push(specific_date); + } else { + dates.push.apply(dates, scheduler._get_dates_by_index(options.days)); + } + + var zones = options.zones; + var css_classes = scheduler._get_css_classes_by_config(options); + + for (var j=0; j<units.length; j++) { + area = areas[j]; + unit_id = units[j]; + + for (var i=0; i<dates.length; i++) { + var date = dates[i]; + for (var k=0; k<zones.length; k += 2) { + var zone_start = zones[k]; + var zone_end = zones[k+1]; + var start_date = new Date(+date + zone_start*60*1000); + var end_date = new Date(+date + zone_end*60*1000); + + if (!(min_date < end_date && max_date > start_date)) + continue; + + var block = scheduler._get_block_by_config(options); + block.className = css_classes; + + var start_pos = _getX({start_date: start_date}, false, view_opts)-1; + var end_pos = _getX({start_date: end_date}, false, view_opts)-1; + var width = Math.max(1, end_pos - start_pos - 1); + var height = view_opts._section_height[unit_id]-1; + + block.style.cssText = "height: "+height+"px; left: "+start_pos+"px; width: "+width+"px; top: 0;"; + + area.insertBefore(block, area.firstChild); + blocks.push(block); + } + } + } + + return blocks; + + } else { + return old_render_marked_timespan.apply(scheduler, [options, area, unit_id]); + } +}; + +var old_append_mark_now = scheduler._append_mark_now; +scheduler._append_mark_now = function(day_index, now) { + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + var n_date = scheduler._currentDate(); + var zone_start = scheduler._get_zone_minutes(n_date); + var options = { + days: +scheduler.date.date_part(n_date), + zones: [zone_start, zone_start+1], + css: "dhx_matrix_now_time", + type: "dhx_now_time" + }; + return scheduler._render_marked_timespan(options); + } else { + return old_append_mark_now.apply(scheduler, [day_index, now]); + } +}; + +scheduler.attachEvent("onScaleAdd", function(scale, unit_key) { + var timespans = scheduler._marked_timespans; + + if (timespans && scheduler.matrix && scheduler.matrix[scheduler._mode]) { + var mode = scheduler._mode; + + var min_date = scheduler._min_date; + var max_date = scheduler._max_date; + var global_data = timespans["global"]; + + for (var t_date = scheduler.date.date_part(new Date(min_date)); t_date < max_date; t_date = scheduler.date.add(t_date, 1, "day")) { + var day_value = +t_date; + var day_index = t_date.getDay(); + var r_configs = []; + + var day_types = global_data[day_value]||global_data[day_index]; + r_configs.push.apply(r_configs, scheduler._get_configs_to_render(day_types)); + + if (timespans[mode] && timespans[mode][unit_key]) { + var z_config = []; + var unit_types = scheduler._get_types_to_render(timespans[mode][unit_key][day_index], timespans[mode][unit_key][day_value]); + z_config.push.apply(z_config, scheduler._get_configs_to_render(unit_types)); + if(z_config.length) + r_configs = z_config; + } + + for (var i=0; i<r_configs.length; i++) { + var config = r_configs[i]; + var day = config.days; + if (day < 7) { + day = day_value; + //specify min/max timespan dates, otherwise it can be rendered multiple times in some configurations + scheduler._render_marked_timespan(config, scale, unit_key, t_date, scheduler.date.add(t_date, 1, "day")); + day = day_index; + } else { + scheduler._render_marked_timespan(config, scale, unit_key, t_date, scheduler.date.add(t_date, 1, "day")); + } + } + } + } +}); + +scheduler._resolve_timeline_section = function(view, pos){ + var yind = 0; + var summ = 0; + for (yind; yind < this._colsS.heights.length; yind++) { + summ += this._colsS.heights[yind]; + if (summ > pos.y) + break; + } + + if(!view.y_unit[yind]) { + yind=view.y_unit.length-1; + } + if(this._drag_event && !this._drag_event._orig_section){ + this._drag_event._orig_section = view.y_unit[yind].key; + } + + pos.fields = {}; + if (yind >= 0 && view.y_unit[yind]) { + pos.section = pos.fields[view.y_property] = view.y_unit[yind].key; + } +}; +scheduler._update_timeline_section = function(action){ + var view = action.view, + event = action.event, + pos = action.pos; + + if (event) { + if(event[view.y_property] != pos.section){ + var line_height = this._get_timeline_event_height(event, view); + event._sorder = this._get_dnd_order(event._sorder, line_height, view._section_height[pos.section]); + } + event[view.y_property] = pos.section; + } +}; +scheduler._get_date_index=function(config, date) { + var index = 0; + var trace_x = config._trace_x; + while (index < trace_x.length-1 && +date >= +trace_x[index+1]) { + index++; + } + return index; +}; + +scheduler.attachEvent("onBeforeTodayDisplayed", function() { + for(var i in scheduler.matrix){ + var obj = scheduler.matrix[i]; + obj.x_start = obj._original_x_start; + } + return true; +}); + +scheduler.attachEvent("onOptionsLoad",function(){ + for(var i in scheduler.matrix){ + var obj = scheduler.matrix[i]; + + obj.order = {}; + scheduler.callEvent('onOptionsLoadStart', []); + for(var i=0; i<obj.y_unit.length;i++) + obj.order[obj.y_unit[i].key]=i; + scheduler.callEvent('onOptionsLoadFinal', []); + if (scheduler._date && obj.name == scheduler._mode) + scheduler.setCurrentView(scheduler._date, scheduler._mode); + } +}); + +scheduler.attachEvent("onSchedulerResize",function(){ + if (scheduler.matrix[this._mode]){ + var obj = scheduler.matrix[this._mode]; + scheduler._renderMatrix.call(obj, true, true); + return false; + } + return true; +}); + +scheduler.attachEvent("onBeforeDrag",function(id, drag_mode, e){ + if(drag_mode == 'resize'){ + var trg = e.target || e.srcElement; + if((trg.className||"").indexOf("dhx_event_resize_end") < 0){ + scheduler._drag_from_start = true; + }else{ + scheduler._drag_from_start = false; + } + } + + return true; +}); + +}; +scheduler._temp_matrix_scope(); diff --git a/codebase/sources/ext/dhtmlxscheduler_timeline.js.map b/codebase/sources/ext/dhtmlxscheduler_timeline.js.map new file mode 100644 index 0000000..62bc255 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_timeline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_timeline.js.map","sources":["dhtmlxscheduler_timeline.js"],"names":["scheduler","_temp_matrix_scope","trace_events","evs","get_visible_events","matrix","i","this","y_unit","length","y","order","y_property","x","_trace_x","start_date","end_date","push","_getX","ev","isEndPoint","config","step","_step","round_position","column_offset","date","valueOf","_max_date","delta","_min_date_timeline","index","_get_date_index","_ignores","_cols","column_date","add","_mode","x_step","x_unit","first_hour","last_hour","_start_correction","Math","round","get_rounded_date","isEndDate","rounded_date","Date","get_events_html","html","render","sort","a","b","id","stack","evs_length","j","_inner","ev_start_date","apply","stack_ev","splice","sorderSet","p","t_ev","_sorder","h","_is_sorder","t","_max_sorder","w","max_count","_count","m","v","render_timeline_event","call","y_scale","d","_load_mode","_load","tevs","tev","tev_section","show_unassigned","key","hasOwnProperty","clone","_lame_copy","summ","realcount","_ignores_detected","_end_correction","_summ","heights","_colsS","_events_height","_section_height","stats","_logic","_merge","height","dy","section_autoheight","offsetHeight","max","floor","tr_className","style_height","style_width","dx","td_className","templates","name","label","td_content","summ_width","table_className","events_html","fit_events","rendered_height","_matrix","innerHTML","_rendered","divs","_obj","getElementsByTagName","getAttribute","_scales","firstChild","rows","unit_key","scale","_isRender","childNodes","callEvent","x_scale","current_sh","xy","scale_height","original_sh","_header_resized","_x","scroll_width","left","header","_els","style","width","_min_date","preserve","preserve_scale_length","start","_process_ignores","x_size","size","k","second_scale","mode","control_dates","second_cols","second_left","t_index","l","res","is_new_interval","top","bottom","lastChild","position","tdate","scs","head","document","createElement","className","set_xy","appendChild","_render_x_header","cs","trace","onclick","e","pos","locate_hcell","event","ondblclick","control_date","getHours","getDate","getMonth","getFullYear","getISOWeek","set_full_view","set_sizes","_init_matrix_tooltip","temp","_mark_now","hideToolTip","_tooltip","display","showToolTip","obj","offset","mark","body","_click","dhx_cal_data","bg_color","color","textColor","_timed","event_date","offsetWidth","src","html_index","el","parentNode","trg","target","srcElement","tagName","split","c","createTimelineView","_skin_init","y_step","x_start","y_start","y_size","event_dy","bar_height","event_min_dy","resize_events","render_name","timeline","checkEvent","_original_x_start","old","render_data","arguments","clear_event","_renderMatrix","ar","section_id","section_label","text","datea","dateb","getDay","date_part","getMinutes","day_date","week_date","date_to_str","x_date","hour_date","resulting_date","x_length","converted_step","total_steps","steps_offset","func","day_start","temp_date","_drag_event","_drag_id","getEvent","_dhx_changed","ratio","column_width","xind","edge","getState","drag_mode","force_redraw","custom","timestamp_diff","_drag_mode","drag_event","_move_delta","preserve_length","_get_real_event_length","_event_length","current_back_shift","_get_fictional_event_length","_drag_from_start","resize_from_start","_resize_from_start","undefined","_resolve_timeline_section","section","_update_timeline_section","view","time_step","shift","_get_timeline_event_height","event_height","_get_timeline_event_y","sorder","cascade_event_display","cascade_event_margin","attach","x_end","hb","section_height","event_class","event_bar_text","_text_style","drag_resize","readonly","dhx_event_resize","ind","parent","cells","_matrix_tooltip_handler","_locate_cell_timeline","getOffset","_detachDomEvent","dhtmlxEvent","refresh","scrollTop","_date","_table_view","replace","getActionData","diff","isScale","old_click","dhx_marked_timespan","ret","dblclick_dhx_matrix_cell","old_dblclick_marked_timespan","dblclick_dhx_marked_timespan","dblclick_dhx_matrix_scell","attachEvent","type","dblclick_create","event_options","addEventNow","isOneDayEvent","old_render_marked_timespan","_render_marked_timespan","options","area","unit_id","min_date","max_date","display_marked_timespans","view_opts","blocks","units","areas","sections","dates","days","specific_date","_get_dates_by_index","zones","css_classes","_get_css_classes_by_config","zone_start","zone_end","block","_get_block_by_config","start_pos","end_pos","cssText","insertBefore","old_append_mark_now","_append_mark_now","day_index","now","n_date","_currentDate","_get_zone_minutes","css","timespans","_marked_timespans","global_data","t_date","day_value","r_configs","day_types","_get_configs_to_render","z_config","unit_types","_get_types_to_render","day","yind","_orig_section","fields","action","line_height","_get_dnd_order","trace_x","setCurrentView","indexOf"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_tooltip.js b/codebase/sources/ext/dhtmlxscheduler_tooltip.js new file mode 100644 index 0000000..1dbad28 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_tooltip.js @@ -0,0 +1,223 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +window.dhtmlXTooltip = scheduler.dhtmlXTooltip = window.dhtmlxTooltip = {}; + +dhtmlXTooltip.config = { + className: 'dhtmlXTooltip tooltip', + timeout_to_display: 50, + timeout_to_hide: 50, + delta_x: 15, + delta_y: -20 +}; + +dhtmlXTooltip.tooltip = document.createElement('div'); +dhtmlXTooltip.tooltip.className = dhtmlXTooltip.config.className; + +dhtmlXTooltip.show = function(event, text) { //browser event, text to display + if (scheduler.config.touch && !scheduler.config.touch_tooltip) return; + + var dhxTooltip = dhtmlXTooltip; + var tooltip_div = this.tooltip; + var tooltip_div_style = tooltip_div.style; + dhxTooltip.tooltip.className = dhxTooltip.config.className; + var pos = this.position(event); + + var target = event.target || event.srcElement; + // if we are over tooltip -- do nothing, just return (so tooltip won't move) + if (this.isTooltip(target)) { + return; + } + + var actual_x = pos.x + (dhxTooltip.config.delta_x || 0); + var actual_y = pos.y - (dhxTooltip.config.delta_y || 0); + + tooltip_div_style.visibility = "hidden"; + + if (tooltip_div_style.removeAttribute) { + tooltip_div_style.removeAttribute("right"); + tooltip_div_style.removeAttribute("bottom"); + } else { + tooltip_div_style.removeProperty("right"); + tooltip_div_style.removeProperty("bottom"); + } + + tooltip_div_style.left = "0"; + tooltip_div_style.top = "0"; + + this.tooltip.innerHTML = text; + document.body.appendChild(this.tooltip); + + var tooltip_width = this.tooltip.offsetWidth; + var tooltip_height = this.tooltip.offsetHeight; + + if ((document.body.offsetWidth - actual_x - tooltip_width) < 0) { // tooltip is out of the right page bound + if(tooltip_div_style.removeAttribute) + tooltip_div_style.removeAttribute("left"); + else + tooltip_div_style.removeProperty("left"); + tooltip_div_style.right = (document.body.offsetWidth - actual_x + 2 * (dhxTooltip.config.delta_x||0)) + "px"; + } else { + if (actual_x < 0) { + // tooltips is out of the left page bound + tooltip_div_style.left = (pos.x + Math.abs(dhxTooltip.config.delta_x||0)) + "px"; + } else { + // normal situation + tooltip_div_style.left = actual_x + "px"; + } + } + + if ((document.body.offsetHeight - actual_y - tooltip_height) < 0) { // tooltip is below bottom of the page + if(tooltip_div_style.removeAttribute) + tooltip_div_style.removeAttribute("top"); + else + tooltip_div_style.removeProperty("top"); + tooltip_div_style.bottom = (document.body.offsetHeight - actual_y - 2 * (dhxTooltip.config.delta_y||0)) + "px"; + } else { + if (actual_y < 0) { + // tooltip is higher then top of the page + tooltip_div_style.top = (pos.y + Math.abs(dhxTooltip.config.delta_y||0)) + "px"; + } else { + // normal situation + tooltip_div_style.top = actual_y + "px"; + } + } + + tooltip_div_style.visibility = "visible"; + this.tooltip.onmouseleave = function(e){ + /* + A rare but reported scenario, when tooltip appears at the edge of the scheduler (e.g. left part inside cal, right part - outside). + User moves mouse from the scheduler into the tooltip, and then from the tooltip to the page outside the calendar. + As a result - tooltip freezes and no longer reacts until mouse reenters the calendar. + */ + var tooltip = scheduler.dhtmlXTooltip; + + var node = e.relatedTarget; + while (node != scheduler._obj && node) { + node = node.parentNode; + } + + if(node != scheduler._obj) + tooltip.delay(tooltip.hide, tooltip, [], tooltip.config.timeout_to_hide); + }; + + scheduler.callEvent("onTooltipDisplayed", [this.tooltip, this.tooltip.event_id]); +}; +dhtmlXTooltip._clearTimeout = function(){ + if(this.tooltip._timeout_id) { + window.clearTimeout(this.tooltip._timeout_id); + } +}; + +dhtmlXTooltip.hide = function() { + if (this.tooltip.parentNode) { + var event_id = this.tooltip.event_id; + this.tooltip.event_id = null; + this.tooltip.onmouseleave = null; + this.tooltip.parentNode.removeChild(this.tooltip); + scheduler.callEvent("onAfterTooltip", [event_id]); + } + this._clearTimeout(); +}; +dhtmlXTooltip.delay = function(method, object, params, delay) { + this._clearTimeout(); + this.tooltip._timeout_id = setTimeout(function() { + var ret = method.apply(object, params); + method = object = params = null; + return ret; + }, delay || this.config.timeout_to_display); +}; + +dhtmlXTooltip.isTooltip = function(node) { + var res = false; + if (node.className.split(" ")[0] == "dhtmlXTooltip") { + //debugger; + } + while (node && !res) { + res = (node.className == this.tooltip.className); + node = node.parentNode; + } + return res; +}; + +dhtmlXTooltip.position = function(ev) { + ev = ev || window.event; + if (ev.pageX || ev.pageY) //FF, KHTML + return {x:ev.pageX, y:ev.pageY}; + //IE + var d = ((window._isIE) && (document.compatMode != "BackCompat")) ? document.documentElement : document.body; + return { + x:ev.clientX + d.scrollLeft - d.clientLeft, + y:ev.clientY + d.scrollTop - d.clientTop + }; +}; + +scheduler.attachEvent("onMouseMove", function(event_id, e) { // (scheduler event_id, browser event) + var ev = window.event || e; + var target = ev.target || ev.srcElement; + var dhxTooltip = dhtmlXTooltip; + + var is_tooltip = dhxTooltip.isTooltip(target); + var is_tooltip_target = (dhxTooltip.isTooltipTarget && dhxTooltip.isTooltipTarget(target)); + + // if we are over event or tooltip or custom target for tooltip + if (event_id || is_tooltip || is_tooltip_target) { + var text; + + if (event_id || dhxTooltip.tooltip.event_id) { + var event = scheduler.getEvent(event_id) || scheduler.getEvent(dhxTooltip.tooltip.event_id); + if (!event) + return; + + dhxTooltip.tooltip.event_id = event.id; + text = scheduler.templates.tooltip_text(event.start_date, event.end_date, event); + if (!text) + return dhxTooltip.hide(); + } + if (is_tooltip_target) { + text = ""; + } + + var evt; + if (_isIE) { + //make a copy of event, will be used in timed call + + evt = {'pageX':undefined, + 'pageY':undefined, + 'clientX':undefined, + 'clientY':undefined, + 'target':undefined, + 'srcElement':undefined + }; + for(var i in evt){ + evt[i] = ev[i]; + } + } + + if (!scheduler.callEvent("onBeforeTooltip", [event_id]) || !text) + return; + + dhxTooltip.delay(dhxTooltip.show, dhxTooltip, [(evt || ev), text]); // showing tooltip + } else { + dhxTooltip.delay(dhxTooltip.hide, dhxTooltip, [], dhxTooltip.config.timeout_to_hide); + } +}); +scheduler.attachEvent("onBeforeDrag", function() { + dhtmlXTooltip.hide(); + return true; +}); +scheduler.attachEvent("onEventDeleted", function() { + dhtmlXTooltip.hide(); + return true; +}); + +/* Could be redifined */ +scheduler.templates.tooltip_date_format = scheduler.date.date_to_str("%Y-%m-%d %H:%i"); + +scheduler.templates.tooltip_text = function(start, end, event) { + return "<b>Event:</b> " + event.text + "<br/><b>Start date:</b> " + scheduler.templates.tooltip_date_format(start) + "<br/><b>End date:</b> " + scheduler.templates.tooltip_date_format(end); +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map b/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map new file mode 100644 index 0000000..76751fa --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_tooltip.js.map","sources":["dhtmlxscheduler_tooltip.js"],"names":["window","dhtmlXTooltip","scheduler","dhtmlxTooltip","config","className","timeout_to_display","timeout_to_hide","delta_x","delta_y","tooltip","document","createElement","show","event","text","touch","touch_tooltip","dhxTooltip","tooltip_div","this","tooltip_div_style","style","pos","position","target","srcElement","isTooltip","actual_x","x","actual_y","y","visibility","removeAttribute","removeProperty","left","top","innerHTML","body","appendChild","tooltip_width","offsetWidth","tooltip_height","offsetHeight","right","Math","abs","bottom","onmouseleave","e","node","relatedTarget","_obj","parentNode","delay","hide","callEvent","event_id","_clearTimeout","_timeout_id","clearTimeout","removeChild","method","object","params","setTimeout","ret","apply","res","split","ev","pageX","pageY","d","compatMode","documentElement","clientX","scrollLeft","clientLeft","clientY","scrollTop","clientTop","attachEvent","is_tooltip","is_tooltip_target","isTooltipTarget","getEvent","id","templates","tooltip_text","start_date","end_date","evt","_isIE","undefined","i","tooltip_date_format","date","date_to_str","start","end"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_treetimeline.js b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js new file mode 100644 index 0000000..706e1bd --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js @@ -0,0 +1,313 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTimelineCreated", function (obj){ + + if(obj.render == "tree") { + obj.y_unit_original = obj.y_unit; + obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original); + + scheduler.attachEvent('onOptionsLoadStart', function(){ + obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original); + }); + + scheduler.form_blocks[obj.name]={ + render:function(sns) { + var _result = "<div class='dhx_section_timeline' style='overflow: hidden; height: "+sns.height+"px'></div>"; + return _result; + }, + set_value:function(node,value,ev,config){ + var options = scheduler._getArrayForSelect(scheduler.matrix[config.type].y_unit_original, config.type); + node.innerHTML = ''; + var temp_select = document.createElement('select'); + node.appendChild(temp_select); + + var select = node.getElementsByTagName('select')[0]; + + if (!select._dhx_onchange && config.onchange) { + select.onchange = config.onchange; + select._dhx_onchange = true; + } + + for (var i = 0; i < options.length; i++) { + var temp_option = document.createElement('option'); + temp_option.value = options[i].key; + if(temp_option.value == ev[scheduler.matrix[config.type].y_property]) + temp_option.selected = true; + temp_option.innerHTML = options[i].label; + select.appendChild(temp_option); + } + }, + get_value:function(node,ev,config){ + return node.firstChild.value; + }, + focus:function(node){ + } + }; + + + } +}); + +scheduler.attachEvent("onBeforeSectionRender", function (render_name, y_unit, timeline){ + var res = {}; + if(render_name == "tree"){ + var height; + // section 1 + var tr_className, style_height, td_className; + var div_expand; + // section 3 + var table_className; + if(y_unit.children) { + height = timeline.folder_dy||timeline.dy; + if(timeline.folder_dy && !timeline.section_autoheight) { + style_height = "height:"+timeline.folder_dy+"px;"; + } + tr_className = "dhx_row_folder"; + td_className = "dhx_matrix_scell folder"; + div_expand = "<div class='dhx_scell_expand'>"+((y_unit.open)?'-':'+')+"</div>"; + table_className = (timeline.folder_events_available)?"dhx_data_table folder_events":"dhx_data_table folder"; + } else { + height = timeline.dy; + tr_className = "dhx_row_item"; + td_className = "dhx_matrix_scell item"+(scheduler.templates[timeline.name+"_scaley_class"](y_unit.key, y_unit.label, y_unit) ? + " "+scheduler.templates[timeline.name+"_scaley_class"](y_unit.key, y_unit.label, y_unit) : ''); + div_expand = ''; + table_className = "dhx_data_table"; + } + var td_content = "<div class='dhx_scell_level"+y_unit.level+"'>"+div_expand+"<div class='dhx_scell_name'>"+(scheduler.templates[timeline.name+'_scale_label'](y_unit.key, y_unit.label, y_unit)||y_unit.label)+"</div></div>"; + + res = { + height: height, + style_height: style_height, + //section 1 + tr_className: tr_className, + td_className: td_className, + td_content: td_content, + //section 3 + table_className: table_className + }; + } + return res; +}); + +var section_id_before; // section id of the event before dragging (to bring it back if user drop's event on folder without folder_events_available) + +scheduler.attachEvent("onBeforeEventChanged", function(event_object, native_event, is_new) { + if (scheduler._isRender("tree")) { // if mode's render == tree + var section = scheduler.getSection(event_object[scheduler.matrix[scheduler._mode].y_property]); + if (section && typeof section.children != 'undefined' && !scheduler.matrix[scheduler._mode].folder_events_available) { // section itself could be not defined in case of new event (addEventNow) + if (!is_new) { //if old - move back + event_object[scheduler.matrix[scheduler._mode].y_property] = section_id_before; + } + return false; + } + } + return true; +}); + +scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){ + if(scheduler._isRender("tree")) { + var cell = scheduler._locate_cell_timeline(native_event_object); + var section_id; + if(cell) { + section_id = scheduler.matrix[scheduler._mode].y_unit[cell.y].key; + if(typeof scheduler.matrix[scheduler._mode].y_unit[cell.y].children != "undefined" && !scheduler.matrix[scheduler._mode].folder_events_available) { + return false; + } + } + + var ev = scheduler.getEvent(event_id); + section_id_before = section_id||ev[scheduler.matrix[scheduler._mode].y_property]; // either event id or section_id will be available + } + return true; +}); + +scheduler._getArrayToDisplay = function(array){ // function to flatten out hierarhical array, used for tree view + var result = []; + var fillResultArray = function(array, lvl){ + var level = lvl||0; + for(var i=0; i<array.length; i++) { + array[i].level = level; + if(typeof array[i].children != "undefined" && typeof array[i].key == "undefined") + array[i].key=scheduler.uid(); + result.push(array[i]); + if(array[i].open && array[i].children) { + fillResultArray(array[i].children, level+1); + } + } + }; + fillResultArray(array); + return result; +}; + + +scheduler._getArrayForSelect = function(array, mode){ // function to flatten out hierarhical array, used for tree view + var result = []; + var fillResultArray = function(array){ + for(var i=0; i<array.length; i++) { + if(scheduler.matrix[mode].folder_events_available) { + result.push(array[i]); + } + else { + if(typeof array[i].children == "undefined") { + result.push(array[i]); + } + } + if(array[i].children) + fillResultArray(array[i].children, mode); + } + }; + fillResultArray(array); + return result; +}; + + +/* +scheduler._toggleFolderDisplay(4) -- toggle display of the section with key 4 (closed -> open) +scheduler._toggleFolderDisplay(4, true) -- open section with the key 4 (doesn't matter what status was before). False - close. +scheduler._toggleFolderDisplay(4, false, true) -- close ALL sections. Key is not used in such condition. +*/ +scheduler._toggleFolderDisplay = function(key, status, all_sections){ // used for tree view + var marked; + var toggleElement = function(key, array, status, all_sections) { + for (var i=0; i<array.length; i++) { + if((array[i].key == key || all_sections) && array[i].children) { + array[i].open = (typeof status != "undefined") ? status : !array[i].open; + marked = true; + if(!all_sections && marked) + break; + } + if(array[i].children) { + toggleElement(key,array[i].children, status, all_sections); + } + } + }; + var section = scheduler.getSection(key); + + if((typeof status == "undefined") && !all_sections){ + //toggle + status = !section.open; + } + if (scheduler.callEvent("onBeforeFolderToggle", [section, status, all_sections])) { + toggleElement(key,scheduler.matrix[scheduler._mode].y_unit_original, status, all_sections); + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + scheduler.callEvent("onAfterFolderToggle", [section, status, all_sections]); + } +}; + +scheduler.attachEvent("onCellClick", function (x, y, a, b, event){ + if(scheduler._isRender("tree")) { + if(!scheduler.matrix[scheduler._mode].folder_events_available) { + if(typeof scheduler.matrix[scheduler._mode].y_unit[y] != "undefined" && + typeof scheduler.matrix[scheduler._mode].y_unit[y].children != "undefined") { + scheduler._toggleFolderDisplay(scheduler.matrix[scheduler._mode].y_unit[y].key); + } + } + } +}); + +scheduler.attachEvent("onYScaleClick", function (index, value, event){ + if(scheduler._isRender("tree")) { + if(typeof value.children != "undefined") { + scheduler._toggleFolderDisplay(value.key); + } + } +}); + +scheduler.getSection = function(id){ + if(scheduler._isRender("tree")) { + var obj; + var findElement = function(key, array) { + for (var i=0; i<array.length; i++) { + if(array[i].key == key) + obj = array[i]; + if(array[i].children) + findElement(key,array[i].children); + } + }; + findElement(id, scheduler.matrix[scheduler._mode].y_unit_original); + return obj||null; + } +}; + +scheduler.deleteSection = function(id){ + if(scheduler._isRender("tree")) { + var result = false; + var deleteElement = function(key, array) { + for (var i=0; i<array.length; i++) { + if(array[i].key == key) { + array.splice(i,1); + result = true; + } + if(result) + break; + if(array[i].children) + deleteElement(key,array[i].children); + } + }; + deleteElement(id, scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + return result; + } +}; + +scheduler.deleteAllSections = function(){ + if(scheduler._isRender("tree")) { + scheduler.matrix[scheduler._mode].y_unit_original = []; + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + } +}; + +scheduler.addSection = function(obj, parent_id){ + if(scheduler._isRender("tree")) { + var result = false; + var addElement = function(obj, parent_key, array) { + if(!parent_id) { + array.push(obj); + result = true; + } + else { + for (var i=0; i<array.length; i++) { + if(array[i].key == parent_key && typeof array[i].children != "undefined") { + array[i].children.push(obj); + result = true; + } + if(result) + break; + if(array[i].children) + addElement(obj,parent_key,array[i].children); + } + } + }; + addElement(obj, parent_id, scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + return result; + } +}; + + +scheduler.openAllSections = function() { + if(scheduler._isRender("tree")) + scheduler._toggleFolderDisplay(1, true, true); +}; +scheduler.closeAllSections = function() { + if(scheduler._isRender("tree")) + scheduler._toggleFolderDisplay(1, false, true); +}; +scheduler.openSection = function(section_id){ + if(scheduler._isRender("tree")) + scheduler._toggleFolderDisplay(section_id, true); +}; +scheduler.closeSection = function(section_id){ + if(scheduler._isRender("tree")) + scheduler._toggleFolderDisplay(section_id, false); +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map new file mode 100644 index 0000000..fa99384 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_treetimeline.js.map","sources":["dhtmlxscheduler_treetimeline.js"],"names":["scheduler","attachEvent","obj","render","y_unit_original","y_unit","_getArrayToDisplay","form_blocks","name","sns","_result","height","set_value","node","value","ev","config","options","_getArrayForSelect","matrix","type","innerHTML","temp_select","document","createElement","appendChild","select","getElementsByTagName","_dhx_onchange","onchange","i","length","temp_option","key","y_property","selected","label","get_value","firstChild","focus","render_name","timeline","res","tr_className","style_height","td_className","div_expand","table_className","children","folder_dy","dy","section_autoheight","templates","td_content","level","section_id_before","event_object","native_event","is_new","_isRender","section","getSection","_mode","folder_events_available","event_id","mode","native_event_object","section_id","cell","_locate_cell_timeline","y","getEvent","array","result","fillResultArray","lvl","uid","push","open","_toggleFolderDisplay","status","all_sections","marked","toggleElement","callEvent","x","index","id","findElement","deleteSection","deleteElement","splice","deleteAllSections","addSection","parent_id","addElement","parent_key","openAllSections","closeAllSections","openSection","closeSection"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_units.js b/codebase/sources/ext/dhtmlxscheduler_units.js new file mode 100644 index 0000000..c6a94d3 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_units.js @@ -0,0 +1,259 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler._props = {}; +scheduler.createUnitsView=function(name,property,list,size,step,skip_incorrect){ + if (typeof name == "object"){ + list = name.list; + property = name.property; + size = name.size||0; + step = name.step||1; + skip_incorrect = name.skip_incorrect; + name = name.name; + } + + scheduler._props[name]={map_to:property, options:list, step:step, position:0 }; + if(size>scheduler._props[name].options.length){ + scheduler._props[name]._original_size = size; + size = 0; + } + scheduler._props[name].size = size; + scheduler._props[name].skip_incorrect = skip_incorrect||false; + + scheduler.date[name+"_start"]= scheduler.date.day_start; + scheduler.templates[name+"_date"] = function(date){ + return scheduler.templates.day_date(date); + }; + + scheduler._get_unit_index = function(unit_view, date) { + var original_position = unit_view.position || 0; + var date_position = Math.floor((scheduler._correct_shift(+date, 1) - +scheduler._min_date) / (60 * 60 * 24 * 1000)); + return original_position + date_position; + }; + scheduler.templates[name + "_scale_text"] = function(id, label, option) { + if (option.css) { + return "<span class='" + option.css + "'>" + label + "</span>"; + } else { + return label; + } + }; + scheduler.templates[name+"_scale_date"] = function(date) { + var unit_view = scheduler._props[name]; + var list = unit_view.options; + if (!list.length) return ""; + var index = scheduler._get_unit_index(unit_view, date); + var option = list[index]; + return scheduler.templates[name + "_scale_text"](option.key, option.label, option); + }; + + scheduler.date["add_"+name]=function(date,inc){ return scheduler.date.add(date,inc,"day"); }; + scheduler.date["get_"+name+"_end"]=function(date){ + return scheduler.date.add(date,scheduler._props[name].size||scheduler._props[name].options.length,"day"); + }; + + scheduler.attachEvent("onOptionsLoad",function(){ + var pr = scheduler._props[name]; + var order = pr.order = {}; + var list = pr.options; + for(var i=0; i<list.length;i++) + order[list[i].key]=i; + if(pr._original_size && pr.size===0){ + pr.size = pr._original_size; + delete pr.original_size; + } + if(pr.size > list.length) { + pr._original_size = pr.size; + pr.size = 0; + } + else + pr.size = pr._original_size||pr.size; + if (scheduler._date && scheduler._mode == name) + scheduler.setCurrentView(scheduler._date, scheduler._mode); + }); + + scheduler["mouse_"+ name] = function(pos){ //mouse_coord handler + var pr = scheduler._props[this._mode]; + + if (pr){ + pos = this._week_indexes_from_pos(pos); + if(!this._drag_event) this._drag_event = {}; + + if (this._drag_id && this._drag_mode){ + this._drag_event._dhx_changed = true; + } + var unit_ind = Math.min(pos.x+pr.position,pr.options.length-1); + pos.section = (pr.options[unit_ind]||{}).key; + pos.x = 0; + + var ev = this.getEvent(this._drag_id); + this._update_unit_section({view:pr, event:ev, pos:pos}); + } + pos.force_redraw = true; + + return pos; + }; + + + + scheduler.callEvent("onOptionsLoad",[]); +}; + +scheduler._update_unit_section = function(action){ + var view = action.view, + event = action.event, + pos = action.pos; + if(event) { + event[view.map_to] = pos.section; + } +}; + +scheduler.scrollUnit=function(step){ + var pr = scheduler._props[this._mode]; + if (pr){ + pr.position=Math.min(Math.max(0,pr.position+step),pr.options.length-pr.size); + this.update_view(); + } +}; +(function(){ + var _removeIncorrectEvents = function(evs) { + var pr = scheduler._props[scheduler._mode]; + if(pr && pr.order && pr.skip_incorrect) { + var correct_events = []; + for(var i=0; i<evs.length; i++) { + if(typeof pr.order[evs[i][pr.map_to]] != "undefined") { + correct_events.push(evs[i]); + } + } + evs.splice(0,evs.length); + evs.push.apply(evs,correct_events); + } + return evs; + }; + var old_pre_render_events_table = scheduler._pre_render_events_table; + scheduler._pre_render_events_table=function(evs,hold) { + evs = _removeIncorrectEvents(evs); + return old_pre_render_events_table.apply(this, [evs, hold]); + }; + var old_pre_render_events_line = scheduler._pre_render_events_line; + scheduler._pre_render_events_line = function(evs,hold){ + evs = _removeIncorrectEvents(evs); + return old_pre_render_events_line.apply(this, [evs, hold]); + }; + var fix_und=function(pr,ev){ + if (pr && typeof pr.order[ev[pr.map_to]] == "undefined"){ + var s = scheduler; + var dx = 24*60*60*1000; + var ind = Math.floor((ev.end_date - s._min_date)/dx); + //ev.end_date = new Date(s.date.time_part(ev.end_date)*1000+s._min_date.valueOf()); + //ev.start_date = new Date(s.date.time_part(ev.start_date)*1000+s._min_date.valueOf()); + ev[pr.map_to] = pr.options[Math.min(ind+pr.position,pr.options.length-1)].key; + return true; + } + }; + var t = scheduler._reset_scale; + + var oldive = scheduler.is_visible_events; + scheduler.is_visible_events = function(e){ + var res = oldive.apply(this,arguments); + if (res){ + var pr = scheduler._props[this._mode]; + if (pr && pr.size){ + var val = pr.order[e[pr.map_to]]; + if (val < pr.position || val >= pr.size+pr.position ) + return false; + } + } + return res; + }; + scheduler._reset_scale = function(){ + var pr = scheduler._props[this._mode]; + var ret = t.apply(this,arguments); + if (pr){ + this._max_date=this.date.add(this._min_date,1,"day"); + + var d = this._els["dhx_cal_data"][0].childNodes; + for (var i=0; i < d.length; i++) + d[i].className = d[i].className.replace("_now",""); //clear now class + + if (pr.size && pr.size < pr.options.length){ + + var h = this._els["dhx_cal_header"][0]; + var arrow = document.createElement("DIV"); + if (pr.position){ + arrow.className = "dhx_cal_prev_button"; + arrow.style.cssText="left:1px;top:2px;position:absolute;"; + arrow.innerHTML = " "; + h.firstChild.appendChild(arrow); + arrow.onclick=function(){ + scheduler.scrollUnit(pr.step*-1); + }; + } + if (pr.position+pr.size<pr.options.length){ + arrow = document.createElement("DIV"); + arrow.className = "dhx_cal_next_button"; + arrow.style.cssText="left:auto; right:0px;top:2px;position:absolute;"; + arrow.innerHTML = " "; + h.lastChild.appendChild(arrow); + arrow.onclick=function(){ + scheduler.scrollUnit(pr.step); + }; + } + } + } + return ret; + + }; + var r = scheduler._get_event_sday; + scheduler._get_event_sday=function(ev){ + var pr = scheduler._props[this._mode]; + if (pr){ + fix_und(pr,ev); + return pr.order[ev[pr.map_to]]-pr.position; + } + return r.call(this,ev); + }; + var l = scheduler.locate_holder_day; + scheduler.locate_holder_day=function(a,b,ev){ + var pr = scheduler._props[this._mode]; + if (pr && ev) { + fix_und(pr,ev); + return pr.order[ev[pr.map_to]]*1+(b?1:0)-pr.position; + } + return l.apply(this,arguments); + }; + + var o = scheduler._time_order; + scheduler._time_order = function(evs){ + var pr = scheduler._props[this._mode]; + if (pr){ + evs.sort(function(a,b){ + return pr.order[a[pr.map_to]]>pr.order[b[pr.map_to]]?1:-1; + }); + } else + o.apply(this,arguments); + }; + scheduler.attachEvent("onEventAdded",function(id,ev){ + if (this._loading) return true; + for (var a in scheduler._props){ + var pr = scheduler._props[a]; + if (typeof ev[pr.map_to] == "undefined") + ev[pr.map_to] = pr.options[0].key; + } + return true; + }); + scheduler.attachEvent("onEventCreated",function(id,n_ev){ + var pr = scheduler._props[this._mode]; + if (pr && n_ev){ + var ev = this.getEvent(id); + var pos = this._mouse_coords(n_ev); + this._update_unit_section({view:pr, event:ev, pos:pos}); + fix_und(pr,ev); + this.event_updated(ev); + } + return true; + }); +})(); diff --git a/codebase/sources/ext/dhtmlxscheduler_units.js.map b/codebase/sources/ext/dhtmlxscheduler_units.js.map new file mode 100644 index 0000000..b53e25b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_units.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_units.js.map","sources":["dhtmlxscheduler_units.js"],"names":["scheduler","_props","createUnitsView","name","property","list","size","step","skip_incorrect","map_to","options","position","length","_original_size","date","day_start","templates","day_date","_get_unit_index","unit_view","original_position","date_position","Math","floor","_correct_shift","_min_date","id","label","option","css","index","key","inc","add","attachEvent","pr","order","i","original_size","_date","_mode","setCurrentView","pos","this","_week_indexes_from_pos","_drag_event","_drag_id","_drag_mode","_dhx_changed","unit_ind","min","x","section","ev","getEvent","_update_unit_section","view","event","force_redraw","callEvent","action","scrollUnit","max","update_view","_removeIncorrectEvents","evs","correct_events","push","splice","apply","old_pre_render_events_table","_pre_render_events_table","hold","old_pre_render_events_line","_pre_render_events_line","fix_und","s","dx","ind","end_date","t","_reset_scale","oldive","is_visible_events","e","res","arguments","val","ret","_max_date","d","_els","childNodes","className","replace","h","arrow","document","createElement","style","cssText","innerHTML","firstChild","appendChild","onclick","lastChild","r","_get_event_sday","call","l","locate_holder_day","a","b","o","_time_order","sort","_loading","n_ev","_mouse_coords","event_updated"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_url.js b/codebase/sources/ext/dhtmlxscheduler_url.js new file mode 100644 index 0000000..2a98978 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_url.js @@ -0,0 +1,37 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady",function(){ + var first = true; + var s2d = scheduler.date.str_to_date("%Y-%m-%d"); + var d2s = scheduler.date.date_to_str("%Y-%m-%d"); + scheduler.attachEvent("onBeforeViewChange",function(om,od,m,d){ + if (first){ + first = false; + var p={}; + var data=(document.location.hash||"").replace("#","").split(","); + for (var i=0; i < data.length; i++) { + var s = data[i].split("="); + if (s.length==2) + p[s[0]]=s[1]; + } + + if (p.date || p.mode){ + try{ + this.setCurrentView((p.date?s2d(p.date):null),(p.mode||null)); + } catch(e){ + //assuming that mode is not available anymore + this.setCurrentView((p.date?s2d(p.date):null),m); + } + return false; + } + } + var text = "#date="+d2s(d||od)+",mode="+(m||om); + document.location.hash = text; + return true; + }); +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_url.js.map b/codebase/sources/ext/dhtmlxscheduler_url.js.map new file mode 100644 index 0000000..6814ae0 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_url.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_url.js.map","sources":["dhtmlxscheduler_url.js"],"names":["scheduler","attachEvent","first","s2d","date","str_to_date","d2s","date_to_str","om","od","m","d","p","data","document","location","hash","replace","split","i","length","s","mode","this","setCurrentView","e","text"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WACtC,GAAIC,IAAQ,EACRC,EAAMH,UAAUI,KAAKC,YAAY,YACjCC,EAAMN,UAAUI,KAAKG,YAAY,WACrCP,WAAUC,YAAY,qBAAqB,SAASO,EAAGC,EAAGC,EAAEC,GACzD,GAAIT,EAAM,CACPA,GAAQ,CAGR,KAAK,GAFDU,MACAC,GAAMC,SAASC,SAASC,MAAM,IAAIC,QAAQ,IAAI,IAAIC,MAAM,KACnDC,EAAE,EAAGA,EAAIN,EAAKO,OAAQD,IAAK,CACnC,GAAIE,GAAIR,EAAKM,GAAGD,MAAM,IACR,IAAVG,EAAED,SACNR,EAAES,EAAE,IAAIA,EAAE,IAGX,GAAIT,EAAER,MAAQQ,EAAEU,KAAK,CACpB,IACGC,KAAKC,eAAgBZ,EAAER,KAAKD,EAAIS,EAAER,MAAM,KAAOQ,EAAEU,MAAM,MACzD,MAAMG,GAEPF,KAAKC,eAAgBZ,EAAER,KAAKD,EAAIS,EAAER,MAAM,KAAMM,GAE5C,OAAO,GAGb,GAAIgB,GAAO,SAASpB,EAAIK,GAAGF,GAAI,UAAUC,GAAGF,EAE5C;MADAM,UAASC,SAASC,KAAOU,GAClB"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_week_agenda.js b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js new file mode 100644 index 0000000..fad882e --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js @@ -0,0 +1,261 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler._wa = {}; +scheduler.xy.week_agenda_scale_height = 20; +scheduler.templates.week_agenda_event_text = function(start_date, end_date, event, date) { + return scheduler.templates.event_date(start_date) + " " + event.text; +}; +scheduler.date.week_agenda_start = scheduler.date.week_start; +scheduler.date.week_agenda_end = function(date) { + return scheduler.date.add(date, 7, "day"); +}; +scheduler.date.add_week_agenda = function(date, inc) { + return scheduler.date.add(date, inc * 7, "day"); +}; + +scheduler.attachEvent("onSchedulerReady", function() { + var t = scheduler.templates; + if (!t.week_agenda_date) + t.week_agenda_date = t.week_date; +}); + +(function() { + var scale_date_format = scheduler.date.date_to_str("%l, %F %d"); + scheduler.templates.week_agenda_scale_date = function(date) { + return scale_date_format(date); + }; +})(); + +scheduler.attachEvent("onTemplatesReady", function() { + + scheduler.attachEvent("onSchedulerResize", function() { + if (this._mode == "week_agenda") { + this.week_agenda_view(true); + return false; + } + return true; + }); + + var old = scheduler.render_data; + scheduler.render_data = function(evs) { + if (this._mode == "week_agenda") { + scheduler.week_agenda_view(true); + } else + return old.apply(this, arguments); + }; + + var getColumnSizes = function() { + // widths + scheduler._cols = []; + var twidth = parseInt(scheduler._els['dhx_cal_data'][0].style.width); + scheduler._cols.push(Math.floor(twidth / 2)); + scheduler._cols.push(twidth - scheduler._cols[0] - 1); // To add border between columns + + // heights + scheduler._colsS = { + 0: [], + 1: [] + }; + var theight = parseInt(scheduler._els['dhx_cal_data'][0].style.height); + for (var i = 0; i < 3; i++) { + scheduler._colsS[0].push(Math.floor(theight / (3 - scheduler._colsS[0].length))); + theight -= scheduler._colsS[0][i]; + } + scheduler._colsS[1].push(scheduler._colsS[0][0]); + scheduler._colsS[1].push(scheduler._colsS[0][1]); + // last two days + theight = scheduler._colsS[0][scheduler._colsS[0].length - 1]; + scheduler._colsS[1].push(Math.floor(theight / 2)); + scheduler._colsS[1].push(theight - scheduler._colsS[1][scheduler._colsS[1].length - 1]); + }; + var fillWeekAgendaTab = function() { + getColumnSizes(); + scheduler._els["dhx_cal_data"][0].innerHTML = ''; + scheduler._rendered = []; + var html = ''; + for (var i = 0; i < 2; i++) { + var width = scheduler._cols[i]; + var column_css = 'dhx_wa_column'; + if (i == 1) + column_css += ' dhx_wa_column_last'; + html += "<div class='" + column_css + "' style='width: " + width + "px;'>"; + for (var k = 0; k < scheduler._colsS[i].length; k++) { + var scale_height = scheduler.xy.week_agenda_scale_height - 2; + var height = scheduler._colsS[i][k] - scale_height - 2; + var day = Math.min(6, k * 2 + i); + html += "<div class='dhx_wa_day_cont'><div style='height:" + scale_height + "px; line-height:" + scale_height + "px;' class='dhx_wa_scale_bar'></div><div style='height:" + height + "px;' class='dhx_wa_day_data' day='" + day + "'></div></div>"; + } + html += "</div>"; + } + scheduler._els["dhx_cal_date"][0].innerHTML = scheduler.templates[scheduler._mode + "_date"](scheduler._min_date, scheduler._max_date, scheduler._mode); + scheduler._els["dhx_cal_data"][0].innerHTML = html; + var all_divs = scheduler._els["dhx_cal_data"][0].getElementsByTagName('div'); + var day_divs = []; + for (var i = 0; i < all_divs.length; i++) { + if (all_divs[i].className == 'dhx_wa_day_cont') + day_divs.push(all_divs[i]); + } + scheduler._wa._selected_divs = []; + var events = scheduler.get_visible_events(); // list of events to be displayed in current week + var tstart = scheduler.date.week_start(scheduler._date); + var tend = scheduler.date.add(tstart, 1, "day"); + for (var i = 0; i < 7; i++) { + day_divs[i]._date = tstart; + var scale_bar = day_divs[i].childNodes[0]; + var events_div = day_divs[i].childNodes[1]; + scale_bar.innerHTML = scheduler.templates.week_agenda_scale_date(tstart); + var evs = []; // events which will be displayed in the current day + for (var j = 0; j < events.length; j++) { + var tev = events[j]; + if (tev.start_date < tend && tev.end_date > tstart) + evs.push(tev); + } + evs.sort(function(a, b) { + if (a.start_date.valueOf() == b.start_date.valueOf()) + return a.id > b.id ? 1 : -1; + return a.start_date > b.start_date ? 1 : -1; + }); + for (var k = 0; k < evs.length; k++) { + var ev = evs[k]; + var ev_div = document.createElement('div'); + scheduler._rendered.push(ev_div); + var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + ev_div.className = 'dhx_wa_ev_body' + (ev_class ? (' ' + ev_class) : ''); + if (ev._text_style) + ev_div.style.cssText = ev._text_style; + if (ev.color) + ev_div.style.background = ev.color; + if (ev.textColor) + ev_div.style.color = ev.textColor; + if (scheduler._select_id && ev.id == scheduler._select_id && !(!scheduler.config.week_agenda_select && scheduler.config.week_agenda_select !== undefined)) { + ev_div.className += " dhx_cal_event_selected"; + scheduler._wa._selected_divs.push(ev_div); + } + var position = ""; + if (!ev._timed) { + position = "middle"; + if (ev.start_date.valueOf() >= tstart.valueOf() && ev.start_date.valueOf() <= tend.valueOf()) + position = "start"; + if (ev.end_date.valueOf() >= tstart.valueOf() && ev.end_date.valueOf() <= tend.valueOf()) + position = "end"; + } + ev_div.innerHTML = scheduler.templates.week_agenda_event_text(ev.start_date, ev.end_date, ev, tstart, position); + ev_div.setAttribute('event_id', ev.id); + events_div.appendChild(ev_div); + } + tstart = scheduler.date.add(tstart, 1, "day"); + tend = scheduler.date.add(tend, 1, "day"); + } + }; + scheduler.week_agenda_view = function(mode) { + scheduler._min_date = scheduler.date.week_start(scheduler._date); + scheduler._max_date = scheduler.date.add(scheduler._min_date, 1, "week"); + scheduler.set_sizes(); + if (mode) { // mode enabled + scheduler._table_view = scheduler._allow_dnd = true; + + // hiding default top border from dhx_cal_data + scheduler._wa._prev_data_border = scheduler._els['dhx_cal_data'][0].style.borderTop; + scheduler._els['dhx_cal_data'][0].style.borderTop = 0; + scheduler._els['dhx_cal_data'][0].style.overflowY = 'hidden'; + + // cleaning dhx_cal_date from the previous date + scheduler._els['dhx_cal_date'][0].innerHTML = ""; + + // 1 to make navline to be over data + scheduler._els['dhx_cal_data'][0].style.top = (parseInt(scheduler._els['dhx_cal_data'][0].style.top) - 20 - 1) + 'px'; + scheduler._els['dhx_cal_data'][0].style.height = (parseInt(scheduler._els['dhx_cal_data'][0].style.height) + 20 + 1) + 'px'; + + scheduler._els['dhx_cal_header'][0].style.display = 'none'; + fillWeekAgendaTab(); + } else { // leaving week_agenda mode + scheduler._table_view = scheduler._allow_dnd = false; + + // restoring default top border to dhx_cal_data + if (scheduler._wa._prev_data_border) + scheduler._els['dhx_cal_data'][0].style.borderTop = scheduler._wa._prev_data_border; + + scheduler._els['dhx_cal_data'][0].style.overflowY = 'auto'; + scheduler._els['dhx_cal_data'][0].style.top = (parseInt(scheduler._els['dhx_cal_data'][0].style.top) + 20) + 'px'; + scheduler._els['dhx_cal_data'][0].style.height = (parseInt(scheduler._els['dhx_cal_data'][0].style.height) - 20) + 'px'; + scheduler._els['dhx_cal_header'][0].style.display = 'block'; + } + }; + scheduler.mouse_week_agenda = function(pos) { + var native_event = pos.ev; + var src = native_event.srcElement || native_event.target; + var date; + while (src.parentNode) { + if (src._date) + date = src._date; + src = src.parentNode; + } + if (!date) + return pos; + pos.x = 0; + var diff = date.valueOf() - scheduler._min_date.valueOf(); + pos.y = Math.ceil(( diff / (1000 * 60) ) / this.config.time_step); + if (this._drag_mode == 'move') { + var event_div; + this._drag_event._dhx_changed = true; + this._select_id = this._drag_id; + for (var i = 0; i < scheduler._rendered.length; i++) { + if (scheduler._drag_id == this._rendered[i].getAttribute('event_id')) + event_div = this._rendered[i]; + } + if (!scheduler._wa._dnd) { + var div = event_div.cloneNode(true); + this._wa._dnd = div; + div.className = event_div.className; + div.id = 'dhx_wa_dnd'; + div.className += ' dhx_wa_dnd'; + document.body.appendChild(div); + } + var dnd_div = document.getElementById('dhx_wa_dnd'); + dnd_div.style.top = ((native_event.pageY || native_event.clientY) + 20) + "px"; + dnd_div.style.left = ((native_event.pageX || native_event.clientX) + 20) + "px"; + } + return pos; + }; + scheduler.attachEvent('onBeforeEventChanged', function(event_object, native_event, is_new) { + if (this._mode == 'week_agenda') { + if (this._drag_mode == 'move') { + var dnd = document.getElementById('dhx_wa_dnd'); + dnd.parentNode.removeChild(dnd); + scheduler._wa._dnd = false; + } + } + return true; + }); + + scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + if (is_new_event && this._mode == 'week_agenda') + this._select_id = id; + return true; + }); + + scheduler._wa._selected_divs = []; + + scheduler.attachEvent("onClick", function(event_id, native_event_object) { + if (this._mode == 'week_agenda' && !(!scheduler.config.week_agenda_select && scheduler.config.week_agenda_select !== undefined)) { + if (scheduler._wa._selected_divs) { + for (var i = 0; i < this._wa._selected_divs.length; i++) { + var div = this._wa._selected_divs[i]; + div.className = div.className.replace(/ dhx_cal_event_selected/, ''); + } + } + this.for_rendered(event_id, function(event_div) { + event_div.className += " dhx_cal_event_selected"; + scheduler._wa._selected_divs.push(event_div); + }); + scheduler.select(event_id); + return false; + } + return true; + }); +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map new file mode 100644 index 0000000..696e0d2 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_week_agenda.js.map","sources":["dhtmlxscheduler_week_agenda.js"],"names":["scheduler","_wa","xy","week_agenda_scale_height","templates","week_agenda_event_text","start_date","end_date","event","event_date","text","date","week_agenda_start","week_start","week_agenda_end","add","add_week_agenda","inc","attachEvent","t","week_agenda_date","week_date","scale_date_format","date_to_str","week_agenda_scale_date","this","_mode","week_agenda_view","old","render_data","apply","arguments","getColumnSizes","_cols","twidth","parseInt","_els","style","width","push","Math","floor","_colsS",1,"theight","height","i","length","fillWeekAgendaTab","innerHTML","_rendered","html","column_css","k","scale_height","day","min","_min_date","_max_date","all_divs","getElementsByTagName","day_divs","className","_selected_divs","events","get_visible_events","tstart","_date","tend","scale_bar","childNodes","events_div","evs","j","tev","sort","a","b","valueOf","id","ev","ev_div","document","createElement","ev_class","event_class","_text_style","cssText","color","background","textColor","_select_id","config","week_agenda_select","undefined","position","_timed","setAttribute","appendChild","mode","set_sizes","_table_view","_allow_dnd","_prev_data_border","borderTop","overflowY","top","display","mouse_week_agenda","pos","native_event","src","srcElement","target","parentNode","x","diff","y","ceil","time_step","_drag_mode","event_div","_drag_event","_dhx_changed","_drag_id","getAttribute","_dnd","div","cloneNode","body","dnd_div","getElementById","pageY","clientY","left","pageX","clientX","dnd","removeChild","data","is_new_event","event_id","replace","for_rendered","select"],"mappings":"AAAAA,UAAUC,OACVD,UAAUE,GAAGC,yBAA2B,GACxCH,UAAUI,UAAUC,uBAAyB,SAASC,EAAYC,EAAUC,GAC3E,MAAOR,WAAUI,UAAUK,WAAWH,GAAc,IAAME,EAAME,MAEjEV,UAAUW,KAAKC,kBAAoBZ,UAAUW,KAAKE,WAClDb,UAAUW,KAAKG,gBAAkB,SAASH,GACzC,MAAOX,WAAUW,KAAKI,IAAIJ,EAAM,EAAG,QAEpCX,UAAUW,KAAKK,gBAAkB,SAASL,EAAMM,GAC/C,MAAOjB,WAAUW,KAAKI,IAAIJ,EAAY,EAANM,EAAS,QAG1CjB,UAAUkB,YAAY,mBAAoB,WACzC,GAAIC,GAAInB,UAAUI,SACbe,GAAEC,mBACND,EAAEC,iBAAmBD,EAAEE;GAGzB,WACC,GAAIC,GAAoBtB,UAAUW,KAAKY,YAAY,YACnDvB,WAAUI,UAAUoB,uBAAyB,SAASb,GACrD,MAAOW,GAAkBX,OAI3BX,UAAUkB,YAAY,mBAAoB,WAEzClB,UAAUkB,YAAY,oBAAqB,WAC1C,MAAkB,eAAdO,KAAKC,OACRD,KAAKE,kBAAiB,IACf,IAED,GAGR,IAAIC,GAAM5B,UAAU6B,WACpB7B,WAAU6B,YAAc,WACvB,MAAkB,eAAdJ,KAAKC,MAGDE,EAAIE,MAAML,KAAMM,eAFvB/B,WAAU2B,kBAAiB,GAK7B,IAAIK,GAAiB,WAEpBhC,UAAUiC,QACV,IAAIC,GAASC,SAASnC,UAAUoC,KAAmB,aAAE,GAAGC,MAAMC,MAC9DtC;UAAUiC,MAAMM,KAAKC,KAAKC,MAAMP,EAAS,IACzClC,UAAUiC,MAAMM,KAAKL,EAASlC,UAAUiC,MAAM,GAAK,GAGnDjC,UAAU0C,QACT,KACAC,KAGD,KAAK,GADDC,GAAUT,SAASnC,UAAUoC,KAAmB,aAAE,GAAGC,MAAMQ,QACtDC,EAAI,EAAO,EAAJA,EAAOA,IACtB9C,UAAU0C,OAAO,GAAGH,KAAKC,KAAKC,MAAMG,GAAW,EAAI5C,UAAU0C,OAAO,GAAGK,UACvEH,GAAW5C,UAAU0C,OAAO,GAAGI,EAEhC9C,WAAU0C,OAAO,GAAGH,KAAKvC,UAAU0C,OAAO,GAAG,IAC7C1C,UAAU0C,OAAO,GAAGH,KAAKvC,UAAU0C,OAAO,GAAG,IAE7CE,EAAU5C,UAAU0C,OAAO,GAAG1C,UAAU0C,OAAO,GAAGK,OAAS,GAC3D/C,UAAU0C,OAAO,GAAGH,KAAKC,KAAKC,MAAMG,EAAU,IAC9C5C,UAAU0C,OAAO,GAAGH,KAAKK,EAAU5C,UAAU0C,OAAO,GAAG1C,UAAU0C,OAAO,GAAGK,OAAS;EAEjFC,EAAoB,WACvBhB,IACAhC,UAAUoC,KAAmB,aAAE,GAAGa,UAAY,GAC9CjD,UAAUkD,YAEV,KAAK,GADDC,GAAO,GACFL,EAAI,EAAO,EAAJA,EAAOA,IAAK,CAC3B,GAAIR,GAAQtC,UAAUiC,MAAMa,GACxBM,EAAa,eACR,IAALN,IACHM,GAAc,uBACfD,GAAQ,eAAiBC,EAAa,mBAAqBd,EAAQ,OACnE,KAAK,GAAIe,GAAI,EAAGA,EAAIrD,UAAU0C,OAAOI,GAAGC,OAAQM,IAAK,CACpD,GAAIC,GAAetD,UAAUE,GAAGC,yBAA2B,EACvD0C,EAAS7C,UAAU0C,OAAOI,GAAGO,GAAKC,EAAe,EACjDC,EAAMf,KAAKgB,IAAI,EAAO,EAAJH,EAAQP,EAC9BK,IAAQ,mDAAqDG,EAAe,mBAAqBA,EAAe,0DAA4DT,EAAS,qCAAuCU,EAAM;CAEnOJ,GAAQ,SAETnD,UAAUoC,KAAmB,aAAE,GAAGa,UAAYjD,UAAUI,UAAUJ,UAAU0B,MAAQ,SAAS1B,UAAUyD,UAAWzD,UAAU0D,UAAW1D,UAAU0B,OACjJ1B,UAAUoC,KAAmB,aAAE,GAAGa,UAAYE,CAG9C,KAAK,GAFDQ,GAAW3D,UAAUoC,KAAmB,aAAE,GAAGwB,qBAAqB,OAClEC,KACKf,EAAI,EAAGA,EAAIa,EAASZ,OAAQD,IACP,mBAAzBa,EAASb,GAAGgB,WACfD,EAAStB,KAAKoB,EAASb,GAEzB9C,WAAUC,IAAI8D,iBAId,KAAK,GAHDC,GAAShE,UAAUiE,qBACnBC,EAASlE,UAAUW,KAAKE,WAAWb,UAAUmE,OAC7CC,EAAOpE,UAAUW,KAAKI,IAAImD,EAAQ,EAAG,OAChCpB,EAAI,EAAO,EAAJA,EAAOA,IAAK,CAC3Be,EAASf,GAAGqB,MAAQD,CACpB;GAAIG,GAAYR,EAASf,GAAGwB,WAAW,GACnCC,EAAaV,EAASf,GAAGwB,WAAW,EACxCD,GAAUpB,UAAYjD,UAAUI,UAAUoB,uBAAuB0C,EAEjE,KAAK,GADDM,MACKC,EAAI,EAAGA,EAAIT,EAAOjB,OAAQ0B,IAAK,CACvC,GAAIC,GAAMV,EAAOS,EACbC,GAAIpE,WAAa8D,GAAQM,EAAInE,SAAW2D,GAC3CM,EAAIjC,KAAKmC,GAEXF,EAAIG,KAAK,SAASC,EAAGC,GACpB,MAAID,GAAEtE,WAAWwE,WAAaD,EAAEvE,WAAWwE,UACnCF,EAAEG,GAAKF,EAAEE,GAAK,EAAI,GACnBH,EAAEtE,WAAauE,EAAEvE,WAAa,EAAI,IAE1C,KAAK,GAAI+C,GAAI,EAAGA,EAAImB,EAAIzB,OAAQM,IAAK,CACpC,GAAI2B,GAAKR,EAAInB,GACT4B,EAASC,SAASC,cAAc,MACpCnF,WAAUkD,UAAUX,KAAK0C,EACzB,IAAIG,GAAWpF,UAAUI,UAAUiF,YAAYL,EAAG1E,WAAY0E,EAAGzE,SAAUyE,EAC3EC,GAAOnB,UAAY,kBAAoBsB,EAAY,IAAMA,EAAY,IACjEJ,EAAGM,cACNL,EAAO5C,MAAMkD,QAAUP,EAAGM,aACvBN,EAAGQ,QACNP,EAAO5C,MAAMoD,WAAaT,EAAGQ,OAC1BR,EAAGU,YACNT,EAAO5C,MAAMmD,MAAQR,EAAGU,WACrB1F,UAAU2F,YAAcX,EAAGD,IAAM/E,UAAU2F,aAAiB3F,UAAU4F,OAAOC,oBAA8DC,SAAxC9F,UAAU4F,OAAOC,sBACvHZ,EAAOnB,WAAa,0BACpB9D,UAAUC,IAAI8D,eAAexB,KAAK0C,GAEnC;GAAIc,GAAW,EACVf,GAAGgB,SACPD,EAAW,SACPf,EAAG1E,WAAWwE,WAAaZ,EAAOY,WAAaE,EAAG1E,WAAWwE,WAAaV,EAAKU,YAClFiB,EAAW,SACRf,EAAGzE,SAASuE,WAAaZ,EAAOY,WAAaE,EAAGzE,SAASuE,WAAaV,EAAKU,YAC9EiB,EAAW,QAEbd,EAAOhC,UAAYjD,UAAUI,UAAUC,uBAAuB2E,EAAG1E,WAAY0E,EAAGzE,SAAUyE,EAAId,EAAQ6B,GACtGd,EAAOgB,aAAa,WAAYjB,EAAGD,IACnCR,EAAW2B,YAAYjB,GAExBf,EAASlE,UAAUW,KAAKI,IAAImD,EAAQ,EAAG,OACvCE,EAAOpE,UAAUW,KAAKI,IAAIqD,EAAM,EAAG,QAGrCpE,WAAU2B,iBAAmB,SAASwE,GACrCnG,UAAUyD,UAAYzD,UAAUW,KAAKE,WAAWb,UAAUmE,OAC1DnE,UAAU0D,UAAY1D,UAAUW,KAAKI,IAAIf,UAAUyD,UAAW,EAAG,QACjEzD,UAAUoG,YACND,GACHnG,UAAUqG,YAAcrG,UAAUsG,YAAa,EAG/CtG,UAAUC,IAAIsG,kBAAoBvG,UAAUoC,KAAmB,aAAE,GAAGC,MAAMmE,UAC1ExG,UAAUoC,KAAmB,aAAE,GAAGC,MAAMmE,UAAY,EACpDxG,UAAUoC,KAAmB,aAAE,GAAGC,MAAMoE,UAAY,SAGpDzG,UAAUoC,KAAmB,aAAE,GAAGa,UAAY,GAG9CjD,UAAUoC,KAAmB,aAAE,GAAGC,MAAMqE,IAAOvE,SAASnC,UAAUoC,KAAmB,aAAE,GAAGC,MAAMqE,KAAO,GAAK,EAAK,KACjH1G,UAAUoC,KAAmB,aAAE,GAAGC,MAAMQ,OAAUV,SAASnC,UAAUoC,KAAmB,aAAE,GAAGC,MAAMQ,QAAU,GAAK,EAAK,KAEvH7C,UAAUoC,KAAqB,eAAE,GAAGC,MAAMsE,QAAU,OACpD3D,MAEAhD,UAAUqG,YAAcrG,UAAUsG,YAAa,EAG3CtG,UAAUC,IAAIsG,oBACjBvG,UAAUoC,KAAmB,aAAE,GAAGC,MAAMmE,UAAYxG,UAAUC,IAAIsG,mBAEnEvG,UAAUoC,KAAmB,aAAE,GAAGC,MAAMoE,UAAY,OACpDzG,UAAUoC,KAAmB,aAAE,GAAGC,MAAMqE,IAAOvE,SAASnC,UAAUoC,KAAmB,aAAE,GAAGC,MAAMqE,KAAO,GAAM,KAC7G1G,UAAUoC,KAAmB,aAAE,GAAGC,MAAMQ,OAAUV,SAASnC,UAAUoC,KAAmB,aAAE,GAAGC,MAAMQ,QAAU,GAAM,KACnH7C,UAAUoC,KAAqB,eAAE,GAAGC,MAAMsE,QAAU;EAGtD3G,UAAU4G,kBAAoB,SAASC,GAItC,IAHA,GAEIlG,GAFAmG,EAAeD,EAAI7B,GACnB+B,EAAMD,EAAaE,YAAcF,EAAaG,OAE3CF,EAAIG,YACNH,EAAI5C,QACPxD,EAAOoG,EAAI5C,OACZ4C,EAAMA,EAAIG,UAEX,KAAKvG,EACJ,MAAOkG,EACRA,GAAIM,EAAI,CACR,IAAIC,GAAOzG,EAAKmE,UAAY9E,UAAUyD,UAAUqB,SAEhD,IADA+B,EAAIQ,EAAI7E,KAAK8E,KAAOF,EAAO,IAAgB3F,KAAKmE,OAAO2B,WAChC,QAAnB9F,KAAK+F,WAAsB,CAC9B,GAAIC,EACJhG,MAAKiG,YAAYC,cAAe,EAChClG,KAAKkE,WAAalE,KAAKmG,QACvB,KAAK,GAAI9E,GAAI,EAAGA,EAAI9C,UAAUkD,UAAUH,OAAQD,IAC3C9C,UAAU4H,UAAYnG,KAAKyB,UAAUJ,GAAG+E,aAAa,cACxDJ,EAAYhG,KAAKyB,UAAUJ,GAE7B,KAAK9C,UAAUC,IAAI6H,KAAM,CACxB,GAAIC,GAAMN,EAAUO,WAAU,EAC9BvG;KAAKxB,IAAI6H,KAAOC,EAChBA,EAAIjE,UAAY2D,EAAU3D,UAC1BiE,EAAIhD,GAAK,aACTgD,EAAIjE,WAAa,cACjBoB,SAAS+C,KAAK/B,YAAY6B,GAE3B,GAAIG,GAAUhD,SAASiD,eAAe,aACtCD,GAAQ7F,MAAMqE,KAAQI,EAAasB,OAAStB,EAAauB,SAAW,GAAM,KAC1EH,EAAQ7F,MAAMiG,MAASxB,EAAayB,OAASzB,EAAa0B,SAAW,GAAM,KAE5E,MAAO3B,IAER7G,UAAUkB,YAAY,uBAAwB,WAC7C,GAAkB,eAAdO,KAAKC,OACe,QAAnBD,KAAK+F,WAAsB,CAC9B,GAAIiB,GAAMvD,SAASiD,eAAe,aAClCM,GAAIvB,WAAWwB,YAAYD,GAC3BzI,UAAUC,IAAI6H,MAAO,EAGvB,OAAO,IAGR9H,UAAUkB,YAAY,cAAe,SAAS6D,EAAI4D,EAAMC,GAGvD,MAFIA,IAA8B,eAAdnH,KAAKC,QACxBD,KAAKkE,WAAaZ,IACZ;GAGR/E,UAAUC,IAAI8D,kBAEd/D,UAAUkB,YAAY,UAAW,SAAS2H,GACzC,GAAkB,eAAdpH,KAAKC,QAA6B1B,UAAU4F,OAAOC,oBAA8DC,SAAxC9F,UAAU4F,OAAOC,oBAAmC,CAChI,GAAI7F,UAAUC,IAAI8D,eACjB,IAAK,GAAIjB,GAAI,EAAGA,EAAIrB,KAAKxB,IAAI8D,eAAehB,OAAQD,IAAK,CACxD,GAAIiF,GAAMtG,KAAKxB,IAAI8D,eAAejB,EAClCiF,GAAIjE,UAAYiE,EAAIjE,UAAUgF,QAAQ,0BAA2B,IAQnE,MALArH,MAAKsH,aAAaF,EAAU,SAASpB,GACpCA,EAAU3D,WAAa,0BACvB9D,UAAUC,IAAI8D,eAAexB,KAAKkF,KAEnCzH,UAAUgJ,OAAOH,IACV;CAER,OAAO"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_wp.js b/codebase/sources/ext/dhtmlxscheduler_wp.js new file mode 100644 index 0000000..89da447 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_wp.js @@ -0,0 +1,20 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onLightBox",function(){ + if (this._cover){ + try{ + this._cover.style.height = this.expanded ? "100%" : ((document.body.parentNode||document.body).scrollHeight+"px"); + } catch(e) {} + } +}); + +scheduler.form_blocks.select.set_value=function(node,value,ev){ + if (typeof value == "undefined" || value === "") + value = (node.firstChild.options[0]||{}).value; + node.firstChild.value=value||""; +};
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_wp.js.map b/codebase/sources/ext/dhtmlxscheduler_wp.js.map new file mode 100644 index 0000000..1175527 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_wp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_wp.js.map","sources":["dhtmlxscheduler_wp.js"],"names":["scheduler","attachEvent","this","_cover","style","height","expanded","document","body","parentNode","scrollHeight","e","form_blocks","select","set_value","node","value","firstChild","options"],"mappings":"AAAAA,UAAUC,YAAY,aAAa,WAClC,GAAIC,KAAKC,OACR,IACCD,KAAKC,OAAOC,MAAMC,OAASH,KAAKI,SAAW,QAAWC,SAASC,KAAKC,YAAYF,SAASC,MAAME,aAAa,KAC3G,MAAMC,OAIVX,UAAUY,YAAYC,OAAOC,UAAU,SAASC,EAAKC,IAChC,mBAATA,IAAkC,KAAVA,KAClCA,GAASD,EAAKE,WAAWC,QAAQ,QAAQF,OAC1CD,EAAKE,WAAWD,MAAMA,GAAO"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_year_view.js b/codebase/sources/ext/dhtmlxscheduler_year_view.js new file mode 100644 index 0000000..ca2f5a4 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_year_view.js @@ -0,0 +1,391 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.year_x = 4; +scheduler.config.year_y = 3; +scheduler.xy.year_top = 0; + +scheduler.templates.year_date = function(date) { + return scheduler.date.date_to_str(scheduler.locale.labels.year_tab + " %Y")(date); +}; +scheduler.templates.year_month = scheduler.date.date_to_str("%F"); +scheduler.templates.year_scale_date = scheduler.date.date_to_str("%D"); +scheduler.templates.year_tooltip = function(s, e, ev) { + return ev.text; +}; + +(function() { + var is_year_mode = function() { + return scheduler._mode == "year"; + }; + + scheduler.dblclick_dhx_month_head = function(e) { + if (is_year_mode()) { + var t = (e.target || e.srcElement); + if (t.parentNode.className.indexOf("dhx_before") != -1 || t.parentNode.className.indexOf("dhx_after") != -1) return false; + var start = this.templates.xml_date(t.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("date")); + start.setDate(parseInt(t.innerHTML, 10)); + var end = this.date.add(start, 1, "day"); + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow(start.valueOf(), end.valueOf(), e); + } + }; + + var chid = scheduler.changeEventId; + scheduler.changeEventId = function() { + chid.apply(this, arguments); + if (is_year_mode()) + this.year_view(true); + }; + + + var old = scheduler.render_data; + var to_attr = scheduler.date.date_to_str("%Y/%m/%d"); + var from_attr = scheduler.date.str_to_date("%Y/%m/%d"); + scheduler.render_data = function(evs) { + if (!is_year_mode()) return old.apply(this, arguments); + for (var i = 0; i < evs.length; i++) + this._year_render_event(evs[i]); + }; + + var clear = scheduler.clear_view; + scheduler.clear_view = function() { + if (!is_year_mode()) return clear.apply(this, arguments); + var dates = scheduler._year_marked_cells, + div = null; + for (var date in dates) { + if (dates.hasOwnProperty(date)) { + div = dates[date]; + div.className = "dhx_month_head"; + div.setAttribute("date", ""); + } + } + scheduler._year_marked_cells = {}; + }; + + scheduler._hideToolTip = function() { + if (this._tooltip) { + this._tooltip.style.display = "none"; + this._tooltip.date = new Date(9999, 1, 1); + } + }; + + scheduler._showToolTip = function(date, pos, e, src) { + if (this._tooltip) { + if (this._tooltip.date.valueOf() == date.valueOf()) return; + this._tooltip.innerHTML = ""; + } else { + var t = this._tooltip = document.createElement("DIV"); + t.className = "dhx_year_tooltip"; + document.body.appendChild(t); + t.onclick = scheduler._click.dhx_cal_data; + } + var evs = this.getEvents(date, this.date.add(date, 1, "day")); + var html = ""; + + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + if(!this.filter_event(ev.id, ev)) + continue; + + var bg_color = (ev.color ? ("background:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + + html += "<div class='dhx_tooltip_line' style='" + bg_color + "" + color + "' event_id='" + evs[i].id + "'>"; + html += "<div class='dhx_tooltip_date' style='" + bg_color + "" + color + "'>" + (evs[i]._timed ? this.templates.event_date(evs[i].start_date) : "") + "</div>"; + html += "<div class='dhx_event_icon icon_details'> </div>"; + html += this.templates.year_tooltip(evs[i].start_date, evs[i].end_date, evs[i]) + "</div>"; + } + + this._tooltip.style.display = ""; + this._tooltip.style.top = "0px"; + + + if (document.body.offsetWidth - pos.left - this._tooltip.offsetWidth < 0) + this._tooltip.style.left = pos.left - this._tooltip.offsetWidth + "px"; + else + this._tooltip.style.left = pos.left + src.offsetWidth + "px"; + + this._tooltip.date = date; + this._tooltip.innerHTML = html; + + if (document.body.offsetHeight - pos.top - this._tooltip.offsetHeight < 0) + this._tooltip.style.top = pos.top - this._tooltip.offsetHeight + src.offsetHeight + "px"; + else + this._tooltip.style.top = pos.top + "px"; + }; + + scheduler._year_view_tooltip_handler = function(e){ + if (!is_year_mode()) return; + + var e = e || event; + var src = e.target || e.srcElement; + if (src.tagName.toLowerCase() == 'a') // fix for active links extension (it adds links to the date in the cell) + src = src.parentNode; + if ((src.className || "").indexOf("dhx_year_event") != -1) + scheduler._showToolTip(from_attr(src.getAttribute("date")), getOffset(src), e, src); + else + scheduler._hideToolTip(); + }; + scheduler._init_year_tooltip = function() { + scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._year_view_tooltip_handler); + dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._year_view_tooltip_handler); + }; + + scheduler.attachEvent("onSchedulerResize", function() { + if (is_year_mode()) { + this.year_view(true); + return false; + } + return true; + }); + scheduler._get_year_cell = function(d) { + //there can be more than 1 year in view + //year can start not from January + var m = d.getMonth() + 12 * (d.getFullYear() - this._min_date.getFullYear()) - this.week_starts._month; + var t = this._els["dhx_cal_data"][0].childNodes[m]; + var d = this.week_starts[m] + d.getDate() - 1; + + + return t.childNodes[2].firstChild.rows[Math.floor(d / 7)].cells[d % 7].firstChild; + }; + + scheduler._year_marked_cells = {}; + scheduler._mark_year_date = function(d, ev) { + var date = to_attr(d); + var c = this._get_year_cell(d); + var ev_class = this.templates.event_class(ev.start_date, ev.end_date, ev); + if (!scheduler._year_marked_cells[date]) { + c.className = "dhx_month_head dhx_year_event"; + c.setAttribute("date", date); + scheduler._year_marked_cells[date] = c; + } + c.className += (ev_class) ? (" "+ev_class) : ""; + }; + scheduler._unmark_year_date = function(d) { + this._get_year_cell(d).className = "dhx_month_head"; + }; + scheduler._year_render_event = function(ev) { + var d = ev.start_date; + if (d.valueOf() < this._min_date.valueOf()) + d = this._min_date; + else d = this.date.date_part(new Date(d)); + + while (d < ev.end_date) { + this._mark_year_date(d, ev); + d = this.date.add(d, 1, "day"); + if (d.valueOf() >= this._max_date.valueOf()) + return; + } + }; + + scheduler.year_view = function(mode) { + var temp; + if (mode) { + temp = scheduler.xy.scale_height; + scheduler.xy.scale_height = -1; + } + + scheduler._els["dhx_cal_header"][0].style.display = mode ? "none" : ""; + scheduler.set_sizes(); + + if (mode) + scheduler.xy.scale_height = temp; + + + scheduler._table_view = mode; + if (this._load_mode && this._load()) return; + + if (mode) { + scheduler._init_year_tooltip(); + scheduler._reset_year_scale(); + if (scheduler._load_mode && scheduler._load()){ + scheduler._render_wait = true; + return; + } + scheduler.render_view_data(); + } else { + scheduler._hideToolTip(); + } + }; + scheduler._reset_year_scale = function() { + this._cols = []; + this._colsS = {}; + var week_starts = []; //start day of first week in each month + var b = this._els["dhx_cal_data"][0]; + + var c = this.config; + b.scrollTop = 0; //fix flickering in FF + b.innerHTML = ""; + + var dx = Math.floor(parseInt(b.style.width) / c.year_x); + var dy = Math.floor((parseInt(b.style.height) - scheduler.xy.year_top) / c.year_y); + if (dy < 190) { + dy = 190; + dx = Math.floor((parseInt(b.style.width) - scheduler.xy.scroll_width) / c.year_x); + } + + var summ = dx - 11; + var left = 0; + var week_template = document.createElement("div"); + var dummy_date = this.date.week_start(scheduler._currentDate()); + for (var i = 0; i < 7; i++) { + this._cols[i] = Math.floor(summ / (7 - i)); + this._render_x_header(i, left, dummy_date, week_template); + dummy_date = this.date.add(dummy_date, 1, "day"); + summ -= this._cols[i]; + left += this._cols[i]; + } + week_template.lastChild.className += " dhx_scale_bar_last"; + + var sd = this.date[this._mode + "_start"](this.date.copy(this._date)); + var ssd = sd; + var d = null; + for (var i = 0; i < c.year_y; i++) + for (var j = 0; j < c.year_x; j++) { + d = document.createElement("DIV"); + d.style.cssText = "position:absolute;"; + d.setAttribute("date", this.templates.xml_format(sd)); + d.innerHTML = "<div class='dhx_year_month'></div><div class='dhx_year_week'>" + week_template.innerHTML + "</div><div class='dhx_year_body'></div>"; + d.childNodes[0].innerHTML = this.templates.year_month(sd); + + var dd = this.date.week_start(sd); + var ed = this._reset_month_scale(d.childNodes[2], sd, dd); + + var r = d.childNodes[2].firstChild.rows; + for (var k=r.length; k<6; k++) { + r[0].parentNode.appendChild(r[0].cloneNode(true)); + for (var ri= 0, len = r[k].childNodes.length; ri < len; ri++) { + r[k].childNodes[ri].className = "dhx_after"; + r[k].childNodes[ri].firstChild.innerHTML = scheduler.templates.month_day(ed); + ed = scheduler.date.add(ed,1,"day"); + } + } + b.appendChild(d); + + d.childNodes[1].style.height = d.childNodes[1].childNodes[0].offsetHeight + "px"; // dhx_year_week should have height property so that day dates would get correct position. dhx_year_week height = height of it's child (with the day name) + var dt = Math.round((dy - 190) / 2); + d.style.marginTop = dt + "px"; + this.set_xy(d, dx - 10, dy - dt - 10, dx * j + 5, dy * i + 5 + scheduler.xy.year_top); + + week_starts[i * c.year_x + j] = (sd.getDay() - (this.config.start_on_monday ? 1 : 0) + 7) % 7; + sd = this.date.add(sd, 1, "month"); + + } + this._els["dhx_cal_date"][0].innerHTML = this.templates[this._mode + "_date"](ssd, sd, this._mode); + this.week_starts = week_starts; + week_starts._month = ssd.getMonth(); + this._min_date = ssd; + this._max_date = sd; + }; + + var getActionData = scheduler.getActionData; + scheduler.getActionData = function(n_ev) { + if(!is_year_mode()) + return getActionData.apply(scheduler, arguments); + + var trg = n_ev?n_ev.target:event.srcElement; + var date = scheduler._get_year_month_date(trg); + + var day = scheduler._get_year_month_cell(trg); + var pos = scheduler._get_year_day_indexes(day); + + if(pos && date){ + date = scheduler.date.add(date, pos.week, "week"); + date = scheduler.date.add(date, pos.day, "day"); + }else{ + date = null; + } + + return { + date:date, + section:null + }; + + }; + scheduler._get_year_day_indexes = function(targetCell){ + var month = scheduler._locate_year_month_table(targetCell); + if(!month) + return null; + + var week = 0, day = 0; + for(var week = 0, weeks = month.rows.length; week < weeks;week ++){ + var w = month.rows[week].getElementsByTagName("td"); + for(var day = 0, days = w.length; day < days; day++){ + if(w[day] == targetCell) + break; + } + if(day < days) + break; + } + + if(week < weeks) + return {day:day, week:week}; + else + return null; + }; + scheduler._get_year_month_date = function (node){ + var node = scheduler._locate_year_month_root(node); + if(!node) + return null; + + var date = node.getAttribute("date"); + if(!date) + return null; + + return scheduler.date.week_start(scheduler.templates.xml_date(date)); + }; + scheduler._locate_year_month_day = function(n){ + return n.className && n.className.indexOf("dhx_year_event") != -1 && n.hasAttribute && n.hasAttribute("date"); + }; + + var locateEvent = scheduler._locate_event; + scheduler._locate_event = function(node) { + var id = locateEvent.apply(scheduler, arguments); + if(!id){ + var day = scheduler._get_year_el_node(node, scheduler._locate_year_month_day); + + if(!day || !day.hasAttribute("date")) return null; + + var dat = scheduler.templates.xml_date(day.getAttribute("date")); + var evs = scheduler.getEvents(dat, scheduler.date.add(dat, 1, "day")); + if(!evs.length) return null; + + //can be multiple events in the cell, return any single one + id = evs[0].id; + } + return id; + }; + scheduler._locate_year_month_cell = function(n){ + return n.nodeName.toLowerCase() == "td"; + }; + scheduler._locate_year_month_table = function(n){ + return n.nodeName.toLowerCase() == "table"; + }; + scheduler._locate_year_month_root = function(n){ + return n.hasAttribute && n.hasAttribute("date"); + }; + + scheduler._get_year_month_cell = function(node){ + return this._get_year_el_node(node, this._locate_year_month_cell); + }; + + scheduler._get_year_month_table = function(node){ + return this._get_year_el_node (node, this._locate_year_month_table); + }; + scheduler._get_year_month_root = function(node){ + return this._get_year_el_node(this._get_year_month_table(node), this._locate_year_month_root); + }; + scheduler._get_year_el_node = function(node, condition){ + while(node && !condition(node)){ + node = node.parentNode; + } + return node; + }; + + +})(); diff --git a/codebase/sources/ext/dhtmlxscheduler_year_view.js.map b/codebase/sources/ext/dhtmlxscheduler_year_view.js.map new file mode 100644 index 0000000..303c604 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_year_view.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_year_view.js.map","sources":["dhtmlxscheduler_year_view.js"],"names":["scheduler","config","year_x","year_y","xy","year_top","templates","year_date","date","date_to_str","locale","labels","year_tab","year_month","year_scale_date","year_tooltip","s","e","ev","text","is_year_mode","_mode","dblclick_dhx_month_head","t","target","srcElement","parentNode","className","indexOf","start","this","xml_date","getAttribute","setDate","parseInt","innerHTML","end","add","readonly","dblclick_create","addEventNow","valueOf","chid","changeEventId","apply","arguments","year_view","old","render_data","to_attr","from_attr","str_to_date","evs","i","length","_year_render_event","clear","clear_view","dates","_year_marked_cells","div","hasOwnProperty","setAttribute","_hideToolTip","_tooltip","style","display","Date","_showToolTip","pos","src","document","createElement","body","appendChild","onclick","_click","dhx_cal_data","getEvents","html","filter_event","id","bg_color","color","textColor","_timed","event_date","start_date","end_date","top","left","offsetWidth","offsetHeight","_year_view_tooltip_handler","event","tagName","toLowerCase","getOffset","_init_year_tooltip","_detachDomEvent","_els","dhtmlxEvent","attachEvent","_get_year_cell","d","m","getMonth","getFullYear","_min_date","week_starts","_month","childNodes","getDate","firstChild","rows","Math","floor","cells","_mark_year_date","c","ev_class","event_class","_unmark_year_date","date_part","_max_date","mode","temp","scale_height","set_sizes","_table_view","_load_mode","_load","_reset_year_scale","_render_wait","render_view_data","_cols","_colsS","b","scrollTop","dx","width","dy","height","scroll_width","summ","week_template","dummy_date","week_start","_currentDate","_render_x_header","lastChild","sd","copy","_date","ssd","j","cssText","xml_format","dd","ed","_reset_month_scale","r","k","cloneNode","ri","len","month_day","dt","round","marginTop","set_xy","getDay","start_on_monday","getActionData","n_ev","trg","_get_year_month_date","day","_get_year_month_cell","_get_year_day_indexes","week","section","targetCell","month","_locate_year_month_table","weeks","w","getElementsByTagName","days","node","_locate_year_month_root","_locate_year_month_day","n","hasAttribute","locateEvent","_locate_event","_get_year_el_node","dat","_locate_year_month_cell","nodeName","_get_year_month_table","_get_year_month_root","condition"],"mappings":"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"}
\ No newline at end of file |