source: trunk/prototype/modules/mail/js/foldertree.js @ 7783

Revision 7783, 35.7 KB checked in by marcosw, 11 years ago (diff)

Ticket #3319 - Correção para alinhamento da grid de mensagens no Chrome

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