/*
This software is allowed to use under GPL or you need to obtain Commercial or Enterise License
to use it in non-GPL project. Please contact sales@dhtmlx.com for details
*/
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 = "
";
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 = ""+((y_unit.open)?'-':'+')+"
";
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";
div_expand = '';
table_className = "dhx_data_table";
}
var td_content = ""+div_expand+"
"+(scheduler.templates[timeline.name+'_scale_label'](y_unit.key, y_unit.label, y_unit)||y_unit.label)+"
";
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);
if(cell) {
var 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 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