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

Revision 8106, 35.8 KB checked in by douglas, 11 years ago (diff)

Ticket #3433 - impossibilidade de renomear pastas locais

  • 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 ($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(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 Archiver to My folders"));
326            } else if ( !$(ui.draggable[0]).parent().find("input").val() &&  $(this).parents("li").find("input").first().val() == "localFolder") {
327                return write_msg(get_lang("Ohh no, it isn't possible to send a folder by My folders to Archiver"));
328            }
329           
330            if($(this).parent().attr('id') == undefined){
331
332                var folder_to = 'INBOX';
333                var to_folder_title = get_lang("Inbox");
334            }else{
335                var folder_to = $(this).parent().attr('id');
336                var to_folder_title = $(this).attr('title');
337            }       
338            var folder_to_move = ui.draggable.parent().attr('id');
339            var border_id = ui.draggable.find("input[type=hidden]").attr("name");
340            // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS :
341            if(folder_to_move == "tbody_box"){
342                move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true);
343                //Correção para realinhamento da grid de mensagens no navegador Chrome.
344                if(is_webkit){
345                    var table = $('#table_box');
346                    $('#divScrollMain_0').html('');
347                    $('#divScrollMain_0').html(table);
348                    $(".ui-draggable-dragging").remove();
349                }
350                return;
351            }
352            //SE FOR DE UMA PESQUISA RAPIDA
353            else if(ui.draggable.parents('[id^="content_id_"]')[0]){
354                move_search_msgs("content_id_"+border_id, folder_to, to_folder_title);
355                return;
356            }
357            // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA
358            else if(folder_to_move == "border_tr"){
359                var id_msg = border_id.split("_")[0];
360                folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder());
361                alternate_border(border_id);
362                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true);
363                return;
364            }
365            // SE O DROP VIER DA LISTA DE PASTAS
366            else{
367                var folder_to_exist = folder_to_move.split(cyrus_delimiter);   
368                folder_to_exist = folder_to+cyrus_delimiter+folder_to_exist[folder_to_exist.length-1];
369               
370                //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS
371
372                if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)){
373                    return;
374                }
375                //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS;
376               
377                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL
378                if(folder_to_exist == folder_to_move){
379                    return write_msg(get_lang("Thie folder is already in this place"));
380                }
381               
382                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO
383                if(folder_to_move == get_current_folder()){
384                    return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!"));
385                }
386               
387                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO
388                if(ui.draggable.parent().find(".selected")[0]){
389                    return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!"));
390                }
391               
392                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA
393                if(ui.draggable.parent().find('[id="'+folder_to+'"]')[0]){
394                    return write_msg(get_lang("It's not possible to move this folder to its subfolders!"));
395                }                   
396               
397                if($('[id="'+folder_to_exist+'"]').length){
398                    return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name"));
399                }
400               
401                $(this).addClass("folders-loading");
402
403
404                if($(this).parents("li").find("input").first().val() == "localFolder"){
405                    var idFolder = $(this).parent().attr("id").split("_")[2];
406
407                    expresso_mail_archive.moveFolder(idFolder, folder_to_move.split("_")[2]);
408                     cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
409                } else {
410                    $.ajax({
411                        url : "controller.php?"+ $.param( { action: "$this.imap_functions.move_folder", folder_to_move: folder_to_move, folder_to: folder_to } ),
412                        success : function(data){
413                            cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
414                            data = connector.unserialize(data);
415                            if(data == "Permission denied"){
416                                write_msg(get_lang("Permission denied"));
417                            }else if(data){
418                                write_msg(get_lang("The folder was successfully moved"));
419                            } else {
420                                write_msg(get_lang("ERROR moving your folder."));
421                            }
422                        }
423                    });
424                }
425            }
426        }
427    });
428    $(".folder").not(".shared-folders, .followup-messages").parent().find(".folder").hover(
429        function(){
430            //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO!
431            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*/
432                var folder_ = $(this);
433                var folder_name;
434                var shared = {
435                    head : false,
436                    valid : false
437                };
438                if(folder_.parent().attr('id')){
439                    folder_name = folder_.parent().attr('id').split(cyrus_delimiter);
440                    folder_name = folder_name[folder_name.length -1];
441                    shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false;
442                }else
443                    folder_name = "Root";
444               
445                if(shared.valid){
446                    shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ?  true : false;
447                    var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter);
448                    var acls = shared_acls[folder_name_parts[0]+cyrus_delimiter+folder_name_parts[1]];
449                }
450
451                html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {name_folder : folder_name, flag : shared, acl : acls});                   
452                    //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN
453                var esc = false;
454                $(folder_).append(html).find(".float-menu-edit").click(function(){
455                    var folder_id = $(this).parents(".closed:first").attr('id');
456                    var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]);
457                    if($(this).parents(".closed:first").find("span:first").hasClass("selected"))
458                        return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!"));
459                    if($(this).parents(".closed:first").find("span.selected").length)
460                        return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!"));
461                    if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
462                        return;
463                    $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>");
464                    $(".new_folder").focus().keydown(function(event){
465                        event.stopPropagation();
466                        if(event.keyCode == 13){
467                            if($(this).val() != ""){
468                                /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
469                                 * em parte do nome (palavra reservada para pastas locais) */
470                                if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1){
471                                    return write_msg(get_lang("cannot create folder. try other folder name"));
472                                }
473                                var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val());
474                                if($('[id="'+new_name+'"]').length){
475                                    $(".folders-loading").removeClass("folders-loading");
476                                    write_msg(get_lang("Mailbox already exists"));
477                                    return draw_new_tree_folder();
478                                }
479                                $(".new_folder").parent().addClass("folders-loading");
480                               
481                                if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1){
482                                    var idFolder = $(this).parents("li").first().attr("id").split("_")[2];
483                                    expresso_mail_archive.renameFolder(idFolder, new_name);
484                                     cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
485                                } else {
486
487                                $.ajax({
488                                    url : "controller.php?action=$this.imap_functions.ren_mailbox",
489                                    type : "POST",
490                                    data : "current="+folder_id+"&rename="+new_name,
491                                    success : function(data){
492                                        data = connector.unserialize(data);
493                                        if(data == "Permission denied"){
494                                            $(".folders-loading").removeClass("folders-loading");
495                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
496                                            return write_msg(get_lang("Permission denied"));
497                                        }
498                                        write_msg(get_lang("The folder was successfully rename"));
499                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
500                                    }
501                                });
502
503                                }
504                            }else{
505                                $(".new_folder").focusout();
506                            }
507                        }else if( event.keyCode == 27){
508                            draw_new_tree_folder();
509                        }
510                    }).focusout(function(){
511                        draw_new_tree_folder();
512                    }).val(name);
513                })
514                //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END
515                //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN
516                .end().find(".float-menu-remove").click(function(){
517                   
518                    var folder_id = $(this).parents(".closed:first").attr('id');
519                    var folder_name = "<strong>"+$.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0])+"</strong>";
520                   
521                    if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
522                        return;
523                    $(this).parents(".closed:first").find(".folder").addClass("folders-loading");
524                   
525                    if($(this).parents(".closed:first").find("ul").length){
526                        $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
527                        return write_msg(get_lang("Delete/move subfolders first"));
528                    }
529                    if($(this).parents(".closed:first").find("span.selected").length){
530                        $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
531                        return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!"));
532                    }
533                    var folder_span = $(this);
534                    var confirm_text = get_lang("Do you wish to exclude the folder ");
535
536                    $.Zebra_Dialog(confirm_text+folder_name, {
537                        'type': 'question',
538                        'overlay_opacity': '0.5',
539                                                'custom_class': 'custom-zebra-filter',
540                        'buttons':  [get_lang('Yes'), get_lang('No')],
541                        'onClose':  function(caption) {
542
543                            if(caption == get_lang('Yes')){
544                                if(folder_span.parents("li").find("input").first().val() == "localFolder"){
545                                    var idFolder = folder_span.parents("li").first().attr("id").split("_")[2];
546                                    expresso_mail_archive.deleteFolder(idFolder, folder_name);
547                                     cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
548                                } else {
549                                $.ajax({
550                                    url : "controller.php?action=$this.imap_functions.delete_mailbox",
551                                    type: "POST",
552                                    data : "del_past="+folder_id,
553                                    success : function(data){
554                                        data = connector.unserialize(data);
555                                        if(data == "Mailbox does not exist"){
556                                            $(".folders-loading").removeClass("folders-loading");
557                                            return write_msg(get_lang("Mailbox does not exist"));
558                                        }else if(data == "Permission denied"){
559                                            $(".folders-loading").removeClass("folders-loading");
560                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
561                                            return write_msg(get_lang("Permission denied"));
562                                        }
563                                        write_msg(get_lang("The folder %1 was successfully removed", folder_name));
564                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
565                                    }
566                                });
567                                }
568                            }else{
569                                folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading");
570                                return;
571                            }
572                        }
573                    });
574                    /* if(!confirm(confirm_text + folder_name)){
575                        $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
576                        return;
577                    } */
578                })
579                //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END
580                //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN
581                .end().find(".float-menu-new").click(function(){
582                    $(this).parents(".float-menu").hide();
583                    var selected_li = $(this).parents(".closed:first");
584                    if(selected_li.find("ul:first").length){
585                        var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first"));                               
586                        if(selected_li.find(".expandable-hitarea").length){
587                            selected_li.find(".expandable-hitarea").trigger('click');
588                        }
589                        selected_li.find("ul:first").treeview({
590                            add: new_folder
591                        });
592                    }else if(selected_li.length){
593                        var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);                               
594                        selected_li.treeview({
595                            add: new_folder
596                        });
597                    }else{
598                        selected_li = $(this).parents(".head_folder").parent();
599                        if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length){
600                            $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click');
601                        }
602                        var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);                               
603                        selected_li.treeview({
604                            add: new_folder
605                        });
606                    }
607                    var existsIdenticalFolder = false;
608                    selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event){
609                        event.stopPropagation();
610
611                        existsIdenticalFolder = false;
612
613                    var ok = false;
614                    var makeChildren = function(auxNameFolder, father){
615                        if(auxNameFolder.length == 0) return true;
616
617
618                        if(auxNameFolder[0] == ""){
619                            auxNameFolder.shift();
620                            makeChildren(auxNameFolder, father);
621                            return true;
622                        }
623                        if(ok == false)
624                            expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]);
625                       
626                        expresso_mail_archive.getFoldersList(father);
627
628                        for(var ii =0; ii<expresso_mail_archive.folders.length; ii++){
629                            if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name){
630                                 auxNameFolder.shift();
631                                 save = expresso_mail_archive.folders;
632                                 expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]);
633                                 expresso_mail_archive.folders = save;
634                                 ok = true;
635                                 makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id);
636                                 return true;
637                            }
638                        }
639                    }
640
641
642                        if(event.keyCode == 13){
643                            /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
644                             * em parte do nome (palavra reservada para pastas locais) */
645                            if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1){
646                                return write_msg(get_lang("cannot create folder. try other folder name"));
647                            }
648                            if($(this).parents("li").find("input[type=hidden]").val() == "localFolder"){
649
650                                 $(".new_folder").parent().addClass("folders-loading");
651
652                                 var folderName = $(this).val();
653                                 var folder = (folderName != "" ? folderName : get_lang("New Folder"));
654                                 var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home";
655
656                                 $(this).parents(".treeview:first").find("li").each(function(){
657                                     var eachFolder = $(this).find("span:first").text().trim();
658                                     if(folder == eachFolder){
659                                        existsIdenticalFolder = true;
660                                        return false;
661                                     } 
662                                 });
663
664                                 if(existsIdenticalFolder){
665                                    event.stopPropagation();
666                                    write_msg(get_lang("Mailbox already exists"));
667                                    draw_new_tree_folder();
668                                    return false;
669                                 }
670
671                                 if(folderName.indexOf("/") != -1){
672                                    auxNameFolder = folderName.split("/");
673
674                                    makeChildren(auxNameFolder, father);
675                                 } else {
676                                     var folder = (folderName != "" ? folderName : get_lang("New Folder"));
677                                     create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox") , folder);
678                                 }
679
680                                 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
681                            } else {
682                                if($('[id="'+ (selected_li.attr('id')? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val()+'"]').length){
683                                    $(".folders-loading").removeClass("folders-loading");
684                                    write_msg(get_lang("Mailbox already exists"));
685                                    return draw_new_tree_folder();
686                                }
687                                $(".new_folder").parent().addClass("folders-loading");
688                                create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id')? selected_li.attr('id') : "INBOX"));
689                            }
690
691                        }else if( event.keyCode == 27){
692                            draw_new_tree_folder();
693                        }
694
695                    }).focusout(function(){
696                        if(!existsIdenticalFolder){
697                            draw_new_tree_folder();
698                        }
699                       
700                    });
701                }).end().find(".float-menu-export").click(function(){
702                    //proxy_mensagens.export_all_messages($(this).parents("li:first").attr("id"))
703
704                    var name_box = $(this).parents("li:first").attr("id");
705
706                    var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length-1];
707
708
709                    var hand_export = function(data){
710                                                clean_msg();
711                        if(!data){
712                            write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'))
713                        }else if(data["empty_folder"] || data == "empty_folder"){
714                            write_msg(get_lang("The selected folder is empty."));
715                        }else
716                                                        download_attachments(null, null, data, null,null, name_folder +'.zip');                                         
717                    }
718                    if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder"){                       
719                          expresso_mail_archive.listMessages(name_box.split("_")[2]);
720                          var msgsArchive = expresso_mail_archive.messageslisted;
721                       
722                           buildExportArchiver(msgsArchive, name_box);
723
724                    } else {
725                          cExecute("$this.exporteml.export_all",hand_export,"folder="+name_box); 
726                    }
727                    write_msg(get_lang('You must wait while the messages will be exported...'),true);       
728                });
729                //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END
730            }
731            if(!$(".new_folder").length){
732                $(this).find(".float-menu:first").css("display", "");
733            }
734        },
735        function(){
736            $(this).find(".float-menu:first").hide();
737        }
738    );
739    $("#new_m").html($('.selected').find(".folder_unseen").html() ? $('.selected').find(".folder_unseen").html() : "0").css("color", "red");
740}
Note: See TracBrowser for help on using the repository browser.