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

Revision 7936, 37.5 KB checked in by antonio, 11 years ago (diff)

Ticket #3366 - Formatação de código para melhor legibilidade.

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