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

Revision 7751, 35.3 KB checked in by gustavo, 11 years ago (diff)

Ticket #3293 - Problemas com scroll na listagem de pastas do expressoMail

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