/* dhtmlxScheduler v.4.2.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; }); 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){ scheduler._grid._sort_marker = null; delete scheduler._gridView; scheduler._rendered=[]; scheduler[objName]._selected_divs = []; 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 { //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 "; 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 = "
"; 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 += "
"; } html += "
"; html +="
"; for (var i=0; i"; 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+= ""; } html+=""; return html; }; scheduler._grid._print_grid_header = function(objName){ var head = "
"; 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 += "
" + (columns[i].label === undefined ? columns[i].id : columns[i].label) + "
"; } head +="
"; return head; };
"+value+"