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

Revision 8189, 38.6 KB checked in by angelo, 11 years ago (diff)

Ticket #3468 - Icones de pastas invertidos no Expresso Mail

  • 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 refreshTreeview(){
111    //Atualização e correção dos ícones expandir/contrair
112    $.each($('.treeview').find('.expandable, .collapsable').filter(':not(.lastExpandable,.lastCollapsable)'),function(i,v){
113      if ( $(v).find('ul').css('display') == "block" ){
114        $(v).removeClass().addClass('collapsable');
115        $(v).find('.hitarea:first').removeClass().addClass('hitarea collapsable-hitarea')
116      }
117    });
118    //Última árvore de pastas
119    $.each($('.treeview').find('.lastExpandable,.lastCollapsable'),function(i,v){
120      if ( $(v).find('ul').css('display') == "block" ){
121        $(v).removeClass().addClass('collapsable lastCollapsable');
122        $(v).find('.hitarea:first').removeClass('expandable-hitarea').addClass('collapsable-hitarea');
123        $(v).find('.hitarea:first').removeClass('lastExpandable-hitarea').addClass('lastCollapsable-hitarea');
124      }
125    });
126}
127
128function draw_new_tree_folder(callback, force)
129{
130
131    var folders = normalizeFolder(Folder.get(false, force));
132
133    if(preferences.use_local_messages == 1)
134    {
135
136        if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true)
137        { //MailArchive
138            //pega pastas locais do mailarchiver e insere no array de pastas
139            expresso_mail_archive.getFoldersList("home");
140            treeFolders = expresso_mail_archive.folders;
141
142            for(var i = 0; i < treeFolders.length; i++)
143            {
144                mount_children_localfolders_list(treeFolders[i]);
145            }
146
147            for(var i = 0; i < treeFolders.length; i++)
148            {
149                folders.push(treeFolders[i]);
150            }
151
152        }
153    }
154
155    if(!selected)
156    {
157        selected = "INBOX";
158    }
159
160    var tree1 = new Array();
161    var tree2 = new Array();
162    var tree3 = new Array();
163   
164    for(var i = 0; i < folders.length; i++)
165    {
166       
167        if(/*/^INBOX/.test(folders[i].id)*/folders[i].id.substr(0,5) == "INBOX")
168        {
169            if(!unorphanize(tree1, folders[i]))
170            {
171                folders[i].children = new Array();
172
173                tree1.push(folders[i]);
174            }
175        }
176        else if(/*/^user/.test(folders[i].id)*/folders[i].id.substr(0,4) == "user")
177        {
178            if(!unorphanize(tree2, folders[i]))
179            {
180                folders[i].children = new Array();
181                tree2.push(folders[i]);
182            }
183        }
184        else if(/*/^local_messages/.test(folders[i].id)*/folders[i].id.substr(0,14) == "local_messages")
185        {
186
187            tree3.push(folders[i]);
188
189        }
190    }
191
192    for(var i = 0; i < tree1.length; i++)
193    {
194        count_unseen_children(tree1[i]);
195    }
196    for(var i = 0; i < tree2.length; i++)
197    {
198        count_unseen_children(tree2[i]);
199    }
200    for(var i = 0; i < tree3.length; i++)
201    {
202        count_unseen_children(tree3[i]);
203    }
204    cp_tree1 = tree1;
205    cp_tree2 = tree2;
206    cp_tree3 = tree3;
207    var shared_acls = {};
208
209    $.each(cp_tree2, function(index, value)
210    {
211        shared_acls[value.id] = value.acl_share;
212    });
213
214    if(preferences.use_local_messages == 1)
215    {
216        $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu");
217        mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin";
218    }
219
220    var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', {
221        folders: [tree1, tree2, tree3]
222    });
223    var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview(
224    {
225        persist: "cookie",
226        animated: "fast"
227    }).find(".folder").unbind("click").click(function(event)
228    {
229
230        if($(this).next().hasClass("local-connect"))
231        {
232            return;
233        }
234
235        if($(this).hasClass("local-folder"))
236        {
237            return;
238        }
239
240        // MUDANÇA DE PASTAS!
241        var target = $(this);
242
243        if($(".folders-loading").length)
244        {
245            return;
246        }
247
248        if($(event.target).parent().is(".float-menu"))
249        {
250            return;
251        }
252
253        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'))
254        {
255            return;
256        }
257
258        if(target.parent().find(".new_folder").length)
259        {
260            return;
261        }
262
263        if(!target.attr('id'))
264        {
265            target = target.parent();
266        }
267        if(target[0] == $(".mainfoldertree")[0])
268        {
269            return;
270        }
271
272        var uiId = target.attr('id');
273        var child = target.find('.folder');
274
275        if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea'))
276        {
277            $('.filetree span.folder.selected').removeClass('selected');
278            $(target).children('.folder').addClass('selected');
279        }
280        $(this).addClass("folders-loading");
281        selected = target.attr('id');
282        change_folder(target.attr('id'), child.attr('title'));
283   
284        $.ajax(
285        {
286            url: "controller.php?" + $.param(
287            {
288                action: "$this.imap_functions.get_folders_list",
289                folder: target.attr('id')
290            }),
291            success: function(data)
292            {
293                data = connector.unserialize(data);
294
295                if(data)
296                {
297                    build_quota(data);
298                }
299            }
300        });
301
302    }).filter('.followup-messages').click(function(event, ui)
303    {
304        search_emails("UNDELETED KEYWORD \"$Followupflagged\"");
305    }).end().end();
306   
307    refreshTreeview();
308   
309    $('.upper').droppable(
310    {
311        over: function(event, ui)
312        {
313            $('#content_folders').autoscroll(
314            {
315                direction: 'up',
316                step: 150,
317                scroll: true
318            });
319        },
320        out: function(event, ui)
321        {
322            $('#content_folders').autoscroll('destroy');
323        }
324    });
325
326    $('.lower').droppable(
327    {
328        over: function(event, ui)
329        {
330            $('#content_folders').autoscroll(
331            {
332                direction: 'down',
333                step: 150,
334                scroll: true
335            });
336        },
337        out: function(event, ui)
338        {
339            $('#content_folders').autoscroll('destroy');
340        }
341    });
342
343
344
345    folders_html.find('[id="' + selected + '"]').children().addClass("selected");
346    $(".folder")
347    .not(".head_folder")
348    .not(".shared-folders")
349    .not(".shared-folders + ul .folder")
350    .parent()
351    .find(".folder")
352    .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash")
353    .draggable(
354    {
355        // DRAG DE PASTAS
356        start: function()
357        {
358            $(this).css("color", "gray");
359            $('.upper, .lower').show();
360            $(".lower").css("top", ($("#content_folders").height() - 18) + $("#content_folders").offset().top);
361        },
362        stop: function()
363        {
364            $(this).css("color", "");
365            $('.upper, .lower').hide();
366        },
367        revert: "invalid",
368        helper: function(event)
369        {
370            if($.trim(($(this).text().split("["))[0]).length > 18) return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {
371                texto: (($(this).text().split("["))[0]).substring(0, 18) + "...",
372                type: "folder"
373            }));
374            return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {
375                texto: (($(this).text().split("["))[0]),
376                type: "folder"
377            }));
378        },
379        delay: 150,
380        refreshPositions: true,
381        zIndex: 2700,
382        //scroll: true,
383        //scrollSensitivity: 100,
384        //scrollSpeed: 100
385        containment: $("#divAppbox")
386    });
387    $(".folder")
388    .not(".head_folder")
389    .not(".shared-folders")
390    .parent()
391    .find(".folder")
392    .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash")
393    .end()
394    .droppable(
395    {
396        //DROP DE PASTAS
397        over: function(a, b)
398        {
399            //INICIO : SE A PASTA CONTER FILHAS EXPANDE
400            $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green");
401            over = $(this);
402            $(this).addClass("folder-over");
403            if(($(this)[0] != $(this).parent().find(".head_folder")[0])) if($(this).prev()[0]) if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0])
404            {
405                setTimeout(function()
406                {
407                    if(over.hasClass("folder-over"))
408                    {
409                        over.prev().trigger("click");
410                    }
411                }, 500);
412
413            }
414            //FIM : SE A PASTA CONTER FILHAS EXPANDE           
415            //SETA BORDA EM VOLTA DA PASTA
416            //
417        },
418        out: function(a, b)
419        {
420            //RETIRA BORDA EM VOLTA DA PASTA
421            $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "");
422            $(this).removeClass("folder-over");
423        },
424        drop: function(event, ui)
425        {
426            $(this).removeClass("folder-over");
427
428            if($(this).parent().attr('id') == undefined)
429            {
430                var folder_to = 'INBOX';
431                var to_folder_title = get_lang("Inbox");
432            }
433            else
434            {
435                var folder_to = $(this).parent().attr('id');
436                var to_folder_title = $(this).attr('title');
437            }
438            var folder_to_move = ui.draggable.parent().attr('id');
439            var border_id = ui.draggable.find("input[type=hidden]").attr("name");
440            // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS :
441            if(folder_to_move == "tbody_box")
442            {
443                move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title, true);
444                //Correção para realinhamento da grid de mensagens no navegador Chrome.
445                if(is_webkit)
446                {
447                    var table = $('#table_box');
448                    $('#divScrollMain_0').html('');
449                    $('#divScrollMain_0').html(table);
450                    $(".ui-draggable-dragging").remove();
451                }
452                return;
453            }
454            //SE FOR DE UMA PESQUISA RAPIDA
455            else if(ui.draggable.parents('[id^="content_id_"]')[0])
456            {
457                move_search_msgs("content_id_" + border_id, folder_to, to_folder_title);
458                return;
459            }
460            // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA
461            else if(folder_to_move == "border_tr")
462            {
463                var id_msg = border_id.split("_")[0];
464                folder = $("#input_folder_" + border_id + "_r")[0] ? $("#input_folder_" + border_id + "_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id] : get_current_folder());
465                alternate_border(border_id);
466                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title, true);
467                return;
468            }
469            // SE O DROP VIER DA LISTA DE PASTAS
470            else
471            {
472                if($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder")
473                {
474                    return write_msg(get_lang("It isn't possible to send a folder by Archiver to My folders"));
475                }
476                else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder")
477                {
478                    return write_msg(get_lang("It isn't possible to send a folder by My folders to Archiver"));
479                }
480                var folder_to_exist = folder_to_move.split(cyrus_delimiter);
481                folder_to_exist = folder_to + cyrus_delimiter + folder_to_exist[folder_to_exist.length - 1];
482
483                //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS
484                if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move))
485                {
486                    return;
487                }
488                //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS;
489                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL
490                if(folder_to_exist == folder_to_move)
491                {
492                    return write_msg(get_lang("Thie folder is already in this place"));
493                }
494
495                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO
496                if(folder_to_move == get_current_folder())
497                {
498                    return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!"));
499                }
500
501                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO
502                if(ui.draggable.parent().find(".selected")[0])
503                {
504                    return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!"));
505                }
506
507                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA
508                if(ui.draggable.parent().find('[id="' + folder_to + '"]')[0])
509                {
510                    return write_msg(get_lang("It's not possible to move this folder to its subfolders!"));
511                }
512
513                if($('[id="' + folder_to_exist + '"]').length)
514                {
515                    return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name"));
516                }
517
518                $(this).addClass("folders-loading");
519
520
521                if($(this).parents("li").find("input").first().val() == "localFolder")
522                {
523                    var idFolder = $(this).parent().attr("id").split("_")[2];
524
525                    expresso_mail_archive.moveFolder(idFolder, folder_to_move.split("_")[2]);
526                    cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
527                }
528                else
529                {
530                    $.ajax(
531                    {
532                        url: "controller.php?" + $.param(
533                        {
534                            action: "$this.imap_functions.move_folder",
535                            folder_to_move: folder_to_move,
536                            folder_to: folder_to
537                        }),
538                        success: function(data)
539                        {
540                            cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
541                            data = connector.unserialize(data);
542                            if(data == "Permission denied")
543                            {
544                                write_msg(get_lang("Permission denied"));
545                            }
546                            else if(data)
547                            {
548                                write_msg(get_lang("The folder was successfully moved"));
549                            }
550                            else
551                            {
552                                write_msg(get_lang("ERROR moving your folder."));
553                            }
554                        }
555                    });
556                }
557            }
558        }
559    });
560    $(".folder")
561    .not(".shared-folders, .followup-messages")
562    .parent()
563    .find(".folder")
564    .not($('#message-attach-dialog').find('.folder'))
565    .hover(
566    function()
567    {
568        //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO!
569        if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect")))
570        { /*se houver a classe local-connect, não adiciona o botão de conectar*/
571            var folder_ = $(this);
572            var folder_name;
573            var shared = {
574                head: false,
575                valid: false
576            };
577            if(folder_.parent().attr('id'))
578            {
579                folder_name = folder_.parent().attr('id').split(cyrus_delimiter);
580                folder_name = folder_name[folder_name.length - 1];
581                shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false;
582            }
583            else folder_name = "Root";
584
585            if(shared.valid)
586            {
587                shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ? true : false;
588                var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter);
589                var acls = shared_acls[folder_name_parts[0] + cyrus_delimiter + folder_name_parts[1]];
590            }
591
592            html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {
593                name_folder: folder_name,
594                flag: shared,
595                acl: acls
596            });
597            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN
598            var esc = false;
599            $(folder_).append(html).find(".float-menu-edit").click(function()
600            {
601                var folder_id = $(this).parents(".closed:first").attr('id');
602                var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]);
603                if($(this).parents(".closed:first").find("span:first").hasClass("selected"))
604                {
605                    return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!"));
606                }
607                if($(this).parents(".closed:first").find("span.selected").length)
608                {
609                    return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!"));
610                }
611                if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
612                {
613                    return;
614                }
615                $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>");
616                $(".new_folder").focus().keydown(function(event)
617                {
618                    event.stopPropagation();
619                    if(event.keyCode == 13)
620                    {
621                        if($(this).val() != "")
622                        {
623                            /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
624                             * em parte do nome (palavra reservada para pastas locais) */
625                            if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1)
626                            {
627                                return write_msg(get_lang("cannot create folder. try other folder name"));
628                            }
629                            var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val());
630                            if($('[id="' + new_name + '"]').length)
631                            {
632                                $(".folders-loading").removeClass("folders-loading");
633                                write_msg(get_lang("Mailbox already exists"));
634                                return draw_new_tree_folder();
635                            }
636                            $(".new_folder").parent().addClass("folders-loading");
637
638                            if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1)
639                            {
640                                var idFolder = $(this).parents("li").first().attr("id").split("_")[2];
641                                expresso_mail_archive.renameFolder(idFolder, new_name);
642                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
643                            }
644                            else
645                            {
646                                $.ajax(
647                                {
648                                    url: "controller.php?action=$this.imap_functions.ren_mailbox",
649                                    type: "POST",
650                                    data: "current=" + folder_id + "&rename=" + new_name,
651                                    success: function(data)
652                                    {
653                                        data = connector.unserialize(data);
654                                        if(data == "Permission denied")
655                                        {
656                                            $(".folders-loading").removeClass("folders-loading");
657                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
658                                            return write_msg(get_lang("Permission denied"));
659                                        }
660                                        write_msg(get_lang("The folder was successfully rename"));
661                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
662                                    }
663                                });
664
665                            }
666                        }
667                        else
668                        {
669                            $(".new_folder").focusout();
670                        }
671                    }
672                    else if(event.keyCode == 27)
673                    {
674                        draw_new_tree_folder();
675                    }
676                }).focusout(function()
677                {
678                    draw_new_tree_folder();
679                }).val(name);
680            })
681            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END
682            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN
683            .end().find(".float-menu-remove").click(function()
684            {
685
686                var folder_id = $(this).parents(".closed:first").attr('id');
687                var folder_name = "<strong>" + $.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0]) + "</strong>";
688
689                if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
690                {
691                    return;
692                }
693                $(this).parents(".closed:first").find(".folder").addClass("folders-loading");
694
695                if($(this).parents(".closed:first").find("ul").length)
696                {
697                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
698                    return write_msg(get_lang("Delete/move subfolders first"));
699                }
700                if($(this).parents(".closed:first").find("span.selected").length)
701                {
702                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
703                    return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!"));
704                }
705                var folder_span = $(this);
706                var confirm_text = get_lang("Do you wish to exclude the folder ");
707
708                $.Zebra_Dialog(confirm_text + folder_name, {
709                    'type': 'question',
710                    'overlay_opacity': '0.5',
711                    'custom_class': 'custom-zebra-filter',
712                    'buttons': [get_lang('Yes'), get_lang('No')],
713                    'onClose': function(caption)
714                    {
715
716                        if(caption == get_lang('Yes'))
717                        {
718                            if(folder_span.parents("li").find("input").first().val() == "localFolder")
719                            {
720                                var idFolder = folder_span.parents("li").first().attr("id").split("_")[2];
721                                expresso_mail_archive.deleteFolder(idFolder, folder_name);
722                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
723                            }
724                            else
725                            {
726                                $.ajax(
727                                {
728                                    url: "controller.php?action=$this.imap_functions.delete_mailbox",
729                                    type: "POST",
730                                    data: "del_past=" + folder_id,
731                                    success: function(data)
732                                    {
733                                        data = connector.unserialize(data);
734                                        if(data == "Mailbox does not exist")
735                                        {
736                                            $(".folders-loading").removeClass("folders-loading");
737                                            return write_msg(get_lang("Mailbox does not exist"));
738                                        }
739                                        else if(data == "Permission denied")
740                                        {
741                                            $(".folders-loading").removeClass("folders-loading");
742                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
743                                            return write_msg(get_lang("Permission denied"));
744                                        }
745                                        write_msg(get_lang("The folder %1 was successfully removed", folder_name));
746                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
747                                    }
748                                });
749                            }
750                        }
751                        else
752                        {
753                            folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading");
754                            return;
755                        }
756                    }
757                });
758            })
759            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END
760            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN
761            .end().find(".float-menu-new").click(function()
762            {
763                $(this).parents(".float-menu").hide();
764                var selected_li = $(this).parents(".closed:first");
765                if(selected_li.find("ul:first").length)
766                {
767                    var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first"));
768                    if(selected_li.find(".expandable-hitarea").length)
769                    {
770                        selected_li.find(".expandable-hitarea").trigger('click');
771                    }
772                    selected_li.find("ul:first").treeview(
773                    {
774                        add: new_folder
775                    });
776                }
777                else if(selected_li.length)
778                {
779                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);
780                    selected_li.treeview(
781                    {
782                        add: new_folder
783                    });
784                }
785                else
786                {
787                    selected_li = $(this).parents(".head_folder").parent();
788                    if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length)
789                    {
790                        $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click');
791                    }
792                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);
793                    selected_li.treeview(
794                    {
795                        add: new_folder
796                    });
797                }
798                var existsIdenticalFolder = false;
799                selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event)
800                {
801                    event.stopPropagation();
802
803                    existsIdenticalFolder = false;
804
805                    var ok = false;
806                    var makeChildren = function(auxNameFolder, father)
807                        {
808                            if(auxNameFolder.length == 0) return true;
809
810
811                            if(auxNameFolder[0] == "")
812                            {
813                                auxNameFolder.shift();
814                                makeChildren(auxNameFolder, father);
815                                return true;
816                            }
817                            if(ok == false)
818                            {
819                                expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]);
820                            }
821
822                            expresso_mail_archive.getFoldersList(father);
823
824                            for(var ii = 0; ii < expresso_mail_archive.folders.length; ii++)
825                            {
826                                if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name)
827                                {
828                                    auxNameFolder.shift();
829                                    save = expresso_mail_archive.folders;
830                                    expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]);
831                                    expresso_mail_archive.folders = save;
832                                    ok = true;
833                                    makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id);
834                                    return true;
835                                }
836                            }
837                        }
838
839
840                    if(event.keyCode == 13)
841                    {
842                        /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
843                         * em parte do nome (palavra reservada para pastas locais) */
844                        if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1)
845                        {
846                            return write_msg(get_lang("cannot create folder. try other folder name"));
847                        }
848                        if($(this).parents("li").find("input[type=hidden]").val() == "localFolder")
849                        {
850
851                            $(".new_folder").parent().addClass("folders-loading");
852
853                            var folderName = $(this).val();
854                            var folder = (folderName != "" ? folderName : get_lang("New Folder"));
855                            var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home";
856
857                            $(this).parents(".treeview:first").find("li").each(function()
858                            {
859                                var eachFolder = $(this).find("span:first").text().trim();
860                                if(folder == eachFolder)
861                                {
862                                    existsIdenticalFolder = true;
863                                    return false;
864                                }
865                            });
866
867                            if(existsIdenticalFolder)
868                            {
869                                event.stopPropagation();
870                                write_msg(get_lang("Mailbox already exists"));
871                                draw_new_tree_folder();
872                                return false;
873                            }
874
875                            if(folderName.indexOf("/") != -1)
876                            {
877                                auxNameFolder = folderName.split("/");
878
879                                makeChildren(auxNameFolder, father);
880                            }
881                            else
882                            {
883                                var folder = (folderName != "" ? folderName : get_lang("New Folder"));
884                                create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox"), folder);
885                            }
886
887                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
888                        }
889                        else
890                        {
891                            if($('[id="' + (selected_li.attr('id') ? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val() + '"]').length)
892                            {
893                                $(".folders-loading").removeClass("folders-loading");
894                                write_msg(get_lang("Mailbox already exists"));
895                                return draw_new_tree_folder();
896                            }
897                            $(".new_folder").parent().addClass("folders-loading");
898                            create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id') ? selected_li.attr('id') : "INBOX"));
899                        }
900
901                    }
902                    else if(event.keyCode == 27)
903                    {
904                        draw_new_tree_folder();
905                    }
906
907                }).focusout(function()
908                {
909                    if(!existsIdenticalFolder)
910                    {
911                        draw_new_tree_folder();
912                    }
913
914                });
915            }).end().find(".float-menu-export").click(function()
916            {
917                var name_box = $(this).parents("li:first").attr("id");
918
919                var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length - 1];
920
921
922                var hand_export = function(data)
923                    {
924                        clean_msg();
925                        if(!data)
926                        {
927                            write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'))
928                        }
929                        else if(data["empty_folder"] || data == "empty_folder")
930                        {
931                            write_msg(get_lang("The selected folder is empty."));
932                        }
933                        else download_attachments(null, null, data, null, null, name_folder + '.zip');
934                    }
935                if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder")
936                {
937                    expresso_mail_archive.listMessages(name_box.split("_")[2]);
938                    var msgsArchive = expresso_mail_archive.messageslisted;
939
940                    buildExportArchiver(msgsArchive, name_box);
941
942                }
943                else
944                {
945                    cExecute("$this.exporteml.export_all", hand_export, "folder=" + name_box);
946                }
947                write_msg(get_lang('You must wait while the messages will be exported...'), true);
948            });
949            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END
950        }
951        if(!$(".new_folder").length)
952        {
953            $(this).find(".float-menu:first").css("display", "");
954        }
955    }, function()
956    {
957        $(this).find(".float-menu:first").hide();
958    });
959    $("#new_m")
960    .html($('.selected .message_unseen_count:first .folder_unseen').html() ? $('.selected .message_unseen_count:first .folder_unseen').html() : "0")
961    .css("color", "red");
962}
Note: See TracBrowser for help on using the repository browser.