/* 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 = "
"; 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"+(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_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); 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 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