source: branches/2.5/prototype/modules/mail/js/foldertree.js @ 8117

Revision 8117, 35.9 KB checked in by douglas, 11 years ago (diff)

Ticket #3436 - Nao fechamento de aba de visualizacao de mensagem apos seu arquivamento

  • Property svn:executable set to *
Line 
1var init_tree = 0;
2var selected;
3var over;
4var cp_tree1;
5var cp_tree2;
6var cp_tree3;
7var mail_archive_url;
8
9function unorphanize(root, element) {
10    var ok = false;
11    var f = 0;
12    for (var i=0; i<root.length; i++) {
13        if (root[i].id == element.parentFolder) {
14            element.children = new Array();
15            root[i].children.push(element);
16            return true;
17        } else if (ok = unorphanize(root[i].children, element)) {
18            break;
19        }
20    }
21    return ok;
22}
23function mount_children_localfolders_list(folder){
24    folder.children = new Array();
25    folder.id_search = folder.id;
26    folder.id = 'local_messages_'+folder.id,
27    folder.commonName =  folder.name,
28    folder.parentId = folder.parentid,
29    folder.type = 'localFolder',
30    folder.name = folder.id,
31    folder.messageCount = {
32                             total: folder.messages,
33                             unseen: folder.unseen
34                          }
35
36    if(folder.haschild){
37        expresso_mail_archive.getFoldersList(folder.id_search);
38        folder.children = expresso_mail_archive.folders;
39
40        for(var i = 0; i < folder.children.length; i++){
41            mount_children_localfolders_list(folder.children[i]);
42        }
43
44    }
45}
46
47function count_unseen_children(folder){
48    if(folder.children.length){
49        for(var i=0; i< folder.children.length; i++){
50           
51                if(folder.children[i].children.length)
52                folder.children[i]['children_unseen'] = (folder.children[i]['children_unseen'] ? folder.children[i]['children_unseen'] : 0) + count_unseen_children(folder.children[i]);   
53           
54            folder['children_unseen'] = (folder['children_unseen'] ? folder['children_unseen'] : 0)+ (folder.children[i]['children_unseen'] ? folder.children[i]['children_unseen'] : 0) + parseInt(folder.children[i].messageCount.unseen);           
55        }
56        return folder['children_unseen'];
57    } else {
58        return parseInt(folder.messageCount.unseen);
59    }
60}
61
62function valid_tabs(children_of_this_folder, folder_to_move){
63    var borders_open = $("#border_tr").children();
64
65    var error = false;
66    for(var i = 1; i <= borders_open.length -2; i ++){
67        //VERIFICA A CADA FILHO DA PASTA SE ESTA eventNSAGEM E DESTA PASTA
68        $.each(children_of_this_folder, function(index, value){
69            if($(children_of_this_folder[index]).attr('id') == openTab.imapBox[$(borders_open[i]).find("input[type=hidden]").attr("name")]){
70                error = true;
71                write_msg(get_lang("One or more messages from any sub-folder are open"));
72                return error;
73               
74            }
75        });
76        if(error){
77            return error;
78        }
79        //VERIFICA SE EXISTE NA PASTA A SER MOVIDA
80        if(openTab.imapBox[$(borders_open[i]).find("input[type=hidden]").attr("name")] == folder_to_move){
81            error = true;
82            write_msg(get_lang("One or more messages from this folder are open"));
83            return error;
84        }
85    }
86}
87
88function normalizeFolder( folders ){
89
90    if(folders  == "")
91        return folders;
92
93    if( !$.isArray( folders  )){
94        var array = [];
95
96        for(var i in folders){
97
98            if(i.indexOf('(javascript)') < 0)
99                array[array.length] = folders[i];
100        }
101
102        folders = array;
103
104    }
105
106    return folders;
107
108}
109
110function draw_new_tree_folder(callback, force){
111
112    var folders =  normalizeFolder( Folder.get( false, force ) );
113
114if(preferences.use_local_messages == 1){
115
116    if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) { //MailArchive
117        //pega pastas locais do mailarchiver e insere no array de pastas
118            expresso_mail_archive.getFoldersList("home");
119            treeFolders = expresso_mail_archive.folders;
120
121            for(var i=0; i<treeFolders.length; i++ ){
122                mount_children_localfolders_list(treeFolders[i]);
123            }
124           
125            for(var i = 0; i < treeFolders.length; i++){
126                folders.push(treeFolders[i]);
127            }
128 
129    }
130}
131
132    if(!selected){
133        selected = "INBOX";
134    }
135
136    var tree1 = new Array();
137    var tree2 = new Array();
138    var tree3 = new Array();
139     
140    for (var i=0; i<folders.length; i++) {
141         
142        if(/*/^INBOX/.test(folders[i].id)*/folders[i].id.substr(0,5) == "INBOX") {
143            if (!unorphanize(tree1, folders[i])) {
144                folders[i].children = new Array();
145
146                tree1.push(folders[i]);
147            }
148        }
149        else if (/*/^user/.test(folders[i].id)*/folders[i].id.substr(0,4) == "user") {
150            if (!unorphanize(tree2, folders[i])) {
151                folders[i].children = new Array();
152                tree2.push(folders[i]);
153            }
154        }
155        else if (/*/^local_messages/.test(folders[i].id)*/folders[i].id.substr(0,14) == "local_messages") {
156           
157                tree3.push(folders[i]);
158           
159        }
160    }
161   
162    for(var i =0; i<tree1.length; i++){
163        count_unseen_children(tree1[i]);
164    }
165    for(var i =0; i<tree2.length; i++){
166        count_unseen_children(tree2[i]);
167    }
168    for(var i =0; i<tree3.length; i++){
169        count_unseen_children(tree3[i]);
170    }
171    cp_tree1 = tree1;
172    cp_tree2 = tree2;
173    cp_tree3 = tree3;
174    var shared_acls = {};
175
176    $.each(cp_tree2, function(index, value){
177        shared_acls[value.id] = value.acl_share;
178    });
179   
180    if(preferences.use_local_messages == 1){
181      $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu");
182      mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin";
183    }
184   
185    var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', {folders: [tree1, tree2, tree3]});
186    var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview({
187            persist: "cookie",
188            animated: "fast"
189    }).find(".folder").unbind("click").click(function(event){
190
191        if ($(this).next().hasClass("local-connect")) {
192            return;
193        }
194
195        if ($(this).hasClass("local-folder")) {
196            return;
197        }
198       
199        // MUDANÇA DE PASTAS!
200        var target = $(this);   
201       
202        if($(".folders-loading").length)
203            return;
204       
205        if($(event.target).parent().is(".float-menu"))
206            return;
207           
208        if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable-hitarea, .lastExpandable-hitarea, .treeview ,.folder_unseen,.ui-icon, .float-menu, .new_folder, .folders-loading, .head_folder, .shared-folders') )
209            return;
210       
211        if( target.parent().find(".new_folder").length)
212            return;
213           
214        if( !target.attr('id') )
215            target = target.parent();
216        if (target[0] == $(".mainfoldertree")[0]) return;
217        var uiId = target.attr('id');
218        var child = target.find('.folder');
219         
220        if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')){
221            $('.filetree span.folder.selected').removeClass('selected');
222            $(target).children('.folder').addClass('selected');
223        }
224        $(this).addClass("folders-loading");
225        selected = target.attr('id');
226        change_folder(target.attr('id'), child.attr('title')); 
227
228        $.ajax({
229              url : "controller.php?"+ $.param( { action: "$this.imap_functions.get_folders_list", folder: target.attr('id') } ),
230              success : function(data){
231                  data = connector.unserialize(data);
232
233                  if(data)
234                    build_quota(data);
235              }
236        });
237
238    }).filter('.followup-messages').click(function(event, ui){
239        search_emails("UNDELETED KEYWORD \"$Followupflagged\"");
240    }).end().end();
241
242    $('.upper').droppable({
243        over: function(event, ui){
244            $('#content_folders').autoscroll({
245                direction: 'up',
246                step: 150,
247                scroll: true
248            });
249        },
250        out: function(event, ui){
251            $('#content_folders').autoscroll('destroy');
252        }
253    });
254
255    $('.lower').droppable({
256        over: function(event, ui){
257            $('#content_folders').autoscroll({
258                direction: 'down',
259                step: 150,
260                scroll: true
261            });
262        },
263        out: function(event, ui){
264            $('#content_folders').autoscroll('destroy');
265        }
266    });
267
268
269
270    folders_html.find('[id="'+selected+'"]').children().addClass("selected");
271    $(".folder").not(".head_folder").not(".shared-folders").not(".shared-folders + ul .folder").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").draggable({
272        // DRAG DE PASTAS
273        start : function(){
274            $(this).css("color", "gray");
275            $('.upper, .lower').show();
276            $(".lower").css("top", ($("#content_folders").height()-18) + $("#content_folders").offset().top);
277        },
278        stop : function(){
279            $(this).css("color", "");
280            $('.upper, .lower').hide();
281        },
282        revert: "invalid",
283        helper: function(event){
284            if($.trim(($(this).text().split("["))[0]).length > 18)
285                return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]).substring(0,18) + "...", type: "folder"}));
286            return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]), type: "folder"}));
287        },
288        delay: 150,
289        refreshPositions: true,
290        zIndex : 2700,
291        //scroll: true,
292        //scrollSensitivity: 100,
293        //scrollSpeed: 100
294        containment: $("#divAppbox")
295    });
296    $(".folder").not(".head_folder").not(".shared-folders").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").end().droppable({
297        //DROP DE PASTAS
298        over : function(a, b){
299            //INICIO : SE A PASTA CONTER FILHAS EXPANDE
300            over = $(this);
301            $(this).addClass("folder-over");
302            if(($(this)[0] != $(this).parent().find(".head_folder")[0]))
303                if($(this).prev()[0])
304                    if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){
305                        setTimeout(function(){
306                            if(over.hasClass("folder-over")){
307                                over.prev().trigger("click");
308                            }
309                        }, 500);
310                       
311                    }
312            //FIM : SE A PASTA CONTER FILHAS EXPANDE           
313            //$("#content_folders").stop().scrollTo($(this), {axis:'y', margin:true, offset:-50, duration:400});     
314            //SETA BORDA EM VOLTA DA PASTA
315            //
316        },
317        out : function(){
318            //RETIRA BORDA EM VOLTA DA PASTA
319            $(this).removeClass("folder-over");
320        },
321        drop : function(event, ui){
322            $(this).removeClass("folder-over");
323
324            if($(this).parent().attr('id') == undefined){
325                var folder_to = 'INBOX';
326                var to_folder_title = get_lang("Inbox");
327            }else{
328                var folder_to = $(this).parent().attr('id');
329                var to_folder_title = $(this).attr('title');
330            }       
331            var folder_to_move = ui.draggable.parent().attr('id');
332            var border_id = ui.draggable.find("input[type=hidden]").attr("name");
333            // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS :
334            if(folder_to_move == "tbody_box"){
335                move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true);
336                //Correção para realinhamento da grid de mensagens no navegador Chrome.
337                if(is_webkit){
338                    var table = $('#table_box');
339                    $('#divScrollMain_0').html('');
340                    $('#divScrollMain_0').html(table);
341                    $(".ui-draggable-dragging").remove();
342                }
343                return;
344            }
345            //SE FOR DE UMA PESQUISA RAPIDA
346            else if(ui.draggable.parents('[id^="content_id_"]')[0]){
347                move_search_msgs("content_id_"+border_id, folder_to, to_folder_title);
348                return;
349            }
350            // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA
351            else if(folder_to_move == "border_tr"){
352                var id_msg = border_id.split("_")[0];
353                folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder());
354                alternate_border(border_id);
355                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true);
356                return;
357            }
358            // SE O DROP VIER DA LISTA DE PASTAS
359            else{
360                                if($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder")
361                {
362                    return write_msg(get_lang("It isn't possible to send a folder by Archiver to My folders"));
363                }
364                else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder")
365                {
366                    return write_msg(get_lang("It isn't possible to send a folder by My folders to Archiver"));
367                }
368                var folder_to_exist = folder_to_move.split(cyrus_delimiter);   
369                folder_to_exist = folder_to+cyrus_delimiter+folder_to_exist[folder_to_exist.length-1];
370               
371                //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS
372
373                if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)){
374                    return;
375                }
376                //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS;
377               
378                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL
379                if(folder_to_exist == folder_to_move){
380                    return write_msg(get_lang("Thie folder is already in this place"));
381                }
382               
383                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO
384                if(folder_to_move == get_current_folder()){
385                    return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!"));
386                }
387               
388                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO
389                if(ui.draggable.parent().find(".selected")[0]){
390                    return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!"));
391                }
392               
393                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA
394                if(ui.draggable.parent().find('[id="'+folder_to+'"]')[0]){
395                    return write_msg(get_lang("It's not possible to move this folder to its subfolders!"));
396                }                   
397               
398                if($('[id="'+folder_to_exist+'"]').length){
399                    return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name"));
400                }
401               
402                $(this).addClass("folders-loading");
403
404
405                if($(this).parents("li").find("input").first().val() == "localFolder"){
406                    var idFolder = $(this).parent().attr("id").split("_")[2];
407
408                    expresso_mail_archive.moveFolder(idFolder, folder_to_move.split("_")[2]);
409                     cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
410                } else {
411                    $.ajax({
412                        url : "controller.php?"+ $.param( { action: "$this.imap_functions.move_folder", folder_to_move: folder_to_move, folder_to: folder_to } ),
413                        success : function(data){
414                            cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
415                            data = connector.unserialize(data);
416                            if(data == "Permission denied"){
417                                write_msg(get_lang("Permission denied"));
418                            }else if(data){
419                                write_msg(get_lang("The folder was successfully moved"));
420                            } else {
421                                write_msg(get_lang("ERROR moving your folder."));
422                            }
423                        }
424                    });
425                }
426            }
427        }
428    });
429    $(".folder").not(".shared-folders, .followup-messages").parent().find(".folder").hover(
430        function(){
431            //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO!
432            if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect"))){ /*se houver a classe local-connect, não adiciona o botão de conectar*/
433                var folder_ = $(this);
434                var folder_name;
435                var shared = {
436                    head : false,
437                    valid : false
438                };
439                if(folder_.parent().attr('id')){
440                    folder_name = folder_.parent().attr('id').split(cyrus_delimiter);
441                    folder_name = folder_name[folder_name.length -1];
442                    shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false;
443                }else
444                    folder_name = "Root";
445               
446                if(shared.valid){
447                    shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ?  true : false;
448                    var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter);
449                    var acls = shared_acls[folder_name_parts[0]+cyrus_delimiter+folder_name_parts[1]];
450                }
451
452                html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {name_folder : folder_name, flag : shared, acl : acls});                   
453                    //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN
454                var esc = false;
455                $(folder_).append(html).find(".float-menu-edit").click(function(){
456                    var folder_id = $(this).parents(".closed:first").attr('id');
457                    var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]);
458                    if($(this).parents(".closed:first").find("span:first").hasClass("selected"))
459                        return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!"));
460                    if($(this).parents(".closed:first").find("span.selected").length)
461                        return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!"));
462                    if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
463                        return;
464                    $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>");
465                    $(".new_folder").focus().keydown(function(event){
466                        event.stopPropagation();
467                        if(event.keyCode == 13){
468                            if($(this).val() != ""){
469                                /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
470                                 * em parte do nome (palavra reservada para pastas locais) */
471                                if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1){
472                                    return write_msg(get_lang("cannot create folder. try other folder name"));
473                                }
474                                var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val());
475                                if($('[id="'+new_name+'"]').length){
476                                    $(".folders-loading").removeClass("folders-loading");
477                                    write_msg(get_lang("Mailbox already exists"));
478                                    return draw_new_tree_folder();
479                                }
480                                $(".new_folder").parent().addClass("folders-loading");
481                               
482                                if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1){
483                                    var idFolder = $(this).parents("li").first().attr("id").split("_")[2];
484                                    expresso_mail_archive.renameFolder(idFolder, new_name);
485                                     cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
486                                } else {
487
488                                $.ajax({
489                                    url : "controller.php?action=$this.imap_functions.ren_mailbox",
490                                    type : "POST",
491                                    data : "current="+folder_id+"&rename="+new_name,
492                                    success : function(data){
493                                        data = connector.unserialize(data);
494                                        if(data == "Permission denied"){
495                                            $(".folders-loading").removeClass("folders-loading");
496                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
497                                            return write_msg(get_lang("Permission denied"));
498                                        }
499                                        write_msg(get_lang("The folder was successfully rename"));
500                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
501                                    }
502                                });
503
504                                }
505                            }else{
506                                $(".new_folder").focusout();
507                            }
508                        }else if( event.keyCode == 27){
509                            draw_new_tree_folder();
510                        }
511                    }).focusout(function(){
512                        draw_new_tree_folder();
513                    }).val(name);
514                })
515                //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END
516                //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN
517                .end().find(".float-menu-remove").click(function(){
518                   
519                    var folder_id = $(this).parents(".closed:first").attr('id');
520                    var folder_name = "<strong>"+$.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0])+"</strong>";
521                   
522                    if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
523                        return;
524                    $(this).parents(".closed:first").find(".folder").addClass("folders-loading");
525                   
526                    if($(this).parents(".closed:first").find("ul").length){
527                        $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
528                        return write_msg(get_lang("Delete/move subfolders first"));
529                    }
530                    if($(this).parents(".closed:first").find("span.selected").length){
531                        $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
532                        return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!"));
533                    }
534                    var folder_span = $(this);
535                    var confirm_text = get_lang("Do you wish to exclude the folder ");
536
537                    $.Zebra_Dialog(confirm_text+folder_name, {
538                        'type': 'question',
539                        'overlay_opacity': '0.5',
540                                                'custom_class': 'custom-zebra-filter',
541                        'buttons':  [get_lang('Yes'), get_lang('No')],
542                        'onClose':  function(caption) {
543
544                            if(caption == get_lang('Yes')){
545                                if(folder_span.parents("li").find("input").first().val() == "localFolder"){
546                                    var idFolder = folder_span.parents("li").first().attr("id").split("_")[2];
547                                    expresso_mail_archive.deleteFolder(idFolder, folder_name);
548                                     cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
549                                } else {
550                                $.ajax({
551                                    url : "controller.php?action=$this.imap_functions.delete_mailbox",
552                                    type: "POST",
553                                    data : "del_past="+folder_id,
554                                    success : function(data){
555                                        data = connector.unserialize(data);
556                                        if(data == "Mailbox does not exist"){
557                                            $(".folders-loading").removeClass("folders-loading");
558                                            return write_msg(get_lang("Mailbox does not exist"));
559                                        }else if(data == "Permission denied"){
560                                            $(".folders-loading").removeClass("folders-loading");
561                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
562                                            return write_msg(get_lang("Permission denied"));
563                                        }
564                                        write_msg(get_lang("The folder %1 was successfully removed", folder_name));
565                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
566                                    }
567                                });
568                                }
569                            }else{
570                                folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading");
571                                return;
572                            }
573                        }
574                    });
575                    /* if(!confirm(confirm_text + folder_name)){
576                        $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
577                        return;
578                    } */
579                })
580                //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END
581                //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN
582                .end().find(".float-menu-new").click(function(){
583                    $(this).parents(".float-menu").hide();
584                    var selected_li = $(this).parents(".closed:first");
585                    if(selected_li.find("ul:first").length){
586                        var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first"));                               
587                        if(selected_li.find(".expandable-hitarea").length){
588                            selected_li.find(".expandable-hitarea").trigger('click');
589                        }
590                        selected_li.find("ul:first").treeview({
591                            add: new_folder
592                        });
593                    }else if(selected_li.length){
594                        var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);                               
595                        selected_li.treeview({
596                            add: new_folder
597                        });
598                    }else{
599                        selected_li = $(this).parents(".head_folder").parent();
600                        if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length){
601                            $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click');
602                        }
603                        var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);                               
604                        selected_li.treeview({
605                            add: new_folder
606                        });
607                    }
608                    var existsIdenticalFolder = false;
609                    selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event){
610                        event.stopPropagation();
611
612                        existsIdenticalFolder = false;
613
614                    var ok = false;
615                    var makeChildren = function(auxNameFolder, father){
616                        if(auxNameFolder.length == 0) return true;
617
618
619                        if(auxNameFolder[0] == ""){
620                            auxNameFolder.shift();
621                            makeChildren(auxNameFolder, father);
622                            return true;
623                        }
624                        if(ok == false)
625                            expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]);
626                       
627                        expresso_mail_archive.getFoldersList(father);
628
629                        for(var ii =0; ii<expresso_mail_archive.folders.length; ii++){
630                            if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name){
631                                 auxNameFolder.shift();
632                                 save = expresso_mail_archive.folders;
633                                 expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]);
634                                 expresso_mail_archive.folders = save;
635                                 ok = true;
636                                 makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id);
637                                 return true;
638                            }
639                        }
640                    }
641
642
643                        if(event.keyCode == 13){
644                            /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
645                             * em parte do nome (palavra reservada para pastas locais) */
646                            if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1){
647                                return write_msg(get_lang("cannot create folder. try other folder name"));
648                            }
649                            if($(this).parents("li").find("input[type=hidden]").val() == "localFolder"){
650
651                                 $(".new_folder").parent().addClass("folders-loading");
652
653                                 var folderName = $(this).val();
654                                 var folder = (folderName != "" ? folderName : get_lang("New Folder"));
655                                 var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home";
656
657                                 $(this).parents(".treeview:first").find("li").each(function(){
658                                     var eachFolder = $(this).find("span:first").text().trim();
659                                     if(folder == eachFolder){
660                                        existsIdenticalFolder = true;
661                                        return false;
662                                     } 
663                                 });
664
665                                 if(existsIdenticalFolder){
666                                    event.stopPropagation();
667                                    write_msg(get_lang("Mailbox already exists"));
668                                    draw_new_tree_folder();
669                                    return false;
670                                 }
671
672                                 if(folderName.indexOf("/") != -1){
673                                    auxNameFolder = folderName.split("/");
674
675                                    makeChildren(auxNameFolder, father);
676                                 } else {
677                                     var folder = (folderName != "" ? folderName : get_lang("New Folder"));
678                                     create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox") , folder);
679                                 }
680
681                                 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
682                            } else {
683                                if($('[id="'+ (selected_li.attr('id')? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val()+'"]').length){
684                                    $(".folders-loading").removeClass("folders-loading");
685                                    write_msg(get_lang("Mailbox already exists"));
686                                    return draw_new_tree_folder();
687                                }
688                                $(".new_folder").parent().addClass("folders-loading");
689                                create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id')? selected_li.attr('id') : "INBOX"));
690                            }
691
692                        }else if( event.keyCode == 27){
693                            draw_new_tree_folder();
694                        }
695
696                    }).focusout(function(){
697                        if(!existsIdenticalFolder){
698                            draw_new_tree_folder();
699                        }
700                       
701                    });
702                }).end().find(".float-menu-export").click(function(){
703                    //proxy_mensagens.export_all_messages($(this).parents("li:first").attr("id"))
704
705                    var name_box = $(this).parents("li:first").attr("id");
706
707                    var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length-1];
708
709
710                    var hand_export = function(data){
711                                                clean_msg();
712                        if(!data){
713                            write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'))
714                        }else if(data["empty_folder"] || data == "empty_folder"){
715                            write_msg(get_lang("The selected folder is empty."));
716                        }else
717                                                        download_attachments(null, null, data, null,null, name_folder +'.zip');                                         
718                    }
719                    if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder"){                       
720                          expresso_mail_archive.listMessages(name_box.split("_")[2]);
721                          var msgsArchive = expresso_mail_archive.messageslisted;
722                       
723                           buildExportArchiver(msgsArchive, name_box);
724
725                    } else {
726                          cExecute("$this.exporteml.export_all",hand_export,"folder="+name_box); 
727                    }
728                    write_msg(get_lang('You must wait while the messages will be exported...'),true);       
729                });
730                //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END
731            }
732            if(!$(".new_folder").length){
733                $(this).find(".float-menu:first").css("display", "");
734            }
735        },
736        function(){
737            $(this).find(".float-menu:first").hide();
738        }
739    );
740    $("#new_m").html($('.selected').find(".folder_unseen").html() ? $('.selected').find(".folder_unseen").html() : "0").css("color", "red");
741}
Note: See TracBrowser for help on using the repository browser.