source: branches/1.2/workflow/js/userinterface/processes.js @ 1349

Revision 1349, 10.9 KB checked in by niltonneto, 15 years ago (diff)

Ticket #561 - Inclusão do módulo Workflow faltante nessa versão.

  • Property svn:executable set to *
Line 
1/* configuração do menu */
2var MENU_POS = [
3{
4        // tamanho dos itens
5        'height': 19,
6        'width': 255,
7        'auto-width': true,
8        // offset do menu a partir da origem:
9        //  para o nível principal, a origem é o canto superior esquerdo
10        //  para outros níveis, a origem é o canto superior esquerdo do menu pai
11        'block_top': 186,
12        'block_left': 151,
13        // offsets de itens no mesmo nível
14        'top': 19,
15        'left': 0,
16        // tempo, em milisegundos, em que o menu permanece visível após o cursor "sair" do menu
17        'hide_delay': 300,
18        'css' : {
19                'outer' : ['menuExternoOut', 'menuExternoOver'],
20                'inner' : ['menuInternoOut', 'menuInternoOver']
21        }
22},
23{
24        'width': 140,
25        'block_top': 10,
26        'block_left': 30,
27        'css' : {
28                'outer' : ['submenuExternoOut', 'submenuExternoOver'],
29                'inner' : ['submenuInternoOut', 'submenuInternoOver']
30        }
31}
32];
33
34var menuTimer = null;
35var workflowProcessCache = false;
36
37function checkProcessCache()
38{
39        if (workflowProcessCache == false)
40                return;
41        resultProcesses(workflowProcessCache);
42        workflowProcessCache = false;
43}
44
45function resultProcesses(data)
46{
47        if (_checkError(data))
48                return;
49
50        var content_id_1 = $("content_id_1");
51        if (content_id_1.style.display == 'none')
52        {
53                workflowProcessCache = data;
54                content_id_1.innerHTML = '<span></span>';
55                return;
56        }
57
58        if (data.length == 0)
59        {
60                var parag = document.createElement("P");
61                parag.className = "text_dsp";
62                parag.innerHTML = "Não existem processos disponíveis";
63                content_id_1.appendChild(parag);                                               
64        }
65        else
66        {
67                elem = document.getElementById("table_tools");
68                if (elem)
69                        elem.parentNode.removeChild(elem);
70                elem = document.getElementById("table_proc");
71                if (elem)
72                        elem.parentNode.removeChild(elem);
73                draw_processes_grid(data, 1);
74        }
75}
76function draw_processes_folder()
77{
78        cExecute("$this.bo_userinterface.processes", resultProcesses);
79}
80
81function draw_processes_grid(data, page)
82{
83        var content_id_1 = document.getElementById("content_id_1");
84        var available_width = screen.availWidth - 200;
85        var max_columns = Math.floor(available_width / 120);
86        var max_lines = 2;
87       
88        var table_element = document.createElement("TABLE");
89        var tbody_element = document.createElement("TBODY");
90        table_element.setAttribute("id", "table_proc");
91        table_element.setAttribute("cellSpacing", "10");
92        table_element.setAttribute("width", "auto");   
93        tr_element = document.createElement("TR");
94               
95        for (i=1; i <= max_lines * max_columns; i++) {
96                td_element = document.createElement("TD");
97                td_element.setAttribute("id", "td_proc_" + (i -1) );
98                td_element.className = "proc_td_bg";
99                td_element.align = "left";
100                tr_element.appendChild(td_element);
101                if ((i % max_columns) == 0) {
102                        tbody_element.appendChild(tr_element);
103                        tr_element = document.createElement("TR");
104                }
105        }       
106        tbody_element.appendChild(tr_element);
107        table_element.appendChild(tbody_element);
108        content_id_1.appendChild(table_element);
109       
110        for (i=1; i <= data.length; i++) {
111                ind = i -1;
112                proc = data[ind];
113                proc_name_dsp = proc.wf_procname;       
114                if (proc_name_dsp.length > 40) {
115                        proc_name_dsp = proc.wf_procname.substr(0,40) + "...";
116                }
117                table_element = document.createElement("TABLE");
118                tbody_element = document.createElement("TBODY");
119               
120                tr_element = document.createElement("TR");
121                td_element = document.createElement("TD");
122                td_element.setAttribute("vAlign", "top");
123                td_element.setAttribute("align", "center");
124                td_element.setAttribute("height", "40");
125                td_element.innerHTML = '<img src="' + proc.wf_iconfile + '" id="processImage_' + ind + '" width="32" height="32">';
126                tr_element.appendChild(td_element);
127                tbody_element.appendChild(tr_element); 
128                eval('tbody_element.onclick = function() { displayProcessMenu(' + ind + '); }');
129                eval('tbody_element.onmouseover = function() { menuTimer = setTimeout("displayProcessMenu(' + ind + ')",400); }');
130                tbody_element.onmouseout = function() { if (menuTimer) clearTimeout(menuTimer); };
131               
132                tr_element = document.createElement("TR");
133                td_element = document.createElement("TD");
134                td_element.setAttribute("width", "106");
135                if (is_ie) {
136                        td_element.setAttribute("height", "60");
137                } else {
138                        td_element.setAttribute("height", "47");
139                }
140                td_element.setAttribute("vAlign", "top");
141                td_element.setAttribute("align", "center");
142                td_element.innerHTML = proc_name_dsp;
143                td_element.innerHTML += "<br><span class='version_dsp'> (v" + proc.wf_version + ")</span></p>";
144                tr_element.appendChild(td_element);
145                tbody_element.appendChild(tr_element); 
146                tbody_element.style.cursor = 'pointer';
147               
148                table_element.appendChild(tbody_element);
149                td_proc = document.getElementById("td_proc_" + ind);
150                td_proc.appendChild(table_element);
151                td_proc.className = "proc_td";
152               
153                createProcessMenu(ind, data[ind]);
154        }
155       
156        for (ix=data.length; ix < max_lines * max_columns; ix++) {
157                elem = document.getElementById("td_proc_" + ix);
158                elem.setAttribute("width", "112");
159                if (is_ie) {
160                        elem.setAttribute("height", "119");
161                } else {
162                        elem.setAttribute("height", "106");
163                }               
164                elem.innerHTML = "&nbsp;";             
165        }
166}
167
168function createProcessMenu(index, data)
169{
170        /* based on the wf_menu_path activity property, generates a javascript object */
171        var preFormatedMenu = new Array();
172        var currentLevel;
173        var urlPreffix = getInstanceURL(0, 0, data['useHTTPS']);
174        urlPreffix = urlPreffix.substr(0, urlPreffix.lastIndexOf('/'));
175
176        for (var i = 0; i < data.length; i++)
177        {
178                var currentMenu = new Array();
179                currentMenu['name'] = data[i].wf_name;
180                currentMenu['url'] = urlPreffix + '/index.php?menuaction=workflow.run_activity.go&activity_id=' + data[i].wf_activity_id;
181                if ((data[i].wf_menu_path != '') && (data[i].wf_menu_path != null))
182                {
183                        var levels = data[i].wf_menu_path.split('/');
184                        currentLevel = preFormatedMenu;
185                        for (var j = 0; j < levels.length; j++)
186                        {
187                                var currentTitle = levels[j];
188                                if (currentLevel[currentTitle])
189                                {
190                                        currentLevel = currentLevel[currentTitle];
191                                        continue;
192                                }
193                                else
194                                {
195                                        currentLevel[currentTitle] = new Array();
196                                        currentLevel = currentLevel[currentTitle];
197                                }
198                        }
199                        currentLevel[currentLevel.length] = currentMenu;
200                }
201                else
202                        preFormatedMenu[preFormatedMenu.length] = currentMenu;
203        }
204
205        /* generate standard actions menu */
206        var graphMenu = new Array();
207        graphMenu['name'] = 'Gráfico do Processo';
208        graphMenu['url'] = "javascript:draw_process_graph(" + data['wf_p_id'] + ",\\'" + data['wf_procname'] + "\\');";
209        preFormatedMenu[preFormatedMenu.length] = graphMenu;
210        var aboutMenu = new Array();
211        aboutMenu['name'] = 'Sobre o Processo';
212        aboutMenu['url'] = "javascript:draw_folder_about(" + data['wf_p_id'] + ");";
213        preFormatedMenu[preFormatedMenu.length] = aboutMenu;
214
215        /* recursivamente, constrói o texto que representa o objeto reconhecido pela engine do Tigra menu */
216        function generateMenuText(root)
217        {
218                var output = '';
219                for (i in root)
220                {
221                        if (typeof root[i] != "function")
222                        {
223                                if (node)
224                                        output += ",\n";
225                                output += '[';
226                                var node = root[i];
227                                if (node['url'])
228                                        output += "'" + node['name'] + "', '" + node['url'] + "', null";
229                                else
230                                        output += "'" + i + '...'  + "', null, null,\n" + generateMenuText(node);
231                                output += ']';
232                        }
233                }
234                return output;
235        }
236
237        /* generate the menu in a way that the Tigra menu engine will understand */
238        var menuItens = eval('[' + generateMenuText(preFormatedMenu) + '];');
239
240        var menuDiv = document.createElement("DIV");
241        menuDiv.setAttribute("id", "menuDiv_" + index);
242        menuDiv.style.display = 'none';
243        $("content_id_1").appendChild(menuDiv);
244
245        /* define the menu position */
246        var processImage = $("processImage_" + index);
247        MENU_POS[0]['block_left'] = Position.page(processImage)[0] + processImage.getWidth();
248        MENU_POS[0]['block_top'] = Position.page(processImage)[1];
249
250        /* create the menu */
251        new menu (menuItens, MENU_POS, menuDiv);
252}
253
254function displayProcessMenu(id)
255{
256        for (var i = 0; i < A_MENUS.length; i++)
257                if (i == id)
258                        $("menuDiv_" + i).show();
259                else
260                        $("menuDiv_" + i).hide();
261}
262
263function draw_process_graph(pid, proc_name)
264{
265        border_id = create_border("Gráfico - " + proc_name);
266        var div = $("content_id_" + border_id);
267        div.style.height = '420px';
268        var imgPreLoad = new Image();
269        imgPreLoad.src = "../index.php?menuaction=workflow.ui_adminactivities.show_graph&p_id=" + pid;
270        function displayPanorama()
271        {
272                var viewer = new experience.panorama.Viewer({
273                                ImageURL: imgPreLoad.src,
274                                ImageWidth: imgPreLoad.width,
275                                ImageHeight: imgPreLoad.height,
276                                IconDirectory: 'js/experience/icons',
277                                RenderIn: "content_id_" + border_id
278                        });
279                viewer.show();
280        }
281        imgPreLoad.onload = displayPanorama;
282}
283
284function draw_folder_about(pid) {
285
286        var proc_about_handler = function(data) {
287                border_id = create_border("Sobre - " + data['wf_procname']);
288                content = document.getElementById("content_id_" + border_id);
289               
290                var table_proc = document.createElement("TABLE");
291                var tbody_proc = document.createElement("TBODY");
292                table_proc.className = "info_table";
293                table_proc.width = "90%";
294                table_proc.align = "center";
295                tr_element = document.createElement("TR");
296                tr_element.className = "info_tr_header";
297                td_element = document.createElement("TD");
298                td_element.innerHTML = "Processo " + data['wf_procname'] + " (v" + data['wf_version'] + ")";
299                tr_element.appendChild(td_element);
300                tbody_proc.appendChild(tr_element);                     
301                tr_element = document.createElement("TR");
302                tr_element.className = "info_tr_simple";
303                td_element = document.createElement("TD");
304                td_element.innerHTML = data['wf_description'];
305                tr_element.appendChild(td_element);             
306                tbody_proc.appendChild(tr_element);
307                table_proc.appendChild(tbody_proc);
308
309                content.innerHTML = "&nbsp;";
310                content.appendChild(table_proc);
311                content.appendChild(document.createElement("BR"));
312       
313                var table_activ = document.createElement("TABLE");
314                var tbody_activ = document.createElement("TBODY");
315                table_activ.className = "info_table";
316                table_activ.width = "90%";
317                table_activ.align = "center";
318                tr_element = document.createElement("TR");
319                tr_element.className = "info_tr_header";
320                td_element = document.createElement("TD");
321                td_element.colSpan = "2";
322                td_element.innerHTML = "Atividades do Processo";
323                tr_element.appendChild(td_element);
324                tbody_activ.appendChild(tr_element);                   
325
326                for (ix = 0; ix < data['wf_activities'].length; ix++) {
327                        tr_element = document.createElement("TR");
328                        tr_element.className = "info_tr_simple";
329                        td_element1 = document.createElement("TD");
330                        td_element1.className = "info_td_activ";
331                        td_element1.width = "35%";
332                        td_element1.innerHTML = activity_icon(data['wf_activities'][ix]['wf_type'], data['wf_activities'][ix]['wf_is_interactive']) + " " + data['wf_activities'][ix]['wf_name'];
333                        td_element2 = document.createElement("TD");
334                        td_element2.width = "65%";
335                        td_element2.innerHTML = data['wf_activities'][ix]['wf_description'];
336                        tr_element.appendChild(td_element1);
337                        tr_element.appendChild(td_element2);   
338                        tbody_activ.appendChild(tr_element);
339                }
340               
341                table_activ.appendChild(tbody_activ);
342                content.appendChild(table_activ);
343                content.appendChild(document.createElement("BR"));
344        };
345        params = "pid=" + pid;
346        cExecute ("$this.bo_userinterface.process_about", proc_about_handler, params);
347}
Note: See TracBrowser for help on using the repository browser.