source: branches/2.2.0.1/calendar/js/dhtmlx/sources/ext/ext_treetimeline.js @ 4001

Revision 4001, 9.1 KB checked in by rafaelraymundo, 13 years ago (diff)

Ticket #1615 - Componente novo para agenda......................................

Line 
1scheduler.attachEvent("onTimelineCreated", function (obj){
2
3        if(obj.render == "tree") {
4                obj.y_unit_original = obj.y_unit;
5                obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original);
6               
7                scheduler.form_blocks[obj.name]={
8                        render:function(sns) {
9                                var _result = "<div class='dhx_section_timeline' style='overflow: hidden; height: "+sns.height+"px'></div>";
10                                return _result;
11                        },
12                        set_value:function(node,value,ev,config){
13                                var options = scheduler._getArrayForSelect(scheduler.matrix[config.type].y_unit_original, config.type);
14                                node.innerHTML = '';
15                                var temp_select = document.createElement('select');
16                                node.appendChild(temp_select);
17                               
18                                var select = node.getElementsByTagName('select')[0];
19                               
20                                for(var i=0; i<options.length; i++) {
21                                        var temp_option = document.createElement('option');
22                                        temp_option.value = options[i].key;
23                                        if(temp_option.value == ev[scheduler.matrix[config.type].y_property])
24                                                temp_option.selected = true;
25                                        temp_option.innerHTML = options[i].label;
26                                        select.appendChild(temp_option);
27                                }
28                               
29                        },
30                        get_value:function(node,ev,config){
31                                return  node.firstChild.value;
32                        },
33                        focus:function(node){
34                        }
35                };
36        };
37});     
38
39scheduler.attachEvent("onBeforeViewRender", function (render_name, y_unit, timeline){
40        var res = {};
41        if(render_name == "tree"){
42                var height;
43                // section 1
44                var tr_className, style_height, td_className;
45                var div_expand;
46                // section 3
47                var table_className;
48                if(y_unit.children) {
49                        height = timeline.folder_dy||timeline.dy;
50                        if(timeline.folder_dy && !timeline.section_autoheight) {
51                                style_height = "height:"+timeline.folder_dy+"px;";
52                        }
53                        tr_className = "dhx_row_folder";
54                        td_className = "dhx_matrix_scell folder";
55                        div_expand = "<div class='dhx_scell_expand'>"+((y_unit.open)?'-':'+')+"</div>";
56                        table_className = (timeline.folder_events_available)?"dhx_data_table folder_events":"dhx_data_table folder";
57                } else {
58                        height = timeline.dy;
59                        tr_className = "dhx_row_item";
60                        td_className = "dhx_matrix_scell item";
61                        div_expand = '';
62                        table_className = "dhx_data_table";
63                }
64                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, timeline)||y_unit.label)+"</div></div>";
65               
66                res = {
67                        height: height,
68                        style_height: style_height,
69                        //section 1
70                        tr_className: tr_className,
71                        td_className: td_className,
72                        td_content: td_content,
73                        //section 3
74                        table_className: table_className
75                };
76        };
77        return res;
78});
79
80var 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)
81
82scheduler.attachEvent("onBeforeEventChanged", function(event_object, native_event, is_new) {
83        if (scheduler._isRender("tree")) { // if mode's render == tree
84                var section = scheduler.getSection(event_object.section_id);
85                if (typeof section.children != 'undefined' && !scheduler.matrix[scheduler._mode].folder_events_available) {
86                        if (!is_new) { //if old - move back
87                                event_object[scheduler.matrix[scheduler._mode].y_property] = section_id_before;
88                        }
89                        return false;
90                }
91        }
92        return true;
93});
94
95scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){
96        var cell = scheduler._locate_cell_timeline(native_event_object);
97        if(cell) {
98                var section_id = scheduler.matrix[scheduler._mode].y_unit[cell.y].key;
99                if(typeof scheduler.matrix[scheduler._mode].y_unit[cell.y].children != "undefined" && !scheduler.matrix[scheduler._mode].folder_events_available) {
100                        return false;
101                }
102        }       
103        if(scheduler._isRender("tree")) {
104                ev = scheduler.getEvent(event_id);
105                section_id_before = section_id||ev[scheduler.matrix[scheduler._mode].y_property]; // either event id or section_id will be available
106        }
107        return true;
108});             
109
110scheduler._getArrayToDisplay = function(array){ // function to flatten out hierarhical array, used for tree view
111        var result = [];
112        var fillResultArray = function(array, lvl){
113                var level = lvl||0;
114                for(var i=0; i<array.length; i++) {
115                        array[i].level = level;
116                        if(typeof array[i].children != "undefined" && typeof array[i].key == "undefined")
117                                array[i].key=scheduler.uid();
118                        result.push(array[i]);
119                        if(array[i].open && array[i].children) {
120                                fillResultArray(array[i].children, level+1);
121                        }
122                }
123        };
124        fillResultArray(array);
125        return result;
126};
127
128
129scheduler._getArrayForSelect = function(array, mode){ // function to flatten out hierarhical array, used for tree view
130        var result = [];
131        var fillResultArray = function(array){
132                for(var i=0; i<array.length; i++) {
133                        if(scheduler.matrix[mode].folder_events_available) {
134                                result.push(array[i]);
135                        }
136                        else {
137                                if(typeof array[i].children == "undefined") {
138                                        result.push(array[i]);
139                                }
140                        }
141                        if(array[i].children)
142                                fillResultArray(array[i].children, mode);
143                };
144        };
145        fillResultArray(array);
146        return result;
147};
148
149
150/*
151scheduler._toggleFolderDisplay(4) -- toggle display of the section with key 4 (closed -> open)
152scheduler._toggleFolderDisplay(4, true) -- open section with the key 4 (doesn't matter what status was before). False - close.
153scheduler._toggleFolderDisplay(4, false, true) -- close ALL sections. Key is not used in such condition.
154*/
155scheduler._toggleFolderDisplay = function(key, status, all_sections){ // used for tree view
156        var marked;
157        var toggleElement = function(key, array, status, all_sections) {
158                for (var i=0; i<array.length; i++) {
159                        if((array[i].key == key || all_sections) && array[i].children) {
160                                array[i].open = (typeof status != "undefined") ? status : !array[i].open;
161                                marked = true;
162                                if(!all_sections && marked)
163                                        break;
164                        }
165                        if(array[i].children) {
166                                toggleElement(key,array[i].children, status, all_sections);
167                        }
168                }
169        };
170        toggleElement(key,scheduler.matrix[scheduler._mode].y_unit_original, status, all_sections);
171        scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);
172        scheduler.callEvent("onOptionsLoad",[]);
173};
174
175scheduler.attachEvent("onCellClick", function (x, y, a, b, event){
176        if(scheduler._isRender("tree")) {
177                if(!scheduler.matrix[scheduler._mode].folder_events_available) {
178                        if(typeof scheduler.matrix[scheduler._mode].y_unit[y].children != "undefined") {
179                                scheduler._toggleFolderDisplay(scheduler.matrix[scheduler._mode].y_unit[y].key);
180                        }
181                }
182        }
183});
184
185scheduler.attachEvent("onYScaleClick", function (index, value, event){
186        if(scheduler._isRender("tree")) {
187                if(typeof value.children != "undefined") {
188                        scheduler._toggleFolderDisplay(value.key);
189                }
190        }
191});
192
193scheduler.getSection = function(id){
194        if(scheduler._isRender("tree")) {
195                var obj;
196                var findElement = function(key, array) {
197                        for (var i=0; i<array.length; i++) {
198                                if(array[i].key == key)
199                                        obj = array[i];
200                                if(array[i].children)
201                                        findElement(key,array[i].children);
202                        }
203                };
204                findElement(id, scheduler.matrix[scheduler._mode].y_unit_original);
205                return obj||null;
206        }
207};
208
209scheduler.deleteSection = function(id){
210        if(scheduler._isRender("tree")) {
211                var result = false;
212                var deleteElement = function(key, array) {
213                        for (var i=0; i<array.length; i++) {
214                                if(array[i].key == key) {
215                                        array.splice(i,1);
216                                        result = true;
217                                }
218                                if(result)
219                                        break;
220                                if(array[i].children)
221                                        deleteElement(key,array[i].children);
222                        }
223                };
224                deleteElement(id, scheduler.matrix[scheduler._mode].y_unit_original);   
225                scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);
226                scheduler.callEvent("onOptionsLoad",[]);       
227                return result;
228        }       
229};
230
231scheduler.addSection = function(obj, parent_id){
232        if(scheduler._isRender("tree")) {
233                var result = false;
234                var addElement = function(obj, parent_key, array) {
235                        if(!parent_id) {
236                                array.push(obj);
237                                result = true;
238                        }
239                        else {
240                                for (var i=0; i<array.length; i++) {
241                                        if(array[i].key == parent_key && typeof array[i].children != "undefined") {
242                                                array[i].children.push(obj);
243                                                result = true;
244                                        }
245                                        if(result)
246                                                break;
247                                        if(array[i].children)
248                                                addElement(obj,parent_key,array[i].children);
249                                }
250                        }
251                };
252                addElement(obj, parent_id, scheduler.matrix[scheduler._mode].y_unit_original); 
253                scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original);
254                scheduler.callEvent("onOptionsLoad",[]);       
255                return result;
256        }       
257};
258
259
260scheduler.openAllSections = function() {
261        if(scheduler._isRender("tree"))
262                scheduler._toggleFolderDisplay(1, true, true);
263};
264scheduler.closeAllSections = function() {
265        if(scheduler._isRender("tree"))
266                scheduler._toggleFolderDisplay(1, false, true);
267};
268scheduler.openSection = function(section_id){
269        if(scheduler._isRender("tree"))
270                scheduler._toggleFolderDisplay(section_id, true);
271};
272scheduler.closeSection = function(section_id){
273        if(scheduler._isRender("tree"))
274                scheduler._toggleFolderDisplay(section_id, false);
275};
Note: See TracBrowser for help on using the repository browser.